[
  {
    "path": ".dockerignore",
    "content": "*.sh\nfdw_rpm_with_pgspider/\nfdw_rpm_with_postgres/\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.c linguist-detectable=true\n*.h linguist-detectable=true\nexpected/* linguist-detectable=false\nsql/* linguist-detectable=false\n*.md linguist-documentation\n"
  },
  {
    "path": ".github/workflows/CI.yml",
    "content": "name: SQLite FDW test\n\non:\n  workflow_dispatch:\n  pull_request:  \n  push:\n    branches:\n      - master\n      - main\njobs:\n  detect-pgversion:\n    runs-on: ubuntu-22.04\n    outputs:\n      pgversion: ${{ steps.detect-pgversion.outputs.targets }}\n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: detect-pgversion\n        id: detect-pgversion\n        run: |\n          targets=`bash GitHubActions/detect_targets.sh`\n          echo \"targets=$targets\" >> $GITHUB_OUTPUT\n\n  test:\n    needs: detect-pgversion\n    env:\n      SQLITE_VERSION : \"3490000\"\n      SQLITE_YEAR: \"2025\"\n      POSTGIS_VERSION : \"3.4.2\"\n      HTTP_PROXY: \"\"\n      HTTPS_PROXY: \"\"\n      SQLITE_FOR_TESTING_DIR: \"/opt/CI_sqlite\"\n    strategy:\n      fail-fast: false\n      matrix:\n        pg: ${{ fromJSON(needs.detect-pgversion.outputs.pgversion) }}\n        config: [\"default\", \"postgis\"]\n        \n    name: Test on PostgreSQL ${{ matrix.pg }}, ${{ matrix.config }} mode\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v4\n      \n      - name: tar\n        run: tar zcvf sqlite_fdw.tar.gz ./*\n\n      - name: set_proxy\n        run: bash GitHubActions/env.sh\n\n      - name: download PostGIS, ${{ matrix.config }} mode\n        run: |\n          if [[ \"${{ matrix.config }}\" == \"postgis\" ]]; then\n            bash GitHubActions/download_postgis.sh ${{ env.POSTGIS_VERSION }}\n          fi\n\n      - name: install locales\n        run: bash GitHubActions/install_locales.sh\n\n      - name: build PostgreSQL ${{ matrix.pg }}\n        run: bash GitHubActions/build_postgres.sh ${{ matrix.pg }}\n\n      - name: install SQLite, ${{ matrix.config }} mode\n        run: |\n          if [[ \"${{ matrix.config }}\" == \"default\" ]]; then\n            bash GitHubActions/install_sqlite.sh ${{ env.SQLITE_VERSION }} ${{ env.SQLITE_YEAR }} ${{ matrix.config }} ${{ env.SQLITE_FOR_TESTING_DIR }}\n          elif [[ \"${{ matrix.config }}\" == \"postgis\" ]]; then\n            bash GitHubActions/install_sqlite.sh ${{ env.SQLITE_VERSION }} ${{ env.SQLITE_YEAR }} ${{ matrix.config }} ${{ env.SQLITE_FOR_TESTING_DIR }} --enable-rtree\n          fi\n\n      - name: build PostGIS ${{ env.POSTGIS_VERSION }} for PostgreSQL ${{ matrix.pg }}, ${{ matrix.config }} mode\n        run: |\n          if [[ \"${{ matrix.config }}\" == \"postgis\" ]]; then\n            bash GitHubActions/build_postgis.sh ${{ matrix.pg }} ${{ env.POSTGIS_VERSION }}\n          fi\n\n      - name: build sqlite_fdw, ${{ matrix.config }} mode\n        run: |\n          bash GitHubActions/build_sqlite_fdw.sh ${{ matrix.pg }} ${{ matrix.config }} ${{ env.SQLITE_FOR_TESTING_DIR }}\n\n      - name: execute sqlite_fdw test\n        run: bash GitHubActions/execute_test.sh ${{ matrix.pg }} ${{ matrix.config }} ${{ env.SQLITE_FOR_TESTING_DIR }}\n\n      - name: download output files (regression.diffs)\n        if: failure()\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.pg }}-${{ matrix.config }}-test-results\n          path: |\n            workdir/postgresql-${{ matrix.pg }}/contrib/sqlite_fdw/regression.diffs\n            workdir/postgresql-${{ matrix.pg }}/contrib/sqlite_fdw/regression.out\n            workdir/postgresql-${{ matrix.pg }}/contrib/sqlite_fdw/results\n          retention-days: 7\n\n"
  },
  {
    "path": ".gitignore",
    "content": "# Prerequisites\n*.d\n\n# Object files\n*.o\n*.ko\n*.obj\n*.elf\n\n# Linker output\n*.ilk\n*.map\n*.exp\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Libraries\n*.lib\n*.a\n*.la\n*.lo\n\n# Shared objects (inc. Windows DLLs)\n*.dll\n*.so\n*.so.*\n*.dylib\n\n# Executables\n*.exe\n*.out\n*.app\n*.i*86\n*.x86_64\n*.hex\n\n# Log files\nlog/\n\n# Debug files\n*.dSYM/\n*.su\n*.idb\n*.pdb\n\n# Kernel Module Compile Results\n*.mod*\n*.cmd\n.tmp_versions/\nmodules.order\nModule.symvers\nMkfile.old\ndkms.conf\n\n# Visual Studio related\n.vs/\nx64/\nDebug/\nRelease/\n"
  },
  {
    "path": "GIS.md",
    "content": "GIS support in SQLite Foreign Data Wrapper for PostgreSQL\n=========================================================\n\n<img src=\"https://www.tmapy.cz/wp-content/uploads/2021/02/postgis-logo.png\" align=\"center\" height=\"80\" alt=\"PostGIS\"/>\t+ <img src=\"https://www.gaia-gis.it/fossil/libspatialite/logo\" align=\"center\" height=\"80\" alt=\"SpatiaLite\"/>\n\nSQLite FDW for PostgreSQL can connect PostgreSQL with or without [PostGIS](https://www.postgis.net/)\nto [SpatiaLite](https://www.gaia-gis.it/fossil/libspatialite/index) SQLite database file.\nThis description contains only information about GIS support without common SQL and\nsystem descriptions from [common FDW description](README.md).\n\nNotes about compilation environment and PROJ library\n----------------------------------------------------\nBoth SpatiaLite and PostGIS uses [PROJ C++ library](https://github.com/OSGeo/PROJ) from\n[Open Source Geospatial Foundation](https://github.com/OSGeo) for reprojecting and some calculations.\nRecommended configuration of SQLite FDW with GIS support contains both SpatiaLite and PostGIS.\n**It is recommended to install only 1 version of PROJ in a system to avoid integration issue**.\nBefore compilation you should ensure equal versions of PROJ library required by SpatiaLite and PostGIS on\nyour system. Otherwise some encapsualted and unwanted memory freeing errors can occur.\nIf you need different PROJ library versions, you can reference [this PROJ issue](https://github.com/OSGeo/PROJ/issues/4361)\nand try to use something like `CFLAGS=\"$CFLAGS -DPROJ_RENAME_SYMBOLS -O2\"` during compilation of\nSpatiaLite or PostGIS to link one of this extensions with other PROJ version.\n\nCommon conditions of GIS support\n--------------------------------\n\n1. SQLite FDW should be compiled with `ENABLE_GIS=1` environment variable value.\n2. You must install SpatiaLite header files before compilation.\nLinux packages like `libspatialite-dev` or `libspatialite-devel` can contain this files.\n3. A column should have data type (domain) name from following list:\n\t* addbandarg\n\t* box2d\n\t* box3d\n\t* geography\n\t* geometry\n\t* geometry_dump\n\t* geomval\n\t* getfaceedges_returntype\n\t* rastbandarg\n\t* raster\n\t* reclassarg\n\t* summarystats\n\t* topoelement\n\t* topoelementarray\n\t* topogeometry\n\t* unionarg\n\t* validatetopology_returntype\n\n\tOnly listed data types have full data transformation support:\n\t* geography\n\t* geometry\n\nAll other data types (domains) are treated as PostGIS specific, but unsupported.\n\nYou can use SpatiaLite GIS data support _without PostGIS installation_ after such\nSQL commands as `CREATE DOMAIN geometry AS bytea;` and `CREATE DOMAIN geography AS bytea;`.\nThis allows to have in PostgreSQL PostGIS compatible `bytea` data easy\nconvertable to PostGIS storage format.\n\nPostGIS and SpatiaLite vector data formats\n-------------------------------------------\n\nVector GIS data in PostGIS can be stored in a columns with `geography` or `geometry`\ndata type. This columns contains a binary data.\n[Well-known binary (WKB)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary)\ndata storage format is a standard of [Open Geospatial Consortium (OGC)](https://en.wikipedia.org/wiki/Open_Geospatial_Consortium)\nand supported by [GEOS library](https://libgeos.org). PostGIS internal GIS data\nstorage format based on WKB with [SRID](https://en.wikipedia.org/wiki/Spatial_reference_system#Identifiers)\nadditions. This format is known as [EWKB](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Format_variations) and supported by\n[GEOS library](https://libgeos.org) and SpatiaLite input/output functions.\n\nHexadecimal text representation of EWKB data is a transport form for `geography`\nand `geometry` GIS data between PostgreSQL and *SpatiLite input/output functions*.\nHence no PostGIS input/output functions are necessary, but all of this functions\nare supported.\n\nEWKB hexadecimal text data transport is faster than\n[EWKT](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)\nbut slower than EWKB blob data transport.\n\nSpatiaLite internal storage based on `blob` data [affinity](https://www.sqlite.org/datatype3.html)\nand is not a standard of [OGC](https://en.wikipedia.org/wiki/Open_Geospatial_Consortium).\nAlso this format doesn't supported by [GEOS library](https://libgeos.org).\n\nLimitations\n-----------\n\n* In opposition to PostGIS, **SpatiaLite doesn't allow to store any GIS vector data without SRID**.\nHence any well-formed SpatiaLite data can be converted for PostGIS, but\nwell-formed PostGIS data _without SRID_ cannot be converted for SpatiaLite.\nAll of SpatiaLite input functions will return `NULL` in this case.\nPlease use [ST_SetSRID PostGIS function](https://postgis.net/docs/ST_SetSRID.html)\nin case of incomplete SRID data to prepare PostGIS data for importing to SpatiaLite\nor comparing with SpatiaLite data.\n\n* Only `=` PostgreSQL operator is pushed down to SQLite (SpatiaLite) for vector GIS data such\nas `geography` or `geometry`. `<>` PostgreSQL operator is NOT pushed down.\n\nEnd of description.\n"
  },
  {
    "path": "GitHubActions/README.md",
    "content": "# CI environment of sqlite_fdw.\n\nTests will be executed automatically when commited to main/master branch and when a pull request was opened/updated.\nIt is realized by using GitHub actions.\n\nThe CI process is defined in .github/workflows/CI.yml file.\nScripts in this directory (GitHubActions/*.sh) are referred by CI.yml. \n\nThe regression test will be executed for multi-versions of PostgreSQL.\nTarget versions are determined automatically based on directory names in \"sql\" directory.\n\nIf the regression test failed, test result files (result directory, regression.diff amd regression.out) are uploaded as artifacts.\n7 days later, artifact files will be deleted.\n"
  },
  {
    "path": "GitHubActions/build_postgis.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script downloads PostGIS from the official web site into ./workdir\n# then builds it.\n#\n# Usage: ./build_postgis.sh pg_version postgis_version\n#     pg_version is a PostgreSQL version to be installed like 16.0.\n#     postgis_version is a PostGIS version to be installed.\n#\n# Requirements\n# - be able to connect to the PostGIS official web site by wget.\n#\n################################################################################\n\nPOSTGRESQL_VERSION=$1\nPOSTGIS_VERSION=$2\n\n# Install necessary dependencies\nsudo apt update\nsudo apt install -y build-essential libxml2-dev libgeos-dev libproj-dev libgdal-dev libjson-c-dev libprotobuf-c-dev protobuf-c-compiler\n\ncd ./workdir\n# Download and compile PostGIS\ncp -vr postgis postgresql-${POSTGRESQL_VERSION}/contrib\ncd postgresql-${POSTGRESQL_VERSION}/contrib/postgis\necho \" - PostGIS directory\"\nGEOS_CONFIG_PATH=$(which geos-config)\nexport LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH\n./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-geosconfig=$GEOS_CONFIG_PATH\nmake\nsudo make install\n\n"
  },
  {
    "path": "GitHubActions/build_postgres.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script downloads PostgreSQL from the official web site into ./workdir\n# then builds it.\n#\n# Usage: ./build_postgres.sh pg_version [configure_options]\n#     pg_version is a PostgreSQL version to be installed like 17.0.\n#     configure_options are a list of option for postgres server.\n#\n# Requirements\n# - be able to connect to the PostgreSQL official web site by curl.\n#\n################################################################################\n\nPOSTGRESQL_VERSION=$1\nCONFIGURE_OPTIONS=\"\"\n\nwhile (( \"$#\" )); do\n  CONFIGURE_OPTIONS=\"$CONFIGURE_OPTIONS $2\"\n  shift\ndone\n\nmkdir -p ./workdir\ncd ./workdir\ncurl -O https://ftp.postgresql.org/pub/source/v${POSTGRESQL_VERSION}/postgresql-${POSTGRESQL_VERSION}.tar.bz2\ntar xjf postgresql-${POSTGRESQL_VERSION}.tar.bz2\ncd postgresql-${POSTGRESQL_VERSION}\n\nif [ -z \"$CONFIGURE_OPTIONS\" ]; then\n  ./configure\nelse\n  ./configure $CONFIGURE_OPTIONS\nfi\n\nmake\nsudo make install\nsudo chown -R $USER /usr/local/pgsql\n"
  },
  {
    "path": "GitHubActions/build_sqlite_fdw.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script builds sqlite_fdw in PostgreSQL source tree.\n#\n# Usage: ./build_sqlite_fdw.sh pg_version mode sqlite_for_testing_dir\n#     pg_version is a PostgreSQL version like 17.0 to be built in.\n#     mode is flag for sqlite_fdw compiler.\n#     sqlite_for_testing_dir: path to install directory of SQLite version for testing\n#\n# Requirements\n# - the source code of sqlite_fdw is available by git clone.\n# - the source code of PostgreSQL is located in ~/workdir/postgresql-{pg_version}.\n# - SQLite development package is installed in a system.\n################################################################################\n\nVERSION=\"$1\"\nMODE=\"$2\"\n\nmkdir -p ./workdir/postgresql-${VERSION}/contrib/sqlite_fdw\ntar zxf ./sqlite_fdw.tar.gz -C ./workdir/postgresql-${VERSION}/contrib/sqlite_fdw/\ncd ./workdir/postgresql-${VERSION}/contrib/sqlite_fdw\n\n# show locally compiled sqlite library\nls -la /usr/local/lib\n\nif [ \"$MODE\" == \"postgis\" ]; then\n  make ENABLE_GIS=1 SQLITE_FOR_TESTING_DIR=\"$3\"\nelse\n  make SQLITE_FOR_TESTING_DIR=\"$3\"\nfi\n\nsudo make install\n"
  },
  {
    "path": "GitHubActions/detect_targets.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script detects target PostgreSQL versions for sqlite_fdw testing from\n# directory names in ./sql directory. Detected versions will be outputed to\n# the standard output as an array of string like [\"16.3\",\"17.0\"].\n#\n# Usage: ./detect_targets.sh\n#\n# Requirements\n# - there is a directory named \"sql\" in a curent directory.\n#\n################################################################################\n\ndirs=\"./sql/*\"\npattern=\"[0-9]+\\.[0-9]+\"\ntargets=\"[\"\nfor pathname in $dirs; do\n\tif [[ \"$pathname\" =~ $pattern ]]; then\n\t\ttarget=`basename $pathname`\n\t\tif [ \"$targets\" != \"[\" ]; then\n\t\t\ttargets+=\",\"\n\t\tfi\n\t\ttargets+=\"\\\"$target\\\"\"\n\tfi\ndone\ntargets+=\"]\"\n\necho \"$targets\"\n"
  },
  {
    "path": "GitHubActions/download_postgis.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script downloads PostGIS from the official web site into ./workdir\n# then builds it.\n#\n# Usage: ./download_postgis.sh postgis_version\n#     postgis_version is a PostGIS version to be installed.\n#\n# Requirements\n# - be able to connect to the PostGIS official web site by wget.\n#\n################################################################################\n\nPOSTGIS_VERSION=$1\n\nmkdir -p ./workdir\ncd ./workdir\npgisfile=\"postgis-${POSTGIS_VERSION}.tar.gz\"\nif [ ! -f \"$pgisfile\" ]; then\n  wget -nv \"http://download.osgeo.org/postgis/source/$pgisfile\"\n  tar -xzf \"$pgisfile\"\n  mv postgis-${POSTGIS_VERSION} postgis -v\n  echo \"PostGIS source code directory \" $(dirname $(readlink -f postgis))\nelse\n  echo \"PostGIS downloaded\"\nfi\n"
  },
  {
    "path": "GitHubActions/env.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script configures apt.conf to set a proxy if an environment variable\n# HTTP_PROXY or HTTPS_PROXY is set.\n#\n# Usage: ./env.sh\n#\n# Requirements\n# - having superuser privileges\n#\n################################################################################\n\nif [ -z $HTTP_PROXY ] && [ \"$HTTP_PROXY\" != \"\" ]; then\n\techo 'Acquire::http::proxy \"$HTTP_PROXY\";' | sudo tee /etc/apt/apt.conf\nfi\nif [ -z $HTTPS_PROXY ] && [ \"$HTTPS_PROXY\" != \"\" ]; then\n\techo 'Acquire::https::proxy \"$HTTPS_PROXY\";' | sudo tee -a /etc/apt/apt.conf\nfi\n"
  },
  {
    "path": "GitHubActions/execute_test.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script executes a regression test pf sqlite_fdw by calling test.sh in\n# sqlite_fdw. If all tests are passed, this script will exit successfully.\n# Otherwise, it will exit with failure.\n\n# Usage: ./execute_test.sh pg_version mode sqlite_for_testing_dir\n#     pg_version is a PostgreSQL version to be tested like 17.0.\n#\t  mode is flag for sqlite_fdw compiler.\n#     sqlite_for_testing_dir: path to install directory of SQLite version for testing\n#\n# Requiremets\n# - the source code of PostgreSQL is located in ./workdir/postgresql-{pg_version}.\n# - the source code of sqlite_fdw is loacted in ./workdir/postgresql-{pg_version}/contrib/sqlite_fdw.\n# - PostgreSQL and sqlite_fdw were built.\n# - this script assumes that tests are passed if this file (created by executing\n#   the test) contains \" ALL {number} tests passed\" at the last or the 3rd line\n#   from the end.\n#\n################################################################################\n\nVERSION=$1\nMODE=\"$2\"\nSQLITE_FOR_TESTING_DIR=\"$3\"\n\ncd ./workdir/postgresql-${VERSION}/contrib/sqlite_fdw\n\nif [ \"$MODE\" == \"postgis\" ]; then\n\texport ENABLE_GIS=1\n\n\t# Start postgres server\n\tPOSTGRES_HOME=/usr/local/pgsql\n\t${POSTGRES_HOME}/bin/initdb ${POSTGRES_HOME}/databases\n\t${POSTGRES_HOME}/bin/pg_ctl -D ${POSTGRES_HOME}/databases -l logfile start\n\n\t# Change the testing method\n\tsed -i 's/make check/make installcheck/' test.sh\nfi\n\n# Execute test script\nchmod +x ./test.sh\n./test.sh $MAKEFILE_OPT\n\nlast_line=$(tail -n 1 make_check.out)\nthird_line_from_the_last=$(tail -n 3 make_check.out | head -n 1)\n\npattern=\" All [0-9]+ tests passed.+\"\n\nif [[ \"$last_line\" =~ $pattern ]]; then\n\techo \"last_line\"\n\nelif [[ \"$third_line_from_the_last\" =~ $pattern ]]; then\n\t echo \"$third_line_from_the_last\"\nelse\n\techo \"Error : not All the tests passed\"\n\techo \"last line : '$last_line'\"\n\techo \"thierd_line_from_the_last : '$third_line_from_the_last'\"\n\texit 1\nfi\n"
  },
  {
    "path": "GitHubActions/install_locales.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This script installs some locales and language packs used by sqlite_fdw\n# tests in Ubuntu.\n#\n# Usage: ./install_locales.sh\n#\n# Requirements:\n# - having superuser privileges\n#\n################################################################################\n\nsudo apt-get update\nsudo apt-get install locales language-pack-ja\nsudo locale-gen ja_JP.EUC-JP\nsudo apt-get install language-pack-ko-base language-pack-ko\nsudo locale-gen ko_KR.EUC-KR\nsudo apt-get install language-pack-bg-base language-pack-bg\nsudo locale-gen bg_BG\nsudo apt-get install libreadline8 libreadline-dev\n"
  },
  {
    "path": "GitHubActions/install_sqlite.sh",
    "content": "#!/bin/bash\n\n################################################################################\n#\n# This sript downloads SQLite source code from the official web site into\n# ./workdir then builds and installs it.\n#\n# Usage: ./install_sqlite.sh version year testing_mode sqlite_for_testing_dir [configure_options]\n#     version: SQLite version to be installed.\n#     year: A year of SQLite released. It is used for determining a download URL.\n#     testing_mode:\t'default' or 'postgis' value.\n#     sqlite_for_testing_dir: path to install directory of the specified SQLite version\n#     configure_options: are a list of option for sqlite server.\n#\n#     Ex) ./install_sqlite.sh 3420000 2023 postgis /opt/sqlite_for_testing --enable-rtree\n#\n# Requirements\n# - be able to connect to the SQLite official web site by curl.\n# - having superuser privileges\n#\n################################################################################\n\nVERSION=\"$1\"\nYEAR=\"$2\"\nTESTING_MODE=\"$3\"\nSQLITE_FOR_TESTING_DIR=\"$4\"\n\nCONFIGURE_OPTIONS=\"\"\n\nwhile (( \"$#\" )); do\n  CONFIGURE_OPTIONS=\"$CONFIGURE_OPTIONS $5\"\n  shift\ndone\n\necho \"SQLite ver $VERSION ($YEAR), mode $TESTING_MODE, install to $SQLITE_FOR_TESTING_DIR with options $CONFIGURE_OPTIONS\";\n\nmkdir -p ./workdir\ncd ./workdir\nvsrc=\"sqlite-src-${VERSION}\"\nadr=\"https://www.sqlite.org/${YEAR}/$vsrc.zip\"\necho \"SQLite source code archive: $adr\"\nwget \"$adr\" -O \"$vsrc.zip\"\nunzip \"$vsrc.zip\" > /dev/null\ncd \"$vsrc\"\n\nexport CFLAGS=-DSQLITE_ENABLE_COLUMN_METADATA\nconfcom=\"./configure --enable-fts5 --prefix=$SQLITE_FOR_TESTING_DIR\"\nif [ ! -z \"$CONFIGURE_OPTIONS\" ]; then\n  confcom+=\"$CONFIGURE_OPTIONS\"  \nfi\necho \"SQLite configure call: $confcom\"\n$confcom\n\nmake\necho \"----- SQLITE INSTALL directory $SQLITE_FOR_TESTING_DIR -----\"\nsudo make install\n\nif [ \"$TESTING_MODE\" == \"postgis\" ]; then\n  sudo apt-get install libspatialite-dev -y\nfi\n"
  },
  {
    "path": "License",
    "content": "SQLite Foreign Data Wrapper for PostgreSQL\n\nCopyright (c) 2018, TOSHIBA CORPORATION\nCopyright (c) 2011 - 2016, EnterpriseDB Corporation\n\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose, without fee, and without a written agreement is\nhereby granted, provided that the above copyright notice and this paragraph and\nthe following two paragraphs appear in all copies.\n\nIN NO EVENT SHALL TOSHIBA CORPORATION BE LIABLE TO ANY PARTY FOR\nDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST\nPROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF\nTOSHIBA CORPORATION HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTOSHIBA CORPORATION SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\nBUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN \"AS IS\" BASIS, AND\nTOSHIBA CORPORATION HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,\nUPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n"
  },
  {
    "path": "META.json",
    "content": "{\n   \"name\": \"sqlite_fdw\",\n   \"abstract\": \"Foreign Data Wrapper for SQLite databases\",\n   \"description\": \"PostgreSQL extension which implements a Foreign Data Wrapper (FDW) for SQLite databases.\",\n   \"version\": \"2.5.0\",\n   \"maintainer\": \"pgspider\",\n   \"license\": \"postgresql\",\n   \"provides\": {\n      \"sqlite_fdw\": {\n         \"abstract\": \"Foreign Data Wrapper for SQLite databases\",\n         \"file\": \"sqlite_fdw.c\",\n         \"docfile\": \"README.md\",\n         \"version\": \"2.5.0\"\n      }\n   },\n   \"prereqs\": {\n      \"runtime\": {\n         \"requires\": {\n            \"PostgreSQL\": \"9.6.0\"\n         }\n      }\n   },\n   \"resources\": {\n      \"bugtracker\": {\n         \"web\": \"http://github.com/pgspider/sqlite_fdw/issues/\"\n      },\n      \"repository\": {\n        \"url\":  \"git://github.com/pgspider/sqlite_fdw.git\",\n        \"web\":  \"https://github.com/pgspider/sqlite_fdw/\",\n        \"type\": \"git\"\n      }\n   },\n   \"generated_by\": \"David E. Wheeler\",\n   \"meta-spec\": {\n      \"version\": \"1.0.0\",\n      \"url\": \"http://pgxn.org/meta/spec.txt\"\n   },\n   \"tags\": [\n      \"sqlite\",\n      \"fdw\",\n      \"foreign data wrapper\",\n      \"sqlite_fdw\"\n   ]\n}"
  },
  {
    "path": "Makefile",
    "content": "######################################################################-------------------------------------------------------------------------\n#\n# SQLite Foreign Data Wrapper for PostgreSQL\n#\n# Portions Copyright (c) 2018, TOSHIBA CORPORATION\n#\n# IDENTIFICATION\n# \t\tMakefile\n#\n##########################################################################\n\nMODULE_big = sqlite_fdw\nOBJS = connection.o option.o deparse.o sqlite_query.o sqlite_fdw.o sqlite_data_norm.o sqlite_gis.o\n\nEXTENSION = sqlite_fdw\nDATA = sqlite_fdw--1.0.sql sqlite_fdw--1.0--1.1.sql\n\nifdef ENABLE_GIS\nPG_CFLAGS += -DSQLITE_FDW_GIS_ENABLE\nGIS_DEP_TESTS_DIR = with_gis_support\nGIS_TEST = postgis\n$(info  There is PostGIS support for SQLite FDW)\nelse\nGIS_DEP_TESTS_DIR = without_gis_support\nGIS_TEST = nogis\n$(info  There is NO PostGIS support for SQLite FDW)\nendif\n\n# Tests for PostgreSQL data types support\nDATA_TYPE_TESTS = types/bitstring types/bool types/float4 types/float8 types/int4 types/int8 types/json types/numeric  types/macaddr types/macaddr8 types/out_of_range types/timestamp types/uuid\n# Tests with different versions with GIS support and without GIS support\nGIS_DEP_TESTS = $(GIS_DEP_TESTS_DIR)/type $(GIS_DEP_TESTS_DIR)/auto_import $(GIS_DEP_TESTS_DIR)/$(GIS_TEST)\n\nifndef REGRESS\n# System tests, full default sequence\nREGRESS = libsqlite extra/sqlite_fdw_post $(DATA_TYPE_TESTS) extra/join extra/limit extra/aggregates extra/prepare extra/select_having extra/select extra/insert extra/update extra/encodings sqlite_fdw aggregate selectfunc $(GIS_DEP_TESTS)\nendif\n\n# Other encodings also are tested. Client encoding should be UTF-8.\nREGRESS_OPTS = --encoding=utf8\n\nUNAME = uname\nOS := $(shell $(UNAME))\nifeq ($(OS), Darwin)\nDLSUFFIX = .dylib\nelse\nDLSUFFIX = .so\nendif\n\nifdef SQLITE_FOR_TESTING_DIR\nSHLIB_LINK := -L$(SQLITE_FOR_TESTING_DIR)/lib -lsqlite3\nPG_CFLAGS += -I$(SQLITE_FOR_TESTING_DIR)/include -Wl,-rpath,$(SQLITE_FOR_TESTING_DIR)/lib\nelse\nSHLIB_LINK := -lsqlite3\nendif\n\nifdef ENABLE_GIS\noverride SHLIB_LINK += -lspatialite\nendif\n\nifdef USE_PGXS\nPG_CONFIG = pg_config\nPGXS := $(shell $(PG_CONFIG) --pgxs)\ninclude $(PGXS)\nifndef MAJORVERSION\nMAJORVERSION := $(basename $(VERSION))\nendif\nifeq (,$(findstring $(MAJORVERSION), 13 14 15 16 17))\n$(error PostgreSQL 13, 14, 15, 16 or 17 is required to compile this extension)\nendif\nelse\nsubdir = contrib/sqlite_fdw\ntop_builddir = ../..\ninclude $(top_builddir)/src/Makefile.global\ninclude $(top_srcdir)/contrib/contrib-global.mk\nendif\n\nifdef REGRESS_PREFIX\nREGRESS_PREFIX_SUB = $(REGRESS_PREFIX)\nelse\nREGRESS_PREFIX_SUB = $(VERSION)\nendif\n\nREGRESS := $(addprefix $(REGRESS_PREFIX_SUB)/,$(REGRESS))\n$(shell mkdir -p results/$(REGRESS_PREFIX_SUB)/extra)\n$(shell mkdir -p results/$(REGRESS_PREFIX_SUB)/types)\n$(shell mkdir -p results/$(REGRESS_PREFIX_SUB)/$(GIS_DEP_TESTS_DIR))\n\n# $(info    ENABLE_GIS      is $(ENABLE_GIS))\n# $(info    SHLIB_LINK      is $(SHLIB_LINK))\n# $(info    LD_LIBRARY_PATH is $(LD_LIBRARY_PATH))\n# $(info    PG_CFLAGS       is $(PG_CFLAGS))\n# $(info    PG_CPPFLAGS     is $(PG_CPPFLAGS))\n# $(info    REGRESS         is $(REGRESS))\n# $(info    DLSUFFIX        is $(DLSUFFIX))\n\nifdef ENABLE_GIS\ncheck: temp-install\ntemp-install: EXTRA_INSTALL+=contrib/postgis\ncheckprep: EXTRA_INSTALL+=contrib/postgis\nendif\n\n"
  },
  {
    "path": "README.md",
    "content": "SQLite Foreign Data Wrapper for PostgreSQL\n==========================================\n\nThis is a foreign data wrapper (FDW) to connect [PostgreSQL](https://www.postgresql.org/)\nto [SQLite](https://sqlite.org/) database file. This FDW works with PostgreSQL 13, 14, 15, 16, 17 and confirmed with SQLite 3.49.0.\n\n<img src=\"https://upload.wikimedia.org/wikipedia/commons/2/29/Postgresql_elephant.svg\" align=\"center\" height=\"100\" alt=\"PostgreSQL\"/>\t+\t<img src=\"SQLite.png\" align=\"center\" height=\"100\" alt=\"SQLite\"/>\n\nAlso this foreign data wrapper (FDW) can connect PostgreSQL with [PostGIS](https://www.postgis.net/)\nto [SpatiaLite](https://www.gaia-gis.it/fossil/libspatialite/index) SQLite database file. This FDW works with PostGIS 2+ and confirmed with SpatiaLite 5.1. See [GIS support description](GIS.md).\n\n<img src=\"https://www.tmapy.cz/wp-content/uploads/2021/02/postgis-logo.png\" align=\"center\" height=\"80\" alt=\"PostGIS\"/>\t+ <img src=\"https://www.gaia-gis.it/fossil/libspatialite/logo\" align=\"center\" height=\"80\" alt=\"SpatiaLite\"/>\n\n\nContents\n--------\n\n1. [Features](#features)\n2. [Supported platforms](#supported-platforms)\n3. [Installation](#installation)\n4. [Usage](#usage)\n5. [Functions](#functions)\n6. [Identifier case handling](#identifier-case-handling)\n7. [Generated columns](#generated-columns)\n8. [Character set handling](#character-set-handling)\n9. [Examples](#examples)\n10. [Limitations](#limitations)\n11. [Tests](#tests)\n12. [Contributing](#contributing)\n13. [Useful links](#useful-links)\n\nFeatures\n--------\n\n### Common features\n- Transactions\n- Support `INSERT`/`UPDATE`/`DELETE` (both Direct modification and Foreign modification), see [access control](#connection-to-sqlite-database-file-and-access-control) about conditions of succesfully data modification.\n- Support `TRUNCATE` by deparsing into `DELETE` statement without `WHERE` clause.\n- Allow control over whether foreign servers keep connections open after transaction completion. This is controlled by `keep_connections` and defaults to on.\n- Support list cached connections to foreign servers by using function `sqlite_fdw_get_connections()`\n- Support discard cached connections to foreign servers by using function `sqlite_fdw_disconnect()`, `sqlite_fdw_disconnect_all()`.\n- Support Bulk `INSERT` by using `batch_size` option\n- Support `INSERT`/`UPDATE` with generated column\n- Support `ON CONFLICT DO NOTHING`\n- Support mixed SQLite [data affinity](https://www.sqlite.org/datatype3.html) input and filtering (`SELECT`/`WHERE` usage) for such data types as\n\t- `timestamp`: `text` and `int`,\n\t- `uuid`: `text`(32..39) and `blob`(16),\n\t- `bool`: `text`(1..5) and `int`,\n\t- `double precision`, `float` and `numeric`: `real` values and special values with `text` affinity (`+Infinity`, `-Infinity`, `NaN`),\n\t- `macaddr`: `text`(12..17) or `blob`(6) or `integer`,\n\t- `macaddr8`: `text`(16..23) or `blob`(8) or `integer`,\n\t- `json`: `text`(default) or `blob` as SQLite `jsonb` object.\n- Support mixed SQLite [data affinity](https://www.sqlite.org/datatype3.html) output (`INSERT`/`UPDATE`) for such data types as\n\t- `timestamp`: `text`(default) or `int`,\n\t- `uuid`: `text`(36) or `blob`(16)(default),\n\t- `macaddr`: `text`(17) or `blob`(6) or `integer`(default),\n\t- `macaddr8`: `text`(23) or `blob`(8) or `integer`(default).\n- Full support for `+Infinity` (means ∞) and `-Infinity` (means -∞) special values for IEEE 754-2008 numbers in `double precision`, `float` and `numeric` columns including such conditions as ` n < '+Infinity'` or ` m > '-Infinity'`.\n- Bidirectional data transformation for `geometry` and `geography` data types for SpatiaLite ↔ PostGIS. [EWKB](https://libgeos.org/specifications/wkb/#extended-wkb) data transport is used. See [GIS support description](GIS.md).\n\n### Pushing down\n- `WHERE` clauses are pushdowned\n- Aggregate function are pushdowned\n- `ORDER BY` is pushdowned\n- Joins (left/right/inner/cross/semi) are pushdowned\n- `CASE` expressions are pushdowned.\n- `LIMIT` and `OFFSET` are pushdowned when all tables in the query are foreign tables belongs to the same PostgreSQL `FOREIGN SERVER` object.\n- Support `GROUP BY`, `HAVING` push-down.\n- `mod()` is pushdowned. In PostgreSQL this function gives [argument-dependend data type](https://www.postgresql.org/docs/current/functions-math.html), but result from SQLite always [have `real` affinity](https://www.sqlite.org/lang_mathfunc.html#mod).\n- `=` operator for GIS data objects is pushed down.\n- Operators `->` and `->>` for `json` and `jsonb` are pushed down in `WHERE` clause.\n- `upper`, `lower` and other character case functions are **not** pushed down because they does not work with UNICODE character in SQLite.\n- `WITH TIES` option is **not** pushed down.\n- Bit string `#` (XOR) operator is **not** pushed down because there is no equal SQLite operator.\n- Operations with `macaddr` or `macaddr8` data are **not** pushed down.\n- GIS data oparators are **not** pushdowned except for `=`.\n\n### Notes about pushing down\n\n- For push-down case, the number after floating point may be different from the result of PostgreSQL.\n\n### Notes about features\n- SQLite evaluates division by zero as `NULL`. It is different from PostgreSQL, which will display `Division by zero` error.\n- The data type of column of foreign table should match with data type of column in SQLite to avoid wrong result. For example, if the column of SQLite is `float` (which will be stored as `float8`), the column of foreign table should be `float8`, too. If the column of foreign table is `float4`, it may cause wrong result when `SELECT`.\n- For `key` option, user needs to specify the primary key column of SQLite table corresponding with the `key` option. If not, wrong result may occur when `UPDATE` or `DELETE`.\n- When `sum` function result value is out of range, `sqlite_fdw` will display `Infinity` value. It is different from PostgreSQL, which gives `ERROR: value out of range: overflow` error.\n- For `numeric` data type, `sqlite_fdw` use `sqlite3_column_double` to get value, while SQLite shell uses `sqlite3_column_text` to get value. Those 2 APIs may return different numeric value. Therefore, for `numeric` data type, the value returned from `sqlite_fdw` may different from the value returned from SQLite shell.\n- `sqlite_fdw` can return implementation-dependent order for column if the column is not specified in `ORDER BY` clause.\n- When the column type is `varchar array`, if the string is shorter than the declared length, values of type character will be space-padded; values of type `character varying` will simply store the shorter string.\n- [String literals for `boolean`](https://www.postgresql.org/docs/current/datatype-boolean.html) (`t`, `f`, `y`, `n`, `yes`, `no`, `on`, `off` etc. case insensitive) can be readed and filtred but cannot writed, because SQLite documentation recommends only `int` affinity values (`0` or `1`)  for boolean data and usually text boolean data belongs to legacy datasets.\n- Directry for SQLite foreign table you can use SQLite specific extractor operand for `->` or `->>` like `$.a.d[1]` in `WHERE` clause, but PostgreSQL will calculate result of equal expression in `SELECT` clause as `NULL`.\n- If you will use unsupported by `sqlite_fdw` older SQLite versions from your OS, please note SQLite JSON processnig behaviour was unstable between 3.45.0 and 3.48.0 especially for negative array indexes. Please note this for explaining any unexpected results after `->` or `->>` operators or failed tests on your OS.\n\nAlso see [Limitations](#limitations)\n\nSupported platforms\n-------------------\n\n`sqlite_fdw` was developed on Linux and should run on any\nreasonably POSIX-compliant system.\n\nInstallation\n------------\n\n### Package installation\n\nFor some Linux distributives internal packages with `sqlite_fdw` are avalilable.\n\n- [sqlite_fdw_14 rpm](https://pkgs.org/download/sqlite_fdw_14(x86-64)) for CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9. Also there is other versions.\n- [sqlite_fdw git package](https://aur.archlinux.org/packages/sqlite_fdw) for Arch Linux.\n\n### Source installation\n\nPrerequisites:\n* `gcc`\n* `make`\n* `postgresql-server-dev`, especially `postgres.h`\n* `libsqlite3-dev`, especially `sqlite.h`\n* `libspatialite-dev` only for `geometry` and `geography` data types support (SpatiaLite ↔ PostGIS) or for full tests\n\n#### 1. Install SQLite & Postgres Development Libraries\n\nFor Debian or Ubuntu:\n\n`apt-get install libsqlite3-dev`\n\n`apt-get install postgresql-server-dev-XX`, where XX matches your postgres version, i.e. `apt-get install postgresql-server-dev-15`\n\n`apt-get install libspatialite-dev` - for SpatiaLite ↔ PostGIS transformations\n\nInstead of system `libsqlite3-dev` from OS repository you can also [download SQLite source code][1] and [build separate SQLite version][2] with FTS5 for full-text search. The directory of this not OS SQLite library can be pointed as prefix in a command like `./configure --enable-fts5 --prefix=$SQLITE_FOR_TESTING_DIR` before `make` and `make install`.\n\n#### 2. Build and install sqlite_fdw\n\n`sqlite_fdw` does not require to be compiled with PostGIS and `libspatialite-dev`. They are used only for full tests which includes test for GIS support.\n\nBefore building please add a directory of `pg_config` to PATH or ensure `pg_config` program is accessible from command line only by the name.\n\nBuild and install without GIS support\n```sh\nmake USE_PGXS=1\nmake install USE_PGXS=1\n```\n\nBuild and install without GIS support against separate compiled and installed SQLite version placed at given path.\nExample for `/opt/testing/other/SQLite/3.49.0`.\n```sh\nmake USE_PGXS=1 SQLITE_FOR_TESTING_DIR=/opt/testing/other/SQLite/3.49.0\nmake install USE_PGXS=1 SQLITE_FOR_TESTING_DIR=/opt/testing/other/SQLite/3.49.0\n```\n\nBuild and install with GIS support\n```sh\nmake USE_PGXS=1 ENABLE_GIS=1\nmake install USE_PGXS=1 ENABLE_GIS=1\n```\n\nAlso you can build against separate SQLite version and with GIS support using obvious combination of variables.\n\nIf you want to build `sqlite_fdw` in a source tree of PostgreSQL, use\n```sh\nmake\nmake install\n```\nYou also can add `ENABLE_GIS=1` for GIS support or for testing if you have got\ncompiled PostGIS in `contrib/postgis` directory. Please refer [PostGIS installation script](GitHubActions/build_postgis.sh) for Debian/Ubuntu configuration details.\n\nUsage\n-----\n\n### CREATE SERVER options\n\n`sqlite_fdw` accepts the following options via the `CREATE SERVER` command:\n\n- **database** as *string*, **required**, no default\n\n  SQLite database file address.\n\n- **updatable** as *boolean*, optional, default *true*\n\n  This option can allow or disallow data modification on foreign server for all foreign objects by default. Please note, this option can be overwritten on table level or have no effect because of some filesystem restrictions, see [connection to SQLite database file and access control](#connection-to-sqlite-database-file-and-access-control). This is only recommentadion of PostgreSQL foreign server owner user not to modify data in foreign server tables. For strong restriction see the next option `force_readonly`.\n\n- **force_readonly** as *boolean*, optional, default *false*\n\n  This option is useful if you need grant user permission to create a foreign tables on the foreign server and revoke user permission to modify any table data on this foreign server. This option with `true` value can disallow any write operations on foreign server table data through SQLite file readonly access mode. This option driven only by foreign server owner role can not be overwritten by any `updatable` option value. This is a strong restriction given by PostgreSQL foreign server owner user not to modify data in any foreign server tables. Also see [Connection to SQLite database file and access control](#connection-to-sqlite-database-file-and-access-control).\n\n- **truncatable** as *boolean*, optional, default *false*\n\n  Allows foreign tables to be truncated using the `TRUNCATE` command.\n\n- **keep_connections** as *boolean*, optional, default *true*\n\n  Allows to keep connections to SQLite while there is no SQL operations between PostgreSQL and SQLite.\n\n- **batch_size** as *integer*, optional, default *1*\n\n  Specifies the number of rows which should be inserted in a single `INSERT` operation. This setting can be overridden for individual tables.\n\n### CREATE USER MAPPING options\n\nThere is no user or password conceptions in SQLite, hence `sqlite_fdw` no need any `CREATE USER MAPPING` command. About access model and possible data modifications problems see about [connection to SQLite database file and access control](#connection-to-sqlite-database-file-and-access-control).\n\n### CREATE FOREIGN TABLE options\n\n`sqlite_fdw` accepts the following table-level options via the\n`CREATE FOREIGN TABLE` command:\n\n- **table** as *string*, optional, no default\n\n  SQLite table name. Use if not equal to name of foreign table in PostgreSQL. Also see about [identifier case handling](#identifier-case-handling).\n\n- **truncatable** as *boolean*, optional, default from the same `CREATE SERVER` option\n\n  See `CREATE SERVER` options section for details.\n\n- **batch_size** as *integer*, optional, default from the same `CREATE SERVER` option\n\n  See `CREATE SERVER` options section for details.\n\n- **updatable** as *boolean*, optional, default *true*\n\n  This option can allow or disallow data modification on separate foreign table. Please note, this option can have no effect if there is foreign server option `force_readonly` = `true` or depends on filesystem context, see about [connection to SQLite database file and access control](#connection-to-sqlite-database-file-and-access-control).\n\n`sqlite_fdw` accepts the following column-level options via the\n`CREATE FOREIGN TABLE` command:\n\n- **column_name** as *string*, optional, no default\n\n  This option gives the column name to use for the column on the remote server. Also see about [identifier case handling](#identifier-case-handling).\n\n- **column_type** as *string*, optional, no default\n\n\tSet preferred SQLite affinity for some PostgreSQL data types can be stored in different ways\nin SQLite (mixed affinity case). Updated and inserted values will have this affinity. Default preferred SQLite affinity for `timestamp` and `uuid` PostgreSQL data types is `text`.\n\n  - Use `INT` value for SQLite column (epoch Unix Time) to be treated/visualized as `timestamp` in PostgreSQL.\n  - Use `BLOB` value for SQLite column to be treated/visualized as `uuid`.\n\n- **key** as *boolean*, optional, default *false*\n\n  Indicates a column as a part of primary key or unique key of SQLite table.\n\n### Datatypes\nThis table represents `sqlite_fdw` behaviour if in PostgreSQL foreign table column some [affinity](https://www.sqlite.org/datatype3.html) of SQLite data is detected. Some details about data values support see in [limitations](#limitations).\n\n* **∅**  - no support (runtime error)\n* **✔**  - 1↔1, PostgreSQL datatype is equal to SQLite affinity\n* **✔-** - PostgreSQL datatype is equal to SQLite affinity, but possible out of range error\n* **V**  - transparent transformation\n* **V+** - transparent transformation if possible\n* **i**  - ISO:SQL transformation for some special constants\n* **?** - not described/not tested\n* **T** - cast to text in SQLite utf-8 encoding, then to **PostgreSQL text with current encoding of database** and then transformation for `text` affinity if applicable\n\nSQLite `NULL` affinity always can be transparent converted for a nullable column in PostgreSQL.\n\n**SQLite data processing dependend on affinity**\n\n|  PostgreSQL  |     INT      |     REAL     |    BLOB      |    TEXT      | TEXT but <br>empty|nearest<br>affinity|\n|-------------:|:------------:|:------------:|:------------:|:------------:|:------------:|-------------:|\n|         bool |      V       |       ∅      |      T       |      i       |      ∅       | INT          |\n|       bit(n) | V<br>(n<=64) |       ∅      |      ∅       |      ∅       |      ∅       | INT          |\n|        bytea |      ∅       |       ∅      |      ✔       |      V       |      ?       | BLOB         |\n|      char(n) |      ?       |       ?      |      T       |      ✔-      |      V       | TEXT         |\n|         date |      V       |       V      |      T       |      V+      |    `NULL`    | ?            |\n|       float4 |      V+      |       ✔      |      ∅       |      i       |    `NULL`    | REAL         |\n|       float8 |      V+      |       ✔      |      ∅       |      i       |    `NULL`    | REAL         |\n|[geometry](GIS.md)| ∅       |       ∅      |      V+      |      ∅       |      ∅       | BLOB         |\n|[geography](GIS.md)|∅       |       ∅      |      V+      |      ∅       |      ∅       | BLOB         |\n|         int2 |      ✔-      |       ?      |      ∅       |      ∅       |    `NULL`    | INT          |\n|         int4 |      ✔-      |       ?      |      ∅       |      ∅       |    `NULL`    | INT          |\n|         int8 |      ✔       |       ?      |      ∅       |      ∅       |    `NULL`    | INT          |\n|         json |      ∅       |       ∅      |      V+       |      V+      |      ∅       | TEXT         |\n|        jsonb |      ∅       |       ∅      |      V+       |      V+      |      ∅       | BLOB         |\n|      macaddr |      ✔-      |       ∅      | V<br>(Len=6b)|      V+      |      ?       | INT          |\n|     macaddr8 |      ✔       |       ∅      | V<br>(Len=8b)|      V+      |      ?       | INT          |\n|         name |      ?       |       ?      |      T       |      ✔-      |    `NULL`    | TEXT         |\n|      numeric |      V       |       V      |      T       |      i       |    `NULL`    | REAL         |\n|         text |      ?       |       ?      |      T       |      ✔       |      V       | TEXT         |\n|         time |      V       |       V      |      T       |      V+      |    `NULL`    | ?            |\n|    timestamp |      V       |       V      |      T       |      V+      |    `NULL`    | ?            |\n|timestamp + tz|      V       |       V      |      T       |      V+      |    `NULL`    | ?            |\n|         uuid |      ∅       |       ∅      |V+<br>(Len=16b)|     V+      |      ∅       | TEXT, BLOB   |\n|   varchar(n) |      ?       |       ?      |      T       |      ✔-       |      V       | TEXT         |\n|    varbit(n) | V<br>(n<=64) |       ∅      |      ∅       |      ∅       |      ∅       | INT          |\n\n\n### IMPORT FOREIGN SCHEMA options\n\n`sqlite_fdw` supports [IMPORT FOREIGN SCHEMA](https://www.postgresql.org/docs/current/sql-importforeignschema.html)\n(PostgreSQL 9.5+) and accepts following options via the `IMPORT FOREIGN SCHEMA` command:\n\n- **import_default** as *boolean*, optional, default *false*\n\n  Allow borrowing default values from SQLite table DDL.\n\n- **import_not_null** as *boolean*, optional, default *true*\n\n  Allow borrowing `NULL`/`NOT NULL` constraints from SQLite table DDL.\n\n#### Datatype translation rules for `IMPORT FOREIGN SCHEMA`\n\n| SQLite       | PostgreSQL       |\n|-------------:|:----------------:|\n| int          | bigint           |\n| char         | text             |\n| clob         | text             |\n| text         | text             |\n| blob         | bytea            |\n| real         | double precision |\n| floa         | double precision |\n| doub         | double precision |\n| datetime     | timestamp        |\n| time         | time             |\n| date         | date             |\n| uuid         | uuid             |\n| macaddr      | macaddr          |\n| macaddr8     | macaddr8         |\n| [geometry](GIS.md)     | geometry         |\n| [geography](GIS.md)    | geography        |\n| json         | json             |\n| jsonb        | jsonb            |\n\n**Note:** In case of `sqlite_fdw` compiling without GIS support, GIS data\ntypes will be converted to `bytea`.\n\n### TRUNCATE support\n\n`sqlite_fdw` implements the foreign data wrapper `TRUNCATE` API, available\nfrom PostgreSQL 14.\n\nAs SQLite does not provide a `TRUNCATE` command, it is simulated with a\nsimple unqualified `DELETE` operation.\n\nActually, `TRUNCATE ... CASCADE` can be simulated if we create child table of SQLite with foreign keys and `ON DELETE CASCADE`, and then executing `TRUNCATE` (which will be deparsed to `DELETE`).\n\nFollowing restrictions apply:\n - `TRUNCATE ... RESTART IDENTITY` is not supported\n - SQLite tables with foreign key references can cause errors during truncating\n\n### Connection to SQLite database file and access control\n\nIn OS `sqlite_fdw` works as executed code with permissions of user of PostgreSQL server. Usually it is `postgres` OS user.\n\n#### Data read access\nFor succesfully connection to SQLite database file you must have at least existed and correct SQLite file readable for OS user of PostgreSQL server process. This means all directories by path to the file must be also readable (listable) for OS user of PostgreSQL server process. There are no other conditions for PostreSQL database superuser to read all of SQLite data if there are also `sqlite_fdw` extension in the database and `FOREIGN SERVER` for SQLite database file.\n\n#### Data change access\n\nData modification access in `sqlite_fdw` drived by both operating system and PostgreSQL.\n\nOS restrictions can disallow any SQLite data modifications. Hence any PostgreSQL `FOREIGN SERVER` or `FOREIGN TABLE` options or `GRANT`s can be absolutely not effective. In this case SQLite data modification operations allowed by PostgreSQL can cause error message from SQLite like `attempt to write a readonly database` with result code `8`.\n\nFull list of OS-leveled conditions of data modification access to SQLite database file\n- Existed SQLite file is not corrupted by SQLite engine conditions.\n- All path elements of the file are readable (listable) for OS user of PostgreSQL server process.\n- The file and a directory of the file placed on readwrite filesystem. For example `sqashfs` is always read-only, remote `sshfs` can be read-only, a disk partition can be mounted in read-only mode etc.\n- The file is writable for OS user of PostgreSQL server process.\n- The directory of the file is writable for OS user of PostgreSQL server process because SQLite creates some temporary transaction files.\n\nFull list of PostgreSQL-leveled conditions of data modification access to SQLite database file\n- The `FOREIGN SERVER` of the SQLite file have no `force_readonly` = `true` option value.\n- You have `USAGE` right `GRANT` for the `FOREIGN SERVER`.\n- The `FOREIGN TABLE` of SQLite table have no `updatable` = `false` option value.\n- If the `FOREIGN TABLE` have no `updatable` option, ensure `FOREIGN SERVER` have no `updatable` = `false` option value.\n\nGenerally for `sqlite_fdw` access management `FOREIGN SERVER` owner can be like _remote access manager_ for other FDWs.\n\n_Remote access manager_ can block any data modififcations in remote database for _remote user_ of a FDW. In this case SQLite have no user or separate access conceptions, hence `FOREIGN SERVER` owner combines _remote access manager_ role with internal PostgreSQL roles such as `FOREIGN SERVER` access management.\n\nFunctions\n---------\n\nAs well as the standard `sqlite_fdw_handler()` and `sqlite_fdw_validator()`\nfunctions, `sqlite_fdw` provides the following user-callable utility functions:\n\n- SETOF record **sqlite_fdw_get_connections**(server_name text, valid bool)\n\n- bool **sqlite_fdw_disconnect**(text)\n\n  Closes connection from PostgreSQL to SQLite in the current session.\n\n- bool **sqlite_fdw_disconnect_all()**\n\n- **sqlite_fdw_version()**;\nReturns standard \"version integer\" as `major version * 10000 + minor version * 100 + bugfix`.\n```\nsqlite_fdw_version\n--------------------\n              20500\n```\n\nIdentifier case handling\n------------------------\n\nPostgreSQL folds identifiers to lower case by default, SQLite is case insensitive by default\nonly for uppercase and lowercase ASCII base latin letters. It's important\nto be aware of potential issues with table and column names.\n\nFollowing SQL isn't correct for SQLite: `Error: duplicate column name: a`, but is correct for PostgreSQL\n\n```sql\n\tCREATE TABLE T (\n\t  \"A\" INTEGER,\n\t  \"a\" NUMERIC\n\t);\n```\nFollowing SQLs is correct for both SQLite and PostgreSQL because there is no column\nwith names composed from ASCII base latin letters *only*.\n\n```sql\n\tCREATE TABLE T_кир (\n\t  \"А\" INTEGER,\n\t  \"а\" NUMERIC\n\t);\n\tCREATE TABLE T_ελλ (\n\t  \"Α\" INTEGER,\n\t  \"α\" NUMERIC\n\t);\n\tCREATE TABLE T_dia (\n\t  \"Ä\" INTEGER,\n\t  \"ä\" NUMERIC\n\t);\n```\n\nFor SQLite there is no difference between\n\n```sql\n\tSELECT * FROM t;   -- №1\n\tSELECT * FROM T;   -- №2\n\tSELECT * FROM \"t\"; -- №3\n\tSELECT * FROM \"T\"; -- №4\n```\nFor PostgreSQL the query with comment `№4` is independend query to table `T`, not to table `t` as other queries.\nPlease note this table name composed from ASCII base latin letters *only*. This is not applicable for other\nalphabet systems or mixed names. This is because `toLower` operation in PostgreSQL is Unicode operation but\nASCII only operation in SQLite, hence other characters will not be changed.\n\n```sql\n\tSELECT * FROM т;   -- №5\n\tSELECT * FROM Т;   -- №6\n\tSELECT * FROM \"т\"; -- №7\n\tSELECT * FROM \"Т\"; -- №8\n```\nIn this case for PostgreSQL the query with comment `№8` is independend query to table `Т`, not to table `т`\nas other queries. But for SQLite the queries with comments `№6` and `№8` belongs to table `Т`, and the queries with\ncomments `№5` and `№7` belongs to table `т`.\n\nIf there is\n\n```sql\n\tCREATE TABLE T (\n\t  A INTEGER,\n\t  b REAL\n\t);\n```\nin SQLite, both `a` and `A` , `b` and `B` columns will have the same real datasource in SQLite in follow foreign table:\n\n```sql\n\tCREATE FOREIGN TABLE \"SQLite test\" (\n\t  \"A\" int4 NULL,\n\t  \"B\" float8 NULL,\n\t  \"a\" int8 NULL,\n\t  \"b\" numeric NULL\n\t)\n\tSERVER sqlite_server\n\tOPTIONS (table 'T');\n```\n\nGenerated columns\n-----------------\n\nSQLite provides support for [generated columns](https://www.sqlite.org/gencol.html).\nBehaviour of `sqlite_fdw` with this columns _isn't yet described_.\n\nNote that while `sqlite_fdw` will `INSERT` or `UPDATE` the generated column value\nin SQLite, there is nothing to stop the value being modified within SQLite,\nand hence no guarantee that in subsequent `SELECT` operations the column will\nstill contain the expected generated value. This limitation also applies to\n`postgres_fdw`.\n\nFor more details on generated columns see:\n\n- [Generated Columns](https://www.postgresql.org/docs/current/ddl-generated-columns.html)\n- [CREATE FOREIGN TABLE](https://www.postgresql.org/docs/current/sql-createforeigntable.html)\n\nCharacter set handling\n----------------------\n\nThere is [no character set metadata](https://www.sqlite.org/search?s=d&q=character+set)\nstored in SQLite, only [`PRAGMA encoding;`](https://www.sqlite.org/pragma.html#pragma_encoding) with UTF-only values (`UTF-8`, `UTF-16`, `UTF-16le`, `UTF-16be`). [SQLite text output function](https://www.sqlite.org/c3ref/column_blob.html) guarantees UTF-8 encoding.\n\nWhen `sqlite_fdw` connects to a SQLite, all strings are interpreted acording the PostgreSQL database's server encoding.\nIt's not a problem if your PostgreSQL database encoding belongs to Unicode family. Otherewise interpretation transformation problems can occur. Some unproper for PostgreSQL database encoding characters will cause error like `character with byte sequence 0x** in encoding \"UTF8\" has no equivalent in encoding \"**\"`.\n\nCharacter case functions such as `upper`, `lower` and other are not pushed down because they does not work with Unicode character in SQLite.\n\n`Sqlite_fdw` tested with PostgreSQL database encodings `EUC_JP`, `EUC_KR`, `ISO_8859_5`, `ISO_8859_6`, `ISO_8859_7`, `ISO_8859_8`, `LATIN1`, `LATIN2`, `LATIN3`, `LATIN4`, `LATIN5`, `LATIN6`, `LATIN7`, `LATIN8`, `LATIN9`, `LATIN9`, `LATIN10`, `WIN1250`, `WIN1251`, `WIN1252`, `WIN1253`, `WIN1254`, `WIN1255`, `WIN1256`, `WIN1257` and it's synomyms. Some other encodings also can be supported, but not tested.\n\nExamples\n--------\n\n### Install the extension:\n\nOnce for a database you need, as PostgreSQL superuser.\n\n```sql\n\tCREATE EXTENSION sqlite_fdw;\n```\n\n### Create a foreign server with appropriate configuration:\n\nOnce for a foreign datasource you need, as PostgreSQL superuser. Please specify SQLite database path using `database` option.\n\n```sql\n\tCREATE SERVER sqlite_server\n\tFOREIGN DATA WRAPPER sqlite_fdw\n\tOPTIONS (\n\t\t\t  database '/path/to/database'\n\t);\n```\n\n### Grant usage on foreign server to normal user in PostgreSQL:\n\nOnce for a normal user (non-superuser) in PostgreSQL, as PostgreSQL superuser. It is a good idea to use a superuser only where really necessary, so let's allow a normal user to use the foreign server (this is not required for the example to work, but it's secirity recomedation).\n\n```sql\n\tGRANT USAGE ON FOREIGN SERVER sqlite_server TO pguser;\n```\nWhere `pguser` is a sample user for works with foreign server (and foreign tables).\n\n### User mapping\n\nThere is no user or password conceptions in SQLite, hence `sqlite_fdw` no need any `CREATE USER MAPPING` command. About access problems see in [CREATE USER MAPPING options](#create-user-mapping-options).\n\n### Create foreign table\nAll `CREATE FOREIGN TABLE` SQL commands can be executed as a normal PostgreSQL user if there were correct `GRANT USAGE ON FOREIGN SERVER`. No need PostgreSQL supersuer for secirity reasons but also works with PostgreSQL supersuer.\n\nPlease specify `table` option if SQLite table name is different from foreign table name.\n\n```sql\n\tCREATE FOREIGN TABLE t1 (\n\t  a integer,\n\t  b text\n\t)\n\tSERVER sqlite_server\n\tOPTIONS (\n\t  table 't1_sqlite'\n\t);\n```\n\nIf you want to update tables, please add `OPTIONS (key 'true')` to a primary key or unique key like the following:\n\n```sql\n\tCREATE FOREIGN TABLE t1(\n\t  a integer OPTIONS (key 'true'),\n\t  b text\n\t)\n\tSERVER sqlite_server\n\tOPTIONS (\n\t  table 't1_sqlite'\n\t);\n```\n\nIf you need to convert INT SQLite column (epoch Unix Time) to be treated/visualized as `TIMESTAMP` in PostgreSQL, please add `OPTIONS (column_type 'INT')` when defining FOREIGN table at PostgreSQL like the following:\n\n```sql\n\tCREATE FOREIGN TABLE t1(\n\t  a integer,\n\t  b text,\n\t  c timestamp without time zone OPTIONS (column_type 'INT')\n\t)\n\tSERVER sqlite_server\n\tOPTIONS (\n\t  table 't1_sqlite'\n\t);\n```\n\nAs above, but with aliased column names:\n\n```sql\n\tCREATE FOREIGN TABLE t1(\n\t  a integer,\n\t  b text OPTIONS (column_name 'test_id'),\n\t  c timestamp without time zone OPTIONS (column_type 'INT', column_name 'unixtime')\n\t)\n\tSERVER sqlite_server\n\tOPTIONS (\n\t  table 't1_sqlite'\n\t);\n```\n\n### Import a SQLite database as schema to PostgreSQL:\n\n```sql\n\tIMPORT FOREIGN SCHEMA someschema\n\tFROM SERVER sqlite_server\n\tINTO public;\n```\n\nNote: `someschema` has no particular meaning and can be set to an arbitrary value.\n\n### Access foreign table\nFor the table from previous examples\n\n```sql\n\tSELECT * FROM t1;\n```\n\nLimitations\n-----------\n\n### SQL commands\n- `COPY` command for foreign tables is not supported\n- `IMPORT` of generated column is not supported\n- `INSERT` into a partitioned table which has foreign partitions is not supported. Error `Not support partition insert` will display.\n- `TRUNCATE` in `sqlite_fdw` always delete data of both parent and child tables (no matter user inputs `TRUNCATE table CASCADE` or `TRUNCATE table RESTRICT`) if there are foreign-keys references with `ON DELETE CASCADE` clause.\n- `RETURNING` is not supported.\n\n### Mixed affinity support\nSQLite `text` affinity values which is different for SQLite unique checks can be equal for PostgreSQL because `sqlite_fdw` unifyes semantics of values, not storage form. For example `1`(integer), `Y`(text) and `tRuE`(text) SQLite values is different in SQLite but equal in PostgreSQL as `true` values of `boolean` column. This is also applicable for a data with `text` affinity in `uuid`, `timestamp`, `double precision`, `float` and `numeric` columns of foreign tables. **Please be carefully if you want to use mixed affinity column as PostgreSQL foreign table primary key**.\n\n### Arrays\nArray support is experimental. Please be careful.\n- `sqlite_fdw` only supports `ARRAY` const, for example, `ANY (ARRAY[1, 2, 3])` or `ANY ('{1, 2 ,3}')`.\n- `sqlite_fdw` does not support `ARRAY` expression, for example, `ANY (ARRAY[c1, 1, c1+0])`.\n- For `ANY(ARRAY)` clause, `sqlite_fdw` deparses it using `IN` operator.\n\n### Numbers (range and precision)\n- For `sum` function of SQLite, output of `sum(bigint)` is `integer` value. If input values are big, the overflow error may occurs on SQLite because it overflow within the range of signed 64bit. For PostgreSQL, it can calculate as over the precision of `bigint`, so overflow does not occur.\n- SQLite promises to preserve the 15 most significant digits of a floating point value. The big value which exceed 15 most significant digits may become different value after inserted.\n- SQLite does not support `numeric` type as PostgreSQL. Therefore, it does not allow to store numbers with too high precision and scale. Error out of range occurs.\n- SQLite does not support `NaN` special value for IEEE 754-2008 numbers. Please use this special value very cerefully because there is no such conception in SQLite at all and `NaN` value treated in SQLite as `NULL`.\n- SQLite support `+Infinity` and `-Infinity` special values for IEEE 754-2008 numbers in SQL expressions with numeric context. This values can be readed with both `text` and `real` affiniy, but can be writed to SQLite only with `real` affinity (as signed out of range value `9.0e999`).\n\n### Boolean values\n- `sqlite_fdw` boolean values support exists only for `bool` columns in foreign table. SQLite documentation recommends to store boolean as value with `integer` [affinity](https://www.sqlite.org/datatype3.html). `NULL` isn't converted, 1 converted to `true`, all other `NOT NULL` values converted to `false`. During `SELECT ... WHERE condition_column` condition converted only to `condition_column`.\n- `sqlite_fdw` don't provides limited support of boolean values if `bool` column in foreign table mapped to SQLite `text` [affinity](https://www.sqlite.org/datatype3.html).\n\n### UUID values\n- `sqlite_fdw` UUID values support exists only for `uuid` columns in foreign table. SQLite documentation recommends to store UUID as value with both `blob` and `text` [affinity](https://www.sqlite.org/datatype3.html). `sqlite_fdw` can pushdown both reading and filtering both `text` and `blob` values.\n- Expected affinity of UUID value in SQLite table determined by `column_type` option of the column\nfor `INSERT` and `UPDATE` commands. PostgreSQL supports both `blob` and `text` [affinity](https://www.sqlite.org/datatype3.html).\n\n### bit and varbit support\n- `sqlite_fdw` PostgreSQL `bit`/`varbit` values support based on `int` SQLite data affinity, because there is no per bit operations for SQLite `blob` affinity data. Maximum SQLite `int` affinity value is 8 bytes length, hence maximum `bit`/`varbit` values length is 64 bits.\n- `sqlite_fdw` doesn't pushdown `#` (XOR) operator because there is no equal SQLite operator.\n\n### MAC address support\n- `sqlite_fdw` PostgreSQL `macaddr`/`macaddr8` values support based on `int` SQLite data affinity, because there is no per bit operations for SQLite `blob` affinity data. For `macaddr` out of range error is possible because this type is 6 bytes length, but SQLite `int` can store value up to 8 bytes.\n- `sqlite_fdw` doesn't pushdown any operations with MAC adresses because there is 3 possible affinities for it in SQLite: `integer`, `blob` and `text`.\n\n### JSON support and operators\n- Operators `->` and `->>` for `json` and `jsonb` are pushed down. This means if you deal with a foreign table only, you can use SQLite syntax of `->` and `->>` operators which is more rich than PostgreSQL syntax. In PostgreSQL this operators means only 1-leveled extraction after one call, but possible multilevel extraction in one call of the operator in SQLite. You can extract `'{\"a\": 2, \"c\": [4, 5, {\"f\": 7}]}' ->'c' -> 2` with result `{\"f\":7}` both for PostgreSQL and SQLite tables, but `'{\"a\": 2, \"c\": [4, 5, {\"f\": 7}]}' ->'$.c[2]'` possible only in SQLite and for a foreign table.\n- For PostgreSQL numeric argument of `->` and `->>` operators means only coordinate inside of array. In SQLite transformable to number text argument of this operators also can extract array element. PostgreSQL differs `json -> (2::text)` and `json -> 2`, but SQLite not: `json -> '2'`.\n- Please note you can turn off processing of normalizing possible SQLite `json` values with `text` affinity for a column with formal SQLite `json` data type as option `column_type` = `text`. This can increase `SELECT` or `ORDER` speed, because there will be no normalize function wrapping, but in this case any query will have unsuccessfully result in case of any value with `blob` affiniy including any possible SQLite `jsonb` value.\n```sql\n-- a query with normalization - standard ISO:SQL behaviour\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n                         QUERY PLAN\n-------------------------------------------------------------\n Foreign Scan on public.\"type_JSON\" j\n   Output: i, j, (j -> 'c'::text)\n   SQLite query: SELECT `i`, json(`j`) FROM main.\"type_JSON\"\n(3 rows)\n\n-- turn off normalization\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n                      QUERY PLAN\n-------------------------------------------------------\n Foreign Scan on public.\"type_JSON\" j\n   Output: i, j, (j -> 'c'::text)\n   SQLite query: SELECT `i`, `j` FROM main.\"type_JSON\"\n(3 rows)\n```\n\nTests\n-----\nTest directory have structure as following:\n\n```\n+---sql\n|   +---13.15\n|   |       filename1.sql\n|   |       filename2.sql\n|   |\n|   +---14.12\n|   |       filename1.sql\n|   |       filename2.sql\n|   |\n.................\n|   \\---17.0\n|          filename1.sql\n|          filename2.sql\n|\n\\---expected\n|   +---13.15\n|   |       filename1.out\n|   |       filename2.out\n|   |\n|   +---14.12\n|   |       filename1.out\n|   |       filename2.out\n|   |\n.................\n|   \\---17.0\n            filename1.out\n            filename2.out\n```\nThe test cases for each version are based on the test of corresponding version of PostgreSQL.\nYou can execute test by test.sh directly.\nThe version of PostgreSQL is detected automatically by $(VERSION) variable in Makefile.\nThe corresponding sql and expected directory will be used to compare the result. For example, for Postgres 15.0, you can execute \"test.sh\" directly, and the sql/15.0 and expected/15.0 will be used to compare automatically.\nPlease don't forget a command like `export SQLITE_FOR_TESTING_DIR=` with the same path as in SQLite's `./configure --prefix` berfore testing if you want to test not against your OS SQLite version, but against separate downloaded, compiled and installed SQLite version.\n\nTest data directory is `/tmp/sqlite_fdw_test`. If you have `/tmp` mounted as `tmpfs` the tests will be up to 800% faster.\n\nContributing\n------------\n\nOpening issues and pull requests on GitHub are welcome.\nFor pull request, please make sure these items below for testing:\n- Create test cases (if needed) for the latest version of PostgreSQL supported by `sqlite_fdw`. All error testcases should have a comment about test purpose.\n- Execute test cases and update expectations for the latest version of PostgreSQL\n- Test creation and execution for other PostgreSQL versions are welcome but not required.\n\nPreferred code style see in PostgreSQL source codes. For example\n\n```C\ntype\nfunct_name (type arg ...)\n{\n\tt1 var1 = value1;\n\tt2 var2 = value2;\n\n\tfor (;;)\n\t{\n\t}\n\tif ()\n\t{\n\t}\n}\n```\nUseful links\n------------\n\n### Source\n\n - https://github.com/pgspider/sqlite_fdw\n - https://pgxn.org/dist/sqlite_fdw/\n\n### General FDW Documentation\n\n - https://www.postgresql.org/docs/current/ddl-foreign-data.html\n - https://www.postgresql.org/docs/current/sql-createforeigndatawrapper.html\n - https://www.postgresql.org/docs/current/sql-createforeigntable.html\n - https://www.postgresql.org/docs/current/sql-importforeignschema.html\n - https://www.postgresql.org/docs/current/fdwhandler.html\n - https://www.postgresql.org/docs/current/postgres-fdw.html\n\n### Other FDWs\n\n - https://wiki.postgresql.org/wiki/Fdw\n - https://pgxn.org/tag/fdw/\n\nLicense\n-------\n* Copyright © 2018, TOSHIBA CORPORATION\n* Copyright © 2011 - 2016, EnterpriseDB Corporation\n\nPermission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.\n\nSee the [`License`][3] file for full details.\n\n[1]: https://www.sqlite.org/download.html\n[2]: https://www.sqlite.org/howtocompile.html\n[3]: License\n"
  },
  {
    "path": "connection.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n *        connection.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#include \"access/xact.h\"\n#include \"commands/defrem.h\"\n#if (PG_VERSION_NUM >= 140000 && PG_VERSION_NUM < 150000)\n\t#include \"miscadmin.h\"\n#endif\n#include \"optimizer/cost.h\"\n#include \"utils/builtins.h\"\n#include \"utils/inval.h\"\n#include \"utils/syscache.h\"\n\n\n/*\n * Connection cache hash table entry\n *\n * The lookup key in this hash table is the foreign server OID\n */\ntypedef Oid ConnCacheKey;\n\ntypedef struct ConnCacheEntry\n{\n\tConnCacheKey key;\t\t\t/* hash key (must be first) */\n\tsqlite3\t   *conn;\t\t\t/* connection to foreign server, or NULL */\n\t/* Remaining fields are invalid when conn is NULL: */\n\tint\t\t\txact_depth;\t\t/* 0 = no xact open, 1 = main xact open, 2 =\n\t\t\t\t\t\t\t\t * one level of subxact open, etc */\n\tbool\t\tkeep_connections;\t/* setting value of keep_connections\n\t\t\t\t\t\t\t\t\t * server option */\n\tbool\t\ttruncatable;\t/* check table can truncate or not */\n\tbool\t\treadonly;\t\t/* option force_readonly, readonly SQLite file mode */\n\tbool\t\tinvalidated;\t/* true if reconnect is pending */\n\tOid\t\t\tserverid;\t\t/* foreign server OID used to get server name */\n\tList\t   *stmtList;\t\t/* list stmt associated with conn */\n\tuint32\t\tserver_hashvalue;\t/* hash value of foreign server OID */\n} ConnCacheEntry;\n\n/*\n * Connection cache (initialized on first use)\n */\nstatic HTAB *ConnectionHash = NULL;\n\n/* tracks whether any work is needed in callback functions */\nstatic volatile bool xact_got_connection = false;\n\nPG_FUNCTION_INFO_V1(sqlite_fdw_get_connections);\nPG_FUNCTION_INFO_V1(sqlite_fdw_disconnect);\nPG_FUNCTION_INFO_V1(sqlite_fdw_disconnect_all);\n\nstatic sqlite3 *sqlite_open_db(const char *dbpath, int flags);\nstatic void sqlite_make_new_connection(ConnCacheEntry *entry, ForeignServer *server);\nvoid\t\tsqlite_do_sql_command(sqlite3 * conn, const char *sql, int level, List **busy_connection);\nstatic void sqlite_begin_remote_xact(ConnCacheEntry *entry);\nstatic void sqlitefdw_xact_callback(XactEvent event, void *arg);\nstatic void sqlitefdw_reset_xact_state(ConnCacheEntry *entry, bool toplevel);\nstatic void sqlitefdw_subxact_callback(SubXactEvent event,\n\t\t\t\t\t\t\t\t\t   SubTransactionId mySubid,\n\t\t\t\t\t\t\t\t\t   SubTransactionId parentSubid,\n\t\t\t\t\t\t\t\t\t   void *arg);\nstatic void sqlitefdw_inval_callback(Datum arg, int cacheid, uint32 hashvalue);\nstatic void sqlitefdw_abort_cleanup(ConnCacheEntry *entry, bool toplevel, List **busy_connection);\n#if PG_VERSION_NUM >= 140000\nstatic bool sqlite_disconnect_cached_connections(Oid serverid);\n#endif\nstatic void sqlite_finalize_list_stmt(List **list);\nstatic List *sqlite_append_stmt_to_list(List *list, sqlite3_stmt * stmt);\n\ntypedef struct BusyHandlerArg\n{\n\tsqlite3\t   *conn;\n\tconst char *sql;\n\tint\t\t\tlevel;\n} BusyHandlerArg;\n\n/*\n * sqlite_get_connection:\n * \t\t\tGet a connection which can be used to execute queries on\n * the remote Sqlite server with the user's authorization. A new connection\n * is established if we don't already have a suitable one.\n */\nsqlite3 *\nsqlite_get_connection(ForeignServer *server, bool truncatable)\n{\n\tbool\t\tfound;\n\tConnCacheEntry *entry;\n\tConnCacheKey key;\n\n\t/* First time through, initialize connection cache hashtable */\n\tif (ConnectionHash == NULL)\n\t{\n\t\tHASHCTL\t\tctl;\n\n\t\tMemSet(&ctl, 0, sizeof(ctl));\n\t\tctl.keysize = sizeof(ConnCacheKey);\n\t\tctl.entrysize = sizeof(ConnCacheEntry);\n\n\t\t/* allocate ConnectionHash in the cache context */\n\t\tctl.hcxt = CacheMemoryContext;\n\t\tConnectionHash = hash_create(\"sqlite_fdw connections\", 8,\n\t\t\t\t\t\t\t\t\t &ctl,\n#if (PG_VERSION_NUM >= 140000)\n\t\t\t\t\t\t\t\t\t HASH_ELEM | HASH_BLOBS);\n#else\n\t\t\t\t\t\t\t\t\t HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);\n#endif\n\n\t\t/*\n\t\t * Register some callback functions that manage connection cleanup.\n\t\t * This should be done just once in each backend.\n\t\t */\n\t\tRegisterXactCallback(sqlitefdw_xact_callback, NULL);\n\t\tRegisterSubXactCallback(sqlitefdw_subxact_callback, NULL);\n\t\tCacheRegisterSyscacheCallback(FOREIGNSERVEROID,\n\t\t\t\t\t\t\t\t\t  sqlitefdw_inval_callback, (Datum) 0);\n\t}\n\n\t/* Set flag that we did GetConnection during the current transaction */\n\txact_got_connection = true;\n\n\tkey = server->serverid;\n\n\t/*\n\t * Find or create cached entry for requested connection.\n\t */\n\tentry = hash_search(ConnectionHash, &key, HASH_ENTER, &found);\n\tif (!found)\n\t{\n\t\t/* If can not find any cached entry => initialize new hashtable entry */\n\t\tentry->conn = NULL;\n\t}\n\n\t/*\n\t * If the connection needs to be remade due to invalidation, disconnect as\n\t * soon as we're out of all transactions.\n\t */\n\tif (entry->conn != NULL && entry->invalidated && entry->xact_depth == 0)\n\t{\n\t\tint\t\t\trc = sqlite3_close(entry->conn);\n\n\t\telog(DEBUG1, \"closing connection %p for option changes to take effect. sqlite3_close=%d\",\n\t\t\t entry->conn, rc);\n\t\tentry->conn = NULL;\n\t}\n\n\t/*\n\t * If cache entry doesn't have a connection, we have to establish a new\n\t * connection.  (If sqlite_open_db has an error, the cache entry will\n\t * remain in a valid empty state, ie conn == NULL.)\n\t */\n\tif (entry->conn == NULL)\n\t\tsqlite_make_new_connection(entry, server);\n\n\tentry->truncatable = truncatable;\n\n\t/*\n\t * SQLite FDW support TRUNCATE command by executing DELETE statement\n\t * without WHERE clause. In order to delete records in parent and child\n\t * table subsequently, SQLite FDW executes \"PRAGMA foreign_keys = ON\"\n\t * before executing DELETE statement. But \"PRAGMA foreign_keys = ON\"\n\t * command does not have any affect when using within transaction.\n\t * Therefore, do not create transaction when executing TRUNCATE.\n\t */\n\tif (!entry->truncatable)\n\n\t\t/*\n\t\t * Start a new transaction or subtransaction if needed.\n\t\t */\n\t\tsqlite_begin_remote_xact(entry);\n\n\treturn entry->conn;\n}\n\n/*\n * Open remote sqlite database using specified database path\n * and flags of opened file descriptor mode.\n */\nstatic sqlite3 *\nsqlite_open_db(const char *dbpath, int flags)\n{\n\tsqlite3\t   *conn = NULL;\n\tint\t\t\trc;\n\tchar\t   *err;\n\tconst char *zVfs = NULL;\n\trc = sqlite3_open_v2(dbpath, &conn, flags, zVfs);\n\tif (rc != SQLITE_OK)\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t errmsg(\"Failed to open SQLite DB, file '%s', result code %d\", dbpath, rc)));\n\t/* make 'LIKE' of SQLite case sensitive like PostgreSQL */\n\trc = sqlite3_exec(conn, \"pragma case_sensitive_like=1\",\n\t\t\t\t\t  NULL, NULL, &err);\n\tif (rc != SQLITE_OK)\n\t{\n\t\tchar\t   *perr = pstrdup(err);\n\n\t\tsqlite3_free(err);\n\t\tsqlite3_close(conn);\n\t\tconn = NULL;\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t errmsg(\"Failed to open SQLite DB, file '%s', SQLite error '%s', result code %d\", dbpath, perr, rc)));\n\t}\n\t/* add included inner SQLite functions from separate c file\n\t * for using in data unifying during deparsing\n\t */\n\tsqlite_fdw_data_norm_functs_init(conn);\n\treturn conn;\n}\n\n\n/*\n * Reset all transient state fields in the cached connection entry and\n * establish new connection to the remote server.\n */\nstatic void\nsqlite_make_new_connection(ConnCacheEntry *entry, ForeignServer *server)\n{\n\tconst char *dbpath = NULL;\n\tListCell   *lc;\n\tint flags = 0;\n\n\tAssert(entry->conn == NULL);\n\n\tentry->serverid = server->serverid;\n\tentry->xact_depth = 0;\n\tentry->invalidated = false;\n\tentry->stmtList = NULL;\n\tentry->keep_connections = true;\n\tentry->readonly = false;\n\tentry->server_hashvalue =\n\t\tGetSysCacheHashValue1(FOREIGNSERVEROID,\n\t\t\t\t\t\t\t  ObjectIdGetDatum(server->serverid));\n\tforeach(lc, server->options)\n\t{\n\t\tDefElem\t   *def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"database\") == 0)\n\t\t\tdbpath = defGetString(def);\n\t\telse if (strcmp(def->defname, \"keep_connections\") == 0)\n\t\t\tentry->keep_connections = defGetBoolean(def);\n\t\telse if (strcmp(def->defname, \"force_readonly\") == 0)\n\t\t\tentry->readonly = defGetBoolean(def);\n\t}\n\n\tflags = flags | (entry->readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE);\n\t/* Try to make the connection */\n\tentry->conn = sqlite_open_db(dbpath, flags);\n}\n\n/*\n * cleanup_connection:\n * Delete all the cache entries on backend exists.\n */\nvoid\nsqlite_cleanup_connection(void)\n{\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n\tint\t\t\trc;\n\n\tif (ConnectionHash == NULL)\n\t\treturn;\n\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\tif (entry->conn == NULL)\n\t\t\tcontinue;\n\n\t\tsqlite_finalize_list_stmt(&entry->stmtList);\n\n\t\telog(DEBUG1, \"disconnecting sqlite_fdw connection %p\", entry->conn);\n\t\trc = sqlite3_close(entry->conn);\n\t\tentry->conn = NULL;\n\t\tif (rc != SQLITE_OK)\n\t\t{\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_CREATE_EXECUTION),\n\t\t\t\t\t errmsg(\"Failed to close SQLite DB\"),\n\t\t\t\t\t errhint(\"SQLite error '%s', SQLite result code %d\", sqlite3_errmsg(entry->conn), rc)\n\t\t\t\t\t));\n\t\t}\n\t}\n}\n\n/*\n * Convenience subroutine to issue a non-data-returning SQL command to remote\n */\nvoid\nsqlite_do_sql_command(sqlite3 * conn, const char *sql, int level, List **busy_connection)\n{\n\tchar\t   *err = NULL;\n\tint\t\t\trc;\n\n\telog(DEBUG3, \"sqlite_fdw do_sql_command %s\", sql);\n\n\trc = sqlite3_exec(conn, sql, NULL, NULL, &err);\n\n\tif (busy_connection && rc == SQLITE_BUSY)\n\t{\n\t\t/* Busy case will be handled later, not here */\n\t\tBusyHandlerArg *arg = palloc0(sizeof(BusyHandlerArg));\n\n\t\targ->conn = conn;\n\t\targ->sql = sql;\n\t\targ->level = level;\n\t\t*busy_connection = lappend(*busy_connection, arg);\n\n\t\treturn;\n\t}\n\n\tif (rc != SQLITE_OK)\n\t{\n\t\tchar\t   *perr = NULL;\n\n\t\tif (err)\n\t\t{\n\t\t\tperr = pstrdup(err);\n\t\t\tsqlite3_free(err);\n\n\t\t\tif (perr)\n\t\t\t{\n\t\t\t\tereport(level,\n\t\t\t\t\t\t(errcode(ERRCODE_FDW_ERROR),\n\t\t\t\t\t\t errmsg(\"SQLite failed to execute a query\"),\n\t\t\t\t\t\t errcontext(\"SQL query: %s\", sql),\n\t\t\t\t\t\t errhint(\"SQLite error '%s'\", perr)));\n\n\t\t\t\tpfree(perr);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tereport(level,\n\t\t\t\t\t(errcode(ERRCODE_FDW_ERROR),\n\t\t\t\t\t errmsg(\"SQLite failed to execute a query\"),\n\t\t\t\t\t errcontext(\"SQL query: %s\", sql)\n\t\t\t\t\t ));\n\t}\n}\n\n/*\n * Start remote transaction or subtransaction, if needed.\n */\nstatic void\nsqlite_begin_remote_xact(ConnCacheEntry *entry)\n{\n\tint\t\t\tcurlevel = GetCurrentTransactionNestLevel();\n\n\t/* Start main transaction if we haven't yet */\n\tif (entry->xact_depth <= 0)\n\t{\n\t\tconst char *sql;\n\n\t\telog(DEBUG3, \"starting remote transaction on connection %p\",\n\t\t\t entry->conn);\n\n\t\tsql = \"BEGIN\";\n\n\t\tsqlite_do_sql_command(entry->conn, sql, ERROR, NULL);\n\t\tentry->xact_depth = 1;\n\n\t}\n\n\t/*\n\t * If we're in a subtransaction, stack up savepoints to match our level.\n\t * This ensures we can rollback just the desired effects when a\n\t * subtransaction aborts.\n\t */\n\twhile (entry->xact_depth < curlevel)\n\t{\n\t\tchar\t\tsql[64];\n\n\t\tsnprintf(sql, sizeof(sql), \"SAVEPOINT s%d\", entry->xact_depth + 1);\n\t\tsqlite_do_sql_command(entry->conn, sql, ERROR, NULL);\n\t\tentry->xact_depth++;\n\t}\n}\n\n\n/*\n * Report an SQLite execution error.\n */\nvoid\nsqlitefdw_report_error(int elevel, sqlite3_stmt * stmt, sqlite3 * conn,\n\t\t\t\t\t   const char *sql, int rc)\n{\n\tconst char *message = sqlite3_errmsg(conn);\n\tint\t\t\terc = sqlite3_extended_errcode(conn);\n\tint\t\t\tsqlstate = ERRCODE_FDW_ERROR;\n\n\t/* copy sql before callling another SQLite API */\n\tif (message)\n\t\tmessage = pstrdup(message);\n\n\tif (!sql && stmt)\n\t{\n\t\tsql = sqlite3_sql(stmt);\n\t\tif (sql)\n\t\t\tsql = pstrdup(sqlite3_sql(stmt));\n\t}\n\tereport(ERROR,\n\t\t\t(errcode(sqlstate),\n\t\t\t errmsg(\"Failed to execute remote SQL\"),\n\t\t\t errcontext(\"SQL query: %s\", sql ? sql : \"\"),\n\t\t\t errhint(\"SQLite error '%s', SQLite primary result code %d, extended result code %d\", message ? message : \"\", rc, erc)\n\t\t\t));\n}\n\n/*\n * sqlitefdw_xact_callback --- cleanup at main-transaction end.\n */\nstatic void\nsqlitefdw_xact_callback(XactEvent event, void *arg)\n{\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n\tListCell *lc;\n\tList *busy_connection = NIL;\n\n\t/* Quick exit if no connections were touched in this transaction. */\n\tif (!xact_got_connection)\n\t\treturn;\n\n\telog(DEBUG1, \"sqlite_fdw xact_callback %d\", event);\n\n\t/*\n\t * Scan all connection cache entries to find open remote transactions, and\n\t * close them.\n\t */\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\t/* Ignore cache entry if no open connection right now */\n\t\tif (entry->conn == NULL)\n\t\t\tcontinue;\n\n\t\t/* If it has an open remote transaction, try to close it */\n\t\tif (entry->xact_depth > 0)\n\t\t{\n\t\t\telog(DEBUG3, \"closing remote transaction on connection %p\",\n\t\t\t\t entry->conn);\n\n\t\t\tswitch (event)\n\t\t\t{\n\t\t\t\tcase XACT_EVENT_PARALLEL_PRE_COMMIT:\n\t\t\t\tcase XACT_EVENT_PRE_COMMIT:\n\n\t\t\t\t\t/* Commit all remote transactions during pre-commit */\n\t\t\t\t\tif (!sqlite3_get_autocommit(entry->conn))\n\t\t\t\t\t\tsqlite_do_sql_command(entry->conn, \"COMMIT\", ERROR, &busy_connection);\n\t\t\t\t\t/* Finalize all prepared statements */\n\t\t\t\t\tsqlite_finalize_list_stmt(&entry->stmtList);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XACT_EVENT_PRE_PREPARE:\n\n\t\t\t\t\t/*\n\t\t\t\t\t * We disallow remote transactions that modified anything,\n\t\t\t\t\t * since it's not very reasonable to hold them open until\n\t\t\t\t\t * the prepared transaction is committed.  For the moment,\n\t\t\t\t\t * throw error unconditionally; later we might allow\n\t\t\t\t\t * read-only cases.  Note that the error will cause us to\n\t\t\t\t\t * come right back here with event == XACT_EVENT_ABORT, so\n\t\t\t\t\t * we'll clean up the connection state at that point.\n\t\t\t\t\t */\n\t\t\t\t\tereport(ERROR,\n\t\t\t\t\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t\t\t\t\t errmsg(\"cannot prepare a transaction that modified remote tables\")));\n\t\t\t\t\tbreak;\n\t\t\t\tcase XACT_EVENT_PARALLEL_COMMIT:\n\t\t\t\tcase XACT_EVENT_COMMIT:\n\t\t\t\tcase XACT_EVENT_PREPARE:\n\t\t\t\t\t/* Pre-commit should have closed the open transaction */\n\t\t\t\t\telog(ERROR, \"missed cleaning up connection during pre-commit\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase XACT_EVENT_PARALLEL_ABORT:\n\t\t\t\tcase XACT_EVENT_ABORT:\n\t\t\t\t\t{\n\t\t\t\t\t\tsqlitefdw_abort_cleanup(entry, true, &busy_connection);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Reset state to show we're out of a transaction */\n\t\tsqlitefdw_reset_xact_state(entry, true);\n\t}\n\n\t/* Execute again the query after server is available */\n\tforeach(lc, busy_connection)\n\t{\n\t\tBusyHandlerArg *arg = lfirst(lc);\n\n\t\t/*\n\t\t * If there is still error, we can not do anything more, just raise it.\n\t\t * requireBusyHandler is set to false, and NULL busy_connection list.\n\t\t */\n\t\tsqlite_do_sql_command(arg->conn, arg->sql, arg->level, NULL);\n\t}\n\n\tlist_free(busy_connection);\n\n\t/*\n\t * Regardless of the event type, we can now mark ourselves as out of the\n\t * transaction.  (Note: if we are here during PRE_COMMIT or PRE_PREPARE,\n\t * this saves a useless scan of the hashtable during COMMIT or PREPARE.)\n\t */\n\txact_got_connection = false;\n}\n\n/*\n * sqlitefdw_reset_xact_state --- Reset state to show we're out of a (sub)transaction\n */\nstatic void\nsqlitefdw_reset_xact_state(ConnCacheEntry *entry, bool toplevel) {\n\tif (toplevel) {\n\t\t/* Reset state to show we're out of a transaction */\n\t\tentry->xact_depth = 0;\n\n\t\t/*\n\t\t * If the connection isn't in a good idle state, it is marked as\n\t\t * invalid or keep_connections option of its server is disabled, then\n\t\t * discard it to recover. Next GetConnection will open a new\n\t\t * connection.\n\t\t */\n\t\tif (entry->invalidated ||\n\t\t\t!entry->keep_connections)\n\t\t{\n\t\t\telog(DEBUG3, \"discarding sqlite_fdw connection %p\", entry->conn);\n\t\t\tsqlite3_close(entry->conn);\n\t\t\tentry->conn = NULL;\n\t\t}\n\t} else {\n\t\t/* Reset state to show we're out of a subtransaction */\n\t\tentry->xact_depth--;\n\t}\n}\n/*\n * sqlitefdw_subxact_callback --- cleanup at subtransaction end.\n */\nstatic void\nsqlitefdw_subxact_callback(SubXactEvent event, SubTransactionId mySubid,\n\t\t\t\t\t\t   SubTransactionId parentSubid, void *arg)\n{\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n\tint\t\t\tcurlevel;\n\tListCell \t   *lc;\n\tList *busy_connection = NIL;\n\n\t/* Nothing to do at subxact start, nor after commit. */\n\tif (!(event == SUBXACT_EVENT_PRE_COMMIT_SUB ||\n\t\t  event == SUBXACT_EVENT_ABORT_SUB))\n\t\treturn;\n\n\t/* Quick exit if no connections were touched in this transaction. */\n\tif (!xact_got_connection)\n\t\treturn;\n\n\t/*\n\t * Scan all connection cache entries to find open remote subtransactions\n\t * of the current level, and close them.\n\t */\n\tcurlevel = GetCurrentTransactionNestLevel();\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\tchar\t\tsql[100];\n\n\t\t/*\n\t\t * We only care about connections with open remote subtransactions of\n\t\t * the current level.\n\t\t */\n\t\tif (entry->conn == NULL || entry->xact_depth < curlevel)\n\t\t\tcontinue;\n\n\t\tif (entry->truncatable)\n\t\t\tcontinue;\n\n\t\tif (entry->xact_depth > curlevel)\n\t\t\telog(ERROR, \"missed cleaning up remote subtransaction at level %d\",\n\t\t\t\t entry->xact_depth);\n\n\t\tif (event == SUBXACT_EVENT_PRE_COMMIT_SUB)\n\t\t{\n\t\t\t/* Commit all remote subtransactions during pre-commit */\n\t\t\tsnprintf(sql, sizeof(sql), \"RELEASE SAVEPOINT s%d\", curlevel);\n\t\t\tsqlite_do_sql_command(entry->conn, sql, ERROR, &busy_connection);\n\n\t\t}\n\t\telse if (in_error_recursion_trouble())\n\t\t{\n\t\t\t/*\n\t\t\t * Don't try to clean up the connection if we're already in error\n\t\t\t * recursion trouble.\n\t\t\t */\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Rollback all remote subtransactions during abort */\n\t\t\tsqlitefdw_abort_cleanup(entry, false, &busy_connection);\n\t\t}\n\n\t\t/* OK, we're outta that level of subtransaction */\n\t\tsqlitefdw_reset_xact_state(entry, false);\n\t}\n\n\t/* Execute again the query after server is available */\n\tforeach(lc, busy_connection)\n\t{\n\t\tBusyHandlerArg *arg = lfirst(lc);\n\n\t\t/*\n\t\t * If there is still error, we can not do anything more, just raise it.\n\t\t * requireBusyHandler is set to false, and NULL busy_connection list.\n\t\t */\n\t\tsqlite_do_sql_command(arg->conn, arg->sql, arg->level, NULL);\n\t}\n\n\tlist_free(busy_connection);\n}\n\n/*\n * Connection invalidation callback function\n *\n * After a change to a pg_foreign_server or pg_user_mapping catalog entry,\n * mark connections depending on that entry as needing to be remade.\n * We can't immediately destroy them, since they might be in the midst of\n * a transaction, but we'll remake them at the next opportunity.\n *\n * Although most cache invalidation callbacks blow away all the related stuff\n * regardless of the given hashvalue, connections are expensive enough that\n * it's worth trying to avoid that.\n *\n * NB: We could avoid unnecessary disconnection more strictly by examining\n * individual option values, but it seems too much effort for the gain.\n */\nstatic void\nsqlitefdw_inval_callback(Datum arg, int cacheid, uint32 hashvalue)\n{\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n\n\tAssert(cacheid == FOREIGNSERVEROID);\n\n\t/* ConnectionHash must exist already, if we're registered */\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\t/* Ignore invalid entries */\n\t\tif (entry->conn == NULL)\n\t\t\tcontinue;\n\n\t\t/* hashvalue == 0 means a cache reset, must clear all state */\n\t\tif (hashvalue == 0 ||\n\t\t\t(cacheid == FOREIGNSERVEROID &&\n\t\t\t entry->server_hashvalue == hashvalue))\n\t\t{\n\t\t\t/*\n\t\t\t * Close the connection immediately if it's not used yet in this\n\t\t\t * transaction. Otherwise mark it as invalid so that\n\t\t\t * sqlitefdw_xact_callback() can close it at the end of this\n\t\t\t * transaction.\n\t\t\t */\n\t\t\tif (entry->xact_depth == 0)\n\t\t\t{\n\t\t\t\telog(DEBUG3, \"discarding sqlite_fdw connection %p\", entry->conn);\n\t\t\t\tsqlite3_close(entry->conn);\n\t\t\t\tentry->conn = NULL;\n\t\t\t}\n\t\t\telse\n\t\t\t\tentry->invalidated = true;\n\t\t}\n\t}\n}\n\n/*\n * List active foreign server connections.\n *\n * This function takes no input parameter and returns setof record made of\n * following values:\n * - server_name - server name of active connection. In case the foreign server\n *   is dropped but still the connection is active, then the server name will\n *   be NULL in output.\n * - valid - true/false representing whether the connection is valid or not.\n * \t Note that the connections can get invalidated in sqlitefdw_inval_callback.\n *\n * No records are returned when there are no cached connections at all.\n */\nDatum\nsqlite_fdw_get_connections(PG_FUNCTION_ARGS)\n{\n#if PG_VERSION_NUM < 140000\n\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t errmsg(\"Function %s does not support in Postgres version %s\", __func__, PG_VERSION)\n\t\t\t ));\n#else\n#define SQLITE_FDW_GET_CONNECTIONS_COLS\t2\n\tReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n#if PG_VERSION_NUM < 150000\n\tTupleDesc\ttupdesc;\n\tTuplestorestate *tupstore;\n\tMemoryContext per_query_ctx;\n\tMemoryContext oldcontext;\n#endif\n\n#if PG_VERSION_NUM >= 160000\n\tInitMaterializedSRF(fcinfo, 0);\n#elif PG_VERSION_NUM >= 150000\n\tSetSingleFuncCall(fcinfo, 0);\n#else\n\t/* check to see if caller supports us returning a tuplestore */\n\tif (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo))\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t\t errmsg(\"set-valued function called in context that cannot accept a set\")));\n\tif (!(rsinfo->allowedModes & SFRM_Materialize))\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t\t errmsg(\"materialize mode required, but it is not allowed in this context\")));\n\n\t/* Build a tuple descriptor for our result type */\n\tif (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)\n\t\telog(ERROR, \"return type must be a row type\");\n\n\t/* Build tuplestore to hold the result rows */\n\tper_query_ctx = rsinfo->econtext->ecxt_per_query_memory;\n\toldcontext = MemoryContextSwitchTo(per_query_ctx);\n\n\ttupstore = tuplestore_begin_heap(true, false, work_mem);\n\trsinfo->returnMode = SFRM_Materialize;\n\trsinfo->setResult = tupstore;\n\trsinfo->setDesc = tupdesc;\n\n\tMemoryContextSwitchTo(oldcontext);\n#endif\n\n\t/* If cache doesn't exist, we return no records */\n\tif (!ConnectionHash)\n\t{\n#if PG_VERSION_NUM < 150000\n\t\t/* clean up and return the tuplestore */\n\t\ttuplestore_donestoring(tupstore);\n#endif\n\n\t\tPG_RETURN_VOID();\n\t}\n\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\tForeignServer *server;\n\t\tDatum\t\tvalues[SQLITE_FDW_GET_CONNECTIONS_COLS] = {0};\n\t\tbool\t\tnulls[SQLITE_FDW_GET_CONNECTIONS_COLS] = {0};\n\n\t\t/* We only look for open remote connections */\n\t\tif (!entry->conn)\n\t\t\tcontinue;\n\n\t\tserver = GetForeignServerExtended(entry->serverid, FSV_MISSING_OK);\n\n\n\t\t/*\n\t\t * The foreign server may have been dropped in current explicit\n\t\t * transaction. It is not possible to drop the server from another\n\t\t * session when the connection associated with it is in use in the\n\t\t * current transaction, if tried so, the drop query in another session\n\t\t * blocks until the current transaction finishes.\n\t\t *\n\t\t * Even though the server is dropped in the current transaction, the\n\t\t * cache can still have associated active connection entry, say we\n\t\t * call such connections dangling. Since we can not fetch the server\n\t\t * name from system catalogs for dangling connections, instead we show\n\t\t * NULL value for server name in output.\n\t\t *\n\t\t * We could have done better by storing the server name in the cache\n\t\t * entry instead of server oid so that it could be used in the output.\n\t\t * But the server name in each cache entry requires 64 bytes of\n\t\t * memory, which is huge, when there are many cached connections and\n\t\t * the use case i.e. dropping the foreign server within the explicit\n\t\t * current transaction seems rare. So, we chose to show NULL value for\n\t\t * server name in output.\n\t\t *\n\t\t * Such dangling connections get closed either in next use or at the\n\t\t * end of current explicit transaction in sqlitefdw_xact_callback.\n\t\t */\n\t\tif (!server)\n\t\t{\n\t\t\t/*\n\t\t\t * If the server has been dropped in the current explicit\n\t\t\t * transaction, then this entry would have been invalidated in\n\t\t\t * sqlitefdw_inval_callback at the end of drop server command.\n\t\t\t * Note that this connection would not have been closed in\n\t\t\t * sqlitefdw_inval_callback because it is still being used in the\n\t\t\t * current explicit transaction. So, assert that here.\n\t\t\t */\n\t\t\tAssert(entry->conn && entry->xact_depth > 0 && entry->invalidated);\n\n\t\t\t/* Show null, if no server name was found */\n\t\t\tnulls[0] = true;\n\t\t}\n\t\telse\n\t\t\tvalues[0] = CStringGetTextDatum(server->servername);\n\n\t\tvalues[1] = BoolGetDatum(!entry->invalidated);\n#if PG_VERSION_NUM >= 150000\n\t\ttuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);\n#else\n\t\ttuplestore_putvalues(tupstore, tupdesc, values, nulls);\n#endif\n\t}\n\n#if PG_VERSION_NUM < 150000\n\t/* clean up and return the tuplestore */\n\ttuplestore_donestoring(tupstore);\n#endif\n\n\tPG_RETURN_VOID();\n#endif\n}\n\n/*\n * Disconnect the specified cached connections.\n *\n * This function discards the open connections that are established by\n * sqlite_fdw from the local session to the foreign server with\n * the given name. Note that there can be multiple connections to\n * the given server using different user mappings. If the connections\n * are used in the current local transaction, they are not disconnected\n * and warning messages are reported. This function returns true\n * if it disconnects at least one connection, otherwise false. If no\n * foreign server with the given name is found, an error is reported.\n */\nDatum\nsqlite_fdw_disconnect(PG_FUNCTION_ARGS)\n{\n#if PG_VERSION_NUM < 140000\n\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t errmsg(\"Function %s does not support in Postgres version %s\", __func__, PG_VERSION)\n\t\t\t ));\n#else\n\tForeignServer *server;\n\tchar\t   *servername;\n\n\tservername = text_to_cstring(PG_GETARG_TEXT_PP(0));\n\tserver = GetForeignServerByName(servername, false);\n\n\tPG_RETURN_BOOL(sqlite_disconnect_cached_connections(server->serverid));\n#endif\n}\n\n/*\n * Disconnect all the cached connections.\n *\n * This function discards all the open connections that are established by\n * sqlite_fdw from the local session to the foreign servers.\n * If the connections are used in the current local transaction, they are\n * not disconnected and warning messages are reported. This function\n * returns true if it disconnects at least one connection, otherwise false.\n */\nDatum\nsqlite_fdw_disconnect_all(PG_FUNCTION_ARGS)\n{\n#if PG_VERSION_NUM < 140000\n\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),\n\t\t\t errmsg(\"Function %s does not support in Postgres version %s\", __func__, PG_VERSION)\n\t\t\t ));\n#else\n\tPG_RETURN_BOOL(sqlite_disconnect_cached_connections(InvalidOid));\n#endif\n}\n\n/*\n * Abort remote transaction or subtransaction.\n *\n * \"toplevel\" should be set to true if toplevel (main) transaction is\n * rollbacked, false otherwise.\n */\nstatic void\nsqlitefdw_abort_cleanup(ConnCacheEntry *entry, bool toplevel, List **busy_connection)\n{\n\tif (toplevel)\n\t{\n\t\telog(DEBUG3, \"abort transaction\");\n\n\t\t/* Finalize all prepared statements */\n\t\tsqlite_finalize_list_stmt(&entry->stmtList);\n\n\t\t/*\n\t\t* rollback if in transaction because SQLite may\n\t\t* already rollback\n\t\t*/\n\t\tif (!sqlite3_get_autocommit(entry->conn))\n\t\t\tsqlite_do_sql_command(entry->conn, \"ROLLBACK\", WARNING, busy_connection);\n\t}\n\telse\n\t{\n\t\tchar\t\tsql[100];\n\t\tint\t\t\tcurlevel = GetCurrentTransactionNestLevel();\n\t\tsnprintf(sql,\n\t\t\t\t sizeof(sql),\n\t\t\t\t \"ROLLBACK TO SAVEPOINT s%d; RELEASE SAVEPOINT s%d\",\n\t\t\t\t curlevel,\n\t\t\t\t curlevel\n\t\t\t\t);\n\t\tif (!sqlite3_get_autocommit(entry->conn))\n\t\t\tsqlite_do_sql_command(entry->conn, sql, ERROR, busy_connection);\n\t}\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * Workhorse to disconnect cached connections.\n *\n * This function scans all the connection cache entries and disconnects\n * the open connections whose foreign server OID matches with\n * the specified one. If InvalidOid is specified, it disconnects all\n * the cached connections.\n *\n * This function emits a warning for each connection that's used in\n * the current transaction and doesn't close it. It returns true if\n * it disconnects at least one connection, otherwise false.\n *\n * Note that this function disconnects even the connections that are\n * established by other users in the same local session using different\n * user mappings. This leads even non-superuser to be able to close\n * the connections established by superusers in the same local session.\n *\n * XXX As of now we don't see any security risk doing this. But we should\n * set some restrictions on that, for example, prevent non-superuser\n * from closing the connections established by superusers even\n * in the same session?\n */\nstatic bool\nsqlite_disconnect_cached_connections(Oid serverid)\n{\n\tHASH_SEQ_STATUS scan;\n\tConnCacheEntry *entry;\n\tbool\t\tall = !OidIsValid(serverid);\n\tbool\t\tresult = false;\n\n\t/*\n\t * Connection cache hashtable has not been initialized yet in this\n\t * session, so return false.\n\t */\n\tif (!ConnectionHash)\n\t\treturn false;\n\n\thash_seq_init(&scan, ConnectionHash);\n\twhile ((entry = (ConnCacheEntry *) hash_seq_search(&scan)))\n\t{\n\t\t/* Ignore cache entry if no open connection right now. */\n\t\tif (!entry->conn)\n\t\t\tcontinue;\n\n\t\tif (all || entry->serverid == serverid)\n\t\t{\n\t\t\t/*\n\t\t\t * Emit a warning because the connection to close is used in the\n\t\t\t * current transaction and cannot be disconnected right now.\n\t\t\t */\n\t\t\tif (entry->xact_depth > 0)\n\t\t\t{\n\t\t\t\tForeignServer *server;\n\n\t\t\t\tserver = GetForeignServerExtended(entry->serverid,\n\t\t\t\t\t\t\t\t\t\t\t\t  FSV_MISSING_OK);\n\n\t\t\t\tif (!server)\n\t\t\t\t{\n\t\t\t\t\t/*\n\t\t\t\t\t * If the foreign server was dropped while its connection\n\t\t\t\t\t * was used in the current transaction, the connection\n\t\t\t\t\t * must have been marked as invalid by\n\t\t\t\t\t * sqlitefdw_inval_callback at the end of DROP SERVER\n\t\t\t\t\t * command.\n\t\t\t\t\t */\n\t\t\t\t\tAssert(entry->invalidated);\n\n\t\t\t\t\tereport(WARNING,\n\t\t\t\t\t\t\t(errmsg(\"cannot close dropped server connection because it is still in use\")));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tereport(WARNING,\n\t\t\t\t\t\t\t(errmsg(\"cannot close connection for server \\\"%s\\\" because it is still in use\",\n\t\t\t\t\t\t\t\t\tserver->servername)));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\telog(DEBUG3, \"discarding sqlite_fdw connection %p\", entry->conn);\n\t\t\t\tsqlite_finalize_list_stmt(&entry->stmtList);\n\t\t\t\tsqlite3_close(entry->conn);\n\t\t\t\tentry->conn = NULL;\n\t\t\t\tresult = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n#endif\n\n/*\n * cache sqlite3 statement to finalize at the end of transaction\n */\nvoid\nsqlite_cache_stmt(ForeignServer *server, sqlite3_stmt * *stmt)\n{\n\tbool\t\tfound;\n\tConnCacheEntry *entry;\n\tConnCacheKey key = server->serverid;\n\n\t/*\n\t * Find cached entry for requested connection.\n\t */\n\tentry = hash_search(ConnectionHash, &key, HASH_ENTER, &found);\n\n\t/* We must always have found the entry */\n\tAssert(found);\n\n\tentry->stmtList = sqlite_append_stmt_to_list(entry->stmtList, *stmt);\n}\n\n/*\n * finalize all sqlite statement\n */\nstatic void\nsqlite_finalize_list_stmt(List **list)\n{\n\tListCell   *lc;\n\n\tforeach(lc, *list)\n\t{\n\t\tsqlite3_stmt *stmt = (sqlite3_stmt *) lfirst(lc);\n\n\t\telog(DEBUG1, \"sqlite_fdw: finalize %s\", sqlite3_sql(stmt));\n\t\tsqlite3_finalize(stmt);\n\t}\n\n\tlist_free(*list);\n\t*list = NULL;\n}\n\n/*\n * append sqlite3 stmt to the head of linked list\n */\nstatic List *\nsqlite_append_stmt_to_list(List *list, sqlite3_stmt * stmt)\n{\n\t/*\n\t * CurrentMemoryContext is released before cleanup transaction (when the\n\t * list is called), so, use TopMemoryContext instead.\n\t */\n\tMemoryContext oldcontext = MemoryContextSwitchTo(TopMemoryContext);\n\n\tlist = lappend(list, stmt);\n\tMemoryContextSwitchTo(oldcontext);\n\treturn list;\n}\n"
  },
  {
    "path": "deparse.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n *\t\tdeparse.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#include \"catalog/pg_aggregate.h\"\n#include \"catalog/pg_collation.h\"\n#include \"catalog/pg_namespace.h\"\n#include \"catalog/pg_operator.h\"\n#include \"catalog/pg_proc.h\"\n#if PG_VERSION_NUM >= 160000\n\t#include \"catalog/pg_ts_config.h\"\n#endif\n#include \"catalog/pg_ts_dict.h\"\n#if (PG_VERSION_NUM < 130000)\n\t#include \"catalog/pg_type.h\"\n#endif\n#include \"commands/defrem.h\"\n#include \"mb/pg_wchar.h\"\n#include \"nodes/makefuncs.h\"\n#include \"nodes/nodeFuncs.h\"\n#include \"optimizer/tlist.h\"\n#include \"parser/parsetree.h\"\n#include \"parser/parse_type.h\"\n#include \"utils/builtins.h\"\n#include \"utils/lsyscache.h\"\n#include \"utils/syscache.h\"\n#include \"utils/typcache.h\"\n\n/*\n * Global context for sqlite_foreign_expr_walker's search of an expression tree.\n */\ntypedef struct foreign_glob_cxt\n{\n\tPlannerInfo *root;\t\t\t/* global planner state */\n\tRelOptInfo *foreignrel;\t\t/* the foreign relation we are planning for */\n\tRelids\t\trelids;\t\t\t/* relids of base relations in the underlying\n\t\t\t\t\t\t\t\t * scan */\n} foreign_glob_cxt;\n\n/*\n * Local (per-tree-level) context for sqlite_foreign_expr_walker's search.\n * This is concerned with identifying collations used in the expression.\n */\ntypedef enum\n{\n\tFDW_COLLATE_NONE,\t\t\t/* expression is of a noncollatable type */\n\tFDW_COLLATE_SAFE,\t\t\t/* collation derives from a foreign Var */\n\tFDW_COLLATE_UNSAFE,\t\t\t/* collation derives from something else */\n} FDWCollateState;\n\ntypedef struct foreign_loc_cxt\n{\n\tOid\t\t\tcollation;\t\t/* OID of current collation, if any */\n\tFDWCollateState state;\t\t/* state of current collation choice */\n} foreign_loc_cxt;\n\n/*\n * Context for sqlite_deparse_expr\n */\ntypedef struct deparse_expr_cxt\n{\n\tPlannerInfo *root;\t\t\t/* global planner state */\n\tRelOptInfo *foreignrel;\t\t/* the foreign relation we are planning for */\n\tRelOptInfo *scanrel;\t\t/* the underlying scan relation. Same as\n\t\t\t\t\t\t\t\t * foreignrel, when that represents a join or\n\t\t\t\t\t\t\t\t * a base relation. */\n\tStringInfo\tbuf;\t\t\t/* output buffer to append to */\n\tList\t  **params_list;\t/* exprs that will become remote Params */\n\tExpr\t   *complementarynode;\t/* variable where we can store, only if\n\t\t\t\t\t\t\t\t\t * needed, a complementary node to obtain\n\t\t\t\t\t\t\t\t\t * info for processing actual node.\n\t\t\t\t\t\t\t\t\t * Created mostly for\n\t\t\t\t\t\t\t\t\t * sqlite_deparse_op_expr to have both\n\t\t\t\t\t\t\t\t\t * nodes accesible during each node\n\t\t\t\t\t\t\t\t\t * deparse. */\n} deparse_expr_cxt;\n\n#define QUOTE '\"'\n#define REL_ALIAS_PREFIX\t\"r\"\n/* Handy macro to add relation name qualification */\n#define ADD_REL_QUALIFIER(buf, varno)\t\\\n\t\tappendStringInfo((buf), \"%s%d.\", REL_ALIAS_PREFIX, (varno))\n#define SUBQUERY_REL_ALIAS_PREFIX\t\"s\"\n#define SUBQUERY_COL_ALIAS_PREFIX\t\"c\"\n\n/*\n * Functions to determine whether an expression can be evaluated safely on\n * remote server.\n */\nstatic bool sqlite_foreign_expr_walker(Node *node,\n\t\t\t\t\t\t\t\t\t   foreign_glob_cxt *glob_cxt,\n\t\t\t\t\t\t\t\t\t   foreign_loc_cxt *outer_cxt,\n\t\t\t\t\t\t\t\t\t   foreign_loc_cxt *case_arg_cxt);\n\n/*\n * Functions to construct string representation of a node tree.\n */\nstatic void sqlite_deparse_expr(Expr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_var(Var *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_const(Const *node, deparse_expr_cxt *context, int showtype);\nstatic void sqlite_deparse_param(Param *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_func_expr(FuncExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_op_expr(OpExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_operator_name(StringInfo buf, Form_pg_operator opform);\n\nstatic void sqlite_deparse_scalar_array_op_expr(ScalarArrayOpExpr *node,\n\t\t\t\t\t\t\t\t\t\t\t\tdeparse_expr_cxt *context);\nstatic void sqlite_deparse_relabel_type(RelabelType *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_bool_expr(BoolExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_null_test(NullTest *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_case_expr(CaseExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_array_expr(ArrayExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_print_remote_param(int paramindex, Oid paramtype, int32 paramtypmod,\n\t\t\t\t\t\t\t\t\t  deparse_expr_cxt *context);\nstatic void sqlite_print_remote_placeholder(Oid paramtype, int32 paramtypmod,\n\t\t\t\t\t\t\t\t\t\t\tdeparse_expr_cxt *context);\nstatic void sqlite_deparse_relation(StringInfo buf, Relation rel);\nstatic void sqlite_deparse_target_list(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel,\n\t\t\t\t\t\t\t\t\t   Bitmapset *attrs_used, bool qualify_col, List **retrieved_attrs, bool is_concat, bool check_null);\nstatic void sqlite_deparse_column_ref(StringInfo buf, int varno, int varattno, PlannerInfo *root, bool qualify_col, bool dml_context);\nstatic void sqlite_deparse_select(List *tlist, bool is_subquery, List **retrieved_attrs, deparse_expr_cxt *context);\nstatic void sqlite_deparse_subquery_target_list(deparse_expr_cxt *context);\nstatic void sqlite_deparse_case_expr(CaseExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_null_if_expr(NullIfExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_coalesce_expr(CoalesceExpr *node, deparse_expr_cxt *context);\nstatic void sqlite_deparse_from_expr_for_rel(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t\t\t bool use_alias, Index ignore_rel, List **ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t\t List **additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t\t\t List **params_list);\n#if PG_VERSION_NUM >= 170000\nstatic void sqlite_append_where_clause(List *exprs, List *additional_conds,\n\t\t\t\t\t\t\t\t\t   deparse_expr_cxt   *context);\n#endif\nstatic void sqlite_deparse_range_tbl_ref(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t RelOptInfo *foreignrel, bool make_subquery,\n\t\t\t\t\t\t\t\t\t\t Index ignore_rel, List **ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t List **additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t\t List **params_list);\nstatic void sqlite_deparse_from_expr(List *quals, deparse_expr_cxt *context);\nstatic void sqlite_deparse_aggref(Aggref *node, deparse_expr_cxt *context);\nstatic void sqlite_append_limit_clause(deparse_expr_cxt *context);\nstatic void sqlite_append_conditions(List *exprs, deparse_expr_cxt *context);\nstatic void sqlite_append_group_by_clause(List *tlist, deparse_expr_cxt *context);\nstatic void sqlite_append_agg_order_by(List *orderList, List *targetList,\n\t\t\t\t\t\t\t\t\t   deparse_expr_cxt *context);\nstatic void sqlite_append_order_by_clause(List *pathkeys, bool has_final_sort, deparse_expr_cxt *context);\nstatic void sqlite_append_order_by_suffix(Oid sortop, Oid sortcoltype, bool nulls_first,\n\t\t\t\t\t\t\t\t\t\t  deparse_expr_cxt *context);\nstatic void sqlite_append_function_name(Oid funcid, deparse_expr_cxt *context);\nconst char *sqlite_get_jointype_name(JoinType jointype);\nstatic Node *sqlite_deparse_sort_group_clause(Index ref, List *tlist, bool force_colno,\n\t\t\t\t\t\t\t\t\t\t\t  deparse_expr_cxt *context);\nstatic void sqlite_deparse_explicit_target_list(List *tlist, List **retrieved_attrs,\n\t\t\t\t\t\t\t\t\t\t\t\tdeparse_expr_cxt *context);\n\n/*\n * Helper functions\n */\nstatic bool sqlite_is_subquery_var(Var *node, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t   int *relno, int *colno);\nstatic void sqlite_get_relation_column_alias_ids(Var *node, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t\t\t\t int *relno, int *colno);\nstatic char *sqlite_quote_identifier(const char *s, char q);\nstatic bool sqlite_contain_immutable_functions_walker(Node *node, void *context);\nstatic bool sqlite_deparsable_data_type(Param *p);\nstatic int preferred_sqlite_affinity (Oid relid, int varattno);\n\n/*\n * Append remote name of specified foreign table to buf.\n * Use value of table_name FDW option (if any) instead of relation's name.\n * Similarly, schema_name FDW option overrides schema name.\n */\nstatic void\nsqlite_deparse_relation(StringInfo buf, Relation rel)\n{\n\tForeignTable *table;\n\tconst char *relname = NULL;\n\tListCell   *lc = NULL;\n\n\t/* obtain additional catalog information. */\n\ttable = GetForeignTable(RelationGetRelid(rel));\n\n\t/*\n\t * Use value of FDW options if any, instead of the name of object itself.\n\t */\n\tforeach(lc, table->options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"table\") == 0)\n\t\t\trelname = defGetString(def);\n\t}\n\n\tif (relname == NULL)\n\t\trelname = RelationGetRelationName(rel);\n\n\t/* always use main database for SQLite */\n\tappendStringInfo(buf, \"%s.%s\", \"main\", sqlite_quote_identifier(relname, QUOTE));\n}\n\nstatic char *\nsqlite_quote_identifier(const char *s, char q)\n{\n\tchar\t   *result = palloc(strlen(s) * 2 + 3);\n\tchar\t   *r = result;\n\n\t*r++ = q;\n\twhile (*s)\n\t{\n\t\tif (*s == q)\n\t\t\t*r++ = *s;\n\t\t*r++ = *s;\n\t\ts++;\n\t}\n\t*r++ = q;\n\t*r++ = '\\0';\n\treturn result;\n}\n\n/*\n * Returns true if given expr is safe to evaluate on the foreign server.\n */\nbool\nsqlite_is_foreign_expr(PlannerInfo *root,\n\t\t\t\t\t   RelOptInfo *baserel,\n\t\t\t\t\t   Expr *expr)\n{\n\tforeign_glob_cxt glob_cxt;\n\tforeign_loc_cxt loc_cxt;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) (baserel->fdw_private);\n\n\t/*\n\t * Check that the expression consists of nodes that are safe to execute\n\t * remotely.\n\t */\n\tglob_cxt.root = root;\n\tglob_cxt.foreignrel = baserel;\n\n\t/*\n\t * For an upper relation, use relids from its underneath scan relation,\n\t * because the upperrel's own relids currently aren't set to anything\n\t * meaningful by the core code.  For other relation, use their own relids.\n\t */\n\tif (IS_UPPER_REL(baserel))\n\t\tglob_cxt.relids = fpinfo->outerrel->relids;\n\telse\n\t\tglob_cxt.relids = baserel->relids;\n\tloc_cxt.collation = InvalidOid;\n\tloc_cxt.state = FDW_COLLATE_NONE;\n\tif (!sqlite_foreign_expr_walker((Node *) expr, &glob_cxt, &loc_cxt, NULL))\n\t\treturn false;\n\n\t/*\n\t * If the expression has a valid collation that does not arise from a\n\t * foreign var, the expression can not be sent over.\n\t */\n\tif (loc_cxt.state == FDW_COLLATE_UNSAFE)\n\t\treturn false;\n\n\t/*\n\t * An expression which includes any mutable functions can't be sent over\n\t * because its result is not stable.  For example, sending now() remote\n\t * side could cause confusion from clock offsets.  Future versions might\n\t * be able to make this choice with more granularity. (We check this last\n\t * because it requires a lot of expensive catalog lookups.)\n\t */\n\tif (contain_mutable_functions((Node *) expr))\n\t\treturn false;\n\n\t/* OK to evaluate on the remote server */\n\treturn true;\n}\n\n/*\n * Returns true if given expr is something we'd have to send the value of\n * to the foreign server.\n *\n * This should return true when the expression is a shippable node that\n * deparseExpr would add to context->params_list.  Note that we don't care\n * if the expression *contains* such a node, only whether one appears at top\n * level.  We need this to detect cases where setrefs.c would recognize a\n * false match between an fdw_exprs item (which came from the params_list)\n * and an entry in fdw_scan_tlist (which we're considering putting the given\n * expression into).\n */\nbool\nsqlite_is_foreign_param(PlannerInfo *root,\n\t\t\t\t\t\tRelOptInfo *baserel,\n\t\t\t\t\t\tExpr *expr)\n{\n\tif (expr == NULL)\n\t\treturn false;\n\n\tswitch (nodeTag(expr))\n\t{\n\t\tcase T_Var:\n\t\t\t{\n\t\t\t\t/* It would have to be sent unless it's a foreign Var */\n\t\t\t\tVar\t\t   *var = (Var *) expr;\n\t\t\t\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) (baserel->fdw_private);\n\t\t\t\tRelids\t\trelids;\n\n\t\t\t\tif (IS_UPPER_REL(baserel))\n\t\t\t\t\trelids = fpinfo->outerrel->relids;\n\t\t\t\telse\n\t\t\t\t\trelids = baserel->relids;\n\n\t\t\t\tif (bms_is_member(var->varno, relids) && var->varlevelsup == 0)\n\t\t\t\t\treturn false;\t/* foreign Var, so not a param */\n\t\t\t\telse\n\t\t\t\t\treturn true;\t/* it'd have to be a param */\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase T_Param:\n\t\t\t/* Params always have to be sent to the foreign server */\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\treturn false;\n}\n\n/*\n * sqlite_deparsable_data_type:\n *\n * Checks if values of the data type with given Oid can be deparsed\n * to SQLite data type.\n */\nstatic bool\nsqlite_deparsable_data_type(Param *p)\n{\n\tOid type = p->paramtype;\n\tswitch (type)\n\t{\n\t\tcase INT2OID:\n\t\tcase INT4OID:\n\t\tcase INT8OID:\n\t\tcase OIDOID:\n\t\tcase FLOAT4OID:\n\t\tcase FLOAT8OID:\n\t\tcase NUMERICOID:\n\t\tcase VARCHAROID:\n\t\tcase TEXTOID:\n\t\tcase TIMEOID:\n\t\tcase TIMESTAMPOID:\n\t\tcase TIMESTAMPTZOID:\n\t\tcase UUIDOID:\n\t\tcase MACADDROID:\n\t\tcase MACADDR8OID:\n\t\tcase JSONOID:\n\t\tcase JSONBOID:\n\t\t\treturn true;\n\t}\n#ifdef SQLITE_FDW_GIS_ENABLE\n\t/* PostGIS data types can be supported only by name */\n\tif (listed_datatype_oid(type, p->paramtypmod, postGisSQLiteCompatibleTypes))\n\t{\n\t\treturn true;\n\t}\n#endif\n\treturn false;\n}\n\n/*\n * Returns true if it's safe to push down the sort expression described by\n * 'pathkey' to the foreign server.\n */\nbool\nsqlite_is_foreign_pathkey(PlannerInfo *root,\n\t\t\t\t   RelOptInfo *baserel,\n\t\t\t\t   PathKey *pathkey)\n{\n\tEquivalenceClass *pathkey_ec = pathkey->pk_eclass;\n\tEquivalenceMember *em;\n\n\t/*\n\t * is_foreign_expr would detect volatile expressions as well, but checking\n\t * ec_has_volatile here saves some cycles.\n\t */\n\tif (pathkey_ec->ec_has_volatile)\n\t\treturn false;\n\n\t/* can't push down the sort if the pathkey's opfamily is not built-in */\n\tif (!sqlite_is_builtin(pathkey->pk_opfamily))\n\t\treturn false;\n\n\t/* Find a suitable EC member */\n\tem = sqlite_find_em_for_rel(root, pathkey_ec, baserel);\n\tif (em)\n\t{\n\t\tOid\t\t\toprid;\n\t\tTypeCacheEntry *typentry;\n\n\t\toprid = get_opfamily_member(pathkey->pk_opfamily,\n\t\t\t\t\t\t\t\t\tem->em_datatype,\n\t\t\t\t\t\t\t\t\tem->em_datatype,\n\t\t\t\t\t\t\t\t\tpathkey->pk_strategy);\n\t\tif (!OidIsValid(oprid))\n\t\t\telog(ERROR, \"missing operator %d(%u,%u) in opfamily %u\",\n\t\t\t\t pathkey->pk_strategy, em->em_datatype, em->em_datatype,\n\t\t\t\t pathkey->pk_opfamily);\n\n\t\t/* See whether operator is default < or > for sort expr's datatype. */\n\t\ttypentry = lookup_type_cache(exprType((Node *) em->em_expr),\n\t\t\t\t\t\t\t\t\tTYPECACHE_LT_OPR | TYPECACHE_GT_OPR);\n\n\t\t/* SQLite does not support USING, so do not push down it */\n\t\tif (oprid != typentry->lt_opr && oprid != typentry->gt_opr)\n\t\t\treturn false;\n\t}\n\telse\n\t\treturn false;\n\n\treturn true;\n}\n\n/*\n * Check if expression is safe to execute remotely, and return true if so.\n *\n * In addition, *outer_cxt is updated with collation information.\n *\n * We must check that the expression contains only node types we can deparse,\n * that all types/functions/operators are safe to send (which we approximate\n * as being built-in), and that all collations used in the expression derive\n * from Vars of the foreign table.  Because of the latter, the logic is\n * pretty close to assign_collations_walker() in parse_collate.c, though we\n * can assume here that the given expression is valid.\n */\nstatic bool\nsqlite_foreign_expr_walker(Node *node,\n\t\t\t\t\t\t   foreign_glob_cxt *glob_cxt,\n\t\t\t\t\t\t   foreign_loc_cxt *outer_cxt,\n\t\t\t\t\t\t   foreign_loc_cxt *case_arg_cxt)\n{\n\tbool\t\tcheck_type = true;\n\tforeign_loc_cxt inner_cxt;\n\tOid\t\t\tcollation = InvalidOid;\n\tFDWCollateState state = FDW_COLLATE_NONE;\n\tHeapTuple\ttuple;\n\n\t/* Need do nothing for empty subexpressions */\n\tif (node == NULL)\n\t\treturn true;\n\n\t/* Set up inner_cxt for possible recursion to child nodes */\n\tinner_cxt.collation = InvalidOid;\n\tinner_cxt.state = FDW_COLLATE_NONE;\n\tswitch (nodeTag(node))\n\t{\n\t\tcase T_Var:\n\t\t\t{\n\t\t\t\tVar\t\t   *var = (Var *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_Var\", __func__);\n\t\t\t\t/*\n\t\t\t\t * If the Var is from the foreign table, we consider its\n\t\t\t\t * collation (if any) safe to use.  If it is from another\n\t\t\t\t * table, we treat its collation the same way as we would a\n\t\t\t\t * Param's collation, ie it's not safe for it to have a\n\t\t\t\t * non-default collation.\n\t\t\t\t */\n\t\t\t\tif (bms_is_member(var->varno, glob_cxt->relids) &&\n\t\t\t\t\tvar->varlevelsup == 0)\n\t\t\t\t{\n\t\t\t\t\t/* Var belongs to foreign table */\n\n\t\t\t\t\t/*\n\t\t\t\t\t * System columns (e.g. oid, ctid) should not be sent to\n\t\t\t\t\t * the remote, since we don't make any effort to ensure\n\t\t\t\t\t * that local and remote values match (tableoid, in\n\t\t\t\t\t * particular, almost certainly doesn't match).\n\t\t\t\t\t */\n\t\t\t\t\tif (var->varattno < 0)\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t/* Else check the collation */\n\t\t\t\t\tcollation = var->varcollid;\n\t\t\t\t\tstate = OidIsValid(collation) ? FDW_COLLATE_SAFE : FDW_COLLATE_NONE;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* Var belongs to some other table */\n\t\t\t\t\tcollation = var->varcollid;\n\t\t\t\t\tif (collation == InvalidOid ||\n\t\t\t\t\t\tcollation == DEFAULT_COLLATION_OID)\n\t\t\t\t\t{\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * It's noncollatable, or it's safe to combine with a\n\t\t\t\t\t\t * collatable foreign Var, so set state to NONE.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Do not fail right away, since the Var might appear\n\t\t\t\t\t\t * in a collation-insensitive context.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_Const:\n\t\t\t{\n\t\t\t\tConst\t   *c = (Const *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_Const\", __func__);\n\t\t\t\t/* SQLite cannot handle interval type */\n\t\t\t\tif (c->consttype == INTERVALOID)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * If the constant has nondefault collation, either it's of a\n\t\t\t\t * non-builtin type, or it reflects folding of a CollateExpr;\n\t\t\t\t * either way, it's unsafe to send to the remote.\n\t\t\t\t */\n\t\t\t\tif (c->constcollid != InvalidOid &&\n\t\t\t\t\tc->constcollid != DEFAULT_COLLATION_OID)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Otherwise, we can consider that it doesn't set collation */\n\t\t\t\tcollation = InvalidOid;\n\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_CaseTestExpr:\n\t\t\t{\n\t\t\t\tCaseTestExpr *c = (CaseTestExpr *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_CaseTestExpr\", __func__);\n\t\t\t\t/* Punt if we seem not to be inside a CASE arg WHEN. */\n\t\t\t\tif (!case_arg_cxt)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Otherwise, any nondefault collation attached to the\n\t\t\t\t * CaseTestExpr node must be derived from foreign Var(s) in\n\t\t\t\t * the CASE arg.\n\t\t\t\t */\n\t\t\t\tcollation = c->collation;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (case_arg_cxt->state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == case_arg_cxt->collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_Param:\n\t\t\t{\n\t\t\t\tParam\t   *p = (Param *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_Param\", __func__);\n\t\t\t\t/*\n\t\t\t\t * If it's a MULTIEXPR Param, punt.  We can't tell from here\n\t\t\t\t * whether the referenced sublink/subplan contains any remote\n\t\t\t\t * Vars; if it does, handling that is too complicated to\n\t\t\t\t * consider supporting at present.  Fortunately, MULTIEXPR\n\t\t\t\t * Params are not reduced to plain PARAM_EXEC until the end of\n\t\t\t\t * planning, so we can easily detect this case.  (Normal\n\t\t\t\t * PARAM_EXEC Params are safe to ship because their values\n\t\t\t\t * come from somewhere else in the plan tree; but a MULTIEXPR\n\t\t\t\t * references a sub-select elsewhere in the same targetlist,\n\t\t\t\t * so we'd be on the hook to evaluate it somehow if we wanted\n\t\t\t\t * to handle such cases as direct foreign updates.)\n\t\t\t\t */\n\t\t\t\tif (p->paramkind == PARAM_MULTIEXPR)\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (!sqlite_deparsable_data_type(p))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Collation rule is same as for Consts and non-foreign Vars.\n\t\t\t\t */\n\t\t\t\tcollation = p->paramcollid;\n\t\t\t\tif (collation == InvalidOid ||\n\t\t\t\t\tcollation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_FuncExpr:\n\t\t\t{\n\t\t\t\tFuncExpr   *func = (FuncExpr *) node;\n\t\t\t\tchar\t   *opername = NULL;\n\t\t\t\tOid\t\t\tschema;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_FuncExpr\", __func__);\n\t\t\t\t/* get function name and schema */\n\t\t\t\ttuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(func->funcid));\n\t\t\t\tif (!HeapTupleIsValid(tuple))\n\t\t\t\t{\n\t\t\t\t\telog(ERROR, \"cache lookup failed for function %u\", func->funcid);\n\t\t\t\t}\n\t\t\t\topername = pstrdup(((Form_pg_proc) GETSTRUCT(tuple))->proname.data);\n\t\t\t\tschema = ((Form_pg_proc) GETSTRUCT(tuple))->pronamespace;\n\t\t\t\tReleaseSysCache(tuple);\n\n\t\t\t\t/* ignore functions in other than the pg_catalog schema */\n\t\t\t\tif (schema != PG_CATALOG_NAMESPACE)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * These function can be passed to SQLite. In case of nest\n\t\t\t\t * functions, for example, (round(abs(c1), 0) = 1, the\n\t\t\t\t * postgres core will transform to\n\t\t\t\t * (round((abs(t1.c1))::numeric, 0) = '1'::numeric), so\n\t\t\t\t * \"::numberic\" is kind of function format\n\t\t\t\t * COERCE_IMPLICIT_CAST we must check.\n\t\t\t\t *\n\t\t\t\t * In SQLite, lower/upper function does not support UNICODE\n\t\t\t\t * character, so we don't push down these functions.\n\t\t\t\t *\n\t\t\t\t */\n\t\t\t\tif (!(func->funcformat == COERCE_IMPLICIT_CAST\n\t\t\t\t\t  || strcmp(opername, \"abs\") == 0\n\t\t\t\t\t  || strcmp(opername, \"btrim\") == 0\n\t\t\t\t\t  || strcmp(opername, \"length\") == 0\n\t\t\t\t\t  || strcmp(opername, \"ltrim\") == 0\n\t\t\t\t\t  || strcmp(opername, \"replace\") == 0\n\t\t\t\t\t  || strcmp(opername, \"round\") == 0\n\t\t\t\t\t  || strcmp(opername, \"rtrim\") == 0\n\t\t\t\t\t  || strcmp(opername, \"substr\") == 0\n\t\t\t\t\t  || strcmp(opername, \"mod\") == 0 ))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) func->args,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * If function's input collation is not derived from a foreign\n\t\t\t\t * Var, it can't be sent to remote.\n\t\t\t\t */\n\t\t\t\tif (func->inputcollid == InvalidOid)\n\t\t\t\t\t /* OK, inputs are all noncollatable */ ;\n\t\t\t\telse if (inner_cxt.state != FDW_COLLATE_SAFE ||\n\t\t\t\t\t\t func->inputcollid != inner_cxt.collation)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Detect whether node is introducing a collation not derived\n\t\t\t\t * from a foreign Var.  (If so, we just mark it unsafe for now\n\t\t\t\t * rather than immediately returning false, since the parent\n\t\t\t\t * node might not care.)\n\t\t\t\t */\n\t\t\t\tcollation = func->funccollid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_OpExpr:\n\t\tcase T_NullIfExpr:\n\t\t\t{\n\t\t\t\tchar\t\t\t   *cur_opname = NULL;\n\t\t\t\tOpExpr\t\t\t   *oe = (OpExpr *) node;\n\t\t\t\tForm_pg_operator\tform;\n\t\t\t\tOid\t\t\t\t\toprleft = InvalidOid;\n\t\t\t\tOid\t\t\t\t\toprright = InvalidOid;\n\t\t\t\tbool\t\t\t\tnon_builtin_pushable_opr = false;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_OpExpr|T_NullIfExpr\", __func__);\n\n\t\t\t\ttuple = SearchSysCache1(OPEROID, ObjectIdGetDatum(oe->opno));\n\t\t\t\tif (!HeapTupleIsValid(tuple))\n\t\t\t\t\telog(ERROR, \"cache lookup failed for operator %u\", oe->opno);\n\t\t\t\tform = (Form_pg_operator) GETSTRUCT(tuple);\n\n\t\t\t\t/* opname is not a SQL identifier, so we should not quote it. */\n\t\t\t\tcur_opname = pstrdup(NameStr(form->oprname));\n\t\t\t\toprleft = form->oprleft;\n\t\t\t\toprright = form->oprright;\n\t\t\t\tReleaseSysCache(tuple);\n\n\t\t\t\t/*\n\t\t\t\t * Similarly, only built-in or PostGIS = operators can be\n\t\t\t\t * sent to remote. (If the operator is remote executable,\n\t\t\t\t * surely its underlying function is too.)\n\t\t\t\t */\n\t\t\t\tif (!sqlite_is_builtin(oe->opno))\n\t\t\t\t{\n\t\t\t\t\t/*\n\t\t\t\t\t * Predicate of non built-in operators possible\n\t\t\t\t\t * can be pushed down. For example, some PostGIS oparators.\n\t\t\t\t\t */\n\t\t\t\t\tif ((strcmp(cur_opname, \"=\") == 0))\n\t\t\t\t\t\tnon_builtin_pushable_opr = true; /* Set it to true for later check */\n\t\t\t\t\telse\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Factorial (!) and Bitwise XOR (^), (#)\n\t\t\t\t * cannot be pushed down to SQLite\n\t\t\t\t * Full list see in https://www.postgresql.org/docs/current/functions-bitstring.html\n\t\t\t\t * ILIKE cannot be pushed down to SQLite\n\t\t\t\t * Full list see in https://www.postgresql.org/docs/current/functions-matching.html\n\t\t\t\t */\n\t\t\t\tif (strcmp(cur_opname, \"!\") == 0\n\t\t\t\t\t|| strcmp(cur_opname, \"^\") == 0\n\t\t\t\t\t|| strcmp(cur_opname, \"#\") == 0\n\t\t\t\t\t|| strcmp(cur_opname, \"~~*\") == 0\n\t\t\t\t\t|| strcmp(cur_opname, \"!~~*\") == 0\n\t\t\t\t\t/* JSON/JSONB operators with array or\n\t\t\t\t\t * other JSON/JSONB or\n\t\t\t\t\t * jsonpath as right operand\n\t\t\t\t\t * https://www.postgresql.org/docs/current/functions-json.html\n\t\t\t\t\t */\n\t\t\t\t\t|| ((oprleft == JSONOID || oprleft == JSONBOID)\n\t\t\t\t\t\t&& (strcmp(cur_opname, \"#>\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"#>>\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"@>\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"<@\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"?|\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"?&\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"@?\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"@@\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"||\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"?\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"-\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"#-\") == 0\n\t\t\t\t\t\t\t|| strcmp(cur_opname, \"#-?\") == 0\n\t\t\t\t\t)))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (non_builtin_pushable_opr)\n\t\t\t\t{\n\t\t\t\t\t/* If left operand is not PostGIS supported data type, do not push down */\n\t\t\t\t\tif (sqlite_is_builtin(oprleft) || (!listed_datatype_oid(oprleft, -1, postGisSQLiteCompatibleTypes)))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t/* If right operand is not PostGIS supported data type, do not push down */\n\t\t\t\t\tif (sqlite_is_builtin(oprright) || (!listed_datatype_oid(oprright, -1, postGisSQLiteCompatibleTypes)))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t/* Log operator for potential pushing down */\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s pushable PostGIS operator\", cur_opname);\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpressions.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) oe->args,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * If operator's input collation is not derived from a foreign\n\t\t\t\t * Var, it can't be sent to remote.\n\t\t\t\t */\n\t\t\t\tif (oe->inputcollid == InvalidOid)\n\t\t\t\t\t /* OK, inputs are all noncollatable */ ;\n\t\t\t\telse if ((inner_cxt.state != FDW_COLLATE_SAFE ||\n\t\t\t\t\t\t oe->inputcollid != inner_cxt.collation) &&\n\t\t\t\t\t\t \toprleft != JSONOID &&\n\t\t\t\t\t\t \toprleft != JSONBOID)\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s collate problems, do not push\\n input coll %d, cxt coll %d, operator %d %s %d, ctxst %d\", __func__, oe->inputcollid, inner_cxt.collation, oprleft, cur_opname, oprright, inner_cxt.state);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/* Result-collation handling is same as for functions */\n\t\t\t\tcollation = oe->opcollid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_ScalarArrayOpExpr:\n\t\t\t{\n\t\t\t\tScalarArrayOpExpr *oe = (ScalarArrayOpExpr *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_ScalarArrayOpExpr\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Again, only built-in operators can be sent to remote.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_is_builtin(oe->opno))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpressions.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) oe->args,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * If operator's input collation is not derived from a foreign\n\t\t\t\t * Var, it can't be sent to remote.\n\t\t\t\t */\n\t\t\t\tif (oe->inputcollid == InvalidOid)\n\t\t\t\t\t /* OK, inputs are all noncollatable */ ;\n\t\t\t\telse if (inner_cxt.state != FDW_COLLATE_SAFE ||\n\t\t\t\t\t\t oe->inputcollid != inner_cxt.collation)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Output is always boolean and so noncollatable. */\n\t\t\t\tcollation = InvalidOid;\n\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_RelabelType:\n\t\t\t{\n\t\t\t\tRelabelType *r = (RelabelType *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_RelabelType\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpression.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) r->arg,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * RelabelType must not introduce a collation not derived from\n\t\t\t\t * an input foreign Var.\n\t\t\t\t */\n\t\t\t\tcollation = r->resultcollid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_BoolExpr:\n\t\t\t{\n\t\t\t\tBoolExpr   *b = (BoolExpr *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_BoolExpr\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpressions.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) b->args,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Output is always boolean and so noncollatable. */\n\t\t\t\tcollation = InvalidOid;\n\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_NullTest:\n\t\t\t{\n\t\t\t\tNullTest   *nt = (NullTest *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_NullTest\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpressions.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) nt->arg,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Output is always boolean and so noncollatable. */\n\t\t\t\tcollation = InvalidOid;\n\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_List:\n\t\t\t{\n\t\t\t\tList\t   *l = (List *) node;\n\t\t\t\tListCell   *lc;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_List\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to component subexpressions.\n\t\t\t\t */\n\t\t\t\tforeach(lc, l)\n\t\t\t\t{\n\t\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) lfirst(lc),\n\t\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * When processing a list, collation state just bubbles up\n\t\t\t\t * from the list elements.\n\t\t\t\t */\n\t\t\t\tcollation = inner_cxt.collation;\n\t\t\t\tstate = inner_cxt.state;\n\n\t\t\t\t/* Don't apply exprType() to the list. */\n\t\t\t\tcheck_type = false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_CoalesceExpr:\n\t\t\t{\n\t\t\t\tCoalesceExpr *coalesce = (CoalesceExpr *) node;\n\t\t\t\tListCell   *lc;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_CoalesceExpr\", __func__);\n\t\t\t\tif (list_length(coalesce->args) < 2)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Recurse to each argument */\n\t\t\t\tforeach(lc, coalesce->args)\n\t\t\t\t{\n\t\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) lfirst(lc),\n\t\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_CaseExpr:\n\t\t\t{\n\t\t\t\tCaseExpr   *ce = (CaseExpr *) node;\n\t\t\t\tforeign_loc_cxt arg_cxt;\n\t\t\t\tforeign_loc_cxt tmp_cxt;\n\t\t\t\tListCell   *lc;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_CaseExpr\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to CASE's arg expression, if any.  Its collation\n\t\t\t\t * has to be saved aside for use while examining CaseTestExprs\n\t\t\t\t * within the WHEN expressions.\n\t\t\t\t */\n\t\t\t\targ_cxt.collation = InvalidOid;\n\t\t\t\targ_cxt.state = FDW_COLLATE_NONE;\n\t\t\t\tif (ce->arg)\n\t\t\t\t{\n\t\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) ce->arg,\n\t\t\t\t\t\t\t\t\t\t\t glob_cxt, &arg_cxt, case_arg_cxt))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/* Examine the CaseWhen subexpressions. */\n\t\t\t\tforeach(lc, ce->args)\n\t\t\t\t{\n\t\t\t\t\tCaseWhen   *cw = lfirst_node(CaseWhen, lc);\n\n\t\t\t\t\tif (ce->arg)\n\t\t\t\t\t{\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * In a CASE-with-arg, the parser should have produced\n\t\t\t\t\t\t * WHEN clauses of the form \"CaseTestExpr = RHS\",\n\t\t\t\t\t\t * possibly with an implicit coercion inserted above\n\t\t\t\t\t\t * the CaseTestExpr.  However in an expression that's\n\t\t\t\t\t\t * been through the optimizer, the WHEN clause could\n\t\t\t\t\t\t * be almost anything (since the equality operator\n\t\t\t\t\t\t * could have been expanded into an inline function).\n\t\t\t\t\t\t * In such cases forbid pushdown, because\n\t\t\t\t\t\t * deparseCaseExpr can't handle it.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tNode\t   *whenExpr = (Node *) cw->expr;\n\t\t\t\t\t\tList\t   *opArgs;\n\n\t\t\t\t\t\tif (!IsA(whenExpr, OpExpr))\n\t\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\topArgs = ((OpExpr *) whenExpr)->args;\n\t\t\t\t\t\tif (list_length(opArgs) != 2 ||\n\t\t\t\t\t\t\t!IsA(strip_implicit_coercions(linitial(opArgs)),\n\t\t\t\t\t\t\t\t CaseTestExpr))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Recurse to WHEN expression, passing down the arg info.\n\t\t\t\t\t * Its collation doesn't affect the result (really, it\n\t\t\t\t\t * should be boolean and thus not have a collation).\n\t\t\t\t\t */\n\t\t\t\t\ttmp_cxt.collation = InvalidOid;\n\t\t\t\t\ttmp_cxt.state = FDW_COLLATE_NONE;\n\t\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) cw->expr,\n\t\t\t\t\t\t\t\t\t\t\t glob_cxt, &tmp_cxt, &arg_cxt))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t/* Recurse to THEN expression. */\n\t\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) cw->result,\n\t\t\t\t\t\t\t\t\t\t\t glob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/* Recurse to ELSE expression. */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) ce->defresult,\n\t\t\t\t\t\t\t\t\t\t glob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Detect whether node is introducing a collation not derived\n\t\t\t\t * from a foreign Var.  (If so, we just mark it unsafe for now\n\t\t\t\t * rather than immediately returning false, since the parent\n\t\t\t\t * node might not care.)  This is the same as for function\n\t\t\t\t * nodes, except that the input collation is derived from only\n\t\t\t\t * the THEN and ELSE subexpressions.\n\t\t\t\t */\n\t\t\t\tcollation = ce->casecollid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_Aggref:\n\t\t\t{\n\t\t\t\tAggref\t   *agg = (Aggref *) node;\n\t\t\t\tListCell   *lc;\n\t\t\t\tchar\t   *opername = NULL;\n\t\t\t\tOid\t\t\tschema;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_Aggref\", __func__);\n\t\t\t\t/* get function name and schema */\n\t\t\t\ttuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(agg->aggfnoid));\n\t\t\t\tif (!HeapTupleIsValid(tuple))\n\t\t\t\t{\n\t\t\t\t\telog(ERROR, \"cache lookup failed for function %u\", agg->aggfnoid);\n\t\t\t\t}\n\t\t\t\topername = pstrdup(((Form_pg_proc) GETSTRUCT(tuple))->proname.data);\n\t\t\t\tschema = ((Form_pg_proc) GETSTRUCT(tuple))->pronamespace;\n\t\t\t\tReleaseSysCache(tuple);\n\n\t\t\t\t/* ignore functions in other than the pg_catalog schema */\n\t\t\t\tif (schema != PG_CATALOG_NAMESPACE)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* these function can be passed to SQLite */\n\t\t\t\tif (!(strcmp(opername, \"sum\") == 0\n\t\t\t\t\t  || strcmp(opername, \"avg\") == 0\n\t\t\t\t\t  || strcmp(opername, \"max\") == 0\n\t\t\t\t\t  || strcmp(opername, \"min\") == 0\n\t\t\t\t\t  || strcmp(opername, \"count\") == 0))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\n\t\t\t\t/* Not safe to pushdown when not in grouping context */\n\t\t\t\tif (!IS_UPPER_REL(glob_cxt->foreignrel))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/* Only non-split aggregates are pushable. */\n\t\t\t\tif (agg->aggsplit != AGGSPLIT_SIMPLE)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Recurse to input args. aggdirectargs, aggorder and\n\t\t\t\t * aggdistinct are all present in args, so no need to check\n\t\t\t\t * their shippability explicitly.\n\t\t\t\t */\n\t\t\t\tforeach(lc, agg->args)\n\t\t\t\t{\n\t\t\t\t\tNode\t   *n = (Node *) lfirst(lc);\n\n\t\t\t\t\t/* If TargetEntry, extract the expression from it */\n\t\t\t\t\tif (IsA(n, TargetEntry))\n\t\t\t\t\t{\n\t\t\t\t\t\tTargetEntry *tle = (TargetEntry *) n;\n\n\t\t\t\t\t\tn = (Node *) tle->expr;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!sqlite_foreign_expr_walker(n, glob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (agg->aggorder || agg->aggfilter)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * If aggregate's input collation is not derived from a\n\t\t\t\t * foreign Var, it can't be sent to remote.\n\t\t\t\t */\n\t\t\t\tif (agg->inputcollid == InvalidOid)\n\t\t\t\t\t /* OK, inputs are all noncollatable */ ;\n\t\t\t\telse if (inner_cxt.state != FDW_COLLATE_SAFE ||\n\t\t\t\t\t\t agg->inputcollid != inner_cxt.collation)\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Detect whether node is introducing a collation not derived\n\t\t\t\t * from a foreign Var.  (If so, we just mark it unsafe for now\n\t\t\t\t * rather than immediately returning false, since the parent\n\t\t\t\t * node might not care.)\n\t\t\t\t */\n\t\t\t\tcollation = agg->aggcollid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_ArrayExpr:\n\t\t\t{\n\t\t\t\tArrayExpr  *a = (ArrayExpr *) node;\n\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_ArrayExpr\", __func__);\n\t\t\t\t/*\n\t\t\t\t * Recurse to input subexpressions.\n\t\t\t\t */\n\t\t\t\tif (!sqlite_foreign_expr_walker((Node *) a->elements,\n\t\t\t\t\t\t\t\t\t\t\t\tglob_cxt, &inner_cxt, case_arg_cxt))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * ArrayExpr must not introduce a collation not derived from\n\t\t\t\t * an input foreign Var (same logic as for a function).\n\t\t\t\t */\n\t\t\t\tcollation = a->array_collid;\n\t\t\t\tif (collation == InvalidOid)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse if (inner_cxt.state == FDW_COLLATE_SAFE &&\n\t\t\t\t\t\t collation == inner_cxt.collation)\n\t\t\t\t\tstate = FDW_COLLATE_SAFE;\n\t\t\t\telse if (collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\tstate = FDW_COLLATE_NONE;\n\t\t\t\telse\n\t\t\t\t\tstate = FDW_COLLATE_UNSAFE;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_DistinctExpr:\n\t\t\t{\n\t\t\t\t/* IS DISTINCT FROM */\n\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s T_DistinctExpr\", __func__);\n\t\t\t\treturn false;\n\t\t\t}\n\t\tdefault:\n\t\t\t{\n\n\t\t\t\telog(DEBUG1, \"sqlite_fdw : %s other\", __func__);\n\t\t\t\t/*\n\t\t\t\t * If it's anything else, assume it's unsafe.  This list can be\n\t\t\t\t * expanded later, but don't forget to add deparse support below.\n\t\t\t\t */\n\t\t\t\treturn false;\n\t\t\t}\n\t}\n\n\t/*\n\t * If result type of given expression is not built-in or PostGIS, it can't be sent to\n\t * remote because it might have incompatible semantics on remote side.\n\t */\n\tif (check_type)\n\t{\n\t\tOid typeOid = exprType(node);\n\t\tif (!(sqlite_is_builtin(typeOid) || listed_datatype_oid(typeOid, -1, postGisSQLiteCompatibleTypes)))\n\t\t\treturn false;\n\t}\n\t/*\n\t * Now, merge my collation information into my parent's state.\n\t */\n\tif (state > outer_cxt->state)\n\t{\n\t\t/* Override previous parent state */\n\t\touter_cxt->collation = collation;\n\t\touter_cxt->state = state;\n\t}\n\telse if (state == outer_cxt->state)\n\t{\n\t\t/* Merge, or detect error if there's a collation conflict */\n\t\tswitch (state)\n\t\t{\n\t\t\tcase FDW_COLLATE_NONE:\n\t\t\t\t/* Nothing + nothing is still nothing */\n\t\t\t\tbreak;\n\t\t\tcase FDW_COLLATE_SAFE:\n\t\t\t\tif (collation != outer_cxt->collation)\n\t\t\t\t{\n\t\t\t\t\t/*\n\t\t\t\t\t * Non-default collation always beats default.\n\t\t\t\t\t */\n\t\t\t\t\tif (outer_cxt->collation == DEFAULT_COLLATION_OID)\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Override previous parent state */\n\t\t\t\t\t\touter_cxt->collation = collation;\n\t\t\t\t\t}\n\t\t\t\t\telse if (collation != DEFAULT_COLLATION_OID)\n\t\t\t\t\t{\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Conflict; show state as indeterminate.  We don't\n\t\t\t\t\t\t * want to \"return false\" right away, since parent\n\t\t\t\t\t\t * node might not care about collation.\n\t\t\t\t\t\t */\n\t\t\t\t\t\touter_cxt->state = FDW_COLLATE_UNSAFE;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase FDW_COLLATE_UNSAFE:\n\t\t\t\t/* We're still conflicted ... */\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t/* It looks OK */\n\telog(DEBUG2, \"sqlite_fdw : %s, pushed down\", __func__);\n\n\treturn true;\n}\n\n/*\n * Build the targetlist for given relation to be deparsed as SELECT clause.\n *\n * The output targetlist contains the columns that need to be fetched from the\n * foreign server for the given relation.  If foreignrel is an upper relation,\n * then the output targetlist can also contains expressions to be evaluated on\n * foreign server.\n */\nList *\nsqlite_build_tlist_to_deparse(RelOptInfo *foreignrel)\n{\n\tList\t   *tlist = NIL;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\tListCell   *lc;\n\n\t/*\n\t * For an upper relation, we have already built the target list while\n\t * checking shippability, so just return that.\n\t */\n\tif (IS_UPPER_REL(foreignrel))\n\t\treturn fpinfo->grouped_tlist;\n\n\t/*\n\t * We require columns specified in foreignrel->reltarget->exprs and those\n\t * required for evaluating the local conditions.\n\t */\n\ttlist = add_to_flat_tlist(tlist,\n\t\t\t\t\t\t\t  pull_var_clause((Node *) foreignrel->reltarget->exprs,\n\t\t\t\t\t\t\t\t\t\t\t  PVC_RECURSE_PLACEHOLDERS));\n\tforeach(lc, fpinfo->local_conds)\n\t{\n\t\tRestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);\n\n\t\ttlist = add_to_flat_tlist(tlist,\n\t\t\t\t\t\t\t\t  pull_var_clause((Node *) rinfo->clause,\n\t\t\t\t\t\t\t\t\t\t\t\t  PVC_RECURSE_PLACEHOLDERS));\n\t}\n\n\treturn tlist;\n}\n\n\n/*\n * Deparse SELECT statement for given relation into buf.\n *\n * tlist contains the list of desired columns to be fetched from foreign server.\n * For a base relation fpinfo->attrs_used is used to construct SELECT clause,\n * hence the tlist is ignored for a base relation.\n *\n * remote_conds is the list of conditions to be deparsed into the WHERE clause\n * (or, in the case of upper relations, into the HAVING clause).\n *\n * If params_list is not NULL, it receives a list of Params and other-relation\n * Vars used in the clauses; these values must be transmitted to the remote\n * server as parameter values.\n *\n * If params_list is NULL, we're generating the query for EXPLAIN purposes,\n * so Params and other-relation Vars should be replaced by dummy values.\n *\n * pathkeys is the list of pathkeys to order the result by.\n *\n * List of columns selected is returned in retrieved_attrs.\n */\nvoid\nsqlite_deparse_select_stmt_for_rel(StringInfo buf, PlannerInfo *root, RelOptInfo *rel,\n\t\t\t\t\t\t\t\t   List *tlist, List *remote_conds, List *pathkeys,\n\t\t\t\t\t\t\t\t   bool has_final_sort, bool has_limit, bool is_subquery,\n\t\t\t\t\t\t\t\t   List **retrieved_attrs,\n\t\t\t\t\t\t\t\t   List **params_list)\n{\n\tdeparse_expr_cxt context;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) rel->fdw_private;\n\tList\t   *quals;\n\n\t/*\n\t * We handle relations for foreign tables, joins between those and upper\n\t * relations.\n\t */\n\tAssert(IS_JOIN_REL(rel) ||\n\t\t   IS_SIMPLE_REL(rel) ||\n\t\t   IS_OTHER_REL(rel) ||\n\t\t   IS_UPPER_REL(rel));\n\t/* Fill portions of context common to upper, join and base relation */\n\tcontext.buf = buf;\n\tcontext.root = root;\n\tcontext.foreignrel = rel;\n\tcontext.scanrel = IS_UPPER_REL(rel) ?\n\t\tfpinfo->outerrel : rel;\n\tcontext.params_list = params_list;\n\n\t/* Construct SELECT clause */\n\tsqlite_deparse_select(tlist, is_subquery, retrieved_attrs, &context);\n\n\t/*\n\t * For upper relations, the WHERE clause is built from the remote\n\t * conditions of the underlying scan relation; otherwise, we can use the\n\t * supplied list of remote conditions directly.\n\t */\n\tif (IS_UPPER_REL(rel))\n\t{\n\t\tSqliteFdwRelationInfo *ofpinfo;\n\n\t\tofpinfo = (SqliteFdwRelationInfo *) fpinfo->outerrel->fdw_private;\n\t\tquals = ofpinfo->remote_conds;\n\t}\n\telse\n\t\tquals = remote_conds;\n\n\t/* Construct FROM and WHERE clauses */\n\tsqlite_deparse_from_expr(quals, &context);\n\n\tif (IS_UPPER_REL(rel))\n\t{\n\t\t/* Append GROUP BY clause */\n\t\tsqlite_append_group_by_clause(tlist, &context);\n\n\t\t/* Append HAVING clause */\n\t\tif (remote_conds)\n\t\t{\n\t\t\tappendStringInfo(buf, \" HAVING \");\n\t\t\tsqlite_append_conditions(remote_conds, &context);\n\t\t}\n\t}\n\n\t/* Add ORDER BY clause if we found any useful pathkeys */\n\tif (pathkeys)\n\t\tsqlite_append_order_by_clause(pathkeys, has_final_sort, &context);\n\n\t/* Add LIMIT clause if necessary */\n\tif (has_limit)\n\t\tsqlite_append_limit_clause(&context);\n\n}\n\n/*\n * Deparese SELECT statment\n */\nstatic void\nsqlite_deparse_select(List *tlist, bool is_subquery, List **retrieved_attrs, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tPlannerInfo *root = context->root;\n\tRelOptInfo *foreignrel = context->foreignrel;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\n\t/*\n\t * Construct SELECT list\n\t */\n\tappendStringInfoString(buf, \"SELECT \");\n\n\tif (is_subquery)\n\t{\n\t\t/*\n\t\t * For a relation that is deparsed as a subquery, emit expressions\n\t\t * specified in the relation's reltarget.  Note that since this is for\n\t\t * the subquery, no need to care about *retrieved_attrs.\n\t\t */\n\t\tsqlite_deparse_subquery_target_list(context);\n\t}\n\telse if (IS_JOIN_REL(foreignrel) ||\n\t\tfpinfo->is_tlist_func_pushdown == true ||\n\t\tIS_UPPER_REL(foreignrel))\n\t{\n\t\t/*\n\t\t * For a join or upper relation the input tlist gives the list of\n\t\t * columns required to be fetched from the foreign server.\n\t\t */\n\t\tsqlite_deparse_explicit_target_list(tlist, retrieved_attrs, context);\n\t}\n\telse\n\t{\n\t\t/*\n\t\t * For a base relation fpinfo->attrs_used gives the list of columns\n\t\t * required to be fetched from the foreign server.\n\t\t */\n\t\tRangeTblEntry *rte = planner_rt_fetch(foreignrel->relid, root);\n\n\t\t/*\n\t\t * Core code already has some lock on each rel being planned, so we\n\t\t * can use NoLock here.\n\t\t */\n\t\tRelation\trel = table_open(rte->relid, NoLock);\n\n\t\tsqlite_deparse_target_list(buf, root, foreignrel->relid, rel, fpinfo->attrs_used, false, retrieved_attrs, false, false);\n\n\t\ttable_close(rel, NoLock);\n\t}\n}\n\n/*\n * Construct a FROM clause and, if needed, a WHERE clause, and append those to\n * \"buf\".\n *\n * quals is the list of clauses to be included in the WHERE clause.\n */\nstatic void\nsqlite_deparse_from_expr(List *quals, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tRelOptInfo *scanrel = context->scanrel;\n#if PG_VERSION_NUM >= 170000\n\tList\t   *additional_conds = NIL;\n#endif\n\n\t/* For upper relations, scanrel must be either a joinrel or a baserel */\n\tAssert(!IS_UPPER_REL(context->foreignrel) ||\n\t\t   IS_JOIN_REL(scanrel) ||\n\t\t   IS_SIMPLE_REL(scanrel));\n\n\t/* Construct FROM clause */\n\tappendStringInfoString(buf, \" FROM \");\n\tsqlite_deparse_from_expr_for_rel(buf, context->root, scanrel,\n\t\t\t\t\t\t\t\t\t (bms_num_members(scanrel->relids) == BMS_MULTIPLE),\n\t\t\t\t\t\t\t\t\t (Index) 0, NULL,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t &additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t context->params_list);\n\n#if PG_VERSION_NUM >= 170000\n\tsqlite_append_where_clause(quals, additional_conds, context);\n\tif (additional_conds != NIL)\n\t\tlist_free_deep(additional_conds);\n#else\n\t/* Construct WHERE clause */\n\tif (quals != NIL)\n\t{\n\t\tappendStringInfo(buf, \" WHERE \");\n\t\tsqlite_append_conditions(quals, context);\n\t}\n#endif\n}\n\n/*\n * Deparse conditions from the provided list and append them to buf.\n *\n * The conditions in the list are assumed to be ANDed. This function is used to\n * deparse WHERE clauses, JOIN .. ON clauses and HAVING clauses.\n */\nstatic void\nsqlite_append_conditions(List *exprs, deparse_expr_cxt *context)\n{\n\tint\t\t\tnestlevel;\n\tListCell   *lc;\n\tbool\t\tis_first = true;\n\tStringInfo\tbuf = context->buf;\n\n\t/* Make sure any constants in the exprs are printed portably */\n\tnestlevel = sqlite_set_transmission_modes();\n\n\tforeach(lc, exprs)\n\t{\n\t\tExpr\t   *expr = (Expr *) lfirst(lc);\n\n\t\t/* Extract clause from RestrictInfo, if required */\n\t\tif (IsA(expr, RestrictInfo))\n\t\t\texpr = ((RestrictInfo *) expr)->clause;\n\n\t\t/* Connect expressions with \"AND\" and parenthesize each condition. */\n\t\tif (!is_first)\n\t\t\tappendStringInfoString(buf, \" AND \");\n\n\t\tappendStringInfoChar(buf, '(');\n\t\tsqlite_deparse_expr(expr, context);\n\t\tappendStringInfoChar(buf, ')');\n\n\t\tis_first = false;\n\t}\n\n\tsqlite_reset_transmission_modes(nestlevel);\n}\n\n/* Output join name for given join type */\nconst char *\nsqlite_get_jointype_name(JoinType jointype)\n{\n\tswitch (jointype)\n\t{\n\t\tcase JOIN_INNER:\n\t\t\treturn \"INNER\";\n\n\t\tcase JOIN_LEFT:\n\t\t\treturn \"LEFT\";\n\n\t\tcase JOIN_RIGHT:\n\t\t\treturn \"RIGHT\";\n\n\t\tcase JOIN_FULL:\n\t\t\treturn \"FULL\";\n#if PG_VERSION_NUM >= 170000\n\t\tcase JOIN_SEMI:\n\t\t\treturn \"SEMI\";\n#endif\n\t\tdefault:\n\t\t\t/* Shouldn't come here, but protect from buggy code. */\n\t\t\telog(ERROR, \"unsupported join type %d\", jointype);\n\t}\n\n\t/* Keep compiler happy */\n\treturn NULL;\n}\n\n\n/*\n * Deparse given targetlist and append it to context->buf.\n *\n * tlist is list of TargetEntry's which in turn contain Var nodes.\n *\n * retrieved_attrs is the list of continuously increasing integers starting\n * from 1. It has same number of entries as tlist.\n */\nstatic void\nsqlite_deparse_explicit_target_list(List *tlist, List **retrieved_attrs,\n\t\t\t\t\t\t\t\t\tdeparse_expr_cxt *context)\n{\n\tListCell   *lc;\n\tStringInfo\tbuf = context->buf;\n\tint\t\t\ti = 0;\n\n\t*retrieved_attrs = NIL;\n\n\tforeach(lc, tlist)\n\t{\n\t\tTargetEntry *tle = lfirst_node(TargetEntry, lc);\n\n\t\tif (i > 0)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tsqlite_deparse_expr((Expr *) tle->expr, context);\n\n\t\t*retrieved_attrs = lappend_int(*retrieved_attrs, i + 1);\n\t\ti++;\n\t}\n\n\tif (i == 0)\n\t\tappendStringInfoString(buf, \"NULL\");\n}\n\n/*\n * Emit expressions specified in the given relation's reltarget.\n *\n * This is used for deparsing the given relation as a subquery.\n */\nstatic void\nsqlite_deparse_subquery_target_list(deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tRelOptInfo *foreignrel = context->foreignrel;\n\tbool\t\tfirst;\n\tListCell   *lc;\n\tint\t\t\tcol = 1;\n\n\t/* Should only be called in these cases. */\n\tAssert(IS_SIMPLE_REL(foreignrel) || IS_JOIN_REL(foreignrel));\n\n\tfirst = true;\n\tforeach(lc, foreignrel->reltarget->exprs)\n\t{\n\t\tNode\t   *node = (Node *) lfirst(lc);\n\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tfirst = false;\n\n\t\tsqlite_deparse_expr((Expr *) node, context);\n\n\t\tappendStringInfo(buf, \" AS %s%d\", SUBQUERY_COL_ALIAS_PREFIX, col);\n\t\tcol++;\n\t}\n\n\t/* Don't generate bad syntax if no expressions */\n\tif (first)\n\t\tappendStringInfoString(buf, \"NULL\");\n}\n\n/*\n * Construct FROM clause for given relation\n *\n * The function constructs ... JOIN ... ON ... for join relation. For a base\n * relation it just returns schema-qualified tablename, with the appropriate\n * alias if so requested.\n *\n * 'ignore_rel' is either zero or the RT index of a target relation.  In the\n * latter case the function constructs FROM clause of UPDATE or USING clause\n * of DELETE; it deparses the join relation as if the relation never contained\n * the target relation, and creates a List of conditions to be deparsed into\n * the top-level WHERE clause, which is returned to *ignore_conds.\n *\n * 'additional_conds' is a pointer to a list of strings to be appended to\n * the WHERE clause, coming from lower-level SEMI-JOINs.\n */\nstatic void\nsqlite_deparse_from_expr_for_rel(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t bool use_alias, Index ignore_rel, List **ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t List **additional_conds,\n#endif\n\t\t\t\t\t\t\t\t List **params_list)\n{\n\tif (IS_JOIN_REL(foreignrel))\n\t{\n\t\tStringInfoData join_sql_o;\n\t\tStringInfoData join_sql_i;\n\t\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\t\tRelOptInfo *outerrel = fpinfo->outerrel;\n\t\tRelOptInfo *innerrel = fpinfo->innerrel;\n\t\tbool\t\touterrel_is_target = false;\n\t\tbool\t\tinnerrel_is_target = false;\n#if PG_VERSION_NUM >= 170000\n\t\tList\t   *additional_conds_i = NIL;\n\t\tList\t   *additional_conds_o = NIL;\n#endif\n\n\t\tif (ignore_rel > 0 && bms_is_member(ignore_rel, foreignrel->relids))\n\t\t{\n\t\t\t/*\n\t\t\t * If this is an inner join, add joinclauses to *ignore_conds and\n\t\t\t * set it to empty so that those can be deparsed into the WHERE\n\t\t\t * clause.  Note that since the target relation can never be\n\t\t\t * within the nullable side of an outer join, those could safely\n\t\t\t * be pulled up into the WHERE clause (see foreign_join_ok()).\n\t\t\t * Note also that since the target relation is only inner-joined\n\t\t\t * to any other relation in the query, all conditions in the join\n\t\t\t * tree mentioning the target relation could be deparsed into the\n\t\t\t * WHERE clause by doing this recursively.\n\t\t\t */\n\t\t\tif (fpinfo->jointype == JOIN_INNER)\n\t\t\t{\n\t\t\t\t*ignore_conds = list_concat(*ignore_conds,\n\t\t\t\t\t\t\t\t\t\t\tfpinfo->joinclauses);\n\t\t\t\tfpinfo->joinclauses = NIL;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Check if either of the input relations is the target relation.\n\t\t\t */\n\t\t\tif (outerrel->relid == ignore_rel)\n\t\t\t\touterrel_is_target = true;\n\t\t\telse if (innerrel->relid == ignore_rel)\n\t\t\t\tinnerrel_is_target = true;\n\t\t}\n\n\t\t/* Deparse outer relation if not the target relation. */\n\t\tif (!outerrel_is_target)\n\t\t{\n\t\t\tinitStringInfo(&join_sql_o);\n\t\t\tsqlite_deparse_range_tbl_ref(&join_sql_o, root, outerrel,\n\t\t\t\t\t\t\t\t\t\t fpinfo->make_outerrel_subquery,\n\t\t\t\t\t\t\t\t\t\t ignore_rel, ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t &additional_conds_o,\n#endif\n\t\t\t\t\t\t\t\t\t\t params_list);\n\n\t\t\t/*\n\t\t\t * If inner relation is the target relation, skip deparsing it.\n\t\t\t * Note that since the join of the target relation with any other\n\t\t\t * relation in the query is an inner join and can never be within\n\t\t\t * the nullable side of an outer join, the join could be\n\t\t\t * interchanged with higher-level joins (cf. identity 1 on outer\n\t\t\t * join reordering shown in src/backend/optimizer/README), which\n\t\t\t * means it's safe to skip the target-relation deparsing here.\n\t\t\t */\n\t\t\tif (innerrel_is_target)\n\t\t\t{\n\t\t\t\tAssert(fpinfo->jointype == JOIN_INNER);\n\t\t\t\tAssert(fpinfo->joinclauses == NIL);\n\t\t\t\tappendBinaryStringInfo(buf, join_sql_o.data, join_sql_o.len);\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t/* Pass EXISTS conditions to upper level */\n\t\t\t\tif (additional_conds_o != NIL)\n\t\t\t\t{\n\t\t\t\t\tAssert(*additional_conds == NIL);\n\t\t\t\t\t*additional_conds = additional_conds_o;\n\t\t\t\t}\n#endif\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/* Deparse inner relation if not the target relation. */\n\t\tif (!innerrel_is_target)\n\t\t{\n\t\t\tinitStringInfo(&join_sql_i);\n\t\t\tsqlite_deparse_range_tbl_ref(&join_sql_i, root, innerrel,\n\t\t\t\t\t\t\t\t\t\t fpinfo->make_innerrel_subquery,\n\t\t\t\t\t\t\t\t\t\t ignore_rel, ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t &additional_conds_i,\n#endif\n\t\t\t\t\t\t\t\t\t\t params_list);\n#if PG_VERSION_NUM >= 170000\n\t\t\t/*\n\t\t\t * SEMI-JOIN is deparsed as the EXISTS subquery. It references\n\t\t\t * outer and inner relations, so it should be evaluated as the\n\t\t\t * condition in the upper-level WHERE clause. We deparse the\n\t\t\t * condition and pass it to upper level callers as an\n\t\t\t * additional_conds list. Upper level callers are responsible for\n\t\t\t * inserting conditions from the list where appropriate.\n\t\t\t */\n\t\t\tif (fpinfo->jointype == JOIN_SEMI)\n\t\t\t{\n\t\t\t\tdeparse_expr_cxt context;\n\t\t\t\tStringInfoData str;\n\n\t\t\t\t/* Construct deparsed condition from this SEMI-JOIN */\n\t\t\t\tinitStringInfo(&str);\n\t\t\t\tappendStringInfo(&str, \"EXISTS (SELECT NULL FROM %s\",\n\t\t\t\t\t\t\t\t join_sql_i.data);\n\n\t\t\t\tcontext.buf = &str;\n\t\t\t\tcontext.foreignrel = foreignrel;\n\t\t\t\tcontext.scanrel = foreignrel;\n\t\t\t\tcontext.root = root;\n\t\t\t\tcontext.params_list = params_list;\n\n\t\t\t\t/*\n\t\t\t\t * Append SEMI-JOIN clauses and EXISTS conditions from lower\n\t\t\t\t * levels to the current EXISTS subquery\n\t\t\t\t */\n\t\t\t\tsqlite_append_where_clause(fpinfo->joinclauses, additional_conds_i, &context);\n\n\t\t\t\t/*\n\t\t\t\t * EXISTS conditions, coming from lower join levels, have just\n\t\t\t\t * been processed.\n\t\t\t\t */\n\t\t\t\tif (additional_conds_i != NIL)\n\t\t\t\t{\n\t\t\t\t\tlist_free_deep(additional_conds_i);\n\t\t\t\t\tadditional_conds_i = NIL;\n\t\t\t\t}\n\n\t\t\t\t/* Close parentheses for EXISTS subquery */\n\t\t\t\tappendStringInfoChar(&str, ')');\n\n\t\t\t\t*additional_conds = lappend(*additional_conds, str.data);\n\t\t\t}\n#endif\n\t\t\t/*\n\t\t\t * If outer relation is the target relation, skip deparsing it.\n\t\t\t * See the above note about safety.\n\t\t\t */\n\t\t\tif (outerrel_is_target)\n\t\t\t{\n\t\t\t\tAssert(fpinfo->jointype == JOIN_INNER);\n\t\t\t\tAssert(fpinfo->joinclauses == NIL);\n\t\t\t\tappendBinaryStringInfo(buf, join_sql_i.data, join_sql_i.len);\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t/* Pass EXISTS conditions to the upper call */\n\t\t\t\tif (additional_conds_i != NIL)\n\t\t\t\t{\n\t\t\t\t\tAssert(*additional_conds == NIL);\n\t\t\t\t\t*additional_conds = additional_conds_i;\n\t\t\t\t}\n#endif\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/* Neither of the relations is the target relation. */\n\t\tAssert(!outerrel_is_target && !innerrel_is_target);\n\n#if PG_VERSION_NUM >= 170000\n\t\t/*\n\t\t * For semijoin FROM clause is deparsed as an outer relation. An inner\n\t\t * relation and join clauses are converted to EXISTS condition and\n\t\t * passed to the upper level.\n\t\t */\n\t\tif (fpinfo->jointype == JOIN_SEMI)\n\t\t{\n\t\t\tappendBinaryStringInfo(buf, join_sql_o.data, join_sql_o.len);\n\t\t}\n\t\telse\n\t\t{\n#endif\n\t\t/*\n\t\t * For a join relation FROM clause, entry is deparsed as\n\t\t *\n\t\t * ((outer relation) <join type> (inner relation) ON\n\t\t * (joinclauses))\n\t\t */\n\t\t\tappendStringInfo(buf, \"(%s %s JOIN %s ON \", join_sql_o.data,\n\t\t\t\t\t\t\tsqlite_get_jointype_name(fpinfo->jointype), join_sql_i.data);\n\n\t\t\t/* Append join clause; (TRUE) if no join clause */\n\t\t\tif (fpinfo->joinclauses)\n\t\t\t{\n\t\t\t\tdeparse_expr_cxt context;\n\n\t\t\t\tcontext.buf = buf;\n\t\t\t\tcontext.foreignrel = foreignrel;\n\t\t\t\tcontext.scanrel = foreignrel;\n\t\t\t\tcontext.root = root;\n\t\t\t\tcontext.params_list = params_list;\n\n\t\t\t\tappendStringInfo(buf, \"(\");\n\t\t\t\tsqlite_append_conditions(fpinfo->joinclauses, &context);\n\t\t\t\tappendStringInfo(buf, \")\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tappendStringInfoString(buf, \"(TRUE)\");\n\n\t\t\t/* End the FROM clause entry. */\n\t\t\tappendStringInfo(buf, \")\");\n#if PG_VERSION_NUM >= 170000\n\t\t}\n\n\t\t/*\n\t\t * Construct additional_conds to be passed to the upper caller from\n\t\t * current level additional_conds and additional_conds, coming from\n\t\t * inner and outer rels.\n\t\t */\n\t\tif (additional_conds_o != NIL)\n\t\t{\n\t\t\t*additional_conds = list_concat(*additional_conds,\n\t\t\t\t\t\t\t\t\t\t\tadditional_conds_o);\n\t\t\tlist_free(additional_conds_o);\n\t\t}\n\n\t\tif (additional_conds_i != NIL)\n\t\t{\n\t\t\t*additional_conds = list_concat(*additional_conds,\n\t\t\t\t\t\t\t\t\t\t\tadditional_conds_i);\n\t\t\tlist_free(additional_conds_i);\n\t\t}\n#endif\n\t}\n\telse\n\t{\n\t\tRangeTblEntry *rte = planner_rt_fetch(foreignrel->relid, root);\n\n\t\t/*\n\t\t * Core code already has some lock on each rel being planned, so we\n\t\t * can use NoLock here.\n\t\t */\n\t\tRelation\trel = table_open(rte->relid, NoLock);\n\n\t\tsqlite_deparse_relation(buf, rel);\n\n\t\t/*\n\t\t * Add a unique alias to avoid any conflict in relation names due to\n\t\t * pulled up subqueries in the query being built for a pushed down\n\t\t * join.\n\t\t */\n\t\tif (use_alias)\n\t\t\tappendStringInfo(buf, \" %s%d\", REL_ALIAS_PREFIX, foreignrel->relid);\n\n\t\ttable_close(rel, NoLock);\n\t}\n}\n\n/*\n * Append FROM clause entry for the given relation into buf.\n * Conditions from lower-level SEMI-JOINs are appended to additional_conds\n * and should be added to upper level WHERE clause.\n */\nstatic void\nsqlite_deparse_range_tbl_ref(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t bool make_subquery, Index ignore_rel, List **ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t List **additional_conds,\n#endif\n\t\t\t\t\t\t\t List **params_list)\n{\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\n\t/* Should only be called in these cases. */\n\tAssert(IS_SIMPLE_REL(foreignrel) || IS_JOIN_REL(foreignrel));\n\n\tAssert(fpinfo->local_conds == NIL);\n\n\t/* If make_subquery is true, deparse the relation as a subquery. */\n\tif (make_subquery)\n\t{\n\t\tList\t   *retrieved_attrs;\n\n\t\t/*\n\t\t * The given relation shouldn't contain the target relation, because\n\t\t * this should only happen for input relations for a full join, and\n\t\t * such relations can never contain an UPDATE/DELETE target.\n\t\t */\n\t\tAssert(ignore_rel == 0 ||\n\t\t\t   !bms_is_member(ignore_rel, foreignrel->relids));\n\n\t\t/* Deparse the subquery representing the relation. */\n\t\tappendStringInfoChar(buf, '(');\n\t\tsqlite_deparse_select_stmt_for_rel(buf, root, foreignrel, NIL,\n\t\t\t\t\t\t\t\t\t\t   fpinfo->remote_conds, NIL,\n\t\t\t\t\t\t\t\t\t\t   false, false, true,\n\t\t\t\t\t\t\t\t\t\t   &retrieved_attrs, params_list);\n\t\tappendStringInfoChar(buf, ')');\n\n\t\t/* Append the relation alias. */\n\t\tappendStringInfo(buf, \" %s%d\", SUBQUERY_REL_ALIAS_PREFIX,\n\t\t\t\t\t\t fpinfo->relation_index);\n\n\t}\n\telse\n\t\tsqlite_deparse_from_expr_for_rel(buf, root, foreignrel, true, ignore_rel,\n\t\t\t\t\t\t\t\t\t\t ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t\t params_list);\n}\n\n/*\n * deparse remote INSERT statement\n *\n * The statement text is appended to buf, and we also create an integer List\n * of the columns being retrieved by RETURNING (if any), which is returned\n * to *retrieved_attrs.\n */\nvoid\nsqlite_deparse_insert(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t  Index rtindex, Relation rel,\n\t\t\t\t\t  List *targetAttrs, bool doNothing,\n\t\t\t\t\t  int *values_end_len)\n{\n#if PG_VERSION_NUM >= 140000\n\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n\tbool\t\tall_columns_generated = true;\n#endif\n\tAttrNumber\tpindex;\n\tbool\t\tfirst;\n\tListCell   *lc;\n\n\tappendStringInfo(buf, \"INSERT %sINTO \", doNothing ? \"OR IGNORE \" : \"\");\n\tsqlite_deparse_relation(buf, rel);\n\n#if PG_VERSION_NUM >= 140000\n\n\t/*\n\t * Check all columns in table that they are all generated column or not.\n\t * If true, we will skip all columns and just add 'DEFAULT VALUES'. If\n\t * not, we still push down other columns which are not generated column.\n\t */\n\tif (targetAttrs)\n\t{\n\t\tforeach(lc, targetAttrs)\n\t\t{\n\t\t\tint\t\t\tattnum = linitial_int(targetAttrs);\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t\tif (!attr->attgenerated)\n\t\t\t{\n\t\t\t\tall_columns_generated = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n#endif\n\n#if (PG_VERSION_NUM >= 140000)\n\tif (targetAttrs && !all_columns_generated)\n#else\n\tif (targetAttrs)\n#endif\n\t{\n\t\tappendStringInfoChar(buf, '(');\n\n\t\tfirst = true;\n\t\tforeach(lc, targetAttrs)\n\t\t{\n\t\t\tint\t\t\tattnum = lfirst_int(lc);\n#if PG_VERSION_NUM >= 140000\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t\tif (!attr->attgenerated)\n\t\t\t{\n#endif\n\t\t\t\tif (!first)\n\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t\tfirst = false;\n\n\t\t\t\tsqlite_deparse_column_ref(buf, rtindex, attnum, root, false, true);\n#if PG_VERSION_NUM >= 140000\n\t\t\t}\n#endif\n\t\t}\n\n\t\tappendStringInfoString(buf, \") VALUES (\");\n\n\t\tpindex = 1;\n\t\tfirst = true;\n\t\tforeach(lc, targetAttrs)\n\t\t{\n#if PG_VERSION_NUM >= 140000\n\t\t\tint\t\t\tattnum = lfirst_int(lc);\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t\tif (!attr->attgenerated)\n\t\t\t{\n#endif\n\t\t\t\tif (!first)\n\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t\tfirst = false;\n\t\t\t\tappendStringInfo(buf, \"?\");\n\t\t\t\tpindex++;\n#if PG_VERSION_NUM >= 140000\n\t\t\t}\n#endif\n\t\t}\n\n\t\tappendStringInfoChar(buf, ')');\n\t}\n\telse\n\t\tappendStringInfoString(buf, \" DEFAULT VALUES\");\n\t*values_end_len = buf->len;\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * rebuild remote INSERT statement\n *\n * Provided a number of rows in a batch, builds INSERT statement with the\n * right number of parameters.\n */\nvoid\nsqlite_rebuild_insert(StringInfo buf, Relation rel, char *orig_query,\n\t\t\t\t\t  List *target_attrs, int values_end_len, int num_params,\n\t\t\t\t\t  int num_rows)\n{\n\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n\tint\t\t\ti;\n\tbool\t\tfirst;\n\tListCell   *lc;\n\n\t/* Make sure the values_end_len is sensible */\n\tAssert((values_end_len > 0) && (values_end_len <= strlen(orig_query)));\n\n\t/* Copy up to the end of the first record from the original query */\n\tappendBinaryStringInfo(buf, orig_query, values_end_len);\n\n\t/*\n\t * Add records to VALUES clause (we already have parameters for the first\n\t * row, so start at the right offset).\n\t */\n\tfor (i = 0; i < num_rows; i++)\n\t{\n\t\tappendStringInfoString(buf, \", (\");\n\n\t\tfirst = true;\n\t\tforeach(lc, target_attrs)\n\t\t{\n\t\t\tint\t\t\tattnum = lfirst_int(lc);\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t\tif (!attr->attgenerated)\n\t\t\t{\n\t\t\t\tif (!first)\n\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t\tfirst = false;\n\n\t\t\t\tappendStringInfo(buf, \"?\");\n\t\t\t}\n\t\t}\n\n\t\tappendStringInfoChar(buf, ')');\n\t}\n\n\t/* Copy stuff after VALUES clause from the original query */\n\tappendStringInfoString(buf, orig_query + values_end_len);\n}\n#endif\n\nvoid\nsqlite_deparse_analyze(StringInfo sql, char *dbname, char *relname)\n{\n\tappendStringInfo(sql, \"SELECT\");\n\tappendStringInfo(sql, \" round(((data_length + index_length)), 2)\");\n\tappendStringInfo(sql, \" FROM information_schema.TABLES\");\n\tappendStringInfo(sql, \" WHERE table_schema = '%s' AND table_name = '%s'\", dbname, relname);\n}\n\n/*\n * Emit a target list that retrieves the columns specified in attrs_used.\n * This is used for both SELECT and RETURNING targetlists.\n */\nstatic void\nsqlite_deparse_target_list(StringInfo buf,\n\t\t\t\t\t\t   PlannerInfo *root,\n\t\t\t\t\t\t   Index rtindex,\n\t\t\t\t\t\t   Relation rel,\n\t\t\t\t\t\t   Bitmapset *attrs_used,\n\t\t\t\t\t\t   bool qualify_col,\n\t\t\t\t\t\t   List **retrieved_attrs,\n\t\t\t\t\t\t   bool is_concat,\n\t\t\t\t\t\t   bool check_null)\n{\n\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n\tbool\t\thave_wholerow;\n\tbool\t\tfirst;\n\tint\t\t\ti;\n\n\t/* If there's a whole-row reference, we'll need all the columns. */\n\thave_wholerow = bms_is_member(0 - FirstLowInvalidHeapAttributeNumber,\n\t\t\t\t\t\t\t\t  attrs_used);\n\n\tfirst = true;\n\t*retrieved_attrs = NIL;\n\tfor (i = 1; i <= tupdesc->natts; i++)\n\t{\n\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, i - 1);\n\n\t\t/* Ignore dropped attributes. */\n\t\tif (attr->attisdropped)\n\t\t\tcontinue;\n\n\t\tif (have_wholerow ||\n\t\t\tbms_is_member(i - FirstLowInvalidHeapAttributeNumber,\n\t\t\t\t\t\t  attrs_used))\n\t\t{\n\t\t\tif (!first)\n\t\t\t{\n\t\t\t\tif (is_concat)\n\t\t\t\t\tappendStringInfoString(buf, \", '') || \\\",\\\" || COALESCE(\");\n\t\t\t\telse if (check_null)\n\t\t\t\t\tappendStringInfoString(buf, \"OR ( \");\n\t\t\t\telse\n\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t}\n\t\t\telse if (is_concat)\n\t\t\t\tappendStringInfoString(buf, \"COALESCE(\");\n\t\t\telse if (check_null)\n\t\t\t\tappendStringInfoString(buf, \"( \");\n\n\t\t\tfirst = false;\n\n\t\t\tsqlite_deparse_column_ref(buf, rtindex, i, root, qualify_col, false);\n\n\t\t\tif (check_null)\n\t\t\t\tappendStringInfoString(buf, \" IS NOT NULL) \");\n\n\t\t\t*retrieved_attrs = lappend_int(*retrieved_attrs, i);\n\t\t}\n\t}\n\n\t/* Don't generate bad syntax if no undropped columns */\n\tif (first)\n\t\tappendStringInfoString(buf, \"NULL\");\n\telse if (is_concat)\n\t\tappendStringInfoString(buf, \", '')\");\n}\n\n#if PG_VERSION_NUM >= 170000\n/*\n * Append WHERE clause, containing conditions from exprs and additional_conds,\n * to context->buf.\n */\nvoid\nsqlite_append_where_clause(List *exprs, List *additional_conds, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tbool\t\tneed_and = false;\n\tListCell   *lc;\n\n\tif (exprs != NIL || additional_conds != NIL)\n\t\tappendStringInfoString(buf, \" WHERE \");\n\n\t/*\n\t * If there are some filters, append them.\n\t */\n\tif (exprs != NIL)\n\t{\n\t\tsqlite_append_conditions(exprs, context);\n\t\tneed_and = true;\n\t}\n\n\t/*\n\t * If there are some EXISTS conditions, coming from SEMI-JOINS, append\n\t * them.\n\t */\n\tforeach(lc, additional_conds)\n\t{\n\t\tif (need_and)\n\t\t\tappendStringInfoString(buf, \" AND \");\n\t\tappendStringInfoString(buf, (char *) lfirst(lc));\n\t\tneed_and = true;\n\t}\n}\n#endif\n\n#if PG_VERSION_NUM >= 140000\n/*\n * TRUNCATE in SQLite is supported by use DELETE FROM without WHERE condition.\n */\nvoid\nsqlite_deparse_truncate(StringInfo buf,\n\t\t\t\t\t\tList *rels)\n{\n\tListCell   *cell;\n\tRelation\trel;\n\n\tappendStringInfoString(buf, \"PRAGMA foreign_keys = ON;\");\n\n\tforeach(cell, rels)\n\t{\n\t\tappendStringInfoString(buf, \"DELETE FROM \");\n\n\t\trel = lfirst(cell);\n\n\t\tsqlite_deparse_relation(buf, rel);\n\t\tappendStringInfoChar(buf, ';');\n\t}\n}\n#endif\n\n/*\n * Construct name to use for given column, and emit it into buf.\n * If it has a column_name FDW option, use that instead of attribute name.\n */\nstatic void\nsqlite_deparse_column_ref(StringInfo buf, int varno, int varattno, PlannerInfo *root, bool qualify_col, bool dml_context)\n{\n\tRangeTblEntry *rte;\n\n\t/* Get RangeTblEntry from array in PlannerInfo. */\n\trte = planner_rt_fetch(varno, root);\n\tif (varattno == 0)\n\t{\n\t\t/* Whole row reference */\n\t\tRelation\trel;\n\t\tBitmapset  *attrs_used;\n\n\t\t/* Required only to be passed down to deparseTargetList(). */\n\t\tList\t   *retrieved_attrs;\n\n\t\t/*\n\t\t * The lock on the relation will be held by upper callers, so it's\n\t\t * fine to open it with no lock here.\n\t\t */\n\t\trel = table_open(rte->relid, NoLock);\n\n\t\t/*\n\t\t * The local name of the foreign table can not be recognized by the\n\t\t * foreign server and the table it references on foreign server might\n\t\t * have different column ordering or different columns than those\n\t\t * declared locally. Hence we have to deparse whole-row reference as\n\t\t * ROW(columns referenced locally). Construct this by deparsing a\n\t\t * \"whole row\" attribute.\n\t\t */\n\t\tattrs_used = bms_add_member(NULL,\n\t\t\t\t\t\t\t\t\t0 - FirstLowInvalidHeapAttributeNumber);\n\n\t\t/*\n\t\t * In case the whole-row reference is under an outer join then it has\n\t\t * to go NULL whenever the rest of the row goes NULL. Deparsing a join\n\t\t * query would always involve multiple relations, thus qualify_col\n\t\t * would be true.\n\t\t */\n\t\tappendStringInfoString(buf, \"CASE WHEN \");\n\t\tsqlite_deparse_target_list(buf, root, varno, rel, attrs_used, qualify_col,\n\t\t\t\t\t\t\t\t   &retrieved_attrs, false, true);\n\t\tappendStringInfoString(buf, \"THEN \");\n\n\t\tappendStringInfoString(buf, \"(\\\"(\\\" || \");\n\t\tsqlite_deparse_target_list(buf, root, varno, rel, attrs_used, qualify_col,\n\t\t\t\t\t\t\t\t   &retrieved_attrs, true, false);\n\t\tappendStringInfoString(buf, \"|| \\\")\\\")\");\n\t\tappendStringInfoString(buf, \" END\");\n\n\t\ttable_close(rel, NoLock);\n\t\tbms_free(attrs_used);\n\t}\n\telse\n\t{\n\t\tchar\t   *colname = NULL;\n\t\tList\t   *options;\n\t\tListCell   *lc;\n\t\tOid\t\t\tpg_atttyp = InvalidOid;\n\t\tbool\t\tno_unification = false;\n\t\tchar\t   *coltype = NULL;\n\t\tint\t\t\tcolaff = SQLITE_NULL;\n\n\t\t/* varno must not be any of OUTER_VAR, INNER_VAR and INDEX_VAR. */\n\t\tAssert(!IS_SPECIAL_VARNO(varno));\n\n\t\t/*\n\t\t * If it's a column of a foreign table, and it has the column_name FDW\n\t\t * option, use that value.\n\t\t */\n\t\toptions = GetForeignColumnOptions(rte->relid, varattno);\n\t\tforeach(lc, options)\n\t\t{\n\t\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\n\t\t\tif (strcmp(def->defname, \"column_name\") == 0)\n\t\t\t{\n\t\t\t\tcolname = defGetString(def);\n\t\t\t\telog(DEBUG1, \"column name = %s\\n\", colname);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (strcmp(def->defname, \"column_type\") == 0)\n\t\t\t{\n\t\t\t\tcoltype = defGetString(def);\n\t\t\t\telog(DEBUG4, \"column type = %s\", coltype);\n\t\t\t\tcolaff = sqlite_affinity_code(coltype);\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * If it's a column of a regular table or it doesn't have column_name\n\t\t * FDW option, use attribute name.\n\t\t */\n\t\tif (colname == NULL)\n#if (PG_VERSION_NUM >= 110000)\n\t\t\tcolname = get_attname(rte->relid, varattno, false);\n#else\n\t\t\tcolname = get_attname(rte->relid, varattno);\n#endif\n\t\tpg_atttyp = get_atttype(rte->relid, varattno);\n\n\t\t/*\n\t\t * PostgreSQL data types with possible mixed affinity SQLite base we should\n\t\t * normalize to preferred form in SQLite before transfer to PostgreSQL.\n\t\t * Recommended form for normalisation is someone from 1<->1 with PostgreSQL\n\t\t * internal storage, hence usually this will not original text data.\n\t\t */\n\t\tif (!dml_context)\n\t\t{\n\t\t\tswitch (pg_atttyp)\n\t\t\t{\n\t\t\t\t/* some polular usual data types without normalization first */\n\t\t\t\tcase INT4OID:\n\t\t\t\tcase TEXTOID:\n\t\t\t\tcase VARCHAROID:\n\t\t\t\tcase BYTEAOID:\n\t\t\t\tcase INT8OID:\n\t\t\t\tcase BPCHAROID:\n\t\t\t\tcase INT2OID:\n\t\t\t\tcase TIMEOID:\n\t\t\t\tcase TIMESTAMPOID:\n\t\t\t\tcase TIMESTAMPTZOID:\n\t\t\t\tcase DATEOID:\n\t\t\t\tcase NAMEOID:\n\t\t\t\tcase VARBITOID:\n\t\t\t\tcase BITOID:\n\t\t\t\tcase CHAROID:\n\t\t\t\t{\n\t\t\t\t\tno_unification = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase FLOAT8OID:\n\t\t\t\tcase FLOAT4OID:\n\t\t\t\tcase NUMERICOID:\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG2, \"floatN unification for \\\"%s\\\"\", colname);\n\t\t\t\t\tappendStringInfoString(buf, \"sqlite_fdw_float(\");\n\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\tappendStringInfoString(buf, \")\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase BOOLOID:\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG2, \"boolean unification for \\\"%s\\\"\", colname);\n\t\t\t\t\tappendStringInfoString(buf, \"sqlite_fdw_bool(\");\n\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\tappendStringInfoString(buf, \")\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase UUIDOID:\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG2, \"UUID unification for \\\"%s\\\"\", colname);\n\t\t\t\t\tappendStringInfoString(buf, \"sqlite_fdw_uuid_blob(\");\n\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\tappendStringInfoString(buf, \")\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MACADDROID:\n\t\t\t\tcase MACADDR8OID:\n\t\t\t\t{\n\t\t\t\t\tint mac_len = (pg_atttyp == MACADDROID) ? MACADDR_LEN : MACADDR8_LEN;\n\n\t\t\t\t\telog(DEBUG2, \"MAC%d address unification for \\\"%s\\\"\", mac_len, colname);\n\t\t\t\t\tappendStringInfoString(buf, \"sqlite_fdw_macaddr_int(\");\n\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\tappendStringInfo(buf, \", %d)\", mac_len);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase JSONOID:\n\t\t\t\t{\n\t\t\t\t\tif (colaff != SQLITE_TEXT)\n\t\t\t\t\t{\n\t\t\t\t\t\telog(DEBUG2, \"json unification for \\\"%s\\\"\", colname);\n\t\t\t\t\t\tappendStringInfoString(buf, \"json(\");\n\t\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\t\tappendStringInfoString(buf, \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\telog(DEBUG2, \"json text affinity only for \\\"%s\\\"\", colname);\n\t\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase JSONBOID: /* jsonb in SQLite is no the same as in PosrtgreSQL, use text transport */\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : json unification for \\\"%s\\\"\", colname);\n\t\t\t\t\tappendStringInfoString(buf, \"json(\");\n\t\t\t\t\tif (qualify_col)\n\t\t\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t\t\t\tappendStringInfoString(buf, \")\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tno_unification = true;\n#ifndef SQLITE_FDW_GIS_ENABLE\n\t\t\t\t\tif (listed_datatype_oid(pg_atttyp, -1, postGisSQLiteCompatibleTypes))\n\t\t\t\t\t{\n\t\t\t\t\t\tint32\t\ttypmod = -1;\n\t\t\t\t\t\tOid\t\t\ttypid = getBaseTypeAndTypmod(pg_atttyp, &typmod);\n\t\t\t\t\t\tchar\t   *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(pg_atttyp, -1));\n\n\t\t\t\t\t\tif (typid != BYTEAOID)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\t\terrmsg(\"This PostGIS data type is supported by SpatiaLite, but FDW compiled without GIS data support\"),\n\t\t\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\"\", pg_dataTypeName)));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* else no unification for normal column */\n\t\t\t\t\t}\n\t\t\t\t\telse\n#endif\n\t\t\t\t\tif (listed_datatype_oid(pg_atttyp, -1, postGisSpecificTypes))\n\t\t\t\t\t{\n\t\t\t\t\t\tchar\t   *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(pg_atttyp, -1));\n\n\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\terrmsg(\"PostGIS specific value is not deparsable because of no similar SpatiaLite conception\"),\n\t\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\"\", pg_dataTypeName)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tno_unification = true;\n\n\t\tif (no_unification)\n\t\t{\n\t\t\telog(DEBUG3, \"sqlite_fdw : %s, varattrno != 0, not unificated column \\\"%s\\\"\", __func__, colname);\n\t\t\tif (qualify_col)\n\t\t\t\tADD_REL_QUALIFIER(buf, varno);\n\t\t\tappendStringInfoString(buf, sqlite_quote_identifier(colname, '`'));\n\t\t}\n\t}\n}\n\n/*\n * Get column option with optionname for a variable attribute in deparsing context\n */\nstatic char *\nsqlite_deparse_column_option(int varno, int varattno, PlannerInfo *root, char *optionname)\n{\n\tRangeTblEntry *rte;\n\tchar\t   *coloptionvalue = NULL;\n\tList\t   *options;\n\tListCell   *lc;\n\n\t/* varno must not be any of OUTER_VAR, INNER_VAR and INDEX_VAR. */\n\tAssert(!IS_SPECIAL_VARNO(varno));\n\n\t/* Get RangeTblEntry from array in PlannerInfo. */\n\trte = planner_rt_fetch(varno, root);\n\n\t/*\n\t * If it's a column of a foreign table, and it has the optionname value named FDW\n\t * option, use that value.\n\t */\n\toptions = GetForeignColumnOptions(rte->relid, varattno);\n\tforeach(lc, options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, optionname) == 0)\n\t\t{\n\t\t\tcoloptionvalue = defGetString(def);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn coloptionvalue;\n}\n\n/*\n * Convert a text value from PostgreSQL database with an encoding to SQLite value which is always UTF8\n */\nstatic const char *\npg_text_value_to_sqlite_text(const char * pg_text_value)\n{\n\tint pg_database_encoding = GetDatabaseEncoding(); /* very fast call, see PostgreSQL mbutils.c */\n\treturn (pg_database_encoding == PG_UTF8) ? pg_text_value : (char *) pg_do_encoding_conversion((unsigned char *) pg_text_value, strlen(pg_text_value),  pg_database_encoding, PG_UTF8);\n}\n\n/*\n* Append a SQL string literal representing \"val\" to buf.\n*/\nvoid\nsqlite_deparse_string_literal(StringInfo buf, const char *val)\n{\n\tconst char *sqlite_text_val;\n\tconst char *valptr;\n\n\tsqlite_text_val = pg_text_value_to_sqlite_text(val);\n\n\tappendStringInfoChar(buf, '\\'');\n\tfor (valptr = sqlite_text_val; *valptr; valptr++)\n\t{\n\t\tchar\t\tch = *valptr;\n\n\t\tif (SQL_STR_DOUBLE(ch, true))\n\t\t\tappendStringInfoChar(buf, ch);\n\t\tappendStringInfoChar(buf, ch);\n\t}\n\tappendStringInfoChar(buf, '\\'');\n}\n\n/*\n * Deparse given expression into context->buf.\n *\n * This function must support all the same node types that sqlite_foreign_expr_walker\n * accepts.\n *\n * Note: unlike ruleutils.c, we just use a simple hard-wired parenthesization\n * scheme: anything more complex than a Var, Const, function call or cast\n * should be self-parenthesized.\n */\nstatic void\nsqlite_deparse_expr(Expr *node, deparse_expr_cxt *context)\n{\n\tif (node == NULL)\n\t\treturn;\n\n\tswitch (nodeTag(node))\n\t{\n\t\tcase T_Var:\n\t\t\tsqlite_deparse_var((Var *) node, context);\n\t\t\tbreak;\n\t\tcase T_Const:\n\t\t\tsqlite_deparse_const((Const *) node, context, 0);\n\t\t\tbreak;\n\t\tcase T_Param:\n\t\t\tsqlite_deparse_param((Param *) node, context);\n\t\t\tbreak;\n\t\tcase T_FuncExpr:\n\t\t\tsqlite_deparse_func_expr((FuncExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_OpExpr:\n\t\t\tsqlite_deparse_op_expr((OpExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_ScalarArrayOpExpr:\n\t\t\tsqlite_deparse_scalar_array_op_expr((ScalarArrayOpExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_RelabelType:\n\t\t\tsqlite_deparse_relabel_type((RelabelType *) node, context);\n\t\t\tbreak;\n\t\tcase T_BoolExpr:\n\t\t\tsqlite_deparse_bool_expr((BoolExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_NullTest:\n\t\t\tsqlite_deparse_null_test((NullTest *) node, context);\n\t\t\tbreak;\n\t\tcase T_ArrayExpr:\n\t\t\tsqlite_deparse_array_expr((ArrayExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_CaseExpr:\n\t\t\tsqlite_deparse_case_expr((CaseExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_CoalesceExpr:\n\t\t\tsqlite_deparse_coalesce_expr((CoalesceExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_NullIfExpr:\n\t\t\tsqlite_deparse_null_if_expr((NullIfExpr *) node, context);\n\t\t\tbreak;\n\t\tcase T_Aggref:\n\t\t\tsqlite_deparse_aggref((Aggref *) node, context);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\telog(ERROR, \"unsupported expression type for deparse: %d\",\n\t\t\t\t (int) nodeTag(node));\n\t\t\tbreak;\n\t}\n}\n\n/*\n * deparse remote UPDATE statement\n *\n * The statement text is appended to buf, and we also create an integer List\n * of the columns being retrieved by RETURNING (if any), which is returned\n * to *retrieved_attrs.\n */\nvoid\nsqlite_deparse_update(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t  Index rtindex, Relation rel,\n\t\t\t\t\t  List *targetAttrs, List *attnums)\n{\n#if PG_VERSION_NUM >= 140000\n\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n#endif\n\tAttrNumber\tpindex;\n\tbool\t\tfirst;\n\tListCell   *lc;\n\tint\t\t\ti;\n\n\tappendStringInfoString(buf, \"UPDATE \");\n\tsqlite_deparse_relation(buf, rel);\n\tappendStringInfoString(buf, \" SET \");\n\n\tpindex = 2;\n\tfirst = true;\n\tforeach(lc, targetAttrs)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc);\n#if PG_VERSION_NUM >= 140000\n\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\tif (!attr->attgenerated)\n\t\t{\n#endif\n\t\t\tif (!first)\n\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\tfirst = false;\n\t\t\tsqlite_deparse_column_ref(buf, rtindex, attnum, root, false, true);\n\t\t\tappendStringInfo(buf, \" = ?\");\n\t\t\tpindex++;\n#if PG_VERSION_NUM >= 140000\n\t\t}\n#endif\n\t}\n\ti = 0;\n\tforeach(lc, attnums)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc);\n\n\t\tappendStringInfo(buf, i == 0 ? \" WHERE \" : \" AND \");\n\t\tsqlite_deparse_column_ref(buf, rtindex, attnum, root, false, true);\n\t\tappendStringInfo(buf, \"=?\");\n\t\ti++;\n\t}\n}\n\n/*\n * Preferred SQLite affinity from \"column_type\" foreign column option\n * SQLITE_NULL if no value or no normal value\n */\nint\npreferred_sqlite_affinity (Oid relid, int varattno)\n{\n\tchar\t   *coltype = NULL;\n\tList\t   *options;\n\tListCell   *lc;\n\n\telog(DEBUG4, \"sqlite_fdw : %s \", __func__);\n\tif (varattno == 0)\n\t\treturn SQLITE_NULL;\n\n\toptions = GetForeignColumnOptions(relid, varattno);\n\tforeach(lc, options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"column_type\") == 0)\n\t\t{\n\t\t\tcoltype = defGetString(def);\n\t\t\telog(DEBUG4, \"column type = %s\", coltype);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn sqlite_affinity_code(coltype);\n}\n\n/*\n * deparse remote UPDATE statement\n *\n * 'buf' is the output buffer to append the statement to 'rtindex' is the RT\n * index of the associated target relation 'rel' is the relation descriptor\n * for the target relation 'foreignrel' is the RelOptInfo for the target\n * relation or the join relation containing all base relations in the query\n * 'targetlist' is the tlist of the underlying foreign-scan plan node\n * 'targetAttrs' is the target columns of the UPDATE 'remote_conds' is the\n * qual clauses that must be evaluated remotely '*params_list' is an output\n * list of exprs that will become remote Params '*retrieved_attrs' is an\n * output list of integers of columns being retrieved by RETURNING (if any)\n */\nvoid\nsqlite_deparse_direct_update_sql(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t\t\t\t Index rtindex, Relation rel,\n\t\t\t\t\t\t\t\t RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t List *targetlist,\n\t\t\t\t\t\t\t\t List *targetAttrs,\n\t\t\t\t\t\t\t\t List *remote_conds,\n\t\t\t\t\t\t\t\t List **params_list,\n\t\t\t\t\t\t\t\t List **retrieved_attrs)\n{\n\tdeparse_expr_cxt context;\n\tint\t\t\tnestlevel;\n\tbool\t\tfirst;\n\tListCell   *lc;\n\tListCell   *lc2;\n#if PG_VERSION_NUM >= 170000\n\tList\t   *additional_conds = NIL;\n#endif\n\n\telog(DEBUG3, \"sqlite_fdw : %s\\n\", __func__);\n\t/* Set up context struct for recursion */\n\tcontext.root = root;\n\tcontext.foreignrel = foreignrel;\n\tcontext.scanrel = foreignrel;\n\tcontext.buf = buf;\n\tcontext.params_list = params_list;\n\n\tappendStringInfoString(buf, \"UPDATE \");\n\tsqlite_deparse_relation(buf, rel);\n\tif (IS_JOIN_REL(foreignrel))\n\t\tappendStringInfo(buf, \" %s%d\", REL_ALIAS_PREFIX, rtindex);\n\tappendStringInfoString(buf, \" SET \");\n\n\t/* Make sure any constants in the exprs are printed portably */\n\tnestlevel = sqlite_set_transmission_modes();\n\n\tfirst = true;\n\tforboth(lc, targetlist, lc2, targetAttrs)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc2);\n\t\tint\t\t\tpreferred_affinity = SQLITE_NULL;\n\t\tTargetEntry *tle;\n\t\tRangeTblEntry *rte;\n\t\tbool\t\tspecial_affinity = false;\n\t\tOid\t\t\tpg_attyp;\n#if (PG_VERSION_NUM >= 140000)\n\t\ttle = lfirst_node(TargetEntry, lc);\n\n\t\t/* update's new-value expressions shouldn't be resjunk */\n\t\tAssert(!tle->resjunk);\n#else\n\t\t(void) lc;\n\t\ttle = get_tle_by_resno(targetlist, attnum);\n#endif\n\n\t\tif (!tle)\n\t\t\telog(ERROR, \"attribute number %d not found in UPDATE targetlist\",\n\t\t\t\t attnum);\n\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tfirst = false;\n\n\t\tsqlite_deparse_column_ref(buf, rtindex, attnum, root, false, true);\n\n\t\t/* Get RangeTblEntry from array in PlannerInfo. */\n\t\trte = planner_rt_fetch(rtindex, root);\n\t\tpg_attyp = get_atttype(rte->relid, attnum);\n\t\tpreferred_affinity = preferred_sqlite_affinity(rte->relid, attnum);\n\n\t\tappendStringInfoString(buf, \" = \");\n\t\tif (pg_attyp == UUIDOID && preferred_affinity == SQLITE3_TEXT)\n\t\t{\n\t\t\tappendStringInfo(buf, \"sqlite_fdw_uuid_str(\");\n\t\t\tspecial_affinity = true;\n\t\t}\n\t\telse if ((pg_attyp == MACADDROID || pg_attyp == MACADDR8OID) && preferred_affinity != SQLITE_INTEGER)\n\t\t{\n\t\t\tif (preferred_affinity == SQLITE3_TEXT)\n\t\t\t\tappendStringInfo(buf, \"sqlite_fdw_macaddr_str(\");\n\t\t\telse if (preferred_affinity == SQLITE_BLOB)\n\t\t\t\tappendStringInfo(buf, \"sqlite_fdw_macaddr_blob(\");\n\t\t\tspecial_affinity = true;\n\t\t}\n\n\t\tsqlite_deparse_expr((Expr *) tle->expr, &context);\n\n\t\tif (preferred_affinity == SQLITE3_TEXT || preferred_affinity == SQLITE_BLOB)\n\t\t{\n\t\t\tif (pg_attyp == MACADDROID)\n\t\t\t\tappendStringInfo(buf, \", %d\", MACADDR_LEN);\n\t\t\telse if (pg_attyp == MACADDR8OID)\n\t\t\t\tappendStringInfo(buf, \", %d\", MACADDR8_LEN);\n\t\t}\n\n\t\tif (special_affinity)\n\t\t{\n\t\t\telog(DEBUG4, \"sqlite_fdw : aff %d\\n\", preferred_affinity);\n\t\t\tappendStringInfoString(buf, \")\");\n\t\t}\n\t}\n\n\tsqlite_reset_transmission_modes(nestlevel);\n\n\tif (IS_JOIN_REL(foreignrel))\n\t{\n\t\tList\t   *ignore_conds = NIL;\n\n\t\tappendStringInfo(buf, \" FROM \");\n\t\tsqlite_deparse_from_expr_for_rel(buf, root, foreignrel, true, rtindex,\n\t\t\t\t\t\t\t\t\t\t &ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t &additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t\t params_list);\n\t\tremote_conds = list_concat(remote_conds, ignore_conds);\n\t}\n#if PG_VERSION_NUM >= 170000\n\n\tsqlite_append_where_clause(remote_conds, additional_conds, &context);\n\n\tif (additional_conds != NIL)\n\t\tlist_free_deep(additional_conds);\n#else\n\tif (remote_conds)\n\t{\n\t\tappendStringInfoString(buf, \" WHERE \");\n\t\tsqlite_append_conditions(remote_conds, &context);\n\t}\n#endif\n}\n\n/*\n * deparse remote DELETE statement\n *\n * The statement text is appended to buf, and we also create an integer List\n * of the columns being retrieved by RETURNING (if any), which is returned\n * to *retrieved_attrs.\n */\nvoid\nsqlite_deparse_delete(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t  Index rtindex, Relation rel,\n\t\t\t\t\t  List *attname)\n{\n\tint\t\t\ti = 0;\n\tListCell   *lc;\n\n\tappendStringInfoString(buf, \"DELETE FROM \");\n\tsqlite_deparse_relation(buf, rel);\n\tforeach(lc, attname)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc);\n\n\t\tappendStringInfo(buf, i == 0 ? \" WHERE \" : \" AND \");\n\t\tsqlite_deparse_column_ref(buf, rtindex, attnum, root, false, true);\n\t\tappendStringInfo(buf, \"=?\");\n\t\ti++;\n\t}\n}\n\n/*\n * deparse remote DELETE statement\n *\n * 'buf' is the output buffer to append the statement to 'rtindex' is the RT\n * index of the associated target relation 'rel' is the relation descriptor\n * for the target relation 'foreignrel' is the RelOptInfo for the target\n * relation or the join relation containing all base relations in the query\n * 'remote_conds' is the qual clauses that must be evaluated remotely\n * '*params_list' is an output list of exprs that will become remote Params\n * '*retrieved_attrs' is an output list of integers of columns being\n * retrieved by RETURNING (if any)\n */\nvoid\nsqlite_deparse_direct_delete_sql(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t\t\t\t Index rtindex, Relation rel,\n\t\t\t\t\t\t\t\t RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t List *remote_conds,\n\t\t\t\t\t\t\t\t List **params_list,\n\t\t\t\t\t\t\t\t List **retrieved_attrs)\n{\n\tdeparse_expr_cxt context;\n#if PG_VERSION_NUM >= 170000\n\tList\t   *additional_conds = NIL;\n#endif\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* Set up context struct for recursion */\n\tcontext.root = root;\n\tcontext.foreignrel = foreignrel;\n\tcontext.scanrel = foreignrel;\n\tcontext.buf = buf;\n\tcontext.params_list = params_list;\n\n\tappendStringInfoString(buf, \"DELETE FROM \");\n\tsqlite_deparse_relation(buf, rel);\n\tif (IS_JOIN_REL(foreignrel))\n\t\tappendStringInfo(buf, \" %s%d\", REL_ALIAS_PREFIX, rtindex);\n\n\tif (IS_JOIN_REL(foreignrel))\n\t{\n\t\tList\t   *ignore_conds = NIL;\n\n\t\tappendStringInfo(buf, \" USING \");\n\t\tsqlite_deparse_from_expr_for_rel(buf, root, foreignrel, true, rtindex,\n\t\t\t\t\t\t\t\t\t\t &ignore_conds,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t &additional_conds,\n#endif\n\t\t\t\t\t\t\t\t\t\t params_list);\n\t\tremote_conds = list_concat(remote_conds, ignore_conds);\n\t}\n#if PG_VERSION_NUM >= 170000\n\tsqlite_append_where_clause(remote_conds, additional_conds, &context);\n\n\tif (additional_conds != NIL)\n\t\tlist_free_deep(additional_conds);\n#else\n\tif (remote_conds)\n\t{\n\t\tappendStringInfoString(buf, \" WHERE \");\n\t\tsqlite_append_conditions(remote_conds, &context);\n\t}\n#endif\n}\n\n/*\n * Deparse given Var node into context->buf.\n *\n * If the Var belongs to the foreign relation, just print its remote name.\n * Otherwise, it's effectively a Param (and will in fact be a Param at\n * run time).  Handle it the same way we handle plain Params --- see\n * deparseParam for comments.\n */\nstatic void\nsqlite_deparse_var(Var *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tRelids\t\trelids = context->scanrel->relids;\n\tint\t\t\trelno;\n\tint\t\t\tcolno;\n\n\t/* Qualify columns when multiple relations are involved. */\n\tbool\t\tqualify_col = (bms_membership(relids) == BMS_MULTIPLE);\n\n\t/*\n\t * If the Var belongs to the foreign relation that is deparsed as a\n\t * subquery, use the relation and column alias to the Var provided by the\n\t * subquery, instead of the remote name.\n\t */\n\tif (sqlite_is_subquery_var(node, context->scanrel, &relno, &colno))\n\t{\n\t\tappendStringInfo(context->buf, \"%s%d.%s%d\",\n\t\t\t\t\t\t SUBQUERY_REL_ALIAS_PREFIX, relno,\n\t\t\t\t\t\t SUBQUERY_COL_ALIAS_PREFIX, colno);\n\t\treturn;\n\t}\n\n\tif (bms_is_member(node->varno, relids) && node->varlevelsup == 0)\n\t{\n\t\t/* Var belongs to foreign table */\n\t\tsqlite_deparse_column_ref(buf, node->varno, node->varattno, context->root, qualify_col, false);\n\t}\n\telse\n\t{\n\t\t/* Treat like a Param */\n\t\tif (context->params_list)\n\t\t{\n\t\t\tint\t\t\tpindex = 0;\n\t\t\tListCell   *lc;\n\n\t\t\t/* find its index in params_list */\n\t\t\tforeach(lc, *context->params_list)\n\t\t\t{\n\t\t\t\tpindex++;\n\t\t\t\tif (equal(node, (Node *) lfirst(lc)))\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (lc == NULL)\n\t\t\t{\n\t\t\t\t/* not in list, so add it */\n\t\t\t\tpindex++;\n\t\t\t\t*context->params_list = lappend(*context->params_list, node);\n\t\t\t}\n\t\t\tsqlite_print_remote_param(pindex, node->vartype, node->vartypmod, context);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsqlite_print_remote_placeholder(node->vartype, node->vartypmod, context);\n\t\t}\n\t}\n}\n\n/*\n * With this function, we try to obtain complementary node for operation to be able\n * to obtain column name and column type to whom const value its compared to.\n * If we obtain type, we know if we need to use datetime convert expressions\n * or not depending if sqlite column is TEXT or INT */\nstatic Var *\nget_complementary_var_node(Expr *node)\n{\n\tif (node == NULL)\n\t\treturn NULL;\n\n\tswitch (nodeTag(node))\n\t{\n\t\t\t/* Only supported case by now is T_Var complementary node */\n\t\tcase T_Var:\n\t\t\treturn (Var *) node;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn NULL;\n\t}\n}\n\n/*\n * Deparse given constant value into context->buf.\n *\n * This function has to be kept in sync with ruleutils.c's get_const_expr.\n * As for that function, showtype can be -1 to never show \"::typename\" decoration,\n * or +1 to always show it, or 0 to show it only if the constant wouldn't be assumed\n * to be the right type by default.\n */\nstatic void\nsqlite_deparse_const(Const *node, deparse_expr_cxt *context, int showtype)\n{\n\tStringInfo\tbuf = context->buf;\n\tOid\t\t\ttypoutput;\n\tbool\t\ttypIsVarlena;\n\tchar\t   *extval;\n\tchar\t   *sqlitecolumntype;\n\tbool\t\tconvert_timestamp_tounixepoch;\n\tVar\t\t   *varnode;\n\n\tif (node->constisnull)\n\t{\n\t\tappendStringInfoString(buf, \"NULL\");\n\t\treturn;\n\t}\n\n\tgetTypeOutputInfo(node->consttype,\n\t\t\t\t\t  &typoutput, &typIsVarlena);\n\n\tswitch (node->consttype)\n\t{\n\t\t/* popular first */\n\t\tcase VARCHAROID:\n\t\tcase CHAROID:\n\t\tcase TEXTOID:\n\t\tcase DATEOID:\n\t\tcase TIMEOID:\n\t\tcase NAMEOID:\n\t\tcase BPCHAROID:\n\t\t\t{\n\t\t\t\t/* common branch of constants, deparsable as a text data */\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tsqlite_deparse_string_literal(buf, extval);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT2OID:\n\t\tcase INT4OID:\n\t\tcase INT8OID:\n\t\tcase OIDOID:\n\t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tif (strspn(extval, \"0123456789+-eE.\") == strlen(extval))\n\t\t\t\t{\n\t\t\t\t\tif (extval[0] == '+' || extval[0] == '-')\n\t\t\t\t\t\tappendStringInfo(buf, \"(%s)\", extval);\n\t\t\t\t\telse\n\t\t\t\t\t\tappendStringInfoString(buf, extval);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"Invalid input syntax. Invalid characters in number\"),\n\t\t\t\t\t\t\terrhint(\"Value: %s\", extval)));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase FLOAT4OID:\n\t\tcase FLOAT8OID:\n\t\tcase NUMERICOID:\n\t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\t/*\n\t\t\t\t * No need to quote unless it's a special value such as 'NaN' or 'Infinity'.\n\t\t\t\t * See comments in get_const_expr().\n\t\t\t\t */\n\t\t\t\tif (strspn(extval, \"0123456789+-eE.\") == strlen(extval))\n\t\t\t\t{\n\t\t\t\t\tif (extval[0] == '+' || extval[0] == '-')\n\t\t\t\t\t\tappendStringInfo(buf, \"(%s)\", extval);\n\t\t\t\t\telse\n\t\t\t\t\t\tappendStringInfoString(buf, extval);\n\t\t\t\t}\n\t\t\t\telse if (strcasecmp(extval, infs) == 0 ||\n\t\t\t\t\t\t strcasecmp(extval, infl) == 0 ||\n\t\t\t\t\t\t strcasecmp(extval + 1, infs) == 0 ||\n\t\t\t\t\t\t strcasecmp(extval + 1, infl) == 0)\n\t\t\t\t{\n\t\t\t\t\tbool is_negative_or_positive = false;\n\t\t\t\t\tif (extval[0] == '-' || extval[0] == '+')\n\t\t\t\t\t\tis_negative_or_positive = true;\n\n\t\t\t\t\tif (is_negative_or_positive)\n\t\t\t\t\t\tappendStringInfo(buf, \"(%c\", extval[0]);\n\n\t\t\t\t\tappendStringInfo(buf, \"9e999\");\n\n\t\t\t\t\tif (is_negative_or_positive)\n\t\t\t\t\t\tappendStringInfo(buf, \")\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* NaN and other */\n\t\t\t\t\tappendStringInfo(buf, \"\\'%s\\'\", extval);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase BITOID:\n\t\tcase VARBITOID:\n\t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tif (strlen(extval) > SQLITE_FDW_BIT_DATATYPE_BUF_SIZE - 1 )\n\t\t\t\t{\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"SQLite FDW doesn't support very long bit/varbit data\"),\n\t\t\t\t\t\t\terrhint(\"bit length %ld, maximum %ld\", strlen(extval), SQLITE_FDW_BIT_DATATYPE_BUF_SIZE - 1)));\n\t\t\t\t}\n\t\t\t\tappendStringInfo(buf, \"%lld\", binstr2int64(extval));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase BOOLOID:\n\t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tif (strcmp(extval, \"t\") == 0)\n\t\t\t\t\tappendStringInfoString(buf, \"1\");\n\t\t\t\telse\n\t\t\t\t\tappendStringInfoString(buf, \"0\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase BYTEAOID:\n\t\t\t/*\n\t\t\t * the string for BYTEA always seems to be in the format \"\\\\x##\"\n\t\t\t * where # is a hex digit, Even if the value passed in is\n\t\t\t * 'hi'::bytea we will receive \"\\x6869\". Making this assumption\n\t\t\t * allows us to quickly convert Postgres escaped strings to SQLite\n\t\t\t * ones for comparison\n\t\t\t */\n\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\tappendStringInfo(buf, \"X\\'%s\\'\", extval + 2);\n\t\t\tbreak;\n\t\tcase TIMESTAMPOID:\n\t\t\t{\n\t\t\t\tconvert_timestamp_tounixepoch = false;\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\n\t\t\t\tif (context->complementarynode != NULL)\n\t\t\t\t{\n\t\t\t\t\tvarnode = get_complementary_var_node(context->complementarynode);\n\t\t\t\t\tif (varnode != NULL)\n\t\t\t\t\t{\n\t\t\t\t\t\tsqlitecolumntype = sqlite_deparse_column_option(varnode->varno, varnode->varattno, context->root, \"column_type\");\n\n\t\t\t\t\t\tif (sqlitecolumntype != NULL && strcasecmp(sqlitecolumntype, \"INT\") == 0)\n\t\t\t\t\t\t\tconvert_timestamp_tounixepoch = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (convert_timestamp_tounixepoch)\n\t\t\t\t\tappendStringInfo(buf, \"strftime('%%s', '%s')\", extval);\n\t\t\t\telse\n\t\t\t\t\tsqlite_deparse_string_literal(buf, extval);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase UUIDOID:\n\t\t\t/*\n\t\t\t * always deparse to BLOB, in case of UPDATE with text affinity\n\t\t\t * transformation function will be added\n\t\t\t */\n \t\t\t{\n\t\t\t\tint i = 0;\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tappendStringInfo(buf, \"X\\'\");\n\t\t\t\tfor (i = 0; i < strlen(extval); i++)\n\t\t\t\t{\n\t\t\t\t\tchar c = extval[i];\n\t\t\t\t\tif ( c != '-')\n\t\t\t\t\t\tappendStringInfoChar(buf, c);\n\t\t\t\t}\n\t  \t\t\tappendStringInfo(buf, \"\\'\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MACADDROID:\n\t\tcase MACADDR8OID:\n \t\t\t{\n\t\t\t\tint i = 0;\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tappendStringInfo(buf, \"0x\");\n\t\t\t\tfor (i = 0; i < strlen(extval); i++)\n\t\t\t\t{\n\t\t\t\t\tchar c = extval[i];\n\t\t\t\t\tif ( c != '-' && c != '.' && c != ':')\n\t\t\t\t\t\tappendStringInfoChar(buf, c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase JSONBOID:\n \t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tappendStringInfo(buf, \"jsonb(\");\n\t\t\t\tsqlite_deparse_string_literal(buf, extval);\n\t\t\t\tappendStringInfo(buf, \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase JSONOID:\n \t\t\t{\n\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\tappendStringInfo(buf, \"json(\");\n\t\t\t\tsqlite_deparse_string_literal(buf, extval);\n\t\t\t\tappendStringInfo(buf, \")\");\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t{\n\t\t\t\tif (listed_datatype_oid(node->consttype, -1, postGisSQLiteCompatibleTypes))\n\t\t\t\t{\n\t\t\t\t\t/* common branch of PostGIS constants, deparsable as a text data */\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : %s deparse PostGIS constant\", __func__);\n\t\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n#ifdef SQLITE_FDW_GIS_ENABLE\n\t\t\t\t\tsqlite_deparse_PostGIS_value(buf, extval);\n#else\n\t\t\t\t\tsqlite_deparse_string_literal(buf, extval);\n#endif\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tconst char *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(node->consttype, -1));\n\n\t\t\t\t\textval = OidOutputFunctionCall(typoutput, node->constvalue);\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\terrmsg(\"Unknown data type of a constant\"),\n\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\" \", pg_dataTypeName),\n\t\t\t\t\t\t\t\t\terrcontext(\"Value: %s\", extval)));\n\t\t\t\t}\n\t\t\t}\n\t}\n}\n\n/*\n * Deparse given Param node.\n *\n * If we're generating the query \"for real\", add the Param to\n * context->params_list if it's not already present, and then use its index\n * in that list as the remote parameter number.  During EXPLAIN, there's\n * no need to identify a parameter number.\n */\nstatic void\nsqlite_deparse_param(Param *node, deparse_expr_cxt *context)\n{\n\tif (context->params_list)\n\t{\n\t\tint\t\t\tpindex = 0;\n\t\tListCell   *lc;\n\n\t\t/* find its index in params_list */\n\t\tforeach(lc, *context->params_list)\n\t\t{\n\t\t\tpindex++;\n\t\t\tif (equal(node, (Node *) lfirst(lc)))\n\t\t\t\tbreak;\n\t\t}\n\t\tif (lc == NULL)\n\t\t{\n\t\t\t/* not in list, so add it */\n\t\t\tpindex++;\n\t\t\t*context->params_list = lappend(*context->params_list, node);\n\t\t}\n\n\t\tsqlite_print_remote_param(pindex, node->paramtype, node->paramtypmod, context);\n\t}\n\telse\n\t{\n\t\tsqlite_print_remote_placeholder(node->paramtype, node->paramtypmod, context);\n\t}\n}\n\n/*\n * This possible that name of function in PostgreSQL and\n * sqlite differ, so return the sqlite equelent function name\n */\nstatic char *\nsqlite_replace_function(char *in)\n{\n\tif (strcmp(in, \"btrim\") == 0)\n\t{\n\t\treturn \"trim\";\n\t}\n\treturn in;\n}\n\n/*\n * Deparse a function call.\n */\nstatic void\nsqlite_deparse_func_expr(FuncExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tHeapTuple\tproctup;\n\tForm_pg_proc procform;\n\tconst char *proname;\n\tbool\t\tfirst;\n\tListCell   *arg;\n\n\t/*\n\t * If the function call came from an implicit coercion, then just show the\n\t * first argument.\n\t */\n\tif (node->funcformat == COERCE_IMPLICIT_CAST)\n\t{\n\t\tsqlite_deparse_expr((Expr *) linitial(node->args), context);\n\t\treturn;\n\t}\n\n\t/*\n\t * Normal function: display as proname(args).\n\t */\n\tproctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(node->funcid));\n\tif (!HeapTupleIsValid(proctup))\n\t\telog(ERROR, \"cache lookup failed for function %u\", node->funcid);\n\tprocform = (Form_pg_proc) GETSTRUCT(proctup);\n\n\t/* Translate PostgreSQL function into sqlite function */\n\tproname = sqlite_replace_function(NameStr(procform->proname));\n\n\t/* Deparse the function name ... */\n\tappendStringInfo(buf, \"%s(\", proname);\n\n\t/* ... and all the arguments */\n\tfirst = true;\n\tforeach(arg, node->args)\n\t{\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tsqlite_deparse_expr((Expr *) lfirst(arg), context);\n\t\tfirst = false;\n\t}\n\tappendStringInfoChar(buf, ')');\n\tReleaseSysCache(proctup);\n}\n\n/*\n * Deparse given operator expression. To avoid problems around\n * priority of operations, we always parenthesize the arguments.\n */\nstatic void\nsqlite_deparse_op_expr(OpExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tHeapTuple\ttuple;\n\tForm_pg_operator form;\n\tchar\t\toprkind;\n\n\t/* Retrieve information about the operator from system catalog. */\n\ttuple = SearchSysCache1(OPEROID, ObjectIdGetDatum(node->opno));\n\tif (!HeapTupleIsValid(tuple))\n\t\telog(ERROR, \"cache lookup failed for operator %u\", node->opno);\n\tform = (Form_pg_operator) GETSTRUCT(tuple);\n\toprkind = form->oprkind;\n\n\t/* Sanity check. */\n\tAssert((oprkind == 'l' && list_length(node->args) == 1) ||\n\t\t   (oprkind == 'b' && list_length(node->args) == 2));\n\n\t/* Always parenthesize the expression. */\n\tappendStringInfoChar(buf, '(');\n\n\t/* Deparse left operand. */\n\tif (oprkind == 'b')\n\t{\n\t\tcontext->complementarynode = llast(node->args);\n\n\t\tsqlite_deparse_expr(linitial(node->args), context);\n\t\tappendStringInfoChar(buf, ' ');\n\t}\n\n\t/* Deparse operator name. */\n\tsqlite_deparse_operator_name(buf, form);\n\n\t/* Deparse right operand. */\n\tappendStringInfoChar(buf, ' ');\n\tif (oprkind == 'b')\n\t\tcontext->complementarynode = linitial(node->args);\n\n\tsqlite_deparse_expr(llast(node->args), context);\n\n\tappendStringInfoChar(buf, ')');\n\n\tReleaseSysCache(tuple);\n}\n\n/*\n * Gets SQLite SQL operand or other value for an operator.\n */\nstatic void\nsqlite_deparse_operator_name(StringInfo buf, Form_pg_operator opform)\n{\n\tchar\t   *cur_opname = NULL;\n\n\t/* opname is not a SQL identifier, so we should not quote it. */\n\tcur_opname = NameStr(opform->oprname);\n\n\t/*\n\t * Non built-in operators, for example PostGIS\n\t * This operators doesn't belong to pg_catalog\n\t */\n\tif (opform->oprnamespace != PG_CATALOG_NAMESPACE)\n\t{\n\t\t/* Don't use fully qualified operator name for SQLite, only name. */\n\t\tappendStringInfoString(buf, cur_opname);\n\n\t}\n\telse\n\t{\n\t\tif (strcmp(cur_opname, \"~~\") == 0)\n\t\t{\n\t\t\tappendStringInfoString(buf, \"LIKE\");\n\t\t}\n\t\telse if (strcmp(cur_opname, \"!~~\") == 0)\n\t\t{\n\t\t\tappendStringInfoString(buf, \"NOT LIKE\");\n\t\t}\n\t\telse if (strcmp(cur_opname, \"~~*\") == 0 ||\n\t\t\t\t strcmp(cur_opname, \"!~~*\") == 0 ||\n\t\t\t\t /* ~ operator is both one of text RegEx operators and bit string NOT */\n\t\t\t\t (strcmp(cur_opname, \"~\") == 0 && opform->oprresult != VARBITOID && opform->oprresult != BITOID) ||\n\t\t\t\t strcmp(cur_opname, \"!~\") == 0 ||\n\t\t\t\t strcmp(cur_opname, \"~*\") == 0 ||\n\t\t\t\t strcmp(cur_opname, \"!~*\") == 0)\n\t\t{\n\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_ERROR),\n\t\t\t\t\t\t\terrmsg(\"SQL operator is not supported\"),\n\t\t\t\t\t\t\terrhint(\"operator name: %s\", cur_opname)));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tappendStringInfoString(buf, cur_opname);\n\t\t}\n\t}\n}\n\n/*\n * Deparse given ScalarArrayOpExpr expression.  To avoid problems\n * around priority of operations, we always parenthesize the arguments.\n */\nstatic void\nsqlite_deparse_scalar_array_op_expr(ScalarArrayOpExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tHeapTuple\ttuple;\n\tExpr\t   *arg1;\n\tExpr\t   *arg2;\n\tForm_pg_operator form;\n\tchar\t   *opname = NULL;\n\tOid\t\t\ttypoutput;\n\tbool\t\ttypIsVarlena;\n\tchar\t   *extval;\n\tbool\t\tuseIn = false;\n\n\t/* Retrieve information about the operator from system catalog. */\n\ttuple = SearchSysCache1(OPEROID, ObjectIdGetDatum(node->opno));\n\tif (!HeapTupleIsValid(tuple))\n\t\telog(ERROR, \"cache lookup failed for operator %u\", node->opno);\n\tform = (Form_pg_operator) GETSTRUCT(tuple);\n\n\t/* Sanity check. */\n\tAssert(list_length(node->args) == 2);\n\n\topname = pstrdup(NameStr(form->oprname));\n\tReleaseSysCache(tuple);\n\n\t/* Using IN clause for '= ANY' and NOT IN clause for '<> ALL' */\n\tif ((strcmp(opname, \"=\") == 0 && node->useOr == true) ||\n\t\t(strcmp(opname, \"<>\") == 0 && node->useOr == false))\n\t\tuseIn = true;\n\n\t/* Get left and right argument for deparsing */\n\targ1 = linitial(node->args);\n\targ2 = lsecond(node->args);\n\n\tif (useIn)\n\t{\n\t\t/* Deparse left operand. */\n\t\tsqlite_deparse_expr(arg1, context);\n\t\tappendStringInfoChar(buf, ' ');\n\n\t\t/* Add IN clause */\n\t\tif (strcmp(opname, \"<>\") == 0)\n\t\t{\n\t\t\tappendStringInfoString(buf, \"NOT IN (\");\n\t\t}\n\t\telse if (strcmp(opname, \"=\") == 0)\n\t\t{\n\t\t\tappendStringInfoString(buf, \"IN (\");\n\t\t}\n\t}\n\n\tswitch (nodeTag((Node *) arg2))\n\t{\n\t\tcase T_Const:\n\t\t\t{\n\t\t\t\tConst\t   *c = (Const *) arg2;\n\t\t\t\tbool\t\tisstr = false;\n\t\t\t\tconst char *valptr;\n\t\t\t\tint\t\t\ti = -1;\n\t\t\t\tbool\t\tdeparseLeft = true;\n\n\t\t\t\tif (!c->constisnull)\n\t\t\t\t{\n\t\t\t\t\tgetTypeOutputInfo(c->consttype,\n\t\t\t\t\t\t\t\t\t  &typoutput, &typIsVarlena);\n\t\t\t\t\textval = OidOutputFunctionCall(typoutput, c->constvalue);\n\n\t\t\t\t\t/* Determine array type */\n\t\t\t\t\tswitch (c->consttype)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase INT4ARRAYOID:\n\t\t\t\t\t\tcase INT8ARRAYOID:\n\t\t\t\t\t\tcase INT2ARRAYOID:\n\t\t\t\t\t\tcase BOOLARRAYOID:\n\t\t\t\t\t\tcase OIDARRAYOID:\n\t\t\t\t\t\tcase NUMERICARRAYOID:\n\t\t\t\t\t\tcase FLOAT4ARRAYOID:\n\t\t\t\t\t\tcase FLOAT8ARRAYOID:\n\t\t\t\t\t\t\tisstr = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tisstr = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (valptr = extval; *valptr; valptr++)\n\t\t\t\t\t{\n\t\t\t\t\t\tchar\t\tch = *valptr;\n\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t\tif (useIn)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (i == 0 && isstr)\n\t\t\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (deparseLeft)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t/* Deparse left operand. */\n\t\t\t\t\t\t\tsqlite_deparse_expr(arg1, context);\n\t\t\t\t\t\t\t/* Append operator */\n\t\t\t\t\t\t\tappendStringInfo(buf, \" %s \", opname);\n\t\t\t\t\t\t\tif (isstr)\n\t\t\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t\t\t\tdeparseLeft = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Remove '{', '}' and \\\" character from the string.\n\t\t\t\t\t\t * Because this syntax is not recognize by the remote\n\t\t\t\t\t\t * Sqlite server.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif ((ch == '{' && i == 0) || (ch == '}' && (i == (strlen(extval) - 1))) || ch == '\\\"')\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tif (ch == ',')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (useIn)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (isstr)\n\t\t\t\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t\t\t\t\tappendStringInfoChar(buf, ch);\n\t\t\t\t\t\t\t\tappendStringInfoChar(buf, ' ');\n\t\t\t\t\t\t\t\tif (isstr)\n\t\t\t\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (isstr)\n\t\t\t\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t\t\t\t\tif (node->useOr)\n\t\t\t\t\t\t\t\t\tappendStringInfoString(buf, \" OR \");\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tappendStringInfoString(buf, \" AND \");\n\t\t\t\t\t\t\t\tdeparseLeft = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (SQL_STR_DOUBLE(ch, true))\n\t\t\t\t\t\t\tappendStringInfoChar(buf, ch);\n\t\t\t\t\t\tappendStringInfoChar(buf, ch);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isstr)\n\t\t\t\t\t\tappendStringInfoChar(buf, '\\'');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tappendStringInfoString(buf, \" NULL\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase T_ArrayExpr:\n\t\t\t{\n\t\t\t\tbool\t\tfirst = true;\n\t\t\t\tListCell   *lc;\n\n\t\t\t\tforeach(lc, ((ArrayExpr *) arg2)->elements)\n\t\t\t\t{\n\t\t\t\t\tif (!first)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (useIn)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (node->useOr)\n\t\t\t\t\t\t\t\tappendStringInfoString(buf, \" OR \");\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tappendStringInfoString(buf, \" AND \");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (useIn)\n\t\t\t\t\t{\n\t\t\t\t\t\tsqlite_deparse_expr(lfirst(lc), context);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Deparse left argument */\n\t\t\t\t\t\tappendStringInfoChar(buf, '(');\n\t\t\t\t\t\tsqlite_deparse_expr(arg1, context);\n\n\t\t\t\t\t\tappendStringInfo(buf, \" %s \", opname);\n\n\t\t\t\t\t\t/* Deparse each element in right argument */\n\t\t\t\t\t\tsqlite_deparse_expr(lfirst(lc), context);\n\t\t\t\t\t\tappendStringInfoChar(buf, ')');\n\t\t\t\t\t}\n\t\t\t\t\tfirst = false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\telog(ERROR, \"unsupported expression type for deparse: %d\", (int) nodeTag(node));\n\t\t\tbreak;\n\t}\n\n\t/* Close IN clause */\n\tif (useIn)\n\t\tappendStringInfoChar(buf, ')');\n}\n\n/*\n * Deparse a RelabelType (binary-compatible cast) node.\n */\nstatic void\nsqlite_deparse_relabel_type(RelabelType *node, deparse_expr_cxt *context)\n{\n\tsqlite_deparse_expr(node->arg, context);\n}\n\n/*\n * Deparse a BoolExpr node.\n *\n * Note: by the time we get here, AND and OR expressions have been flattened\n * into N-argument form, so we'd better be prepared to deal with that.\n */\nstatic void\nsqlite_deparse_bool_expr(BoolExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tconst char *op = NULL;\t\t/* keep compiler quiet */\n\tbool\t\tfirst;\n\tListCell   *lc;\n\n\tswitch (node->boolop)\n\t{\n\t\tcase AND_EXPR:\n\t\t\top = \"AND\";\n\t\t\tbreak;\n\t\tcase OR_EXPR:\n\t\t\top = \"OR\";\n\t\t\tbreak;\n\t\tcase NOT_EXPR:\n\t\t\tappendStringInfoString(buf, \"(NOT \");\n\t\t\tsqlite_deparse_expr(linitial(node->args), context);\n\t\t\tappendStringInfoChar(buf, ')');\n\t\t\treturn;\n\t}\n\n\tappendStringInfoChar(buf, '(');\n\tfirst = true;\n\tforeach(lc, node->args)\n\t{\n\t\tif (!first)\n\t\t\tappendStringInfo(buf, \" %s \", op);\n\t\tsqlite_deparse_expr((Expr *) lfirst(lc), context);\n\t\tfirst = false;\n\t}\n\tappendStringInfoChar(buf, ')');\n}\n\n/*\n * Deparse IS [NOT] NULL expression.\n */\nstatic void\nsqlite_deparse_null_test(NullTest *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\n\tappendStringInfoChar(buf, '(');\n\tsqlite_deparse_expr(node->arg, context);\n\tif (node->nulltesttype == IS_NULL)\n\t\tappendStringInfoString(buf, \" IS NULL)\");\n\telse\n\t\tappendStringInfoString(buf, \" IS NOT NULL)\");\n}\n\n/*\n * Deparse ARRAY[...] construct.\n */\nstatic void\nsqlite_deparse_array_expr(ArrayExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tbool\t\tfirst = true;\n\tListCell   *lc;\n\n\tappendStringInfoString(buf, \"ARRAY[\");\n\tforeach(lc, node->elements)\n\t{\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tsqlite_deparse_expr(lfirst(lc), context);\n\t\tfirst = false;\n\t}\n\tappendStringInfoChar(buf, ']');\n}\n\n/*\n * Deparse CASE expression\n */\nstatic void\nsqlite_deparse_case_expr(CaseExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tListCell   *lc = NULL;\n\n\tappendStringInfoString(buf, \"CASE \");\n\n\t/* If this is a CASE arg WHEN then emit the arg expression */\n\tif (node->arg != NULL)\n\t\tsqlite_deparse_expr(node->arg, context);\n\n\t/* Add each condition/result of the CASE clause */\n\tforeach(lc, node->args)\n\t{\n\t\tCaseWhen   *whenclause = (CaseWhen *) lfirst(lc);\n\n\t\t/* WHEN */\n\t\tappendStringInfoString(buf, \" WHEN \");\n\t\tif (node->arg == NULL)\t/* CASE WHEN */\n\t\t\tsqlite_deparse_expr(whenclause->expr, context);\n\t\telse\t\t\t\t\t/* CASE arg WHEN */\n\t\t{\n\t\t\t/* Ignore the CaseTestExpr and equality operator. */\n\t\t\tsqlite_deparse_expr(lsecond(castNode(OpExpr, whenclause->expr)->args),\n\t\t\t\t\t\t\t\tcontext);\n\t\t}\n\n\t\t/* THEN */\n\t\tappendStringInfoString(buf, \" THEN \");\n\t\tsqlite_deparse_expr(whenclause->result, context);\n\t}\n\n\t/* add ELSE if present */\n\tif (node->defresult != NULL)\n\t{\n\t\tappendStringInfoString(buf, \" ELSE \");\n\t\tsqlite_deparse_expr(node->defresult, context);\n\t}\n\n\t/* append END */\n\tappendStringInfoString(buf, \" END\");\n}\n\n/*\n * Deparse given NULLIF(val1, val2) expression.\n */\nstatic void\nsqlite_deparse_null_if_expr(NullIfExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\n\tappendStringInfoString(buf, \"NULLIF(\");\n\tsqlite_deparse_expr(lfirst(list_head(node->args)), context);\n\tappendStringInfoString(buf, \", \");\n\tsqlite_deparse_expr(lfirst(list_tail(node->args)), context);\n\tappendStringInfoChar(buf, ')');\n}\n\n/*\n * Deparse given COALESCE(...) expression.\n */\nstatic void\nsqlite_deparse_coalesce_expr(CoalesceExpr *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tListCell   *lc;\n\tbool\t\tfirst = true;\n\n\tappendStringInfoString(buf, \"COALESCE(\");\n\tforeach(lc, node->args)\n\t{\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tfirst = false;\n\n\t\tsqlite_deparse_expr(lfirst(lc), context);\n\t}\n\tappendStringInfoChar(buf, ')');\n}\n\n/*\n * Print the representation of a parameter to be sent to the remote side.\n *\n * Note: we always label the Param's type explicitly rather than relying on\n * transmitting a numeric type OID in PQsendQueryParams().  This allows us to\n * avoid assuming that types have the same OIDs on the remote side as they\n * do locally --- they need only have the same names.\n */\nstatic void\nsqlite_print_remote_param(int paramindex, Oid paramtype, int32 paramtypmod,\n\t\t\t\t\t\t  deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\n\tappendStringInfo(buf, \"?\");\n}\n\nstatic void\nsqlite_print_remote_placeholder(Oid paramtype, int32 paramtypmod,\n\t\t\t\t\t\t\t\tdeparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\n\tappendStringInfo(buf, \"(SELECT null)\");\n}\n\n/*\n * Return true if given object is one of PostgreSQL's built-in objects.\n *\n * We use FirstBootstrapObjectId as the cutoff, so that we only consider\n * objects with hand-assigned OIDs to be \"built in\", not for instance any\n * function or type defined in the information_schema.\n *\n * Our constraints for dealing with types are tighter than they are for\n * functions or operators: we want to accept only types that are in pg_catalog,\n * else format_type might incorrectly fail to schema-qualify their names.\n * (This could be fixed with some changes to format_type, but for now there's\n * no need.)  Thus we must exclude information_schema types.\n *\n * XXX there is a problem with this, which is that the set of built-in\n * objects expands over time.  Something that is built-in to us might not\n * be known to the remote server, if it's of an older version. But keeping\n * track of that would be a huge exercise.\n */\nbool\nsqlite_is_builtin(Oid oid)\n{\n#if PG_VERSION_NUM >= 120000\n\treturn (oid < FirstGenbkiObjectId);\n#else\n\treturn (oid < FirstBootstrapObjectId);\n#endif\n}\n\n/*\n * Deparse an Aggref node.\n */\nstatic void\nsqlite_deparse_aggref(Aggref *node, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tbool\t\tuse_variadic;\n\n\t/* Only basic, non-split aggregation accepted. */\n\tAssert(node->aggsplit == AGGSPLIT_SIMPLE);\n\n\t/* Check if need to print VARIADIC (cf. ruleutils.c) */\n\tuse_variadic = node->aggvariadic;\n\n\t/* Find aggregate name from aggfnoid which is a pg_proc entry */\n\tsqlite_append_function_name(node->aggfnoid, context);\n\tappendStringInfoChar(buf, '(');\n\n\t/* Add DISTINCT */\n\tappendStringInfo(buf, \"%s\", (node->aggdistinct != NIL) ? \"DISTINCT \" : \"\");\n\n\tif (AGGKIND_IS_ORDERED_SET(node->aggkind))\n\t{\n\t\t/* Add WITHIN GROUP (ORDER BY ..) */\n\t\tListCell   *arg;\n\t\tbool\t\tfirst = true;\n\n\t\tAssert(!node->aggvariadic);\n\t\tAssert(node->aggorder != NIL);\n\n\t\tforeach(arg, node->aggdirectargs)\n\t\t{\n\t\t\tif (!first)\n\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\tfirst = false;\n\n\t\t\tsqlite_deparse_expr((Expr *) lfirst(arg), context);\n\t\t}\n\n\t\tappendStringInfoString(buf, \") WITHIN GROUP (ORDER BY \");\n\t\tsqlite_append_agg_order_by(node->aggorder, node->args, context);\n\t}\n\telse\n\t{\n\t\t/* aggstar can be set only in zero-argument aggregates */\n\t\tif (node->aggstar)\n\t\t\tappendStringInfoChar(buf, '*');\n\t\telse\n\t\t{\n\t\t\tListCell   *arg;\n\t\t\tbool\t\tfirst = true;\n\n\t\t\t/* Add all the arguments */\n\t\t\tforeach(arg, node->args)\n\t\t\t{\n\t\t\t\tTargetEntry *tle = (TargetEntry *) lfirst(arg);\n\t\t\t\tNode\t   *n = (Node *) tle->expr;\n\n\t\t\t\tif (tle->resjunk)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (!first)\n\t\t\t\t\tappendStringInfoString(buf, \", \");\n\t\t\t\tfirst = false;\n\n\t\t\t\t/* Add VARIADIC */\n#if PG_VERSION_NUM < 130000\n\t\t\t\tif (use_variadic && lnext(arg) == NULL)\n#else\n\t\t\t\tif (use_variadic && lnext(node->args, arg) == NULL)\n#endif\n\t\t\t\t\tappendStringInfoString(buf, \"VARIADIC \");\n\n\t\t\t\tsqlite_deparse_expr((Expr *) n, context);\n\t\t\t}\n\t\t}\n\n\t\t/* Add ORDER BY */\n\t\tif (node->aggorder != NIL)\n\t\t{\n\t\t\tappendStringInfoString(buf, \" ORDER BY \");\n\t\t\tsqlite_append_agg_order_by(node->aggorder, node->args, context);\n\t\t}\n\t}\n\n\t/* Add FILTER (WHERE ..) */\n\tif (node->aggfilter != NULL)\n\t{\n\t\tappendStringInfoString(buf, \") FILTER (WHERE \");\n\t\tsqlite_deparse_expr((Expr *) node->aggfilter, context);\n\t}\n\n\tappendStringInfoChar(buf, ')');\n}\n\n/*\n * Deparse GROUP BY clause.\n */\nstatic void\nsqlite_append_group_by_clause(List *tlist, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tQuery\t   *query = context->root->parse;\n\tListCell   *lc;\n\tbool\t\tfirst = true;\n\n\t/* Nothing to be done, if there's no GROUP BY clause in the query. */\n\tif (!query->groupClause)\n\t\treturn;\n\n\tappendStringInfo(buf, \" GROUP BY \");\n\n\t/*\n\t * Queries with grouping sets are not pushed down, so we don't expect\n\t * grouping sets here.\n\t */\n\tAssert(!query->groupingSets);\n\n\t/*\n\t * We intentionally print query->groupClause not processed_groupClause,\n\t * leaving it to the remote planner to get rid of any redundant GROUP BY\n\t * items again.  This is necessary in case processed_groupClause reduced\n\t * to empty, and in any case the redundancy situation on the remote might\n\t * be different than what we think here.\n\t */\n\tforeach(lc, query->groupClause)\n\t{\n\t\tSortGroupClause *grp = (SortGroupClause *) lfirst(lc);\n\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tfirst = false;\n\n\t\tsqlite_deparse_sort_group_clause(grp->tleSortGroupRef, tlist, true, context);\n\t}\n}\n\n\n/*\n * Append ORDER BY within aggregate function.\n */\nstatic void\nsqlite_append_agg_order_by(List *orderList, List *targetList, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tListCell   *lc;\n\tbool\t\tfirst = true;\n\n\tforeach(lc, orderList)\n\t{\n\t\tSortGroupClause *srt = (SortGroupClause *) lfirst(lc);\n\t\tNode\t   *sortexpr;\n\n\t\tif (!first)\n\t\t\tappendStringInfoString(buf, \", \");\n\t\tfirst = false;\n\n\t\t/* Deparse the sort expression proper. */\n\t\tsortexpr = sqlite_deparse_sort_group_clause(srt->tleSortGroupRef, targetList, false,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontext);\n\t\t/* Add decoration as needed. */\n\t\tsqlite_append_order_by_suffix(srt->sortop, exprType(sortexpr), srt->nulls_first, context);\n\t}\n}\n\n/*\n * Deparse ORDER BY clause defined by the given pathkeys.\n *\n * The clause should use Vars from context->scanrel if !has_final_sort,\n * or from context->foreignrel's targetlist if has_final_sort.\n *\n * We find a suitable pathkey expression (some earlier step\n * should have verified that there is one) and deparse it.\n */\nstatic void\nsqlite_append_order_by_clause(List *pathkeys, bool has_final_sort, deparse_expr_cxt *context)\n{\n\tListCell   *lcell;\n\tint\t\t\tnestlevel;\n\tStringInfo\tbuf = context->buf;\n\tbool\t\tgotone = false;\n\n\t/* Make sure any constants in the exprs are printed portably */\n\tnestlevel = sqlite_set_transmission_modes();\n\n\tforeach(lcell, pathkeys)\n\t{\n\t\tPathKey\t*pathkey = lfirst(lcell);\n\t\tExpr\t   *em_expr;\n\t\tint\t\t\tsqliteVersion = sqlite3_libversion_number();\n\n\t\tEquivalenceMember *em;\n\t\tOid\t\t\toprid;\n\t\tif (has_final_sort)\n\t\t{\n\t\t\t/*\n\t\t\t * By construction, context->foreignrel is the input relation to\n\t\t\t * the final sort.\n\t\t\t */\n\t\t\tem = sqlite_find_em_for_rel_target(context->root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t   pathkey->pk_eclass,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t   context->foreignrel);\n\t\t}\n\t\telse\n\t\t\tem = sqlite_find_em_for_rel(context->root, pathkey->pk_eclass, context->scanrel);\n\t\t/*\n\t\t * We don't expect any error here; it would mean that shippability\n\t\t * wasn't verified earlier.  For the same reason, we don't recheck\n\t\t * shippability of the sort operator.\n\t\t */\n\t\tif (em == NULL)\n\t\t\telog(ERROR, \"could not find pathkey item to sort\");\n\n\t\tem_expr = em->em_expr;\n\n#if PG_VERSION_NUM >= 170000\n\t\t/*\n\t\t * If the member is a Const expression then we needn't add it to the\n\t\t * ORDER BY clause.  This can happen in UNION ALL queries where the\n\t\t * union child targetlist has a Const.  Adding these would be\n\t\t * wasteful, but also, for INT columns, an integer literal would be\n\t\t * seen as an ordinal column position rather than a value to sort by.\n\t\t * deparseConst() does have code to handle this, but it seems less\n\t\t * effort on all accounts just to skip these for ORDER BY clauses.\n\t\t */\n\t\tif (IsA(em_expr, Const))\n\t\t\tcontinue;\n#endif\n\n\t\tif (!gotone)\n\t\t{\n\t\t\tappendStringInfoString(buf, \" ORDER BY \");\n\t\t\tgotone = true;\n\t\t}\n\t\telse\n\t\t\tappendStringInfoString(buf, \", \");\n\n\t\t/*\n\t\t * Lookup the operator corresponding to the strategy in the opclass.\n\t\t * The datatype used by the opfamily is not necessarily the same as\n\t\t * the expression type (for array types for example).\n\t\t */\n\t\toprid = get_opfamily_member(pathkey->pk_opfamily,\n\t\t\t\t\t\t\t\t\tem->em_datatype,\n\t\t\t\t\t\t\t\t\tem->em_datatype,\n\t\t\t\t\t\t\t\t\tpathkey->pk_strategy);\n\t\tif (!OidIsValid(oprid))\n\t\t\telog(ERROR, \"missing operator %d(%u,%u) in opfamily %u\",\n\t\t\t\t pathkey->pk_strategy, em->em_datatype, em->em_datatype,\n\t\t\t\t pathkey->pk_opfamily);\n\n\t\tsqlite_deparse_expr(em_expr, context);\n\t\t/*\n\t\t * Here we need to use the expression's actual type to discover\n\t\t * whether the desired operator will be the default or not.\n\t\t */\n\t\tsqlite_append_order_by_suffix(oprid, exprType((Node *) em_expr),\n\t\t\t\t\t\t\tpathkey->pk_nulls_first, context);\n\n\t\t/*\n\t\t * In SQLITE3 Release v3.30.0 (2019-10-04) NULLS FIRST/LAST is\n\t\t * supported, but not in prior versions More info:\n\t\t * https://www.sqlite.org/changes.html\n\t\t * https://www.sqlite.org/lang_select.html#orderby\n\t\t */\n\t\tif (sqliteVersion < 3030000)\n\t\t{\n\t\t\t/*\n\t\t\t * If we need a different behaviour than SQLite default...we show\n\t\t\t * warning message because NULLS FIRST/LAST is not implemented in\n\t\t\t * this SQLite version.\n\t\t\t */\n\t\t\tif (!pathkey->pk_nulls_first && pathkey->pk_strategy == BTLessStrategyNumber)\n\t\t\t\telog(WARNING, \"Current Sqlite Version (%d) does not support NULLS LAST for ORDER BY ASC, degraded emitted query to ORDER BY ASC NULLS FIRST (default sqlite behaviour).\", sqliteVersion);\n\t\t\telse if (pathkey->pk_nulls_first && pathkey->pk_strategy != BTLessStrategyNumber)\n\t\t\t\telog(WARNING, \"Current Sqlite Version (%d) does not support NULLS FIRST for ORDER BY DESC, degraded emitted query to ORDER BY DESC NULLS LAST (default sqlite behaviour).\", sqliteVersion);\n\t\t}\n\t}\n\tsqlite_reset_transmission_modes(nestlevel);\n}\n\n/*\n * Append the ASC, DESC, USING <OPERATOR> and NULLS FIRST / NULLS LAST parts\n * of an ORDER BY clause.\n */\nstatic void sqlite_append_order_by_suffix(Oid sortop, Oid sortcoltype,\n\t\t\t\t\t\t\t\t\t\t  bool nulls_first,\n\t\t\t\t\t\t\t\t\t\t  deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tTypeCacheEntry *typentry;\n\n\t/* See whether operator is default < or > for sort expr's datatype. */\n\ttypentry = lookup_type_cache(sortcoltype,\n\t\t\t\t\t\t\t\t TYPECACHE_LT_OPR | TYPECACHE_GT_OPR);\n\n\t/* SQLite does not support USING */\n\tAssert (sortop == typentry->lt_opr || sortop == typentry->gt_opr);\n\n\tif (sortop == typentry->lt_opr)\n\t\tappendStringInfoString(buf, \" ASC\");\n\telse if (sortop == typentry->gt_opr)\n\t\tappendStringInfoString(buf, \" DESC\");\n\n\tif (nulls_first)\n\t\tappendStringInfoString(buf, \" NULLS FIRST\");\n\telse\n\t\tappendStringInfoString(buf, \" NULLS LAST\");\n}\n\n/*\n * Deparse LIMIT/OFFSET clause.\n */\nstatic void\nsqlite_append_limit_clause(deparse_expr_cxt *context)\n{\n\tPlannerInfo *root = context->root;\n\tStringInfo\tbuf = context->buf;\n\tint\t\t\tnestlevel;\n\n\t/* Make sure any constants in the exprs are printed portably */\n\tnestlevel = sqlite_set_transmission_modes();\n\n\tif (root->parse->limitCount)\n\t{\n\t\tappendStringInfoString(buf, \" LIMIT \");\n\t\tsqlite_deparse_expr((Expr *) root->parse->limitCount, context);\n\t}\n\telse\n\t{\n\t\t/*\n\t\t * We add this LIMIT -1 because OFFSET by itself its not\n\t\t * implemented/allowed in SQLite. You need to provide LIMIT *always*\n\t\t * when using OFFSET\n\t\t */\n\t\tappendStringInfoString(buf, \" LIMIT -1\");\n\t}\n\n\tif (root->parse->limitOffset)\n\t{\n\t\tappendStringInfoString(buf, \" OFFSET \");\n\t\tsqlite_deparse_expr((Expr *) root->parse->limitOffset, context);\n\t}\n\n\tsqlite_reset_transmission_modes(nestlevel);\n}\n\n/*\n * sqlite_append_function_name\n *\t\tDeparses function name from given function oid.\n */\nstatic void\nsqlite_append_function_name(Oid funcid, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tHeapTuple\tproctup;\n\tForm_pg_proc procform;\n\tconst char *proname;\n\n\tproctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcid));\n\tif (!HeapTupleIsValid(proctup))\n\t\telog(ERROR, \"cache lookup failed for function %u\", funcid);\n\tprocform = (Form_pg_proc) GETSTRUCT(proctup);\n\n\t/* Print schema name only if it's not pg_catalog */\n\tif (procform->pronamespace != PG_CATALOG_NAMESPACE)\n\t{\n\t\tconst char *schemaname;\n\n\t\tschemaname = get_namespace_name(procform->pronamespace);\n\t\tappendStringInfo(buf, \"%s.\", quote_identifier(schemaname));\n\t}\n\n\t/* Always print the function name */\n\tproname = NameStr(procform->proname);\n\tappendStringInfo(buf, \"%s\", quote_identifier(proname));\n\n\tReleaseSysCache(proctup);\n}\n\n/*\n * Appends a sort or group clause.\n *\n * Like get_rule_sortgroupclause(), returns the expression tree, so caller\n * need not find it again.\n */\nstatic Node *\nsqlite_deparse_sort_group_clause(Index ref, List *tlist, bool force_colno, deparse_expr_cxt *context)\n{\n\tStringInfo\tbuf = context->buf;\n\tTargetEntry *tle;\n\tExpr\t   *expr;\n\n\ttle = get_sortgroupref_tle(ref, tlist);\n\texpr = tle->expr;\n\n\tif (force_colno)\n\t{\n\t\t/* Use column-number form when requested by caller. */\n\t\tAssert(!tle->resjunk);\n\t\tappendStringInfo(buf, \"%d\", tle->resno);\n\t}\n\telse if (expr && IsA(expr, Const))\n\t{\n\t\t/*\n\t\t * Force a typecast here so that we don't emit something like \"GROUP\n\t\t * BY 2\", which will be misconstrued as a column position rather than\n\t\t * a constant.\n\t\t */\n\t\tsqlite_deparse_const((Const *) expr, context, 1);\n\t}\n\telse if (!expr || IsA(expr, Var))\n\t\tsqlite_deparse_expr(expr, context);\n\telse\n\t{\n\t\t/* Always parenthesize the expression. */\n\t\tappendStringInfoString(buf, \"(\");\n\t\tsqlite_deparse_expr(expr, context);\n\t\tappendStringInfoString(buf, \")\");\n\t}\n\n\treturn (Node *) expr;\n}\n\n/*\n * Returns true if given Var is deparsed as a subquery output column, in\n * which case, *relno and *colno are set to the IDs for the relation and\n * column alias to the Var provided by the subquery.\n */\nstatic bool\nsqlite_is_subquery_var(Var *node, RelOptInfo *foreignrel, int *relno, int *colno)\n{\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\tRelOptInfo *outerrel = fpinfo->outerrel;\n\tRelOptInfo *innerrel = fpinfo->innerrel;\n\n\t/* Should only be called in these cases. */\n\tAssert(IS_SIMPLE_REL(foreignrel) || IS_JOIN_REL(foreignrel));\n\n\t/*\n\t * If the given relation isn't a join relation, it doesn't have any lower\n\t * subqueries, so the Var isn't a subquery output column.\n\t */\n\tif (!IS_JOIN_REL(foreignrel))\n\t\treturn false;\n\n\t/*\n\t * If the Var doesn't belong to any lower subqueries, it isn't a subquery\n\t * output column.\n\t */\n\tif (!bms_is_member(node->varno, fpinfo->lower_subquery_rels))\n\t\treturn false;\n\n\tif (bms_is_member(node->varno, outerrel->relids))\n\t{\n\t\t/*\n\t\t * If outer relation is deparsed as a subquery, the Var is an output\n\t\t * column of the subquery; get the IDs for the relation/column alias.\n\t\t */\n\t\tif (fpinfo->make_outerrel_subquery)\n\t\t{\n\t\t\tsqlite_get_relation_column_alias_ids(node, outerrel, relno, colno);\n\t\t\treturn true;\n\t\t}\n\n\t\t/* Otherwise, recurse into the outer relation. */\n\t\treturn sqlite_is_subquery_var(node, outerrel, relno, colno);\n\t}\n\telse\n\t{\n\t\tAssert(bms_is_member(node->varno, innerrel->relids));\n\n\t\t/*\n\t\t * If inner relation is deparsed as a subquery, the Var is an output\n\t\t * column of the subquery; get the IDs for the relation/column alias.\n\t\t */\n\t\tif (fpinfo->make_innerrel_subquery)\n\t\t{\n\t\t\tsqlite_get_relation_column_alias_ids(node, innerrel, relno, colno);\n\t\t\treturn true;\n\t\t}\n\n\t\t/* Otherwise, recurse into the inner relation. */\n\t\treturn sqlite_is_subquery_var(node, innerrel, relno, colno);\n\t}\n}\n\n/*\n * Get the IDs for the relation and column alias to given Var belonging to\n * given relation, which are returned into *relno and *colno.\n */\nstatic void\nsqlite_get_relation_column_alias_ids(Var *node, RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t int *relno, int *colno)\n{\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\tint\t\t\ti;\n\tListCell   *lc;\n\n\t/* Get the relation alias ID */\n\t*relno = fpinfo->relation_index;\n\n\t/* Get the column alias ID */\n\ti = 1;\n\tforeach(lc, foreignrel->reltarget->exprs)\n\t{\n#if PG_VERSION_NUM >= 160000\n\t\tVar\t\t   *tlvar = (Var *) lfirst(lc);\n\n\t\t/*\n\t\t * Match reltarget entries only on varno/varattno.  Ideally there\n\t\t * would be some cross-check on varnullingrels, but it's unclear what\n\t\t * to do exactly; we don't have enough context to know what that value\n\t\t * should be.\n\t\t */\n\t\tif (IsA(tlvar, Var) &&\n\t\t\ttlvar->varno == node->varno &&\n\t\t\ttlvar->varattno == node->varattno)\n#else\n\t\tif (equal(lfirst(lc), (Node *) node))\n#endif\n\t\t{\n\t\t\t*colno = i;\n\t\t\treturn;\n\t\t}\n\t\ti++;\n\t}\n\n\t/* Shouldn't get here */\n\telog(ERROR, \"unexpected expression in subquery output\");\n}\n\n\n/*****************************************************************************\n *\t\tCheck clauses for immutable functions\n *****************************************************************************/\n\n/*\n * contain_immutable_functions\n *\t  Recursively search for immutable functions within a clause.\n *\n * Returns true if any immutable function (or operator implemented by a\n * immutable function) is found.\n *\n * We will recursively look into TargetEntry exprs.\n */\nstatic bool\nsqlite_contain_immutable_functions(Node *clause)\n{\n\treturn sqlite_contain_immutable_functions_walker(clause, NULL);\n}\n\nstatic bool\nsqlite_contain_immutable_functions_walker(Node *node, void *context)\n{\n\tif (node == NULL)\n\t\treturn false;\n\t/* Check for mutable functions in node itself */\n\tif (nodeTag(node) == T_FuncExpr)\n\t{\n\t\tFuncExpr   *expr = (FuncExpr *) node;\n\n\t\tif (func_volatile(expr->funcid) == PROVOLATILE_IMMUTABLE)\n\t\t\treturn true;\n\t}\n\n\t/*\n\t * It should be safe to treat MinMaxExpr as immutable, because it will\n\t * depend on a non-cross-type btree comparison function, and those should\n\t * always be immutable.  Treating XmlExpr as immutable is more dubious,\n\t * and treating CoerceToDomain as immutable is outright dangerous.  But we\n\t * have done so historically, and changing this would probably cause more\n\t * problems than it would fix.  In practice, if you have a non-immutable\n\t * domain constraint you are in for pain anyhow.\n\t */\n\n\t/* Recurse to check arguments */\n\tif (IsA(node, Query))\n\t{\n\t\t/* Recurse into subselects */\n\t\treturn query_tree_walker((Query *) node,\n\t\t\t\t\t\t\t\t sqlite_contain_immutable_functions_walker,\n\t\t\t\t\t\t\t\t context, 0);\n\t}\n\treturn expression_tree_walker(node, sqlite_contain_immutable_functions_walker,\n\t\t\t\t\t\t\t\t  context);\n}\n\n/*\n * Returns true if given tlist is safe to evaluate on the foreign server.\n */\nbool\nsqlite_is_foreign_function_tlist(PlannerInfo *root,\n\t\t\t\t\t\t\t\t RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t List *tlist)\n{\n\tforeign_glob_cxt glob_cxt;\n\tforeign_loc_cxt loc_cxt;\n\tListCell   *lc;\n\tbool\t\tis_contain_function;\n\n\tif (!IS_SIMPLE_REL(baserel) ||\n\t\tIS_OTHER_REL(baserel))\n\t\treturn false;\n\n\t/*\n\t * Check that the expression consists of any immutable function.\n\t */\n\tis_contain_function = false;\n\tforeach(lc, tlist)\n\t{\n\t\tTargetEntry *tle = lfirst_node(TargetEntry, lc);\n\n\t\tif (sqlite_contain_immutable_functions((Node *) tle->expr))\n\t\t{\n\t\t\tis_contain_function = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!is_contain_function)\n\t\treturn false;\n\n\t/*\n\t * Check that the expression consists of nodes that are safe to execute\n\t * remotely.\n\t */\n\tforeach(lc, tlist)\n\t{\n\t\tTargetEntry *tle = lfirst_node(TargetEntry, lc);\n\n\t\tglob_cxt.root = root;\n\t\tglob_cxt.foreignrel = baserel;\n\t\tglob_cxt.relids = baserel->relids;\n\t\tloc_cxt.collation = InvalidOid;\n\t\tloc_cxt.state = FDW_COLLATE_NONE;\n\n\t\tif (!sqlite_foreign_expr_walker((Node *) tle->expr, &glob_cxt, &loc_cxt, NULL))\n\t\t\treturn false;\n\n\t\t/*\n\t\t * If the expression has a valid collation that does not arise from a\n\t\t * foreign var, the expression can not be sent over.\n\t\t */\n\t\tif (loc_cxt.state == FDW_COLLATE_UNSAFE)\n\t\t\treturn false;\n\n\t\t/*\n\t\t * An expression which includes any mutable functions can't be sent\n\t\t * over because its result is not stable.  For example, sending now()\n\t\t * remote side could cause confusion from clock offsets.  Future\n\t\t * versions might be able to make this choice with more granularity.\n\t\t * (We check this last because it requires a lot of expensive catalog\n\t\t * lookups.)\n\t\t */\n\t\tif (contain_mutable_functions((Node *) tle->expr))\n\t\t\treturn false;\n\t}\n\n\t/* OK for the target list with functions to evaluate on the remote server */\n\treturn true;\n}\n\n/*\n * Examine each qual clause in input_conds, and classify them into two\n * groups, which are returned as two lists: - remote_conds contains\n * expressions that can be evaluated remotely - local_conds contains\n * expressions that can't be evaluated remotely\n */\nvoid\nsqlite_classify_conditions(PlannerInfo *root,\n\t\t\t\t\t\t   RelOptInfo *baserel,\n\t\t\t\t\t\t   List *input_conds,\n\t\t\t\t\t\t   List **remote_conds,\n\t\t\t\t\t\t   List **local_conds)\n{\n\tListCell   *lc;\n\n\t*remote_conds = NIL;\n\t*local_conds = NIL;\n\n\tforeach(lc, input_conds)\n\t{\n\t\tRestrictInfo *ri = lfirst_node(RestrictInfo, lc);\n\n\t\tif (sqlite_is_foreign_expr(root, baserel, ri->clause))\n\t\t\t*remote_conds = lappend(*remote_conds, ri);\n\t\telse\n\t\t\t*local_conds = lappend(*local_conds, ri);\n\t}\n}\n"
  },
  {
    "path": "option.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n *        option.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#include \"funcapi.h\"\n#include \"access/reloptions.h\"\n#include \"catalog/pg_foreign_server.h\"\n#include \"catalog/pg_foreign_table.h\"\n#include \"catalog/pg_type.h\"\n#include \"commands/defrem.h\"\n#include \"utils/guc.h\"\n#include \"utils/lsyscache.h\"\n#if PG_VERSION_NUM >= 160000\n\t#include \"utils/varlena.h\"\n#endif\n\n/*\n * Describes the valid options for objects that use this wrapper.\n */\nstruct SqliteFdwOption\n{\n\tconst char *optname;\n\tOid\t\t\toptcontext;\t\t/* Oid of catalog in which option may appear */\n};\n\n\n/*\n * Valid options for sqlite_fdw.\n *\n */\nstatic struct SqliteFdwOption valid_options[] =\n{\n\t{\"database\", ForeignServerRelationId},\n\t{\"keep_connections\", ForeignServerRelationId},\n\t{\"force_readonly\", ForeignServerRelationId},\n\t{\"table\", ForeignTableRelationId},\n\t{\"key\", AttributeRelationId},\n\t{\"column_name\", AttributeRelationId},\n\t{\"column_type\", AttributeRelationId},\n\t/* updatable is available on both server and table */\n\t{\"updatable\", ForeignServerRelationId},\n\t{\"updatable\", ForeignTableRelationId},\n\t/* truncatable is available on both server and table */\n\t{\"truncatable\", ForeignServerRelationId},\n\t{\"truncatable\", ForeignTableRelationId},\n\t/* batch_size is available on both server and table */\n\t{\"batch_size\", ForeignServerRelationId},\n\t{\"batch_size\", ForeignTableRelationId},\n\t/* Sentinel */\n\t{NULL, InvalidOid}\n};\n\nextern PGDLLEXPORT Datum sqlite_fdw_validator(PG_FUNCTION_ARGS);\n\nPG_FUNCTION_INFO_V1(sqlite_fdw_validator);\nbool\n\t\t\tsqlite_is_valid_option(const char *option, Oid context);\n\n/*\n * Validate the generic options given to a FOREIGN DATA WRAPPER, SERVER,\n * or FOREIGN TABLE that supported by sqlite_fdw.\n *\n * Raise an ERROR if the option or its value is considered invalid.\n */\nDatum\nsqlite_fdw_validator(PG_FUNCTION_ARGS)\n{\n\tList\t   *options_list = untransformRelOptions(PG_GETARG_DATUM(0));\n\tOid\t\t\tcatalog = PG_GETARG_OID(1);\n\tListCell   *cell;\n\n\t/*\n\t * Check that only options supported by sqlite_fdw, and allowed for the\n\t * current object type, are given.\n\t */\n\tforeach(cell, options_list)\n\t{\n\t\tDefElem    *def = (DefElem *) lfirst(cell);\n\n\t\tif (!sqlite_is_valid_option(def->defname, catalog))\n\t\t{\n\t\t\tstruct SqliteFdwOption *opt;\n\n#if (PG_VERSION_NUM >= 160000)\n\t\t\t/*\n\t\t\t * Unknown option specified, complain about it. Provide a hint\n\t\t\t * with a valid option that looks similar, if there is one.\n\t\t\t */\n\t\t\tconst char *closest_match;\n\t\t\tClosestMatchState match_state;\n\t\t\tbool\t\thas_valid_options = false;\n\t\t\tinitClosestMatch(&match_state, def->defname, 4);\n\n\t\t\tfor (opt = valid_options; opt->optname; opt++)\n\t\t\t{\n\t\t\t\tif (catalog == opt->optcontext)\n\t\t\t\t{\n\t\t\t\t\thas_valid_options = true;\n\t\t\t\t\tupdateClosestMatch(&match_state, opt->optname);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclosest_match = getClosestMatch(&match_state);\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_FDW_INVALID_OPTION_NAME),\n\t\t\t\t\t errmsg(\"sqlite_fdw: invalid option \\\"%s\\\"\", def->defname),\n\t\t\t\t\t has_valid_options ? closest_match ?\n\t\t\t\t\t errhint(\"Perhaps you meant the option \\\"%s\\\".\",\n\t\t\t\t\t\t\t closest_match) : 0 :\n\t\t\t\t\t errhint(\"There are no valid options in this context.\")));\n#else\n\t\t\t/*\n\t\t\t * Unknown option specified, complain about it. Provide a hint\n\t\t\t * with list of valid options for the object.\n\t\t\t */\n\t\t\tStringInfoData buf;\n\n\t\t\tinitStringInfo(&buf);\n\t\t\tfor (opt = valid_options; opt->optname; opt++)\n\t\t\t{\n\t\t\t\tif (catalog == opt->optcontext)\n\t\t\t\t\tappendStringInfo(&buf, \"%s%s\", (buf.len > 0) ? \", \" : \"\",\n\t\t\t\t\t\t\t\t\t opt->optname);\n\t\t\t}\n\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_FDW_INVALID_OPTION_NAME),\n\t\t\t\t\t errmsg(\"invalid option \\\"%s\\\"\", def->defname),\n\t\t\t\t\t buf.len > 0 ?\n\t\t\t\t\t errhint(\"Valid options in this context are: %s\", buf.data) :\n\t\t\t\t\t errhint(\"There are no valid options in this context.\")));\n#endif\n\t\t}\n\n\t\t/* Validate option value */\n\t\tif (strcmp(def->defname, \"truncatable\") == 0 ||\n\t\t\tstrcmp(def->defname, \"keep_connections\") == 0 ||\n\t\t\tstrcmp(def->defname, \"updatable\") == 0 ||\n\t\t\tstrcmp(def->defname, \"force_readonly\") == 0)\n\t\t{\n\t\t\tdefGetBoolean(def);\n\t\t}\n\t\telse if (strcmp(def->defname, \"batch_size\") == 0)\n\t\t{\n\t\t\tchar\t   *value;\n\t\t\tint\t\t\tint_val;\n\t\t\tbool\t\tis_parsed;\n\n\t\t\tvalue = defGetString(def);\n\t\t\tis_parsed = parse_int(value, &int_val, 0, NULL);\n\n\t\t\tif (!is_parsed)\n\t\t\t\tereport(ERROR,\n\t\t\t\t\t\t(errcode(ERRCODE_INVALID_PARAMETER_VALUE),\n\t\t\t\t\t\t errmsg(\"invalid value for integer option \\\"%s\\\": %s\",\n\t\t\t\t\t\t\t\tdef->defname, value)));\n\n\t\t\tif (int_val <= 0)\n\t\t\t\tereport(ERROR,\n\t\t\t\t\t\t(errcode(ERRCODE_INVALID_PARAMETER_VALUE),\n\t\t\t\t\t\t errmsg(\"\\\"%s\\\" must be an integer value greater than zero\",\n\t\t\t\t\t\t\t\tdef->defname)));\n\t\t}\n\t}\n\tPG_RETURN_VOID();\n}\n\n/*\n * Check if the provided option is one of the valid options.\n * context is the Oid of the catalog holding the object the option is for.\n */\nbool\nsqlite_is_valid_option(const char *option, Oid context)\n{\n\tstruct SqliteFdwOption *opt;\n\n\tfor (opt = valid_options; opt->optname; opt++)\n\t{\n\t\tif (context == opt->optcontext && strcmp(opt->optname, option) == 0)\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\n/*\n * Fetch the options for a sqlite_fdw foreign table.\n */\nsqlite_opt *\nsqlite_get_options(Oid foreignoid)\n{\n\tForeignTable *f_table = NULL;\n\tForeignServer *f_server = NULL;\n\tList\t   *options;\n\tListCell   *lc;\n\tsqlite_opt *opt;\n\n\topt = (sqlite_opt *) palloc(sizeof(sqlite_opt));\n\tmemset(opt, 0, sizeof(sqlite_opt));\n\n\t/*\n\t * Extract options from FDW objects.\n\t */\n\tPG_TRY();\n\t{\n\t\tf_table = GetForeignTable(foreignoid);\n\t\tf_server = GetForeignServer(f_table->serverid);\n\t}\n\tPG_CATCH();\n\t{\n\t\tf_table = NULL;\n\t\tf_server = GetForeignServer(foreignoid);\n\t}\n\tPG_END_TRY();\n\n\n\toptions = NIL;\n\tif (f_table)\n\t\toptions = list_concat(options, f_table->options);\n\toptions = list_concat(options, f_server->options);\n\n\t/* Loop through the options, and get the server/port */\n\tforeach(lc, options)\n\t{\n\t\tDefElem    *def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"database\") == 0)\n\t\t\topt->svr_database = defGetString(def);\n\t\tif (strcmp(def->defname, \"table\") == 0)\n\t\t\topt->svr_table = defGetString(def);\n\t}\n\n\tif (!opt->svr_table && f_table)\n\t\topt->svr_table = get_rel_name(foreignoid);\n\n\treturn opt;\n}\n"
  },
  {
    "path": "sql/13.15/aggregate.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 18:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n-- test for aggregate pushdown\n--Testcase 8:\nDROP SERVER IF EXISTS sqlite_svr CASCADE;\n--Testcase 9:\nDROP EXTENSION IF EXISTS sqlite_fdw CASCADE;\n\n--Testcase 10:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 11:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 12:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nexplain (costs off, verbose) select count(distinct a) from multiprimary;\n\n--Testcase 2:\nexplain (costs off, verbose) select sum(b),max(b), min(b), avg(b) from multiprimary;\n\n--Testcase 3:\nexplain (costs off, verbose) select sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n\n--Testcase 4:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having sum(a) > 0;\n\n--Testcase 5:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having avg(a^2) > 0 and sum(a) > 0;\n\n-- stddev and variance are not pushed down\n--Testcase 6:\nexplain (costs off, verbose) select stddev(a) from multiprimary;\n--Testcase 7:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having variance(a) > 0;\n\n--Testcase 13:\nDROP FOREIGN TABLE multiprimary;\n\n--Testcase 16:\nCREATE FOREIGN TABLE limittest(id serial OPTIONS (key 'true'), x int, y text) SERVER sqlite_svr;\n\n--Testcase 17:\nINSERT INTO limittest(x, y) VALUES (1, 'x'), (2, 'x'), (3, 'x'), (4, 'x');\n--Testcase 18:\nINSERT INTO limittest(x, y) VALUES (1, 'y'), (2, 'y'), (3, 'y'), (4, 'y');\n--Testcase 19:\nINSERT INTO limittest(x, y) VALUES (1, 'z'), (2, 'z'), (3, 'z'), (4, 'z');\n\n--Testcase 20:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 21:\nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 22:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 23:\nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 24:\nEXPLAIN VERBOSE \nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 25:\nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 26:\nEXPLAIN VERBOSE \nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n--Testcase 27:\nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n\n--Testcase 28:\nDROP FOREIGN TABLE limittest;\n\n--Testcase 14:\nDROP SERVER sqlite_svr;\n--Testcase 15:\nDROP EXTENSION sqlite_fdw CASCADE;\n\n"
  },
  {
    "path": "sql/13.15/extra/aggregates.sql",
    "content": "--\n-- AGGREGATES\n--\n--Testcase 266:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 267:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 268:\nCREATE FOREIGN TABLE onek(\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 269:\nCREATE FOREIGN TABLE aggtest (\n  a       int2,\n  b     float4\n) SERVER sqlite_svr;\n\n--Testcase 270:\nCREATE FOREIGN TABLE student (\n  name    text,\n  age     int4,\n  location  point,\n  gpa     float8\n) SERVER sqlite_svr;\n\n--Testcase 271:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 272:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 588:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 589:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 590:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 591:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 592:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 273:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 593:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 594:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 595:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 596:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 597:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 274:\nCREATE FOREIGN TABLE multi_arg_agg (a int OPTIONS (key 'true'), b int, c text) SERVER sqlite_svr;\n\n--Testcase 275:\nCREATE FOREIGN TABLE VARCHAR_TBL(f1 varchar(4) OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 276:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 598:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 599:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 600:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 601:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 602:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 588:\nSET extra_float_digits = 0;\n--Testcase 1:\nSELECT avg(four) AS avg_1 FROM onek;\n\n--Testcase 2:\nSELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;\n\n--Testcase 697:\nCREATE FOREIGN TABLE agg_tb(v int, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 698:\nINSERT INTO agg_tb(v) VALUES(1), (2), (3);\n--Testcase 699: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 700:\nDELETE FROM agg_tb;\n--Testcase 701:\nINSERT INTO agg_tb(v) VALUES (NULL);\n--Testcase 702: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 703:\nDELETE FROM agg_tb;\n--Testcase 704:\nINSERT INTO agg_tb(v) VALUES (NULL), (1), (2);\n--Testcase 705: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 706:\nCREATE FOREIGN TABLE agg_tb2(v text) SERVER sqlite_svr;\n--Testcase 707:\nINSERT INTO agg_tb2(v) VALUES (array['hello', 'world']);\n--Testcase 708: -- Pg 16+\nSELECT any_value(v) FROM agg_tb2;\n\n-- In 7.1, avg(float4) is computed using float8 arithmetic.\n--Testcase 3:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 603:\nSELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;\n\n--Testcase 4:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 604:\nSELECT avg(gpa)::numeric(10,3) AS avg_3_4 FROM ONLY student;\n\n\n--Testcase 5:\nSELECT sum(four) AS sum_1500 FROM onek;\n--Testcase 6:\nSELECT sum(a) AS sum_198 FROM aggtest;\n--Testcase 7:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 605:\nSELECT sum(b)::numeric(10,3) AS avg_431_773 FROM aggtest;\n--Testcase 8:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 606:\nSELECT sum(gpa)::numeric(10,3) AS avg_6_8 FROM ONLY student;\n\n--Testcase 9:\nSELECT max(four) AS max_3 FROM onek;\n--Testcase 10:\nSELECT max(a) AS max_100 FROM aggtest;\n--Testcase 11:\nSELECT max(aggtest.b) AS max_324_78 FROM aggtest;\n--Testcase 12:\nSELECT max(student.gpa) AS max_3_7 FROM student;\n\n--Testcase 13:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 607:\nSELECT stddev_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 14:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 608:\nSELECT stddev_samp(b)::numeric(20,10) FROM aggtest;\n--Testcase 15:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 609:\nSELECT var_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 16:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 610:\nSELECT var_samp(b)::numeric(20,10) FROM aggtest;\n\n--Testcase 17:\nSELECT stddev_pop(b::numeric) FROM aggtest;\n--Testcase 18:\nSELECT stddev_samp(b::numeric) FROM aggtest;\n--Testcase 19:\nSELECT var_pop(b::numeric) FROM aggtest;\n--Testcase 20:\nSELECT var_samp(b::numeric) FROM aggtest;\n\n-- population variance is defined for a single tuple, sample variance\n-- is not\n--Testcase 277:\nCREATE FOREIGN TABLE agg_t3(a float8, b float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 278:\nDELETE FROM agg_t3;\n--Testcase 279:\nINSERT INTO agg_t3 values (1.0::float8, 2.0::float8);\n--Testcase 280:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n\n--Testcase 281:\nDELETE FROM agg_t3;\n--Testcase 282:\nINSERT INTO agg_t3 values (3.0::float8, 4.0::float8);\n--Testcase 283:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 284:\nDELETE FROM agg_t3;\n--Testcase 285:\nINSERT INTO agg_t3 values ('inf'::float8, 'inf'::float8);\n--Testcase 286:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 287:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 288:\nDELETE FROM agg_t3;\n--Testcase 289:\nINSERT INTO agg_t3 values ('nan'::float8, 'nan'::float8);\n--Testcase 290:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 291:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 292:\nCREATE FOREIGN TABLE agg_t4(a float4, b float4, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 293:\nDELETE FROM agg_t4;\n--Testcase 294:\nINSERT INTO agg_t4 values (1.0::float4, 2.0::float4);\n--Testcase 295:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n\n--Testcase 296:\nDELETE FROM agg_t4;\n--Testcase 297:\nINSERT INTO agg_t4 values (3.0::float4, 4.0::float4);\n--Testcase 298:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 299:\nDELETE FROM agg_t4;\n--Testcase 300:\nINSERT INTO agg_t4 values ('inf'::float4, 'inf'::float4);\n--Testcase 301:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 302:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 303:\nDELETE FROM agg_t4;\n--Testcase 304:\nINSERT INTO agg_t4 values ('nan'::float4, 'nan'::float4);\n--Testcase 305:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 306:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 307:\nCREATE FOREIGN TABLE agg_t5(a numeric, b numeric, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 308:\nDELETE FROM agg_t5;\n--Testcase 309:\nINSERT INTO agg_t5 values (1.0::numeric, 2.0::numeric);\n--Testcase 310:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 311:\nDELETE FROM agg_t5;\n--Testcase 312:\nINSERT INTO agg_t5 values (3.0::numeric, 4.0::numeric);\n--Testcase 313:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 597:\nDELETE FROM agg_t5;\n--Testcase 598:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 599:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 600:\nDELETE FROM agg_t5;\n--Testcase 601:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 602:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 314:\nDELETE FROM agg_t5;\n--Testcase 315:\nINSERT INTO agg_t5 values ('nan'::numeric, 'nan'::numeric);\n--Testcase 316:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n--Testcase 317:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n-- verify correct results for null and NaN inputs\n--Testcase 318:\nCREATE FOREIGN TABLE agg_t8(a text OPTIONS (key 'true'), b text) SERVER sqlite_svr;\n--Testcase 319:\nDELETE FROM agg_t8;\n--Testcase 320:\nINSERT INTO agg_t8 select * from generate_series(1,3);\n--Testcase 321:\nselect sum(null::int4) from agg_t8;\n--Testcase 322:\nselect sum(null::int8) from agg_t8;\n--Testcase 323:\nselect sum(null::numeric) from agg_t8;\n--Testcase 324:\nselect sum(null::float8) from agg_t8;\n--Testcase 325:\nselect avg(null::int4) from agg_t8;\n--Testcase 326:\nselect avg(null::int8) from agg_t8;\n--Testcase 327:\nselect avg(null::numeric) from agg_t8;\n--Testcase 328:\nselect avg(null::float8) from agg_t8;\n--Testcase 329:\nselect sum('NaN'::numeric) from agg_t8;\n--Testcase 330:\nselect avg('NaN'::numeric) from agg_t8;\n\n-- verify correct results for infinite inputs\n--Testcase 331:\nDELETE FROM agg_t3;\n--Testcase 332:\nINSERT INTO agg_t3 VALUES ('1'::float8), ('infinity'::float8);\n--Testcase 333:\nSELECT avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 334:\nDELETE FROM agg_t3;\n--Testcase 335:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('1'::float8);\n--Testcase 336:\nSELECT avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 337:\nDELETE FROM agg_t3;\n--Testcase 338:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('infinity'::float8);\n--Testcase 339:\nSELECT avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 340:\nDELETE FROM agg_t3;\n--Testcase 341:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('infinity'::float8);\n--Testcase 342:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 603:\nDELETE FROM agg_t3;\n--Testcase 604:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('-infinity'::float8);\n--Testcase 605:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 606:\nDELETE FROM agg_t3;\n--Testcase 607: -- Pg 14+\nINSERT INTO agg_t3 VALUES ('1'::numeric), ('infinity'::numeric);\n--Testcase 608:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 609:\nDELETE FROM agg_t3;\n--Testcase 610:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('1'::numeric);\n--Testcase 611:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 612:\nDELETE FROM agg_t3;\n--Testcase 613:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('infinity'::numeric);\n--Testcase 614:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 615:\nDELETE FROM agg_t3;\n--Testcase 616:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('infinity'::numeric);\n--Testcase 617:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 618:\nDELETE FROM agg_t3;\n--Testcase 619:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('-infinity'::numeric);\n--Testcase 620:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n-- test accuracy with a large input offset\n--Testcase 343:\nCREATE FOREIGN TABLE agg_t6(a float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 344:\nDELETE FROM agg_t6;\n--Testcase 345:\nINSERT INTO agg_t6 VALUES (100000003), (100000004), (100000006), (100000007);\n--Testcase 346:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n--Testcase 347:\nDELETE FROM agg_t6;\n--Testcase 348:\nINSERT INTO agg_t6 VALUES (7000000000005), (7000000000007);\n--Testcase 349:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n-- SQL2003 binary aggregates\n--Testcase 21:\nSELECT regr_count(b, a) FROM aggtest;\n--Testcase 22:\nSELECT regr_sxx(b, a) FROM aggtest;\n--Testcase 23:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 611:\nSELECT regr_syy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 24:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 612:\nSELECT regr_sxy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 25:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 613:\nSELECT regr_avgx(b, a), regr_avgy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 26:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 614:\nSELECT regr_r2(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 27:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 615:\nSELECT regr_slope(b, a)::numeric(20,10), regr_intercept(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 28:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 616:\nSELECT covar_pop(b, a)::numeric(20,10), covar_samp(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 29:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 617:\nSELECT corr(b, a)::numeric(20,10) FROM aggtest;\n\n-- check single-tuple behavior\n--Testcase 350:\nCREATE FOREIGN TABLE agg_t7(a float8, b float8, c float8, d float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 351:\nDELETE FROM agg_t7;\n--Testcase 352:\nINSERT INTO agg_t7 VALUES (1, 2, 3, 4);\n--Testcase 353:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 354:\nDELETE FROM agg_t7;\n--Testcase 355:\nINSERT INTO agg_t7 VALUES (1, 'inf', 3, 'inf');\n--Testcase 356:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 357:\nDELETE FROM agg_t7;\n--Testcase 358:\nINSERT INTO agg_t7 VALUES (1, 'nan', 3, 'nan');\n--Testcase 359:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n-- test accum and combine functions directly\n--Testcase 360:\nCREATE FOREIGN TABLE regr_test (x float8, y float8, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 361:\nDELETE FROM regr_test;\n--Testcase 362:\nINSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);\n--Testcase 363:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 364:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 590:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 365:\nCREATE FOREIGN TABLE agg_t15 (a text, b int, c int, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 366:\ndelete from agg_t15;\n--Testcase 367:\ninsert into agg_t15 values ('{4,140,2900}', 100);\n--Testcase 368:\nSELECT float8_accum(a::float8[], b) from agg_t15;\n\n--Testcase 369:\ndelete from agg_t15;\n--Testcase 370:\ninsert into agg_t15 values ('{4,140,2900,1290,83075,15050}', 200, 100);\n--Testcase 371:\nSELECT float8_regr_accum(a::float8[], b, c) from agg_t15;\n\n--Testcase 372:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30);\n\n--Testcase 373:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (80,100);\n\n--Testcase 374:\nCREATE FOREIGN TABLE agg_t16 (a text, b text, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 375:\ndelete from agg_t16;\n--Testcase 376:\ninsert into agg_t16 values ('{3,60,200}', '{0,0,0}');\n--Testcase 377:\ninsert into agg_t16 values ('{0,0,0}', '{2,180,200}');\n--Testcase 378:\ninsert into agg_t16 values ('{3,60,200}', '{2,180,200}');\n--Testcase 379:\nSELECT float8_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 380:\ndelete from agg_t16;\n--Testcase 381:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{0,0,0,0,0,0}');\n--Testcase 382:\ninsert into agg_t16 values ('{0,0,0,0,0,0}', '{2,180,200,740,57800,-3400}');\n--Testcase 383:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{2,180,200,740,57800,-3400}');\n--Testcase 384:\nSELECT float8_regr_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 385:\nDROP FOREIGN TABLE regr_test;\n\n-- test count, distinct\n--Testcase 30:\nSELECT count(four) AS cnt_1000 FROM onek;\n--Testcase 31:\nSELECT count(DISTINCT four) AS cnt_4 FROM onek;\n\n--Testcase 32:\nselect ten, count(*), sum(four) from onek\ngroup by ten order by ten;\n\n--Testcase 33:\nselect ten, count(four), sum(DISTINCT four) from onek\ngroup by ten order by ten;\n\n-- user-defined aggregates\n--Testcase 386:\nCREATE AGGREGATE newavg (\n   sfunc = int4_avg_accum, basetype = int4, stype = _int8,\n   finalfunc = int8_avg,\n   initcond1 = '{0,0}'\n);\n\n--Testcase 387:\nCREATE AGGREGATE newsum (\n   sfunc1 = int4pl, basetype = int4, stype1 = int4,\n   initcond1 = '0'\n);\n\n--Testcase 388:\nCREATE AGGREGATE newcnt (*) (\n   sfunc = int8inc, stype = int8,\n   initcond = '0', parallel = safe\n);\n\n--Testcase 389:\nCREATE AGGREGATE newcnt (\"any\") (\n   sfunc = int8inc_any, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 390:\nCREATE AGGREGATE oldcnt (\n   sfunc = int8inc, basetype = 'ANY', stype = int8,\n   initcond = '0'\n);\n\n--Testcase 391:\ncreate function sum3(int8,int8,int8) returns int8 as\n'select $1 + $2 + $3' language sql strict immutable;\n\n--Testcase 392:\ncreate aggregate sum2(int8,int8) (\n   sfunc = sum3, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 34:\nSELECT newavg(four) AS avg_1 FROM onek;\n--Testcase 35:\nSELECT newsum(four) AS sum_1500 FROM onek;\n--Testcase 36:\nSELECT newcnt(four) AS cnt_1000 FROM onek;\n--Testcase 37:\nSELECT newcnt(*) AS cnt_1000 FROM onek;\n--Testcase 38:\nSELECT oldcnt(*) AS cnt_1000 FROM onek;\n--Testcase 39:\nSELECT sum2(q1,q2) FROM int8_tbl;\n\n-- test for outer-level aggregates\n\n-- this should work\n--Testcase 40:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n-- this should fail because subquery has an agg of its own in WHERE\n--Testcase 41:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b\n               where sum(distinct a.four + b.four) = b.four);\n\n-- Test handling of sublinks within outer-level aggregates.\n-- Per bug report from Daniel Grace.\n--Testcase 42:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))\nfrom tenk1 o;\n\n-- Test handling of Params within aggregate arguments in hashed aggregation.\n-- Per bug report from Jeevan Chalke.\n--Testcase 393:\nexplain (verbose, costs off)\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 394:\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 395:\nexplain (verbose, costs off)\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--Testcase 396:\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--\n-- test for bitwise integer aggregates\n--\n--Testcase 397:\nCREATE FOREIGN TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 43: -- bit_xor Pg 14+\nSELECT\n  BIT_AND(i2) AS \"?\",\n  BIT_OR(i4)  AS \"?\",\n  BIT_XOR(i8) AS \"?\"\nFROM bitwise_test;\n\n--Testcase 44:\nINSERT INTO bitwise_test VALUES\n  (1, 1, 1, 1, 1),\n  (3, 3, 3, null, 2),\n  (7, 7, 7, 3, 4);\n\n--Testcase 45:-- bit_xor Pg 14+\nSELECT\n  BIT_AND(i2) AS \"1\",\n  BIT_AND(i4) AS \"1\",\n  BIT_AND(i8) AS \"1\",\n  BIT_AND(i)  AS \"?\",\n  BIT_AND(x)  AS \"0\",\n\n  BIT_OR(i2)  AS \"7\",\n  BIT_OR(i4)  AS \"7\",\n  BIT_OR(i8)  AS \"7\",\n  BIT_OR(i)   AS \"?\",\n  BIT_OR(x)   AS \"7\",\n\n  BIT_XOR(i2) AS \"5\",\n  BIT_XOR(i4) AS \"5\",\n  BIT_XOR(i8) AS \"5\",\n  BIT_XOR(i)  AS \"?\",\n  BIT_XOR(x)  AS \"7\"\nFROM bitwise_test;\n\n--\n-- test boolean aggregates\n--\n-- first test all possible transition and final states\n\n--Testcase 398:\nCREATE FOREIGN TABLE bool_test_tmp(\n  b1 BOOL OPTIONS (key 'true'),\n  b2 BOOL OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n-- boolean and transitions\n-- null because strict\nBEGIN;\n--Testcase 399:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 400:\nSELECT booland_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- and actual computations\nBEGIN;\n--Testcase 401:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE);\n--Testcase 402:\nSELECT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 403:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, FALSE),\n  (FALSE, TRUE),\n  (FALSE, FALSE);\n--Testcase 404:\nSELECT NOT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- boolean or transitions\n-- null because strict\nBEGIN;\n--Testcase 405:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 406:\nSELECT boolor_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- actual computations\nBEGIN;\n--Testcase 407:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE),\n  (TRUE, FALSE),\n  (FALSE, TRUE);\n--Testcase 408:\nSELECT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 409:\nINSERT INTO bool_test_tmp VALUES\n  (FALSE, FALSE);\n--Testcase 410:\nSELECT NOT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n--Testcase 411:\nCREATE FOREIGN TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 46:\nSELECT\n  BOOL_AND(b1)   AS \"n\",\n  BOOL_OR(b3)    AS \"n\"\nFROM bool_test;\n\n--Testcase 47:\nINSERT INTO bool_test VALUES\n  (TRUE, null, FALSE, null),\n  (FALSE, TRUE, null, null),\n  (null, TRUE, FALSE, null);\n\n--Testcase 48:\nSELECT\n  BOOL_AND(b1)     AS \"f\",\n  BOOL_AND(b2)     AS \"t\",\n  BOOL_AND(b3)     AS \"f\",\n  BOOL_AND(b4)     AS \"n\",\n  BOOL_AND(NOT b2) AS \"f\",\n  BOOL_AND(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 49:\nSELECT\n  EVERY(b1)     AS \"f\",\n  EVERY(b2)     AS \"t\",\n  EVERY(b3)     AS \"f\",\n  EVERY(b4)     AS \"n\",\n  EVERY(NOT b2) AS \"f\",\n  EVERY(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 50:\nSELECT\n  BOOL_OR(b1)      AS \"t\",\n  BOOL_OR(b2)      AS \"t\",\n  BOOL_OR(b3)      AS \"f\",\n  BOOL_OR(b4)      AS \"n\",\n  BOOL_OR(NOT b2)  AS \"f\",\n  BOOL_OR(NOT b3)  AS \"t\"\nFROM bool_test;\n\n--\n-- Test cases that should be optimized into indexscans instead of\n-- the generic aggregate implementation.\n--\n\n-- Basic cases\n--Testcase 51:\nexplain (costs off)\n  select min(unique1) from tenk1;\n--Testcase 52:\nselect min(unique1) from tenk1;\n--Testcase 53:\nexplain (costs off)\n  select max(unique1) from tenk1;\n--Testcase 54:\nselect max(unique1) from tenk1;\n--Testcase 55:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 < 42;\n--Testcase 56:\nselect max(unique1) from tenk1 where unique1 < 42;\n--Testcase 57:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42;\n--Testcase 58:\nselect max(unique1) from tenk1 where unique1 > 42;\n\n-- the planner may choose a generic aggregate here if parallel query is\n-- enabled, since that plan will be parallel safe and the \"optimized\"\n-- plan, which has almost identical cost, will not be.  we want to test\n-- the optimized plan, so temporarily disable parallel query.\nbegin;\n--Testcase 628:\nset local max_parallel_workers_per_gather = 0;\n--Testcase 59:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42000;\n--Testcase 60:\nselect max(unique1) from tenk1 where unique1 > 42000;\nrollback;\n\n-- multi-column index (uses tenk1_thous_tenthous)\n--Testcase 61:\nexplain (costs off)\n  select max(tenthous) from tenk1 where thousand = 33;\n--Testcase 62:\nselect max(tenthous) from tenk1 where thousand = 33;\n--Testcase 63:\nexplain (costs off)\n  select min(tenthous) from tenk1 where thousand = 33;\n--Testcase 64:\nselect min(tenthous) from tenk1 where thousand = 33;\n\n-- check parameter propagation into an indexscan subquery\n--Testcase 65:\nexplain (costs off)\n  select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n    from int4_tbl;\n--Testcase 66:\nselect f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n  from int4_tbl;\n\n-- check some cases that were handled incorrectly in 8.3.0\n--Testcase 67:\nexplain (costs off)\n  select distinct max(unique2) from tenk1;\n--Testcase 68:\nselect distinct max(unique2) from tenk1;\n--Testcase 69:\nexplain (costs off)\n  select max(unique2) from tenk1 order by 1;\n--Testcase 70:\nselect max(unique2) from tenk1 order by 1;\n--Testcase 71:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2);\n--Testcase 72:\nselect max(unique2) from tenk1 order by max(unique2);\n--Testcase 73:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 74:\nselect max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 75:\nexplain (costs off)\n  select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n--Testcase 76:\nselect max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n\n-- interesting corner case: constant gets optimized into a seqscan\n--Testcase 77:\nexplain (costs off)\n  select max(100) from tenk1;\n--Testcase 78:\nselect max(100) from tenk1;\n\n-- try it on an inheritance tree\n--Testcase 412:\ncreate foreign table minmaxtest(f1 int) server sqlite_svr;\n--Testcase 413:\ncreate table minmaxtest1() inherits (minmaxtest);\n--Testcase 414:\ncreate table minmaxtest2() inherits (minmaxtest);\n--Testcase 415:\ncreate table minmaxtest3() inherits (minmaxtest);\n--Testcase 416:\ncreate index minmaxtest1i on minmaxtest1(f1);\n--Testcase 417:\ncreate index minmaxtest2i on minmaxtest2(f1 desc);\n--Testcase 418:\ncreate index minmaxtest3i on minmaxtest3(f1) where f1 is not null;\n\n--Testcase 79:\ninsert into minmaxtest values(11), (12);\n--Testcase 80:\ninsert into minmaxtest1 values(13), (14);\n--Testcase 81:\ninsert into minmaxtest2 values(15), (16);\n--Testcase 82:\ninsert into minmaxtest3 values(17), (18);\n\n--Testcase 83:\nexplain (costs off)\n  select min(f1), max(f1) from minmaxtest;\n--Testcase 84:\nselect min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT doesn't do anything useful here, but it shouldn't fail\n--Testcase 85:\nexplain (costs off)\n  select distinct min(f1), max(f1) from minmaxtest;\n--Testcase 86:\nselect distinct min(f1), max(f1) from minmaxtest;\n\n-- check for correct detection of nested-aggregate errors\n--Testcase 87:\nselect max(min(unique1)) from tenk1;\n--Testcase 88:\nselect (select max(min(unique1)) from int8_tbl) from tenk1;\nselect avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3))\n            from tenk1 a1(col1)))\nfrom tenk1 a2(col2);\n--\n-- Test removal of redundant GROUP BY columns\n--\n\n--Testcase 419:\ncreate foreign table agg_t1 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int, d int) server sqlite_svr;\n--Testcase 420:\ncreate foreign table agg_t2 (x int OPTIONS (key 'true'), y int OPTIONS (key 'true'), z int) server sqlite_svr;\n--Testcase 421:\ncreate foreign table agg_t9 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int) server sqlite_svr;\n\n-- Non-primary-key columns can be removed from GROUP BY\n--Testcase 89:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- No removal can happen if the complete PK is not present in GROUP BY\n--Testcase 90:\nexplain (costs off) select a,c from agg_t1 group by a,c,d;\n\n-- Test removal across multiple relations\n--Testcase 91:\nexplain (costs off) select *\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.y,agg_t2.z;\n\n-- Test case where agg_t1 can be optimized but not agg_t2\n--Testcase 92:\nexplain (costs off) select agg_t1.*,agg_t2.x,agg_t2.z\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.z;\n\n-- Cannot optimize when PK is deferrable\n--Testcase 422:\nexplain (costs off) select * from agg_t9 group by a,b,c;\n\n--Testcase 423:\ncreate temp table t1c () inherits (agg_t1);\n\n-- Ensure we don't remove any columns when t1 has a child table\n--Testcase 424:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- Okay to remove columns if we're only querying the parent.\n--Testcase 425:\nexplain (costs off) select * from only agg_t1 group by a,b,c,d;\n\n-- Skip this test, sqlite_fdw does not support partition table\n--create foreign table p_t1 (\n--  a int options (key 'true'),\n--  b int options (key 'true'),\n--  c int,\n--  d int,\n--) partition by list(a) server sqlite_svr;\n--create temp table p_t1_1 partition of p_t1 for values in(1);\n--create temp table p_t1_2 partition of p_t1 for values in(2);\n\n-- Ensure we can remove non-PK columns for partitioned tables.\n--explain (costs off) select * from p_t1 group by a,b,c,d;\n\n--drop table t1 cascade;\n--drop table t2;\n--drop table t3;\n--drop table p_t1;\n\n--\n-- Test GROUP BY matching of join columns that are type-coerced due to USING\n--\n\n--Testcase 426:\ncreate foreign table t1(f1 int, f2 int) server sqlite_svr;\n--Testcase 427:\ncreate foreign table t2(f1 bigint, f2 oid) server sqlite_svr;\n\n--Testcase 428:\nselect f1 from t1 left join t2 using (f1) group by f1;\n--Testcase 429:\nselect f1 from t1 left join t2 using (f1) group by t1.f1;\n--Testcase 430:\nselect t1.f1 from t1 left join t2 using (f1) group by t1.f1;\n-- only this one should fail:\n--Testcase 431:\nselect t1.f1 from t1 left join t2 using (f1) group by f1;\n\n-- check case where we have to inject nullingrels into coerced join alias\nselect f1, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0)\ngroup by f1;\n\n-- same, for a RelabelType coercion\nselect f2, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0)\ngroup by f2;\n\n--Testcase 432:\ndrop foreign table t1, t2;\n--\n-- Test planner's selection of pathkeys for ORDER BY aggregates\n--\n\n-- Ensure we order by four.  This suits the most aggregate functions.\nexplain (costs off)\nselect sum(two order by two),max(four order by four), min(four order by four)\nfrom tenk1;\n\n-- Ensure we order by two.  It's a tie between ordering by two and four but\n-- we tiebreak on the aggregate's position.\nexplain (costs off)\nselect\n  sum(two order by two), max(four order by four),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Similar to above, but tiebreak on ordering by four\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Ensure this one orders by ten since there are 3 aggregates that require ten\n-- vs two that suit two and four.\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two),\n  sum(ten order by ten), min(ten order by ten), max(ten order by ten)\nfrom tenk1;\n\n-- Try a case involving a GROUP BY clause where the GROUP BY column is also\n-- part of an aggregate's ORDER BY clause.  We want a sort order that works\n-- for the GROUP BY along with the first and the last aggregate.\nexplain (costs off)\nselect\n  sum(unique1 order by ten, two), sum(unique1 order by four),\n  sum(unique1 order by two, four)\nfrom tenk1\ngroup by ten;\n\n-- Ensure that we never choose to provide presorted input to an Aggref with\n-- a volatile function in the ORDER BY / DISTINCT clause.  We want to ensure\n-- these sorts are performed individually rather than at the query level.\nexplain (costs off)\nselect\n  sum(unique1 order by two), sum(unique1 order by four),\n  sum(unique1 order by four, two), sum(unique1 order by two, random()),\n  sum(unique1 order by two, random(), random() + 1)\nfrom tenk1\ngroup by ten;\n\n-- Ensure consecutive NULLs are properly treated as distinct from each other\nselect array_agg(distinct val)\nfrom (select null as val from generate_series(1, 2)) g;\n\n-- Ensure no ordering is requested when enable_presorted_aggregate is off\nset enable_presorted_aggregate to off;\nexplain (costs off)\nselect sum(two order by two) from tenk1;\nreset enable_presorted_aggregate;\n\n--\n-- Test combinations of DISTINCT and/or ORDER BY\n--\nbegin;\n--Testcase 93:\ndelete from INT8_TBL;\n--Testcase 94:\ninsert into INT8_TBL values (1,4),(2,3),(3,1),(4,2);\n--Testcase 95:\nselect array_agg(q1 order by q2)\n  from INT8_TBL;\n--Testcase 96:\nselect array_agg(q1 order by q1)\n  from INT8_TBL;\n--Testcase 97:\nselect array_agg(q1 order by q1 desc)\n  from INT8_TBL;\n--Testcase 98:\nselect array_agg(q2 order by q1 desc)\n  from INT8_TBL;\n\n--Testcase 99:\ndelete from INT4_TBL;\n--Testcase 100:\ninsert into INT4_TBL values (1),(2),(1),(3),(null),(2);\n--Testcase 101:\nselect array_agg(distinct f1)\n  from INT4_TBL;\n--Testcase 102:\nselect array_agg(distinct f1 order by f1)\n  from INT4_TBL;\n--Testcase 103:\nselect array_agg(distinct f1 order by f1 desc)\n  from INT4_TBL;\n--Testcase 104:\nselect array_agg(distinct f1 order by f1 desc nulls last)\n  from INT4_TBL;\nrollback;\n\n-- multi-arg aggs, strict/nonstrict, distinct/order by\n--Testcase 433:\ncreate type aggtype as (a integer, b integer, c text);\n\n--Testcase 434:\ncreate function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql strict immutable;\n\n--Testcase 435:\ncreate function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql immutable;\n\n--Testcase 436:\ncreate aggregate aggfstr(integer,integer,text) (\n   sfunc = aggf_trans, stype = aggtype[],\n   initcond = '{}'\n);\n\n--Testcase 437:\ncreate aggregate aggfns(integer,integer,text) (\n   sfunc = aggfns_trans, stype = aggtype[], sspace = 10000,\n   initcond = '{}'\n);\n\nbegin;\n--Testcase 105:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 106:\nselect aggfstr(a,b,c) from multi_arg_agg;\n--Testcase 107:\nselect aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 108:\nselect aggfstr(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 109:\nselect aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 110:\nselect aggfstr(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 111:\nselect aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n-- test specific code paths\n\n--Testcase 112:\nselect aggfns(distinct a,a,c order by c using ~<~,a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 113:\nselect aggfns(distinct a,a,c order by c using ~<~) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 114:\nselect aggfns(distinct a,a,c order by a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 115:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- check node I/O via view creation and usage, also deparsing logic\n\n--Testcase 438:\ncreate view agg_view1 as\n  select aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 116:\nselect * from agg_view1;\n--Testcase 117:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 439:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 118:\nselect * from agg_view1;\n--Testcase 119:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 440:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 120:\nselect * from agg_view1;\n--Testcase 121:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 441:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by b+1) from multi_arg_agg;\n\n--Testcase 122:\nselect * from agg_view1;\n--Testcase 123:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 442:\ncreate or replace view agg_view1 as\n  select aggfns(a,a,c order by b) from multi_arg_agg;\n\n--Testcase 124:\nselect * from agg_view1;\n--Testcase 125:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 443:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by c using ~<~) from multi_arg_agg;\n\n--Testcase 126:\nselect * from agg_view1;\n--Testcase 127:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 444:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n--Testcase 128:\nselect * from agg_view1;\n--Testcase 129:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 445:\ndrop view agg_view1;\nrollback;\n\n-- incorrect DISTINCT usage errors\n--Testcase 130:\ninsert into multi_arg_agg values (1,1,'foo');\n--Testcase 131:\nselect aggfns(distinct a,b,c order by i) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 132:\nselect aggfns(distinct a,b,c order by a,b+1) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 133:\nselect aggfns(distinct a,b,c order by a,b,i,c) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 134:\nselect aggfns(distinct a,a,c order by a,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- string_agg tests\nbegin;\n--Testcase 135:\ndelete from varchar_tbl;\n--Testcase 136:\ninsert into varchar_tbl values ('aaaa'),('bbbb'),('cccc');\n--Testcase 137:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 138:\ndelete from varchar_tbl;\n--Testcase 139:\ninsert into varchar_tbl values ('aaaa'),(null),('bbbb'),('cccc');\n--Testcase 140:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 141:\ndelete from varchar_tbl;\n--Testcase 142:\ninsert into varchar_tbl values (null),(null),('bbbb'),('cccc');\n--Testcase 143:\nselect string_agg(f1,'AB') from varchar_tbl;\n\n--Testcase 144:\ndelete from varchar_tbl;\n--Testcase 145:\ninsert into varchar_tbl values (null),(null);\n--Testcase 146:\nselect string_agg(f1,',') from varchar_tbl;\nrollback;\n\n-- check some implicit casting cases, as per bug #5564\n\n--Testcase 147:\nselect string_agg(distinct f1, ',' order by f1) from varchar_tbl;  -- ok\n--Testcase 148:\nselect string_agg(distinct f1::text, ',' order by f1) from varchar_tbl;  -- not ok\n--Testcase 149:\nselect string_agg(distinct f1, ',' order by f1::text) from varchar_tbl;  -- not ok\n--Testcase 150:\nselect string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl;  -- ok\n\n-- string_agg bytea tests\n--Testcase 446:\ncreate foreign table bytea_test_table(v bytea) server sqlite_svr;\n\n--Testcase 151:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 152:\ninsert into bytea_test_table values(decode('ff','hex'));\n\n--Testcase 153:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 154:\ninsert into bytea_test_table values(decode('aa','hex'));\n\n--Testcase 155:\nselect string_agg(v, '') from bytea_test_table;\n--Testcase 156:\nselect string_agg(v, NULL) from bytea_test_table;\n--Testcase 157:\nselect string_agg(v, decode('ee', 'hex')) from bytea_test_table;\n\n--Testcase 447:\ndrop foreign table bytea_test_table;\n\n-- Test parallel string_agg and array_agg\ncreate foreign table pagg_test (x int, y int) server sqlite_svr;\ninsert into pagg_test\nselect (case x % 4 when 1 then null else x end), x % 10\nfrom generate_series(1,5000) x;\n\nset parallel_setup_cost TO 0;\nset parallel_tuple_cost TO 0;\nset parallel_leader_participation TO 0;\nset min_parallel_table_scan_size = 0;\nset bytea_output = 'escape';\nset max_parallel_workers_per_gather = 2;\n\n-- create a view as we otherwise have to repeat this query a few times.\ncreate view v_pagg_test AS\nselect\n\ty,\n\tmin(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct,\n\tmin(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct,\n\tmin(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct,\n\tmin(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct\nfrom (\n\tselect\n\t\ty,\n\t\tunnest(regexp_split_to_array(a1.t, ','))::int AS t,\n\t\tunnest(regexp_split_to_array(a1.b::text, ',')) AS b,\n\t\tunnest(a1.a) AS a,\n\t\tunnest(a1.aa) AS aa\n\tfrom (\n\t\tselect\n\t\t\ty,\n\t\t\tstring_agg(x::text, ',') AS t,\n\t\t\tstring_agg(x::text::bytea, ',') AS b,\n\t\t\tarray_agg(x) AS a,\n\t\t\tarray_agg(ARRAY[x]) AS aa\n\t\tfrom pagg_test\n\t\tgroup by y\n\t) a1\n) a2\ngroup by y;\n\n-- Ensure results are correct.\nselect * from v_pagg_test order by y;\n\n-- Ensure parallel aggregation is actually being used.\nexplain (costs off) select * from v_pagg_test order by y;\n\nset max_parallel_workers_per_gather = 0;\n\n-- Ensure results are the same without parallel aggregation.\nselect * from v_pagg_test order by y;\n\n-- Clean up\nreset max_parallel_workers_per_gather;\nreset bytea_output;\nreset min_parallel_table_scan_size;\nreset parallel_leader_participation;\nreset parallel_tuple_cost;\nreset parallel_setup_cost;\n\ndrop view v_pagg_test;\ndrop foreign table pagg_test;\n\n\n-- FILTER tests\n\n--Testcase 158:\nselect min(unique1) filter (where unique1 > 100) from tenk1;\n\n--Testcase 159:\nselect sum(1/ten) filter (where ten > 0) from tenk1;\n\n--Testcase 160:\nselect ten, sum(distinct four) filter (where four::text ~ '123') from onek a\ngroup by ten;\n\n--Testcase 161:\nselect ten, sum(distinct four) filter (where four > 10) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n--Testcase 448:\ncreate foreign table agg_t17(foo text, bar text) server sqlite_svr;\n--Testcase 449:\ninsert into agg_t17 values ('a', 'b');\n\n--Testcase 450:\nselect max(foo COLLATE \"C\") filter (where (bar collate \"POSIX\") > '0')\nfrom agg_t17;\n\ncreate foreign table agg_t170(v int) server sqlite_svr;\ninsert into agg_t170(v) values (1), (2), (3);\nselect any_value(v) filter (where v > 2) from agg_t170;\n\n-- outer reference in FILTER (PostgreSQL extension)\n--Testcase 451:\ncreate foreign table agg_t18 (inner_c int) server sqlite_svr;\n--Testcase 452:\ncreate foreign table agg_t19 (outer_c int) server sqlite_svr;\n--Testcase 453:\ninsert into agg_t18 values (1);\n--Testcase 454:\ninsert into agg_t19 values (2), (3);\n\n--Testcase 455:\nselect (select count(*)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n--Testcase 456:\nselect (select count(*) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- outer query is aggregation query\n--Testcase 457:\nselect (select count(inner_c) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n\n--Testcase 162:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1))\n     filter (where o.unique1 < 10))\nfrom tenk1 o;\t\t\t\t\t-- outer query is aggregation query\n\n-- subquery in FILTER clause (PostgreSQL extension)\n--Testcase 163:\nselect sum(unique1) FILTER (WHERE\n  unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1;\n\n-- exercise lots of aggregate parts with FILTER\nbegin;\n--Testcase 164:\ndelete from multi_arg_agg;\n--Testcase 165:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 166:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) from multi_arg_agg, generate_series(1,2) i;\nrollback;\n\n-- check handling of bare boolean Var in FILTER\n--Testcase 672:\nselect max(0) filter (where b1) from bool_test;\n--Testcase 673:\nselect (select max(0) filter (where b1)) from bool_test;\n\n-- check for correct detection of nested-aggregate errors in FILTER\n--Testcase 674:\nselect max(unique1) filter (where sum(ten) > 0) from tenk1;\n--Testcase 675:\nselect (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1;\n--Testcase 676:\nselect max(unique1) filter (where bool_or(ten > 0)) from tenk1;\n--Testcase 677:\nselect (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1;\n\n-- ordered-set aggregates\n\nbegin;\n--Testcase 167:\ndelete from FLOAT8_TBL;\n--Testcase 168:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 169:\nselect f1, percentile_cont(f1) within group (order by x::float8)\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 170:\ndelete from FLOAT8_TBL;\n--Testcase 171:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 172:\nselect f1, percentile_cont(f1 order by f1) within group (order by x)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 173:\ndelete from FLOAT8_TBL;\n--Testcase 174:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 175:\nselect f1, sum() within group (order by x::float8)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 176:\ndelete from FLOAT8_TBL;\n--Testcase 177:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 178:\nselect f1, percentile_cont(f1,f1)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\n--Testcase 179:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 618:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10) from aggtest;\n--Testcase 180:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 619:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10), sum(b)::numeric(10,3) from aggtest;\n--Testcase 181:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 620:\nselect percentile_cont(0.5) within group (order by thousand) from tenk1;\n--Testcase 182:\nselect percentile_disc(0.5) within group (order by thousand) from tenk1;\n\nbegin;\n--Testcase 183:\ndelete from INT4_TBL;\n--Testcase 184:\ninsert into INT4_TBL values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 185:\nselect rank(3) within group (order by f1) from INT4_TBL;\n--Testcase 186:\nselect cume_dist(3) within group (order by f1) from INT4_TBL;\n--Testcase 187:\ninsert into INT4_TBL values (5);\n--Testcase 458:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 621:\nselect (percent_rank(3) within group (order by f1))::numeric(20,10) from INT4_TBL;\n--Testcase 459:\ndelete from INT4_TBL where f1 = 5;\n--Testcase 188:\nselect dense_rank(3) within group (order by f1) from INT4_TBL;\nrollback;\n\n--Testcase 189:\nselect percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 190:\nselect percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 191:\nselect percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand)\nfrom tenk1;\n\n--Testcase 460:\ncreate foreign table agg_t21 (x int) server sqlite_svr;\nbegin;\n--Testcase 248:\ninsert into agg_t21 select * from generate_series(1,6);\n--Testcase 249:\nselect percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x)\nfrom agg_t21;\nrollback;\n\n--Testcase 192:\nselect ten, mode() within group (order by string4) from tenk1 group by ten;\n\n--Testcase 461:\ncreate foreign table agg_t20 (x text) server sqlite_svr;\nbegin;\n--Testcase 462:\ninsert into agg_t20 values (unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]));\n--Testcase 463:\nselect percentile_disc(array[0.25,0.5,0.75]) within group (order by x) from agg_t20;\nrollback;\n\n-- check collation propagates up in suitable cases:\nbegin;\n--Testcase 464:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 465:\nselect pg_collation_for(percentile_disc(1) within group (order by x collate \"POSIX\")) from agg_t20;\nrollback;\n\n-- ordered-set aggs created with CREATE AGGREGATE\n--Testcase 466:\ncreate aggregate my_percentile_disc(float8 ORDER BY anyelement) (\n  stype = internal,\n  sfunc = ordered_set_transition,\n  finalfunc = percentile_disc_final,\n  finalfunc_extra = true,\n  finalfunc_modify = read_write\n);\n\n--Testcase 467:\ncreate aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\") (\n  stype = internal,\n  sfunc = ordered_set_transition_multi,\n  finalfunc = rank_final,\n  finalfunc_extra = true,\n  hypothetical\n);\n\n--Testcase 633:\nalter aggregate my_percentile_disc(float8 ORDER BY anyelement)\n  rename to test_percentile_disc;\n  \n--Testcase 634:\nalter aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\")\n  rename to test_rank;\n\nbegin;\n--Testcase 468:\ninsert into agg_t21 values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 469:\nselect test_rank(3) within group (order by x) from agg_t21;\nrollback;\n \n--Testcase 193:\nselect test_percentile_disc(0.5) within group (order by thousand) from tenk1;\n\n-- ordered-set aggs can't use ungrouped vars in direct args:\nbegin;\n--Testcase 470:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 471:\nselect rank(x) within group (order by x) from agg_t21;\nrollback;\n\n-- outer-level agg can't use a grouped arg of a lower level, either:\nbegin;\n--Testcase 472:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 473:\nselect array(select percentile_disc(a) within group (order by x)\n               from (values (0.3),(0.7)) v(a) group by a)\n  from agg_t21;\nrollback;\n\n-- agg in the direct args is a grouping violation, too:\nbegin;\n--Testcase 474:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 475:\nselect rank(sum(x)) within group (order by x) from agg_t21;\nrollback;\n\n-- hypothetical-set type unification and argument-count failures:\nbegin;\n--Testcase 264:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 265:\nselect rank(3) within group (order by x) from agg_t20;\nrollback;\n\n--Testcase 194:\nselect rank(3) within group (order by stringu1,stringu2) from tenk1;\n\nbegin;\n--Testcase 476:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 477:\nselect rank('fred') within group (order by x) from agg_t21;\nrollback;\n\nbegin;\n--Testcase 478:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 479:\nselect rank('adam'::text collate \"C\") within group (order by x collate \"POSIX\")\n  from agg_t20;\nrollback;\n\n-- hypothetical-set type unification successes:\nbegin;\n--Testcase 480:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 481:\nselect rank('adam'::varchar) within group (order by x) from agg_t20;\nrollback;\n\nbegin;\n--Testcase 482:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 483:\nselect rank('3') within group (order by x) from agg_t21;\nrollback;\n\n-- divide by zero check\nbegin;\n--Testcase 484:\ninsert into agg_t21 select * from generate_series(1,0);\n--Testcase 485:\nselect percent_rank(0) within group (order by x) from agg_t21;\nrollback;\n\n-- deparse and multiple features:\n--Testcase 486:\ncreate view aggordview1 as\nselect ten,\n       percentile_disc(0.5) within group (order by thousand) as p50,\n       percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px,\n       rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred)\n  from tenk1\n group by ten order by ten;\n\n--Testcase 196:\nselect pg_get_viewdef('aggordview1');\n--Testcase 197:\nselect * from aggordview1 order by ten;\n--Testcase 487:\ndrop view aggordview1;\n\n-- variadic aggregates\n--Testcase 488:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 489:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n--Testcase 490:\ncreate function cleast_accum(anycompatible, variadic anycompatiblearray)\nreturns anycompatible language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 491:\ncreate aggregate cleast_agg(variadic items anycompatiblearray) (\n  stype = anycompatible, sfunc = cleast_accum);\n\n--Testcase 198:\nselect least_agg(q1,q2) from int8_tbl;\n--Testcase 199:\nselect least_agg(variadic array[q1,q2]) from int8_tbl;\n\n--Testcase 492:\nselect cleast_agg(q1,q2) from int8_tbl;\n--Testcase 493:\nselect cleast_agg(4.5,f1) from int4_tbl;\n--Testcase 494:\nselect cleast_agg(variadic array[4.5,f1]) from int4_tbl;\n--Testcase 495:\nselect pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl;\n\n-- test aggregates with common transition functions share the same states\n--Testcase 496:\ncreate foreign table agg_t10(one int, id int options (key 'true')) server sqlite_svr;\n--Testcase 497:\ncreate foreign table agg_t11(one int, two int, id int options (key 'true')) server sqlite_svr;\n--Testcase 498:\ncreate foreign table agg_t12(a int, id int options (key 'true')) server sqlite_svr;\nbegin work;\n\n--Testcase 499:\ncreate type avg_state as (total bigint, count bigint);\n\n--Testcase 500:\ncreate or replace function avg_transfn(state avg_state, n int) returns avg_state as\n$$\ndeclare new_state avg_state;\nbegin\n\traise notice 'avg_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state.total := n;\n\t\t\tnew_state.count := 1;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate.total := state.total + n;\n\t\tstate.count := state.count + 1;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 501:\ncreate function avg_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total / state.count;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 502:\ncreate function sum_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 503:\ncreate aggregate my_avg(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn\n);\n\n--Testcase 504:\ncreate aggregate my_sum(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn\n);\n\n-- aggregate state should be shared as aggs are the same.\n--Testcase 505:\ndelete from agg_t10;\n--Testcase 506:\ninsert into agg_t10 values (1), (3);\n--Testcase 507:\nselect my_avg(one),my_avg(one) from agg_t10;\n\n-- aggregate state should be shared as transfn is the same for both aggs.\n--Testcase 508:\nselect my_avg(one),my_sum(one) from agg_t10;\n\n-- same as previous one, but with DISTINCT, which requires sorting the input.\n--Testcase 509:\ndelete from agg_t10;\n--Testcase 510:\ninsert into agg_t10 values (1), (3), (1);\n--Testcase 511:\nselect my_avg(distinct one),my_sum(distinct one) from agg_t10;\n\n-- shouldn't share states due to the distinctness not matching.\n--Testcase 512:\ndelete from agg_t10;\n--Testcase 513:\ninsert into agg_t10 values (1), (3);\n--Testcase 514:\nselect my_avg(distinct one),my_sum(one) from agg_t10;\n\n-- shouldn't share states due to the filter clause not matching.\n--Testcase 515:\nselect my_avg(one) filter (where one > 1),my_sum(one) from agg_t10;\n\n-- this should not share the state due to different input columns.\n--Testcase 516:\ndelete from agg_t11;\n--Testcase 517:\ninsert into agg_t11 values (1,2),(3,4);\n--Testcase 518:\nselect my_avg(one),my_sum(two) from agg_t11;\n\n-- exercise cases where OSAs share state\n--Testcase 519:\ndelete from agg_t12;\n--Testcase 520:\ninsert into agg_t12 values (1), (3), (5), (7);\n--Testcase 521:\nselect\n  percentile_cont(0.5) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n--Testcase 522:\nselect\n  percentile_cont(0.25) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n-- these can't share state currently\n--Testcase 523:\nselect\n  rank(4) within group (order by a),\n  dense_rank(4) within group (order by a)\nfrom agg_t12;\n\n-- test that aggs with the same sfunc and initcond share the same agg state\n--Testcase 524:\ncreate aggregate my_sum_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 525:\ncreate aggregate my_avg_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 526:\ncreate aggregate my_avg_init2(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(4,0)'\n);\n\n-- state should be shared if INITCONDs are matching\n--Testcase 527:\ndelete from agg_t10;\n--Testcase 528:\ninsert into agg_t10 values (1), (3);\n--Testcase 529:\nselect my_sum_init(one),my_avg_init(one) from agg_t10;\n\n\n-- Varying INITCONDs should cause the states not to be shared.\n--Testcase 530:\nselect my_sum_init(one),my_avg_init2(one) from agg_t10;\n\nrollback;\n\n-- test aggregate state sharing to ensure it works if one aggregate has a\n-- finalfn and the other one has none.\nbegin work;\n\n--Testcase 531:\ncreate or replace function sum_transfn(state int4, n int4) returns int4 as\n$$\ndeclare new_state int4;\nbegin\n\traise notice 'sum_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state := n;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate := state + n;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 532:\ncreate function halfsum_finalfn(state int4) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state / 2;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 533:\ncreate aggregate my_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn\n);\n\n--Testcase 534:\ncreate aggregate my_half_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn,\n   finalfunc = halfsum_finalfn\n);\n\n-- Agg state should be shared even though my_sum has no finalfn\n--Testcase 535:\ndelete from agg_t10;\n--Testcase 536:\ninsert into agg_t10 values (1), (2), (3), (4);\n--Testcase 537:\nselect my_sum(one),my_half_sum(one) from agg_t10;\n\nrollback;\n\n\n-- test that the aggregate transition logic correctly handles\n-- transition / combine functions returning NULL\n\n-- First test the case of a normal transition function returning NULL\nBEGIN;\n--Testcase 538:\nCREATE FUNCTION balkifnull(int8, int4)\nRETURNS int8\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 539:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = balkifnull(int8, int4),\n    STYPE = int8,\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n--Testcase 200:\nSELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- Secondly test the case of a parallel aggregate combiner function\n-- returning NULL. For that use normal transition function, but a\n-- combiner function returning NULL.\nBEGIN;\n--Testcase 540:\nCREATE FUNCTION balkifnull(int8, int8)\nRETURNS int8\nPARALLEL SAFE\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 541:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = int4_sum(int8, int4),\n    STYPE = int8,\n    COMBINEFUNC = balkifnull(int8, int8),\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n-- force use of parallelism\n-- Skip this test, cannot alter foreign table tenk1\n-- ALTER FOREIGN TABLE tenk1 set (parallel_workers = 4);\n-- SET LOCAL parallel_setup_cost=0;\n-- SET LOCAL max_parallel_workers_per_gather=4;\n\n-- EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1;\n-- SELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- test multiple usage of an aggregate whose finalfn returns a R/W datum\nBEGIN;\n\nCREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray\nLANGUAGE plpgsql IMMUTABLE AS $$\nBEGIN\n    RETURN array_fill(y[1], ARRAY[4]);\nEND;\n$$;\n\nCREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nDECLARE\n    res x%TYPE;\nBEGIN\n    -- assignment is essential for this test, it expands the array to R/W\n    res := array_fill(x[1], ARRAY[4]);\n    RETURN res;\nEND;\n$$;\n\nCREATE AGGREGATE rwagg(anyarray) (\n    STYPE = anyarray,\n    SFUNC = rwagg_sfunc,\n    FINALFUNC = rwagg_finalfunc\n);\n\nCREATE FUNCTION eatarray(x real[]) RETURNS real[]\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nBEGIN\n    x[1] := x[1] + 1;\n    RETURN x;\nEND;\n$$;\n\nCREATE FOREIGN TABLE float_tb(f real) SERVER sqlite_svr;\nINSERT INTO float_tb(f)  VALUES (1.0);\nSELECT eatarray(rwagg(ARRAY[f::real])), eatarray(rwagg(ARRAY[f::real])) FROM float_tb;\n\nROLLBACK;\n\n\n-- test coverage for aggregate combine/serial/deserial functions\nBEGIN;\n\n--Testcase 635:\nSET parallel_setup_cost = 0;\n--Testcase 636:\nSET parallel_tuple_cost = 0;\n--Testcase 637:\nSET min_parallel_table_scan_size = 0;\n--Testcase 638:\nSET max_parallel_workers_per_gather = 4;\n--Testcase 639:\nSET parallel_leader_participation = off;\n--Testcase 640:\nSET enable_indexonlyscan = off;\n\n-- variance(int4) covers numeric_poly_combine\n-- sum(int8) covers int8_avg_combine\n-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg\n--Testcase 542:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 543:\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n-- variance(int8) covers numeric_combine\n-- avg(numeric) covers numeric_avg_combine\n--Testcase 544:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 545:\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\nROLLBACK;\n\n-- test coverage for dense_rank\n--Testcase 546:\ncreate foreign table agg_t13(x int, id int options (key 'true')) server sqlite_svr;\n--Testcase 547:\ninsert into agg_t13 values (1),(1),(2),(2),(3),(3);\n--Testcase 548:\nSELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM agg_t13 GROUP BY (x) ORDER BY 1;\n--Testcase 549:\ndelete from agg_t13;\n\n\n-- Ensure that the STRICT checks for aggregates does not take NULLness\n-- of ORDER BY columns into account. See bug report around\n-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz\n--Testcase 550:\ncreate foreign table agg_t14(x int, y int, id int options (key 'true')) server sqlite_svr;\n--Testcase 551:\ninsert into agg_t14 values (1, NULL), (1, 2);\n--Testcase 552:\nSELECT min(x ORDER BY y) FROM agg_t14;\n--Testcase 553:\nSELECT min(x ORDER BY y) FROM agg_t14;\n\n-- check collation-sensitive matching between grouping expressions\nbegin;\n--Testcase 554:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 555:\nselect x||'a', case x||'a' when 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\nbegin;\n--Testcase 556:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 557:\nselect x||'a', case when x||'a' = 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\n-- Make sure that generation of HashAggregate for uniqification purposes\n-- does not lead to array overflow due to unexpected duplicate hash keys\n-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com\n--Testcase 641:\nset enable_memoize to off;\n--Testcase 558:\nexplain (costs off)\n  select 1 from tenk1\n   where (hundred, thousand) in (select twothousand, twothousand from onek);\n--Testcase 642:\nreset enable_memoize;\n\n--\n-- Hash Aggregation Spill tests\n--\n\n--Testcase 643:\nset enable_sort=false;\n--Testcase 644:\nset work_mem='64kB';\n\n--Testcase 559:\nselect unique1, count(*), sum(twothousand) from tenk1\ngroup by unique1\nhaving sum(fivethous) > 4975\norder by sum(twothousand);\n\n--Testcase 645:\nset work_mem to default;\n--Testcase 646:\nset enable_sort to default;\n\n--\n-- Compare results between plans using sorting and plans using hash\n-- aggregation. Force spilling in both cases by setting work_mem low.\n--\n\n--Testcase 647:\nset work_mem='64kB';\n\n--Testcase 560:\ncreate foreign table agg_data_2k(g int, id int options (key 'true')) server sqlite_svr;\n--Testcase 561:\ncreate foreign table agg_data_20k(g int, id int options (key 'true')) server sqlite_svr;\n\n--Testcase 562:\ncreate foreign table agg_group_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 563:\ncreate foreign table agg_group_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 564:\ncreate foreign table agg_group_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 565:\ncreate foreign table agg_group_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n--Testcase 566:\ncreate foreign table agg_hash_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 567:\ncreate foreign table agg_hash_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 568:\ncreate foreign table agg_hash_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 569:\ncreate foreign table agg_hash_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n\n--Testcase 570:\ninsert into agg_data_2k select g from generate_series(0, 1999) g;\n--analyze agg_data_2k;\n\n--Testcase 571:\ninsert into agg_data_20k select g from generate_series(0, 19999) g;\n--analyze agg_data_20k;\n\n-- Produce results with sorting.\n\n--Testcase 648:\nset enable_hashagg = false;\n\n--Testcase 649:\nset jit_above_cost = 0;\n\n--Testcase 572:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 573:\ninsert into agg_group_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 574:\ninsert into agg_group_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 650:\nset jit_above_cost to default;\n\n--Testcase 575:\ninsert into agg_group_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 576:\ninsert into agg_group_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n-- Produce results with hash aggregation\n\n--Testcase 651:\nset enable_hashagg = true;\n--Testcase 652:\nset enable_sort = false;\n\n--Testcase 653:\nset jit_above_cost = 0;\n\n--Testcase 577:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 578:\ninsert into agg_hash_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 579:\ninsert into agg_hash_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 654:\nset jit_above_cost to default;\n\n--Testcase 580:\ninsert into agg_hash_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 581:\ninsert into agg_hash_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 655:\nset enable_sort = true;\n--Testcase 656:\nset work_mem to default;\n\n-- Compare group aggregation results to hash aggregation results\n\n--Testcase 582:\n(select * from agg_hash_1 except select * from agg_group_1)\n  union all\n(select * from agg_group_1 except select * from agg_hash_1);\n\n--Testcase 583:\n(select * from agg_hash_2 except select * from agg_group_2)\n  union all\n(select * from agg_group_2 except select * from agg_hash_2);\n\n--Testcase 584:\n(select * from agg_hash_3 except select * from agg_group_3)\n  union all\n(select * from agg_group_3 except select * from agg_hash_3);\n\n--Testcase 585:\n(select * from agg_hash_4 except select * from agg_group_4)\n  union all\n(select * from agg_group_4 except select * from agg_hash_4);\n\n--Testcase 622:\nDELETE FROM INT4_TBL;\n--Testcase 623:\nDELETE FROM INT8_TBL;\n--Testcase 624:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 586:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 587:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/encodings.sql",
    "content": "-- tests for PR #76 github\n-- see https://www.postgresql.org/docs/current/multibyte.html\n-- EUC_CN, not tested\n-- EUC_JP\n-- EUC_JIS_2004, not tested\n-- EUC_KR\n-- EUC_TW, not tested\n-- ISO_8859_5\n-- ISO_8859_6\n-- ISO_8859_7\n-- ISO_8859_8\n-- KOI8R, not tested\n-- KOI8U, not tested\n-- LATIN1\n-- LATIN2\n-- LATIN3\n-- LATIN4\n-- LATIN5\n-- LATIN6\n-- LATIN7\n-- LATIN8\n-- LATIN9\n-- LATIN10\n-- MULE_INTERNAL, not tested\n-- SQL_ASCII\n-- WIN866, not tested\n-- WIN874, not tested\n-- WIN1250\n-- WIN1251\n-- WIN1252\n-- WIN1253\n-- WIN1254\n-- WIN1255\n-- WIN1256\n-- WIN1257\n-- WIN1258, not tested\n\n-- ================\n-- check all data in UTF8\n-- ================\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr;\nSELECT * FROM \"Unicode data\";\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\n-- euc_jp\nCREATE DATABASE \"contrib_regression_EUC_JP\" ENCODING EUC_JP LC_CTYPE='ja_JP.eucjp' LC_COLLATE='ja_JP.eucjp' template template0;\n\\connect \"contrib_regression_EUC_JP\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_JP\";\n\n-- ko_KR.euckr\nCREATE DATABASE \"contrib_regression_EUC_KR\" ENCODING EUC_KR LC_CTYPE='ko_KR.euckr' LC_COLLATE='ko_KR.euckr' template template0;\n\\connect \"contrib_regression_EUC_KR\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_KR\";\n\n-- ISO_8859_5\nCREATE DATABASE \"contrib_regression_ISO_8859_5\" ENCODING ISO_8859_5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_5\";\n\n-- ISO_8859_6\nCREATE DATABASE \"contrib_regression_ISO_8859_6\" ENCODING ISO_8859_6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_6\";\n\n-- ISO_8859_7\nCREATE DATABASE \"contrib_regression_ISO_8859_7\" ENCODING ISO_8859_7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_7\";\n\n-- ISO_8859_8\nCREATE DATABASE \"contrib_regression_ISO_8859_8\" ENCODING ISO_8859_8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_8\";\n\n-- ISO_8859_9\nCREATE DATABASE \"contrib_regression_ISO_8859_9\" ENCODING ISO_8859_9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_9\";\n\n-- LATIN1\nCREATE DATABASE \"contrib_regression_LATIN1\" ENCODING LATIN1 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN1\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN1\";\n\n-- LATIN2\nCREATE DATABASE \"contrib_regression_LATIN2\" ENCODING LATIN2 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN2\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN2\";\n\n-- LATIN3\nCREATE DATABASE \"contrib_regression_LATIN3\" ENCODING LATIN3 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN3\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN3\";\n\n-- LATIN4\nCREATE DATABASE \"contrib_regression_LATIN4\" ENCODING LATIN4 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN4\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN4\";\n\n-- LATIN5\nCREATE DATABASE \"contrib_regression_LATIN5\" ENCODING LATIN5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN5\";\n\n-- LATIN6\nCREATE DATABASE \"contrib_regression_LATIN6\" ENCODING LATIN6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN6\";\n\n-- LATIN7\nCREATE DATABASE \"contrib_regression_LATIN7\" ENCODING LATIN7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN7\";\n\n-- LATIN8\nCREATE DATABASE \"contrib_regression_LATIN8\" ENCODING LATIN8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN8\";\n\n-- LATIN9\nCREATE DATABASE \"contrib_regression_LATIN9\" ENCODING LATIN9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN9\";\n\n-- LATIN10\nCREATE DATABASE \"contrib_regression_LATIN10\" ENCODING LATIN10 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN10\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN10\";\n\n-- cp1250\nCREATE DATABASE \"contrib_regression_WIN1250\" ENCODING WIN1250 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1250\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1250\";\n\n-- cp1251\nCREATE DATABASE \"contrib_regression_WIN1251\" ENCODING WIN1251 LC_CTYPE='bg_BG' LC_COLLATE='bg_BG' template template0;\n\\connect \"contrib_regression_WIN1251\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1251\";\n\n-- cp1252\nCREATE DATABASE \"contrib_regression_WIN1252\" ENCODING WIN1252 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1252\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1252\";\n\n-- cp1253\nCREATE DATABASE \"contrib_regression_WIN1253\" ENCODING WIN1253 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1253\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1253\";\n\n-- cp1254\nCREATE DATABASE \"contrib_regression_WIN1254\" ENCODING WIN1254 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1254\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1254\";\n\n-- cp1255\nCREATE DATABASE \"contrib_regression_WIN1255\" ENCODING WIN1255 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1255\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1255\";\n\n-- cp1256\nCREATE DATABASE \"contrib_regression_WIN1256\" ENCODING WIN1256 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1256\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1256\";\n\n-- cp1257\nCREATE DATABASE \"contrib_regression_WIN1257\" ENCODING WIN1257 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1257\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1257\";\n\n-- SQL_ASCII\nCREATE DATABASE \"contrib_regression_SQL_ASCII\" ENCODING SQL_ASCII LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_SQL_ASCII\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_SQL_ASCII\";\n"
  },
  {
    "path": "sql/13.15/extra/insert.sql",
    "content": "--\n-- insert with DEFAULT in the target_list\n--\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 18:\nCREATE FOREIGN TABLE inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing') SERVER sqlite_svr;\n--Testcase 1:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);\n--Testcase 2:\ninsert into inserttest01 (col2, col3) values (3, DEFAULT);\n--Testcase 3:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, 5, DEFAULT);\n--Testcase 4:\ninsert into inserttest01 values (DEFAULT, 5, 'test');\n--Testcase 5:\ninsert into inserttest01 values (DEFAULT, 7);\n\n--Testcase 6:\nselect * from inserttest01;\n\n--\n-- insert with similar expression / target_list values (all fail)\n--\n--Testcase 7:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT);\n--Testcase 8:\ninsert into inserttest01 (col1, col2, col3) values (1, 2);\n--Testcase 9:\ninsert into inserttest01 (col1) values (1, 2);\n--Testcase 10:\ninsert into inserttest01 (col1) values (DEFAULT, DEFAULT);\n\n--Testcase 11:\nselect * from inserttest01;\n\n--\n-- VALUES test\n--\n--Testcase 12:\ninsert into inserttest01 values(10, 20, '40'), (-1, 2, DEFAULT),\n    ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');\n\n--Testcase 13:\nselect * from inserttest01;\n\n--\n-- TOASTed value test\n--\n--Testcase 14:\ninsert into inserttest01 values(30, 50, repeat('x', 10000));\n\n--Testcase 15:\nselect col1, col2, char_length(col3) from inserttest01;\n\n-- skip, sqlite fdw does not support customized type\n/*\n-- check indirection (field/array assignment), cf bug #14265\n--\n-- these tests are aware that transformInsertStmt has 3 separate code paths\n--\n\ncreate type insert_test_type as (if1 int, if2 text[]);\n\ncreate table inserttest (f1 int, f2 int[],\n                         f3 insert_test_type, f4 insert_test_type[]);\n\ninsert into inserttest (f2[1], f2[2]) values (1,2);\ninsert into inserttest (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttest (f2[1], f2[2]) select 7,8;\ninsert into inserttest (f2[1], f2[2]) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttest (f3.if1, f3.if2) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer';\n\nselect * from inserttest;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttest (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttest;\ndrop type insert_test_type;\n\n-- direct partition inserts should check partition bound constraint\ncreate table range_parted (\n\ta text,\n\tb int\n) partition by range (a, (b+0));\n\n-- no partitions, so fail\ninsert into range_parted values ('a', 11);\n\ncreate table part1 partition of range_parted for values from ('a', 1) to ('a', 10);\ncreate table part2 partition of range_parted for values from ('a', 10) to ('a', 20);\ncreate table part3 partition of range_parted for values from ('b', 1) to ('b', 10);\ncreate table part4 partition of range_parted for values from ('b', 10) to ('b', 20);\n\n-- fail\ninsert into part1 values ('a', 11);\ninsert into part1 values ('b', 1);\n-- ok\ninsert into part1 values ('a', 1);\n-- fail\ninsert into part4 values ('b', 21);\ninsert into part4 values ('a', 10);\n-- ok\ninsert into part4 values ('b', 10);\n\n-- fail (partition key a has a NOT NULL constraint)\ninsert into part1 values (null);\n-- fail (expression key (b+0) cannot be null either)\ninsert into part1 values (1);\n\ncreate table list_parted (\n\ta text,\n\tb int\n) partition by list (lower(a));\ncreate table part_aa_bb partition of list_parted FOR VALUES IN ('aa', 'bb');\ncreate table part_cc_dd partition of list_parted FOR VALUES IN ('cc', 'dd');\ncreate table part_null partition of list_parted FOR VALUES IN (null);\n\n-- fail\ninsert into part_aa_bb values ('cc', 1);\ninsert into part_aa_bb values ('AAa', 1);\ninsert into part_aa_bb values (null);\n-- ok\ninsert into part_cc_dd values ('cC', 1);\ninsert into part_null values (null, 0);\n\n-- check in case of multi-level partitioned table\ncreate table part_ee_ff partition of list_parted for values in ('ee', 'ff') partition by range (b);\ncreate table part_ee_ff1 partition of part_ee_ff for values from (1) to (10);\ncreate table part_ee_ff2 partition of part_ee_ff for values from (10) to (20);\n\n-- test default partition\ncreate table part_default partition of list_parted default;\n-- Negative test: a row, which would fit in other partition, does not fit\n-- default partition, even when inserted directly\ninsert into part_default values ('aa', 2);\ninsert into part_default values (null, 2);\n-- ok\ninsert into part_default values ('Zz', 2);\n-- test if default partition works as expected for multi-level partitioned\n-- table as well as when default partition itself is further partitioned\ndrop table part_default;\ncreate table part_xx_yy partition of list_parted for values in ('xx', 'yy') partition by list (a);\ncreate table part_xx_yy_p1 partition of part_xx_yy for values in ('xx');\ncreate table part_xx_yy_defpart partition of part_xx_yy default;\ncreate table part_default partition of list_parted default partition by range(b);\ncreate table part_default_p1 partition of part_default for values from (20) to (30);\ncreate table part_default_p2 partition of part_default for values from (30) to (40);\n\n-- fail\ninsert into part_ee_ff1 values ('EE', 11);\ninsert into part_default_p2 values ('gg', 43);\n-- fail (even the parent's, ie, part_ee_ff's partition constraint applies)\ninsert into part_ee_ff1 values ('cc', 1);\ninsert into part_default values ('gg', 43);\n-- ok\ninsert into part_ee_ff1 values ('ff', 1);\ninsert into part_ee_ff2 values ('ff', 11);\ninsert into part_default_p1 values ('cd', 25);\ninsert into part_default_p2 values ('de', 35);\ninsert into list_parted values ('ab', 21);\ninsert into list_parted values ('xx', 1);\ninsert into list_parted values ('yy', 2);\nselect tableoid::regclass, * from list_parted;\n\n-- Check tuple routing for partitioned tables\n\n-- fail\ninsert into range_parted values ('a', 0);\n-- ok\ninsert into range_parted values ('a', 1);\ninsert into range_parted values ('a', 10);\n-- fail\ninsert into range_parted values ('a', 20);\n-- ok\ninsert into range_parted values ('b', 1);\ninsert into range_parted values ('b', 10);\n-- fail (partition key (b+0) is null)\ninsert into range_parted values ('a');\n\n-- Check default partition\ncreate table part_def partition of range_parted default;\n-- fail\ninsert into part_def values ('b', 10);\n-- ok\ninsert into part_def values ('c', 10);\ninsert into range_parted values (null, null);\ninsert into range_parted values ('a', null);\ninsert into range_parted values (null, 19);\ninsert into range_parted values ('b', 20);\n\nselect tableoid::regclass, * from range_parted;\n-- ok\ninsert into list_parted values (null, 1);\ninsert into list_parted (a) values ('aA');\n-- fail (partition of part_ee_ff not found in both cases)\ninsert into list_parted values ('EE', 0);\ninsert into part_ee_ff values ('EE', 0);\n-- ok\ninsert into list_parted values ('EE', 1);\ninsert into part_ee_ff values ('EE', 10);\nselect tableoid::regclass, * from list_parted;\n\n-- some more tests to exercise tuple-routing with multi-level partitioning\ncreate table part_gg partition of list_parted for values in ('gg') partition by range (b);\ncreate table part_gg1 partition of part_gg for values from (minvalue) to (1);\ncreate table part_gg2 partition of part_gg for values from (1) to (10) partition by range (b);\ncreate table part_gg2_1 partition of part_gg2 for values from (1) to (5);\ncreate table part_gg2_2 partition of part_gg2 for values from (5) to (10);\n\ncreate table part_ee_ff3 partition of part_ee_ff for values from (20) to (30) partition by range (b);\ncreate table part_ee_ff3_1 partition of part_ee_ff3 for values from (20) to (25);\ncreate table part_ee_ff3_2 partition of part_ee_ff3 for values from (25) to (30);\n\ntruncate list_parted;\ninsert into list_parted values ('aa'), ('cc');\ninsert into list_parted select 'Ff', s.a from generate_series(1, 29) s(a);\ninsert into list_parted select 'gg', s.a from generate_series(1, 9) s(a);\ninsert into list_parted (b) values (1);\nselect tableoid::regclass::text, a, min(b) as min_b, max(b) as max_b from list_parted group by 1, 2 order by 1;\n\n-- direct partition inserts should check hash partition bound constraint\n\n-- Use hand-rolled hash functions and operator classes to get predictable\n-- result on different machines.  The hash function for int4 simply returns\n-- the sum of the values passed to it and the one for text returns the length\n-- of the non-empty string value passed to it or 0.\n\ncreate or replace function part_hashint4_noop(value int4, seed int8)\nreturns int8 as $$\nselect value + seed;\n$$ language sql immutable;\n\ncreate operator class part_test_int4_ops\nfor type int4\nusing hash as\noperator 1 =,\nfunction 2 part_hashint4_noop(int4, int8);\n\ncreate or replace function part_hashtext_length(value text, seed int8)\nRETURNS int8 AS $$\nselect length(coalesce(value, ''))::int8\n$$ language sql immutable;\n\ncreate operator class part_test_text_ops\nfor type text\nusing hash as\noperator 1 =,\nfunction 2 part_hashtext_length(text, int8);\n\ncreate table hash_parted (\n\ta int\n) partition by hash (a part_test_int4_ops);\ncreate table hpart0 partition of hash_parted for values with (modulus 4, remainder 0);\ncreate table hpart1 partition of hash_parted for values with (modulus 4, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 4, remainder 3);\n\ninsert into hash_parted values(generate_series(1,10));\n\n-- direct insert of values divisible by 4 - ok;\ninsert into hpart0 values(12),(16);\n-- fail;\ninsert into hpart0 values(11);\n-- 11 % 4 -> 3 remainder i.e. valid data for hpart3 partition\ninsert into hpart3 values(11);\n\n-- view data\nselect tableoid::regclass as part, a, a%4 as \"remainder = a % 4\"\nfrom hash_parted order by part;\n\n-- test \\d+ output on a table which has both partitioned and unpartitioned\n-- partitions\n\\d+ list_parted\n\n-- cleanup\ndrop table range_parted, list_parted;\ndrop table hash_parted;\n\n-- test that a default partition added as the first partition accepts any value\n-- including null\ncreate table list_parted (a int) partition by list (a);\ncreate table part_default partition of list_parted default;\n\\d+ part_default\ninsert into part_default values (null);\ninsert into part_default values (1);\ninsert into part_default values (-1);\nselect tableoid::regclass, a from list_parted;\n-- cleanup\ndrop table list_parted;\n\n-- more tests for certain multi-level partitioning scenarios\ncreate table mlparted (a int, b int) partition by range (a, b);\ncreate table mlparted1 (b int not null, a int not null) partition by range ((b+0));\ncreate table mlparted11 (like mlparted1);\nalter table mlparted11 drop a;\nalter table mlparted11 add a int;\nalter table mlparted11 drop a;\nalter table mlparted11 add a int not null;\n-- attnum for key attribute 'a' is different in mlparted, mlparted1, and mlparted11\nselect attrelid::regclass, attname, attnum\nfrom pg_attribute\nwhere attname = 'a'\n and (attrelid = 'mlparted'::regclass\n   or attrelid = 'mlparted1'::regclass\n   or attrelid = 'mlparted11'::regclass)\norder by attrelid::regclass::text;\n\nalter table mlparted1 attach partition mlparted11 for values from (2) to (5);\nalter table mlparted attach partition mlparted1 for values from (1, 2) to (1, 10);\n\n-- check that \"(1, 2)\" is correctly routed to mlparted11.\ninsert into mlparted values (1, 2);\nselect tableoid::regclass, * from mlparted;\n\n-- check that proper message is shown after failure to route through mlparted1\ninsert into mlparted (a, b) values (1, 5);\n\ntruncate mlparted;\nalter table mlparted add constraint check_b check (b = 3);\n\n-- have a BR trigger modify the row such that the check_b is violated\ncreate function mlparted11_trig_fn()\nreturns trigger AS\n$$\nbegin\n  NEW.b := 4;\n  return NEW;\nend;\n$$\nlanguage plpgsql;\ncreate trigger mlparted11_trig before insert ON mlparted11\n  for each row execute procedure mlparted11_trig_fn();\n\n-- check that the correct row is shown when constraint check_b fails after\n-- \"(1, 2)\" is routed to mlparted11 (actually \"(1, 4)\" would be shown due\n-- to the BR trigger mlparted11_trig_fn)\ninsert into mlparted values (1, 2);\ndrop trigger mlparted11_trig on mlparted11;\ndrop function mlparted11_trig_fn();\n\n-- check that inserting into an internal partition successfully results in\n-- checking its partition constraint before inserting into the leaf partition\n-- selected by tuple-routing\ninsert into mlparted1 (a, b) values (2, 3);\n\n-- check routing error through a list partitioned table when the key is null\ncreate table lparted_nonullpart (a int, b char) partition by list (b);\ncreate table lparted_nonullpart_a partition of lparted_nonullpart for values in ('a');\ninsert into lparted_nonullpart values (1);\ndrop table lparted_nonullpart;\n\n-- check that RETURNING works correctly with tuple-routing\nalter table mlparted drop constraint check_b;\ncreate table mlparted12 partition of mlparted1 for values from (5) to (10);\ncreate table mlparted2 (b int not null, a int not null);\nalter table mlparted attach partition mlparted2 for values from (1, 10) to (1, 20);\ncreate table mlparted3 partition of mlparted for values from (1, 20) to (1, 30);\ncreate table mlparted4 (like mlparted);\nalter table mlparted4 drop a;\nalter table mlparted4 add a int not null;\nalter table mlparted attach partition mlparted4 for values from (1, 30) to (1, 40);\nwith ins (a, b, c) as\n  (insert into mlparted (b, a) select s.a, 1 from generate_series(2, 39) s(a) returning tableoid::regclass, *)\n  select a, b, min(c), max(c) from ins group by a, b order by 1;\n\nalter table mlparted add c text;\ncreate table mlparted5 (c text, a int not null, b int not null) partition by list (c);\ncreate table mlparted5a (a int not null, c text, b int not null);\nalter table mlparted5 attach partition mlparted5a for values in ('a');\nalter table mlparted attach partition mlparted5 for values from (1, 40) to (1, 50);\nalter table mlparted add constraint check_b check (a = 1 and b < 45);\ninsert into mlparted values (1, 45, 'a');\ncreate function mlparted5abrtrig_func() returns trigger as $$ begin new.c = 'b'; return new; end; $$ language plpgsql;\ncreate trigger mlparted5abrtrig before insert on mlparted5a for each row execute procedure mlparted5abrtrig_func();\ninsert into mlparted5 (a, b, c) values (1, 40, 'a');\ndrop table mlparted5;\nalter table mlparted drop constraint check_b;\n\n-- Check multi-level default partition\ncreate table mlparted_def partition of mlparted default partition by range(a);\ncreate table mlparted_def1 partition of mlparted_def for values from (40) to (50);\ncreate table mlparted_def2 partition of mlparted_def for values from (50) to (60);\ninsert into mlparted values (40, 100);\ninsert into mlparted_def1 values (42, 100);\ninsert into mlparted_def2 values (54, 50);\n-- fail\ninsert into mlparted values (70, 100);\ninsert into mlparted_def1 values (52, 50);\ninsert into mlparted_def2 values (34, 50);\n-- ok\ncreate table mlparted_defd partition of mlparted_def default;\ninsert into mlparted values (70, 100);\n\nselect tableoid::regclass, * from mlparted_def;\n\n-- Check multi-level tuple routing with attributes dropped from the\n-- top-most parent.  First remove the last attribute.\nalter table mlparted add d int, add e int;\nalter table mlparted drop e;\ncreate table mlparted5 partition of mlparted\n  for values from (1, 40) to (1, 50) partition by range (c);\ncreate table mlparted5_ab partition of mlparted5\n  for values from ('a') to ('c') partition by list (c);\n-- This partitioned table should remain with no partitions.\ncreate table mlparted5_cd partition of mlparted5\n  for values from ('c') to ('e') partition by list (c);\ncreate table mlparted5_a partition of mlparted5_ab for values in ('a');\ncreate table mlparted5_b (d int, b int, c text, a int);\nalter table mlparted5_ab attach partition mlparted5_b for values in ('b');\ntruncate mlparted;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ntruncate mlparted;\n-- Remove the before last attribute.\nalter table mlparted add e int, add d int;\nalter table mlparted drop e;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ndrop table mlparted5;\n\n-- check that message shown after failure to find a partition shows the\n-- appropriate key description (or none) in various situations\ncreate table key_desc (a int, b int) partition by list ((a+0));\ncreate table key_desc_1 partition of key_desc for values in (1) partition by range (b);\n\ncreate user regress_insert_other_user;\ngrant select (a) on key_desc_1 to regress_insert_other_user;\ngrant insert on key_desc to regress_insert_other_user;\n\nset role regress_insert_other_user;\n-- no key description is shown\ninsert into key_desc values (1, 1);\n\nreset role;\ngrant select (b) on key_desc_1 to regress_insert_other_user;\nset role regress_insert_other_user;\n-- key description (b)=(1) is now shown\ninsert into key_desc values (1, 1);\n\n-- key description is not shown if key contains expression\ninsert into key_desc values (2, 1);\nreset role;\nrevoke all on key_desc from regress_insert_other_user;\nrevoke all on key_desc_1 from regress_insert_other_user;\ndrop role regress_insert_other_user;\ndrop table key_desc, key_desc_1;\n\n-- test minvalue/maxvalue restrictions\ncreate table mcrparted (a int, b int, c int) partition by range (a, abs(b), c);\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, 0, 0) to (1, maxvalue, maxvalue);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, minvalue);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, 0) to (30, 20, minvalue);\n\n-- check multi-column range partitioning expression enforces the same\n-- constraint as what tuple-routing would determine it to be\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, minvalue, minvalue) to (1, maxvalue, maxvalue);\ncreate table mcrparted1 partition of mcrparted for values from (2, 1, minvalue) to (10, 5, 10);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, maxvalue);\ncreate table mcrparted3 partition of mcrparted for values from (11, 1, 1) to (20, 10, 10);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, minvalue) to (30, 20, maxvalue);\ncreate table mcrparted5 partition of mcrparted for values from (30, 21, 20) to (maxvalue, maxvalue, maxvalue);\n\n-- null not allowed in range partition\ninsert into mcrparted values (null, null, null);\n\n-- routed to mcrparted0\ninsert into mcrparted values (0, 1, 1);\ninsert into mcrparted0 values (0, 1, 1);\n\n-- routed to mcparted1\ninsert into mcrparted values (9, 1000, 1);\ninsert into mcrparted1 values (9, 1000, 1);\ninsert into mcrparted values (10, 5, -1);\ninsert into mcrparted1 values (10, 5, -1);\ninsert into mcrparted values (2, 1, 0);\ninsert into mcrparted1 values (2, 1, 0);\n\n-- routed to mcparted2\ninsert into mcrparted values (10, 6, 1000);\ninsert into mcrparted2 values (10, 6, 1000);\ninsert into mcrparted values (10, 1000, 1000);\ninsert into mcrparted2 values (10, 1000, 1000);\n\n-- no partition exists, nor does mcrparted3 accept it\ninsert into mcrparted values (11, 1, -1);\ninsert into mcrparted3 values (11, 1, -1);\n\n-- routed to mcrparted5\ninsert into mcrparted values (30, 21, 20);\ninsert into mcrparted5 values (30, 21, 20);\ninsert into mcrparted4 values (30, 21, 20);\t-- error\n\n-- check rows\nselect tableoid::regclass::text, * from mcrparted order by 1;\n\n-- cleanup\ndrop table mcrparted;\n\n-- check that a BR constraint can't make partition contain violating rows\ncreate table brtrigpartcon (a int, b text) partition by list (a);\ncreate table brtrigpartcon1 partition of brtrigpartcon for values in (1);\ncreate or replace function brtrigpartcon1trigf() returns trigger as $$begin new.a := 2; return new; end$$ language plpgsql;\ncreate trigger brtrigpartcon1trig before insert on brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();\ninsert into brtrigpartcon values (1, 'hi there');\ninsert into brtrigpartcon1 values (1, 'hi there');\n\n-- check that the message shows the appropriate column description in a\n-- situation where the partitioned table is not the primary ModifyTable node\ncreate table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);\ncreate role regress_coldesc_role;\ngrant insert on inserttest3 to regress_coldesc_role;\ngrant insert on brtrigpartcon to regress_coldesc_role;\nrevoke select on brtrigpartcon from regress_coldesc_role;\nset role regress_coldesc_role;\nwith result as (insert into brtrigpartcon values (1, 'hi there') returning 1)\n  insert into inserttest3 (f3) select * from result;\nreset role;\n\n-- cleanup\nrevoke all on inserttest3 from regress_coldesc_role;\nrevoke all on brtrigpartcon from regress_coldesc_role;\ndrop role regress_coldesc_role;\ndrop table inserttest3;\ndrop table brtrigpartcon;\ndrop function brtrigpartcon1trigf();\n\n-- check that \"do nothing\" BR triggers work with tuple-routing (this checks\n-- that estate->es_result_relation_info is appropriately set/reset for each\n-- routed tuple)\ncreate table donothingbrtrig_test (a int, b text) partition by list (a);\ncreate table donothingbrtrig_test1 (b text, a int);\ncreate table donothingbrtrig_test2 (c text, b text, a int);\nalter table donothingbrtrig_test2 drop column c;\ncreate or replace function donothingbrtrig_func() returns trigger as $$begin raise notice 'b: %', new.b; return NULL; end$$ language plpgsql;\ncreate trigger donothingbrtrig1 before insert on donothingbrtrig_test1 for each row execute procedure donothingbrtrig_func();\ncreate trigger donothingbrtrig2 before insert on donothingbrtrig_test2 for each row execute procedure donothingbrtrig_func();\nalter table donothingbrtrig_test attach partition donothingbrtrig_test1 for values in (1);\nalter table donothingbrtrig_test attach partition donothingbrtrig_test2 for values in (2);\ninsert into donothingbrtrig_test values (1, 'foo'), (2, 'bar');\ncopy donothingbrtrig_test from stdout;\n1\tbaz\n2\tqux\n\\.\nselect tableoid::regclass, * from donothingbrtrig_test;\n\n-- cleanup\ndrop table donothingbrtrig_test;\ndrop function donothingbrtrig_func();\n\n-- check multi-column range partitioning with minvalue/maxvalue constraints\ncreate table mcrparted (a text, b int) partition by range(a, b);\ncreate table mcrparted1_lt_b partition of mcrparted for values from (minvalue, minvalue) to ('b', minvalue);\ncreate table mcrparted2_b partition of mcrparted for values from ('b', minvalue) to ('c', minvalue);\ncreate table mcrparted3_c_to_common partition of mcrparted for values from ('c', minvalue) to ('common', minvalue);\ncreate table mcrparted4_common_lt_0 partition of mcrparted for values from ('common', minvalue) to ('common', 0);\ncreate table mcrparted5_common_0_to_10 partition of mcrparted for values from ('common', 0) to ('common', 10);\ncreate table mcrparted6_common_ge_10 partition of mcrparted for values from ('common', 10) to ('common', maxvalue);\ncreate table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);\ncreate table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);\n\n\\d+ mcrparted\n\\d+ mcrparted1_lt_b\n\\d+ mcrparted2_b\n\\d+ mcrparted3_c_to_common\n\\d+ mcrparted4_common_lt_0\n\\d+ mcrparted5_common_0_to_10\n\\d+ mcrparted6_common_ge_10\n\\d+ mcrparted7_gt_common_lt_d\n\\d+ mcrparted8_ge_d\n\ninsert into mcrparted values ('aaa', 0), ('b', 0), ('bz', 10), ('c', -10),\n    ('comm', -10), ('common', -10), ('common', 0), ('common', 10),\n    ('commons', 0), ('d', -10), ('e', 0);\nselect tableoid::regclass, * from mcrparted order by a, b;\ndrop table mcrparted;\n\n-- check that wholerow vars in the RETURNING list work with partitioned tables\ncreate table returningwrtest (a int) partition by list (a);\ncreate table returningwrtest1 partition of returningwrtest for values in (1);\ninsert into returningwrtest values (1) returning returningwrtest;\n\n-- check also that the wholerow vars in RETURNING list are converted as needed\nalter table returningwrtest add b text;\ncreate table returningwrtest2 (b text, c int, a int);\nalter table returningwrtest2 drop c;\nalter table returningwrtest attach partition returningwrtest2 for values in (2);\ninsert into returningwrtest values (2, 'foo') returning returningwrtest;\ndrop table returningwrtest;\n*/\n\n-- drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 19:\nDROP SERVER sqlite_svr;\n--Testcase 20:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/join.sql",
    "content": "--\n-- JOIN\n-- Test JOIN clauses\n--\n--Testcase 360:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 361:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 362:\nCREATE FOREIGN TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n) SERVER sqlite_svr; \n\n--Testcase 363:\nCREATE FOREIGN TABLE J2_TBL (\n  i integer,\n  k integer\n) SERVER sqlite_svr; \n\n--Testcase 364:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 365:\nCREATE FOREIGN TABLE tenk2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 366:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 489:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 490:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 491:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 492:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 493:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 367:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 494:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 495:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 496:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 497:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 498:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n--Testcase 368:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 500:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 501:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 502:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 503:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 369:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO J1_TBL VALUES (1, 4, 'one');\n--Testcase 2:\nINSERT INTO J1_TBL VALUES (2, 3, 'two');\n--Testcase 3:\nINSERT INTO J1_TBL VALUES (3, 2, 'three');\n--Testcase 4:\nINSERT INTO J1_TBL VALUES (4, 1, 'four');\n--Testcase 5:\nINSERT INTO J1_TBL VALUES (5, 0, 'five');\n--Testcase 6:\nINSERT INTO J1_TBL VALUES (6, 6, 'six');\n--Testcase 7:\nINSERT INTO J1_TBL VALUES (7, 7, 'seven');\n--Testcase 8:\nINSERT INTO J1_TBL VALUES (8, 8, 'eight');\n--Testcase 9:\nINSERT INTO J1_TBL VALUES (0, NULL, 'zero');\n--Testcase 10:\nINSERT INTO J1_TBL VALUES (NULL, NULL, 'null');\n--Testcase 11:\nINSERT INTO J1_TBL VALUES (NULL, 0, 'zero');\n\n--Testcase 12:\nINSERT INTO J2_TBL VALUES (1, -1);\n--Testcase 13:\nINSERT INTO J2_TBL VALUES (2, 2);\n--Testcase 14:\nINSERT INTO J2_TBL VALUES (3, -3);\n--Testcase 15:\nINSERT INTO J2_TBL VALUES (2, 4);\n--Testcase 16:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 17:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 18:\nINSERT INTO J2_TBL VALUES (0, NULL);\n--Testcase 19:\nINSERT INTO J2_TBL VALUES (NULL, NULL);\n--Testcase 20:\nINSERT INTO J2_TBL VALUES (NULL, 0);\n\n-- useful in some tests below\n--Testcase 370:\ncreate temp table onerow();\n--Testcase 371:\ninsert into onerow default values;\nanalyze onerow;\n\n\n--\n-- CORRELATION NAMES\n-- Make sure that table/column aliases are supported\n-- before diving into more complex join syntax.\n--\n\n--Testcase 21:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL AS tx;\n\n--Testcase 22:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL tx;\n\n--Testcase 23:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL AS t1 (a, b, c);\n\n--Testcase 24:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c);\n\n--Testcase 25:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e);\n\n--Testcase 26:\nSELECT '' AS \"xxx\", t1.a, t2.e\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e)\n  WHERE t1.a = t2.d;\n\n\n--\n-- CROSS JOIN\n-- Qualifications are not allowed on cross joins,\n-- which degenerate into a standard unqualified inner join.\n--\n\n--Testcase 27:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- ambiguous column\n--Testcase 28:\nSELECT '' AS \"xxx\", i, k, t\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- resolve previous ambiguity by specifying the table name\n--Testcase 29:\nSELECT '' AS \"xxx\", t1.i, k, t\n  FROM J1_TBL t1 CROSS JOIN J2_TBL t2;\n\n--Testcase 30:\nSELECT '' AS \"xxx\", ii, tt, kk\n  FROM (J1_TBL CROSS JOIN J2_TBL)\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 31:\nSELECT '' AS \"xxx\", tx.ii, tx.jj, tx.kk\n  FROM (J1_TBL t1 (a, b, c) CROSS JOIN J2_TBL t2 (d, e))\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 32:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL CROSS JOIN J2_TBL a CROSS JOIN J2_TBL b;\n\n\n--\n--\n-- Inner joins (equi-joins)\n--\n--\n\n--\n-- Inner joins (equi-joins) with USING clause\n-- The USING syntax changes the shape of the resulting table\n-- by including a column in the USING clause only once in the result.\n--\n\n-- Inner equi-join on specified column\n--Testcase 33:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL INNER JOIN J2_TBL USING (i);\n\n-- Same as above, slightly different syntax\n--Testcase 34:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL JOIN J2_TBL USING (i);\n\n--Testcase 35:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, d) USING (a)\n  ORDER BY a, d;\n\n--Testcase 36:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, b) USING (b)\n  ORDER BY b, t1.a;\n\n\n--\n-- NATURAL JOIN\n-- Inner equi-join on all columns with the same name\n--\n\n--Testcase 37:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL NATURAL JOIN J2_TBL;\n\n--Testcase 38:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (a, d);\n\n--Testcase 39:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (d, a);\n\n-- mismatch number of columns\n-- currently, Postgres will fill in with underlying names\n--Testcase 40:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL t1 (a, b) NATURAL JOIN J2_TBL t2 (a);\n\n\n--\n-- Inner joins (equi-joins)\n--\n\n--Testcase 41:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.i);\n\n--Testcase 42:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.k);\n\n\n--\n-- Non-equi-joins\n--\n\n--Testcase 43:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i <= J2_TBL.k);\n\n\n--\n-- Outer joins\n-- Note that OUTER is a noise word\n--\n\n--Testcase 44:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL LEFT OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 45:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 46:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL RIGHT OUTER JOIN J2_TBL USING (i);\n\n--Testcase 47:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL RIGHT JOIN J2_TBL USING (i);\n\n--Testcase 48:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL FULL OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 49:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL FULL JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 50:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (k = 1);\n\n--Testcase 51:\nSELECT '' AS \"xxx\", *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (i = 1);\n\n--\n-- semijoin selectivity for <>\n--\n--Testcase 52:\nexplain (costs off)\nselect * from int4_tbl i4, tenk1 a\nwhere exists(select * from tenk1 b\n             where a.twothousand = b.twothousand and a.fivethous <> b.fivethous)\n      and i4.f1 = a.tenthous;\n\n\n--\n-- More complicated constructs\n--\n\n--\n-- Multiway full join\n--\n\n--Testcase 372:\nCREATE FOREIGN TABLE t11 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 373:\nCREATE FOREIGN TABLE t21 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 374:\nCREATE FOREIGN TABLE t31 (name TEXT, n INTEGER) SERVER sqlite_svr;\n\n--Testcase 53:\nINSERT INTO t11 VALUES ( 'bb', 11 );\n--Testcase 54:\nINSERT INTO t21 VALUES ( 'bb', 12 );\n--Testcase 55:\nINSERT INTO t21 VALUES ( 'cc', 22 );\n--Testcase 56:\nINSERT INTO t21 VALUES ( 'ee', 42 );\n--Testcase 57:\nINSERT INTO t31 VALUES ( 'bb', 13 );\n--Testcase 58:\nINSERT INTO t31 VALUES ( 'cc', 23 );\n--Testcase 59:\nINSERT INTO t31 VALUES ( 'dd', 33 );\n\n--Testcase 60:\nSELECT * FROM t11 FULL JOIN t21 USING (name) FULL JOIN t31 USING (name);\n\n--\n-- Test interactions of join syntax and subqueries\n--\n\n-- Basic cases (we expect planner to pull up the subquery here)\n--Testcase 61:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nINNER JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 62:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nLEFT JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 63:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nFULL JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n-- Cases with non-nullable expressions in subquery results;\n-- make sure these go to null as expected\n--Testcase 64:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 65:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL LEFT JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 66:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 67:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL INNER JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 68:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL FULL JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 69:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n--Testcase 70:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n-- Constants as join keys can also be problematic\n--Testcase 375:\nSELECT * FROM\n  (SELECT name, n as s1_n FROM t11) as s1\nFULL JOIN\n  (SELECT name, 2 as s2_n FROM t21) as s2\nON (s1_n = s2_n);\n\n-- Test for propagation of nullability constraints into sub-joins\n\n--Testcase 376:\ncreate foreign table x (x1 int, x2 int) server sqlite_svr;\n--Testcase 71:\ninsert into x values (1,11);\n--Testcase 72:\ninsert into x values (2,22);\n--Testcase 73:\ninsert into x values (3,null);\n--Testcase 74:\ninsert into x values (4,44);\n--Testcase 75:\ninsert into x values (5,null);\n\n--Testcase 377:\ncreate foreign table y (y1 int, y2 int) server sqlite_svr;\n--Testcase 76:\ninsert into y values (1,111);\n--Testcase 77:\ninsert into y values (2,222);\n--Testcase 78:\ninsert into y values (3,333);\n--Testcase 79:\ninsert into y values (4,null);\n\n--Testcase 80:\nselect * from x;\n--Testcase 81:\nselect * from y;\n\n--Testcase 82:\nselect * from x left join y on (x1 = y1 and x2 is not null);\n--Testcase 83:\nselect * from x left join y on (x1 = y1 and y2 is not null);\n\n--Testcase 84:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1);\n--Testcase 85:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and x2 is not null);\n--Testcase 86:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and y2 is not null);\n--Testcase 87:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and xx2 is not null);\n-- these should NOT give the same answers as above\n--Testcase 88:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (x2 is not null);\n--Testcase 89:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (y2 is not null);\n--Testcase 90:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (xx2 is not null);\n\n--\n-- regression test: check for bug with propagation of implied equality\n-- to outside an IN\n--\n--Testcase 91:\nselect count(*) from tenk1 a where unique1 in\n  (select unique1 from tenk1 b join tenk1 c using (unique1)\n   where b.unique2 = 42);\n\n--\n-- regression test: check for failure to generate a plan with multiple\n-- degenerate IN clauses\n--\n--Testcase 92:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\n\n-- try that with GEQO too\nbegin;\nset geqo = on;\nset geqo_threshold = 2;\n--Testcase 93:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\nrollback;\n\n--\n-- regression test: be sure we cope with proven-dummy append rels\n--\n--Testcase 378:\ncreate table b (aa int, bb int);\n--Testcase 379:\nexplain (costs off)\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--Testcase 380:\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--\n-- regression test: check handling of empty-FROM subquery underneath outer join\n--\n--Testcase 94:\nexplain (costs off)\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--Testcase 95:\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--\n-- regression test: check a case where join_clause_is_movable_into() gives\n-- an imprecise result, causing an assertion failure\n--\n--Testcase 96:\nselect count(*)\nfrom\n  (select t31.tenthous as x1, coalesce(t11.stringu1, t21.stringu1) as x2\n   from tenk1 t11\n   left join tenk1 t21 on t11.unique1 = t21.unique1\n   join tenk1 t31 on t11.unique2 = t31.unique2) ss,\n  tenk1 t4,\n  tenk1 t5\nwhere t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1;\n\n--\n-- regression test: check a case where we formerly missed including an EC\n-- enforcement clause because it was expected to be handled at scan level\n--\n--Testcase 97:\nexplain (costs off)\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--Testcase 98:\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--\n-- check a case where we formerly got confused by conflicting sort orders\n-- in redundant merge join path keys\n-- PS: Used ORDER BY to force SQLite and PG12 always order in the same way (NULLS FIRST/LAST default value for PG and Sqlite are different)\n--\n--Testcase 99:\nexplain (costs off)\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--Testcase 100:\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--\n-- a different check for handling of redundant sort keys in merge joins\n--\n--Testcase 101:\nexplain (costs off)\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n--Testcase 102:\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n\n--\n-- Clean up\n--\n\n--Testcase 381:\nDROP FOREIGN TABLE t11;\n--Testcase 382:\nDROP FOREIGN TABLE t21;\n--Testcase 383:\nDROP FOREIGN TABLE t31;\n\n--Testcase 384:\nDROP FOREIGN TABLE J1_TBL;\n--Testcase 385:\nDROP FOREIGN TABLE J2_TBL;\n\n-- Both DELETE and UPDATE allow the specification of additional tables\n-- to \"join\" against to determine which rows should be modified.\n\n--Testcase 386:\nCREATE FOREIGN TABLE t12 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 387:\nCREATE FOREIGN TABLE t22 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 388:\nCREATE FOREIGN TABLE t32 (x int OPTIONS (key 'true'), y int) SERVER sqlite_svr;\n\n--Testcase 103:\nINSERT INTO t12 VALUES (5, 10);\n--Testcase 104:\nINSERT INTO t12 VALUES (15, 20);\n--Testcase 105:\nINSERT INTO t12 VALUES (100, 100);\n--Testcase 106:\nINSERT INTO t12 VALUES (200, 1000);\n--Testcase 107:\nINSERT INTO t22 VALUES (200, 2000);\n--Testcase 108:\nINSERT INTO t32 VALUES (5, 20);\n--Testcase 109:\nINSERT INTO t32 VALUES (6, 7);\n--Testcase 110:\nINSERT INTO t32 VALUES (7, 8);\n--Testcase 111:\nINSERT INTO t32 VALUES (500, 100);\n\n--Testcase 112:\nDELETE FROM t32 USING t12 table1 WHERE t32.x = table1.a;\n--Testcase 113:\nSELECT * FROM t32;\n--Testcase 114:\nDELETE FROM t32 USING t12 JOIN t22 USING (a) WHERE t32.x > t12.a;\n--Testcase 115:\nSELECT * FROM t32;\n--Testcase 116:\nDELETE FROM t32 USING t32 t3_other WHERE t32.x = t3_other.x AND t32.y = t3_other.y;\n--Testcase 117:\nSELECT * FROM t32;\n\n-- Test join against inheritance tree\n\n--Testcase 389:\ncreate temp table t2a () inherits (t22);\n\n--Testcase 118:\ninsert into t2a values (200, 2001);\n\n--Testcase 119:\nselect * from t12 left join t22 on (t12.a = t22.a);\n\n-- Test matching of column name with wrong alias\n\n--Testcase 120:\nselect t12.x from t12 join t32 on (t12.a = t32.x);\n\n--Testcase 504:\ndrop table t2a;\n\n--\n-- regression test for 8.1 merge right join bug\n--\n\n--Testcase 390:\nCREATE FOREIGN TABLE tt1 ( tt1_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO tt1 VALUES (1, 11);\n--Testcase 122:\nINSERT INTO tt1 VALUES (2, NULL);\n\n--Testcase 391:\nCREATE FOREIGN TABLE tt2 ( tt2_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 123:\nINSERT INTO tt2 VALUES (21, 11);\n--Testcase 124:\nINSERT INTO tt2 VALUES (22, 11);\n\nset enable_hashjoin to off;\nset enable_nestloop to off;\n\n-- these should give the same results\n\n--Testcase 125:\nselect tt1.*, tt2.* from tt1 left join tt2 on tt1.joincol = tt2.joincol;\n\n--Testcase 126:\nselect tt1.*, tt2.* from tt2 right join tt1 on tt1.joincol = tt2.joincol;\n\nreset enable_hashjoin;\nreset enable_nestloop;\n\n--\n-- regression test for bug #13908 (hash join with skew tuples & nbatch increase)\n--\n\nset work_mem to '64kB';\nset enable_mergejoin to off;\n\n--Testcase 127:\nexplain (costs off)\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n--Testcase 128:\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n\nreset work_mem;\nreset enable_mergejoin;\n\n--\n-- regression test for 8.2 bug with improper re-ordering of left joins\n--\n\n--Testcase 392:\ncreate foreign table tt3(f1 int, f2 text) server sqlite_svr;\n--Testcase 129:\ninsert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x;\n\n--Testcase 393:\ncreate foreign table tt4(f1 int) server sqlite_svr;\n--Testcase 130:\ninsert into tt4 values (0),(1),(9999);\n\n--Testcase 131:\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE c.f1 IS NULL\n) AS d ON (a.f1 = d.f1)\nWHERE d.f1 IS NULL;\n\n--\n-- regression test for proper handling of outer joins within antijoins\n--\n\n--Testcase 394:\ncreate foreign table tt4x(c1 int, c2 int, c3 int) server sqlite_svr;\n\n--Testcase 132:\nexplain (costs off)\nselect * from tt4x t1\nwhere not exists (\n  select 1 from tt4x t2\n    left join tt4x t3 on t2.c3 = t3.c1\n    left join ( select t5.c1 as c1\n                from tt4x t4 left join tt4x t5 on t4.c2 = t5.c1\n              ) a1 on t3.c2 = a1.c1\n  where t1.c1 = t2.c2\n);\n\n--\n-- regression test for problems of the sort depicted in bug #3494\n--\n\n--Testcase 395:\ncreate foreign table tt5(f1 int, f2 int) server sqlite_svr;\n--Testcase 396:\ncreate foreign table tt6(f1 int, f2 int) server sqlite_svr;\n\n--Testcase 133:\ninsert into tt5 values(1, 10);\n--Testcase 134:\ninsert into tt5 values(1, 11);\n\n--Testcase 135:\ninsert into tt6 values(1, 9);\n--Testcase 136:\ninsert into tt6 values(1, 2);\n--Testcase 137:\ninsert into tt6 values(2, 9);\n\n--Testcase 138:\nselect * from tt5,tt6 where tt5.f1 = tt6.f1 and tt5.f1 = tt5.f2 - tt6.f2;\n\n--\n-- regression test for problems of the sort depicted in bug #3588\n--\n\n--Testcase 397:\ncreate foreign table xx (pkxx int) server sqlite_svr;\n--Testcase 398:\ncreate foreign table yy (pkyy int, pkxx int) server sqlite_svr;\n\n--Testcase 139:\ninsert into xx values (1);\n--Testcase 140:\ninsert into xx values (2);\n--Testcase 141:\ninsert into xx values (3);\n\n--Testcase 142:\ninsert into yy values (101, 1);\n--Testcase 143:\ninsert into yy values (201, 2);\n--Testcase 144:\ninsert into yy values (301, NULL);\n\n--Testcase 145:\nselect yy.pkyy as yy_pkyy, yy.pkxx as yy_pkxx, yya.pkyy as yya_pkyy,\n       xxa.pkxx as xxa_pkxx, xxb.pkxx as xxb_pkxx\nfrom yy\n     left join (SELECT * FROM yy where pkyy = 101) as yya ON yy.pkyy = yya.pkyy\n     left join xx xxa on yya.pkxx = xxa.pkxx\n     left join xx xxb on coalesce (xxa.pkxx, 1) = xxb.pkxx;\n\n--\n-- regression test for improper pushing of constants across outer-join clauses\n-- (as seen in early 8.2.x releases)\n--\n\n--Testcase 399:\ncreate foreign table zt1 (f1 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 400:\ncreate foreign table zt2 (f2 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 401:\ncreate foreign table zt3 (f3 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 146:\ninsert into zt1 values(53);\n--Testcase 147:\ninsert into zt2 values(53);\n\n--Testcase 148:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zt1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 402:\ncreate temp view zv1 as select *,'dummy'::text AS junk from zt1;\n\n--Testcase 149:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zv1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 505:\ndrop view zv1;\n\n--\n-- regression test for improper extraction of OR indexqual conditions\n-- (as seen in early 8.3.x releases)\n--\n\n--Testcase 150:\nselect a.unique2, a.ten, b.tenthous, b.unique2, b.hundred\nfrom tenk1 a left join tenk1 b on a.unique2 = b.tenthous\nwhere a.unique1 = 42 and\n      ((b.unique2 is null and a.ten = 2) or b.hundred = 3);\n\n--\n-- test proper positioning of one-time quals in EXISTS (8.4devel bug)\n--\n--Testcase 151:\nprepare foo(bool) as\n  select count(*) from tenk1 a left join tenk1 b\n    on (a.unique2 = b.unique1 and exists\n        (select 1 from tenk1 c where c.thousand = b.unique2 and $1));\n--Testcase 152:\nexecute foo(true);\n--Testcase 153:\nexecute foo(false);\n\n--\n-- test for sane behavior with noncanonical merge clauses, per bug #4926\n--\n\nbegin;\n\nset enable_mergejoin = 1;\nset enable_hashjoin = 0;\nset enable_nestloop = 0;\n\n--Testcase 403:\ncreate foreign table a1 (i integer) server sqlite_svr;\n--Testcase 404:\ncreate foreign table b1 (x integer, y integer) server sqlite_svr;\n\n--Testcase 154:\nselect * from a1 left join b1 on i = x and i = y and x = i;\n\nrollback;\n\n-- skip this test, sqlite fdw does not support customized type\n-- test handling of merge clauses using record_ops\n--\n--begin;\n\n--create type mycomptype as (id int, v bigint);\n\n--create foreign table tidv (idv mycomptype) server sqlite_svr;\n--create index on tidv (idv);\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--set enable_mergejoin = 0;\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--rollback;\n\n--\n-- test NULL behavior of whole-row Vars, per bug #5025\n--\n--Testcase 155:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join int8_tbl t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 156:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 157:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl offset 0) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 158:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join\n  (select q1, case when q2=1 then 1 else q2 end as q2 from int8_tbl) t2\n  on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--\n-- test incorrect failure to NULL pulled-up subexpressions\n--\nbegin;\n\n--Testcase 405:\ncreate foreign table a2 (\n     code char OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 406:\ncreate foreign table b2 (\n     a char OPTIONS (key 'true'),\n     num integer OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 407:\ncreate foreign table c2 (\n     name char OPTIONS (key 'true'),\n     a char\n) server sqlite_svr;\n\n--Testcase 159:\ninsert into a2 (code) values ('p');\n--Testcase 160:\ninsert into a2 (code) values ('q');\n--Testcase 161:\ninsert into b2 (a, num) values ('p', 1);\n--Testcase 162:\ninsert into b2 (a, num) values ('p', 2);\n--Testcase 163:\ninsert into c2 (name, a) values ('A', 'p');\n--Testcase 164:\ninsert into c2 (name, a) values ('B', 'q');\n--Testcase 165:\ninsert into c2 (name, a) values ('C', null);\n\n--Testcase 166:\nselect c2.name, ss.code, ss.b_cnt, ss.const\nfrom c2 left join\n  (select a2.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const\n   from a2 left join\n     (select count(1) as cnt, b2.a from b2 group by b2.a) as b_grp\n     on a2.code = b_grp.a\n  ) as ss\n  on (c2.a = ss.code)\norder by c2.name;\n\nrollback;\n\n--\n-- test incorrect handling of placeholders that only appear in targetlists,\n-- per bug #6154\n--\n--Testcase 408:\ncreate foreign table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id int options (key 'true')) server sqlite_svr;\n--Testcase 409:\ninsert into sub_tbl values (1, 1, 1, 2, 42);\n\n--Testcase 410:\nSELECT * FROM\n( SELECT key1 from sub_tbl) sub1\nLEFT JOIN\n( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl ) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n-- test the path using join aliases, too\n--Testcase 411:\nSELECT * FROM\n( SELECT key1 from sub_tbl ) sub1\nLEFT JOIN\n( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl ) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl ) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n--\n-- test case where a PlaceHolderVar is used as a nestloop parameter\n--\n\n--Testcase 167:\nEXPLAIN (COSTS OFF)\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--Testcase 168:\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--\n-- nested nestloops can require nested PlaceHolderVars\n--\n\n--Testcase 412:\ncreate foreign table nt1 (\n  id int OPTIONS (key 'true'),\n  a1 boolean,\n  a2 boolean\n) server sqlite_svr;\n--Testcase 413:\ncreate foreign table nt2 (\n  id int OPTIONS (key 'true'),\n  nt1_id int,\n  b1 boolean,\n  b2 boolean\n) server sqlite_svr;\n--Testcase 414:\ncreate foreign table nt3 (\n  id int OPTIONS (key 'true'),\n  nt2_id int,\n  c1 boolean\n) server sqlite_svr;\n\n--Testcase 169:\ninsert into nt1 values (1,true,true);\n--Testcase 170:\ninsert into nt1 values (2,true,false);\n--Testcase 171:\ninsert into nt1 values (3,false,false);\n--Testcase 172:\ninsert into nt2 values (1,1,true,true);\n--Testcase 173:\ninsert into nt2 values (2,2,true,false);\n--Testcase 174:\ninsert into nt2 values (3,3,false,false);\n--Testcase 175:\ninsert into nt3 values (1,1,true);\n--Testcase 176:\ninsert into nt3 values (2,2,false);\n--Testcase 177:\ninsert into nt3 values (3,3,true);\n\n--Testcase 178:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 179:\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--\n-- test case where a PlaceHolderVar is propagated into a subquery\n--\n\n--Testcase 180:\nexplain (costs off)\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--Testcase 181:\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--\n-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE\n--\n--Testcase 182:\nselect * from int4_tbl a full join int4_tbl b on true;\n--Testcase 183:\nselect * from int4_tbl a full join int4_tbl b on false;\n\n--\n-- test for ability to use a cartesian join when necessary\n--\n--Testcase 415:\ncreate foreign table q1(i int) server sqlite_svr;\n--Testcase 416:\ninsert into q1 values (1);\n--Testcase 417:\ncreate foreign table q2(i int) server sqlite_svr;\n--Testcase 418:\ninsert into q2 values (0);\n--Testcase 184:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere q1.i = thousand or q2.i = thousand;\n\n--Testcase 185:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere thousand = (q1.i + q2.i);\n\n--\n-- test ability to generate a suitable plan for a star-schema query\n--\n\n--Testcase 186:\nexplain (costs off)\nselect * from\n  tenk1, int8_tbl a, int8_tbl b\nwhere thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2;\n\n--\n-- test a corner case in which we shouldn't apply the star-schema optimization\n--\n\n--Testcase 187:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 188:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- variant that isn't quite a star-schema case\n\n--Testcase 189:\nselect ss1.d1 from\n  tenk1 as t1\n  inner join tenk1 as t2\n  on t1.tenthous = t2.ten\n  inner join\n    int8_tbl as i8\n    left join int4_tbl as i4\n      inner join (select 64::information_schema.cardinal_number as d1\n                  from tenk1 t3,\n                       lateral (select abs(t3.unique1) + random()) ss0(x)\n                  where t3.fivethous < 0) as ss1\n      on i4.f1 = ss1.d1\n    on i8.q1 = i4.f1\n  on t1.tenthous = ss1.d1\nwhere t1.unique1 < i4.f1;\n\n-- this variant is foldable by the remove-useless-RESULT-RTEs code\n\n--Testcase 419:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 420:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- Here's a variant that we can't fold too aggressively, though,\n-- or we end up with noplace to evaluate the lateral PHV\n\n--Testcase 421:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x from sub_tbl) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n--Testcase 422:\nselect * from\n  (select key1 as x from sub_tbl as x) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n  \n--\n-- test inlining of immutable functions\n--\n--Testcase 423:\ncreate function f_immutable_int4(i integer) returns integer as\n$$ begin return i; end; $$ language plpgsql immutable;\n\n-- check optimization of function scan with join\n--Testcase 424:\nexplain (costs off)\nselect unique1 from tenk1, (select * from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 425:\nexplain (verbose, costs off)\nselect unique1, x.*\nfrom tenk1, (select *, random() from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 426:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = unique1;\n\n--Testcase 427:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1;\n\n--Testcase 428:\nexplain (costs off)\nselect unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 429:\nexplain (costs off)\nselect unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 430:\nexplain (costs off)\nselect unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 431:\nexplain (costs off)\nselect unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x;\n\n-- check that pullup of a const function allows further const-folding\n--Testcase 432:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = 42;\n\n-- test inlining of immutable functions with PlaceHolderVars\n--Testcase 433:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 or i4 = 42) AS b3\n     from nt2 as nt2\n       left join\n         f_immutable_int4(0) i4\n         on i4 = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 434:\ndrop function f_immutable_int4(int);\n\n-- test inlining when function returns composite\n\n--Testcase 435:\ncreate function mki8(bigint, bigint) returns int8_tbl as\n$$select row($1,$2)::int8_tbl$$ language sql;\n\n--Testcase 436:\ncreate function mki4(int) returns int4_tbl as\n$$select row($1)::int4_tbl$$ language sql;\n\n--Testcase 437:\nexplain (verbose, costs off)\nselect * from mki8(1,2);\n--Testcase 438:\nselect * from mki8(1,2);\n\n--Testcase 439:\nexplain (verbose, costs off)\nselect * from mki4(42);\n--Testcase 440:\nselect * from mki4(42);\n\n--Testcase 441:\ndrop function mki8(bigint, bigint);\n--Testcase 442:\ndrop function mki4(int);\n\n--\n-- test extraction of restriction OR clauses from join OR clause\n-- (we used to only do this for indexable clauses)\n--\n\n--Testcase 190:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4);\n--Testcase 191:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4);\n--Testcase 192:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or\n  ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4);\n\n--\n-- test placement of movable quals in a parameterized join tree\n--\n\n--Testcase 193:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 194:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 195:\nexplain (costs off)\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 196:\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 197:\nexplain (costs off)\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 198:\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 199:\nexplain (costs off)\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 200:\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 201:\nexplain (costs off)\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--Testcase 202:\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--\n-- test handling of potential equivalence clauses above outer joins\n--\n\n--Testcase 203:\nexplain (costs off)\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 204:\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 205:\nexplain (costs off)\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--Testcase 206:\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--\n-- another case with equivalence clauses above outer joins (bug #8591)\n--\n\n--Testcase 207:\nexplain (costs off)\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--Testcase 208:\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--\n-- check handling of join aliases when flattening multiple levels of subquery\n--\n\n--Testcase 209:\nexplain (verbose, costs off)\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--Testcase 210:\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--\n-- test successful handling of nested outer joins with degenerate join quals\n--\n--Testcase 443:\ncreate foreign table text_tbl(f1 text) server sqlite_svr;\n\n--Testcase 211:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 212:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 213:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 214:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 215:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 216:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 217:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--Testcase 218:\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--\n-- test for appropriate join order in the presence of lateral references\n--\n\n--Testcase 219:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 220:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 221:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 222:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 223:\nexplain (verbose, costs off)\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 224:\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--\n-- check a case in which a PlaceHolderVar forces join order\n--\n\n--Testcase 225:\nexplain (verbose, costs off)\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--Testcase 226:\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--\n-- test successful handling of full join underneath left join (bug #14105)\n--\n\n--Testcase 227:\nexplain (costs off)\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--Testcase 228:\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--\n-- test ability to push constants through outer join clauses\n--\n\n--Testcase 229:\nexplain (costs off)\n  select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0;\n\n--Testcase 230:\nexplain (costs off)\n  select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42;\n\n--\n-- test that quals attached to an outer join have correct semantics,\n-- specifically that they don't re-use expressions computed below the join;\n-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input\n--\n\nset enable_hashjoin to off;\nset enable_nestloop to off;\n\n--Testcase 231:\nexplain (verbose, costs off)\n  select a.q2, b.q1\n    from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n    where coalesce(b.q1, 1) > 0;\n--Testcase 232:\nselect a.q2, b.q1\n  from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n  where coalesce(b.q1, 1) > 0;\n\nreset enable_hashjoin;\nreset enable_nestloop;\n\n--\n-- test join removal\n--\n\nbegin;\n\n--Testcase 444:\nCREATE FOREIGN TABLE a3 (id int OPTIONS (key 'true'), b_id int) SERVER sqlite_svr;\n--Testcase 445:\nCREATE FOREIGN TABLE b3 (id int OPTIONS (key 'true'), c_id int) SERVER sqlite_svr;\n--Testcase 446:\nCREATE FOREIGN TABLE c3 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 447:\nCREATE FOREIGN TABLE d3 (a int, b int) SERVER sqlite_svr;\n--Testcase 233:\nINSERT INTO a3 VALUES (0, 0), (1, NULL);\n--Testcase 234:\nINSERT INTO b3 VALUES (0, 0), (1, NULL);\n--Testcase 235:\nINSERT INTO c3 VALUES (0), (1);\n--Testcase 236:\nINSERT INTO d3 VALUES (1,3), (2,2), (3,1);\n\n-- all three cases should be optimizable into a3 simple seqscan\n--Testcase 237:\nexplain (costs off) SELECT a3.* FROM a3 LEFT JOIN b3 ON a3.b_id = b3.id;\n--Testcase 238:\nexplain (costs off) SELECT b3.* FROM b3 LEFT JOIN c3 ON b3.c_id = c3.id;\n--Testcase 239:\nexplain (costs off)\n  SELECT a3.* FROM a3 LEFT JOIN (b3 left join c3 on b3.c_id = c3.id)\n  ON (a3.b_id = b3.id);\n\n-- check optimization of outer join within another special join\n--Testcase 240:\nexplain (costs off)\nselect id from a3 where id in (\n\tselect b3.id from b3 left join c3 on b3.id = c3.id\n);\n\n-- check that join removal works for a left join when joining a subquery\n-- that is guaranteed to be unique by its GROUP BY clause\n--Testcase 241:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 242:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- join removal is not possible when the GROUP BY contains a column that is\n-- not in the join condition.  (Note: as of 9.6, we notice that b3.id is a\n-- primary key and so drop b3.c_id from the GROUP BY of the resulting plan;\n-- but this happens too late for join removal in the outer plan level.)\n--Testcase 243:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 244:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id;\n\n-- check join removal works when uniqueness of the join condition is enforced\n-- by a UNION\n--Testcase 245:\nexplain (costs off)\nselect d3.* from d3 left join (select id from a3 union select id from b3) s\n  on d3.a = s.id;\n\n-- check join removal with a cross-type comparison operator\n--Testcase 246:\nexplain (costs off)\nselect i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4\n  on i8.q1 = i4.f1;\n\n-- check join removal with lateral references\n--Testcase 247:\nexplain (costs off)\nselect 1 from (select a3.id FROM a3 left join b3 on a3.b_id = b3.id) q,\n\t\t\t  lateral generate_series(1, q.id) gs(i) where q.id = gs.i;\n\nrollback;\n\n--Testcase 448:\ncreate foreign table parent (k int options (key 'true'), pd int) server sqlite_svr;\n--Testcase 449:\ncreate foreign table child (k int options (key 'true'), cd int) server sqlite_svr;\n--Testcase 248:\ninsert into parent values (1, 10), (2, 20), (3, 30);\n--Testcase 249:\ninsert into child values (1, 100), (4, 400);\n\n-- this case is optimizable\n--Testcase 250:\nselect p.* from parent p left join child c on (p.k = c.k);\n--Testcase 251:\nexplain (costs off)\n  select p.* from parent p left join child c on (p.k = c.k);\n\n-- this case is not\n--Testcase 252:\nselect p.*, linked from parent p\n  left join (select c.*, true as linked from child c) as ss\n  on (p.k = ss.k);\n--Testcase 253:\nexplain (costs off)\n  select p.*, linked from parent p\n    left join (select c.*, true as linked from child c) as ss\n    on (p.k = ss.k);\n\n-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling\n--Testcase 254:\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n--Testcase 255:\nexplain (costs off)\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n\n--Testcase 256:\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n--Testcase 257:\nexplain (costs off)\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n\n-- bug 5255: this is not optimizable by join removal\nbegin;\n\n--Testcase 450:\nCREATE FOREIGN TABLE a4 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 451:\nCREATE FOREIGN TABLE b4 (id int OPTIONS (key 'true'), a_id int) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO a4 VALUES (0), (1);\n--Testcase 259:\nINSERT INTO b4 VALUES (0, 0), (1, NULL);\n\n--Testcase 260:\nSELECT * FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n--Testcase 261:\nSELECT b4.* FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n\nrollback;\n\n-- another join removal bug: this is not optimizable, either\nbegin;\n\n--Testcase 452:\ncreate foreign table innertab (id int8 options (key 'true'), dat1 int8) server sqlite_svr;\n--Testcase 262:\ninsert into innertab values(123, 42);\n\n--Testcase 263:\nSELECT * FROM\n    (SELECT 1 AS x) ss1\n  LEFT JOIN\n    (SELECT q1, q2, COALESCE(dat1, q1) AS y\n     FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2\n  ON true;\n\nrollback;\n\n-- another join removal bug: we must clean up correctly when removing a PHV\nbegin;\n\n--Testcase 453:\ncreate foreign table uniquetbl (f1 text) server sqlite_svr;\n\n--Testcase 264:\nexplain (costs off)\nselect t1.* from\n  uniquetbl as t1\n  left join (select *, '***'::text as d1 from uniquetbl) t2\n  on t1.f1 = t2.f1\n  left join uniquetbl t3\n  on t2.d1 = t3.f1;\n\n--Testcase 265:\nexplain (costs off)\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\n--Testcase 266:\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\nrollback;\n\n-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs\n\n--Testcase 267:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error\n--Testcase 268:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error\n--Testcase 269:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok\n\n--\n-- Test hints given on incorrect column references are useful\n--\n\n--Testcase 270:\nselect t1.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t1\" suggestion\n--Testcase 271:\nselect t2.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t2\" suggestion\n--Testcase 272:\nselect uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once\n\n--\n-- Take care to reference the correct RTE\n--\n\n--Testcase 454:\nselect atts.relid::regclass, s.* from pg_stats s join\n    pg_attribute a on s.attname = a.attname and s.tablename =\n    a.attrelid::regclass::text join (select unnest(indkey) attnum,\n    indexrelid from pg_index i) atts on atts.attnum = a.attnum where\n    schemaname != 'pg_catalog';\n\n--\n-- Test LATERAL\n--\n\n--Testcase 273:\nselect unique2, x.*\nfrom tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 274:\nexplain (costs off)\n  select unique2, x.*\n  from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 275:\nselect unique2, x.*\nfrom int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 276:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 277:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 278:\nselect unique2, x.*\nfrom int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n--Testcase 279:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n\n-- check scoping of lateral versus parent references\n-- the first of these should return int8_tbl.q2, the second int8_tbl.q1\n--Testcase 280:\nselect *, (select r from (select q1 as q2) x, (select q2 as r) y) from int8_tbl;\n--Testcase 281:\nselect *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl;\n\n-- lateral with function in FROM\n--Testcase 282:\nselect count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 283:\nexplain (costs off)\n  select count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 284:\nexplain (costs off)\n  select count(*) from tenk1 a cross join lateral generate_series(1,two) g;\n-- don't need the explicit LATERAL keyword for functions\n--Testcase 285:\nexplain (costs off)\n  select count(*) from tenk1 a, generate_series(1,two) g;\n\n-- lateral with UNION ALL subselect\n--Testcase 286:\nexplain (costs off)\n  select * from generate_series(100,200) g,\n    lateral (select * from int8_tbl a where g = q1 union all\n             select * from int8_tbl b where g = q2) ss;\n--Testcase 287:\nselect * from generate_series(100,200) g,\n  lateral (select * from int8_tbl a where g = q1 union all\n           select * from int8_tbl b where g = q2) ss;\n\n-- lateral with VALUES\n--Testcase 288:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n--Testcase 289:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral with VALUES, no flattening possible\n--Testcase 290:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n--Testcase 291:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral injecting a strange outer join condition\n--Testcase 292:\nexplain (costs off)\n  select * from int8_tbl a,\n    int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n      on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n--Testcase 293:\nselect * from int8_tbl a,\n  int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n    on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n\n-- lateral reference to a join alias variable\n--Testcase 294:\nselect * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (select x) ss2(y);\n--Testcase 295:\nselect * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (values(x)) ss2(y);\n--Testcase 296:\nselect * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j,\n  lateral (select x) ss2(y);\n\n-- lateral references requiring pullup\n--Testcase 297:\nselect * from (values(1)) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 298:\nselect * from (select f1/1000000000 from int4_tbl) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 299:\nselect * from (values(1)) x(lb),\n  lateral (values(lb)) y(lbcopy);\n--Testcase 300:\nselect * from (values(1)) x(lb),\n  lateral (select lb from int4_tbl) y(lbcopy);\n--Testcase 301:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2);\n--Testcase 302:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 303:\nselect x.* from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 304:\nselect v.* from\n  (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 305:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 307:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy);\n\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 455:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 456:\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 457:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 458:\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n\n-- lateral can result in join conditions appearing below their\n-- real semantic level\n--Testcase 308:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 309:\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 310:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 311:\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 312:\nexplain (verbose, costs off)\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n--Testcase 313:\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n\n-- lateral reference in a PlaceHolderVar evaluated at join level\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 459:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n--Testcase 460:\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n\n-- case requiring nested PlaceHolderVars\n--Testcase 461:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl c left join (\n    int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select ss2.y offset 0) ss3;\n\n-- case that breaks the old ph_may_need optimization\n--Testcase 462:\nexplain (verbose, costs off)\nselect c.*,a.*,ss1.q1,ss2.q1,ss3.* from\n  int8_tbl c left join (\n    int8_tbl a left join\n      (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2\n       where q1 < f1) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select * from int4_tbl i where ss2.y > f1) ss3;\n\n-- check processing of postponed quals (bug #9041)\n--Testcase 463:\ndelete from sub_tbl;\n--Testcase 464:\ninsert into sub_tbl values (1, 2, 3, 4, 5);\n--Testcase 465:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x  from sub_tbl offset 0) x cross join (select key3 as y from sub_tbl offset 0) y\n  left join lateral (\n    select * from (select key5 as z from sub_tbl offset 0) z where z.z = x.x\n  ) zz on zz.z = y.y;\n\n-- check dummy rels with lateral references (bug #15694)\n--Testcase 466:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl where false) ss on true;\n--Testcase 467:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true;\n\n-- check handling of nested appendrels inside LATERAL\n--Testcase 468:\nselect * from\n  ((select key3 as v from sub_tbl) union all (select key5 as v from sub_tbl)) as q1\n  cross join lateral\n  ((select * from\n      ((select key6 as v from sub_tbl) union all (select value1 as v from sub_tbl)) as q3)\n   union all\n   (select q1.v)\n  ) as q2;\n\n-- check we don't try to do a unique-ified semijoin with LATERAL\n--Testcase 314:\nexplain (verbose, costs off)\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n--Testcase 315:\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n\n-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue,\n-- but we can make the test case much more compact with LATERAL)\n--Testcase 316:\nexplain (verbose, costs off)\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n--Testcase 317:\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n-- test some error cases where LATERAL should have been used but wasn't\n--Testcase 318:\nselect f1,g from int4_tbl a, (select f1 as g) ss;\n--Testcase 319:\nselect f1,g from int4_tbl a, (select a.f1 as g) ss;\n--Testcase 320:\nselect f1,g from int4_tbl a cross join (select f1 as g) ss;\n--Testcase 321:\nselect f1,g from int4_tbl a cross join (select a.f1 as g) ss;\n-- SQL:2008 says the left table is in scope but illegal to access here\n--Testcase 322:\nselect f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true;\n--Testcase 323:\nselect f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true;\n-- check we complain about ambiguous table references\n--Testcase 324:\nselect * from\n  int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss);\n-- LATERAL can be used to put an aggregate into the FROM clause of its query\n--Testcase 325:\nselect 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss;\n\n-- check behavior of LATERAL in UPDATE/DELETE\n\n--Testcase 469:\ncreate temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl;\n\n-- error, can't do this:\n--Testcase 326:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss;\n--Testcase 327:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss;\n-- can't do it even with LATERAL:\n--Testcase 328:\nupdate xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss;\n-- we might in future allow something like this, but for now it's an error:\n--Testcase 329:\nupdate xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- also errors:\n--Testcase 330:\ndelete from xx1 using (select * from int4_tbl where f1 = x1) ss;\n--Testcase 331:\ndelete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss;\n--Testcase 332:\ndelete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- Skip this test, sqlite fdw does not support to create partition table\n-- test LATERAL reference propagation down a multi-level inheritance hierarchy\n-- produced for a multi-level partitioned table hierarchy.\n--\n--create table join_pt1 (a int, b int, c varchar) partition by range(a);\n--create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b);\n--create table join_pt1p2 partition of join_pt1 for values from (100) to (200);\n--create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100);\n--insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y');\n--create table join_ut1 (a int, b int, c varchar);\n--insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z');\n--explain (verbose, costs off)\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n\n--drop table join_pt1;\n--drop table join_ut1;\n\n--\n-- test that foreign key join estimation performs sanely for outer joins\n--\n\nbegin;\n\n--Testcase 470:\ncreate foreign table fkest (a int options (key 'true'), b int options (key 'true'), c int) server sqlite_svr;\n--Testcase 471:\ncreate foreign table fkest1 (a int options (key 'true'), b int options (key 'true')) server sqlite_svr;\n\n--Testcase 333:\ninsert into fkest select x/10, x%10, x from generate_series(1,1000) x;\n--Testcase 334:\ninsert into fkest1 select x/10, x%10 from generate_series(1,1000) x;\n\n--alter table fkest1\n--  add constraint fkest1_a_b_fkey foreign key (a,b) references fkest;\n\n--analyze fkest;\n--analyze fkest1;\n\n--Testcase 335:\nexplain (costs off)\nselect *\nfrom fkest f\n  left join fkest1 f1 on f.a = f1.a and f.b = f1.b\n  left join fkest1 f2 on f.a = f2.a and f.b = f2.b\n  left join fkest1 f3 on f.a = f3.a and f.b = f3.b\nwhere f.c = 1;\n\nrollback;\n\n--\n-- test planner's ability to mark joins as unique\n--\n\n--Testcase 472:\ncreate foreign table j11 (id int options (key 'true')) server sqlite_svr;\n--Testcase 473:\ncreate foreign table j21 (id int options (key 'true')) server sqlite_svr;\n--Testcase 474:\ncreate foreign table j31 (id int) server sqlite_svr;\n\n--Testcase 336:\ninsert into j11 values(1),(2),(3);\n--Testcase 337:\ninsert into j21 values(1),(2),(3);\n--Testcase 338:\ninsert into j31 values(1),(1);\n\n-- ensure join is properly marked as unique\n--Testcase 339:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id = j21.id;\n\n-- ensure join is not unique when not an equi-join\n--Testcase 340:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id > j21.id;\n\n-- ensure non-unique rel is not chosen as inner\n--Testcase 341:\nexplain (verbose, costs off)\nselect * from j11 inner join j31 on j11.id = j31.id;\n\n-- ensure left join is marked as unique\n--Testcase 342:\nexplain (verbose, costs off)\nselect * from j11 left join j21 on j11.id = j21.id;\n\n-- ensure right join is marked as unique\n--Testcase 343:\nexplain (verbose, costs off)\nselect * from j11 right join j21 on j11.id = j21.id;\n\n-- ensure full join is marked as unique\n--Testcase 344:\nexplain (verbose, costs off)\nselect * from j11 full join j21 on j11.id = j21.id;\n\n-- a clauseless (cross) join can't be unique\n--Testcase 345:\nexplain (verbose, costs off)\nselect * from j11 cross join j21;\n\n-- ensure a natural join is marked as unique\n--Testcase 346:\nexplain (verbose, costs off)\nselect * from j11 natural join j21;\n\n-- ensure a distinct clause allows the inner to become unique\n--Testcase 347:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select distinct id from j31) j31 on j11.id = j31.id;\n\n-- ensure group by clause allows the inner to become unique\n--Testcase 348:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select id from j31 group by id) j31 on j11.id = j31.id;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- test more complex permutations of unique joins\n\n--Testcase 475:\ncreate foreign table j12 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 476:\ncreate foreign table j22 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 477:\ncreate foreign table j32 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n\n--Testcase 349:\ninsert into j12 values(1,1),(1,2);\n--Testcase 350:\ninsert into j22 values(1,1);\n--Testcase 351:\ninsert into j32 values(1,1);\n\n--analyze j1;\n--analyze j2;\n--analyze j3;\n\n-- ensure there's no unique join when not all columns which are part of the\n-- unique index are seen in the join clause\n--Testcase 352:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1;\n\n-- ensure proper unique detection with multiple join quals\n--Testcase 353:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2;\n\n-- ensure we don't detect the join to be unique when quals are not part of the\n-- join condition\n--Testcase 354:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- as above, but for left joins.\n--Testcase 355:\nexplain (verbose, costs off)\nselect * from j12\nleft join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- validate logic in merge joins which skips mark and restore.\n-- it should only do this if all quals which were used to detect the unique\n-- are present as join quals, and not plain quals.\nset enable_nestloop to 0;\nset enable_hashjoin to 0;\nset enable_sort to 0;\n-- skip, cannot create index on foreign table\n-- create indexes that will be preferred over the PKs to perform the join\n--create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;\n--create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;\n-- need an additional row in j2, if we want j2_id1_idx to be preferred\n--Testcase 478:\ninsert into j22 values(1,2);\n--analyze j2;\n\n--Testcase 356:\nexplain (costs off) select * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n--Testcase 357:\nselect * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n-- Exercise array keys mark/restore B-Tree code\n--Testcase 479:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n--Testcase 480:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n-- Exercise array keys \"find extreme element\" B-Tree code\n--Testcase 481:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 482:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\nreset enable_nestloop;\nreset enable_hashjoin;\nreset enable_sort;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- check that semijoin inner is not seen as unique for a portion of the outerrel\n--Testcase 483:\nCREATE FOREIGN TABLE onek (\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 358:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from tenk1 t3\n              where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n-- ... unless it actually is unique\n--Testcase 484:\ncreate table j3 as select unique1, tenthous from onek;\nvacuum analyze j3;\n--Testcase 485:\ncreate unique index on j3(unique1, tenthous);\n\n--Testcase 359:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from j3\n              where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n--Testcase 486:\ndrop table j3;\n\n--Testcase 506:\nDELETE FROM INT4_TBL;\n--Testcase 507:\nDELETE FROM INT8_TBL;\n--Testcase 508:\nDELETE FROM FLOAT8_TBL;\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 487:\nDROP SERVER sqlite_svr;\n--Testcase 488:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/limit.sql",
    "content": "--\n-- LIMIT\n-- Check the LIMIT/OFFSET feature of SELECT\n--\n--Testcase 27:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 28:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 29:\nCREATE FOREIGN TABLE onek(\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 30:\nCREATE FOREIGN TABLE int8_tbl(q1 int8 OPTIONS (key 'true'), q2 int8) SERVER sqlite_svr;\n--Testcase 104:\nINSERT INTO int8_tbl VALUES('  123   ','  456');\n--Testcase 105:\nINSERT INTO int8_tbl VALUES('123   ','4567890123456789');\n--Testcase 106:\nINSERT INTO int8_tbl VALUES('4567890123456789','123');\n--Testcase 107:\nINSERT INTO int8_tbl VALUES(+4567890123456789,'4567890123456789');\n--Testcase 108:\nINSERT INTO int8_tbl VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 31:\nCREATE FOREIGN TABLE INT8_TMP(\n        q1 int8,\n        q2 int8,\n        q3 int4,\n        q4 int2,\n        q5 text,\n        id int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 32:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 88:\nCREATE TABLE parent_table (\n\tunique1\t\tint4 PRIMARY KEY,\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\n--Testcase 89:\nCREATE FOREIGN table inherited_table ()\nINHERITS (parent_table)\nSERVER sqlite_svr options (table 'tenk1');\n\n--Testcase 1:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tORDER BY unique1 LIMIT 2;\n--Testcase 2:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 3:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60 AND unique1 < 63\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 4:\nSELECT ''::text AS three, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 100\n\t\tORDER BY unique1 LIMIT 3 OFFSET 20;\n--Testcase 5:\nSELECT ''::text AS zero, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 8 OFFSET 99;\n--Testcase 6:\nSELECT ''::text AS eleven, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 20 OFFSET 39;\n--Testcase 7:\nSELECT ''::text AS ten, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990;\n--Testcase 8:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990 LIMIT 5;\n--Testcase 9:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 LIMIT 5 OFFSET 900;\n\n-- Test null limit and offset.  The planner would discard a simple null\n-- constant, so to ensure executor is exercised, do this:\n--Testcase 10:\nselect * from int8_tbl limit (case when random() < 0.5 then null::bigint end);\n--Testcase 11:\nselect * from int8_tbl offset (case when random() < 0.5 then null::bigint end);\n\n-- Test assorted cases involving backwards fetch from a LIMIT plan node\nbegin;\n\ndeclare c1 scroll cursor for select * from int8_tbl order by q1 limit 10;\n--Testcase 12:\nfetch all in c1;\n--Testcase 13:\nfetch 1 in c1;\n--Testcase 14:\nfetch backward 1 in c1;\n--Testcase 33:\nfetch backward all in c1;\n--Testcase 34:\nfetch backward 1 in c1;\n--Testcase 35:\nfetch all in c1;\n\ndeclare c2 scroll cursor for select * from int8_tbl limit 3;\n--Testcase 36:\nfetch all in c2;\n--Testcase 37:\nfetch 1 in c2;\n--Testcase 38:\nfetch backward 1 in c2;\n--Testcase 39:\nfetch backward all in c2;\n--Testcase 40:\nfetch backward 1 in c2;\n--Testcase 41:\nfetch all in c2;\n\ndeclare c3 scroll cursor for select * from int8_tbl offset 3;\n--Testcase 42:\nfetch all in c3;\n--Testcase 43:\nfetch 1 in c3;\n--Testcase 44:\nfetch backward 1 in c3;\n--Testcase 45:\nfetch backward all in c3;\n--Testcase 46:\nfetch backward 1 in c3;\n--Testcase 47:\nfetch all in c3;\n\ndeclare c4 scroll cursor for select * from int8_tbl offset 10;\n--Testcase 48:\nfetch all in c4;\n--Testcase 49:\nfetch 1 in c4;\n--Testcase 50:\nfetch backward 1 in c4;\n--Testcase 51:\nfetch backward all in c4;\n--Testcase 52:\nfetch backward 1 in c4;\n--Testcase 53:\nfetch all in c4;\n\ndeclare c5 scroll cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;\n--Testcase 54:\nfetch all in c5;\n--Testcase 55:\nfetch 1 in c5;\n--Testcase 56:\nfetch backward 1 in c5;\n--Testcase 57:\nfetch backward 1 in c5;\n--Testcase 58:\nfetch all in c5;\n--Testcase 59:\nfetch backward all in c5;\n--Testcase 60:\nfetch all in c5;\n--Testcase 61:\nfetch backward all in c5;\n\nrollback;\n\n-- Stress test for variable LIMIT in conjunction with bounded-heap sorting\n--Testcase 62:\nDELETE FROM INT8_TMP;\n--Testcase 63:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series(1,10) q1;\n\n--Testcase 64:\nSELECT\n  (SELECT s.q1 \n     FROM (VALUES (1)) AS x,\n          (SELECT q1 FROM INT8_TMP as n \n             ORDER BY q1 LIMIT 1 OFFSET s.q1-1) AS y) AS z\n  FROM INT8_TMP AS s;\n\n--\n-- Test behavior of volatile and set-returning functions in conjunction\n-- with ORDER BY and LIMIT.\n--\n\n--Testcase 65:\ncreate temp sequence testseq;\n\n--Testcase 15:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 16:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 90:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 91:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 17:\nselect currval('testseq');\n\n--Testcase 92:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n--Testcase 93:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n\n--Testcase 94:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 95:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 96:\nselect currval('testseq');\n\n--Testcase 18:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 19:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 97:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 98:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 20:\nselect currval('testseq');\n\n-- test for limit and offset when querying table and foreign table inherited\n--Testcase 99:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n--Testcase 100:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n-- when querying regular tables with inherited tables, only limit is pushed-down when no offset is specified\n--Testcase 101:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 102:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 103:\nselect currval('testseq');\n\n--Testcase 21:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 22:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 23:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n--Testcase 24:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n-- use of random() is to keep planner from folding the expressions together\n--Testcase 66:\nDELETE FROM INT8_TMP;\n--Testcase 67:\nINSERT INTO INT8_TMP VALUES (generate_series(0,2), generate_series((random()*.1)::int,2));\n--Testcase 68:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp;\n\n--Testcase 69:\nselect q1, q2 from int8_tmp;\n\n--Testcase 70:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp order by q2 desc;\n\n--Testcase 71:\nselect q1, q2 from int8_tmp order by q2 desc;\n\n-- test for failure to set all aggregates' aggtranstype\n--Testcase 25:\nexplain (verbose, costs off)\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--Testcase 26:\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--\n-- FETCH FIRST\n-- Check the WITH TIES clause\n--\n\n--Testcase 72:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW WITH TIES;\n\n--Testcase 73:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST ROWS WITH TIES;\n\n--Testcase 74:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES;\n\n--Testcase 75:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW ONLY;\n\n-- should fail\n--Testcase 76:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tFETCH FIRST 2 ROW WITH TIES;\n\n-- test ruleutils\n--Testcase 77:\nCREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;\n--Testcase 78:\n\\d+ limit_thousand_v_1\n--Testcase 79:\nCREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;\n--Testcase 80:\n\\d+ limit_thousand_v_2\n--Testcase 81:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS WITH TIES;\t\t-- fails\n--Testcase 82:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;\n--Testcase 83:\n\\d+ limit_thousand_v_3\n--Testcase 84:\nCREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS ONLY;\n--Testcase 85:\n\\d+ limit_thousand_v_4\n-- leave these views\n\n--Testcase 109:\nDELETE FROM int8_tbl;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name\n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 86:\nDROP SERVER sqlite_svr;\n--Testcase 87:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/prepare.sql",
    "content": "-- Regression tests for prepareable statements. We query the content\n-- of the pg_prepared_statements view as prepared statements are\n-- created and removed.\n--Testcase 26:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 27:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 28:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 29:\nCREATE FOREIGN TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n) SERVER sqlite_svr;\n\n--Testcase 30:\ncreate foreign table road_tmp (a int, b int, id int options (key 'true')) server sqlite_svr;\n--Testcase 31:\ninsert into road_tmp values (1, 2);\n\n--Testcase 1:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n--Testcase 2:\nPREPARE q1 AS SELECT a FROM road_tmp;\n--Testcase 3:\nEXECUTE q1;\n\n--Testcase 4:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- should fail\n--Testcase 5:\nPREPARE q1 AS SELECT b FROM road_tmp;\n\n-- should succeed\nDEALLOCATE q1;\n--Testcase 6:\nPREPARE q1 AS SELECT b FROM road_tmp;\n--Testcase 7:\nEXECUTE q1;\n\n--Testcase 8:\nPREPARE q2 AS SELECT b FROM road_tmp;\n--Testcase 9:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- sql92 syntax\nDEALLOCATE PREPARE q1;\n\n--Testcase 10:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\nDEALLOCATE PREPARE q2;\n-- the view should return the empty set again\n--Testcase 11:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- parameterized queries\n--Testcase 12:\nPREPARE q2(text) AS\n\tSELECT datname, datistemplate, datallowconn\n\tFROM pg_database WHERE datname = $1;\n\n--Testcase 13:\nEXECUTE q2('postgres');\n\n--Testcase 14:\nPREPARE q3(text, int, float, boolean, smallint) AS\n\tSELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR\n\tten = $3::bigint OR true = $4 OR odd = $5::int)\n\tORDER BY unique1;\n\n--Testcase 15:\nEXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 4::bigint);\n\n-- too few params\n--Testcase 16:\nEXECUTE q3('bool');\n\n-- too many params\n--Testcase 17:\nEXECUTE q3('bytea', 5::smallint, 10.5::float, false, 4::bigint, true);\n\n-- wrong param types\n--Testcase 18:\nEXECUTE q3(5::smallint, 10.5::float, false, 4::bigint, 'bytea');\n\n-- invalid type\n--Testcase 19:\nPREPARE q4(nonexistenttype) AS SELECT * FROM road WHERE name = $1;\n\n-- create table as execute\n--Testcase 20:\nPREPARE q5(int, text) AS\n\tSELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2\n\tORDER BY unique1;\n--Testcase 32:\nCREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');\n--Testcase 21:\nSELECT * FROM q5_prep_results;\n--Testcase 33:\nCREATE TEMPORARY TABLE q5_prep_nodata AS EXECUTE q5(200, 'DTAAAA')\n    WITH NO DATA;\n--Testcase 34:\nSELECT * FROM q5_prep_nodata;\n\n-- unknown or unspecified parameter types: should succeed\n--Testcase 22:\nPREPARE q6 AS\n    SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;\n--Testcase 23:\nPREPARE q7(unknown) AS\n    SELECT * FROM road WHERE thepath = $1;\n\n--Testcase 24:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n-- test DEALLOCATE ALL;\nDEALLOCATE ALL;\n--Testcase 25:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n--Testcase 35:\nDROP FOREIGN TABLE tenk1;\n--Testcase 36:\nDROP FOREIGN TABLE road;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/select.sql",
    "content": "--\n-- SELECT\n--\n--Testcase 43:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 44:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 45:\nCREATE FOREIGN TABLE onek (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 46:\nCREATE FOREIGN TABLE onek2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 47:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 73:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 74:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 75:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 76:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 77:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 48:\nCREATE FOREIGN TABLE person (\n  name    text,\n  age     int4,\n  location  point\n) SERVER sqlite_svr;\n\n-- btree index\n-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 1:\nSELECT * FROM onek\n   WHERE onek.unique1 < 10\n   ORDER BY onek.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 2:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 3:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY stringu1 using <;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1d -2 +0nr -1\n--\n--Testcase 4:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using <, unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1dr -2 +0n -1\n--\n--Testcase 5:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using >, unique1 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0nr -1 +1d -2\n--\n--Testcase 6:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >, string4 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0n -1 +1dr -2\n--\n--Testcase 7:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using <, string4 using >;\n\n--\n-- test partial btree indexes\n--\n-- As of 7.2, planner probably won't pick an indexscan without stats,\n-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan\n-- followed by sort, because that could hide index ordering problems.\n--\n--ANALYZE onek2;\n\nSET enable_seqscan TO off;\nSET enable_bitmapscan TO off;\nSET enable_sort TO off;\n\n--\n-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 8:\nSELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10 order by onek2.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 9:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n    WHERE onek2.unique1 < 20\n    ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 10:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n   WHERE onek2.unique1 > 980 ORDER BY onek2.unique1;\n\nRESET enable_seqscan;\nRESET enable_bitmapscan;\nRESET enable_sort;\n\n\n--Testcase 11:\nSELECT two, stringu1, ten, string4\n   INTO TABLE tmp\n   FROM onek;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data\n--\n-- SELECT name, age FROM person*; ??? check if different\n--Testcase 12:\nSELECT p.name, p.age FROM person* p;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |\n-- sort +1nr -2\n--\n--Testcase 13:\nSELECT p.name, p.age FROM person* p ORDER BY age using >, name;\n\n--\n-- Test some cases involving whole-row Var referencing a subquery\n--\n--Testcase 49:\nselect foo from (select 1 offset 0) as foo;\n--Testcase 50:\nselect foo from (select null offset 0) as foo;\n--Testcase 51:\nselect foo from (select 'xyzzy',1,null offset 0) as foo;\n\n--\n-- Test VALUES lists\n--\n--Testcase 14:\nselect * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)\n    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;\n\n-- a more complex case\n-- looks like we're coding lisp :-)\n--Testcase 15:\nselect * from onek,\n  (values ((select i from\n    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)\n    order by i asc limit 1))) bar (i)\n  where onek.unique1 = bar.i;\n\n-- try VALUES in a subquery\n--Testcase 16:\nselect * from onek\n    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))\n    order by unique1;\n\n-- VALUES is also legal as a standalone query or a set-operation member\n--Testcase 17:\nVALUES (1,2), (3,4+4), (7,77.7);\n\n--Testcase 52:\nVALUES (1,2), (3,4+4), (7,77.7)\nUNION ALL\nSELECT 2+2, 57\nUNION ALL\nTABLE int8_tbl;\n\n--\n-- Test ORDER BY options\n--\n\n--Testcase 53:\nCREATE FOREIGN TABLE foo (f1 int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 18:\nINSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);\n\n--Testcase 19:\nSELECT * FROM foo ORDER BY f1;\n--Testcase 20:\nSELECT * FROM foo ORDER BY f1 ASC;\t-- same thing\n--Testcase 21:\nSELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--Testcase 22:\nSELECT * FROM foo ORDER BY f1 DESC;\n--Testcase 23:\nSELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n-- Skip, cannot create index on foreign table\n-- check if indexscans do the right things\n--CREATE INDEX fooi ON foo (f1);\n--SET enable_sort = false;\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--\n-- Test planning of some cases with partial indexes\n--\n\n-- partial index is usable\n--Testcase 24:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 25:\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- actually run the query with an analyze to use the partial index\n--Testcase 54:\nexplain (costs off, analyze on, timing off, summary off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 27:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 28:\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- partial index predicate implies clause, so no need for retest\n--Testcase 29:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 30:\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 31:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 32:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n-- but if it's an update target, must retest anyway\n--Testcase 33:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n--Testcase 34:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n-- partial index is not applicable\n--Testcase 35:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n--Testcase 36:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n-- partial index implies clause, but bitmap scan must recheck predicate anyway\nSET enable_indexscan TO off;\n--Testcase 37:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 38:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\nRESET enable_indexscan;\n-- check multi-index cases too\n--Testcase 39:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 40:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 41:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n--Testcase 42:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n\n--\n-- Test some corner cases that have been known to confuse the planner\n--\n\n-- ORDER BY on a constant doesn't really need any sorting\n--Testcase 55:\nSELECT 1 AS x ORDER BY x;\n\n-- But ORDER BY on a set-valued expression does\n--Testcase 56:\ncreate function sillysrf(int) returns setof int as\n  'values (1),(10),(2),($1)' language sql immutable;\n\n--Testcase 57:\nselect sillysrf(42);\n--Testcase 58:\nselect sillysrf(-1) order by 1;\n\n--Testcase 59:\ndrop function sillysrf(int);\n\n-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict\n-- (see bug #5084)\n--Testcase 60:\nselect * from (values (2),(null),(1)) v(k) where k = k order by k;\n--Testcase 61:\nselect * from (values (2),(null),(1)) v(k) where k = k;\n\n-- Test partitioned tables with no partitions, which should be handled the\n-- same as the non-inheritance case when expanding its RTE.\n--Testcase 62:\ncreate table list_parted_tbl (a int,b int) partition by list (a);\n--Testcase 63:\ncreate table list_parted_tbl1 partition of list_parted_tbl\n  for values in (1) partition by list(b);\n--Testcase 64:\nexplain (costs off) select * from list_parted_tbl;\n--Testcase 65:\ndrop table list_parted_tbl;\n\n--Testcase 78:\nDELETE FROM INT8_TBL;\n\n--Testcase 66:\nDROP FOREIGN TABLE onek;\n--Testcase 67:\nDROP FOREIGN TABLE onek2;\n--Testcase 68:\nDROP FOREIGN TABLE int8_tbl;\n--Testcase 69:\nDROP FOREIGN TABLE person;\n--Testcase 70:\nDROP FOREIGN TABLE foo;\n--Testcase 71:\nDROP SERVER sqlite_svr;\n--Testcase 72:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/select_having.sql",
    "content": "--\n-- SELECT_HAVING\n--\n\n--Testcase 22:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 23:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 24:\nCREATE FOREIGN TABLE test_having(a int OPTIONS (key 'true'), b int, c char(8), d char) SERVER sqlite_svr;\n\n-- load test data\n--Testcase 1:\nINSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');\n--Testcase 2:\nINSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');\n--Testcase 3:\nINSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');\n--Testcase 4:\nINSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');\n--Testcase 5:\nINSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');\n--Testcase 6:\nINSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');\n--Testcase 7:\nINSERT INTO test_having VALUES (6, 4, 'cccc', 'g');\n--Testcase 8:\nINSERT INTO test_having VALUES (7, 4, 'cccc', 'h');\n--Testcase 9:\nINSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');\n--Testcase 10:\nINSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');\n\n--Testcase 11:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;\n\n-- HAVING is effectively equivalent to WHERE in this case\n--Testcase 12:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING b = 3 ORDER BY b, c collate \"en_US.utf8\";\n\n--Testcase 13:\nSELECT lower(c), count(c) FROM test_having\n\tGROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY lower(c);\n\n--Testcase 14:\nSELECT c, max(a) FROM test_having\n\tGROUP BY c HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY c collate \"en_US.utf8\";\n\n-- test degenerate cases involving HAVING without GROUP BY\n-- Per SQL spec, these should generate 0 or 1 row, even without aggregates\n\n--Testcase 15:\nSELECT min(a), max(a) FROM test_having HAVING min(a) = max(a);\n--Testcase 16:\nSELECT min(a), max(a) FROM test_having HAVING min(a) < max(a);\n\n-- errors: ungrouped column references\n--Testcase 17:\nSELECT a FROM test_having HAVING min(a) < max(a);\n--Testcase 18:\nSELECT 1 AS one FROM test_having HAVING a > 1;\n\n-- the really degenerate case: need not scan table at all\n--Testcase 19:\nSELECT 1 AS one FROM test_having HAVING 1 > 2;\n--Testcase 20:\nSELECT 1 AS one FROM test_having HAVING 1 < 2;\n\n-- and just to prove that we aren't scanning the table:\n--Testcase 21:\nSELECT 1 AS one FROM test_having WHERE 1/a = 1 HAVING 1 < 2;\n\n--Testcase 25:\nDROP FOREIGN TABLE test_having;\n--Testcase 26:\nDROP SERVER sqlite_svr;\n--Testcase 27:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/sqlite_fdw_post.sql",
    "content": "-- ===================================================================\n-- create FDW objects\n-- ===================================================================\n\n--Testcase 483:\nCREATE EXTENSION sqlite_fdw;\n\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr2 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- SQLite FDW does not need User and User Mapping.\n--Testcase 484:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 485:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n\n-- ===================================================================\n-- create objects used through FDW sqlite server\n-- ===================================================================\n--Testcase 486:\nCREATE SCHEMA \"S 1\";\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO \"S 1\";\n\n--Testcase 1:\nINSERT INTO \"S 1\".\"T 1\"\n\tSELECT id,\n\t       id % 10,\n\t       to_char(id, 'FM00000'),\n\t       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,\n\t       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,\n\t       id % 10,\n\t       id % 10,\n\t       'foo'\n\tFROM generate_series(1, 1000) id;\n--Testcase 2:\nINSERT INTO \"S 1\".\"T 2\"\n\tSELECT id,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 3:\nINSERT INTO \"S 1\".\"T 3\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 487:\nDELETE FROM \"S 1\".\"T 3\" WHERE c1 % 2 != 0;\t-- delete for outer join tests\n--Testcase 4:\nINSERT INTO \"S 1\".\"T 4\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 488:\nDELETE FROM \"S 1\".\"T 4\" WHERE c1 % 3 != 0;\t-- delete for outer join tests\n\n/*ANALYZE \"S 1\".\"T 1\";\nANALYZE \"S 1\".\"T 2\";\nANALYZE \"S 1\".\"T 3\";\nANALYZE \"S 1\".\"T 4\";*/\n\n-- ===================================================================\n-- create foreign tables\n-- ===================================================================\n--Testcase 489:\nCREATE FOREIGN TABLE ft1 (\n\tc0 int,\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr;\nALTER FOREIGN TABLE ft1 DROP COLUMN c0;\n\n--Testcase 490:\nCREATE FOREIGN TABLE ft2 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tcx int,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft2',\n\tc8 text\n) SERVER sqlite_svr;\nALTER FOREIGN TABLE ft2 DROP COLUMN cx;\n\n--Testcase 491:\nCREATE FOREIGN TABLE ft4 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 3');\n\n--Testcase 492:\nCREATE FOREIGN TABLE ft5 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 4');\n\n--Testcase 493:\nCREATE FOREIGN TABLE ft6 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr2 OPTIONS (table 'T 4');\n\nALTER FOREIGN TABLE ft1 OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft2 OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\nALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 5:\n\\det+\n\n-- Test that alteration of server options causes reconnection\n-- Remote's errors might be non-English, so hide them to ensure stable results\n\\set VERBOSITY terse\n--Testcase 6:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work\nALTER SERVER sqlite_svr OPTIONS (SET database 'no such database');\n--Testcase 7:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should fail\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_svr\n            OPTIONS (SET database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n--Testcase 8:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work again\n\\set VERBOSITY default\n\n-- Now we should be able to run ANALYZE.\n-- To exercise multiple code paths, we use local stats on ft1\n-- and remote-estimate mode on ft2.\n--ANALYZE ft1;\n--ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');\n\n-- ===================================================================\n-- simple queries\n-- ===================================================================\n-- single table without alias\n--Testcase 9:\nEXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n--Testcase 10:\nSELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n-- single table with alias - also test that tableoid sort is not pushed to remote side\n--Testcase 11:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n--Testcase 12:\nSELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n-- whole-row reference\n--Testcase 13:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 14:\nSELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- empty result\n--Testcase 15:\nSELECT * FROM ft1 WHERE false;\n-- with WHERE clause\n--Testcase 16:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n--Testcase 17:\nSELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n-- with FOR UPDATE/SHARE\n--Testcase 18:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 19:\nSELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 20:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n--Testcase 21:\nSELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n-- aggregate\n--Testcase 22:\nSELECT COUNT(*) FROM ft1 t1;\n-- subquery\n--Testcase 23:\nSELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;\n-- subquery+MAX\n--Testcase 24:\nSELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;\n-- used in CTE\n--Testcase 25:\nWITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;\n-- fixed values\n--Testcase 26:\nSELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;\n-- Test forcing the remote server to produce sorted data for a merge join.\nSET enable_hashjoin TO false;\nSET enable_nestloop TO false;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 27:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 28:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 29:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 30:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- A join between local table and foreign join. ORDER BY clause is added to the\n-- foreign join so that the local table can be joined using merge join strategy.\n--Testcase 31:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 32:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above, except that the full join prevents any equivalence\n-- classes from being merged. This produces single relation equivalence classes\n-- included in join restrictions.\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 34:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above with all full outer joins\n--Testcase 35:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 36:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\nRESET enable_hashjoin;\nRESET enable_nestloop;\n\n-- ===================================================================\n-- WHERE with remotely-executable conditions\n-- ===================================================================\n--Testcase 37:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr\n--Testcase 39:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NULL;        -- NullTest\n--Testcase 40:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL;    -- NullTest\n--Testcase 41:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)\n--Testcase 43:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE 1 = c1!;           -- OpExpr(r)\n--Testcase 44:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr\n--Testcase 45:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr\n--Testcase 46:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef\n--Testcase 47:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\\\bar';  -- check special chars\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote\n-- parameterized remote path for foreign table\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n--Testcase 50:\nSELECT * FROM ft2 a, ft2 b WHERE a.c1 = 47 AND b.c1 = a.c2;\n\n-- check both safe and unsafe join conditions\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft2 a, ft2 b\n  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n--Testcase 52:\nSELECT * FROM ft2 a, ft2 b\nWHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n-- bug before 9.3.5 due to sloppy handling of remote-estimate parameters\n--Testcase 53:\nSELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));\n--Testcase 54:\nSELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));\n-- we should not push order by clause with volatile expressions or unsafe\n-- collations\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, random();\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate \"C\";\n\n-- user-defined operator/function\n--Testcase 494:\nCREATE FUNCTION sqlite_fdw_abs(int) RETURNS int AS $$\nBEGIN\nRETURN abs($1);\nEND\n$$ LANGUAGE plpgsql IMMUTABLE;\n--Testcase 495:\nCREATE OPERATOR === (\n    LEFTARG = int,\n    RIGHTARG = int,\n    PROCEDURE = int4eq,\n    COMMUTATOR = ===\n);\n\n-- built-in operators and functions can be shipped for remote execution\n--Testcase 57:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 58:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 59:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 60:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n\n-- by default, user-defined ones cannot\n--Testcase 61:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 62:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 63:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 64:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- ORDER BY can be shipped, though\n--Testcase 496:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 497:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- but let's put them in an extension ...\nALTER EXTENSION sqlite_fdw ADD FUNCTION sqlite_fdw_abs(int);\nALTER EXTENSION sqlite_fdw ADD OPERATOR === (int, int);\n--ALTER SERVER sqlite_svr2 OPTIONS (ADD extensions 'sqlite_fdw');\n\n-- ... now they can be shipped\n--Testcase 498:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 499:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 500:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 501:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- and both ORDER BY and LIMIT can be shipped\n--Testcase 502:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 503:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- ===================================================================\n-- JOIN queries\n-- ===================================================================\n-- Analyze ft4 and ft5 so that we have better statistics. These tables do not\n-- have use_remote_estimate set.\n--ANALYZE ft4;\n--ANALYZE ft5;\n\n-- join two tables\n--Testcase 65:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 66:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join three tables\n--Testcase 67:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 68:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join\n--Testcase 69:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 70:\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- left outer join three tables\n--Testcase 71:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 72:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + placement of clauses.\n-- clauses within the nullable side are not pulled up, but top level clause on\n-- non-nullable side is pushed into non-nullable side\n--Testcase 73:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n--Testcase 74:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n-- clauses within the nullable side are not pulled up, but the top level clause\n-- on nullable side is not pushed down into nullable side\n--Testcase 75:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n--Testcase 76:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n-- right outer join\n--Testcase 77:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 78:\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join three tables\n--Testcase 79:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 80:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- full outer join\n--Testcase 81:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n--Testcase 82:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n-- full outer join with restrictions on the joining relations\n-- a. the joining relations are both base relations\n--Testcase 83:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 84:\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 85:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n--Testcase 86:\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n-- b. one of the joining relations is a base relation and the other is a join\n-- relation\n--Testcase 87:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 88:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- c. test deparsing the remote query as nested subqueries\n--Testcase 89:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 90:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- d. test deparsing rowmarked relations as subqueries\n--Testcase 91:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n--Testcase 92:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n-- full outer join + inner join\n--Testcase 93:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n--Testcase 94:\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n-- full outer join three tables\n--Testcase 95:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 96:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + right outer join\n--Testcase 97:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 98:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- right outer join + full outer join\n--Testcase 99:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 100:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + left outer join\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 102:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join + full outer join\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 104:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join + left outer join\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 106:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + right outer join\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 108:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause, only matched rows\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 110:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause with shippable extensions set\n--Testcase 504:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--ALTER SERVER sqlite_svr2 OPTIONS (DROP extensions);\n-- full outer join + WHERE clause with shippable extensions not set\n--Testcase 505:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\nALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- join two tables with FOR UPDATE clause\n-- tests whole-row reference for row marks\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 112:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n--Testcase 114:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n-- join two tables with FOR SHARE clause\n--Testcase 115:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 116:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n--Testcase 118:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n-- join in CTE\n--Testcase 119:\nEXPLAIN (VERBOSE, COSTS OFF)\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n--Testcase 120:\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n-- ctid with whole-row reference\n--Testcase 121:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- SEMI JOIN, not pushed down\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 123:\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- ANTI JOIN, not pushed down\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 125:\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- CROSS JOIN can be pushed down\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 127:\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- different server, not pushed down. No result expected.\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 129:\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe join conditions (c8 has a UDT), not pushed down. Practically a CROSS\n-- JOIN since c8 in both tables has same value.\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 131:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe conditions on one side (c8 has a UDT), not pushed down.\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 133:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join where unsafe to pushdown condition in WHERE clause has a column not\n-- in the SELECT clause. In this test unsafe clause needs to have column\n-- references from both joining sides so that the clause is not pushed down\n-- into one of the joining sides.\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 135:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- Aggregate after UNION, for testing setrefs\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n--Testcase 137:\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n-- join with lateral reference\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n--Testcase 139:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n\n-- non-Var items in targetlist of the nullable rel of a join preventing\n-- push-down in some cases\n-- unable to push {ft1, ft2}\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n--Testcase 141:\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n\n-- ok to push {ft1, ft2} but not {ft1, ft2, ft4}\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n--Testcase 143:\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n\n-- join with nullable side with some columns with null values\n--Testcase 144:\nUPDATE ft5 SET c3 = null where c1 % 9 = 0;\n--Testcase 145:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n--Testcase 146:\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n\n-- multi-way join involving multiple merge joins\n-- (this case used to have EPQ-related planning problems)\n--Testcase 506:\nCREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1));\n--Testcase 507:\nINSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\nANALYZE local_tbl;\nSET enable_nestloop TO false;\nSET enable_hashjoin TO false;\n--Testcase 147:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE;\n--Testcase 148:\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 ORDER BY ft1.c1 FOR UPDATE;\nRESET enable_nestloop;\nRESET enable_hashjoin;\n--DROP TABLE local_tbl;\n\n-- check join pushdown in situations where multiple userids are involved\n-- Although SQLite FDW does not need User and User mapping to connect to\n-- the database file, however, JOIN pushdown is decided by the core code.\n-- If outer and inner relation are foreign tables (or joins) belonging to\n-- the same server and assigned to the same user, join will be pushed down.\n-- Otherwise, join cannot be pushed down.\n-- In addition to an exact match of userid, we allow the case where one side\n-- has zero userid (implying current user) and the other side has explicit\n-- userid that happens to equal the current user; but in that case, pushdown of\n-- the join is only valid for the current user.\n--Testcase 508:\nCREATE ROLE regress_view_owner SUPERUSER;\n--Testcase 509:\n-- CREATE USER MAPPING FOR regress_view_owner SERVER sqlite_svr;\nGRANT SELECT ON ft4 TO regress_view_owner;\nGRANT SELECT ON ft5 TO regress_view_owner;\n\n--Testcase 510:\nCREATE VIEW v4 AS SELECT * FROM ft4;\n--Testcase 511:\nCREATE VIEW v5 AS SELECT * FROM ft5;\nALTER VIEW v5 OWNER TO regress_view_owner;\n--Testcase 149:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, different view owners\n--Testcase 150:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\nALTER VIEW v4 OWNER TO regress_view_owner;\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 152:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, view owner not current user\n--Testcase 154:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\nALTER VIEW v4 OWNER TO CURRENT_USER;\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 156:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\nALTER VIEW v4 OWNER TO regress_view_owner;\n\n-- cleanup\n--Testcase 512:\nDROP OWNED BY regress_view_owner;\n--Testcase 513:\nDROP ROLE regress_view_owner;\n\n\n-- ===================================================================\n-- Aggregate and grouping queries\n-- ===================================================================\n\n-- Simple aggregates\n--Testcase 157:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n--Testcase 158:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n\n--Testcase 514:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n--Testcase 515:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n\n-- Aggregate is not pushed down as aggregation contains random()\n--Testcase 159:\nexplain (verbose, costs off)\nselect sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1;\n\n-- Aggregate over join query\n--Testcase 160:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n--Testcase 161:\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n\n-- Not pushed down due to local conditions present in underneath input rel\n--Testcase 162:\nexplain (verbose, costs off)\nselect sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1;\n\n-- GROUP BY clause having expressions\n--Testcase 163:\nexplain (verbose, costs off)\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n--Testcase 164:\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n\n-- Aggregates in subquery are pushed down.\n--Testcase 165:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n--Testcase 166:\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n\n-- Aggregate is still pushed down by taking unshippable expression out\n--Testcase 167:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n--Testcase 168:\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n\n-- Aggregate with unshippable GROUP BY clause are not pushed\n--Testcase 169:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1;\n\n-- GROUP BY clause in various forms, cardinal, alias and constant expression\n--Testcase 516:\nexplain (verbose, costs off)\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n--Testcase 517:\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n\n-- GROUP BY clause referring to same column multiple times\n-- Also, ORDER BY contains an aggregate function\n--Testcase 170:\nexplain (verbose, costs off)\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n--Testcase 171:\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n\n-- Testing HAVING clause shippability\n--Testcase 172:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n--Testcase 173:\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n\n-- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down\n--Testcase 174:\nexplain (verbose, costs off)\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n--Testcase 175:\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n\n-- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down\n--Testcase 176:\nexplain (verbose, costs off)\nselect sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1;\n\n-- Remote aggregate in combination with a local Param (for the output\n-- of an initplan) can be trouble, per bug #15781\n--Testcase 518:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n--Testcase 519:\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n\n--Testcase 520:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n--Testcase 521:\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n\n\n-- Testing ORDER BY, DISTINCT, FILTER, Ordered-sets and VARIADIC within aggregates\n\n-- ORDER BY within aggregate, same column used to order\n--Testcase 177:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n--Testcase 178:\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n\n-- ORDER BY within aggregate, different column used to order also using DESC\n--Testcase 179:\nexplain (verbose, costs off)\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n--Testcase 180:\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n\n-- DISTINCT within aggregate\n--Testcase 181:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 182:\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- DISTINCT combined with ORDER BY within aggregate\n--Testcase 183:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 184:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n--Testcase 185:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 186:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- FILTER within aggregate\n--Testcase 187:\nexplain (verbose, costs off)\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n--Testcase 188:\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n\n-- DISTINCT, ORDER BY and FILTER within aggregate\n--Testcase 189:\nexplain (verbose, costs off)\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n--Testcase 190:\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n\n-- Outer query is aggregation query\n--Testcase 191:\nexplain (verbose, costs off)\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 192:\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n-- Inner query is aggregation query\n--Testcase 193:\nexplain (verbose, costs off)\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 194:\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n\n-- Aggregate not pushed down as FILTER condition is not pushable\n--Testcase 195:\nexplain (verbose, costs off)\nselect sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1;\n--Testcase 196:\nexplain (verbose, costs off)\nselect sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1;\n\n-- Ordered-sets within aggregate\n--Testcase 197:\nexplain (verbose, costs off)\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n--Testcase 198:\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n\n-- Using multiple arguments within aggregates\n--Testcase 199:\nexplain (verbose, costs off)\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n--Testcase 200:\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n\n-- User defined function for user defined aggregate, VARIADIC\n--Testcase 522:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n--Testcase 523:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n-- Disable hash aggregation for plan stability.\nset enable_hashagg to false;\n\n-- Not pushed down due to user defined aggregate\n--Testcase 524:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Add function and aggregate into extension\n--alter extension postgres_fdw add function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw add aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now aggregate will be pushed.  Aggregate will display VARIADIC argument.\n--Testcase 525:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n--Testcase 526:\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n\n-- Remove function and aggregate from extension\n--alter extension postgres_fdw drop function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw drop aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Not pushed down as we have dropped objects from extension.\n--Testcase 527:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Cleanup\nreset enable_hashagg;\n--Testcase 528:\ndrop aggregate least_agg(variadic items anyarray);\n--Testcase 529:\ndrop function least_accum(anyelement, variadic anyarray);\n\n\n-- Testing USING OPERATOR() in ORDER BY within aggregate.\n-- For this, we need user defined operators along with operator family and\n-- operator class.  Create those and then add them in extension.  Note that\n-- user defined objects are considered unshippable unless they are part of\n-- the extension.\n--Testcase 530:\ncreate operator public.<^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4eq\n);\n\n--Testcase 531:\ncreate operator public.=^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4lt\n);\n\n--Testcase 532:\ncreate operator public.>^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4gt\n);\n\n--Testcase 533:\ncreate operator family my_op_family using btree;\n\n--Testcase 534:\ncreate function my_op_cmp(a int, b int) returns int as\n  $$begin return btint4cmp(a, b); end $$ language plpgsql;\n\n--Testcase 535:\ncreate operator class my_op_class for type int using btree family my_op_family as\n operator 1 public.<^,\n operator 3 public.=^,\n operator 5 public.>^,\n function 1 my_op_cmp(int, int);\n\n-- This will not be pushed as user defined sort operator is not part of the\n-- extension yet.\n--Testcase 536:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Update local stats on ft2\n--ANALYZE ft2;\n\n-- Add into extension\nalter extension sqlite_fdw add operator class my_op_class using btree;\nalter extension sqlite_fdw add function my_op_cmp(a int, b int);\nalter extension sqlite_fdw add operator family my_op_family using btree;\nalter extension sqlite_fdw add operator public.<^(int, int);\nalter extension sqlite_fdw add operator public.=^(int, int);\nalter extension sqlite_fdw add operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now this will be pushed as sort operator is part of the extension.\n--Testcase 537:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--Testcase 538:\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Remove from extension\nalter extension sqlite_fdw drop operator class my_op_class using btree;\nalter extension sqlite_fdw drop function my_op_cmp(a int, b int);\nalter extension sqlite_fdw drop operator family my_op_family using btree;\nalter extension sqlite_fdw drop operator public.<^(int, int);\nalter extension sqlite_fdw drop operator public.=^(int, int);\nalter extension sqlite_fdw drop operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- This will not be pushed as sort operator is now removed from the extension.\n--Testcase 539:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Cleanup\n--Testcase 540:\ndrop operator class my_op_class using btree;\n--Testcase 541:\ndrop function my_op_cmp(a int, b int);\n--Testcase 542:\ndrop operator family my_op_family using btree;\n--Testcase 543:\ndrop operator public.>^(int, int);\n--Testcase 544:\ndrop operator public.=^(int, int);\n--Testcase 545:\ndrop operator public.<^(int, int);\n\n-- Input relation to aggregate push down hook is not safe to pushdown and thus\n-- the aggregate cannot be pushed down to foreign server.\n--Testcase 201:\nexplain (verbose, costs off)\nselect count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2);\n\n-- Subquery in FROM clause having aggregate\n--Testcase 202:\nexplain (verbose, costs off)\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n--Testcase 203:\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n\n-- FULL join with IS NULL check in HAVING\n--Testcase 204:\nexplain (verbose, costs off)\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n--Testcase 205:\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n\n-- Aggregate over FULL join needing to deparse the joining relations as\n-- subqueries.\n--Testcase 206:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n--Testcase 207:\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n\n-- ORDER BY expression is part of the target list but not pushed down to\n-- foreign server.\n--Testcase 208:\nexplain (verbose, costs off)\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n--Testcase 209:\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n\n-- LATERAL join, with parameterization\nset enable_hashagg to false;\n--Testcase 210:\nexplain (verbose, costs off)\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 211:\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\nreset enable_hashagg;\n\n-- bug #15613: bad plan for foreign table scan with lateral reference\n--Testcase 546:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n--Testcase 547:\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n-- Check with placeHolderVars\n--Testcase 212:\nexplain (verbose, costs off)\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n--Testcase 213:\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n\n\n-- Not supported cases\n-- Grouping sets\n--Testcase 214:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 215:\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 216:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 217:\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 218:\nexplain (verbose, costs off)\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 219:\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 220:\nexplain (verbose, costs off)\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n--Testcase 221:\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n\n-- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed\n--Testcase 222:\nexplain (verbose, costs off)\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n--Testcase 223:\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n\n-- WindowAgg\n--Testcase 224:\nexplain (verbose, costs off)\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 225:\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 226:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 227:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 228:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 229:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n\n\n-- ===================================================================\n-- parameterized queries\n-- ===================================================================\n-- simple join\n--Testcase 230:\nPREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);\n--Testcase 232:\nEXECUTE st1(1, 1);\n--Testcase 233:\nEXECUTE st1(101, 101);\n-- subquery using stable function (can't be sent to remote)\n--Testcase 234:\nPREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 235:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);\n--Testcase 236:\nEXECUTE st2(10, 20);\n--Testcase 237:\nEXECUTE st2(101, 121);\n-- subquery using immutable function (can be sent to remote)\n--Testcase 238:\nPREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 239:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);\n--Testcase 240:\nEXECUTE st3(10, 20);\n--Testcase 241:\nEXECUTE st3(20, 30);\n-- custom plan should be chosen initially\n--Testcase 242:\nPREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;\n--Testcase 243:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 244:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 245:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 246:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 247:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- once we try it enough times, should switch to generic plan\n--Testcase 248:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- value of $1 should not be sent to remote\n--Testcase 249:\nPREPARE st5(text,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 254:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 255:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 256:\nEXECUTE st5('foo', 1);\n\n-- altering FDW options requires replanning\n--Testcase 257:\nPREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 258:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 259:\nPREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo');\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 548:\nINSERT INTO \"S 1\".\"T 0\" SELECT * FROM \"S 1\".\"T 1\";\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 0');\n--Testcase 261:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 262:\nEXECUTE st6;\n--Testcase 263:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 1');\n\n--Testcase 549:\nPREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 550:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 551:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--Testcase 552:\nEXECUTE st8;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- cleanup\nDEALLOCATE st1;\nDEALLOCATE st2;\nDEALLOCATE st3;\nDEALLOCATE st4;\nDEALLOCATE st5;\nDEALLOCATE st6;\nDEALLOCATE st7;\nDEALLOCATE st8;\n\n-- System columns, except ctid and oid, should not be sent to remote\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;\n--Testcase 265:\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1;\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 267:\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 553:\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 554:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n--Testcase 271:\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n\n-- ===================================================================\n-- used in PL/pgSQL function\n-- ===================================================================\n--Testcase 555:\nCREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$\nDECLARE\n\tv_c1 int;\nBEGIN\n--Testcase 556:\n    SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;\n    PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;\n    RETURN v_c1;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 272:\nSELECT f_test(100);\n--Testcase 557:\nDROP FUNCTION f_test(int);\n\n-- ===================================================================\n-- conversion error\n-- ===================================================================\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;\n--Testcase 273:\nSELECT * FROM ft1 WHERE c1 = 1;\n--Testcase 274:\nSELECT  ft1.c1,  ft2.c2, ft1.c8 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1;\n--Testcase 275:\nSELECT  ft1.c1,  ft2.c2, ft1 FROM ft1, ft2 WHERE ft1.c1 = ft2.c1 AND ft1.c1 = 1;\n--Testcase 276:\nSELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8;\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text;\n\n-- ===================================================================\n-- subtransaction\n--  + local/remote error doesn't break cursor\n-- ===================================================================\nBEGIN;\nDECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;\n--Testcase 277:\nFETCH c;\nSAVEPOINT s;\nERROR OUT;          -- ERROR\nROLLBACK TO s;\n--Testcase 278:\nFETCH c;\nSAVEPOINT s;\n--Testcase 279:\nSELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR\nROLLBACK TO s;\n--Testcase 280:\nFETCH c;\n--Testcase 281:\nSELECT * FROM ft1 ORDER BY c1 LIMIT 1;\nCOMMIT;\n\n-- ===================================================================\n-- test handling of collations\n-- ===================================================================\n--Testcase 558:\ncreate foreign table ft3 (f1 text collate \"C\", f2 text, f3 varchar(10)) server sqlite_svr;\n\n-- can be sent to remote\n--Testcase 559:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo';\n--Testcase 560:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"C\" = 'foo';\n--Testcase 561:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo';\n--Testcase 562:\nexplain (verbose, costs off) select * from ft3 where f3 = 'foo';\n--Testcase 563:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 and l.f1 = 'foo';\n-- can't be sent to remote\n--Testcase 564:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"POSIX\" = 'foo';\n--Testcase 565:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE \"C\";\n--Testcase 566:\nexplain (verbose, costs off) select * from ft3 where f2 COLLATE \"C\" = 'foo';\n--Testcase 567:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE \"C\";\n--Testcase 568:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 COLLATE \"POSIX\" and l.f1 = 'foo';\n\n-- ===================================================================\n-- test writable foreign table stuff\n-- ===================================================================\n--Testcase 282:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 283:\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 284:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc');\n--Testcase 285:\nSELECT * FROM ft2 WHERE c1 >= 1101;\n--Testcase 286:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');\n--Testcase 287:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;              -- can be pushed down\n--Testcase 288:\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;\n--Testcase 289:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;  -- can be pushed down\n--Testcase 290:\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;\n--Testcase 291:\nSELECT * FROM ft2 WHERE c1 % 10 = 7;\n--Testcase 292:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;                               -- can be pushed down\n--Testcase 293:\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;\n--Testcase 294:\nEXPLAIN (verbose, costs off)\n  DELETE FROM ft2 WHERE c1 % 10 = 5;                               -- can be pushed down\n--Testcase 295:\nSELECT c1, c4 FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 569:\nDELETE FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 297:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;                -- can be pushed down\n--Testcase 298:\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;\n--Testcase 299:\nSELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;\n--Testcase 300:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 301:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 302:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;             -- can be pushed down\n--Testcase 303:\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;\n--Testcase 304:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 WHERE c1 = 1200;                       -- can be pushed down\n--Testcase 305:\nDELETE FROM ft2 WHERE c1 = 1200;\n\n-- Test UPDATE/DELETE on a three-table join\n--Testcase 306:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id;\n--Testcase 307:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;       -- can be pushed down\n--Testcase 308:\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;\n--Testcase 309:\nSELECT ft2, ft2.*, ft4, ft4.*\n  FROM ft2 INNER JOIN ft4 ON (ft2.c1 > 1200 AND ft2.c2 = ft4.c1)\n  INNER JOIN ft5 ON (ft4.c1 = ft5.c1);\n--Testcase 310:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;                          -- can be pushed down\n--Testcase 311:\nSELECT 100 FROM ft2, ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n\n--Testcase 570:\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n--Testcase 312:\nDELETE FROM ft2 WHERE ft2.c1 > 1200;\n\n-- Test UPDATE with a MULTIEXPR sub-select\n-- (maybe someday this'll be remotely executable, but not today)\n--Testcase 571:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n--Testcase 572:\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n--Testcase 573:\nUPDATE ft2 AS target SET (c2) = (\n    SELECT c2 / 10\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n-- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing\n-- user-defined operators/functions\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 574:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;\n--Testcase 575:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;            -- can't be pushed down\n--Testcase 576:\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 577:\nSELECT * FROM ft2 WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 578:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;                                                    -- can't be pushed down\n--Testcase 579:\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n--Testcase 580:\nSELECT ft2.*, ft4.*, ft5.* \n  FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n\n--Testcase 581:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 582:\nSELECT ft2.c1, ft2.c2, ft2.c3 FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 583:\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;\n\n--Testcase 584:\nDELETE FROM ft2 WHERE ft2.c1 > 2000;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n-- Test that trigger on remote table works as expected\n--Testcase 585:\nCREATE OR REPLACE FUNCTION \"S 1\".F_BRTRIG() RETURNS trigger AS $$\nBEGIN\n    NEW.c3 = NEW.c3 || '_trig_update';\n    RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 586:\nCREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE\n    ON ft2 FOR EACH ROW EXECUTE PROCEDURE \"S 1\".F_BRTRIG();\n\n--Testcase 313:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff');\n--Testcase 314:\nSELECT * FROM ft2 WHERE c1 = 1208;\n--Testcase 315:\nINSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;');\n--Testcase 316:\nSELECT * FROM ft2 WHERE c1 = 1218;\n--Testcase 317:\nUPDATE ft2 SET c2 = c2 + 600, c3 = c3 WHERE c1 % 10 = 8 AND c1 < 1200;\n--Testcase 318:\nSELECT * FROM ft2 WHERE c1 % 10 = 8 AND c1 < 1200;\n\n-- Test errors thrown on remote side during update\n-- create table in the remote server with check contraint\n--Testcase 738:\nCREATE FOREIGN TABLE ft1_constraint (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr OPTIONS (table 't1_constraint');\n--Testcase 747:\nINSERT INTO ft1_constraint SELECT * FROM ft1 ON CONFLICT DO NOTHING;\n-- c2 must be greater than or equal to 0, so this case is ignored.\n--Testcase 754:\nINSERT INTO ft1_constraint(c1, c2) VALUES (2222, -2) ON CONFLICT DO NOTHING; -- ignore, do nothing\n--Testcase 755:\nSELECT c1, c2 FROM ft1_constraint WHERE c1 = 2222 or c2 = -2; -- empty result\n--Testcase 748:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 749:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n--Testcase 319:\nINSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key\n--Testcase 320:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported\n--Testcase 321:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported\n--Testcase 743:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 744:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 750:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_constraint;\n--Testcase 751:\nALTER FOREIGN TABLE ft1_org RENAME TO ft1;\n\n-- Test savepoint/rollback behavior\n--Testcase 322:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 323:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\nbegin;\n--Testcase 324:\nupdate ft2 set c2 = 42 where c2 = 0;\n--Testcase 325:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s1;\n--Testcase 326:\nupdate ft2 set c2 = 44 where c2 = 4;\n--Testcase 327:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s1;\n--Testcase 328:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s2;\n--Testcase 329:\nupdate ft2 set c2 = 46 where c2 = 6;\n--Testcase 330:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrollback to savepoint s2;\n--Testcase 331:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s2;\n--Testcase 332:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s3;\n--Testcase 333:\n--skip, does not support CHECK\n--update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side\nrollback to savepoint s3;\n--Testcase 334:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s3;\n--Testcase 335:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n-- none of the above is committed yet remotely\n--Testcase 336:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\ncommit;\n--Testcase 337:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 338:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\n\n--VACUUM ANALYZE \"S 1\".\"T 1\";\n\n-- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs\n-- FIRST behavior here.\n-- ORDER BY DESC NULLS LAST options\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10;\n--Testcase 340:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795  LIMIT 10;\n-- ORDER BY DESC NULLS FIRST options\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 342:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n-- ORDER BY ASC NULLS FIRST options\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 344:\nSELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n\n-- ===================================================================\n-- test check constraints\n-- ===================================================================\n--Testcase 752:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 753:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n-- Consistent check constraints provide consistent results\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0);\n--Testcase 587:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 588:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\nSET constraint_exclusion = 'on';\n--Testcase 589:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 590:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\nRESET constraint_exclusion;\n-- check constraint is enforced on the remote side, not locally\n--Testcase 745:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 746:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2positive;\n\n-- But inconsistent check constraints provide inconsistent results\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 592:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\nSET constraint_exclusion = 'on';\n--Testcase 593:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 594:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\nRESET constraint_exclusion;\n-- local check constraint is not actually enforced\n--Testcase 595:\nINSERT INTO ft1(c1, c2) VALUES(1111, 2);\n--Testcase 596:\nUPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1;\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative;\n\n-- ===================================================================\n-- test WITH CHECK OPTION constraints\n-- ===================================================================\n--Testcase 597:\nCREATE FUNCTION row_before_insupd_trigfunc() RETURNS trigger AS $$BEGIN NEW.a := NEW.a + 10; RETURN NEW; END$$ LANGUAGE plpgsql;\n\n--Testcase 598:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 599:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n--Testcase 600:\nCREATE VIEW rw_view AS SELECT * FROM foreign_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 601:\n\\d+ rw_view\n\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 602:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 603:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 604:\nINSERT INTO rw_view VALUES (0, 15); -- error\n--Testcase 605:\nSELECT * FROM foreign_tbl;\n\n--Testcase 606:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 607:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 608:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 609:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 610:\nSELECT * FROM foreign_tbl;\n\n--Testcase 611:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 612:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n\n-- test WCO for partitions\n\n--Testcase 613:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 614:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n\n--Testcase 615:\nCREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n\n--Testcase 616:\nCREATE VIEW rw_view AS SELECT * FROM parent_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 617:\n\\d+ rw_view\n\n--Testcase 618:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 619:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 620:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 621:\nINSERT INTO rw_view VALUES (0, 15); -- ok\n--Testcase 622:\nSELECT * FROM foreign_tbl;\n\n--Testcase 623:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 624:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 625:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 626:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 627:\nSELECT * FROM foreign_tbl;\n\n--Testcase 628:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n--Testcase 629:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 630:\nDROP TABLE parent_tbl CASCADE;\n\n--Testcase 631:\nDROP FUNCTION row_before_insupd_trigfunc;\n\n-- ===================================================================\n-- test serial columns (ie, sequence-based defaults)\n-- ===================================================================\n--Testcase 632:\ncreate foreign table loc1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr;\n--Testcase 633:\ncreate foreign table rem1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr options(table 'loc1');\n--Testcase 352:\nselect pg_catalog.setval('rem1_f1_seq', 10, false);\n--Testcase 353:\ninsert into loc1(f2) values('hi');\n--Testcase 634:\ninsert into rem1(f2) values('hi remote');\n--Testcase 354:\ninsert into loc1(f2) values('bye');\n--Testcase 635:\ninsert into rem1(f2) values('bye remote');\n--Testcase 355:\nselect f1, f2 from loc1;\n--Testcase 636:\nselect f1, f2 from rem1;\n\n-- ===================================================================\n-- test generated columns\n-- ===================================================================\n--Testcase 637:\ncreate foreign table grem1 (\n  a int options (key 'true'),\n  b int generated always as (a * 2) stored)\n  server sqlite_svr;\n--Testcase 638:\ninsert into grem1 (a) values (1), (2);\n--Testcase 639:\nupdate grem1 set a = 22 where a = 2;\n--Testcase 640:\nselect * from grem1;\n\n-- ===================================================================\n-- test local triggers\n-- ===================================================================\n\n-- Trigger functions \"borrowed\" from triggers regress test.\n--Testcase 641:\nCREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$\nBEGIN\n\tRAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',\n\t\tTG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;\n\tRETURN NULL;\nEND;$$;\n\n--Testcase 642:\nCREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 643:\nCREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n\n--Testcase 644:\nCREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger\nLANGUAGE plpgsql AS $$\n\ndeclare\n\toldnew text[];\n\trelid text;\n    argstr text;\nbegin\n\n\trelid := TG_relid::regclass;\n\targstr := '';\n\tfor i in 0 .. TG_nargs - 1 loop\n\t\tif i > 0 then\n\t\t\targstr := argstr || ', ';\n\t\tend if;\n\t\targstr := argstr || TG_argv[i];\n\tend loop;\n\n    RAISE NOTICE '%(%) % % % ON %',\n\t\ttg_name, argstr, TG_when, TG_level, TG_OP, relid;\n    oldnew := '{}'::text[];\n\tif TG_OP != 'INSERT' then\n\t\toldnew := array_append(oldnew, format('OLD: %s', OLD));\n\tend if;\n\n\tif TG_OP != 'DELETE' then\n\t\toldnew := array_append(oldnew, format('NEW: %s', NEW));\n\tend if;\n\n    RAISE NOTICE '%', array_to_string(oldnew, ',');\n\n\tif TG_OP = 'DELETE' then\n\t\treturn OLD;\n\telse\n\t\treturn NEW;\n\tend if;\nend;\n$$;\n\n-- Test basic functionality\n--Testcase 645:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 646:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 356:\ndelete from rem1;\n--Testcase 357:\ninsert into rem1 values(1,'insert');\n--Testcase 358:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 359:\nupdate rem1 set f2 = f2 || f2;\n\n\n-- cleanup\n--Testcase 647:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 648:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 649:\nDROP TRIGGER trig_stmt_before ON rem1;\n--Testcase 650:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n--Testcase 360:\nDELETE from rem1;\n\n-- Test multiple AFTER ROW triggers on a foreign table\n--Testcase 651:\nCREATE TRIGGER trig_row_after1\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 652:\nCREATE TRIGGER trig_row_after2\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 653:\ninsert into rem1 values(1,'insert');\n--Testcase 654:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 655:\nupdate rem1 set f2 = f2 || f2;\n--Testcase 656:\ndelete from rem1;\n\n-- cleanup\n--Testcase 657:\nDROP TRIGGER trig_row_after1 ON rem1;\n--Testcase 658:\nDROP TRIGGER trig_row_after2 ON rem1;\n\n-- Test WHEN conditions\n\n--Testcase 659:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 660:\nCREATE TRIGGER trig_row_after_insupd\nAFTER INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Insert or update not matching: nothing happens\n--Testcase 363:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 364:\nUPDATE rem1 set f2 = 'test';\n\n-- Insert or update matching: triggers are fired\n--Testcase 365:\nINSERT INTO rem1 values(2, 'update');\n--Testcase 366:\nUPDATE rem1 set f2 = 'update update' where f1 = '2';\n\n--Testcase 661:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 662:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Trigger is fired for f1=2, not for f1=1\n--Testcase 369:\nDELETE FROM rem1;\n\n-- cleanup\n--Testcase 663:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 664:\nDROP TRIGGER trig_row_after_insupd ON rem1;\n--Testcase 665:\nDROP TRIGGER trig_row_before_delete ON rem1;\n--Testcase 666:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n\n-- Test various RETURN statements in BEFORE triggers.\n\n--Testcase 667:\nCREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$\n  BEGIN\n    NEW.f2 := NEW.f2 || ' triggered !';\n    RETURN NEW;\n  END\n$$ language plpgsql;\n\n--Testcase 668:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n-- The new values should have 'triggered' appended\n--Testcase 370:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 371:\nSELECT f1, f2 from rem1;\n--Testcase 372:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 373:\nSELECT f1, f2 from rem1;\n--Testcase 374:\nUPDATE rem1 set f2 = '';\n--Testcase 375:\nSELECT f1, f2 from rem1;\n--Testcase 376:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 377:\nSELECT f1, f2 from rem1;\n\n--Testcase 669:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f1 = 10;          -- all columns should be transmitted\n--Testcase 670:\nUPDATE rem1 set f1 = 10;\n--Testcase 671:\nSELECT f1, f2 from rem1;\n\n--Testcase 378:\nDELETE FROM rem1;\n\n-- Add a second trigger, to check that the changes are propagated correctly\n-- from trigger to trigger\n--Testcase 672:\nCREATE TRIGGER trig_row_before_insupd2\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 379:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 380:\nSELECT f1, f2 from rem1;\n--Testcase 381:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 382:\nSELECT f1, f2 from rem1;\n--Testcase 383:\nUPDATE rem1 set f2 = '';\n--Testcase 384:\nSELECT f1, f2 from rem1;\n--Testcase 385:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 386:\nSELECT f1, f2 from rem1;\n\n--Testcase 673:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 674:\nDROP TRIGGER trig_row_before_insupd2 ON rem1;\n\n--Testcase 387:\nDELETE from rem1;\n\n--Testcase 388:\nINSERT INTO rem1 VALUES (1, 'test');\n\n-- Test with a trigger returning NULL\n--Testcase 675:\nCREATE FUNCTION trig_null() RETURNS TRIGGER AS $$\n  BEGIN\n    RETURN NULL;\n  END\n$$ language plpgsql;\n\n--Testcase 676:\nCREATE TRIGGER trig_null\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_null();\n\n-- Nothing should have changed.\n--Testcase 389:\nINSERT INTO rem1 VALUES (2, 'test2');\n\n--Testcase 390:\nSELECT f1, f2 from rem1;\n\n--Testcase 391:\nUPDATE rem1 SET f2 = 'test2';\n\n--Testcase 392:\nSELECT f1, f2 from rem1;\n\n--Testcase 393:\nDELETE from rem1;\n\n--Testcase 394:\nSELECT f1, f2 from rem1;\n\n--Testcase 677:\nDROP TRIGGER trig_null ON rem1;\n--Testcase 395:\nDELETE from rem1;\n\n-- Test a combination of local and remote triggers\n--Testcase 678:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 679:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 680:\nCREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 681:\nINSERT INTO rem1(f2) VALUES ('test');\n--Testcase 682:\nUPDATE rem1 SET f2 = 'testo';\n\n-- Test returning a system attribute\n--Testcase 683:\nINSERT INTO rem1(f2) VALUES ('test');\n\n-- cleanup\n--Testcase 684:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 685:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 686:\nDROP TRIGGER trig_local_before ON rem1;\n\n\n-- Test direct foreign table modification functionality\n\n-- Test with statement-level triggers\n--Testcase 687:\nCREATE TRIGGER trig_stmt_before\n\tBEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 396:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 397:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 688:\nDROP TRIGGER trig_stmt_before ON rem1;\n\n--Testcase 689:\nCREATE TRIGGER trig_stmt_after\n\tAFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 398:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 399:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 690:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n-- Test with row-level ON INSERT triggers\n--Testcase 691:\nCREATE TRIGGER trig_row_before_insert\nBEFORE INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 400:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 401:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 692:\nDROP TRIGGER trig_row_before_insert ON rem1;\n\n--Testcase 693:\nCREATE TRIGGER trig_row_after_insert\nAFTER INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 402:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 403:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 694:\nDROP TRIGGER trig_row_after_insert ON rem1;\n\n-- Test with row-level ON UPDATE triggers\n--Testcase 695:\nCREATE TRIGGER trig_row_before_update\nBEFORE UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 404:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 405:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 696:\nDROP TRIGGER trig_row_before_update ON rem1;\n\n--Testcase 697:\nCREATE TRIGGER trig_row_after_update\nAFTER UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 406:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 407:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 698:\nDROP TRIGGER trig_row_after_update ON rem1;\n\n-- Test with row-level ON DELETE triggers\n--Testcase 699:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 408:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 409:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 700:\nDROP TRIGGER trig_row_before_delete ON rem1;\n\n--Testcase 701:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 410:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 411:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 702:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n-- ===================================================================\n-- test inheritance features\n-- ===================================================================\n\n--Testcase 703:\nCREATE TABLE a (aa TEXT);\nALTER TABLE a SET (autovacuum_enabled = 'false');\n--Testcase 704:\nCREATE FOREIGN TABLE b (aa TEXT OPTIONS (key 'true'), bb TEXT) INHERITS (a)\n  SERVER sqlite_svr OPTIONS (table 'loct');\n\n--Testcase 412:\nINSERT INTO a(aa) VALUES('aaa');\n--Testcase 413:\nINSERT INTO a(aa) VALUES('aaaa');\n--Testcase 414:\nINSERT INTO a(aa) VALUES('aaaaa');\n\n--Testcase 415:\nINSERT INTO b(aa) VALUES('bbb');\n--Testcase 416:\nINSERT INTO b(aa) VALUES('bbbb');\n--Testcase 417:\nINSERT INTO b(aa) VALUES('bbbbb');\n\n--Testcase 418:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 419:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 420:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 421:\nUPDATE a SET aa = 'zzzzzz' WHERE aa LIKE 'aaaa%';\n\n--Testcase 422:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 423:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 424:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 425:\nUPDATE b SET aa = 'new';\n\n--Testcase 426:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 427:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 428:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 429:\nUPDATE a SET aa = 'newtoo';\n\n--Testcase 430:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 431:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 432:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 433:\nDELETE FROM a;\n\n--Testcase 434:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 435:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 436:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 705:\nDROP TABLE a CASCADE;\n\n-- Check SELECT FOR UPDATE/SHARE with an inherited source table\n\n--Testcase 706:\ncreate table foo (f1 int, f2 int);\n--Testcase 707:\ncreate foreign table foo2 (f3 int OPTIONS (key 'true')) inherits (foo)\n  server sqlite_svr options (table 'loct1');\n--Testcase 708:\ncreate table bar (f1 int, f2 int);\n--Testcase 709:\ncreate foreign table bar2 (f3 int OPTIONS (key 'true')) inherits (bar)\n  server sqlite_svr options (table 'loct2');\n\nalter table foo set (autovacuum_enabled = 'false');\nalter table bar set (autovacuum_enabled = 'false');\n\n--Testcase 437:\ninsert into foo values(1,1);\n--Testcase 438:\ninsert into foo values(3,3);\n--Testcase 439:\ninsert into foo2 values(2,2,2);\n--Testcase 440:\ninsert into foo2 values(4,4,4);\n--Testcase 441:\ninsert into bar values(1,11);\n--Testcase 442:\ninsert into bar values(2,22);\n--Testcase 443:\ninsert into bar values(6,66);\n--Testcase 444:\ninsert into bar2 values(3,33,33);\n--Testcase 445:\ninsert into bar2 values(4,44,44);\n--Testcase 446:\ninsert into bar2 values(7,77,77);\n\n--Testcase 447:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for update;\n--Testcase 448:\nselect * from bar where f1 in (select f1 from foo) for update;\n\n--Testcase 449:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for share;\n--Testcase 450:\nselect * from bar where f1 in (select f1 from foo) for share;\n\n-- Check UPDATE with inherited target and an inherited source table\n--Testcase 451:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n--Testcase 452:\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n\n--Testcase 453:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Check UPDATE with inherited target and an appendrel subquery\n--Testcase 454:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n--Testcase 455:\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n\n--Testcase 456:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Test forcing the remote server to produce sorted data for a merge join,\n-- but the foreign table is an inheritance child.\n--truncate table loct1;\n--Testcase 710:\ndelete from foo2;\ntruncate table only foo;\n\\set num_rows_foo 2000\n--Testcase 711:\ninsert into foo2 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2);\n--Testcase 712:\ninsert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2);\nSET enable_hashjoin to false;\nSET enable_nestloop to false;\n--alter foreign table foo2 options (use_remote_estimate 'true');\n--create index i_loct1_f1 on loct1(f1);\n--Testcase 713:\ncreate index i_foo_f1 on foo(f1);\nanalyze foo;\n--analyze loct1;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 714:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 715:\nselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 716:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 717:\nselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\nRESET enable_hashjoin;\nRESET enable_nestloop;\n\n-- Test that WHERE CURRENT OF is not supported\nbegin;\ndeclare c cursor for select * from bar where f1 = 7;\n--Testcase 457:\nfetch from c;\n--Testcase 458:\nupdate bar set f2 = null where current of c;\nrollback;\n\n--Testcase 459:\nexplain (verbose, costs off)\ndelete from foo where f1 < 5;\n--Testcase 460:\ndelete from foo where f1 < 5;\n--Testcase 461:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 462:\nupdate bar set f2 = f2 + 100;\n--Testcase 463:\nselect * from bar;\n\n-- Test that UPDATE/DELETE with inherited target works with row-level triggers\n--Testcase 718:\nCREATE TRIGGER trig_row_before\nBEFORE UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 719:\nCREATE TRIGGER trig_row_after\nAFTER UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 464:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 465:\nupdate bar set f2 = f2 + 100;\n\n--Testcase 466:\nexplain (verbose, costs off)\ndelete from bar where f2 < 400;\n--Testcase 467:\ndelete from bar where f2 < 400;\n\n-- cleanup\n--Testcase 720:\ndrop table foo cascade;\n--Testcase 721:\ndrop table bar cascade;\n\n-- Test pushing down UPDATE/DELETE joins to the remote server\n--Testcase 722:\ncreate table parent (a int, b text);\n--Testcase 723:\ncreate foreign table remt1 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct3');\n--Testcase 724:\ncreate foreign table remt2 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct4');\nalter foreign table remt1 inherit parent;\n\n--Testcase 468:\ninsert into remt1 values (1, 'foo');\n--Testcase 469:\ninsert into remt1 values (2, 'bar');\n--Testcase 470:\ninsert into remt2 values (1, 'foo');\n--Testcase 471:\ninsert into remt2 values (2, 'bar');\n\n--Testcase 472:\nexplain (verbose, costs off)\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 473:\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 474:\nselect * from parent inner join remt2 on (parent.a = remt2.a);\n--Testcase 475:\nexplain (verbose, costs off)\ndelete from parent using remt2 where parent.a = remt2.a;\n--Testcase 476:\ndelete from parent using remt2 where parent.a = remt2.a;\n\n-- cleanup\n--Testcase 725:\ndrop foreign table remt1;\n--Testcase 726:\ndrop foreign table remt2;\n--Testcase 727:\ndrop table parent;\n\n/* \n-- Skip these tests, sqlite fdw does not support partition table, check constraint, copy from\n-- ===================================================================\n-- test tuple routing for foreign-table partitions\n-- ===================================================================\n\n-- Test insert tuple routing\ncreate table itrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table itrtest attach partition remp1 for values in (1);\nalter table itrtest attach partition remp2 for values in (2);\n\ninsert into itrtest values (1, 'foo');\ninsert into itrtest values (1, 'bar') returning *;\ninsert into itrtest values (2, 'baz');\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\n\nselect tableoid::regclass, * FROM itrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from itrtest;\n\ncreate unique index loct1_idx on loct1 (a);\n\n-- DO NOTHING without an inference specification is supported\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\n\n-- But other cases are not supported\ninsert into itrtest values (1, 'bar') on conflict (a) do nothing;\ninsert into itrtest values (1, 'bar') on conflict (a) do update set b = excluded.b;\n\nselect tableoid::regclass, * FROM itrtest;\n\ndelete from itrtest;\n\ndrop index loct1_idx;\n\n-- Test that remote triggers work with insert tuple routing\ncreate function br_insert_trigfunc() returns trigger as $$\nbegin\n\tnew.b := new.b || ' triggered !';\n\treturn new;\nend\n$$ language plpgsql;\ncreate trigger loct1_br_insert_trigger before insert on loct1\n\tfor each row execute procedure br_insert_trigfunc();\ncreate trigger loct2_br_insert_trigger before insert on loct2\n\tfor each row execute procedure br_insert_trigfunc();\n\n-- The new values are concatenated with ' triggered !'\ninsert into itrtest values (1, 'foo') returning *;\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\nwith result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result;\n\ndrop trigger loct1_br_insert_trigger on loct1;\ndrop trigger loct2_br_insert_trigger on loct2;\n\ndrop table itrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- Test update tuple routing\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table loct (a int check (a in (1)), b text);\ncreate foreign table remp (a int check (a in (1)), b text) server loopback options (table_name 'loct');\ncreate table locp (a int check (a in (2)), b text);\nalter table utrtest attach partition remp for values in (1);\nalter table utrtest attach partition locp for values in (2);\n\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- It's not allowed to move a row from a partition that is foreign to another\nupdate utrtest set a = 2 where b = 'foo' returning *;\n\n-- But the reverse is allowed\nupdate utrtest set a = 1 where b = 'qux' returning *;\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- The executor should not let unexercised FDWs shut down\nupdate utrtest set a = 1 where b = 'foo';\n\n-- Test that remote triggers work with update tuple routing\ncreate trigger loct_br_insert_trigger before insert on loct\n\tfor each row execute procedure br_insert_trigfunc();\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition is a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition isn't a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 2 returning *;\n\ndrop trigger loct_br_insert_trigger on loct;\n\n-- We can move rows to a foreign partition that has been updated already,\n-- but can't move rows to a foreign partition that hasn't been updated yet\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- Test the former case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 returning *;\nupdate utrtest set a = 1 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\n\n-- Change the definition of utrtest so that the foreign partition get updated\n-- after the local partition\ndelete from utrtest;\nalter table utrtest detach partition remp;\ndrop foreign table remp;\nalter table loct drop constraint loct_a_check;\nalter table loct add check (a in (3));\ncreate foreign table remp (a int check (a in (3)), b text) server loopback options (table_name 'loct');\nalter table utrtest attach partition remp for values in (3);\ninsert into utrtest values (2, 'qux');\ninsert into utrtest values (3, 'xyzzy');\n\n-- Test the latter case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 returning *;\nupdate utrtest set a = 3 returning *; -- ERROR\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *;\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR\n\ndrop table utrtest;\ndrop table loct;\n\n-- Test copy tuple routing\ncreate table ctrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table ctrtest attach partition remp1 for values in (1);\nalter table ctrtest attach partition remp2 for values in (2);\n\ncopy ctrtest from stdin;\n1\tfoo\n2\tqux\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\n-- Copying into foreign partitions directly should work as well\ncopy remp1 from stdin;\n1\tbar\n\\.\n\nselect tableoid::regclass, * FROM remp1;\n\ndrop table ctrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- ===================================================================\n-- test COPY FROM\n-- ===================================================================\n\ncreate table loc2 (f1 int, f2 text);\nalter table loc2 set (autovacuum_enabled = 'false');\ncreate foreign table rem2 (f1 int, f2 text) server loopback options(table_name 'loc2');\n\n-- Test basic functionality\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndelete from rem2;\n\n-- Test check constraints\nalter table loc2 add constraint loc2_f1positive check (f1 >= 0);\nalter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- check constraint is enforced on the remote side, not locally\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\ncopy rem2 from stdin; -- ERROR\n-1\txyzzy\n\\.\nselect * from rem2;\n\nalter foreign table rem2 drop constraint rem2_f1positive;\nalter table loc2 drop constraint loc2_f1positive;\n\ndelete from rem2;\n\n-- Test local triggers\ncreate trigger trig_stmt_before before insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_stmt_after after insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before on rem2;\ndrop trigger trig_row_after on rem2;\ndrop trigger trig_stmt_before on rem2;\ndrop trigger trig_stmt_after on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_row_before_insert before insert on rem2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on rem2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on rem2;\n\ndelete from rem2;\n\n-- Test remote triggers\ncreate trigger trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on loc2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on loc2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on loc2;\n\ndelete from rem2;\n\n-- Test a combination of local and remote triggers\ncreate trigger rem2_trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger rem2_trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger loc2_trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger rem2_trig_row_before on rem2;\ndrop trigger rem2_trig_row_after on rem2;\ndrop trigger loc2_trig_row_before_insert on loc2;\n\ndelete from rem2;\n\n-- test COPY FROM with foreign table created in the same transaction\ncreate table loc3 (f1 int, f2 text);\nbegin;\ncreate foreign table rem3 (f1 int, f2 text)\n\tserver loopback options(table_name 'loc3');\ncopy rem3 from stdin;\n1\tfoo\n2\tbar\n\\.\ncommit;\nselect * from rem3;\ndrop foreign table rem3;\ndrop table loc3;\n*/\n-- ===================================================================\n-- test IMPORT FOREIGN SCHEMA\n-- ===================================================================\n\n--Testcase 728:\nCREATE SCHEMA import_dest1;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest1;\n--Testcase 477:\n\\det+ import_dest1.*\n--Testcase 478:\n\\d import_dest1.*\n\n-- Options\n--Testcase 729:\nCREATE SCHEMA import_dest2;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest2\n  OPTIONS (import_default 'true');\n--Testcase 479:\n\\det+ import_dest2.*\n--Testcase 480:\n\\d import_dest2.*\n\n-- Check LIMIT TO and EXCEPT\n--Testcase 730:\nCREATE SCHEMA import_dest3;\nIMPORT FOREIGN SCHEMA public LIMIT TO (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 481:\n\\det+ import_dest3.*\nIMPORT FOREIGN SCHEMA public EXCEPT (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 482:\n\\det+ import_dest3.*\n\n-- Assorted error cases\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest3;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO notthere;\nIMPORT FOREIGN SCHEMA public FROM SERVER nowhere INTO notthere;\n\n/*\n-- Skip these test, sqlite fdw does not support fetch_size option, partition table\n-- Check case of a type present only on the remote server.\n-- We can fake this by dropping the type locally in our transaction.\nCREATE TYPE \"Colors\" AS ENUM ('red', 'green', 'blue');\nCREATE TABLE import_source.t5 (c1 int, c2 text collate \"C\", \"Col\" \"Colors\");\n\nCREATE SCHEMA import_dest5;\nBEGIN;\nDROP TYPE \"Colors\" CASCADE;\nIMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)\n  FROM SERVER loopback INTO import_dest5;  -- ERROR\n\nROLLBACK;\n\nBEGIN;\n\n\nCREATE SERVER fetch101 FOREIGN DATA WRAPPER postgres_fdw OPTIONS( fetch_size '101' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nALTER SERVER fetch101 OPTIONS( SET fetch_size '202' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=202'];\n\nCREATE FOREIGN TABLE table30000 ( x int ) SERVER fetch101 OPTIONS ( fetch_size '30000' );\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nALTER FOREIGN TABLE table30000 OPTIONS ( SET fetch_size '60000');\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=60000'];\n\nROLLBACK;\n\n-- ===================================================================\n-- test partitionwise joins\n-- ===================================================================\nSET enable_partitionwise_join=on;\n\nCREATE TABLE fprt1 (a int, b int, c varchar) PARTITION BY RANGE(a);\nCREATE TABLE fprt1_p1 (LIKE fprt1);\nCREATE TABLE fprt1_p2 (LIKE fprt1);\nALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i;\nINSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i;\nCREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250)\n\tSERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true');\nCREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (TABLE_NAME 'fprt1_p2');\nANALYZE fprt1;\nANALYZE fprt1_p1;\nANALYZE fprt1_p2;\n\nCREATE TABLE fprt2 (a int, b int, c varchar) PARTITION BY RANGE(b);\nCREATE TABLE fprt2_p1 (LIKE fprt2);\nCREATE TABLE fprt2_p2 (LIKE fprt2);\nALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i;\nINSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i;\nCREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true');\nALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250);\nCREATE FOREIGN TABLE ftprt2_p2 PARTITION OF fprt2 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p2', use_remote_estimate 'true');\nANALYZE fprt2;\nANALYZE fprt2_p1;\nANALYZE fprt2_p2;\n\n-- inner join three tables\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\n\n-- left outer join + nullable clause\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\n\n-- with whole-row reference; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\n\n-- join with lateral reference\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\n\n-- with PHVs, partitionwise join selected but no join pushdown\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\n\n-- test FOR UPDATE; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\n\nRESET enable_partitionwise_join;\n\n\n-- ===================================================================\n-- test partitionwise aggregates\n-- ===================================================================\n\nCREATE TABLE pagg_tab (a int, b int, c text) PARTITION BY RANGE(a);\n\nCREATE TABLE pagg_tab_p1 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p2 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p3 (LIKE pagg_tab);\n\nINSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10;\nINSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10;\nINSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20;\n\n-- Create foreign partitions\nCREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1');\nCREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2');;\nCREATE FOREIGN TABLE fpagg_tab_p3 PARTITION OF pagg_tab FOR VALUES FROM (20) TO (30) SERVER loopback OPTIONS (table_name 'pagg_tab_p3');;\n\nANALYZE pagg_tab;\nANALYZE fpagg_tab_p1;\nANALYZE fpagg_tab_p2;\nANALYZE fpagg_tab_p3;\n\n-- When GROUP BY clause matches with PARTITION KEY.\n-- Plan with partitionwise aggregates is disabled\nSET enable_partitionwise_aggregate TO false;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Plan with partitionwise aggregates is enabled\nSET enable_partitionwise_aggregate TO true;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Check with whole-row reference\n-- Should have all the columns in the target list for the given relation\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- When GROUP BY clause does not match with PARTITION KEY.\nEXPLAIN (COSTS OFF)\nSELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700 ORDER BY 1;\n*/\n\n/*\n-- Skip these tests, sqlite fdw does not support nosuper user.\n-- ===================================================================\n-- access rights and superuser\n-- ===================================================================\n\n-- Non-superuser cannot create a FDW without a password in the connstr\nCREATE ROLE regress_nosuper NOSUPERUSER;\n\nGRANT USAGE ON FOREIGN DATA WRAPPER sqlite_fdw TO regress_nosuper;\n\nSET ROLE regress_nosuper;\n\nSHOW is_superuser;\n\n-- This will be OK, we can create the FDW\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_nopw FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- But creation of user mappings for non-superusers should fail\nCREATE USER MAPPING FOR public SERVER sqlite_nopw;\nCREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\nCREATE FOREIGN TABLE ft1_nopw (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_nopw;\n\nALTER FOREIGN TABLE ft1_nopw OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1_nopw ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n\nSELECT * FROM ft1_nopw LIMIT 1;\n\n-- If we add a password to the connstr it'll fail, because we don't allow passwords\n-- in connstrs only in user mappings.\n\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw')$$;\n    END;\n$d$;\n\n-- If we add a password for our user mapping instead, we should get a different\n-- error because the password wasn't actually *used* when we run with trust auth.\n--\n-- This won't work with installcheck, but neither will most of the FDW checks.\n\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw');\n\nSELECT * FROM ft1_nopw LIMIT 1;\n\n-- Unpriv user cannot make the mapping passwordless\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\n\nSELECT * FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- But the superuser can\nALTER USER MAPPING FOR regress_nosuper SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\nSET ROLE regress_nosuper;\n\n-- Should finally work now\nSELECT * FROM ft1_nopw LIMIT 1;\n\n-- unpriv user also cannot set sslcert / sslkey on the user mapping\n-- first set password_required so we see the right error messages\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (SET password_required 'true');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslcert 'foo.crt');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslkey 'foo.key');\n\n-- We're done with the role named after a specific user and need to check the\n-- changes to the public mapping.\nDROP USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\n-- This will fail again as it'll resolve the user mapping for public, which\n-- lacks password_required=false\nSELECT * FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- The user mapping for public is passwordless and lacks the password_required=false\n-- mapping option, but will work because the current user is a superuser.\nSELECT * FROM ft1_nopw LIMIT 1;\n\n-- cleanup\nDROP USER MAPPING FOR public SERVER sqlite_nopw;\nDROP OWNED BY regress_nosuper;\nDROP ROLE regress_nosuper;\n\n-- Clean-up\nRESET enable_partitionwise_aggregate;\n*/\n-- Two-phase transactions are not supported.\nBEGIN;\n--Testcase 731:\nSELECT count(*) FROM ft1;\n-- error here\n--Testcase 732:\nPREPARE TRANSACTION 'fdw_tpc';\nROLLBACK;\n\n\n-- Clean-up\n--Testcase 733:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 734:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 735:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 736:\nDROP SERVER sqlite_svr2 CASCADE;\n--Testcase 737:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/extra/update.sql",
    "content": "--\n-- UPDATE syntax tests\n--\n--Testcase 32:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 33:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 34:\nCREATE FOREIGN TABLE update_test (\n    i   INT OPTIONS (key 'true'),\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n) SERVER sqlite_svr;\n\n--Testcase 35:\nCREATE FOREIGN TABLE upsert_test (\n    a   INT OPTIONS (key 'true'),\n    b   TEXT\n) SERVER sqlite_svr;\n\n\n--Testcase 1:\nINSERT INTO update_test VALUES (1, 5, 10, 'foo');\n--Testcase 2:\nINSERT INTO update_test(i, b, a) VALUES (2, 15, 10);\n\n--Testcase 3:\nSELECT * FROM update_test;\n\n--Testcase 4:\nUPDATE update_test SET a = DEFAULT, b = DEFAULT;\n\n--Testcase 5:\nSELECT * FROM update_test;\n\n-- aliases for the UPDATE target table\n--Testcase 6:\nUPDATE update_test AS t SET b = 10 WHERE t.a = 10;\n\n--Testcase 7:\nSELECT * FROM update_test;\n\n--Testcase 8:\nUPDATE update_test t SET b = t.b + 10 WHERE t.a = 10;\n\n--Testcase 9:\nSELECT * FROM update_test;\n\n--\n-- Test VALUES in FROM\n--\n\n--Testcase 10:\nUPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--Testcase 11:\nSELECT * FROM update_test;\n\n-- fail, wrong data type:\n--Testcase 12:\nUPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--\n-- Test multiple-set-clause syntax\n--\n\n--Testcase 13:\nINSERT INTO update_test SELECT i+2,a,b+1,c FROM update_test;\n--Testcase 14:\nSELECT * FROM update_test;\n\n--Testcase 15:\nUPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';\n--Testcase 16:\nSELECT * FROM update_test;\n--Testcase 17:\nUPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;\n--Testcase 18:\nSELECT * FROM update_test;\n-- fail, multi assignment to same column:\n--Testcase 19:\nUPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;\n\n-- uncorrelated sub-select:\n--Testcase 20:\nUPDATE update_test\n  SET (b,a) = (select a,b from update_test where b = 41 and c = 'car')\n  WHERE a = 100 AND b = 20;\n--Testcase 21:\nSELECT * FROM update_test;\n-- correlated sub-select:\n--Testcase 22:\nUPDATE update_test o\n  SET (b,a) = (select a+1,b from update_test i\n               where i.a=o.a and i.b=o.b and i.c is not distinct from o.c);\n--Testcase 23:\nSELECT * FROM update_test;\n-- fail, multiple rows supplied:\n--Testcase 24:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test);\n-- set to null if no rows supplied:\n--Testcase 25:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000)\n  WHERE a = 11;\n--Testcase 26:\nSELECT * FROM update_test;\n-- *-expansion should work in this context:\n--Testcase 27:\nUPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 100)) AS v(i, j)\n  WHERE update_test.a = v.i;\n-- you might expect this to work, but syntactically it's not a RowExpr:\n--Testcase 28:\nUPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 101)) AS v(i, j)\n  WHERE update_test.a = v.i;\n\n-- if an alias for the target table is specified, don't allow references\n-- to the original table name\n--Testcase 29:\nUPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;\n\n-- Make sure that we can update to a TOASTed value.\n--Testcase 30:\nUPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';\n--Testcase 31:\nSELECT a, b, char_length(c) FROM update_test;\n\n-- Check multi-assignment with a Result node to handle a one-time filter.\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 37:\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 38:\nSELECT a, b, char_length(c) FROM update_test;\n\n/* Skip, sqlite fdw does not support ON CONFLICT DO UPDATE\n-- Test ON CONFLICT DO UPDATE\nINSERT INTO upsert_test VALUES(1, 'Boo');\n-- uncorrelated  sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nINSERT INTO upsert_test VALUES (1, 'Baz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a)\n  RETURNING *;\n-- correlated sub-select (EXCLUDED.* alias):\nINSERT INTO upsert_test VALUES (1, 'Bat') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING *;\n\n-- ON CONFLICT using system attributes in RETURNING, testing both the\n-- inserting and updating paths. See bug report at:\n-- https://www.postgresql.org/message-id/73436355-6432-49B1-92ED-1FE4F7E7E100%40finefun.com.au\nINSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = 0 AS xmax_correct;\n-- currently xmax is set after a conflict - that's probably not good,\n-- but it seems worthwhile to have to be explicit if that changes.\nINSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct;\n\n\nDROP FOREIGN TABLE update_test;\nDROP FOREIGN TABLE upsert_test;\n*/\n\n/*Skip, sqlite fdw does not support create partition table\n---------------------------\n-- UPDATE with row movement\n---------------------------\n\n-- When a partitioned table receives an UPDATE to the partitioned key and the\n-- new values no longer meet the partition's bound, the row must be moved to\n-- the correct partition for the new partition key (if one exists). We must\n-- also ensure that updatable views on partitioned tables properly enforce any\n-- WITH CHECK OPTION that is defined. The situation with triggers in this case\n-- also requires thorough testing as partition key updates causing row\n-- movement convert UPDATEs into DELETE+INSERT.\n\nCREATE TABLE range_parted (\n\ta text,\n\tb bigint,\n\tc numeric,\n\td int,\n\te varchar\n) PARTITION BY RANGE (a, b);\n\n-- Create partitions intentionally in descending bound order, so as to test\n-- that update-row-movement works with the leaf partitions not in bound order.\nCREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);\nALTER TABLE range_parted ATTACH PARTITION part_b_20_b_30 FOR VALUES FROM ('b', 20) TO ('b', 30);\nCREATE TABLE part_b_10_b_20 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY RANGE (c);\nCREATE TABLE part_b_1_b_10 PARTITION OF range_parted FOR VALUES FROM ('b', 1) TO ('b', 10);\nALTER TABLE range_parted ATTACH PARTITION part_b_10_b_20 FOR VALUES FROM ('b', 10) TO ('b', 20);\nCREATE TABLE part_a_10_a_20 PARTITION OF range_parted FOR VALUES FROM ('a', 10) TO ('a', 20);\nCREATE TABLE part_a_1_a_10 PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('a', 10);\n\n-- Check that partition-key UPDATE works sanely on a partitioned table that\n-- does not have any child partitions.\nUPDATE part_b_10_b_20 set b = b - 6;\n\n-- Create some more partitions following the above pattern of descending bound\n-- order, but let's make the situation a bit more complex by having the\n-- attribute numbers of the columns vary from their parent partition.\nCREATE TABLE part_c_100_200 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY range (abs(d));\nALTER TABLE part_c_100_200 DROP COLUMN e, DROP COLUMN c, DROP COLUMN a;\nALTER TABLE part_c_100_200 ADD COLUMN c numeric, ADD COLUMN e varchar, ADD COLUMN a text;\nALTER TABLE part_c_100_200 DROP COLUMN b;\nALTER TABLE part_c_100_200 ADD COLUMN b bigint;\nCREATE TABLE part_d_1_15 PARTITION OF part_c_100_200 FOR VALUES FROM (1) TO (15);\nCREATE TABLE part_d_15_20 PARTITION OF part_c_100_200 FOR VALUES FROM (15) TO (20);\n\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_100_200 FOR VALUES FROM (100) TO (200);\n\nCREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_1_100 FOR VALUES FROM (1) TO (100);\n\n\\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'\n\\set show_data 'select tableoid::regclass::text COLLATE \"C\" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'\n:init_range_parted;\n:show_data;\n\n-- The order of subplans should be in bound order\nEXPLAIN (costs off) UPDATE range_parted set c = c - 50 WHERE c > 97;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_c_100_200 set c = c - 20, d = c WHERE c = 105;\n-- fail, no partition key update, so no attempt to move tuple,\n-- but \"a = 'a'\" violates partition constraint enforced by root partition)\nUPDATE part_b_10_b_20 set a = 'a';\n-- ok, partition key update, no constraint violation\nUPDATE range_parted set d = d - 10 WHERE d > 10;\n-- ok, no partition key update, no constraint violation\nUPDATE range_parted set e = d;\n-- No row found\nUPDATE part_c_1_100 set c = c + 20 WHERE c = 98;\n-- ok, row movement\nUPDATE part_b_10_b_20 set c = c + 20 returning c, b, a;\n:show_data;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *;\n-- ok, row movement, with subset of rows moved into different partition.\nUPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c;\n\n:show_data;\n\n-- Common table needed for multiple test scenarios.\nCREATE TABLE mintab(c1 int);\nINSERT into mintab VALUES (120);\n\n-- update partition key using updatable view.\nCREATE VIEW upview AS SELECT * FROM range_parted WHERE (select c > c1 FROM mintab) WITH CHECK OPTION;\n-- ok\nUPDATE upview set c = 199 WHERE b = 4;\n-- fail, check option violation\nUPDATE upview set c = 120 WHERE b = 4;\n-- fail, row movement with check option violation\nUPDATE upview set a = 'b', b = 15, c = 120 WHERE b = 4;\n-- ok, row movement, check option passes\nUPDATE upview set a = 'b', b = 15 WHERE b = 4;\n\n:show_data;\n\n-- cleanup\nDROP VIEW upview;\n\n-- RETURNING having whole-row vars.\n:init_range_parted;\nUPDATE range_parted set c = 95 WHERE a = 'b' and b > 10 and c > 100 returning (range_parted), *;\n:show_data;\n\n\n-- Transition tables with update row movement\n:init_range_parted;\n\nCREATE FUNCTION trans_updatetrigfunc() RETURNS trigger LANGUAGE plpgsql AS\n$$\n  begin\n    raise notice 'trigger = %, old table = %, new table = %',\n                 TG_NAME,\n                 (select string_agg(old_table::text, ', ' ORDER BY a) FROM old_table),\n                 (select string_agg(new_table::text, ', ' ORDER BY a) FROM new_table);\n    return null;\n  end;\n$$;\n\nCREATE TRIGGER trans_updatetrig\n  AFTER UPDATE ON range_parted REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\n\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end ) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\n\n-- Enabling OLD TABLE capture for both DELETE as well as UPDATE stmt triggers\n-- should not cause DELETEd rows to be captured twice. Similar thing for\n-- INSERT triggers and inserted rows.\nCREATE TRIGGER trans_deletetrig\n  AFTER DELETE ON range_parted REFERENCING OLD TABLE AS old_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nCREATE TRIGGER trans_inserttrig\n  AFTER INSERT ON range_parted REFERENCING NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\nDROP TRIGGER trans_deletetrig ON range_parted;\nDROP TRIGGER trans_inserttrig ON range_parted;\n-- Don't drop trans_updatetrig yet. It is required below.\n\n-- Test with transition tuple conversion happening for rows moved into the\n-- new partition. This requires a trigger that references transition table\n-- (we already have trans_updatetrig). For inserted rows, the conversion\n-- is not usually needed, because the original tuple is already compatible with\n-- the desired transition tuple format. But conversion happens when there is a\n-- BR trigger because the trigger can change the inserted row. So install a\n-- BR triggers on those child partitions where the rows will be moved.\nCREATE FUNCTION func_parted_mod_b() RETURNS trigger AS $$\nBEGIN\n   NEW.b = NEW.b + 1;\n   return NEW;\nEND $$ language plpgsql;\nCREATE TRIGGER trig_c1_100 BEFORE UPDATE OR INSERT ON part_c_1_100\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d1_15 BEFORE UPDATE OR INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d15_20 BEFORE UPDATE OR INSERT ON part_d_15_20\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\n:init_range_parted;\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n\n-- Case where per-partition tuple conversion map array is allocated, but the\n-- map is not required for the particular tuple that is routed, thanks to\n-- matching table attributes of the partition and the target table.\n:init_range_parted;\nUPDATE range_parted set b = 15 WHERE b = 1;\n:show_data;\n\nDROP TRIGGER trans_updatetrig ON range_parted;\nDROP TRIGGER trig_c1_100 ON part_c_1_100;\nDROP TRIGGER trig_d1_15 ON part_d_1_15;\nDROP TRIGGER trig_d15_20 ON part_d_15_20;\nDROP FUNCTION func_parted_mod_b();\n\n-- RLS policies with update-row-movement\n-----------------------------------------\n\nALTER TABLE range_parted ENABLE ROW LEVEL SECURITY;\nCREATE USER regress_range_parted_user;\nGRANT ALL ON range_parted, mintab TO regress_range_parted_user;\nCREATE POLICY seeall ON range_parted AS PERMISSIVE FOR SELECT USING (true);\nCREATE POLICY policy_range_parted ON range_parted for UPDATE USING (true) WITH CHECK (c % 2 = 0);\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error while moving row from\n-- part_a_10_a_20 to part_d_1_15, because we are setting 'c' to an odd number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n-- Create a trigger on part_d_1_15\nCREATE FUNCTION func_d_1_15() RETURNS trigger AS $$\nBEGIN\n   NEW.c = NEW.c + 1; -- Make even numbers odd, or vice versa\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_d_1_15 BEFORE INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_d_1_15();\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n\n-- Here, RLS checks should succeed while moving row from part_a_10_a_20 to\n-- part_d_1_15. Even though the UPDATE is setting 'c' to an odd number, the\n-- trigger at the destination partition again makes it an even number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error. Even though the UPDATE is setting\n-- 'c' to an even number, the trigger at the destination partition again makes\n-- it an odd number.\nUPDATE range_parted set a = 'b', c = 150 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP TRIGGER trig_d_1_15 ON part_d_1_15;\nDROP FUNCTION func_d_1_15();\n\n-- Policy expression contains SubPlan\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_subplan on range_parted\n    AS RESTRICTIVE for UPDATE USING (true)\n    WITH CHECK ((SELECT range_parted.c <= c1 FROM mintab));\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, mintab has row with c1 = 120\nUPDATE range_parted set a = 'b', c = 122 WHERE a = 'a' and c = 200;\n-- ok\nUPDATE range_parted set a = 'b', c = 120 WHERE a = 'a' and c = 200;\n\n-- RLS policy expression contains whole row.\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_wholerow on range_parted AS RESTRICTIVE for UPDATE USING (true)\n   WITH CHECK (range_parted = row('b', 10, 112, 1, NULL)::range_parted);\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- ok, should pass the RLS check\nUPDATE range_parted set a = 'b', c = 112 WHERE a = 'a' and c = 200;\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, the whole row RLS check should fail\nUPDATE range_parted set a = 'b', c = 116 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP POLICY policy_range_parted ON range_parted;\nDROP POLICY policy_range_parted_subplan ON range_parted;\nDROP POLICY policy_range_parted_wholerow ON range_parted;\nREVOKE ALL ON range_parted, mintab FROM regress_range_parted_user;\nDROP USER regress_range_parted_user;\nDROP TABLE mintab;\n\n\n-- statement triggers with update row movement\n---------------------------------------------------\n\n:init_range_parted;\n\nCREATE FUNCTION trigfunc() returns trigger language plpgsql as\n$$\n  begin\n    raise notice 'trigger = % fired on table % during %',\n                 TG_NAME, TG_TABLE_NAME, TG_OP;\n    return null;\n  end;\n$$;\n-- Triggers on root partition\nCREATE TRIGGER parent_delete_trig\n  AFTER DELETE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_update_trig\n  AFTER UPDATE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_insert_trig\n  AFTER INSERT ON range_parted for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_c_1_100\nCREATE TRIGGER c1_delete_trig\n  AFTER DELETE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_update_trig\n  AFTER UPDATE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_insert_trig\n  AFTER INSERT ON part_c_1_100 for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_d_1_15\nCREATE TRIGGER d1_delete_trig\n  AFTER DELETE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_update_trig\n  AFTER UPDATE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_insert_trig\n  AFTER INSERT ON part_d_1_15 for each statement execute procedure trigfunc();\n-- Triggers on leaf partition part_d_15_20\nCREATE TRIGGER d15_delete_trig\n  AFTER DELETE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_update_trig\n  AFTER UPDATE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_insert_trig\n  AFTER INSERT ON part_d_15_20 for each statement execute procedure trigfunc();\n\n-- Move all rows from part_c_100_200 to part_c_1_100. None of the delete or\n-- insert statement triggers should be fired.\nUPDATE range_parted set c = c - 50 WHERE c > 97;\n:show_data;\n\nDROP TRIGGER parent_delete_trig ON range_parted;\nDROP TRIGGER parent_update_trig ON range_parted;\nDROP TRIGGER parent_insert_trig ON range_parted;\nDROP TRIGGER c1_delete_trig ON part_c_1_100;\nDROP TRIGGER c1_update_trig ON part_c_1_100;\nDROP TRIGGER c1_insert_trig ON part_c_1_100;\nDROP TRIGGER d1_delete_trig ON part_d_1_15;\nDROP TRIGGER d1_update_trig ON part_d_1_15;\nDROP TRIGGER d1_insert_trig ON part_d_1_15;\nDROP TRIGGER d15_delete_trig ON part_d_15_20;\nDROP TRIGGER d15_update_trig ON part_d_15_20;\nDROP TRIGGER d15_insert_trig ON part_d_15_20;\n\n\n-- Creating default partition for range\n:init_range_parted;\ncreate table part_def partition of range_parted default;\n\\d+ part_def\ninsert into range_parted values ('c', 9);\n-- ok\nupdate part_def set a = 'd' where a = 'c';\n-- fail\nupdate part_def set a = 'a' where a = 'd';\n\n:show_data;\n\n-- Update row movement from non-default to default partition.\n-- fail, default partition is not under part_a_10_a_20;\nUPDATE part_a_10_a_20 set a = 'ad' WHERE a = 'a';\n-- ok\nUPDATE range_parted set a = 'ad' WHERE a = 'a';\nUPDATE range_parted set a = 'bd' WHERE a = 'b';\n:show_data;\n-- Update row movement from default to non-default partitions.\n-- ok\nUPDATE range_parted set a = 'a' WHERE a = 'ad';\nUPDATE range_parted set a = 'b' WHERE a = 'bd';\n:show_data;\n\n-- Cleanup: range_parted no longer needed.\nDROP TABLE range_parted;\n\nCREATE TABLE list_parted (\n\ta text,\n\tb int\n) PARTITION BY list (a);\nCREATE TABLE list_part1  PARTITION OF list_parted for VALUES in ('a', 'b');\nCREATE TABLE list_default PARTITION OF list_parted default;\nINSERT into list_part1 VALUES ('a', 1);\nINSERT into list_default VALUES ('d', 10);\n\n-- fail\nUPDATE list_default set a = 'a' WHERE a = 'd';\n-- ok\nUPDATE list_default set a = 'x' WHERE a = 'd';\n\nDROP TABLE list_parted;\n\n--------------\n-- Some more update-partition-key test scenarios below. This time use list\n-- partitions.\n--------------\n\n-- Setup for list partitions\nCREATE TABLE list_parted (a numeric, b int, c int8) PARTITION BY list (a);\nCREATE TABLE sub_parted PARTITION OF list_parted for VALUES in (1) PARTITION BY list (b);\n\nCREATE TABLE sub_part1(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part1 for VALUES in (1);\nCREATE TABLE sub_part2(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part2 for VALUES in (2);\n\nCREATE TABLE list_part1(a numeric, b int, c int8);\nALTER TABLE list_parted ATTACH PARTITION list_part1 for VALUES in (2,3);\n\nINSERT into list_parted VALUES (2,5,50);\nINSERT into list_parted VALUES (3,6,60);\nINSERT into sub_parted VALUES (1,1,60);\nINSERT into sub_parted VALUES (1,2,10);\n\n-- Test partition constraint violation when intermediate ancestor is used and\n-- constraint is inherited from upper root.\nUPDATE sub_parted set a = 2 WHERE c = 10;\n\n-- Test update-partition-key, where the unpruned partitions do not have their\n-- partition keys updated.\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\nUPDATE list_parted set b = c + a WHERE a = 2;\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\n\n\n-- Test the case where BR UPDATE triggers change the partition key.\nCREATE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   NEW.b = 2; -- This is changing partition key column.\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER parted_mod_b before update on sub_part1\n   for each row execute procedure func_parted_mod_b();\n\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\n-- This should do the tuple routing even though there is no explicit\n-- partition-key update, because there is a trigger on sub_part1.\nUPDATE list_parted set c = 70 WHERE b  = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\nDROP TRIGGER parted_mod_b ON sub_part1;\n\n-- If BR DELETE trigger prevented DELETE from happening, we should also skip\n-- the INSERT if that delete is part of UPDATE=>DELETE+INSERT.\nCREATE OR REPLACE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   raise notice 'Trigger: Got OLD row %, but returning NULL', OLD;\n   return NULL;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_skip_delete before delete on sub_part2\n   for each row execute procedure func_parted_mod_b();\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n-- Drop the trigger. Now the row should be moved.\nDROP TRIGGER trig_skip_delete ON sub_part2;\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP FUNCTION func_parted_mod_b();\n\n-- UPDATE partition-key with FROM clause. If join produces multiple output\n-- rows for the same row to be modified, we should tuple-route the row only\n-- once. There should not be any rows inserted.\nCREATE TABLE non_parted (id int);\nINSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);\nUPDATE list_parted t1 set a = 2 FROM non_parted t2 WHERE t1.a = t2.id and a = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP TABLE non_parted;\n\n-- Cleanup: list_parted no longer needed.\nDROP TABLE list_parted;\n\n-- create custom operator class and hash function, for the same reason\n-- explained in alter_table.sql\ncreate or replace function dummy_hashint4(a int4, seed int8) returns int8 as\n$$ begin return (a + seed); end; $$ language 'plpgsql' immutable;\ncreate operator class custom_opclass for type int4 using hash as\noperator 1 = , function 2 dummy_hashint4(int4, int8);\n\ncreate table hash_parted (\n\ta int,\n\tb int\n) partition by hash (a custom_opclass, b custom_opclass);\ncreate table hpart1 partition of hash_parted for values with (modulus 2, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 8, remainder 0);\ncreate table hpart4 partition of hash_parted for values with (modulus 8, remainder 4);\ninsert into hpart1 values (1, 1);\ninsert into hpart2 values (2, 5);\ninsert into hpart4 values (3, 4);\n\n-- fail\nupdate hpart1 set a = 3, b=4 where a = 1;\n-- ok, row movement\nupdate hash_parted set b = b - 1 where b = 1;\n-- ok\nupdate hash_parted set b = b + 8 where b = 1;\n\n-- cleanup\ndrop table hash_parted;\ndrop operator class custom_opclass using hash;\ndrop function dummy_hashint4(a int4, seed int8);\n*/\n\n--drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 39:\nDROP SERVER sqlite_svr;\n--Testcase 40:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/libsqlite.sql",
    "content": "-- Test for SQLite library code source and defaults\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nSELECT sqlite_fdw_sqlite_version();\n--Testcase 3:\nSELECT length(sqlite_fdw_sqlite_code_source());\n--Testcase 4:\nSELECT sqlite_fdw_sqlite_code_source();\n\n--Testcase 7:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/selectfunc.sql",
    "content": "SET datestyle=ISO;\nSET timezone='Japan';\n\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER server1 FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/selectfunc.db');\n--CREATE USER MAPPING FOR CURRENT_USER SERVER server1 OPTIONS(user 'user', password 'pass');\n\n--IMPORT FOREIGN SCHEMA public FROM SERVER server1 INTO public OPTIONS(import_time_text 'false');\n--Testcase 3:\nCREATE FOREIGN TABLE s3(id text OPTIONS (key 'true'), time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text) SERVER server1;\n\n-- s3 (value1 as float8, value2 as bigint)\n--Testcase 4:\n\\d s3;\n--Testcase 5:\nSELECT * FROM s3;\n\n-- select float8() (not pushdown, remove float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select float8() (not pushdown, remove float8, result)\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select sqrt (builtin function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (buitin function, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function,, not pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, not pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select abs (builtin function, explain)\n--Testcase 6:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (buitin function, result)\n--Testcase 7:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (builtin function, not pushdown constraints, explain)\n--Testcase 8:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, not pushdown constraints, result)\n--Testcase 9:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, pushdown constraints, explain)\n--Testcase 10:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select abs (builtin function, pushdown constraints, result)\n--Testcase 11:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select log (builtin function, need to swap arguments, numeric cast, explain)\n-- log_<base>(v) : postgresql (base, v), sqlite (v, base)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (builtin function, need to swap arguments, numeric cast, result)\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, result)\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, result)\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, result)\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log2 (stub function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select log2 (stub function, result)\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select spread (stub agg function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, result)\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, raise exception if not expected type)\n-- SELECT spread(value1::numeric),spread(value2::numeric),spread(value3::numeric),spread(value4::numeric) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs as nest function with agg (pushdown, explain)\n--Testcase 12:\nEXPLAIN VERBOSE\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest function with agg (pushdown, result)\n--Testcase 13:\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest with log2 (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs as nest with log2 (pushdown, result)\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs with non pushdown func and explicit constant (explain)\n--Testcase 14:\nEXPLAIN VERBOSE\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select abs with non pushdown func and explicit constant (result)\n--Testcase 15:\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, result)\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant and tag (error, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1, tag1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select spread (stub agg function and group by influx_time() and tag) (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by influx_time() and tag) (result)\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by tag only) (result)\n-- SELECT tag1,spread(\"value1\") FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY tag1;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function and other aggs) (result)\n-- SELECT sum(\"value1\"),spread(\"value1\"),count(\"value1\") FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs with order by (explain)\n--Testcase 16:\nEXPLAIN VERBOSE\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by (result)\n--Testcase 17:\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by index (result)\n--Testcase 18:\nSELECT value1, abs(1-value1) FROM s3 order by 2,1;\n\n-- select abs with order by index (result)\n--Testcase 19:\nSELECT value1, abs(1-value1) FROM s3 order by 1,2;\n\n-- select abs and as\n--Testcase 20:\nSELECT abs(value3) as abs1 FROM s3;\n\n-- select spread over join query (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread over join query (result, stub call error)\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain, cannot pushdown, stub call error)\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select abs with arithmetic and tag in the middle (explain)\n--Testcase 21:\nEXPLAIN VERBOSE\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select abs with arithmetic and tag in the middle (result)\n--Testcase 22:\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select with order by limit (explain)\n--Testcase 23:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select with order by limit (explain)\n--Testcase 24:\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select mixing with non pushdown func (all not pushdown, explain)\n--Testcase 25:\nEXPLAIN VERBOSE\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- select mixing with non pushdown func (result)\n--Testcase 26:\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- sqlite data prep\n\n-- sqlite pushdown supported functions (explain)\n--Testcase 27:\nEXPLAIN VERBOSE\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown supported functions (result)\n--Testcase 28:\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown nest functions (explain)\n--Testcase 32:\nEXPLAIN VERBOSE\nSELECT round(abs(value2), 0) FROM s3;\n\n-- sqlite pushdown nest functions (result)\n--Testcase 33:\nSELECT round(abs(value2), 0) FROM s3;\n\n-- select mod (builtin function, explain)\n--Testcase 34:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, result)\n--Testcase 35:\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, not pushdown constraints, explain)\n--Testcase 36:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, not pushdown constraints, result)\n--Testcase 37:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, pushdown constraints, explain)\n--Testcase 38:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, pushdown constraints, result)\n--Testcase 39:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 40:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 41:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 42:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 43:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod as nest function with agg (pushdown, explain)\n--Testcase 44:\nEXPLAIN VERBOSE\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest function with agg (pushdown, result)\n--Testcase 45:\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, explain)\n--Testcase 46:\nEXPLAIN VERBOSE\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, result)\n--Testcase 47:\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod with non pushdown func and explicit constant (explain)\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with non pushdown func and explicit constant (result)\n--Testcase 49:\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with order by (explain)\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by (result)\n--Testcase 51:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by index (result)\n--Testcase 52:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 2,1;\n\n-- select mod with order by index (result)\n--Testcase 53:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 1,2;\n\n-- select mod with group by (explain)\n--Testcase 54:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by (result)\n--Testcase 55:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by index (result)\n--Testcase 56:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 2,1;\n\n-- select mod with group by index (result)\n--Testcase 57:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2;\n\n-- select mod with group by having (explain)\n--Testcase 58:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by having (result)\n--Testcase 59:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by index having (result)\n--Testcase 60:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2 HAVING value1 > 1;\n\n-- select mod and as\n--Testcase 61:\nSELECT value1, mod(value2, 2) as mod1 FROM s3;\n\n--Testcase 29:\nDROP FOREIGN TABLE s3;\n--Testcase 30:\nDROP SERVER server1;\n--Testcase 31:\nDROP EXTENSION sqlite_fdw;\n"
  },
  {
    "path": "sql/13.15/sqlite_fdw.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 129:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 130:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 131:\nCREATE FOREIGN TABLE department(department_id int OPTIONS (key 'true'), department_name text) SERVER sqlite_svr; \n--Testcase 132:\nCREATE FOREIGN TABLE employee(emp_id int OPTIONS (key 'true'), emp_name text, emp_dept_id int) SERVER sqlite_svr;\n--Testcase 133:\nCREATE FOREIGN TABLE empdata(emp_id int OPTIONS (key 'true'), emp_dat bytea) SERVER sqlite_svr;\n--Testcase 134:\nCREATE FOREIGN TABLE numbers(a int OPTIONS (key 'true'), b varchar(255)) SERVER sqlite_svr;\n--Testcase 135:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n--Testcase 136:\nCREATE FOREIGN TABLE noprimary(a int, b text) SERVER sqlite_svr;\n--Testcase 137:\nCREATE FOREIGN TABLE RO_RW_test(i int OPTIONS (key 'true'), a text, b float, c int) SERVER sqlite_svr;\n\n--Testcase 1:\nSELECT * FROM department LIMIT 10;\n--Testcase 2:\nSELECT * FROM employee LIMIT 10;\n--Testcase 3:\nSELECT * FROM empdata LIMIT 10;\n\n--Testcase 4:\nINSERT INTO department VALUES(generate_series(1,100), 'dept - ' || generate_series(1,100));\n--Testcase 5:\nINSERT INTO employee VALUES(generate_series(1,100), 'emp - ' || generate_series(1,100), generate_series(1,100));\n--Testcase 6:\nINSERT INTO empdata  VALUES(1, decode ('01234567', 'hex'));\n\n--Testcase 7:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 8:\nINSERT INTO numbers VALUES(2, 'Two');\n--Testcase 9:\nINSERT INTO numbers VALUES(3, 'Three');\n--Testcase 10:\nINSERT INTO numbers VALUES(4, 'Four');\n--Testcase 11:\nINSERT INTO numbers VALUES(5, 'Five');\n--Testcase 12:\nINSERT INTO numbers VALUES(6, 'Six');\n--Testcase 13:\nINSERT INTO numbers VALUES(7, 'Seven');\n--Testcase 14:\nINSERT INTO numbers VALUES(8, 'Eight');\n--Testcase 15:\nINSERT INTO numbers VALUES(9, 'Nine');\n\n--Testcase 16:\nSELECT count(*) FROM department;\n--Testcase 17:\nSELECT count(*) FROM employee;\n--Testcase 18:\nSELECT count(*) FROM empdata;\n\n--Testcase 19:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n\n--Testcase 20:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) LIMIT 10;\n\n--Testcase 21:\nSELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n--Testcase 22:\nSELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) ORDER BY d.department_id LIMIT 10;\n--Testcase 23:\nSELECT * FROM empdata;\n\n--Testcase 24:\nDELETE FROM employee WHERE emp_id = 10;\n\n--Testcase 25:\nSELECT COUNT(*) FROM department LIMIT 10;\n--Testcase 26:\nSELECT COUNT(*) FROM employee WHERE emp_id = 10;\n\n--Testcase 27:\nUPDATE employee SET emp_name = 'UPDATEd emp' WHERE emp_id = 20;\n--Testcase 28:\nSELECT emp_id, emp_name FROM employee WHERE emp_name like 'UPDATEd emp';\n\n--Testcase 29:\nUPDATE empdata SET emp_dat = decode ('0123', 'hex');\n--Testcase 30:\nSELECT * FROM empdata;\n\n--Testcase 31:\nSELECT * FROM employee LIMIT 10;\n--Testcase 32:\nSELECT * FROM employee WHERE emp_id IN (1);\n--Testcase 33:\nSELECT * FROM employee WHERE emp_id IN (1,3,4,5);\n--Testcase 34:\nSELECT * FROM employee WHERE emp_id IN (10000,1000);\n\n--Testcase 35:\nSELECT * FROM employee WHERE emp_id NOT IN (1) LIMIT 5;\n--Testcase 36:\nSELECT * FROM employee WHERE emp_id NOT IN (1,3,4,5) LIMIT 5;\n--Testcase 37:\nSELECT * FROM employee WHERE emp_id NOT IN (10000,1000) LIMIT 5;\n\n--Testcase 38:\nSELECT * FROM employee WHERE emp_id NOT IN (SELECT emp_id FROM employee WHERE emp_id IN (1,10));\n--Testcase 39:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 1', 'emp - 2') LIMIT 5;\n--Testcase 40:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 10') LIMIT 5;\n\n--Testcase 41:\nSELECT * FROM numbers WHERE (CASE WHEN a % 2 = 0 THEN 1 WHEN a % 5 = 0 THEN 1 ELSE 0 END) = 1;\n--Testcase 42:\nSELECT * FROM numbers WHERE (CASE b WHEN 'Two' THEN 1 WHEN 'Six' THEN 1 ELSE 0 END) = 1;\n\n--Testcase 152:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE (round(abs(a)) = 1);\n--Testcase 153:\nSELECT * FROM numbers WHERE (round(abs(a)) = 1);\n\n--Testcase 137:\ncreate or replace function test_param_WHERE() returns void as $$\nDECLARE\n  n varchar;\nBEGIN\n  FOR x IN 1..9 LOOP\n--Testcase 138:\n    SELECT b INTO n from numbers WHERE a=x;\n    raise notice 'Found number %', n;\n  end loop;\n  return;\nEND\n$$ LANGUAGE plpgsql;\n--Testcase 43:\nSELECT test_param_WHERE();\n\n--Testcase 44:\nSELECT b from numbers WHERE a=1;\n--Testcase 45:\nEXPLAIN(COSTS OFF) SELECT b from numbers WHERE a=1;\n\n--Testcase 46:\nSELECT a FROM numbers WHERE b = (SELECT NULL::text);\n\n\n--Testcase 47:\nPREPARE stmt1 (int, int) AS\n  SELECT * FROM numbers WHERE a=$1 or a=$2;\n--Testcase 48:\nEXECUTE stmt1(1,2);\n--Testcase 49:\nEXECUTE stmt1(2,2); \n--Testcase 50:\nEXECUTE stmt1(3,2); \n--Testcase 51:\nEXECUTE stmt1(4,2);\n-- generic plan\n--Testcase 52:\nEXECUTE stmt1(5,2); \n--Testcase 53:\nEXECUTE stmt1(6,2); \n--Testcase 54:\nEXECUTE stmt1(7,2); \n\n--Testcase 55:\nDELETE FROM employee;\n--Testcase 56:\nDELETE FROM department;\n--Testcase 57:\nDELETE FROM empdata;\n--Testcase 58:\nDELETE FROM numbers;\n\nBEGIN;\n--Testcase 59:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 60:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n\n--Testcase 61:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 62:\nINSERT INTO numbers VALUES(3, 'Three');\nROLLBACK;\n--Testcase 63:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 64:\nINSERT INTO numbers VALUES(4, 'Four');\nSAVEPOINT my_savepoint;\n--Testcase 65:\nINSERT INTO numbers VALUES(5, 'Five');\nROLLBACK TO SAVEPOINT my_savepoint;\n--Testcase 66:\nINSERT INTO numbers VALUES(6, 'Six');\nCOMMIT;\n\n--Testcase 67:\nSELECT * from numbers;\n\n-- duplicate key\n--Testcase 68:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 69:\nDELETE from numbers;\n\nBEGIN;\n--Testcase 70:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 71:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n-- violate unique constraint\n--Testcase 72:\nUPDATE numbers SET b='Two' WHERE a = 1; \n--Testcase 73:\nSELECT * from numbers;\n\n-- push down\n--Testcase 74:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n-- (1,2,3) is pushed down\n--Testcase 75:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (1,2,3) AND (1,2) < (a,5);\n\n--Testcase 76:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (a+2*a,5);\n\n--Testcase 77:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n--Testcase 78:\nSELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n--Testcase 79:\nSELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n-- ANY with ARRAY expression\n--Testcase 154:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n--Testcase 155:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n\n--Testcase 156:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n--Testcase 157:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n\n--Testcase 158:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n--Testcase 159:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n\n--Testcase 160:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n--Testcase 161:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n\n--Testcase 162:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n--Testcase 163:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n\n--Testcase 164:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n--Testcase 165:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n\n-- ANY with ARRAY const\n--Testcase 166:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n--Testcase 167:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n\n--Testcase 168:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n--Testcase 169:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n\n--Testcase 170:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n--Testcase 171:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n\n--Testcase 172:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n--Testcase 173:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n\n--Testcase 174:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n--Testcase 175:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n\n--Testcase 176:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n--Testcase 177:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n\n--Testcase 210:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n--Testcase 211:\nSELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n\n--Testcase 212:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n--Testcase 213:\nSELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n\n-- ALL with ARRAY expression\n--Testcase 178:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n--Testcase 179:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n\n--Testcase 180:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n--Testcase 181:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n\n--Testcase 182:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n--Testcase 183:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n\n--Testcase 184:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n--Testcase 185:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n\n--Testcase 186:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n--Testcase 187:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n\n--Testcase 188:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n--Testcase 189:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n\n-- ALL with ARRAY const\n--Testcase 190:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n--Testcase 191:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n\n--Testcase 192:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n--Testcase 193:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n\n--Testcase 194:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n--Testcase 195:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n\n--Testcase 196:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n--Testcase 197:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n\n--Testcase 198:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n--Testcase 199:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n\n--Testcase 200:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n--Testcase 201:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n\n-- ANY/ALL with TEXT ARRAY const\n--Testcase 202:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n--Testcase 203:\nSELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n\n--Testcase 204:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n--Testcase 205:\nSELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n\n--Testcase 206:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n--Testcase 207:\nSELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n\n--Testcase 208:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n--Testcase 209:\nSELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n\n--Testcase 80:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 81:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 82:\nUPDATE multiprimary SET b = 10 WHERE c = 3;\n--Testcase 83:\nSELECT * from multiprimary;\n--Testcase 84:\nUPDATE multiprimary SET a = 10 WHERE a = 1;\n--Testcase 85:\nSELECT * from multiprimary;\n--Testcase 86:\nUPDATE multiprimary SET a = 100, b=200, c=300 WHERE a=10 AND b=10;\n--Testcase 87:\nSELECT * from multiprimary;\n--Testcase 88:\nUPDATE multiprimary SET a = 1234;\n--Testcase 89:\nSELECT * from multiprimary;\n--Testcase 90:\nUPDATE multiprimary SET a = a+1, b=b+1 WHERE b=200 AND c=300;\n\n--Testcase 91:\nSELECT * from multiprimary;\n--Testcase 92:\nDELETE from multiprimary WHERE a = 1235;\n--Testcase 93:\nSELECT * from multiprimary;\n--Testcase 94:\nDELETE from multiprimary WHERE b = 2;\n--Testcase 95:\nSELECT * from multiprimary;\n\n--Testcase 96:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 97:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 98:\nINSERT INTO multiprimary VALUES(1,10,20);\n--Testcase 99:\nINSERT INTO multiprimary VALUES(2,20,40);\n\n\n\n--Testcase 100:\nSELECT count(distinct a) from multiprimary;\n--Testcase 101:\nSELECT sum(b),max(b), min(b) from multiprimary;\n--Testcase 102:\nSELECT sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n--Testcase 103:\nSELECT sum(a) from multiprimary group by b having sum(a) > 0 order by sum(a);\n--Testcase 104:\nSELECT sum(a) A from multiprimary group by b having avg(abs(a)) > 0 AND sum(a) > 0 order by A;\n--Testcase 105:\nSELECT count(nullif(a, 1)) FROM multiprimary;\n--Testcase 106:\nSELECT a,a FROM multiprimary group by 1,2;\n--Testcase 107:\nSELECT * from multiprimary, numbers WHERE multiprimary.a=numbers.a;\n\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n--Testcase 109:\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n\n--Testcase 110:\nINSERT INTO numbers VALUES(4, 'Four');\n\n-- All where clauses are pushed down\n--Testcase 111:\nSELECT * FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n--Testcase 112:\nEXPLAIN (verbose, costs off)  SELECT b, length(b) FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n\n-- Only \"length(b) = 4\" are pushed down\n--Testcase 113:\nSELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n--Testcase 114:\nEXPLAIN (verbose, costs off) SELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n\n-- Aggregates in subquery are pushed down.\n--Testcase 214:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select a a, sum(a) b from numbers group by a, abs(a) order by 1, 2) x;\n--Testcase 215:\nselect count(x.a), sum(x.a) from (select a a, sum(a) b from numbers group by a, abs(a) order by 1, 2) x;\n\n--Testcase 115:\nINSERT INTO multiprimary (b,c) VALUES (99, 100);\n--Testcase 116:\nSELECT c FROM multiprimary WHERE COALESCE(a,b,c) = 99;\n\n--Testcase 139:\nCREATE FOREIGN TABLE multiprimary2(a int, b int, c int OPTIONS(column_name 'b')) SERVER sqlite_svr OPTIONS (table 'multiprimary');\n--Testcase 117:\nSELECT * FROM multiprimary2;\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN a OPTIONS(ADD column_name 'b');\n--Testcase 118:\nSELECT * FROM multiprimary2;\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN b OPTIONS (column_name 'nosuch column');\n--Testcase 119:\nSELECT * FROM multiprimary2;\n--Testcase 140:\nEXPLAIN (VERBOSE) SELECT * FROM multiprimary2;\n--Testcase 120:\nSELECT a FROM multiprimary2 WHERE b = 1;\n\n\n--Testcase 141:\nCREATE FOREIGN TABLE columntest(a int OPTIONS(column_name 'a a', key 'true'), \"b b\" int  OPTIONS(key 'true'), c int OPTIONS(column_name 'c c')) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO columntest VALUES(1,2,3);\n--Testcase 122:\nUPDATE columntest SET c=10 WHERE a = 1;\n--Testcase 123:\nSELECT * FROM columntest;\n--Testcase 124:\nUPDATE columntest SET a=100 WHERE c = 10;\n--Testcase 125:\nSELECT * FROM columntest;\n--Testcase 126:\nINSERT INTO noprimary VALUES(1,'2');\n--Testcase 127:\nINSERT INTO noprimary SELECT * FROM noprimary;\n--Testcase 128:\nSELECT * FROM noprimary;\n\n--get version\n--Testcase 153:\n\\df sqlite*\n--Testcase 154:\nSELECT * FROM public.sqlite_fdw_version();\n--Testcase 155:\nSELECT sqlite_fdw_version();\n\n-- issue #44 github\n--Testcase 156:\nCREATE FOREIGN TABLE fts_table (name text,  description text) SERVER sqlite_svr;\n\n--Testcase 157:\nINSERT INTO fts_table VALUES ('this is name', 'this is description');\n\n--Testcase 158:\nSELECT * FROM fts_table; -- should work\n\n--Testcase 159:\nALTER TABLE fts_table ALTER COLUMN name TYPE int;\n\n--Testcase 160:\nSELECT * FROM fts_table; -- should fail\n\n-- issue #62 github\n--Testcase 236:\nINSERT INTO noprimary VALUES (4, 'Test''s');\n--Testcase 237:\nINSERT INTO noprimary VALUES (5, 'Test');\n\n--Testcase 238:\nSELECT * FROM noprimary;\n--Testcase 239:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b = 'Test''s';\n--Testcase 240:\nSELECT * FROM noprimary where b = 'Test''s';\n\n--Testcase 241:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n--Testcase 242:\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n\n-- Executable test case for pushdown CASE expressions (results)\n--Testcase 224:\nCREATE FOREIGN TABLE case_exp(c1 int OPTIONS (key 'true'), c3 text, c6 varchar(10)) SERVER sqlite_svr;\n\n--Testcase 225:\nINSERT INTO case_exp\n  SELECT id,\n         to_char(id, 'FM00000'),\n         id % 10\n  FROM generate_series(1, 10) id;\n\n--Testcase 226:\nSELECT * FROM case_exp;\n\n-- CASE arg WHEN\n--Testcase 227:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n--Testcase 228:\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 229:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 230:\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n--Testcase 232:\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 233:\nSELECT * FROM case_exp WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n--Testcase 234:\nDELETE FROM case_exp;\n\n-- readonly/readwrite tests\n-- Full combinations\n-- force_RO default SERVER default TABLE default\n-- force_RO default SERVER true    TABLE default\n-- force_RO default SERVER false   TABLE default\n-- force_RO default SERVER default TABLE true\n-- force_RO default SERVER default TABLE false\n-- force_RO default SERVER true    TABLE true\n-- force_RO default SERVER false   TABLE true\n-- force_RO default SERVER false   TABLE false\n-- force_RO default SERVER true    TABLE false\n-- force_RO false   SERVER default TABLE default\n-- force_RO false   SERVER true    TABLE default\n-- force_RO false   SERVER false   TABLE default\n-- force_RO false   SERVER default TABLE true\n-- force_RO false   SERVER default TABLE false\n-- force_RO false   SERVER true    TABLE true\n-- force_RO false   SERVER false   TABLE true\n-- force_RO false   SERVER false   TABLE false\n-- force_RO false   SERVER true    TABLE false\n-- force_RO true    SERVER default TABLE default\n-- force_RO true    SERVER true    TABLE default\n-- force_RO true    SERVER false   TABLE default\n-- force_RO true    SERVER default TABLE true\n-- force_RO true    SERVER default TABLE false\n-- force_RO true    SERVER true    TABLE true\n-- force_RO true    SERVER false   TABLE true\n-- force_RO true    SERVER false   TABLE false\n-- force_RO true    SERVER true    TABLE false\n\n-- force_RO default SERVER default TABLE default\n--Testcase 235:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 236:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 237:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO default SERVER true TABLE default\n--Testcase 238:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 239:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 240:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 241:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 242:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n\n-- force_RO default SERVER false TABLE default\n--Testcase 243:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 244:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 245:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 246:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER default TABLE true\n--Testcase 247:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 248:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 249:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 250:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 251:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO default SERVER default TABLE false\n--Testcase 252:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 253:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 254:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 255:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER true TABLE true\n--Testcase 256:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 257:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 258:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 258:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 260:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 261:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO default SERVER false TABLE true\n--Testcase 262:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 263:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 264:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 265:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO default SERVER false TABLE false\n--Testcase 266:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 267:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 268:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 269:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO default SERVER true TABLE false\n--Testcase 270:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 271:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 272:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 273:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 274:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 275:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 276:\nSELECT * FROM RO_RW_test ORDER BY i;\n\n--Bind error message test for some unsupported data type\n--Testcase 277:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 278:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 279:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 277:\nDELETE FROM RO_RW_test;\n\n--Testcase 278:\nALTER SERVER sqlite_svr OPTIONS (ADD force_readonly 'false');\n\n-- force_RO false SERVER default TABLE default\n--Testcase 279:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 280:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 281:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO false SERVER true TABLE default\n--Testcase 282:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 283:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 284:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 285:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 286:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n-- force_RO false SERVER false TABLE default\n--Testcase 287:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 288:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 289:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 290:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER default TABLE true\n--Testcase 291:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 292:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 293:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 294:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 295:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO false SERVER default TABLE false\n--Testcase 296:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 297:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 298:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 299:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER true TABLE true\n--Testcase 300:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 301:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 302:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 303:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 304:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 305:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO false SERVER false TABLE true\n--Testcase 306:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 307:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 308:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 309:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO false SERVER false TABLE false\n--Testcase 310:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 311:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 312:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 313:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO false SERVER true TABLE false\n--Testcase 314:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 315:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 316:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 317:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 318:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 319:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 320:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 321:\nDELETE FROM RO_RW_test;\n\n--Testcase 322:\nALTER SERVER sqlite_svr OPTIONS (SET force_readonly 'true');\n\n-- force_RO true SERVER default TABLE default\n--Testcase 323:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- ERR\n--Testcase 324:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- ERR\n--Testcase 325:\nDELETE FROM RO_RW_test WHERE i=2; -- ERR\n\n-- force_RO true SERVER true TABLE default\n--Testcase 326:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 327:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- ERR\n--Testcase 328:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- ERR\n--Testcase 329:\nDELETE FROM RO_RW_test WHERE i=3; -- ERR\n--Testcase 330:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- ERR\n-- force_RO true SERVER false TABLE default\n--Testcase 331:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 332:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 333:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 334:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER default TABLE true\n--Testcase 335:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 336:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 337:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- ERR\n--Testcase 338:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- ERR\n--Testcase 339:\nDELETE FROM RO_RW_test WHERE i=6; -- ERR\n\n-- force_RO true SERVER default TABLE false\n--Testcase 340:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 341:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 342:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 343:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER true TABLE true\n--Testcase 344:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true'); -- ERR\n--Testcase 345:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true'); -- ERR\n--Testcase 346:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- ERR\n--Testcase 347:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 348:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 349:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- ERR\n\n-- force_RO true SERVER false TABLE true\n--Testcase 350:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 351:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- ERR\n--Testcase 352:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- ERR\n--Testcase 353:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER false TABLE false\n--Testcase 354:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 355:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 356:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 357:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER true TABLE false\n--Testcase 358:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 359:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 360:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 361:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 362:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 363:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 364:\nALTER SERVER sqlite_svr OPTIONS (DROP force_readonly);\n\n--Testcase 365:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 366:\nDROP FOREIGN TABLE RO_RW_test;\n-- End of RO/RW test\n\n--Bind error message test for some unsupported data type\n--Testcase 366:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 367:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 368:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 142:\nDROP FUNCTION test_param_WHERE();\n--Testcase 143:\nDROP FOREIGN TABLE numbers;\n--Testcase 144:\nDROP FOREIGN TABLE department;\n--Testcase 145:\nDROP FOREIGN TABLE employee;\n--Testcase 146:\nDROP FOREIGN TABLE empdata;\n--Testcase 147:\nDROP FOREIGN TABLE multiprimary;\n--Testcase 148:\nDROP FOREIGN TABLE multiprimary2;\n--Testcase 149:\nDROP FOREIGN TABLE columntest;\n--Testcase 150:\nDROP FOREIGN TABLE noprimary;\n--Testcase 161:\nDROP FOREIGN TABLE fts_table;\n--Testcase 235:\nDROP FOREIGN TABLE case_exp;\n\n--Testcase 151:\nDROP SERVER sqlite_svr;\n--Testcase 152:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/bitstring.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 02:\nCREATE FOREIGN TABLE \"type_BIT\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6)) SERVER sqlite_svr OPTIONS (table 'type_BIT');\n--Testcase 03:\nDROP FOREIGN TABLE IF EXISTS \"type_BIT+\";\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6), \"t\" text, \"l\" smallint, \"bi\" bigint OPTIONS (column_name 'b')) SERVER sqlite_svr OPTIONS (table 'type_BIT+');\n--Testcase 05: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (1, 1);\n--Testcase 06: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (2, 2);\n--Testcase 07: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (3, '1');\n--Testcase 08: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (4, '10');\n--Testcase 09: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 10:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 11:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 12:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 13:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 14: type mismatch with proper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (10, 53);\n--Testcase 15:\nSELECT * FROM \"type_BIT+\";\n--Testcase 16:\nSELECT * FROM \"type_BIT\" WHERE b < '110110';\n--Testcase 17:\nSELECT * FROM \"type_BIT\" WHERE b > '110110';\n--Testcase 18:\nSELECT * FROM \"type_BIT\" WHERE b = '110110';\n\n--Testcase 20:\nCREATE FOREIGN TABLE \"type_VARBIT\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70)) SERVER sqlite_svr OPTIONS (table 'type_VARBIT');\n--Testcase 21:\nDROP FOREIGN TABLE IF EXISTS \"type_VARBIT+\";\n--Testcase 22:\nCREATE FOREIGN TABLE \"type_VARBIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70), \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_VARBIT+');\n--Testcase 23:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (1, '1');\n--Testcase 24:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (2, '10');\n--Testcase 25:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (3, '11');\n--Testcase 26:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (4, '100');\n--Testcase 27:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 28:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 29:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 30:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 31:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 32:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (10, '0100100101011001010010101000111110110101101101111011000101010');\n--Testcase 33:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (11, '01001001010110010100101010001111101101011011011110110001010101');\n\n--Testcase 34:\nSELECT * FROM \"type_VARBIT+\";\n--Testcase 35:\nSELECT * FROM \"type_VARBIT+\" WHERE b < '110110';\n--Testcase 36:\nSELECT * FROM \"type_VARBIT+\" WHERE b > '110110';\n--Testcase 37:\nSELECT * FROM \"type_VARBIT+\" WHERE b = '110110';\n\n--Testcase 38:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (12, '010010010101100101001010100011111011010110110111101100010101010');\n--Testcase 39:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (13, '0100100101011001010010101000111110110101101101111011000101010101');\n--Testcase 40: very long bit string, expected ERROR, 65 bits\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (14, '01001001010110010100101010001111101101011011011110110001010101010');\n--Testcase 41:\nSELECT * FROM \"type_VARBIT+\" WHERE \"i\" > 10;\n\n--Testcase 42:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 43:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 44:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 45:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 46:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 47:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 49:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 51:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 52:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 53:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n\n--Testcase 54:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 55:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 56:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 57:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 58:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 59:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 61:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 62:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 63:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 64:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 65:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n\n--Testcase 66:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 67:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 68:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 69:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 70:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 71:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 72:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 73:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 74:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 75:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 76:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 77:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 78:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 79:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 80:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 81:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 82:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 83:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 84:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 85:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 86:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 87:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 88:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 89:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 90:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 91:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 92:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 93:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 94:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 95:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 005:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/bool.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 000:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 001:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;\n--Testcase 02:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (1, TRUE);\n--Testcase 03:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (2, FALSE);\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BOOLEAN+\"( \"i\" int, \"b\" bool, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');\n--Testcase 05:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE text;\n--Testcase 06:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (3, TRUE);\n--Testcase 07:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (4, FALSE);\n--Testcase 08:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (5, true);\n--Testcase 09:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (6, false);\n--Testcase 10:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (7, 'Yes');\n--Testcase 11:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (8, 'YeS');\n--Testcase 12:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (9, 'yes');\n--Testcase 13:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (10, 'no');\n--Testcase 14:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (11, 'No');\n--Testcase 15:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (12, 'nO');\n--Testcase 16:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (13, 'off');\n--Testcase 17:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (14, 'oFf');\n--Testcase 18:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (15, 'on');\n--Testcase 19:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (16, 'ON');\n--Testcase 20:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (17, 't');\n--Testcase 21:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (18, 'T');\n--Testcase 22:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (19, 'Y');\n--Testcase 23:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (20, 'y');\n--Testcase 24:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (21, 'F');\n--Testcase 25:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (22, 'f');\n--Testcase 26:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (23, 'x');\n--Testcase 27:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (24, '0');\n--Testcase 28:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (25, '1');\n--Testcase 29:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (26, NULL);\n--Testcase 30:\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 31:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 32:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 35\nDELETE FROM \"type_BOOLEAN\" WHERE i = 23;\n--Testcase 36:\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 37:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NULL;\n--Testcase 38:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NOT NULL;\n--Testcase 39:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b;\n--Testcase 40:\nSELECT * FROM \"type_BOOLEAN+\" WHERE NOT b;\n\n--Testcase 41:\nCREATE FOREIGN TABLE \"type_BOOLEANpk\" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 42:\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 43:\nINSERT INTO \"type_BOOLEANpk\" VALUES (FALSE);\n--Testcase 44: ERR - primary key\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 45:\nDELETE FROM \"type_BOOLEANpk\";\n\n--Testcase 46:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE float8;\n--Testcase 47:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (27, 3.14159265358979);\n--Testcase 48:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 49: ERR - invalid float for bool column\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 50\nDELETE FROM \"type_BOOLEAN\" WHERE i = 27;\n--Testcase 51:\nSELECT * FROM \"type_BOOLEAN+\";\n\n--Testcase 52:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE b;\n--Testcase 53:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE NOT b;\n--Testcase 54:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE b;\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE NOT b;\n\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n--Testcase 57:\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n\n--Testcase 58:\nCREATE FOREIGN TABLE \"type_BOOLEAN_oper\"( \"i\" int  OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');\n--Testcase 59: see INIT.SQL with mixed affinity boolean data\nSELECT * FROM \"type_BOOLEAN_oper\";\n--Testcase 60:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n--Testcase 61:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n\n--Testcase 62:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n--Testcase 63:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n\n--Testcase 64:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n--Testcase 65:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n\n--Testcase 66:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 67:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 68:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 69:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 70:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 71:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 72:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 73:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 74:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 75:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b2;\n--Testcase 76:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 77:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE b2;\n--Testcase 78:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n\n--Testcase 79:\nDELETE FROM \"type_BOOLEAN\";\n\n--Testcase 003:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/float4.sql",
    "content": "--\n-- FLOAT4\n--\n--Testcase 46:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 47:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 48:\nCREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 49:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('    0.0');\n--Testcase 2:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30   ');\n--Testcase 3:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     -34.84    ');\n--Testcase 4:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');\n--Testcase 5:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');\n\n-- test for over and under flow\n--Testcase 6:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');\n--Testcase 7:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');\n--Testcase 8:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');\n--Testcase 9:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');\n\n--Testcase 50:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);\n--Testcase 51:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);\n--Testcase 52:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);\n--Testcase 53:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);\n\n--Testcase 54:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');\n--Testcase 55:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');\n--Testcase 56:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');\n--Testcase 57:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('       ');\n--Testcase 12:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     - 3.0');\n--Testcase 17:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('123            5');\n\n-- special inputs\n--Testcase 18:\nDELETE FROM FLOAT4_TMP;\n--Testcase 58:\nINSERT INTO FLOAT4_TMP VALUES ('NaN'::float4);\n--Testcase 59:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 20:\nDELETE FROM FLOAT4_TMP;\n--Testcase 60:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4);\n--Testcase 61:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 21:\nDELETE FROM FLOAT4_TMP;\n--Testcase 62:\nINSERT INTO FLOAT4_TMP VALUES ('   NAN  '::float4);\n--Testcase 63:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 22:\nDELETE FROM FLOAT4_TMP;\n--Testcase 64:\nINSERT INTO FLOAT4_TMP VALUES ('infinity'::float4);\n--Testcase 65:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 23:\nDELETE FROM FLOAT4_TMP;\n--Testcase 66:\nINSERT INTO FLOAT4_TMP VALUES ('          -INFINiTY   '::float4);\n--Testcase 67:\nSELECT f1 FROM FLOAT4_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT4_TMP;\n--Testcase 68:\nINSERT INTO FLOAT4_TMP VALUES ('N A N'::float4);\n--Testcase 69:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 26:\nDELETE FROM FLOAT4_TMP;\n--Testcase 70:\nINSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4);\n--Testcase 71:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 27:\nDELETE FROM FLOAT4_TMP;\n--Testcase 72:\nINSERT INTO FLOAT4_TMP VALUES (' INFINITY    x'::float4);\n--Testcase 73:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT4_TMP;\n--Testcase 74:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0);\n--Testcase 75:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 30:\nDELETE FROM FLOAT4_TMP;\n--Testcase 76:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4);\n--Testcase 77:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 31:\nDELETE FROM FLOAT4_TMP;\n--Testcase 78:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4);\n--Testcase 79:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 32:\nDELETE FROM FLOAT4_TMP;\n--Testcase 80:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4);\n--Testcase 81:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 34:\nSELECT '' AS five, * FROM FLOAT4_TBL;\n\n--SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';\n\n--SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 35:\nSELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 36:\nSELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 37:\nSELECT '' AS three, f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 38:\nSELECT '' AS three, f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 39:\nSELECT '' AS three, f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 40:\nSELECT '' AS three, f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n-- test divide by zero\n--Testcase 41:\nSELECT '' AS bad, f.f1 / '0.0' from FLOAT4_TBL f;\n\n--Testcase 42:\nSELECT '' AS five, * FROM FLOAT4_TBL;\n\n-- test the unary float4abs operator\n--Testcase 43:\nSELECT '' AS five, f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;\n\n--Testcase 44:\nUPDATE FLOAT4_TBL\n   SET f1 = FLOAT4_TBL.f1 * '-1'\n   WHERE FLOAT4_TBL.f1 > '0.0';\n\n--Testcase 45:\nSELECT '' AS five, * FROM FLOAT4_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 82:\nDELETE FROM FLOAT4_TMP;\n--Testcase 83:\nINSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4);\n--Testcase 84:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 85:\nDELETE FROM FLOAT4_TMP;\n--Testcase 86:\nINSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4);\n--Testcase 87:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 88:\nDELETE FROM FLOAT4_TMP;\n--Testcase 89:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4);\n--Testcase 90:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 91:\nDELETE FROM FLOAT4_TMP;\n--Testcase 92:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4);\n--Testcase 93:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 94:\nDELETE FROM FLOAT4_TMP;\n--Testcase 95:\nINSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4);\n--Testcase 96:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 97:\nDELETE FROM FLOAT4_TMP;\n--Testcase 98:\nINSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4);\n--Testcase 99:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 100:\nDELETE FROM FLOAT4_TMP;\n--Testcase 101:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4);\n--Testcase 102:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 103:\nDELETE FROM FLOAT4_TMP;\n--Testcase 104:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4);\n--Testcase 105:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 106:\nDELETE FROM FLOAT4_TMP;\n--Testcase 107:\nINSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4);\n--Testcase 108:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 109:\nDELETE FROM FLOAT4_TMP;\n--Testcase 110:\nINSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4);\n--Testcase 111:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 112:\nDELETE FROM FLOAT4_TMP;\n--Testcase 113:\nINSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4);\n--Testcase 114:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 115:\nDELETE FROM FLOAT4_TMP;\n--Testcase 116:\nINSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4);\n--Testcase 117:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n\n-- Test for correct input rounding in edge cases.\n-- These lists are from Paxson 1991, excluding subnormals and\n-- inputs of over 9 sig. digits.\n--Testcase 118:\nDELETE FROM FLOAT4_TMP;\n--Testcase 119:\nINSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4);\n--Testcase 120:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 121:\nDELETE FROM FLOAT4_TMP;\n--Testcase 122:\nINSERT INTO FLOAT4_TMP VALUES ('67e14'::float4);\n--Testcase 123:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 124:\nDELETE FROM FLOAT4_TMP;\n--Testcase 125:\nINSERT INTO FLOAT4_TMP VALUES ('985e15'::float4);\n--Testcase 126:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 127:\nDELETE FROM FLOAT4_TMP;\n--Testcase 128:\nINSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4);\n--Testcase 129:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 130:\nDELETE FROM FLOAT4_TMP;\n--Testcase 131:\nINSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4);\n--Testcase 132:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 133:\nDELETE FROM FLOAT4_TMP;\n--Testcase 134:\nINSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4);\n--Testcase 135:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 136:\nDELETE FROM FLOAT4_TMP;\n--Testcase 137:\nINSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4);\n--Testcase 138:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 139:\nDELETE FROM FLOAT4_TMP;\n--Testcase 140:\nINSERT INTO FLOAT4_TMP VALUES ('57e18'::float4);\n--Testcase 141:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 142:\nDELETE FROM FLOAT4_TMP;\n--Testcase 143:\nINSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4);\n--Testcase 144:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 145:\nDELETE FROM FLOAT4_TMP;\n--Testcase 146:\nINSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4);\n--Testcase 147:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 148:\nDELETE FROM FLOAT4_TMP;\n--Testcase 149:\nINSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4);\n--Testcase 150:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 151:\nDELETE FROM FLOAT4_TMP;\n--Testcase 152:\nINSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4);\n--Testcase 153:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 154:\nDELETE FROM FLOAT4_TMP;\n--Testcase 155:\nINSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4);\n--Testcase 156:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 157:\nDELETE FROM FLOAT4_TMP;\n--Testcase 158:\nINSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4);\n--Testcase 159:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 160:\nDELETE FROM FLOAT4_TMP;\n--Testcase 161:\nINSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4);\n--Testcase 162:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- Test that the smallest possible normalized input value inputs\n-- correctly, either in 9-significant-digit or shortest-decimal\n-- format.\n--\n-- exact val is             1.1754943508...\n-- shortest val is          1.1754944000\n-- midpoint to next val is  1.1754944208...\n\n--Testcase 163:\nDELETE FROM FLOAT4_TMP;\n--Testcase 164:\nINSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4);\n--Testcase 165:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 166:\nDELETE FROM FLOAT4_TMP;\n--Testcase 167:\nINSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4);\n--Testcase 168:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 169:\ncreate type xfloat4;\n--Testcase 170:\ncreate function xfloat4in(cstring) returns xfloat4 immutable strict\n  language internal as 'int4in';\n--Testcase 171:\ncreate function xfloat4out(xfloat4) returns cstring immutable strict\n  language internal as 'int4out';\n--Testcase 172:\ncreate type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4);\n--Testcase 173:\ncreate cast (xfloat4 as float4) without function;\n--Testcase 174:\ncreate cast (float4 as xfloat4) without function;\n--Testcase 175:\ncreate cast (xfloat4 as integer) without function;\n--Testcase 176:\ncreate cast (integer as xfloat4) without function;\n\n-- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 177:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 178:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'00000001'),\n  (x'00000002'), (x'00000003'),\n  (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'),\n  (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'),\n  -- stress values\n  (x'0053c4f4'),  -- 7693e-42\n  (x'006c85c4'),  -- 996622e-44\n  (x'0041ca76'),  -- 60419369e-46\n  (x'004b7678'),  -- 6930161142e-48\n  -- taken from upstream testsuite\n  (x'00000007'),\n  (x'00424fe2'),\n  -- borderline between subnormal and normal\n  (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff');\n--Testcase 179:\nselect float4send(flt) as ibits,\n       flt\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\nbegin;\n\n--Testcase 180:\ninsert into testdata(bits) values\n  (x'00000000'),\n  -- smallest normal values\n  (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'),\n  (x'00800006'),\n  -- small normal values chosen for short vs. long output\n  (x'008002f1'), (x'008002f2'), (x'008002f3'),\n  (x'00800e17'), (x'00800e18'), (x'00800e19'),\n  -- assorted values (random mantissae)\n  (x'01000001'), (x'01102843'), (x'01a52c98'),\n  (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'),\n  (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'),\n  (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'),\n  (x'1f850283'), (x'2874a9d6'),\n  -- values around 5e-08\n  (x'3356bf94'), (x'3356bf95'), (x'3356bf96'),\n  -- around 1e-07\n  (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'),\n  -- around 3e-07 .. 1e-04\n  (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'),\n  (x'350637bc'), (x'350637bd'), (x'350637be'),\n  (x'35719786'), (x'35719787'), (x'35719788'),\n  (x'358637bc'), (x'358637bd'), (x'358637be'),\n  (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'),\n  (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'),\n  -- format crossover at 1e-04\n  (x'38d1b714'), (x'38d1b715'), (x'38d1b716'),\n  (x'38d1b717'), (x'38d1b718'), (x'38d1b719'),\n  (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'),\n  (x'38d1b71d'),\n  --\n  (x'38dffffe'), (x'38dfffff'), (x'38e00000'),\n  (x'38efffff'), (x'38f00000'), (x'38f00001'),\n  (x'3a83126e'), (x'3a83126f'), (x'3a831270'),\n  (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'),\n  (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'),\n  -- chosen to need 9 digits for 3dcccd70\n  (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'),\n  --\n  (x'3effffff'), (x'3f000000'), (x'3f000001'),\n  (x'3f333332'), (x'3f333333'), (x'3f333334'),\n  -- approach 1.0 with increasing numbers of 9s\n  (x'3f666665'), (x'3f666666'), (x'3f666667'),\n  (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'),\n  (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'),\n  (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'),\n  (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'),\n  (x'3f7fffee'), (x'3f7fffef'),\n  -- values very close to 1\n  (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'),\n  (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'),\n  (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'),\n  (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'),\n  (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'),\n  (x'3f7fffff'),\n  (x'3f800000'),\n  (x'3f800001'), (x'3f800002'), (x'3f800003'),\n  (x'3f800004'), (x'3f800005'), (x'3f800006'),\n  (x'3f800007'), (x'3f800008'), (x'3f800009'),\n  -- values 1 to 1.1\n  (x'3f80000f'), (x'3f800010'), (x'3f800011'),\n  (x'3f800012'), (x'3f800013'), (x'3f800014'),\n  (x'3f800017'), (x'3f800018'), (x'3f800019'),\n  (x'3f80001a'), (x'3f80001b'), (x'3f80001c'),\n  (x'3f800029'), (x'3f80002a'), (x'3f80002b'),\n  (x'3f800053'), (x'3f800054'), (x'3f800055'),\n  (x'3f800346'), (x'3f800347'), (x'3f800348'),\n  (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'),\n  (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'),\n  (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'),\n  --\n  (x'3fc90fdb'), -- pi/2\n  (x'402df854'), -- e\n  (x'40490fdb'), -- pi\n  --\n  (x'409fffff'), (x'40a00000'), (x'40a00001'),\n  (x'40afffff'), (x'40b00000'), (x'40b00001'),\n  (x'411fffff'), (x'41200000'), (x'41200001'),\n  (x'42c7ffff'), (x'42c80000'), (x'42c80001'),\n  (x'4479ffff'), (x'447a0000'), (x'447a0001'),\n  (x'461c3fff'), (x'461c4000'), (x'461c4001'),\n  (x'47c34fff'), (x'47c35000'), (x'47c35001'),\n  (x'497423ff'), (x'49742400'), (x'49742401'),\n  (x'4b18967f'), (x'4b189680'), (x'4b189681'),\n  (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'),\n  (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'),\n  (x'501502f8'), (x'501502f9'), (x'501502fa'),\n  (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'),\n  -- stress values\n  (x'1f6c1e4a'),  -- 5e-20\n  (x'59be6cea'),  -- 67e14\n  (x'5d5ab6c4'),  -- 985e15\n  (x'2cc4a9bd'),  -- 55895e-16\n  (x'15ae43fd'),  -- 7038531e-32\n  (x'2cf757ca'),  -- 702990899e-20\n  (x'665ba998'),  -- 25933168707e13\n  (x'743c3324'),  -- 596428896559e20\n  -- exercise fixed-point memmoves\n  (x'47f1205a'),\n  (x'4640e6ae'),\n  (x'449a5225'),\n  (x'42f6e9d5'),\n  (x'414587dd'),\n  (x'3f9e064b'),\n  -- these cases come from the upstream's testsuite\n  -- BoundaryRoundEven\n  (x'4c000004'),\n  (x'50061c46'),\n  (x'510006a8'),\n  -- ExactValueRoundEven\n  (x'48951f84'),\n  (x'45fd1840'),\n  -- LotsOfTrailingZeros\n  (x'39800000'),\n  (x'3b200000'),\n  (x'3b900000'),\n  (x'3bd00000'),\n  -- Regression\n  (x'63800000'),\n  (x'4b000000'),\n  (x'4b800000'),\n  (x'4c000001'),\n  (x'4c800b0d'),\n  (x'00d24584'),\n  (x'00d90b88'),\n  (x'45803f34'),\n  (x'4f9f24f7'),\n  (x'3a8722c3'),\n  (x'5c800041'),\n  (x'15ae43fd'),\n  (x'5d4cccfb'),\n  (x'4c800001'),\n  (x'57800ed8'),\n  (x'5f000000'),\n  (x'700000f0'),\n  (x'5f23e9ac'),\n  (x'5e9502f9'),\n  (x'5e8012b1'),\n  (x'3c000028'),\n  (x'60cde861'),\n  (x'03aa2a50'),\n  (x'43480000'),\n  (x'4c000000'),\n  -- LooksLikePow5\n  (x'5D1502F9'),\n  (x'5D9502F9'),\n  (x'5E1502F9'),\n  -- OutputLength\n  (x'3f99999a'),\n  (x'3f9d70a4'),\n  (x'3f9df3b6'),\n  (x'3f9e0419'),\n  (x'3f9e0610'),\n  (x'3f9e064b'),\n  (x'3f9e0651'),\n  (x'03d20cfe');\n\n--Testcase 181:\nselect float4send(flt) as ibits,\n       flt,\n       flt::text::float4 as r_flt,\n       float4send(flt::text::float4) as obits,\n       float4send(flt::text::float4) = float4send(flt) as correct\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\n-- clean up, lest opr_sanity complain\n--Testcase 182:\ndrop type xfloat4 cascade;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/float8.sql",
    "content": "--\n-- FLOAT8\n--\n--Testcase 113:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 114:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 115:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 116:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 2:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 3:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 4:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 5:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- test for underflow and overflow handling\n--Testcase 6:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e400'::float8);\n--Testcase 7:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e400'::float8);\n--Testcase 8:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e-400'::float8);\n--Testcase 9:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e-400'::float8);\n\n-- test smallest normalized input\n--Testcase 117:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('2.2250738585072014E-308'::float8);\n--Testcase 118:\nSELECT float8send(f1) FROM FLOAT8_TMP;\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('     ');\n--Testcase 12:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');\n--Testcase 17:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');\n\n-- special inputs\n--Testcase 19:\nDELETE FROM FLOAT8_TMP;\n--Testcase 119:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8);\n--Testcase 120:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 20:\nDELETE FROM FLOAT8_TMP;\n--Testcase 121:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8);\n--Testcase 122:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 21:\nDELETE FROM FLOAT8_TMP;\n--Testcase 123:\nINSERT INTO FLOAT8_TMP VALUES ('   NAN  '::float8);\n--Testcase 124:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 22:\nDELETE FROM FLOAT8_TMP;\n--Testcase 125:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8);\n--Testcase 126:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 23:\nDELETE FROM FLOAT8_TMP;\n--Testcase 127:\nINSERT INTO FLOAT8_TMP VALUES ('          -INFINiTY   '::float8);\n--Testcase 128:\nSELECT f1 FROM FLOAT8_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT8_TMP;\n--Testcase 129:\nINSERT INTO FLOAT8_TMP VALUES ('N A N'::float8);\n--Testcase 130:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 26:\nDELETE FROM FLOAT8_TMP;\n--Testcase 131:\nINSERT INTO FLOAT8_TMP VALUES ('NaN x'::float8);\n--Testcase 132:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 27:\nDELETE FROM FLOAT8_TMP;\n--Testcase 133:\nINSERT INTO FLOAT8_TMP VALUES (' INFINITY    x'::float8);\n--Testcase 134:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT8_TMP;\n--Testcase 135:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 + 100.0);\n--Testcase 136:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 30:\nDELETE FROM FLOAT8_TMP;\n--Testcase 137:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 / 'Infinity'::float8);\n--Testcase 138:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 31:\nDELETE FROM FLOAT8_TMP;\n--Testcase 139:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / 'nan'::float8);\n--Testcase 140:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 32:\nDELETE FROM FLOAT8_TMP;\n--Testcase 141:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::numeric::float8);\n--Testcase 142:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 34:\nSELECT '' AS five, * FROM FLOAT8_TBL;\n\n--Testcase 35:\nSELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';\n\n--Testcase 36:\nSELECT '' AS one, f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';\n\n--Testcase 37:\nSELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;\n\n--Testcase 38:\nSELECT '' AS three, f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 39:\nSELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 40:\nSELECT '' AS four, f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 41:\nSELECT '' AS three, f.f1, f.f1 * '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 42:\nSELECT '' AS three, f.f1, f.f1 + '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 43:\nSELECT '' AS three, f.f1, f.f1 / '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 44:\nSELECT '' AS three, f.f1, f.f1 - '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 45:\nSELECT '' AS one, f.f1 ^ '2.0' AS square_f1\n   FROM FLOAT8_TBL f where f.f1 = '1004.3';\n\n-- absolute value\n--Testcase 46:\nSELECT '' AS five, f.f1, @f.f1 AS abs_f1\n   FROM FLOAT8_TBL f;\n\n-- truncate\n--Testcase 47:\nSELECT '' AS five, f.f1, trunc(f.f1) AS trunc_f1\n   FROM FLOAT8_TBL f;\n\n-- round\n--Testcase 48:\nSELECT '' AS five, f.f1, round(f.f1) AS round_f1\n   FROM FLOAT8_TBL f;\n\n-- ceil / ceiling\n--Testcase 49:\nselect ceil(f1) as ceil_f1 from float8_tbl f;\n--Testcase 50:\nselect ceiling(f1) as ceiling_f1 from float8_tbl f;\n\n-- floor\n--Testcase 51:\nselect floor(f1) as floor_f1 from float8_tbl f;\n\n-- sign\n--Testcase 52:\nselect sign(f1) as sign_f1 from float8_tbl f;\n\n-- avoid bit-exact output here because operations may not be bit-exact.\nSET extra_float_digits = 0;\n\n-- square root\nBEGIN;\n--Testcase 53:\nDELETE FROM FLOAT8_TBL;\n--Testcase 54:\nINSERT INTO FLOAT8_TBL VALUES ('64'::float8);\n--Testcase 55:\nSELECT sqrt(f1) as eight FROM FLOAT8_TBL;\n--Testcase 56:\nSELECT |/f1 as eight FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 57:\nSELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- power\n--Testcase 58:\nDELETE FROM FLOAT8_TMP;\n--Testcase 143:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, '0.5'::float8);\n--Testcase 144:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 60:\nDELETE FROM FLOAT8_TMP;\n--Testcase 145:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, '0.5'::float8);\n--Testcase 146:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 61:\nDELETE FROM FLOAT8_TMP;\n--Testcase 147:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, 'NaN'::float8);\n--Testcase 148:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 62:\nDELETE FROM FLOAT8_TMP;\n--Testcase 149:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, 'NaN'::float8);\n--Testcase 150:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 63:\nDELETE FROM FLOAT8_TMP;\n--Testcase 151:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'NaN'::float8);\n--Testcase 152:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 64:\nDELETE FROM FLOAT8_TMP;\n--Testcase 153:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'NaN'::float8);\n--Testcase 154:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 65:\nDELETE FROM FLOAT8_TMP;\n--Testcase 155:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8 , '0'::float8);\n--Testcase 156:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- take exp of ln(f.f1)\n--Testcase 67:\nSELECT '' AS three, f.f1, exp(ln(f.f1)) AS exp_ln_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- cube root\nBEGIN;\n--Testcase 68:\nDELETE FROM FLOAT8_TBL;\n--Testcase 69:\nINSERT INTO FLOAT8_TBL VALUES ('27'::float8);\n--Testcase 70:\nSELECT ||/f1 as three FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 71:\nSELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;\n\n\n--Testcase 72:\nSELECT '' AS five, * FROM FLOAT8_TBL;\n\n--Testcase 73:\nUPDATE FLOAT8_TBL\n   SET f1 = FLOAT8_TBL.f1 * '-1'\n   WHERE FLOAT8_TBL.f1 > '0.0';\n\n--Testcase 74:\nSELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f;\n\n--Testcase 75:\nSELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f;\n\nBEGIN;\n--Testcase 76:\nDELETE FROM FLOAT8_TBL;\n--Testcase 77:\nINSERT INTO FLOAT8_TBL VALUES (0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5);\n--Testcase 78:\nSELECT * FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 79:\nSELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;\n\n--Testcase 80:\nSELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;\n\n--Testcase 81:\nSELECT '' AS bad, exp(f.f1) from FLOAT8_TBL f;\n\n--Testcase 82:\nSELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;\n\n--Testcase 83:\nSELECT '' AS five, * FROM FLOAT8_TBL;\n\n-- hyperbolic functions\n-- we run these with extra_float_digits = 0 too, since different platforms\n-- tend to produce results that vary in the last place.\n--Testcase 157:\nDELETE FROM FLOAT8_TMP;\n--Testcase 158:\nINSERT INTO FLOAT8_TMP(f1) VALUES (1);\n--Testcase 159:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n--Testcase 160:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n--Testcase 161:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n--Testcase 162:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 163:\nDELETE FROM FLOAT8_TMP;\n--Testcase 164:\nINSERT INTO FLOAT8_TMP(f1) VALUES (2);\n--Testcase 165:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n--Testcase 166:\nDELETE FROM FLOAT8_TMP;\n--Testcase 167:\nINSERT INTO FLOAT8_TMP(f1) VALUES (0.5);\n--Testcase 168:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- test Inf/NaN cases for hyperbolic functions\n--Testcase 169:\nDELETE FROM FLOAT8_TMP;\n--Testcase 170:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 171:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 172:\nDELETE FROM FLOAT8_TMP;\n--Testcase 173:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 174:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 175:\nDELETE FROM FLOAT8_TMP;\n--Testcase 176:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 177:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 178:\nDELETE FROM FLOAT8_TMP;\n--Testcase 179:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 180:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 181:\nDELETE FROM FLOAT8_TMP;\n--Testcase 182:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 183:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 184:\nDELETE FROM FLOAT8_TMP;\n--Testcase 185:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 186:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 187:\nDELETE FROM FLOAT8_TMP;\n--Testcase 188:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 189:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 190:\nDELETE FROM FLOAT8_TMP;\n--Testcase 191:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 192:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 193:\nDELETE FROM FLOAT8_TMP;\n--Testcase 194:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 195:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 196:\nDELETE FROM FLOAT8_TMP;\n--Testcase 197:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 198:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 199:\nDELETE FROM FLOAT8_TMP;\n--Testcase 200:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 201:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 202:\nDELETE FROM FLOAT8_TMP;\n--Testcase 203:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 204:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test\n-- SELECT acosh(float8 'infinity');\n--Testcase 205:\nDELETE FROM FLOAT8_TMP;\n--Testcase 206:\nINSERT INTO FLOAT8_TMP VALUES (float8 '-infinity');\n--Testcase 207:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 208:\nDELETE FROM FLOAT8_TMP;\n--Testcase 209:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 210:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 211:\nDELETE FROM FLOAT8_TMP;\n--Testcase 212:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'infinity'));\n--Testcase 213:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 214:\nDELETE FROM FLOAT8_TMP;\n--Testcase 215:\nINSERT INTO FLOAT8_TMP VALUES ((float8 '-infinity'));\n--Testcase 216:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 217:\nDELETE FROM FLOAT8_TMP;\n--Testcase 218:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 219:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\nRESET extra_float_digits;\n\n-- test for over- and underflow\n--Testcase 84:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');\n\n--Testcase 85:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');\n\n--Testcase 86:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');\n\n--Testcase 87:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');\n\n-- maintain external table consistency across platforms\n-- delete all values and reinsert well-behaved ones\n\n--Testcase 88:\nDELETE FROM FLOAT8_TBL;\n\n--Testcase 89:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');\n\n--Testcase 90:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');\n\n--Testcase 91:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');\n\n--Testcase 92:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');\n\n--Testcase 93:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');\n\n--Testcase 94:\nSELECT '' AS five, * FROM FLOAT8_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 220:\nDELETE FROM FLOAT8_TMP;\n--Testcase 221:\nINSERT INTO FLOAT8_TMP VALUES ('32767.4'::float8);\n--Testcase 222:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 223:\nDELETE FROM FLOAT8_TMP;\n--Testcase 224:\nINSERT INTO FLOAT8_TMP VALUES ('32767.6'::float8);\n--Testcase 225:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 226:\nDELETE FROM FLOAT8_TMP;\n--Testcase 227:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.4'::float8);\n--Testcase 228:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 229:\nDELETE FROM FLOAT8_TMP;\n--Testcase 230:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.6'::float8);\n--Testcase 231:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 232:\nDELETE FROM FLOAT8_TMP;\n--Testcase 233:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.4'::float8);\n--Testcase 234:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 235:\nDELETE FROM FLOAT8_TMP;\n--Testcase 236:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.6'::float8);\n--Testcase 237:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 238:\nDELETE FROM FLOAT8_TMP;\n--Testcase 239:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.4'::float8);\n--Testcase 240:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 241:\nDELETE FROM FLOAT8_TMP;\n--Testcase 242:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.6'::float8);\n--Testcase 243:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 244:\nDELETE FROM FLOAT8_TMP;\n--Testcase 245:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854773760'::float8);\n--Testcase 246:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 247:\nDELETE FROM FLOAT8_TMP;\n--Testcase 248:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854775807'::float8);\n--Testcase 249:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 250:\nDELETE FROM FLOAT8_TMP;\n--Testcase 251:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854775808.5'::float8);\n--Testcase 252:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 253:\nDELETE FROM FLOAT8_TMP;\n--Testcase 254:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854780000'::float8);\n--Testcase 255:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n-- test exact cases for trigonometric functions in degrees\n\nBEGIN;\n--Testcase 95:\nDELETE FROM FLOAT8_TBL;\n--Testcase 96:\nINSERT INTO FLOAT8_TBL VALUES (0), (30), (90), (150), (180),\n      (210), (270), (330), (360);\n--Testcase 97:\nSELECT f1,\n       sind(f1),\n       sind(f1) IN (-1,-0.5,0,0.5,1) AS sind_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 98:\nDELETE FROM FLOAT8_TBL;\n--Testcase 99:\nINSERT INTO FLOAT8_TBL VALUES (0), (60), (90), (120), (180),\n      (240), (270), (300), (360);\n--Testcase 100:\nSELECT f1,\n       cosd(f1),\n       cosd(f1) IN (-1,-0.5,0,0.5,1) AS cosd_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 101:\nDELETE FROM FLOAT8_TBL;\n--Testcase 102:\nINSERT INTO FLOAT8_TBL VALUES (0), (45), (90), (135), (180),\n      (225), (270), (315), (360);\n--Testcase 103:\nSELECT f1,\n       tand(f1),\n       tand(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS tand_exact,\n       cotd(f1),\n       cotd(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS cotd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 104:\nDELETE FROM FLOAT8_TBL;\n--Testcase 105:\nINSERT INTO FLOAT8_TBL VALUES (-1), (-0.5), (0), (0.5), (1);\n--Testcase 106:\nSELECT f1,\n       asind(f1),\n       asind(f1) IN (-90,-30,0,30,90) AS asind_exact,\n       acosd(f1),\n       acosd(f1) IN (0,60,90,120,180) AS acosd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 107:\nDELETE FROM FLOAT8_TBL;\n--Testcase 108:\nINSERT INTO FLOAT8_TBL VALUES ('-Infinity'::float8), (-1), (0), (1),\n      ('Infinity'::float8);\n--Testcase 109:\nSELECT f1,\n       atand(f1),\n       atand(f1) IN (-90,-45,0,45,90) AS atand_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 110:\nDELETE FROM FLOAT8_TBL;\n--Testcase 111:\nINSERT INTO FLOAT8_TBL SELECT * FROM generate_series(0, 360, 90);\n--Testcase 112:\nSELECT x, y,\n       atan2d(y, x),\n       atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact\nFROM (SELECT 10*cosd(f1), 10*sind(f1)\n          FROM FLOAT8_TBL) AS t(x,y);\n\nROLLBACK;\n\n--\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 256:\ncreate type xfloat8;\n--Testcase 257:\ncreate function xfloat8in(cstring) returns xfloat8 immutable strict\n  language internal as 'int8in';\n--Testcase 258:\ncreate function xfloat8out(xfloat8) returns cstring immutable strict\n  language internal as 'int8out';\n--Testcase 259:\ncreate type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);\n--Testcase 260:\ncreate cast (xfloat8 as float8) without function;\n--Testcase 261:\ncreate cast (float8 as xfloat8) without function;\n--Testcase 262:\ncreate cast (xfloat8 as bigint) without function;\n--Testcase 263:\ncreate cast (bigint as xfloat8) without function;\n\n-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 264:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 265:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'0000000000000001'),\n  (x'0000000000000002'), (x'0000000000000003'),\n  (x'0000000000001000'), (x'0000000100000000'),\n  (x'0000010000000000'), (x'0000010100000000'),\n  (x'0000400000000000'), (x'0000400100000000'),\n  (x'0000800000000000'), (x'0000800000000001'),\n  -- these values taken from upstream testsuite\n  (x'00000000000f4240'),\n  (x'00000000016e3600'),\n  (x'0000008cdcdea440'),\n  -- borderline between subnormal and normal\n  (x'000ffffffffffff0'), (x'000ffffffffffff1'),\n  (x'000ffffffffffffe'), (x'000fffffffffffff');\n--Testcase 266:\nselect float8send(flt) as ibits,\n       flt\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- round-trip tests\n\nbegin;\n--Testcase 267:\ninsert into testdata(bits) values\n  (x'0000000000000000'),\n  -- smallest normal values\n  (x'0010000000000000'), (x'0010000000000001'),\n  (x'0010000000000002'), (x'0018000000000000'),\n  --\n  (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),\n  (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),\n  (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),\n  (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),\n  (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),\n  (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),\n  (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),\n  (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),\n  (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),\n  (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),\n  -- values very close to 1\n  (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),\n  (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),\n  (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),\n  (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),\n  (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),\n  (x'3fefffffffffffff'),\n  (x'3ff0000000000000'),\n  (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),\n  (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),\n  (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),\n  --\n  (x'3ff921fb54442d18'),\n  (x'4005bf0a8b14576a'),\n  (x'400921fb54442d18'),\n  --\n  (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),\n  (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),\n  (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),\n  (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),\n  (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),\n  (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),\n  (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),\n  (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),\n  (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),\n  (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),\n  (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),\n  (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),\n  (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),\n  (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),\n  (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),\n  (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),\n  (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),\n  (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),\n  (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),\n  (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),\n  (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),\n  (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),\n  (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),\n  (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),\n  (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),\n  --\n  (x'7feffffffffffffe'), (x'7fefffffffffffff'),\n  -- round to even tests (+ve)\n  (x'4350000000000002'),\n  (x'4350000000002e06'),\n  (x'4352000000000003'),\n  (x'4352000000000004'),\n  (x'4358000000000003'),\n  (x'4358000000000004'),\n  (x'435f000000000020'),\n  -- round to even tests (-ve)\n  (x'c350000000000002'),\n  (x'c350000000002e06'),\n  (x'c352000000000003'),\n  (x'c352000000000004'),\n  (x'c358000000000003'),\n  (x'c358000000000004'),\n  (x'c35f000000000020'),\n  -- exercise fixed-point memmoves\n  (x'42dc12218377de66'),\n  (x'42a674e79c5fe51f'),\n  (x'4271f71fb04cb74c'),\n  (x'423cbe991a145879'),\n  (x'4206fee0e1a9e061'),\n  (x'41d26580b487e6b4'),\n  (x'419d6f34540ca453'),\n  (x'41678c29dcd6e9dc'),\n  (x'4132d687e3df217d'),\n  (x'40fe240c9fcb68c8'),\n  (x'40c81cd6e63c53d3'),\n  (x'40934a4584fd0fdc'),\n  (x'405edd3c07fb4c93'),\n  (x'4028b0fcd32f7076'),\n  (x'3ff3c0ca428c59f8'),\n  -- these cases come from the upstream's testsuite\n  -- LotsOfTrailingZeros)\n  (x'3e60000000000000'),\n  -- Regression\n  (x'c352bd2668e077c4'),\n  (x'434018601510c000'),\n  (x'43d055dc36f24000'),\n  (x'43e052961c6f8000'),\n  (x'3ff3c0ca2a5b1d5d'),\n  -- LooksLikePow5\n  (x'4830f0cf064dd592'),\n  (x'4840f0cf064dd592'),\n  (x'4850f0cf064dd592'),\n  -- OutputLength\n  (x'3ff3333333333333'),\n  (x'3ff3ae147ae147ae'),\n  (x'3ff3be76c8b43958'),\n  (x'3ff3c083126e978d'),\n  (x'3ff3c0c1fc8f3238'),\n  (x'3ff3c0c9539b8887'),\n  (x'3ff3c0ca2a5b1d5d'),\n  (x'3ff3c0ca4283de1b'),\n  (x'3ff3c0ca43db770a'),\n  (x'3ff3c0ca428abd53'),\n  (x'3ff3c0ca428c1d2b'),\n  (x'3ff3c0ca428c51f2'),\n  (x'3ff3c0ca428c58fc'),\n  (x'3ff3c0ca428c59dd'),\n  (x'3ff3c0ca428c59f8'),\n  (x'3ff3c0ca428c59fb'),\n  -- 32-bit chunking\n  (x'40112e0be8047a7d'),\n  (x'40112e0be815a889'),\n  (x'40112e0be826d695'),\n  (x'40112e0be83804a1'),\n  (x'40112e0be84932ad'),\n  -- MinMaxShift\n  (x'0040000000000000'),\n  (x'007fffffffffffff'),\n  (x'0290000000000000'),\n  (x'029fffffffffffff'),\n  (x'4350000000000000'),\n  (x'435fffffffffffff'),\n  (x'1330000000000000'),\n  (x'133fffffffffffff'),\n  (x'3a6fa7161a4d6e0c');\n--Testcase 268:\nselect float8send(flt) as ibits,\n       flt,\n       flt::text::float8 as r_flt,\n       float8send(flt::text::float8) as obits,\n       float8send(flt::text::float8) = float8send(flt) as correct\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- clean up, lest opr_sanity complain\n--Testcase 269:\ndrop type xfloat8 cascade;\n\n--Testcase 272:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/int4.sql",
    "content": "--\n-- INT4 Based on PostgreSQL tests, please don't add additional tests here, use other test files\n--\n--Testcase 61:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 62:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 63:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 64:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n \n--Testcase 1:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n\n--Testcase 2:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n\n--Testcase 3:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n\n--Testcase 4:\nINSERT INTO INT4_TBL(f1) VALUES ('34.5');\n\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n\n--Testcase 6:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n-- bad input values -- should give errors\n--Testcase 7:\nINSERT INTO INT4_TBL(f1) VALUES ('1000000000000');\n--Testcase 8:\nINSERT INTO INT4_TBL(f1) VALUES ('asdf');\n--Testcase 9:\nINSERT INTO INT4_TBL(f1) VALUES ('     ');\n--Testcase 10:\nINSERT INTO INT4_TBL(f1) VALUES ('   asdf   ');\n--Testcase 11:\nINSERT INTO INT4_TBL(f1) VALUES ('- 1234');\n--Testcase 12:\nINSERT INTO INT4_TBL(f1) VALUES ('123       5');\n--Testcase 13:\nINSERT INTO INT4_TBL(f1) VALUES ('');\n\n\n--Testcase 14:\nSELECT '' AS five, * FROM INT4_TBL;\n\n--Testcase 15:\nSELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';\n\n--Testcase 16:\nSELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';\n\n--Testcase 17:\nSELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';\n\n--Testcase 18:\nSELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';\n\n--Testcase 19:\nSELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';\n\n--Testcase 20:\nSELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';\n\n--Testcase 21:\nSELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';\n\n--Testcase 22:\nSELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';\n\n--Testcase 23:\nSELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';\n\n--Testcase 24:\nSELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';\n\n--Testcase 25:\nSELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';\n\n--Testcase 26:\nSELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';\n\n-- positive odds\n--Testcase 27:\nSELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';\n\n-- any evens\n--Testcase 28:\nSELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';\n\n--Testcase 29:\nSELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 30:\nSELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 31:\nSELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 32:\nSELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 33:\nSELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 34:\nSELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 35:\nSELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 36:\nSELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 37:\nSELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 38:\nSELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 39:\nSELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 40:\nSELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 41:\nSELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 42:\nSELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;\n\n--\n-- more complex expressions\n--\n\n-- variations on unary minus parsing\n\n--Testcase 65:\nDELETE FROM INT4_TMP;\n--Testcase 66:\nINSERT INTO INT4_TMP VALUES (-2, 3);\n--Testcase 67:\nSELECT f1 + f2 as one FROM INT4_TMP;\n\n--Testcase 68:\nDELETE FROM INT4_TMP;\n--Testcase 69:\nINSERT INTO INT4_TMP VALUES (4, 2);\n--Testcase 70:\nSELECT f1 - f2 as two FROM INT4_TMP;\n\n--Testcase 46:\nDELETE FROM INT4_TMP;\n--Testcase 71:\nINSERT INTO INT4_TMP VALUES (2, 1);\n--Testcase 72:\nSELECT f1- -f2 as three FROM INT4_TMP;\n\n--Testcase 47:\nDELETE FROM INT4_TMP;\n--Testcase 73:\nINSERT INTO INT4_TMP VALUES (2, 2);\n--Testcase 74:\nSELECT f1 - -f2 as four FROM INT4_TMP;\n\n--Testcase 75:\nDELETE FROM INT4_TMP;\n--Testcase 76:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int2, '16'::int2 / '4'::int2);\n--Testcase 77:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 78:\nDELETE FROM INT4_TMP;\n--Testcase 79:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int4, '16'::int2 / '4'::int4);\n--Testcase 80:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 81:\nDELETE FROM INT4_TMP;\n--Testcase 82:\nINSERT INTO INT4_TMP VALUES ('2'::int4 * '2'::int2, '16'::int4 / '4'::int2);\n--Testcase 83:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 84:\nDELETE FROM INT4_TMP;\n--Testcase 85:\nINSERT INTO INT4_TMP VALUES ('1000'::int4, '999'::int4);\n--Testcase 86:\nSELECT f1 < f2 AS false FROM INT4_TMP;\n\n--Testcase 48:\nDELETE FROM INT4_TMP;\n--Testcase 87:\nINSERT INTO INT4_TMP VALUES (4!);\n--Testcase 88:\nSELECT f1 as twenty_four FROM INT4_TMP;\n\n--Testcase 49:\nDELETE FROM INT4_TMP;\n--Testcase 89:\nINSERT INTO INT4_TMP VALUES (!!3);\n--Testcase 90:\nSELECT f1 as six FROM INT4_TMP;\n\n--Testcase 50:\nDELETE FROM INT4_TMP;\n--Testcase 91:\nINSERT INTO INT4_TMP VALUES (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1);\n--Testcase 92:\nSELECT f1 as ten FROM INT4_TMP;\n\n--Testcase 51:\nDELETE FROM INT4_TMP;\n--Testcase 93:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 94:\nSELECT f1 + f1/f2 as three FROM INT4_TMP;\n\n--Testcase 52:\nDELETE FROM INT4_TMP;\n--Testcase 95:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 96:\nSELECT (f1 + f2)/f2 as two FROM INT4_TMP;\n\n-- corner case\n--Testcase 54:\nDELETE FROM INT4_TMP;\n--Testcase 97:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 98:\nSELECT (f1<<31)::text FROM INT4_TMP;\n\n--Testcase 56:\nDELETE FROM INT4_TMP;\n--Testcase 99:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 100:\nSELECT ((f1<<31)+1)::text FROM INT4_TMP;\n\n-- check sane handling of INT_MIN overflow cases\n--Testcase 58:\nDELETE FROM INT4_TMP;\n--Testcase 101:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int4);\n--Testcase 102:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 103:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 104:\nSELECT f1 % f2 FROM INT4_TMP;\n\n--Testcase 60:\nDELETE FROM INT4_TMP;\n--Testcase 105:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int2);\n--Testcase 106:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 107:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 108:\nSELECT f1 % f2 FROM INT4_TMP;\n\n-- check rounding when casting from float\n--Testcase 109:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 110:\nDELETE FROM FLOAT8_TMP;\n--Testcase 111:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 112:\nSELECT f1 as x, f1::int4 as int4_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 113:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 114:\nDELETE FROM NUMERIC_TMP;\n--Testcase 115:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 116:\nSELECT f1 as x, f1::int4 as int4_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 117:\nDELETE FROM INT4_TMP;\n--Testcase 118:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 6410818::int4),\n             (61866666::int4, 6410818::int4),\n             (-61866666::int4, 6410818::int4),\n             ((-2147483648)::int4, 1::int4),\n             ((-2147483648)::int4, 2147483647::int4),\n             ((-2147483648)::int4, 1073741824::int4);\n--Testcase 119:\nSELECT f1, f2, gcd(f1, f2), gcd(f1, -f2), gcd(f2, f1), gcd(-f2, f1) FROM INT4_TMP;\n\n--Testcase 120:\nDELETE FROM INT4_TMP;\n--Testcase 121:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 0::int4);\n--Testcase 122:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 123:\nDELETE FROM INT4_TMP;\n--Testcase 124:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-2147483648)::int4);\n--Testcase 125:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n-- test lcm()\n--Testcase 126:\nDELETE FROM INT4_TMP;\n--Testcase 127:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 42::int4),\n             (42::int4, 42::int4),\n             (330::int4, 462::int4),\n             (-330::int4, 462::int4),\n             ((-2147483648)::int4, 0::int4);\n--Testcase 128:\nSELECT f1, f2, lcm(f1, f2), lcm(f1, -f2), lcm(f2, f1), lcm(-f2, f1) FROM INT4_TMP;\n\n--Testcase 129:\nDELETE FROM INT4_TMP;\n--Testcase 130:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 1::int4);\n--Testcase 131:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 132:\nDELETE FROM INT4_TMP;\n--Testcase 133:\nINSERT INTO INT4_TMP VALUES (2147483647::int4, 2147483646::int4);\n--Testcase 134:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 137:\nDELETE FROM INT4_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 135:\nDROP SERVER sqlite_svr;\n--Testcase 136:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/int8.sql",
    "content": "--\n-- INT8\n-- Test int8 64-bit integers.\n--\n--Testcase 140:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 141:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 142:\nCREATE FOREIGN TABLE INT8_TBL(\n\tq1 int8 OPTIONS (key 'true'),\n\tq2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 143:\nCREATE FOREIGN TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4, \n\tq4 int2,\n\tq5 text,\n\tid int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 2:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 3:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 4:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 5:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n-- bad inputs\n--Testcase 6:\nINSERT INTO INT8_TBL(q1) VALUES ('      ');\n--Testcase 7:\nINSERT INTO INT8_TBL(q1) VALUES ('xxx');\n--Testcase 8:\nINSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');\n--Testcase 9:\nINSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');\n--Testcase 10:\nINSERT INTO INT8_TBL(q1) VALUES ('- 123');\n--Testcase 11:\nINSERT INTO INT8_TBL(q1) VALUES ('  345     5');\n--Testcase 12:\nINSERT INTO INT8_TBL(q1) VALUES ('');\n\n--Testcase 13:\nSELECT * FROM INT8_TBL;\n\n-- int8/int8 cmp\n--Testcase 14:\nSELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;\n--Testcase 15:\nSELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;\n--Testcase 16:\nSELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;\n--Testcase 17:\nSELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;\n--Testcase 18:\nSELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;\n--Testcase 19:\nSELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;\n\n-- int8/int4 cmp\n--Testcase 20:\nSELECT * FROM INT8_TBL WHERE q2 = 456;\n--Testcase 21:\nSELECT * FROM INT8_TBL WHERE q2 <> 456;\n--Testcase 22:\nSELECT * FROM INT8_TBL WHERE q2 < 456;\n--Testcase 23:\nSELECT * FROM INT8_TBL WHERE q2 > 456;\n--Testcase 24:\nSELECT * FROM INT8_TBL WHERE q2 <= 456;\n--Testcase 25:\nSELECT * FROM INT8_TBL WHERE q2 >= 456;\n\n-- int4/int8 cmp\n--Testcase 26:\nSELECT * FROM INT8_TBL WHERE 123 = q1;\n--Testcase 27:\nSELECT * FROM INT8_TBL WHERE 123 <> q1;\n--Testcase 28:\nSELECT * FROM INT8_TBL WHERE 123 < q1;\n--Testcase 29:\nSELECT * FROM INT8_TBL WHERE 123 > q1;\n--Testcase 30:\nSELECT * FROM INT8_TBL WHERE 123 <= q1;\n--Testcase 31:\nSELECT * FROM INT8_TBL WHERE 123 >= q1;\n\n-- int8/int2 cmp\n--Testcase 32:\nSELECT * FROM INT8_TBL WHERE q2 = '456'::int2;\n--Testcase 33:\nSELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;\n--Testcase 34:\nSELECT * FROM INT8_TBL WHERE q2 < '456'::int2;\n--Testcase 35:\nSELECT * FROM INT8_TBL WHERE q2 > '456'::int2;\n--Testcase 36:\nSELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;\n--Testcase 37:\nSELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;\n\n-- int2/int8 cmp\n--Testcase 38:\nSELECT * FROM INT8_TBL WHERE '123'::int2 = q1;\n--Testcase 39:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;\n--Testcase 40:\nSELECT * FROM INT8_TBL WHERE '123'::int2 < q1;\n--Testcase 41:\nSELECT * FROM INT8_TBL WHERE '123'::int2 > q1;\n--Testcase 42:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;\n--Testcase 43:\nSELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;\n\n\n--Testcase 44:\nSELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL;\n\n--Testcase 45:\nSELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL;\n--Testcase 46:\nSELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;\n--Testcase 47:\nSELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL;\n--Testcase 48:\nSELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL\n WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);\n--Testcase 49:\nSELECT '' AS five, q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;\n\n--Testcase 50:\nSELECT '' AS five, q1, float8(q1) FROM INT8_TBL;\n--Testcase 51:\nSELECT '' AS five, q2, float8(q2) FROM INT8_TBL;\n\n--Testcase 52:\nSELECT 37 + q1 AS plus4 FROM INT8_TBL;\n--Testcase 53:\nSELECT 37 - q1 AS minus4 FROM INT8_TBL;\n--Testcase 54:\nSELECT '' AS five, 2 * q1 AS \"twice int4\" FROM INT8_TBL;\n--Testcase 55:\nSELECT '' AS five, q1 * 2 AS \"twice int4\" FROM INT8_TBL;\n\n-- int8 op int4\n--Testcase 56:\nSELECT q1 + 42::int4 AS \"8plus4\", q1 - 42::int4 AS \"8minus4\", q1 * 42::int4 AS \"8mul4\", q1 / 42::int4 AS \"8div4\" FROM INT8_TBL;\n-- int4 op int8\n--Testcase 57:\nSELECT 246::int4 + q1 AS \"4plus8\", 246::int4 - q1 AS \"4minus8\", 246::int4 * q1 AS \"4mul8\", 246::int4 / q1 AS \"4div8\" FROM INT8_TBL;\n\n-- int8 op int2\n--Testcase 58:\nSELECT q1 + 42::int2 AS \"8plus2\", q1 - 42::int2 AS \"8minus2\", q1 * 42::int2 AS \"8mul2\", q1 / 42::int2 AS \"8div2\" FROM INT8_TBL;\n-- int2 op int8\n--Testcase 59:\nSELECT 246::int2 + q1 AS \"2plus8\", 246::int2 - q1 AS \"2minus8\", 246::int2 * q1 AS \"2mul8\", 246::int2 / q1 AS \"2div8\" FROM INT8_TBL;\n\n--Testcase 60:\nSELECT q2, abs(q2) FROM INT8_TBL;\n--Testcase 61:\nSELECT min(q1), min(q2) FROM INT8_TBL;\n--Testcase 62:\nSELECT max(q1), max(q2) FROM INT8_TBL;\n\n\n-- TO_CHAR()\n--\n--Testcase 63:\nSELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')\n\tFROM INT8_TBL;\n\n--Testcase 64:\nSELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')\n\tFROM INT8_TBL;\n\n--Testcase 65:\nSELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')\n\tFROM INT8_TBL;\n\n--Testcase 66:\nSELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')\n\tFROM INT8_TBL;\n\n--Testcase 67:\nSELECT '' AS to_char_5,  to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;\n--Testcase 68:\nSELECT '' AS to_char_6,  to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;\n--Testcase 69:\nSELECT '' AS to_char_7,  to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;\n--Testcase 70:\nSELECT '' AS to_char_8,  to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;\n--Testcase 71:\nSELECT '' AS to_char_9,  to_char(q2, '0999999999999999')       FROM INT8_TBL;\n--Testcase 72:\nSELECT '' AS to_char_10, to_char(q2, 'S0999999999999999')      FROM INT8_TBL;\n--Testcase 73:\nSELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;\n--Testcase 74:\nSELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;\n--Testcase 75:\nSELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;\n--Testcase 76:\nSELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;\n--Testcase 77:\nSELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;\n--Testcase 78:\nSELECT '' AS to_char_16, to_char(q2, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM INT8_TBL;\n--Testcase 79:\nSELECT '' AS to_char_17, to_char(q2, '999999SG9999999999')     FROM INT8_TBL;\n\n-- check min/max values and overflow behavior\n--Testcase 80:\nDELETE FROM INT8_TMP;\n--Testcase 144:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 145:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 81:\nDELETE FROM INT8_TMP;\n--Testcase 146:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775809'::int8);\n--Testcase 147:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 82:\nDELETE FROM INT8_TMP;\n--Testcase 148:\nINSERT INTO INT8_TMP VALUES ('9223372036854775807'::int8);\n--Testcase 149:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 83:\nDELETE FROM INT8_TMP;\n--Testcase 150:\nINSERT INTO INT8_TMP VALUES ('9223372036854775808'::int8);\n--Testcase 151:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 84:\nDELETE FROM INT8_TMP;\n--Testcase 152:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775807'::int8));\n--Testcase 153:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 86:\nDELETE FROM INT8_TMP;\n--Testcase 154:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775808'::int8));\n--Testcase 155:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 87:\nDELETE FROM INT8_TMP;\n--Testcase 156:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 157:\nSELECT q1 + q2 FROM INT8_TMP;\n--Testcase 88:\nDELETE FROM INT8_TMP;\n--Testcase 158:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 159:\nSELECT q1 + q2 FROM INT8_TMP;\n\n--Testcase 89:\nDELETE FROM INT8_TMP;\n--Testcase 160:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 161:\nSELECT q1-q2 FROM INT8_TMP;\n--Testcase 90:\nDELETE FROM INT8_TMP;\n--Testcase 162:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 163:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 91:\nDELETE FROM INT8_TMP;\n--Testcase 164:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 165:\nSELECT q1 * q2 FROM INT8_TMP;\n\n--Testcase 92:\nDELETE FROM INT8_TMP;\n--Testcase 166:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 167:\nSELECT q1 / q2 FROM INT8_TMP;\n\n--Testcase 93:\nDELETE FROM INT8_TMP;\n--Testcase 168:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 169:\nSELECT q1 % q2 FROM INT8_TMP;\n\n--Testcase 94:\nDELETE FROM INT8_TMP;\n--Testcase 170:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 171:\nSELECT abs(q1) FROM INT8_TMP;\n\n--Testcase 95:\nDELETE FROM INT8_TMP;\n--Testcase 172:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 173:\nSELECT q1 + q3 FROM INT8_TMP;\n--Testcase 96:\nDELETE FROM INT8_TMP;\n--Testcase 174:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('-9223372036854775800'::int8 , '100'::int4);\n--Testcase 175:\nSELECT q1 - q3 FROM INT8_TMP;\n--Testcase 97:\nDELETE FROM INT8_TMP;\n--Testcase 176:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 177:\nSELECT q1 * q3 FROM INT8_TMP;\n\n--Testcase 98:\nDELETE FROM INT8_TMP;\n--Testcase 178:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 179:\nSELECT q3 + q1 FROM INT8_TMP;\n--Testcase 99:\nDELETE FROM INT8_TMP;\n--Testcase 180:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('-100'::int4 , '9223372036854775800'::int8);\n--Testcase 181:\nSELECT q3 - q1 FROM INT8_TMP;\n--Testcase 100:\nDELETE FROM INT8_TMP;\n--Testcase 182:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 183:\nSELECT q3 * q1 FROM INT8_TMP;\n\n--Testcase 101:\nDELETE FROM INT8_TMP;\n--Testcase 184:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 185:\nSELECT q1 + q4 FROM INT8_TMP;\n--Testcase 102:\nDELETE FROM INT8_TMP;\n--Testcase 186:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775800'::int8 , '100'::int2);\n--Testcase 187:\nSELECT q1 - q4 FROM INT8_TMP;\n--Testcase 103:\nDELETE FROM INT8_TMP;\n--Testcase 188:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 189:\nSELECT q1 * q4 FROM INT8_TMP;\n--Testcase 104:\nDELETE FROM INT8_TMP;\n--Testcase 190:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775808'::int8 , '0'::int2);\n--Testcase 191:\nSELECT q1 / q4 FROM INT8_TMP;\n\n--Testcase 105:\nDELETE FROM INT8_TMP;\n--Testcase 192:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 193:\nSELECT q4 + q1 FROM INT8_TMP;\n--Testcase 106:\nDELETE FROM INT8_TMP;\n--Testcase 194:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('-100'::int2 , '9223372036854775800'::int8);\n--Testcase 195:\nSELECT q4 - q1 FROM INT8_TMP;\n--Testcase 107:\nDELETE FROM INT8_TMP;\n--Testcase 196:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 197:\nSELECT q4 * q1 FROM INT8_TMP;\n--Testcase 108:\nDELETE FROM INT8_TMP;\n--Testcase 198:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '0'::int8);\n--Testcase 199:\nSELECT q4 / q1 FROM INT8_TMP;\n\n--Testcase 110:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;\n--Testcase 111:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 112:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;\n--Testcase 113:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 200:\nDELETE FROM INT8_TMP;\n--Testcase 201:\nINSERT INTO INT8_TMP(q5) VALUES ('42'), ('-37');\n--Testcase 202:\nSELECT CAST(q5::int2 as int8) FROM INT8_TMP;\n\n--Testcase 114:\nSELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;\n\n--Testcase 203:\nDELETE FROM INT8_TMP;\n--Testcase 204:\nINSERT INTO INT8_TMP(q5) VALUES ('36854775807.0');\n--Testcase 205:\nSELECT CAST(q5::float4 AS int8) FROM INT8_TMP;\n\n--Testcase 206:\nDELETE FROM INT8_TMP;\n--Testcase 207:\nINSERT INTO INT8_TMP(q5) VALUES ('922337203685477580700.0');\n--Testcase 208:\nSELECT CAST(q5::float8 AS int8) FROM INT8_TMP;\n\n--Testcase 115:\nSELECT CAST(q1 AS oid) FROM INT8_TBL;\n--Testcase 209:\nSELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';\n\n-- bit operations\n\n--Testcase 116:\nSELECT q1, q2, q1 & q2 AS \"and\", q1 | q2 AS \"or\", q1 # q2 AS \"xor\", ~q1 AS \"not\" FROM INT8_TBL;\n--Testcase 117:\nSELECT q1, q1 << 2 AS \"shl\", q1 >> 3 AS \"shr\" FROM INT8_TBL;\n\n\n-- generate_series\n\n--Testcase 118:\nDELETE FROM INT8_TMP;\n--Testcase 210:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8) q1;\n--Testcase 211:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 120:\nDELETE FROM INT8_TMP;\n--Testcase 212:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0) q1; -- should error\n--Testcase 213:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 122:\nDELETE FROM INT8_TMP;\n--Testcase 214:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2) q1;\n--Testcase 215:\nSELECT q1 FROM INT8_TMP;\n\n-- corner case\n--Testcase 216:\nDELETE FROM INT8_TMP;\n--Testcase 217:\nINSERT INTO INT8_TMP VALUES (-1::int8<<63);\n--Testcase 218:\nSELECT q1::text FROM INT8_TMP;\n\n--Testcase 219:\nDELETE FROM INT8_TMP;\n--Testcase 220:\nINSERT INTO INT8_TMP VALUES ((-1::int8<<63)+1);\n--Testcase 221:\nSELECT q1::text FROM INT8_TMP;\n\n-- check sane handling of INT64_MIN overflow cases\n--Testcase 125:\nDELETE FROM INT8_TMP;\n--Testcase 222:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int8, 888);\n--Testcase 126:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int8, 888);\n--Testcase 127:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int8, 888);\n--Testcase 128:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 129:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 130:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int4, 888);\n--Testcase 131:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int4, 888);\n--Testcase 132:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int4, 888);\n--Testcase 133:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 134:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 135:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int2, 888);\n--Testcase 136:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int2, 888);\n--Testcase 137:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int2, 888);\n--Testcase 138:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 139:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n\n-- check rounding when casting from float\n--Testcase 223:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 224:\nDELETE FROM FLOAT8_TMP;\n--Testcase 225:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 226:\nSELECT f1 as x, f1::int8 as int8_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 227:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 228:\nDELETE FROM NUMERIC_TMP;\n--Testcase 229:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 230:\nSELECT f1 as x, f1::int8 as int8_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 231:\nDELETE FROM INT8_TMP;\n--Testcase 232:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 1::int8),\n             ((-9223372036854775808)::int8, 9223372036854775807::int8),\n             ((-9223372036854775808)::int8, 4611686018427387904::int8);\n--Testcase 233:\nSELECT q1, q2, gcd(q1, q2), gcd(q1, -q2), gcd(q2, q1), gcd(-q2, q1) FROM INT8_TMP;\n\n--Testcase 234:\nDELETE FROM INT8_TMP;\n--Testcase 235:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 0::int8);\n--Testcase 236:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 237:\nDELETE FROM INT8_TMP;\n--Testcase 238:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, (-9223372036854775808)::int8);\n--Testcase 239:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n-- test lcm()\n--Testcase 240:\nDELETE FROM INT8_TMP;\n--Testcase 241:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (29893644334::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 0::int8);\n--Testcase 242:\nSELECT q1, q2, lcm(q1, q2), lcm(q1, -q2), lcm(q2, q1), lcm(-q2, q1) FROM INT8_TMP;\n\n--Testcase 243:\nDELETE FROM INT8_TMP;\n--Testcase 244:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 1::int8);\n--Testcase 245:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 246:\nDELETE FROM INT8_TMP;\n--Testcase 247:\nINSERT INTO INT8_TMP VALUES ((9223372036854775807)::int8, (9223372036854775806)::int8);\n--Testcase 248:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 251:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 249:\nDROP SERVER sqlite_svr;\n--Testcase 250:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/json.sql",
    "content": "-- SET log_min_messages TO DEBUG3;\n-- SET client_min_messages TO DEBUG3;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 010:\nCREATE FOREIGN TABLE \"type_JSON\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" json,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" json\n) SERVER sqlite_svr OPTIONS (table 'type_JSON');\n--Testcase 011:\nCREATE FOREIGN TABLE \"type_JSONB\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB');\n--Testcase 012:\nCREATE FOREIGN TABLE \"type_JSONB+\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tl int, t varchar(16), tx text,\t\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB+');\n\n--Testcase 013:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, ot1, oi, oi1) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}],\"a+u\":47,\"5\":true,\"cc3\":[\"a\", \"b\", \"c\"], \"c3\":[true, false]}',\n'c', 'c3', 2, 1),\n(2, '[11,22,33,44,55,66,77,88,99,10,11,12,13,14]',\n'1', '29', 3, 1),\n(3, '{\"a\":\"xyz\", \"π\":3.1415926535, \"aπ\":false }',\n'a', 'π', 1, NULL),\n(4, '{\"a\":null, \"a22\":22.0, \"a2\":2 }',\n'a', '22', 4, NULL),\n(5, '[9,null,7,6,5,4,3,2,1,0]',\n'1', '5', -4, 5),\n(6, '[0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,null,true]',\n'1', '21', -2, 5);\n\n--Testcase 014:\nINSERT INTO \"type_JSONB\" SELECT * FROM \"type_JSON\";\n--Testcase 015: check some SQLite JSONb initial bytes\nSELECT i, tx FROM \"type_JSONB+\";\n\n--Testcase 020:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 021: SQLite queries to type_JSON will be without normalization for j column\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\n--Testcase 022:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n\n--Testcase 023:\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 024:\nSELECT \"i\", \"j\", j.\"j\"->'a' res FROM \"type_JSON\" j;\n--Testcase 025:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 026:\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 027:\nSELECT \"i\", \"j\", j.\"j\"->'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 028:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 029:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 030:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res FROM \"type_JSON\" j;\n--Testcase 031:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 032:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 033:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 034:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 035:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 036:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'a' IS NOT NULL;\n--Testcase 037:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 038:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 039:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'a' IS NOT NULL;\n\n--Testcase 040:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 041:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 042:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 044:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 045:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n\n--Testcase 046:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 047:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 048:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSON\" j;\n--Testcase 049:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 050:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 051:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 052:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 053:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 054:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSON\" j;\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 056:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 057:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 058:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 059:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 060:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n--Testcase 061:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 062:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 063:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n\n--Testcase 064:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 065:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 066:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n--Testcase 067:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 068:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 069:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 071:\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 072:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 073:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 074:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n--Testcase 075:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 077:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 078:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 079:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 081:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 082:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 083:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 085:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 086:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n--Testcase 087:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n\n--Testcase 088:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 089:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 090:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n--Testcase 091:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 093:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 095:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n\n--Testcase 096:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 097:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 099:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n\n-- extraction with arithmetical an other expressions\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 101:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 103:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 105:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 107:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 109:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 111:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 113:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 115:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 117:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 119:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 120:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 121:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 123:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 125:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 127:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 129:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 131:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 133:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 135:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 137:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 139:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 141:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 143:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 144:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 145:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 146:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 147:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n\n--Testcase 148:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 149:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 151:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 153:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 155:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 157:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 159:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 161:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 163:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 165:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 167:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 169:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 171:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 172:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 173:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 174:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 175:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 176:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 177:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 178:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 179:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n\n\n--TCs for SQLite JSON -> format, no sense in PostgreSQL itself\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 201:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 203:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 204:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 205:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 206:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 207:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 208:\nDELETE FROM \"type_JSON\"; \n--Testcase 209:\nDELETE FROM \"type_JSONB\";\n--Testcase 210:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 211:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 212:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 213:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 214:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 215:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 216:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 217:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 218:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 219:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 220:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 221:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 222:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 223:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 224:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 225:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 226:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 227:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n-- end of SQLite right -> ->> operand test\n\n-- Operators -> ->> in SELECT context\n--Testcase 230:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n--Testcase 231:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 232:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 233:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 234:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n--Testcase 235:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 236:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 237:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 238:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n--Testcase 239:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n\n--Testcase 240:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n--Testcase 241:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 250:\nDELETE FROM \"type_JSON\"; \n--Testcase 251:\nDELETE FROM \"type_JSONB\";\n--Testcase 252:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 253:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 254:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 255:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 256:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 257:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 261:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 262:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 263:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 265\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 267:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 269:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 270:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 271:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 272:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 273\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 274:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 275:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 276:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n--Testcase 277: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n\n--Testcase 278:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n--Testcase 279:\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n\n--Testcase 280:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n--Testcase 281: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n\n--Testcase 282:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n--Testcase 283:\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n\n--Testcase 284:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n--Testcase 285: no such\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n\n--Testcase 286:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 287:\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 288:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n--Testcase 289: no such\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n\n--Testcase 290:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 291:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 292:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 293:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 294:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 295:\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 296:\nSELECT * FROM \"type_JSONB+\";\n\n--Testcase 297:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 298:\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 299:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n--Testcase 300: no such\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n\n--Multievel extraction chains\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 302:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 304:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 306:\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n--Testcase 308:\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n\n\n-- UPDATE tests\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 310:\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 311:\nSELECT * FROM \"type_JSON\" WHERE \"i\" = 1;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 313:\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 314:\nSELECT * FROM \"type_JSONB+\" WHERE \"i\" = 1;\n\n\n-- Real GIS data test, data from https://www.wikidata.org/wiki/Q118122043\n-- https://commons.wikimedia.org/wiki/Category:Private_Garden_(Pavlovsk)\n-- License of testing data in json_osm_test table: ODbL, © OpenStreetMap contributors\n--Testcase 400:\nCREATE FOREIGN TABLE json_osm_test (\n\twkt text NOT NULL,\n\tosm_type varchar(8) OPTIONS (key 'true') NOT NULL,\n\tosm_id int8 OPTIONS (key 'true') NOT NULL,\n\tt json OPTIONS (column_name 'tags') NULL,\n\tway_nodes text NULL\n) SERVER sqlite_svr;\n\n--Testcase 401:\nINSERT INTO json_osm_test VALUES ('SRID=4326;POINT(30.4536193 59.6847624)', 'node', 1198356775, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4522474 59.6851858)', 'node', 1198357028, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4532025 59.6850113)', 'node', 1738381537, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"description\": \"Ваза в дендрарии Собственного садика\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529584 59.6849417)', 'node', 3968068680, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526407 59.68497)', 'node', 4487385447, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"late C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4524943 59.6854502)', 'node', 4912270255, '{\"fee\": \"yes\", \"access\": \"customers\", \"barrier\": \"gate\", \"vehicle\": \"no\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"barrier:personnel\": \"additional\"}', NULL),\n ('SRID=4326;POINT(30.452977 59.6847621)', 'node', 7484858507, '{\"name\": \"Неизвестный мужчина\", \"ref:okn\": \"781610399040516\", \"tourism\": \"artwork\", \"alt_name\": \"Спутник Одиссея\", \"heritage\": \"2\", \"historic\": \"yes\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6522/\"}', NULL),\n ('SRID=4326;POINT(30.452909 59.6847573)', 'node', 7484858508, '{\"name\": \"Антиной\", \"ref:okn\": \"781610399040526\", \"tourism\": \"artwork\", \"alt_name\": \"Дионис\", \"heritage\": \"2\", \"historic\": \"yes\", \"material\": \"stone\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6521/\"}', NULL),\n ('SRID=4326;POINT(30.4529561 59.6848095)', 'node', 8114975053, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528946 59.6848042)', 'node', 8114975054, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528732 59.6848762)', 'node', 8114975055, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529364 59.6848802)', 'node', 8114975056, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528444 59.6851765)', 'node', 8289295956, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527798 59.6851726)', 'node', 8289295957, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528665 59.6850957)', 'node', 8289295958, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528046 59.685091)', 'node', 8289295959, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528947 59.6850172)', 'node', 8289295960, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528301 59.6850118)', 'node', 8289295961, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529101 59.6849636)', 'node', 8289295962, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528496 59.684959)', 'node', 8289295963, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528359 59.6852187)', 'node', 8331430659, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527605 59.685213)', 'node', 8331430660, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4523414 59.6851726)', 'node', 8331430663, '{\"name\": \"Сатир\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4523561 59.685141)', 'node', 8331430664, '{\"name\": \"Сатиресса\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4527994 59.6847007)', 'node', 8566916332, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4528945 59.6847497)', 'node', 8566916333, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529784 59.6853519)', 'node', 8895996426, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4529255 59.6853861)', 'node', 8895996427, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4525278 59.685471)', 'node', 8895996643, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4534153 59.6851412)', 'node', 8899249758, '{\"genus\": \"Elaeagnus\", \"taxon\": \"Elaeagnus commutata\", \"natural\": \"shrub\", \"genus:ru\": \"Лох\", \"taxon:ru\": \"Лох серебристый\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4535524 59.6848638)', 'node', 8899249764, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4535202 59.6849613)', 'node', 8899249765, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534934 59.6850486)', 'node', 8899249766, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534679 59.685136)', 'node', 8899249767, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4528899 59.6851725)', 'node', 8899249768, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530448 59.6850046)', 'node', 8899249769, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4533465 59.6850216)', 'node', 8899249770, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4532205 59.6849417)', 'node', 8899249771, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531776 59.6850839)', 'node', 8899249772, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6851265)', 'node', 8899249773, '{\"genus\": \"Malus\", \"taxon\": \"Malus niedzwetzkyana\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Яблоня\", \"taxon:ru\": \"Яблоня Недзвецкого\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533043 59.6851928)', 'node', 8899249779, '{\"height\": \"4\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.452916 59.6849894)', 'node', 8899249796, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4528248 59.684983)', 'node', 8899249797, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531527 59.685139)', 'node', 8899299127, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529549 59.6850382)', 'node', 8902082041, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530139 59.6850101)', 'node', 8902082042, '{\"genus\": \"Amelanchier\", \"taxon\": \"Amelanchier canadensis\", \"natural\": \"shrub\", \"genus:ru\": \"Ирга\", \"taxon:ru\": \"Ирга канадская\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530089 59.6850564)', 'node', 8902082048, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529982 59.685072)', 'node', 8902082055, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530213 59.6850872)', 'node', 8902082060, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529918 59.6851617)', 'node', 8902082061, '{\"genus\": \"Berberis\", \"taxon\": \"Berberis vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Барбарис\", \"taxon:ru\": \"Барбарис обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530615 59.685137)', 'node', 8902082071, '{\"genus\": \"Paeonia\", \"taxon\": \"Paeonia suffruticosa\", \"natural\": \"shrub\", \"genus:ru\": \"Пион\", \"taxon:ru\": \"Пион древовидный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531031 59.6851282)', 'node', 8902082072, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530991 59.6851451)', 'node', 8902082073, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531977 59.6851532)', 'node', 8902082074, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453207 59.6851336)', 'node', 8902082075, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532426 59.6850926)', 'node', 8902082171, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532694 59.6851157)', 'node', 8902082172, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533707 59.6851035)', 'node', 8902082173, '{\"genus\": \"Hydrangea\", \"taxon\": \"Hydrangea paniculata\", \"natural\": \"shrub\", \"genus:ru\": \"Гортензия\", \"taxon:ru\": \"Гортензия метельчатая\"}', NULL),\n ('SRID=4326;POINT(30.4528986 59.6851502)', 'node', 8902082174, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4530486 59.6848994)', 'node', 8904992674, '{\"genus\": \"Viburnum\", \"taxon\": \"Viburnum opulus\", \"natural\": \"shrub\", \"genus:ru\": \"Калина\", \"taxon:ru\": \"Калина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532396 59.6848373)', 'node', 8905335421, '{\"genus\": \"Corylus\", \"taxon\": \"Corylus avellana\", \"natural\": \"shrub\", \"genus:ru\": \"Лещина\", \"taxon:ru\": \"Лещина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532946 59.684841)', 'node', 8905335422, '{\"genus\": \"Spiraea\", \"taxon\": \"Spiraea chamaedryfolia\", \"natural\": \"shrub\", \"genus:ru\": \"Спирея\", \"taxon:ru\": \"Спирея дубравколистная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533857 59.6849271)', 'node', 8905335423, '{\"genus\": \"Euonymus\", \"taxon\": \"Euonymus europaeus\", \"natural\": \"shrub\", \"genus:ru\": \"Бересклет\", \"taxon:ru\": \"Бересклет европейский\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6849004)', 'node', 8905335424, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus sachalinensis\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Вишня\", \"taxon:ru\": \"Вишня сахалинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533998 59.6848611)', 'node', 8905335425, '{\"genus\": \"Buxus\", \"taxon\": \"Buxus sempervirens\", \"height\": \"1\", \"natural\": \"shrub\", \"genus:ru\": \"Самшит\", \"taxon:ru\": \"Самшит вечнозелёный\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4534776 59.6848679)', 'node', 8905335426, '{\"genus\": \"Rhamnus\", \"taxon\": \"Rhamnus cathartica\", \"height\": \"4\", \"natural\": \"tree\", \"genus:ru\": \"Жостер\", \"taxon:ru\": \"Жостер слабительный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534324 59.6849515)', 'node', 8905335427, '{\"genus\": \"Lonicera\", \"taxon\": \"Lonicera caerulea\", \"natural\": \"shrub\", \"genus:ru\": \"Жимолость\", \"taxon:ru\": \"Жимолость синяя\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453365 59.684981)', 'node', 8905335428, '{\"genus\": \"Philadelphus\", \"taxon\": \"Philadelphus coronarius\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник венечный\"}', NULL),\n ('SRID=4326;POINT(30.4533874 59.6849671)', 'node', 8905335429, '{\"genus\": \"Juniperus\", \"taxon\": \"Juniperus sabina\", \"height\": \"0.5\", \"natural\": \"shrub\", \"genus:ru\": \"Можжевельник\", \"taxon:ru\": \"Можжевельник казацкий\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4531319 59.6849356)', 'node', 8905335430, '{\"genus\": \"Picea\", \"taxon\": \"Picea abies\", \"height\": \"0.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель европейская\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532466 59.6848527)', 'node', 8905335431, '{\"genus\": \"Ginkgo\", \"taxon\": \"Ginkgo biloba\", \"height\": \"2.5\", \"natural\": \"tree\", \"genus:ru\": \"Гингко\", \"taxon:ru\": \"Гинкго двулопастный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"label\"}', NULL),\n ('SRID=4326;POINT(30.4532184 59.6848635)', 'node', 8905335468, '{\"genus\": \"Daphne\", \"taxon\": \"Daphne mezereum\", \"natural\": \"shrub\", \"genus:ru\": \"Волчеягодник\", \"taxon:ru\": \"Волчеягодник обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532392 59.6848902)', 'node', 8905335469, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526679 59.6846912)', 'node', 8905558225, '{\"height\": \"3\", \"highway\": \"street_lamp\", \"man_made\": \"surveillance\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530347 59.6849253)', 'node', 8906857477, '{\"genus\": \"Philadelphus lemoinei\", \"taxon\": \"Philadelphus lemoinei\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник Лемуана\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530224 59.6849455)', 'node', 8906857478, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530015 59.6847554)', 'node', 8906857479, '{\"natural\": \"tree_stump\"}', NULL),\n ('SRID=4326;LINESTRING(30.4522584 59.6851734,30.4522474 59.6851858)', 'way', 103807093, '{\"highway\": \"footway\", \"surface\": \"compacted\"}', '{3968068679,1198357028}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525041 59.6846527,30.4522364 59.6845601,30.4516531 59.6843525,30.4513385 59.6842533,30.4513511 59.6841667)', 'way', 103807103, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{8566824024,12023699867,8114975022,1195141497,4014269128,3186425168}'),\n ('SRID=4326;LINESTRING(30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456)', 'way', 103807114, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{1198357004,303515662,8566916345,1198356771,8566916346,1198356889,1198357009,8906857470}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529382 59.6847803,30.4528051 59.6851927,30.4527793 59.6852746,30.4527609 59.6853349,30.4527422 59.6853961,30.4527263 59.6854482,30.4527224 59.6854618)', 'way', 153761053, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068681,8114975050,8114975107,8895975844,8895975845,8895975847,4912270253,1664064412}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4532459 59.6852254,30.45322 59.6852491)', 'way', 153761054, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975105,3968068669}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4528762 59.6851274,30.4530118 59.6851874)', 'way', 153947121, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381541,1665582246}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4529574 59.6848702,30.4531238 59.6848204)', 'way', 153947122, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1738381532,1665582234}'),\n ('SRID=4326;LINESTRING(30.4533888 59.6848413,30.4535109 59.6849058,30.4534919 59.684967)', 'way', 153947123, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582235,1738381534,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533267 59.6852228,30.4533391 59.6851996,30.4533483 59.6851876,30.4533556 59.6851828,30.4533653 59.6851769,30.4533784 59.6851717,30.4533901 59.6851678,30.4534147 59.6851629,30.4534315 59.6851615,30.4534524 59.6850941)', 'way', 153947124, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975034,8899249793,8114975035,8902027910,8899249794,8902027909,8899249795,1738381544,8114975036,1665582244}'),\n ('SRID=4326;LINESTRING(30.4531795 59.685129,30.4533062 59.6850846,30.4534722 59.6850303,30.4534919 59.684967)', 'way', 153947125, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975075,1665582243,1738381539,1665582240}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4530483 59.6850678,30.4529356 59.6849912)', 'way', 153947126, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,1665582242,8902082170}'),\n ('SRID=4326;LINESTRING(30.4529356 59.6849912,30.4530873 59.6849398,30.453213 59.6848988)', 'way', 153947127, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8902082170,1665582238,8904992643}'),\n ('SRID=4326;LINESTRING(30.4532598 59.6849025,30.4533508 59.6849575,30.4534722 59.6850303,30.4534524 59.6850941)', 'way', 153947128, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992648,1665582239,1738381539,1665582244}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4531238 59.6848204,30.4533888 59.6848413,30.4535282 59.6848524)', 'way', 153947130, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1665582234,1665582235,1665582236}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4530873 59.6849398,30.4532201 59.6849487,30.4533508 59.6849575,30.4534919 59.684967)', 'way', 153947131, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1665582238,8902082149,1665582239,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533062 59.6850846,30.4533306 59.6850189,30.4533508 59.6849575,30.4533888 59.6848413)', 'way', 153947132, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,1665582243,8902082150,1665582239,1665582235}'),\n ('SRID=4326;LINESTRING(30.4534524 59.6850941,30.4533062 59.6850846,30.4531801 59.6850762,30.4530483 59.6850678,30.452898 59.6850578)', 'way', 153947133, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582244,1665582243,8902082168,1665582242,1665582241}'),\n ('SRID=4326;LINESTRING(30.4532234 59.6850226,30.4533062 59.6850846,30.4534147 59.6851629)', 'way', 153947134, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975088,1665582243,1738381544}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4530483 59.6850678,30.4530675 59.6850048,30.4530873 59.6849398,30.4531238 59.6848204)', 'way', 153947135, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,1665582242,8902082151,1665582238,1665582234}'),\n ('SRID=4326;LINESTRING(30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858)', 'way', 312745383, '{\"barrier\": \"fence\"}', '{1439053672,4912270255,4438910482,8895996664,4438910480,3234125031,4438910477,8893386635,4438910475,8895996665,4438910473,8114975112,8114975111,1198357028}'),\n ('SRID=4326;LINESTRING(30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554)', 'way', 315626926, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053649,8895996432,8895996430,1439053648,1439053645,8895996431,1439053641,1439053639}'),\n ('SRID=4326;LINESTRING(30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577)', 'way', 317173782, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{1653641713,8114975028,8114975027,8566824024}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.4526304 59.6847065,30.4529536 59.6847313,30.453482 59.6847765,30.4535921 59.6847856,30.4535778 59.6848316,30.4534654 59.685163)', 'way', 393601662, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774427,8905543616,3968068681,7927774426,3968068674,8114975049,3968068687}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4530118 59.6851874,30.4532501 59.6852048,30.4532657 59.6852057)', 'way', 393601664, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1665582246,8899299159,1665582248}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4528762 59.6851274,30.4530483 59.6850678,30.4531752 59.6850205)', 'way', 393601667, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1738381541,1665582242,8114975100}'),\n ('SRID=4326;LINESTRING(30.452545 59.6854429,30.4525305 59.6854105,30.4525224 59.6853929,30.4525133 59.6853758,30.4525036 59.6853597,30.4524909 59.6853438,30.4524775 59.6853279,30.4524583 59.6853083,30.4524437 59.6852938,30.4524165 59.6852717,30.4523957 59.6852568,30.452375 59.6852427,30.4523461 59.6852243,30.4523179 59.6852068)', 'way', 393620818, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975116,8895996660,8895996640,4438927787,8895996641,8895996659,8895996642,4438927782,8114975115,8895996661,8895996639,4438927777,8895996638,8114975114}'),\n ('SRID=4326;LINESTRING(30.45322 59.6852491,30.4530263 59.6852336,30.4529402 59.6852275,30.4528645 59.6852217)', 'way', 393620820, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068669,8895975857,8895975877,8895975841}'),\n ('SRID=4326;LINESTRING(30.4527686 59.6854977,30.4528746 59.6855048)', 'way', 446650486, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053671,1439053674}'),\n ('SRID=4326;LINESTRING(30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905)', 'way', 446650506, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053619,8914843795,8895996424,8914843796,1439053616,8914843797,8895996423,8914843798,1439053613,8914843799,8895996422,8895996441,8914843802,8895996421,8914843801,1439053611,8914843800,8895996420,1439053614}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522278 59.6851794)', 'way', 446651403, '{\"barrier\": \"fence\"}', '{1198357028,1653641713}'),\n ('SRID=4326;LINESTRING(30.4524943 59.6854502,30.452545 59.6854429,30.4525879 59.6854383,30.4527263 59.6854482,30.4528729 59.6854587)', 'way', 500077282, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{4912270255,8114975116,4438928092,4912270253,4438928093}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522167 59.6853009)', 'way', 758868053, '{\"highway\": \"footway\"}', '{1198357028,1406921754}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529562 59.6847243)', 'way', 849729200, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068681,8905543615}'),\n ('SRID=4326;LINESTRING(30.453482 59.6847765,30.4534851 59.684767)', 'way', 849729201, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774426,8905543614}'),\n ('SRID=4326;LINESTRING(30.452599 59.6846895,30.4525675 59.6846756,30.45256 59.6846723,30.452568 59.6846486,30.4535014 59.6847265,30.4534976 59.6847368)', 'way', 849729202, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068677,12023732269,8566916344,8566916343,8566916342,7927774425}'),\n ('SRID=4326;LINESTRING(30.4528543 59.6851747,30.4529071 59.6850026,30.4529249 59.685004,30.4529333 59.6849769,30.452917 59.6849756,30.4529721 59.6847963)', 'way', 871154683, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8114975041,8899249805,8899249804,8899249803,8899249802,8114975042}'),\n ('SRID=4326;LINESTRING(30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274,30.4526587 59.6847165)', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8114975046,8114975047,8906857474,8906857473,8114975046}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4531264 59.6851489)', 'way', 871154687, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,8114975076}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257)', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,8114975073,8114975074,8114975057,8114975058,8114975059,8114975075,8114975060,8114975061,8114975067,8114975068,8114975069,8114975077,8114975070,8114975062,8114975063,8114975064,8114975076,8114975065,8114975066,8114975071,8114975072,8114975078}'),\n ('SRID=4326;LINESTRING(30.4532501 59.6852048,30.4531713 59.6851525)', 'way', 871154689, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8899299159,8114975077}'),\n ('SRID=4326;LINESTRING(30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998)', 'way', 871154691, '{\"highway\": \"footway\"}', '{8114975097,8114975079,8114975080,8114975081,8114975082,8114975083,8114975099,8114975084,8114975085,8114975086,8114975087,8114975088,8114975089,8114975090,8114975091,8114975092,8114975100,8114975093,8114975094,8114975095,8114975096,8114975097}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4529574 59.6848702,30.4530873 59.6849398,30.4531787 59.684998)', 'way', 871154694, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1738381532,1665582238,8114975097}'),\n ('SRID=4326;LINESTRING(30.4532281 59.6850005,30.4533508 59.6849575,30.4535109 59.6849058,30.4535282 59.6848524)', 'way', 871154695, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975099,1665582239,1738381534,1665582236}'),\n ('SRID=4326;LINESTRING(30.4532459 59.6852254,30.4528051 59.6851927,30.4522785 59.6851511)', 'way', 871154698, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8114975105,8114975107,8114975109}'),\n ('SRID=4326;LINESTRING(30.4526095 59.6853751,30.4526201 59.6853832,30.4527025 59.6853899,30.4527175 59.6853841,30.4527302 59.6853414,30.4527195 59.685334,30.4526348 59.6853281,30.4526225 59.6853328,30.4526095 59.6853751)', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', '{8114975123,8114975124,8114975125,8895996607,8895996606,8114975126,8114975127,8114975181,8114975123}'),\n ('SRID=4326;LINESTRING(30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686)', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', '{8114975136,8114975137,8114975138,8114975139,8114975140,8114975141,8114975142,8114975143,8114975136}'),\n ('SRID=4326;LINESTRING(30.4525419 59.6853075,30.4525505 59.6853142,30.4526031 59.6853185,30.4526157 59.6853129,30.4526268 59.6852724,30.4526177 59.6852659,30.4525671 59.6852621,30.452555 59.6852672,30.4525419 59.6853075)', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', '{8114975144,8114975145,8114975146,8114975147,8114975148,8114975149,8114975150,8114975151,8114975144}'),\n ('SRID=4326;LINESTRING(30.4526478 59.6852554,30.4526557 59.6852612,30.452739 59.6852678,30.4527533 59.685262,30.452765 59.685222,30.4527443 59.68522,30.4527459 59.685216,30.452673 59.6852102,30.4526587 59.6852148,30.4526478 59.6852554)', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', '{8114975172,8114975173,8114975174,8114975175,8114975176,8114975177,8114975178,8114975179,8114975180,8114975172}'),\n ('SRID=4326;LINESTRING(30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', '{8129422266,8129422267,8129422268,8129422269,8129422270,8129422271,8129422272,8895996472,8129422273,8895996471,8129422266}'),\n ('SRID=4326;LINESTRING(30.4536402 59.684764,30.4536193 59.6847624,30.4536067 59.6847614)', 'way', 891865282, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{1635198216,1198356775,8289295975}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232)', 'way', 922841960, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824024,1653641402,8566824025,8566824026}'),\n ('SRID=4326;LINESTRING(30.453531 59.6847593,30.4531199 59.6847256)', 'way', 922854851, '{\"height\": \"8\", \"natural\": \"tree_row\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{5002059748,5002059751}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.452599 59.6846895)', 'way', 922854852, '{\"highway\": \"steps\"}', '{7927774427,3968068677}'),\n ('SRID=4326;LINESTRING(30.4536067 59.6847614,30.4535894 59.6847601)', 'way', 922854853, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{8289295975,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4526552 59.6847274,30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274)))', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398)))', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102)))', 'way', 871154691, '{\"highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526095 59.6853751,30.4526225 59.6853328,30.4526348 59.6853281,30.4527195 59.685334,30.4527302 59.6853414,30.4527175 59.6853841,30.4527025 59.6853899,30.4526201 59.6853832,30.4526095 59.6853751)))', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139)))', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525419 59.6853075,30.452555 59.6852672,30.4525671 59.6852621,30.4526177 59.6852659,30.4526268 59.6852724,30.4526157 59.6853129,30.4526031 59.6853185,30.4525505 59.6853142,30.4525419 59.6853075)))', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526478 59.6852554,30.4526587 59.6852148,30.452673 59.6852102,30.4527459 59.685216,30.4527443 59.68522,30.452765 59.685222,30.4527533 59.685262,30.452739 59.6852678,30.4526557 59.6852612,30.4526478 59.6852554)))', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)))', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;LINESTRING(30.4521596 59.6854203,30.4524943 59.6854502)', 'way', 961421780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8893386627,4912270255}'),\n ('SRID=4326;LINESTRING(30.4533818 59.6852214,30.4533763 59.68521)', 'way', 961717566, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053598,1439053596}'),\n ('SRID=4326;LINESTRING(30.4534979 59.6851951,30.4535038 59.6852069)', 'way', 961717567, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053589,1439053591}'),\n ('SRID=4326;LINESTRING(30.4533763 59.68521,30.4534979 59.6851951)', 'way', 961717568, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053596,1439053589}'),\n ('SRID=4326;LINESTRING(30.4527378 59.6852117,30.4526559 59.6852052,30.4525684 59.6851982,30.4524641 59.6851898,30.4522584 59.6851734)', 'way', 961717569, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975842,8895975876,8895975873,8895975858,3968068679}'),\n ('SRID=4326;LINESTRING(30.4530032 59.685292,30.453022 59.6852839,30.4530407 59.6852758,30.4530635 59.68527,30.4530877 59.685267,30.4531091 59.6852663,30.4531333 59.6852683,30.4531547 59.6852744,30.45322 59.6852491)', 'way', 961717570, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975875,8895975856,8895975855,8895975850,8895975854,8895975853,8895975852,8895975851,3968068669}'),\n ('SRID=4326;LINESTRING(30.4524419 59.6852441,30.452456 59.6851977,30.4524483 59.6851915,30.4523702 59.6851856,30.4523568 59.6851898,30.4523826 59.6852055,30.4524088 59.6852218,30.4524248 59.6852328,30.4524419 59.6852441)', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', '{8895975865,8895975864,8895975863,8895975862,8895975859,8895975861,8895975860,8895975838,8895975865}'),\n ('SRID=4326;LINESTRING(30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946)', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', '{8895975872,8895975871,8895975870,8895975869,8895975868,8895975867,8895975866,8895975872}'),\n ('SRID=4326;LINESTRING(30.4530263 59.6852336,30.4530032 59.685292,30.4529231 59.6852858,30.4527793 59.6852746,30.452638 59.6852636,30.4525513 59.6852568,30.4524466 59.6852487,30.4524641 59.6851898)', 'way', 961717573, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975857,8895975875,8895975843,8895975844,8895975848,8895975846,8895975874,8895975858}'),\n ('SRID=4326;LINESTRING(30.4529402 59.6852275,30.4529231 59.6852858,30.4529053 59.6853463,30.4528865 59.6854078)', 'way', 961717574, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975877,8895975843,8895975880,8895975878}'),\n ('SRID=4326;LINESTRING(30.4526559 59.6852052,30.452638 59.6852636,30.4526195 59.6853238,30.4526009 59.6853847,30.4527422 59.6853961,30.4528865 59.6854078)', 'way', 961717575, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975876,8895975848,8895975849,8895975879,8895975847,8895975878}'),\n ('SRID=4326;LINESTRING(30.4525684 59.6851982,30.4525513 59.6852568,30.4525338 59.685317,30.4526195 59.6853238,30.4527609 59.6853349,30.4529053 59.6853463)', 'way', 961717576, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975873,8895975846,8895975881,8895975849,8895975845,8895975880}'),\n ('SRID=4326;LINESTRING(30.4527487 59.6852082,30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082)', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', '{8895975885,8895975884,8895975883,8895975882,8895975885}'),\n ('SRID=4326;LINESTRING(30.4532064 59.6852443,30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443)', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', '{8895975889,8895975888,8895975887,8895975886,8895975889}'),\n ('SRID=4326;LINESTRING(30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696)', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', '{8895975901,8895975902,8895975900,8895975903,8895975891,8895975890,8895975901}'),\n ('SRID=4326;LINESTRING(30.4530554 59.6852658,30.4530414 59.6852392,30.453028 59.6852429,30.4530143 59.6852802,30.4530288 59.6852733,30.453041 59.6852693,30.4530554 59.6852658)', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', '{8895975898,8895975895,8895975896,8895975907,8895975897,8895975906,8895975898}'),\n ('SRID=4326;LINESTRING(30.4530632 59.6852641,30.4530782 59.6852621,30.4530921 59.6852616,30.4531031 59.6852618,30.4531172 59.6852446,30.4530501 59.6852392,30.4530632 59.6852641)', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', '{8895975905,8895975899,8895975904,8895975892,8895975893,8895975894,8895975905}'),\n ('SRID=4326;LINESTRING(30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204)', 'way', 961717582, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053627,8914843793,8895996425,8914843794,1439053619}'),\n ('SRID=4326;LINESTRING(30.4525812 59.6854845,30.4526564 59.6854895)', 'way', 961717593, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{8895996555,1439053669}'),\n ('SRID=4326;LINESTRING(30.4527747 59.6854387,30.4528506 59.685445,30.4528681 59.6854402,30.4528755 59.6854172,30.4528654 59.6854091,30.4527852 59.6854026,30.4527687 59.6854078,30.4527618 59.6854305,30.4527747 59.6854387)', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', '{8895996465,8895996464,8895996463,8895996462,8895996461,8895996460,8895996459,8895996458,8895996465}'),\n ('SRID=4326;LINESTRING(30.4525201 59.6853123,30.4525328 59.6853069,30.4525442 59.6852666,30.4525351 59.6852597,30.4524557 59.6852538,30.4524775 59.6852724,30.4524969 59.6852906,30.4525201 59.6853123)', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', '{8895996470,8895996469,8895996468,8895996467,8895996466,8895996428,8895996429,8895996470}'),\n ('SRID=4326;LINESTRING(30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969,30.4523418 59.6851889)', 'way', 961717596, '{\"landuse\": \"grass\"}', '{8895996495,8895975839,8895996483,8895996484,8895996485,8895996486,8895996487,8895996488,8895996489,8895996490,8895996491,8895996492,8895996493,8895996494,8895996496,8895996473,8895996479,8895996480,8895996474,8895996509,8895996508,8895996507,8895996506,8895996505,8895996504,8895996503,8895996502,8895996501,8895996500,8895996499,8895996498,8895996497,8895996478,8895996495}'),\n ('SRID=4326;LINESTRING(30.4523081 59.6852118,30.4522803 59.6851945,30.4522795 59.6852157,30.4523143 59.6852356,30.4523427 59.6852536,30.4523628 59.6852673,30.4523827 59.6852816,30.4524087 59.6853027,30.4524225 59.6853163,30.4524411 59.6853354,30.452454 59.6853507,30.452466 59.6853657,30.4524751 59.6853808,30.4524839 59.6853973,30.4524918 59.6854125,30.4524982 59.6854272,30.452501 59.6854325,30.4525097 59.6854362,30.4525224 59.6854348,30.4525257 59.6854303,30.4525231 59.6854242,30.4525171 59.6854097,30.4525091 59.6853943,30.4525002 59.6853776,30.4524909 59.685362,30.4524785 59.6853465,30.4524653 59.6853309,30.4524465 59.6853116,30.4524322 59.6852976,30.4524056 59.685276,30.4523853 59.6852614,30.4523649 59.6852475,30.4523362 59.6852293,30.4523081 59.6852118)', 'way', 961717597, '{\"landuse\": \"grass\"}', '{8895996522,8895996477,8895996536,8895996524,8895996525,8895996526,8895996527,8895996528,8895996529,8895996530,8895996531,8895996532,8895996533,8895996534,8895996535,8895996537,8895996482,8895996476,8895996481,8895996523,8895996475,8895996521,8895996520,8895996519,8895996518,8895996517,8895996516,8895996515,8895996514,8895996513,8895996512,8895996511,8895996510,8895996522}'),\n ('SRID=4326;LINESTRING(30.4526076 59.685425,30.4526842 59.6854313,30.4527032 59.6854269,30.4527112 59.6854034,30.4527003 59.6853955,30.4526196 59.6853891,30.4526042 59.6853942,30.4525975 59.6854176,30.4526076 59.685425)', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', '{8895996545,8895996544,8895996543,8895996542,8895996541,8895996540,8895996539,8895996538,8895996545}'),\n ('SRID=4326;LINESTRING(30.4528639 59.685494,30.4528702 59.6854731,30.4527911 59.6854671,30.4527849 59.685488,30.4528639 59.685494)', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996549,8895996548,8895996547,8895996546,8895996549}'),\n ('SRID=4326;LINESTRING(30.4526433 59.6854773,30.4526495 59.6854564,30.4525705 59.6854504,30.4525642 59.6854713,30.4526433 59.6854773)', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996553,8895996552,8895996551,8895996550,8895996553}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528709 59.6855164)', 'way', 961717601, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,8895996554}'),\n ('SRID=4326;LINESTRING(30.4529138 59.6853368,30.4529235 59.6853445,30.4529678 59.6853472,30.4529853 59.6853413,30.4529963 59.6853005,30.4529866 59.6852936,30.4529427 59.6852903,30.4529263 59.6852951,30.4529138 59.6853368)', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', '{8895996564,8895996563,8895996562,8895996561,8895996560,8895996559,8895996558,8895996557,8895996564}'),\n ('SRID=4326;LINESTRING(30.452933 59.6852753,30.4529441 59.6852838,30.4529886 59.6852873,30.453002 59.6852821,30.4530171 59.6852433,30.4530088 59.6852371,30.4529582 59.685233,30.4529444 59.6852374,30.452933 59.6852753)', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', '{8895996572,8895996571,8895996570,8895996569,8895996568,8895996567,8895996566,8895996565,8895996572}'),\n ('SRID=4326;LINESTRING(30.4525595 59.6852465,30.4525692 59.6852544,30.4526207 59.6852585,30.4526333 59.6852538,30.452645 59.6852146,30.4526353 59.6852076,30.4525847 59.6852036,30.4525709 59.685208,30.4525595 59.6852465)', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', '{8895996580,8895996579,8895996578,8895996577,8895996576,8895996575,8895996574,8895996573,8895996580}'),\n ('SRID=4326;LINESTRING(30.452817 59.6852667,30.4528288 59.6852748,30.4529066 59.6852809,30.45292 59.6852751,30.4529319 59.6852358,30.4529216 59.6852291,30.452851 59.685224,30.4528493 59.6852281,30.452831 59.6852267,30.452817 59.6852667)', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', '{8895996589,8895996588,8895996587,8895996586,8895996585,8895996584,8895996581,8895996583,8895996582,8895996589}'),\n ('SRID=4326;LINESTRING(30.4527946 59.6853272,30.4528053 59.6853349,30.4528878 59.6853416,30.4529031 59.6853359,30.4529154 59.6852941,30.4529042 59.6852874,30.4528247 59.6852816,30.4528087 59.6852864,30.4527946 59.6853272)', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', '{8895996597,8895996596,8895996595,8895996594,8895996593,8895996592,8895996591,8895996590,8895996597}'),\n ('SRID=4326;LINESTRING(30.4527745 59.6853889,30.4527865 59.6853969,30.4528677 59.6854032,30.4528839 59.6853982,30.4528953 59.6853552,30.4528845 59.6853477,30.4528052 59.6853419,30.4527899 59.6853454,30.4527745 59.6853889)', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', '{8895996605,8895996604,8895996603,8895996602,8895996601,8895996600,8895996599,8895996598,8895996605}'),\n ('SRID=4326;LINESTRING(30.452565 59.6854206,30.4525598 59.6854071,30.4525516 59.6853892,30.4525422 59.6853716,30.4525319 59.6853544,30.4525184 59.6853376,30.4525045 59.6853211,30.4524848 59.6853009,30.4524693 59.6852857,30.4524408 59.6852624,30.4524192 59.685247,30.4523979 59.6852324,30.4523685 59.6852137,30.4523402 59.6851962)', 'way', 961717608, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996623,8895996621,8895996620,8895996619,8895996618,8895996617,8895996616,8895996615,8895996614,8895996613,8895996612,8895996611,8895996610,8895996622}'),\n ('SRID=4326;LINESTRING(30.4525109 59.6854262,30.4525044 59.6854114,30.4524965 59.6853961,30.4524877 59.6853796,30.4524784 59.6853642,30.4524662 59.6853489,30.4524532 59.6853335,30.4524345 59.6853143,30.4524204 59.6853005,30.4523942 59.6852791,30.452374 59.6852647,30.4523538 59.6852509,30.4523252 59.6852327,30.4522972 59.6852153)', 'way', 961717609, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996637,8895996635,8895996634,8895996633,8895996632,8895996631,8895996630,8895996629,8895996628,8895996627,8895996626,8895996625,8895996624,8895996636}'),\n ('SRID=4326;LINESTRING(30.4523179 59.6852068,30.4522881 59.6851891,30.4522584 59.6851734,30.4522785 59.6851511,30.4525958 59.6847532,30.4529382 59.6847803,30.4535778 59.6848316)', 'way', 961717610, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975114,8895996608,3968068679,8114975109,8114975051,8114975050,8114975049}'),\n ('SRID=4326;LINESTRING(30.4527224 59.6854618,30.4527166 59.6854798)', 'way', 961717612, '{\"highway\": \"steps\", \"incline\": \"up\", \"surface\": \"paving_stones\"}', '{1664064412,8895996662}'),\n ('SRID=4326;LINESTRING(30.4534116 59.6851536,30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536)', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249763,8899249762,8899249761,8899249760,8899249759,8899249763}'),\n ('SRID=4326;LINESTRING(30.4535137 59.6851734,30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437)', 'way', 962062988, '{\"source:taxon\": \"board\"}', '{8899249777,8899249776,8899249775,8899249774}'),\n ('SRID=4326;LINESTRING(30.4534505 59.6851512,30.4535484 59.6848425)', 'way', 962062989, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8899249781,8899249780}'),\n ('SRID=4326;LINESTRING(30.4532761 59.6852013,30.4533137 59.6852128,30.453319 59.6851999,30.4533257 59.6851898,30.4533338 59.6851796,30.4533458 59.6851715,30.4533606 59.6851647,30.453378 59.6851586,30.4533941 59.6851559,30.4533211 59.6851024,30.4533083 59.6851038,30.4532761 59.6852013)', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249792,8899249791,8899249790,8899249789,8899249788,8899249787,8899249786,8899249785,8899249784,8899249783,8899249782,8899249792}'),\n ('SRID=4326;LINESTRING(30.4534315 59.6851615,30.4534654 59.685163)', 'way', 962062991, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975036,3968068687}'),\n ('SRID=4326;LINESTRING(30.45277 59.6851675,30.4528221 59.6849965,30.4528061 59.6849952,30.4528148 59.6849678,30.4528309 59.6849691,30.4528877 59.684789)', 'way', 962062992, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8899249807,8899249801,8899249800,8899249799,8899249798,8899249806}'),\n ('SRID=4326;LINESTRING(30.4530825 59.6850727,30.4530768 59.6850789,30.4531357 59.6851196,30.4531475 59.6851179,30.4531599 59.6851179,30.4531731 59.6851201,30.4531813 59.685123,30.4532721 59.6850914,30.45327 59.6850856,30.4530825 59.6850727)', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249816,8899249815,8899249814,8899249813,8899249812,8899249811,8899249810,8899249809,8899249808,8899249816}'),\n ('SRID=4326;LINESTRING(30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148)', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299126,8899299125,8899299124,8899299123,8899299122,8899299121,8899299120,8899299119,8899299118,8899299117,8899299126}'),\n ('SRID=4326;LINESTRING(30.4531566 59.6851458,30.4531627 59.6851441,30.4531665 59.6851411,30.4531672 59.6851376,30.4531645 59.6851343,30.4531591 59.685132,30.4531523 59.6851313,30.4531455 59.6851322,30.4531404 59.6851346,30.4531381 59.685138,30.4531391 59.6851415,30.4531433 59.6851444,30.4531496 59.6851459,30.4531566 59.6851458)', 'way', 962062995, '{\"landuse\": \"grass\"}', '{8899299139,8899299138,8899299137,8899299136,8899299135,8899299134,8899299133,8899299132,8899299131,8899299130,8899299129,8899299128,8899299140,8899299139}'),\n ('SRID=4326;LINESTRING(30.4531836 59.6851532,30.45325 59.6851972,30.4532587 59.6851977,30.4532923 59.6851023,30.4532804 59.6850981,30.4531914 59.68513,30.4531946 59.6851353,30.453195 59.6851401,30.4531936 59.6851444,30.45319 59.6851488,30.4531836 59.6851532)', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299150,8899299149,8899299141,8899299148,8899299142,8899299147,8899299146,8899299145,8899299144,8899299143,8899299150}'),\n ('SRID=4326;LINESTRING(30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299158,8899299157,8899299156,8899299155,8899299154,8899299153,8899299152,8899299151,8899249778,8899299158}'),\n ('SRID=4326;LINESTRING(30.4532162 59.6852145,30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145)', 'way', 962062998, '{\"landuse\": \"grass\"}', '{8899299165,8899299164,8899299163,8899299161,8899299160,8899299162,8899299165}'),\n ('SRID=4326;LINESTRING(30.4532627 59.6852077,30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077)', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', '{8902082028,8902082027,8902082026,8902082025,8902082024,8902082023,8902082022,8902082021,8902082020,8902027911,8902082019,8902082018,8902082017,8902027912,8902027916,8902027913,8902027915,8902027914,8902082028}'),\n ('SRID=4326;LINESTRING(30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082032,8902082031,8902082030,8902082029,8902082032}'),\n ('SRID=4326;LINESTRING(30.4529465 59.6849826,30.4530583 59.6849454,30.4530566 59.6849397,30.4529452 59.6849315,30.4529338 59.6849691,30.4529492 59.6849698,30.4529465 59.6849826)', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082038,8902082037,8902082036,8902082035,8902082034,8902082033,8902082038}'),\n ('SRID=4326;LINESTRING(30.4530344 59.685052,30.4530456 59.6850508,30.4530757 59.684955,30.4530662 59.6849507,30.4529465 59.6849918,30.4530344 59.685052)', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082047,8902082046,8902082045,8902082044,8902082043,8902082047}'),\n ('SRID=4326;LINESTRING(30.4529083 59.6850544,30.4530153 59.6850613,30.4530221 59.685056,30.4529398 59.6850009,30.4529378 59.6850121,30.4529184 59.6850114,30.4529083 59.6850544)', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082054,8902082053,8902082052,8902082051,8902082050,8902082049,8902082054}'),\n ('SRID=4326;LINESTRING(30.4528875 59.6851184,30.4530138 59.6850731,30.4530125 59.6850679,30.4529043 59.6850625,30.4528875 59.6851184)', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082059,8902082058,8902082057,8902082056,8902082059}'),\n ('SRID=4326;LINESTRING(30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789)', 'way', 962382766, '{\"landuse\": \"grass\"}', '{8902082065,8902082064,8902082063,8902082062,8902082065}'),\n ('SRID=4326;LINESTRING(30.4529896 59.6851748,30.4530072 59.6851719,30.4530311 59.6850841,30.4530206 59.6850798,30.4528885 59.6851275,30.4529896 59.6851748)', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082070,8902082069,8902082068,8902082067,8902082066,8902082070}'),\n ('SRID=4326;LINESTRING(30.4533332 59.6850719,30.4534612 59.68503,30.4533655 59.6849715,30.4533546 59.6849733,30.4533227 59.6850682,30.4533332 59.6850719)', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082080,8902082079,8902082078,8902082077,8902082076,8902082080}'),\n ('SRID=4326;LINESTRING(30.4533437 59.685083,30.4534444 59.6850899,30.4534619 59.6850382,30.4533411 59.685078,30.4533437 59.685083)', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082084,8902082083,8902082082,8902082081,8902082084}'),\n ('SRID=4326;LINESTRING(30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173)', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082090,8902082089,8902082088,8902082087,8902082086,8902082085,8902082090}'),\n ('SRID=4326;LINESTRING(30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113)', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082096,8902082095,8902082094,8902082093,8902082092,8902082091,8902082096}'),\n ('SRID=4326;LINESTRING(30.4532258 59.6849527,30.4532116 59.6849902,30.4532207 59.684992,30.4532298 59.6849953,30.4533219 59.6849634,30.4533191 59.6849588,30.4532258 59.6849527)', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082102,8902082101,8902082100,8902082099,8902082098,8902082097,8902082102}'),\n ('SRID=4326;LINESTRING(30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082108,8902082107,8902082106,8902082105,8902082104,8902082103,8902082108}'),\n ('SRID=4326;LINESTRING(30.4530763 59.6850024,30.4531619 59.6850065,30.4531647 59.6850018,30.4531695 59.6849976,30.4531032 59.6849548,30.453091 59.6849565,30.4530763 59.6850024)', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082109,8902082114,8902082113,8902082112,8902082111,8902082110,8902082109}'),\n ('SRID=4326;LINESTRING(30.4530716 59.6850547,30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547)', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082120,8902082119,8902082118,8902082117,8902082116,8902082115,8902082120}'),\n ('SRID=4326;LINESTRING(30.4531735 59.6850722,30.4531863 59.6850287,30.4531799 59.6850271,30.4531749 59.6850252,30.4530791 59.6850599,30.453083 59.685065,30.4531735 59.6850722)', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082126,8902082125,8902082124,8902082123,8902082122,8902082121,8902082126}'),\n ('SRID=4326;LINESTRING(30.4531903 59.6850727,30.4532727 59.6850781,30.4532816 59.6850715,30.4532223 59.6850274,30.453211 59.6850297,30.453201 59.6850303,30.4531903 59.6850727)', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082132,8902082131,8902082130,8902082129,8902082128,8902082127,8902082132}'),\n ('SRID=4326;LINESTRING(30.453206 59.6849937,30.4532201 59.6849487)', 'way', 962382778, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975081,8902082149}'),\n ('SRID=4326;LINESTRING(30.4532335 59.6850137,30.4533306 59.6850189)', 'way', 962382779, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975086,8902082150}'),\n ('SRID=4326;LINESTRING(30.4531682 59.6850102,30.4530675 59.6850048)', 'way', 962382780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975094,8902082151}'),\n ('SRID=4326;LINESTRING(30.4531253 59.6850083,30.4531256 59.6850158,30.4531288 59.6850232,30.4531349 59.6850302,30.4531434 59.6850364,30.4531543 59.6850416,30.4531669 59.6850457,30.4531809 59.6850485,30.4531957 59.6850498,30.4532107 59.6850496,30.4532253 59.685048,30.4532391 59.685045,30.4532514 59.6850406,30.4532618 59.6850352,30.4532699 59.6850288,30.4532753 59.6850217,30.4532779 59.6850143,30.4532776 59.6850067,30.4532744 59.6849993,30.4532684 59.6849924,30.4532598 59.6849862,30.453249 59.6849809,30.4532363 59.6849768,30.4532224 59.6849741,30.4532076 59.6849728,30.4531926 59.6849729,30.4531779 59.6849745,30.4531642 59.6849776,30.4531519 59.6849819,30.4531415 59.6849874,30.4531334 59.6849938,30.4531279 59.6850008,30.4531253 59.6850083)', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082167,8902082134,8902082166,8902082133,8902082165,8902082148,8902082164,8902082147,8902082163,8902082146,8902082162,8902082145,8902082161,8902082144,8902082160,8902082143,8902082159,8902082142,8902082158,8902082141,8902082157,8902082140,8902082156,8902082139,8902082155,8902082138,8902082154,8902082137,8902082153,8902082136,8902082152,8902082135,8902082167}'),\n ('SRID=4326;LINESTRING(30.4531956 59.6850267,30.4531801 59.6850762)', 'way', 962382782, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975091,8902082168}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4529124 59.6850066,30.4529307 59.6850078,30.4529356 59.6849912,30.4529412 59.6849735,30.4529245 59.6849722,30.4529389 59.6849276)', 'way', 962382783, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381535,8902082040,8902082170,8902082039,8902082169,1665582237}'),\n ('SRID=4326;LINESTRING(30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877)', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992660,8904992659,8904992658,8904992657,8904992656,8904992655,8904992654,8904992653,8904992652,8904992651,8904992650,8904992649,8904992648,8904992647,8904992646,8904992645,8904992644,8904992643,8904992642,8904992641,8904992640,8904992639,8904992660}'),\n ('SRID=4326;LINESTRING(30.4532432 59.6848971,30.4532493 59.6848954,30.4532531 59.6848924,30.4532538 59.6848889,30.4532511 59.6848856,30.4532457 59.6848833,30.4532389 59.6848826,30.4532321 59.6848835,30.453227 59.684886,30.4532247 59.6848893,30.4532257 59.6848928,30.4532299 59.6848957,30.4532362 59.6848972,30.4532432 59.6848971)', 'way', 962678726, '{\"landuse\": \"grass\"}', '{8904992673,8904992672,8904992671,8904992670,8904992669,8904992668,8904992667,8904992666,8904992665,8904992664,8904992663,8904992662,8904992661,8904992673}'),\n ('SRID=4326;LINESTRING(30.4530998 59.6849248,30.4531105 59.684928,30.4532056 59.6848974,30.4532029 59.6848932,30.4532023 59.6848877,30.4532043 59.6848829,30.4532098 59.6848776,30.4531384 59.6848341,30.4531253 59.6848349,30.4530998 59.6849248)', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992682,8904992681,8904992680,8904992679,8904992637,8904992678,8904992677,8904992676,8904992675,8904992682}'),\n ('SRID=4326;LINESTRING(30.4530724 59.6849262,30.4530868 59.6849239,30.4531127 59.6848333,30.4531034 59.6848301,30.4529683 59.6848711,30.4530724 59.6849262)', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992687,8904992686,8904992685,8904992684,8904992683,8904992687}'),\n ('SRID=4326;LINESTRING(30.4530589 59.6849341,30.4530633 59.6849302,30.452961 59.6848772,30.4529482 59.6849246,30.4530589 59.6849341)', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992691,8904992690,8904992689,8904992688,8904992691}'),\n ('SRID=4326;LINESTRING(30.4531212 59.684939,30.4533222 59.6849516,30.4533269 59.6849477,30.4532581 59.6849071,30.4532455 59.6849087,30.4532339 59.6849085,30.4532243 59.684907,30.4532133 59.6849034,30.4531185 59.6849335,30.4531212 59.684939)', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992699,8904992698,8904992697,8904992696,8904992692,8904992638,8904992695,8904992694,8904992693,8904992699}'),\n ('SRID=4326;LINESTRING(30.453536 59.6848401,30.4529797 59.6847958,30.452977 59.6848046,30.4535329 59.6848493,30.453536 59.6848401)', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', '{8905335420,8905335419,8905335418,8905335417,8905335420}'),\n ('SRID=4326;LINESTRING(30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335435,8905335434,8905335433,8905335432,8905335435}'),\n ('SRID=4326;LINESTRING(30.4533819 59.6849565,30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565)', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335439,8905335438,8905335437,8905335436,8905335439}'),\n ('SRID=4326;LINESTRING(30.4533623 59.6849431,30.4533739 59.6849464,30.4534994 59.6849065,30.4534038 59.6848537,30.4533921 59.6848545,30.4533623 59.6849431)', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335444,8905335443,8905335442,8905335441,8905335440,8905335444}'),\n ('SRID=4326;LINESTRING(30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335454,8905335453,8905335452,8905335451,8905335450,8905335449,8905335448,8905335447,8905335446,8905335454}'),\n ('SRID=4326;LINESTRING(30.4529663 59.6848632,30.4530962 59.6848253,30.4530928 59.6848201,30.4529831 59.6848107,30.4529663 59.6848632)', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335458,8905335457,8905335456,8905335455,8905335458}'),\n ('SRID=4326;LINESTRING(30.4532195 59.6848732,30.4532263 59.6848712,30.4532379 59.6848698,30.4532504 59.6848704,30.4532619 59.6848729,30.4532706 59.684876,30.4533642 59.6848467,30.4533614 59.6848416,30.453158 59.6848262,30.4531503 59.6848308,30.4532195 59.6848732)', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335467,8905335466,8905335465,8905335464,8905335463,8905335462,8905335461,8905335445,8905335460,8905335459,8905335467}'),\n ('SRID=4326;LINESTRING(30.4532684 59.6848807,30.4533888 59.6848413)', 'way', 962714221, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992654,1665582235}'),\n ('SRID=4326;LINESTRING(30.4531238 59.6848204,30.4532177 59.684877)', 'way', 962714222, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582234,8904992660}'),\n ('SRID=4326;LINESTRING(30.4527677 59.6846399,30.4528579 59.6846477)', 'way', 962735606, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8905543613,1198356896}'),\n ('SRID=4326;LINESTRING(30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399)', 'way', 962735608, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824026,1198356935,8566824027,8905543613}'),\n ('SRID=4326;LINESTRING(30.4534851 59.684767,30.4534913 59.6847521,30.4534976 59.6847368)', 'way', 962735609, '{\"highway\": \"steps\"}', '{8905543614,12023732271,7927774425}'),\n ('SRID=4326;LINESTRING(30.4529562 59.6847243,30.4529615 59.6847082,30.4529628 59.6847041)', 'way', 962735610, '{\"highway\": \"steps\"}', '{8905543615,12023732270,3968068678}'),\n ('SRID=4326;LINESTRING(30.4526304 59.6847065,30.4525958 59.6847532)', 'way', 962735611, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8905543616,8114975051}'),\n ('SRID=4326;LINESTRING(30.4528676 59.6847547,30.4526341 59.6847357,30.452631 59.6847454,30.4528645 59.6847644,30.4528676 59.6847547)', 'way', 962735612, '{\"landuse\": \"grass\"}', '{8905558220,8905558219,8905558218,8905558217,8905558220}'),\n ('SRID=4326;LINESTRING(30.4535589 59.6848104,30.4530176 59.6847681,30.4530149 59.6847769,30.4535559 59.6848195,30.4535589 59.6848104)', 'way', 962735613, '{\"landuse\": \"grass\"}', '{8905558224,8905558223,8905558222,8905558221,8905558224}'),\n ('SRID=4326;LINESTRING(30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573,30.4530182 59.6847465)', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8905558227,8905558226,8906857476,8906857475,8905558227}'),\n ('SRID=4326;LINESTRING(30.4523152 59.6851448,30.4526116 59.6847664)', 'way', 962869359, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.7\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857452,8906857451}'),\n ('SRID=4326;LINESTRING(30.4526277 59.6846803,30.4526365 59.6846782,30.4526406 59.6846738,30.4526381 59.684669,30.4526302 59.6846662,30.4526205 59.6846666,30.4526137 59.6846701,30.4526128 59.684675,30.4526184 59.684679,30.4526277 59.6846803)', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857461,8906857453,8906857460,8906857459,8906857458,8906857457,8906857456,8906857455,8906857454,8906857461}'),\n ('SRID=4326;LINESTRING(30.4535863 59.6847456,30.4535811 59.6847595)', 'way', 962869365, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8906857470,8289295976}'),\n ('SRID=4326;MULTIPOLYGON(((30.4513 59.6845239,30.4513105 59.6845148,30.4513253 59.6844972,30.4513336 59.6844848,30.4513473 59.6844699,30.4513568 59.6844555,30.4513653 59.6844381,30.4513738 59.6844262,30.4513936 59.6844093,30.4514013 59.6843976,30.4514225 59.6843888,30.4514444 59.6843812,30.4514614 59.6843629,30.4514704 59.6843445,30.4514736 59.6843262,30.4514828 59.6842988,30.4514912 59.6842865,30.4514975 59.6842799,30.4515117 59.6842705,30.4515428 59.6842625,30.4516031 59.6842549,30.4518408 59.6843394,30.4519523 59.6843794,30.4520216 59.6844035,30.4520874 59.6844268,30.4521402 59.684444,30.4521943 59.6844606,30.452244 59.6844736,30.4522939 59.6844865,30.4523452 59.6844991,30.4524113 59.6845149,30.4524654 59.6845284,30.4525244 59.6845406,30.4525539 59.6845467,30.452566 59.6845558,30.452571 59.6845656,30.4525675 59.6845745,30.4525615 59.68459,30.4525618 59.6845988,30.4525613 59.6846073,30.4525568 59.6846156,30.4525466 59.6846232,30.4525331 59.6846279,30.4525251 59.684634,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4521768 59.6852884,30.4521573 59.685297,30.4521207 59.6853099,30.4520859 59.6853167,30.4520483 59.6853214,30.4520121 59.6853235,30.4519679 59.6853228,30.4519209 59.685316,30.4518731 59.6853033,30.4518364 59.6852869,30.4518016 59.6852646,30.4517747 59.6852436,30.4517546 59.685224,30.4517399 59.685205,30.4517278 59.6851773,30.4517104 59.6851603,30.4516916 59.6851468,30.4516857 59.6851285,30.4516903 59.6851123,30.4517117 59.6851023,30.4517426 59.685094,30.4517784 59.6850892,30.4518103 59.6850908,30.4518403 59.6851005,30.4518731 59.6850949,30.4518771 59.6850809,30.4518692 59.685051,30.4518777 59.6850294,30.4519043 59.6850131,30.4519376 59.6850028,30.4519737 59.684999,30.4520079 59.6849997,30.4520477 59.685012,30.4520887 59.6850223,30.4521435 59.6850216,30.4521948 59.6850093,30.4522112 59.6849969,30.4522301 59.6849727,30.45222 59.6849586,30.4521979 59.6849496,30.4521524 59.6849328,30.452119 59.6849135,30.452105 59.6848849,30.4521099 59.684868,30.4520932 59.684849,30.4520658 59.6848372,30.4520255 59.6848223,30.4520099 59.6848104,30.4519866 59.6847939,30.4519651 59.6847718,30.4519517 59.6847501,30.4519518 59.6847258,30.4519545 59.6847041,30.4519786 59.6846635,30.4520121 59.6846479,30.452051 59.6846256,30.4520604 59.6846161,30.4520537 59.6846046,30.4520175 59.6845829,30.4519692 59.6845613,30.451933 59.684566,30.4519102 59.6845748,30.4518928 59.6845917,30.4518772 59.6846127,30.4518697 59.684638,30.4518561 59.6846587,30.4518347 59.6846794,30.4518136 59.6846859,30.451785 59.6846963,30.4517612 59.6847117,30.4517363 59.6847257,30.4517004 59.6847328,30.4516678 59.6847376,30.4516243 59.6847395,30.4515783 59.6847426,30.4515624 59.6847383,30.451536 59.6847319,30.4515265 59.6847207,30.4515128 59.6847092,30.4515012 59.6846991,30.4514963 59.6846932,30.4515039 59.6846846,30.4515091 59.6846707,30.4515006 59.6846638,30.4514837 59.6846584,30.4514488 59.6846536,30.4514298 59.6846424,30.4514235 59.6846339,30.451434 59.6846216,30.451452 59.6846104,30.4514721 59.684604,30.4514816 59.6845934,30.4514827 59.6845827,30.4514763 59.6845715,30.4514427 59.6845604,30.4514004 59.6845719,30.4513792 59.6845708,30.451356 59.684566,30.4513317 59.6845601,30.4513137 59.6845489,30.4513042 59.6845393,30.4513 59.6845239)))', 'relation', 12444790, '{\"natural\": \"wood\", \"leaf_type\": \"mixed\", \"leaf_cycle\": \"mixed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523568 59.6851898,30.4523702 59.6851856,30.4524483 59.6851915,30.452456 59.6851977,30.4524419 59.6852441,30.4524248 59.6852328,30.4524088 59.6852218,30.4523826 59.6852055,30.4523568 59.6851898)))', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459)))', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082,30.4523303 59.6851757)))', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443,30.4528543 59.6852169)))', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622)))', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6852802,30.453028 59.6852429,30.4530414 59.6852392,30.4530554 59.6852658,30.453041 59.6852693,30.4530288 59.6852733,30.4530143 59.6852802)))', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530501 59.6852392,30.4531172 59.6852446,30.4531031 59.6852618,30.4530921 59.6852616,30.4530782 59.6852621,30.4530632 59.6852641,30.4530501 59.6852392)))', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.4531138 59.6852988,30.4530897 59.6853096,30.4530682 59.6853211,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168)))', 'relation', 12935642, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530106 59.6853114,30.4530161 59.6853019,30.4530244 59.6852922,30.4530375 59.685285,30.4530534 59.685278,30.4530732 59.685274,30.4530931 59.6852723,30.4531124 59.685272,30.4531329 59.6852751,30.4531443 59.685278,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530111 59.6853217,30.4530106 59.6853114)))', 'relation', 12922491, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530012 59.685359,30.4529724 59.685378,30.4529542 59.6853912,30.4529312 59.685409,30.4529136 59.685403)))', 'relation', 12935641, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527618 59.6854305,30.4527687 59.6854078,30.4527852 59.6854026,30.4528654 59.6854091,30.4528755 59.6854172,30.4528681 59.6854402,30.4528506 59.685445,30.4527747 59.6854387,30.4527618 59.6854305)))', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524557 59.6852538,30.4525351 59.6852597,30.4525442 59.6852666,30.4525328 59.6853069,30.4525201 59.6853123,30.4524969 59.6852906,30.4524775 59.6852724,30.4524557 59.6852538)))', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523226 59.6851969,30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969)))', 'way', 961717596, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522795 59.6852157,30.4522803 59.6851945,30.4523081 59.6852118,30.4523362 59.6852293,30.4523649 59.6852475,30.4523853 59.6852614,30.4524056 59.685276,30.4524322 59.6852976,30.4524465 59.6853116,30.4524653 59.6853309,30.4524785 59.6853465,30.4524909 59.685362,30.4525002 59.6853776,30.4525091 59.6853943,30.4525171 59.6854097,30.4525231 59.6854242,30.4525257 59.6854303,30.4525224 59.6854348,30.4525097 59.6854362,30.452501 59.6854325,30.4524982 59.6854272,30.4524918 59.6854125,30.4524839 59.6853973,30.4524751 59.6853808,30.452466 59.6853657,30.452454 59.6853507,30.4524411 59.6853354,30.4524225 59.6853163,30.4524087 59.6853027,30.4523827 59.6852816,30.4523628 59.6852673,30.4523427 59.6852536,30.4523143 59.6852356,30.4522795 59.6852157)))', 'way', 961717597, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525975 59.6854176,30.4526042 59.6853942,30.4526196 59.6853891,30.4527003 59.6853955,30.4527112 59.6854034,30.4527032 59.6854269,30.4526842 59.6854313,30.4526076 59.685425,30.4525975 59.6854176)))', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527849 59.685488,30.4527911 59.6854671,30.4528702 59.6854731,30.4528639 59.685494,30.4527849 59.685488)))', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525642 59.6854713,30.4525705 59.6854504,30.4526495 59.6854564,30.4526433 59.6854773,30.4525642 59.6854713)))', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529138 59.6853368,30.4529263 59.6852951,30.4529427 59.6852903,30.4529866 59.6852936,30.4529963 59.6853005,30.4529853 59.6853413,30.4529678 59.6853472,30.4529235 59.6853445,30.4529138 59.6853368)))', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452933 59.6852753,30.4529444 59.6852374,30.4529582 59.685233,30.4530088 59.6852371,30.4530171 59.6852433,30.453002 59.6852821,30.4529886 59.6852873,30.4529441 59.6852838,30.452933 59.6852753)))', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525595 59.6852465,30.4525709 59.685208,30.4525847 59.6852036,30.4526353 59.6852076,30.452645 59.6852146,30.4526333 59.6852538,30.4526207 59.6852585,30.4525692 59.6852544,30.4525595 59.6852465)))', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452817 59.6852667,30.452831 59.6852267,30.4528493 59.6852281,30.452851 59.685224,30.4529216 59.6852291,30.4529319 59.6852358,30.45292 59.6852751,30.4529066 59.6852809,30.4528288 59.6852748,30.452817 59.6852667)))', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527946 59.6853272,30.4528087 59.6852864,30.4528247 59.6852816,30.4529042 59.6852874,30.4529154 59.6852941,30.4529031 59.6853359,30.4528878 59.6853416,30.4528053 59.6853349,30.4527946 59.6853272)))', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527745 59.6853889,30.4527899 59.6853454,30.4528052 59.6853419,30.4528845 59.6853477,30.4528953 59.6853552,30.4528839 59.6853982,30.4528677 59.6854032,30.4527865 59.6853969,30.4527745 59.6853889)))', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536,30.4533349 59.6850974)))', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437,30.4535137 59.6851734,30.4534909 59.6851715)))', 'relation', 12925809, '{\"crop\": \"grape\", \"genus\": \"Vitis\", \"taxon\": \"Vitis amurensis\", \"landuse\": \"vineyard\", \"genus:ru\": \"Виноград\", \"taxon:ru\": \"Виноград амурский\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532761 59.6852013,30.4533083 59.6851038,30.4533211 59.6851024,30.4533941 59.6851559,30.453378 59.6851586,30.4533606 59.6851647,30.4533458 59.6851715,30.4533338 59.6851796,30.4533257 59.6851898,30.453319 59.6851999,30.4533137 59.6852128,30.4532761 59.6852013)))', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530768 59.6850789,30.4530825 59.6850727,30.45327 59.6850856,30.4532721 59.6850914,30.4531813 59.685123,30.4531731 59.6851201,30.4531599 59.6851179,30.4531475 59.6851179,30.4531357 59.6851196,30.4530768 59.6850789)))', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728)))', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531381 59.685138,30.4531404 59.6851346,30.4531455 59.6851322,30.4531523 59.6851313,30.4531591 59.685132,30.4531645 59.6851343,30.4531672 59.6851376,30.4531665 59.6851411,30.4531627 59.6851441,30.4531566 59.6851458,30.4531496 59.6851459,30.4531433 59.6851444,30.4531391 59.6851415,30.4531381 59.685138)))', 'way', 962062995, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531836 59.6851532,30.45319 59.6851488,30.4531936 59.6851444,30.453195 59.6851401,30.4531946 59.6851353,30.4531914 59.68513,30.4532804 59.6850981,30.4532923 59.6851023,30.4532587 59.6851977,30.45325 59.6851972,30.4531836 59.6851532)))', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)))', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145,30.4528382 59.6851861)))', 'way', 962062998, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077,30.4528577 59.6851769)))', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)))', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529338 59.6849691,30.4529452 59.6849315,30.4530566 59.6849397,30.4530583 59.6849454,30.4529465 59.6849826,30.4529492 59.6849698,30.4529338 59.6849691)))', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529465 59.6849918,30.4530662 59.6849507,30.4530757 59.684955,30.4530456 59.6850508,30.4530344 59.685052,30.4529465 59.6849918)))', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529083 59.6850544,30.4529184 59.6850114,30.4529378 59.6850121,30.4529398 59.6850009,30.4530221 59.685056,30.4530153 59.6850613,30.4529083 59.6850544)))', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528875 59.6851184,30.4529043 59.6850625,30.4530125 59.6850679,30.4530138 59.6850731,30.4528875 59.6851184)))', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739)))', 'way', 962382766, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528885 59.6851275,30.4530206 59.6850798,30.4530311 59.6850841,30.4530072 59.6851719,30.4529896 59.6851748,30.4528885 59.6851275)))', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533227 59.6850682,30.4533546 59.6849733,30.4533655 59.6849715,30.4534612 59.68503,30.4533332 59.6850719,30.4533227 59.6850682)))', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533411 59.685078,30.4534619 59.6850382,30.4534444 59.6850899,30.4533437 59.685083,30.4533411 59.685078)))', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233)))', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005)))', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532116 59.6849902,30.4532258 59.6849527,30.4533191 59.6849588,30.4533219 59.6849634,30.4532298 59.6849953,30.4532207 59.684992,30.4532116 59.6849902)))', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)))', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530763 59.6850024,30.453091 59.6849565,30.4531032 59.6849548,30.4531695 59.6849976,30.4531647 59.6850018,30.4531619 59.6850065,30.4530763 59.6850024)))', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547,30.4530603 59.6850515)))', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530791 59.6850599,30.4531749 59.6850252,30.4531799 59.6850271,30.4531863 59.6850287,30.4531735 59.6850722,30.453083 59.685065,30.4530791 59.6850599)))', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531903 59.6850727,30.453201 59.6850303,30.453211 59.6850297,30.4532223 59.6850274,30.4532816 59.6850715,30.4532727 59.6850781,30.4531903 59.6850727)))', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531253 59.6850083,30.4531279 59.6850008,30.4531334 59.6849938,30.4531415 59.6849874,30.4531519 59.6849819,30.4531642 59.6849776,30.4531779 59.6849745,30.4531926 59.6849729,30.4532076 59.6849728,30.4532224 59.6849741,30.4532363 59.6849768,30.453249 59.6849809,30.4532598 59.6849862,30.4532684 59.6849924,30.4532744 59.6849993,30.4532776 59.6850067,30.4532779 59.6850143,30.4532753 59.6850217,30.4532699 59.6850288,30.4532618 59.6850352,30.4532514 59.6850406,30.4532391 59.685045,30.4532253 59.685048,30.4532107 59.6850496,30.4531957 59.6850498,30.4531809 59.6850485,30.4531669 59.6850457,30.4531543 59.6850416,30.4531434 59.6850364,30.4531349 59.6850302,30.4531288 59.6850232,30.4531256 59.6850158,30.4531253 59.6850083)))', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903)))', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532247 59.6848893,30.453227 59.684886,30.4532321 59.6848835,30.4532389 59.6848826,30.4532457 59.6848833,30.4532511 59.6848856,30.4532538 59.6848889,30.4532531 59.6848924,30.4532493 59.6848954,30.4532432 59.6848971,30.4532362 59.6848972,30.4532299 59.6848957,30.4532257 59.6848928,30.4532247 59.6848893)))', 'way', 962678726, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530998 59.6849248,30.4531253 59.6848349,30.4531384 59.6848341,30.4532098 59.6848776,30.4532043 59.6848829,30.4532023 59.6848877,30.4532029 59.6848932,30.4532056 59.6848974,30.4531105 59.684928,30.4530998 59.6849248)))', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529683 59.6848711,30.4531034 59.6848301,30.4531127 59.6848333,30.4530868 59.6849239,30.4530724 59.6849262,30.4529683 59.6848711)))', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529482 59.6849246,30.452961 59.6848772,30.4530633 59.6849302,30.4530589 59.6849341,30.4529482 59.6849246)))', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531185 59.6849335,30.4532133 59.6849034,30.4532243 59.684907,30.4532339 59.6849085,30.4532455 59.6849087,30.4532581 59.6849071,30.4533269 59.6849477,30.4533222 59.6849516,30.4531212 59.684939,30.4531185 59.6849335)))', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452977 59.6848046,30.4529797 59.6847958,30.453536 59.6848401,30.4535329 59.6848493,30.452977 59.6848046)))', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)))', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565,30.4533809 59.6849511)))', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533623 59.6849431,30.4533921 59.6848545,30.4534038 59.6848537,30.4534994 59.6849065,30.4533739 59.6849464,30.4533623 59.6849431)))', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)))', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529663 59.6848632,30.4529831 59.6848107,30.4530928 59.6848201,30.4530962 59.6848253,30.4529663 59.6848632)))', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531503 59.6848308,30.453158 59.6848262,30.4533614 59.6848416,30.4533642 59.6848467,30.4532706 59.684876,30.4532619 59.6848729,30.4532504 59.6848704,30.4532379 59.6848698,30.4532263 59.6848712,30.4532195 59.6848732,30.4531503 59.6848308)))', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452631 59.6847454,30.4526341 59.6847357,30.4528676 59.6847547,30.4528645 59.6847644,30.452631 59.6847454)))', 'way', 962735612, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530149 59.6847769,30.4530176 59.6847681,30.4535589 59.6848104,30.4535559 59.6848195,30.4530149 59.6847769)))', 'way', 962735613, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6847573,30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573)))', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523152 59.6851448,30.4526116 59.6847664,30.4528877 59.684789,30.4528309 59.6849691,30.4528148 59.6849678,30.4528061 59.6849952,30.4528221 59.6849965,30.45277 59.6851675,30.4527658 59.68518,30.4523152 59.6851448)))', 'relation', 12933782, '{\"ref\": \"5\", \"name\": \"Кенконс\", \"genus\": \"Tilia\", \"name:en\": \"The Quincunx\", \"natural\": \"wood\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526128 59.684675,30.4526137 59.6846701,30.4526205 59.6846666,30.4526302 59.6846662,30.4526381 59.684669,30.4526406 59.6846738,30.4526365 59.6846782,30.4526277 59.6846803,30.4526184 59.684679,30.4526128 59.684675)))', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526042 59.6846709,30.4526082 59.6846655,30.452617 59.6846635,30.4528469 59.6846817,30.452843 59.684694,30.4528376 59.6847122,30.4526498 59.6846973,30.4526123 59.6846817,30.4526042 59.6846709)))', 'relation', 12933783, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530629 59.6847308,30.4530706 59.6847131,30.4530752 59.684699,30.4535863 59.6847456,30.4535811 59.6847595,30.4535752 59.6847748,30.4530629 59.6847308)))', 'relation', 12933784, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4534977 59.6852035,30.4534967 59.6852111,30.453492 59.6852191,30.4534813 59.6852261,30.4534692 59.6852309,30.4534524 59.6852342,30.453435 59.6852355,30.4534193 59.6852337,30.4534045 59.6852307,30.4533914 59.6852248,30.4533831 59.6852182,30.4533763 59.68521,30.4533752 59.6852006)))', 'relation', 12935640, '{\"height\": \"5.5\", \"roof:shape\": \"pyramidal\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"0.5\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526773 59.6854805,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.4527511 59.6854859,30.4526773 59.6854805)))', 'relation', 12987950, '{\"height\": \"1\", \"roof:shape\": \"skillion\", \"roof:colour\": \"grey\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"roof:direction\": \"170\", \"building:colour\": \"#E4C78F\", \"roof:orientation\": \"along\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4526773 59.6854805,30.4527511 59.6854859,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528709 59.6855164,30.4527091 59.6855042,30.4525787 59.6854944)))', 'relation', 12935639, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4522474 59.6851858,30.4522167 59.6853009,30.4522119 59.6853269,30.4521905 59.6853763,30.4521596 59.6854203,30.4521293 59.6854701,30.4520946 59.6855262,30.4520624 59.6855804,30.4520524 59.6856064,30.452047 59.6856386,30.452047 59.6856666,30.4520551 59.685713,30.4520778 59.685798,30.4520997 59.6858613,30.4521127 59.6859046,30.4521047 59.6859432,30.4520825 59.6859825,30.4520478 59.686026,30.4520492 59.6860479,30.4520658 59.6860755,30.4520819 59.6860924,30.4521387 59.6861383,30.4521581 59.6861556,30.4521822 59.6861782,30.45222 59.6862149,30.4522535 59.6862461,30.4522676 59.6862668,30.4522828 59.6862897,30.4522911 59.6863104,30.4522992 59.6863312,30.4523018 59.6863618,30.4522989 59.6863961,30.4522911 59.6864255,30.452286 59.6864496,30.4522787 59.6864747,30.4522743 59.6864925,30.452274 59.6865148,30.4522776 59.6865312,30.4522888 59.6865538,30.4523045 59.686573,30.4523226 59.6865862,30.4523413 59.6865954,30.4523836 59.686613,30.4524214 59.6866244,30.4524614 59.686634,30.4524912 59.6866392,30.4525264 59.6866438,30.4525641 59.6866457,30.4526585 59.6866455,30.4527524 59.6866414,30.4528825 59.6866353,30.4530173 59.6866255,30.4531259 59.6866181,30.4531936 59.6866133,30.453271 59.6866114,30.4533083 59.686614,30.4534028 59.6866228,30.4535229 59.6866363,30.4536201 59.6866455,30.453691 59.6866508,30.4536976 59.6866508,30.4539823 59.6866673,30.4539778 59.6866919,30.4544217 59.6867427,30.4544227 59.6867377,30.4544646 59.686742,30.4544638 59.6867472,30.4545508 59.6867576,30.4545534 59.6867525,30.4545963 59.6867573,30.4546214 59.6867604,30.4546788 59.6867553,30.4548168 59.686752,30.4551163 59.6867835,30.4552388 59.6868093,30.4553945 59.6868602,30.455491 59.6869022,30.4555769 59.68694,30.4556466 59.6869672,30.4557807 59.6870023,30.4558987 59.6870186,30.4559816 59.68702,30.4560875 59.6870601,30.4561508 59.6871091,30.4561831 59.6871675,30.456183 59.687235,30.4561616 59.6872894,30.4561159 59.6873352,30.4560824 59.6873697,30.4560436 59.6874139,30.4560113 59.687453,30.4559765 59.6875127,30.4559804 59.6875356,30.4559953 59.6875601,30.4560395 59.6875816,30.4560838 59.6875938,30.4561467 59.6876019,30.4561991 59.6876021,30.4563573 59.6875979,30.4565289 59.6875961,30.4566782 59.6875933,30.4567611 59.687592,30.4568899 59.687586,30.4570005 59.6875828,30.4570995 59.6875755,30.4572099 59.6875697,30.4573214 59.6875781,30.4574243 59.6875895,30.4575564 59.6876086,30.4576489 59.6876236,30.4577906 59.6876357,30.4578929 59.687656,30.4579737 59.6876911,30.4580413 59.6877282,30.4581225 59.6877678,30.4581817 59.6878027,30.4582341 59.6878291,30.4583152 59.6878863,30.4583478 59.6879193,30.4583877 59.6879673,30.458411 59.6880122,30.4584387 59.6880452,30.4584657 59.6880811,30.4585427 59.6881373,30.4585748 59.6881735,30.4586375 59.6882236,30.4586938 59.6882576,30.4587833 59.6883125,30.45884 59.6883434,30.4588959 59.6883741,30.4589723 59.6884163,30.4590175 59.6884495,30.4590717 59.6884887,30.4591366 59.6885238,30.4591908 59.6885653,30.4592104 59.6886013,30.4592312 59.6886474,30.4592494 59.6886943,30.4592859 59.6887303,30.4593172 59.688773,30.4593556 59.6888131,30.459429 59.6888677,30.459467 59.6889042,30.4594979 59.688929,30.4595172 59.6889694,30.4595266 59.6890044,30.4595285 59.689042,30.4595248 59.6890919,30.4595255 59.6891719,30.4595317 59.6892178,30.4595442 59.6893129,30.4595387 59.689363,30.4595118 59.6894235,30.4594761 59.689469,30.4594014 59.6895068,30.4593069 59.6895588,30.4592476 59.6895966,30.4591945 59.6896312,30.4591511 59.6896562,30.4591092 59.6896944,30.4590843 59.6897378,30.4590826 59.689771,30.4590853 59.6898069,30.4591078 59.6898435,30.4592007 59.6898882,30.4592339 59.6899293,30.4592628 59.6899874,30.4592762 59.6900429,30.45928 59.6901025,30.4592809 59.6901575,30.4592798 59.6902243,30.4593042 59.6902777,30.4593662 59.6903178,30.4594544 59.6903409,30.4595249 59.6903674,30.4595807 59.6903944,30.4596268 59.6904316,30.4596583 59.6904756,30.4596087 59.690551,30.4596006 59.6905905,30.4595977 59.6906403,30.4595904 59.6906903,30.4595826 59.6907418,30.4595821 59.6908019,30.459583 59.6908375,30.459529 59.6908703,30.4594074 59.6909353,30.4592831 59.6909939,30.459213 59.6910431,30.4591817 59.691066,30.4591361 59.6911201,30.4591012 59.6911675,30.4591012 59.691223,30.4591406 59.6912486,30.4592295 59.6912875,30.4592895 59.6913173,30.4593728 59.6913444,30.4594455 59.6913593,30.459517 59.6913682,30.4596037 59.6913935,30.4596491 59.6914211,30.4596908 59.6914522,30.4597319 59.6914924,30.4597559 59.6915361,30.4597745 59.6915821,30.459787 59.6916313,30.4597852 59.6916643,30.4597718 59.6917238,30.4597396 59.6917861,30.4596859 59.6918429,30.4596685 59.6918693,30.4596383 59.6919054,30.4596009 59.6919405,30.4595315 59.6919991,30.4594652 59.6920502,30.4594082 59.6920946,30.4593773 59.6921151,30.4593545 59.6921348,30.4593366 59.6921529,30.4593399 59.6921734,30.4593659 59.6921939,30.4596045 59.6923272,30.4596496 59.6923362,30.4596901 59.6923377,30.4597398 59.6923315,30.4597933 59.6923156,30.4598526 59.6922792,30.4599141 59.692234,30.4600168 59.6921771,30.4600862 59.6921317,30.4601606 59.6921103,30.4602526 59.6920827,30.460323 59.6920633,30.4603814 59.6920333,30.4604812 59.6919715,30.4605362 59.6919506,30.4606073 59.6919499,30.4606743 59.6919675,30.4607467 59.6920081,30.4608017 59.6920284,30.4608728 59.6920473,30.4609935 59.6920595,30.4610726 59.692067,30.4611517 59.6920866,30.4612403 59.6921299,30.4612939 59.6921759,30.4613569 59.6922104,30.4614227 59.6922341,30.4614964 59.6922659,30.4615568 59.6923059,30.4616211 59.6923729,30.4616748 59.6924466,30.4617579 59.6925197,30.4618368 59.6925614,30.461948 59.6926074,30.4620442 59.6926525,30.4621643 59.6927115,30.4622732 59.6927583,30.4623906 59.6927971,30.4625398 59.6928238,30.4626554 59.6928355,30.4627278 59.6928346,30.4627807 59.6928331,30.4629009 59.6928193,30.4629797 59.6928093,30.4630314 59.6928086,30.4630815 59.6928162,30.4631241 59.6928309,30.4631433 59.692849,30.4631354 59.6928782,30.4630918 59.6929178,30.4629933 59.692982,30.4628509 59.6930395,30.4627989 59.693076,30.4627775 59.6931068,30.4627715 59.6931374,30.4627782 59.6931678,30.4628 59.6931938,30.462816 59.6932161,30.4628201 59.6932352,30.4628276 59.6932642,30.4628055 59.6932947,30.462749 59.6933555,30.4627356 59.6934076,30.4627544 59.6934638,30.4627866 59.6935491,30.4628348 59.6936025,30.4628814 59.6936516,30.4629464 59.6936976,30.4630181 59.6937555,30.4631033 59.6938351,30.463194 59.693908,30.4632997 59.6939707,30.4633997 59.6940315,30.4634563 59.6940722,30.4634978 59.6941112,30.4635448 59.6941433,30.4635995 59.6941633,30.4636618 59.6941785,30.4637065 59.6941778,30.4637604 59.694169,30.4638165 59.6941725,30.4638941 59.6941882,30.463945 59.6941973,30.4639826 59.6942136,30.4640155 59.6942304,30.4640341 59.6942422,30.4640539 59.694259,30.4640781 59.6942943,30.4641097 59.6943536,30.4641054 59.6943849,30.4640955 59.6944214,30.4640677 59.6944543,30.4640278 59.694509,30.4639684 59.6945921,30.4639761 59.694632,30.4640196 59.6946691,30.4640928 59.6947215,30.4641504 59.6947644,30.4642414 59.694848,30.4643013 59.6949614,30.4643265 59.6950347,30.4643629 59.6950927,30.464383 59.6951471,30.4644155 59.6951914,30.4644503 59.6952616,30.464467 59.6953187,30.4644779 59.6953885,30.4644493 59.6954307,30.4644137 59.6954645,30.4643477 59.6955048,30.4642827 59.6955528,30.4641331 59.6956106,30.4640324 59.6956546,30.4639589 59.6956973,30.4639054 59.6957548,30.4638826 59.6958068,30.4638917 59.6958626,30.4638959 59.695908,30.4638913 59.6959452,30.4638761 59.6959807,30.4638581 59.6960266,30.4638387 59.6960774,30.4638353 59.6961315,30.4638514 59.6962235,30.4639031 59.6963079,30.4639806 59.6963837,30.4640641 59.696435,30.4641563 59.6964993,30.4642492 59.6965314,30.464353 59.6965624,30.4645112 59.6966079,30.4646909 59.6966431,30.4648519 59.6966796,30.4649082 59.6966992,30.4649645 59.6967256,30.4650316 59.6967635,30.465104 59.6968014,30.4651737 59.6968352,30.4652724 59.696889,30.4653398 59.6969338,30.4653714 59.6969637,30.4653977 59.6970024,30.4654124 59.6970396,30.4654285 59.6970924,30.4654299 59.6971357,30.4654285 59.6971912,30.4654178 59.6972534,30.4654178 59.6973103,30.4654268 59.6973472,30.465443 59.6973849,30.4654739 59.6974306,30.465535 59.6974889,30.4655776 59.6975263,30.4655998 59.6975497,30.4656249 59.6975948,30.4656281 59.6976305,30.4656291 59.6976586,30.465636 59.697698,30.4656478 59.6977439,30.4656559 59.6977839,30.4656639 59.6978247,30.4656741 59.697865,30.4656808 59.6978977,30.4656931 59.6979479,30.4657242 59.6979888,30.4657651 59.6980369,30.4658049 59.6980618,30.4658569 59.6980859,30.4659085 59.6981101,30.4659691 59.6981356,30.4659934 59.6981619,30.4660187 59.6982125,30.4660434 59.6982506,30.4660765 59.6982913,30.46612 59.6983229,30.46618 59.6983645,30.4662324 59.6983954,30.466279 59.6984245,30.4663222 59.6984585,30.4663422 59.6984839,30.4663508 59.6985161,30.466347 59.6985389,30.4663297 59.6985658,30.4662984 59.6986043,30.4662667 59.6986353,30.4662287 59.6986639,30.4662098 59.6986996,30.4662023 59.698738,30.4662177 59.6987814,30.4662476 59.6988217,30.4662941 59.6988595,30.4663218 59.6988897,30.4663703 59.6989336,30.4664066 59.698983,30.4664342 59.6990318,30.46626 59.699006,30.4662245 59.6990009,30.4661986 59.6989985,30.465736 59.6989731,30.465674 59.6989864,30.4656438 59.6989955,30.4656194 59.6990058,30.4655995 59.6990178,30.4655881 59.6990296,30.4655669 59.6990522,30.4655425 59.6990838,30.4655077 59.6991223,30.4654429 59.6991855,30.4653481 59.6992218,30.4652461 59.6992516,30.4651852 59.6992621,30.4651339 59.6992648,30.4650235 59.6992651,30.4649339 59.6992741,30.4648662 59.6992863,30.4647744 59.6993078,30.4647108 59.6993347,30.4646409 59.6993755,30.4645943 59.6994397,30.4645313 59.6994729,30.464447 59.6994976,30.4643342 59.6995189,30.4641272 59.6995513,30.4601 59.6956121,30.4590933 59.6945995,30.4585195 59.6940453,30.4565283 59.6920253,30.4559963 59.6915691,30.455779 59.6913562,30.4555191 59.6911016,30.4536132 59.6892318,30.4533114 59.6893232,30.4532486 59.6892981,30.453085 59.689221,30.4529871 59.689177,30.4528879 59.6891357,30.4528128 59.6891072,30.4524488 59.6889751,30.4524008 59.688958,30.4523038 59.6889045,30.4522723 59.6888961,30.4522552 59.6888858,30.4522361 59.6888724,30.452216 59.68885,30.4521838 59.6888324,30.4521207 59.6887986,30.4520511 59.6887644,30.4518909 59.6886967,30.4517882 59.6886551,30.4516822 59.6886098,30.4515358 59.6885556,30.4514019 59.6885123,30.4513037 59.6884778,30.4512571 59.6884636,30.4512056 59.6884428,30.4511404 59.6884196,30.4510778 59.6883871,30.4510264 59.6883553,30.4509783 59.6883239,30.4508749 59.6882578,30.4508266 59.688226,30.4507678 59.6881981,30.4505943 59.6881208,30.4501869 59.6879433,30.4499736 59.6878632,30.4499334 59.6878503,30.4498881 59.687841,30.4497871 59.6878092,30.4494924 59.6876814,30.4490926 59.6875099,30.4490362 59.6874936,30.4489854 59.6874759,30.4489383 59.6874638,30.448876 59.687449,30.4487626 59.6874338,30.4486346 59.6874221,30.4485214 59.6874142,30.4483648 59.6874032,30.4474691 59.687337,30.4468361 59.6872873,30.4467403 59.6872722,30.446684 59.6872669,30.4463496 59.6872017,30.4463085 59.6871943,30.4462561 59.6871833,30.4462179 59.6871721,30.446187 59.6871613,30.4461557 59.68715,30.4461253 59.6871366,30.4461066 59.6871274,30.4460918 59.6871135,30.4460273 59.6870454,30.4459552 59.6870078,30.4459436 59.6870073,30.4459073 59.6869902,30.4458766 59.6869748,30.445846 59.6869616,30.4458216 59.6869518,30.4457961 59.6869433,30.4457578 59.6869309,30.4457123 59.6869183,30.4456647 59.6869057,30.4455949 59.6868892,30.4455514 59.68688,30.4455232 59.6868726,30.4455129 59.6868665,30.4453868 59.6868434,30.44531 59.6868381,30.4452457 59.6868322,30.44506 59.686812,30.4450028 59.6868076,30.4449557 59.6868041,30.4449237 59.6868029,30.4448943 59.6868019,30.4448734 59.6868039,30.4448512 59.6868054,30.4448212 59.6868026,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017)))', 'relation', 4187886, '{\"ref\": \"II\", \"name\": \"Долина реки Славянки\", \"place\": \"quarter\", \"name:az\": \"Slavyanka çayının vadisi\", \"name:fr\": \"Vallée de la rivière Slavianka\", \"name:hy\": \"Սլավյանկա գետի հովիտ\", \"name:uk\": \"Долина річки Слов''янки\", \"name:zh\": \"谷斯拉维亚卡河\", \"boundary\": \"protected_area\", \"int_name\": \"Vallée de la rivière Slavianka\", \"wikidata\": \"Q121809341\", \"wikipedia\": \"ru:Павловский парк#Долина реки Славянки\", \"description\": \"Район Павловского парка\"}', NULL),\n ('SRID=4326;LINESTRING(30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392)', 'way', 1297781094, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{8289295976,12023732271,12023732270,12023732269,8114975027,12023699867,12023732331,12023732330,12023732337,12023732336}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528788 59.6854915)', 'way', 1093902027, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,1439053668}'),\n ('SRID=4326;LINESTRING(30.4535894 59.6847601,30.4535811 59.6847595)', 'way', 1297781085, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{12023732332,8289295976}'),\n ('SRID=4326;LINESTRING(30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601)', 'way', 1297781086, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{12023732335,12023732334,12023732333,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4519927 59.6856654,30.451993 59.6856352,30.4519974 59.6856085,30.4520057 59.6855861,30.452033 59.685533,30.4520717 59.6854725,30.4521073 59.6854196,30.4521538 59.6853554,30.4521646 59.6853419,30.4521729 59.6853289,30.4521751 59.685321,30.4521778 59.6853033,30.4521768 59.6852884,30.4522278 59.6851794,30.4522474 59.6851858,30.4522695 59.6851929,30.4522692 59.6852184,30.452307 59.6852409,30.4523333 59.6852571,30.4523534 59.6852701,30.4523836 59.685295,30.4524088 59.6853175,30.4524395 59.6853504,30.4524616 59.6853789,30.4524735 59.685401,30.4524845 59.6854195,30.4524943 59.6854502,30.452497 59.6854882,30.452346 59.6854768,30.4523217 59.6855588,30.4522802 59.6855556,30.4522258 59.6855515,30.4522191 59.6855742,30.4522002 59.685638,30.4521808 59.6857036,30.4521745 59.6857248,30.4522289 59.6857289,30.4522705 59.6857319,30.4522477 59.6858088,30.4522804 59.6858113,30.4525803 59.6858339,30.4526091 59.6858361,30.4526832 59.6858416,30.4528205 59.685852,30.4528174 59.6858982,30.4527279 59.6859036,30.4527314 59.6859191,30.4527383 59.6859422,30.4527472 59.6859643,30.4527643 59.6859927,30.4527791 59.6860133,30.4527956 59.6860336,30.4528174 59.6860572,30.4528406 59.6860793,30.4528659 59.6861008,30.4528879 59.6861175,30.4529175 59.6861373,30.4529497 59.6861561,30.4529804 59.6861727,30.4530167 59.6861897,30.4530418 59.6861992,30.4530963 59.6861616,30.4531534 59.686184,30.4531278 59.6862023,30.453137 59.6862056,30.4531608 59.6862141,30.4531704 59.6862175,30.453196 59.6861992,30.4531795 59.686249,30.4531642 59.6862975,30.453138 59.686381,30.4531363 59.6863866,30.4532826 59.6863983,30.4532725 59.6864305,30.4532916 59.686432,30.4532869 59.6864462,30.4532998 59.6864473,30.4533248 59.6864494,30.4533485 59.6864515,30.4533611 59.6864525,30.4533659 59.6864383,30.4534768 59.6864467,30.453575 59.6864544,30.4535812 59.6864636,30.4536188 59.68646,30.4536556 59.6864553,30.4536952 59.6864492,30.4537376 59.6864434,30.4537814 59.6864354,30.4538212 59.6864281,30.453863 59.6864194,30.4538817 59.6864353,30.4539287 59.6864214,30.4539454 59.6864356,30.4539576 59.686432,30.4540057 59.6864176,30.4540172 59.6864141,30.4540005 59.6863999,30.4540399 59.6863883,30.4540219 59.6863729,30.4540549 59.6863624,30.4540887 59.6863495,30.4541297 59.6863344,30.4541407 59.6863296,30.4541607 59.6863411,30.4541696 59.6863371,30.4542 59.6863235,30.4542091 59.6863195,30.4541887 59.6863078,30.4541965 59.6863041,30.4542363 59.6862844,30.4542705 59.6862654,30.4542999 59.6862773,30.4544137 59.6862059,30.4543849 59.6861942,30.4544059 59.686181,30.4544395 59.686154,30.4544728 59.6861239,30.4544964 59.6860973,30.4545494 59.6861117,30.4546053 59.6861282,30.4545922 59.6861427,30.4545784 59.6861572,30.4545449 59.6861862,30.4545138 59.6862131,30.4544576 59.6862495,30.4543906 59.6862854,30.4543294 59.6863147,30.4542746 59.6863415,30.454221 59.6863683,30.454115 59.6864133,30.454039 59.6864407,30.4539464 59.6864693,30.4539252 59.6864763,30.4538233 59.6865047,30.4536724 59.6865094,30.4536724 59.6865223,30.4536503 59.6865223,30.4535973 59.686521,30.4535465 59.6865208,30.4535021 59.6865209,30.4534712 59.6865222,30.4534473 59.6865255,30.453429 59.6865331,30.4534215 59.6865438,30.4534132 59.686574,30.4534136 59.6865866,30.453423 59.6865971,30.4534445 59.6866075,30.4534686 59.686613,30.4534579 59.6866461,30.4534073 59.6866421,30.4533332 59.6866345,30.4532837 59.6866305,30.453254 59.6866292,30.4532071 59.6866305,30.4531615 59.686632,30.4531191 59.6866347,30.4531041 59.6865988,30.4531448 59.6865925,30.4531695 59.6865869,30.4531966 59.6865772,30.4532138 59.6865676,30.4532231 59.6865589,30.453199 59.6865568,30.4531811 59.6865532,30.4531596 59.6865468,30.4531373 59.6865396,30.4531219 59.6865326,30.4530964 59.6865196,30.4530733 59.6865042,30.4530555 59.6864887,30.4530367 59.6864681,30.4530227 59.6864499,30.4530105 59.6864274,30.4530012 59.6864103,30.4529945 59.6863933,30.4529919 59.6863759,30.4529905 59.686347,30.4529907 59.6863231,30.4529911 59.6862911,30.4529891 59.686281,30.4529827 59.6862715,30.4529634 59.6862545,30.4529402 59.6862373,30.4529067 59.6862141,30.4528563 59.6861801,30.4528201 59.6861533,30.4527906 59.6861317,30.4527578 59.6861047,30.452731 59.6860823,30.4527092 59.6860609,30.4526947 59.6860457,30.4526816 59.6860278,30.4526652 59.6860011,30.4526541 59.6859782,30.4526337 59.6859283,30.4526256 59.6859159,30.4526103 59.685908,30.4525905 59.6859034,30.4525603 59.6859009,30.452391 59.6858965,30.4523675 59.6858999,30.4523504 59.685904,30.4523333 59.6859114,30.452312 59.685923,30.4522313 59.6859637,30.4521811 59.6859882,30.452085 59.686032,30.4520765 59.6860386,30.4520753 59.6860476,30.4520797 59.6860577,30.4520264 59.6860652,30.4520201 59.6860504,30.4520162 59.6860346,30.4520143 59.6860207,30.4520168 59.6860051,30.4520203 59.685989,30.4520274 59.6859769,30.4520341 59.6859612,30.4520405 59.6859506,30.452047 59.6859415,30.4520537 59.6859259,30.4520544 59.6859134,30.4520523 59.6858956,30.4520465 59.6858708,30.4520254 59.6858069,30.4519995 59.68571,30.4519927 59.6856654),(30.4521704 59.6857398,30.4521704 59.6857513,30.4521744 59.6857635,30.4521811 59.6857763,30.4521945 59.6857899,30.4522187 59.6858021,30.4522414 59.6858088,30.4522629 59.685735,30.4521731 59.6857289,30.4521704 59.6857398),(30.452226 59.6855475,30.4523159 59.6855543,30.4523387 59.6854798,30.4523212 59.6854826,30.4523011 59.6854866,30.452277 59.6854941,30.4522596 59.6855015,30.4522448 59.6855117,30.4522354 59.6855225,30.4522301 59.6855347,30.452226 59.6855475),(30.4522508 59.6858359,30.4525647 59.6858582,30.4525714 59.6858373,30.4522575 59.6858142,30.4522508 59.6858359),(30.4523249 59.685462,30.4523727 59.6854667,30.4523804 59.6854465,30.4523327 59.6854418,30.4523249 59.685462)))', 'relation', 6636677, '{\"surface\": \"fine_gravel\", \"area:highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533763 59.68521,30.4534979 59.6851951,30.4535038 59.6852069,30.4534995 59.6852209,30.4533878 59.6852355,30.4533818 59.6852214,30.4533763 59.68521)))', 'relation', 12947389, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523253 59.6851768,30.4523286 59.6851637,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4525881 59.6854311,30.452574 59.6853959,30.4525486 59.6853522,30.4525291 59.6853286,30.4525137 59.6853106,30.452501 59.6852981,30.4524755 59.6852751,30.452455 59.6852592,30.4524366 59.6852453,30.4524178 59.6852321,30.4523994 59.6852201,30.4523706 59.6852014,30.452339 59.6851839,30.4523253 59.6851768)))', 'relation', 5906400, '{\"ref\": \"2\", \"name\": \"Цветочный партер\", \"leisure\": \"garden\", \"name:en\": \"The Flower Parterre\", \"ref:okn\": \"781620399040956\", \"alt_name\": \"Цветники Марии Фёдоровны\", \"wikidata\": \"Q118122045\", \"garden:type\": \"flowerbed\", \"garden:style\": \"french\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.4533268 59.6853074,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532343 59.6853363,30.453156 59.6852825)))', 'relation', 17755883, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4531158 59.6853933,30.4531719 59.6854212,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530216 59.6854636,30.4529242 59.6854401,30.4529045 59.6854337)))', 'relation', 17755885, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4532343 59.6853363,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.453238 59.6853862,30.453207 59.6854026,30.4531719 59.6854212,30.4531158 59.6853933,30.4530217 59.6853466)))', 'relation', 17755884, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527677 59.6846399,30.4527719 59.6846286,30.4527799 59.6846212,30.4527933 59.6846157,30.4528134 59.6846137,30.4528403 59.6846144,30.4528537 59.6846178,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399)))', 'relation', 12932608, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 1721132, '{\"ref\": \"3\", \"name\": \"Павильон Трёх граций\", \"note\": \"Геометрические теги крыши павильона размещены отдельно\", \"name:es\": \"Pabellón de las tres gracias\", \"name:fr\": \"Pavillon des Trois Grâces\", \"name:pt\": \"Pavilhão das Três Graças\", \"name:zh\": \"三美人亭\", \"ref:okn\": \"781610399040356\", \"tourism\": \"attraction\", \"building\": \"yes\", \"heritage\": \"2\", \"historic\": \"yes\", \"wikidata\": \"Q112716431\", \"addr:city\": \"Павловск\", \"architect\": \"Чарльз Камерон\", \"start_date\": \"1800\", \"addr:street\": \"Садовая улица\", \"architect:en\": \"Charles Cameron\", \"addr:housenumber\": \"20 литЧ\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6514/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12202573, '{\"height\": \"7\", \"min_height\": \"5.5\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12497925, '{\"height\": \"1.5\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525466 59.6846232,30.4525568 59.6846156,30.4525613 59.6846073,30.4525618 59.6845988,30.4525615 59.68459,30.4525675 59.6845745,30.452571 59.6845656,30.452566 59.6845558,30.4525539 59.6845467,30.4526659 59.6845694,30.4527826 59.6845897,30.4528946 59.6846069,30.4530012 59.6846212,30.4535732 59.6846878,30.4535916 59.6846905,30.453606 59.6846946,30.4536164 59.684701,30.4536208 59.6847085,30.4536214 59.684718,30.4536181 59.6847274,30.4536067 59.6847614,30.4535894 59.6847601,30.4535811 59.6847595,30.4535863 59.6847456,30.4535923 59.6847296,30.4535925 59.6847224,30.4535886 59.6847164,30.4535807 59.6847121,30.4535698 59.6847103,30.4535555 59.6847085,30.4530859 59.6846667,30.4530887 59.6846582,30.4530942 59.6846416,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399,30.4525841 59.6846239,30.4525626 59.6846222,30.4525466 59.6846232)))', 'relation', 12131779, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452047 59.6856386,30.4520524 59.6856064,30.4520624 59.6855804,30.4520946 59.6855262,30.4521293 59.6854701,30.4521596 59.6854203,30.4521905 59.6853763,30.4522119 59.6853269,30.4522167 59.6853009,30.4522474 59.6851858,30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4601554 59.6854805,30.4601767 59.6856005,30.4601793 59.6857568,30.4601468 59.6858374,30.4600081 59.6860973,30.459853 59.68614,30.459704 59.6863415,30.4596832 59.6864086,30.4596712 59.686482,30.4596638 59.6865545,30.459666 59.6866369,30.4596929 59.6867933,30.4597047 59.6868418,30.4597409 59.6869365,30.4598403 59.6871335,30.4599111 59.6872432,30.4599552 59.6873116,30.4600453 59.6874469,30.460134 59.687572,30.4600858 59.6875668,30.4600427 59.6875593,30.4599863 59.6875559,30.4598958 59.6875545,30.4597744 59.6875619,30.4597289 59.6875627,30.4596698 59.687583,30.4596323 59.6876026,30.4595974 59.6876371,30.4595625 59.6876658,30.4595236 59.6876852,30.459478 59.6876967,30.459407 59.6877062,30.4593453 59.6877028,30.4592849 59.6876838,30.4592367 59.6876553,30.4591509 59.6875883,30.4590905 59.6875599,30.4590355 59.6875424,30.4589524 59.6875261,30.4588343 59.6875105,30.4586868 59.6875038,30.4585474 59.6875038,30.4584333 59.6875086,30.4583274 59.6875126,30.4582348 59.6875193,30.4581437 59.6875301,30.4580095 59.6875505,30.4579371 59.6875654,30.4579009 59.6875782,30.4578312 59.6876019,30.4577386 59.6876249,30.4576489 59.6876236,30.4575564 59.6876086,30.4574243 59.6875895,30.4573214 59.6875781,30.4572099 59.6875697,30.4570995 59.6875755,30.4570005 59.6875828,30.4568899 59.687586,30.4567611 59.687592,30.4566782 59.6875933,30.4565289 59.6875961,30.4563573 59.6875979,30.4561991 59.6876021,30.4561467 59.6876019,30.4560838 59.6875938,30.4560395 59.6875816,30.4559953 59.6875601,30.4559804 59.6875356,30.4559765 59.6875127,30.4560113 59.687453,30.4560436 59.6874139,30.4560824 59.6873697,30.4561159 59.6873352,30.4561616 59.6872894,30.456183 59.687235,30.4561831 59.6871675,30.4561508 59.6871091,30.4560875 59.6870601,30.4559816 59.68702,30.4558987 59.6870186,30.4557807 59.6870023,30.4556466 59.6869672,30.4555769 59.68694,30.455491 59.6869022,30.4553945 59.6868602,30.4552388 59.6868093,30.4551163 59.6867835,30.4548168 59.686752,30.4546788 59.6867553,30.4546214 59.6867604,30.4545963 59.6867573,30.4545534 59.6867525,30.4545508 59.6867576,30.4544638 59.6867472,30.4544646 59.686742,30.4544227 59.6867377,30.4544217 59.6867427,30.4539778 59.6866919,30.4539823 59.6866673,30.4536976 59.6866508,30.453691 59.6866508,30.4536201 59.6866455,30.4535229 59.6866363,30.4534028 59.6866228,30.4533083 59.686614,30.453271 59.6866114,30.4531936 59.6866133,30.4531259 59.6866181,30.4530173 59.6866255,30.4528825 59.6866353,30.4527524 59.6866414,30.4526585 59.6866455,30.4525641 59.6866457,30.4525264 59.6866438,30.4524912 59.6866392,30.4524614 59.686634,30.4524214 59.6866244,30.4523836 59.686613,30.4523413 59.6865954,30.4523226 59.6865862,30.4523045 59.686573,30.4522888 59.6865538,30.4522776 59.6865312,30.452274 59.6865148,30.4522743 59.6864925,30.4522787 59.6864747,30.452286 59.6864496,30.4522911 59.6864255,30.4522989 59.6863961,30.4523018 59.6863618,30.4522992 59.6863312,30.4522911 59.6863104,30.4522828 59.6862897,30.4522676 59.6862668,30.4522535 59.6862461,30.45222 59.6862149,30.4521822 59.6861782,30.4521581 59.6861556,30.4521387 59.6861383,30.4520819 59.6860924,30.4520658 59.6860755,30.4520492 59.6860479,30.4520478 59.686026,30.4520825 59.6859825,30.4521047 59.6859432,30.4521127 59.6859046,30.4520997 59.6858613,30.4520778 59.685798,30.4520551 59.685713,30.452047 59.6856666,30.452047 59.6856386)))', 'relation', 4194432, '{\"ref\": \"III\", \"name\": \"Придворцовый район\", \"place\": \"quarter\", \"name:fr\": \"Secteur central\", \"website\": \"https://pavlovskmuseum.ru/about/park/layout/36/\", \"boundary\": \"protected_area\", \"wikidata\": \"Q121809724\", \"wikipedia\": \"ru:Павловский парк#Центральный (Придворцовый) район\", \"description\": \"Район исторического Павловского парка\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4366882 59.6889898,30.4370373 59.6889668,30.4370736 59.6889644,30.4371138 59.6889367,30.4374634 59.6889115,30.4375002 59.6889088,30.4375427 59.6889059,30.4380171 59.6888738,30.438182 59.6888616,30.4383254 59.6888487,30.4384589 59.6888338,30.4385849 59.6888182,30.4388652 59.6887778,30.4389016 59.6887728,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346802 59.6935317,30.4346817 59.6935045,30.4346729 59.6934955,30.4346017 59.6934439,30.4344133 59.6933106,30.4344523 59.6932882,30.4344971 59.6932601,30.4345233 59.6932407,30.4345424 59.6932254,30.4345634 59.6932027,30.4345863 59.693171,30.4345979 59.6931498,30.4346066 59.6931248,30.4346128 59.6930889,30.434612 59.693054,30.4346077 59.6930245,30.4346019 59.6930124,30.4345969 59.693,30.4345757 59.6929702,30.4345621 59.6929518,30.434542 59.6929299,30.4345091 59.6928998,30.4344756 59.6928775,30.4344413 59.6928581,30.4343883 59.6928337,30.4343603 59.6928224,30.4343198 59.692809,30.4342705 59.6927958,30.4342429 59.6927909,30.4341796 59.6927811,30.4341217 59.6927737,30.4340777 59.6927708,30.4340075 59.6927673,30.4339293 59.6927692,30.4338474 59.6927768,30.433767 59.6927902,30.4337225 59.6928016,30.4335043 59.6926756,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)))', 'relation', 1721131, '{\"name\": \"Павловский парк\", \"note\": \"https://wiki.openstreetmap.org/wiki/RU:Павловск/Павловский_парк\", \"leisure\": \"park\", \"name:be\": \"Паўлаўскі парк\", \"name:bg\": \"Павловски парк\", \"name:ca\": \"Parc Pàvlovsk\", \"name:en\": \"Pavlovsk Park\", \"name:es\": \"Parque Pávlovsk\", \"name:fr\": \"Parc de Pavlovsk\", \"name:he\": \"פארק פבלובסק\", \"name:hy\": \"Պավլովսկ պարկը\", \"name:nl\": \"Pavlovskpark\", \"name:ru\": \"Павловский парк\", \"name:zh\": \"巴甫洛夫斯克公园\", \"ref:okn\": \"781720399040986\", \"website\": \"https://pavlovskmuseum.ru/about/park/\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"historic\": \"yes\", \"int_name\": \"Parc de Pavlovsk\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q2506336\", \"wikipedia\": \"ru:Павловский парк\", \"fee:amount\": \"100\", \"start_date\": \"1777\", \"opening_hours\": \"07:00-19:00\", \"protect_class\": \"22\", \"operator:phone\": \"+7 (812) 452-15-36\", \"fee:conditional\": \"yes @ 9:00-17:00\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6407/\", \"operator:tourism\": \"museum\", \"operator:website\": \"http://www.pavlovskmuseum.ru\", \"protection_title\": \"Государственный музей-заповедник\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4368674 59.6896812,30.4373083 59.6896203,30.4383622 59.6894747,30.4383925 59.6894699,30.4387768 59.6894091,30.4389533 59.6893793,30.4395631 59.6892765,30.4395975 59.6896826,30.43963 59.6897841,30.4411104 59.6895883,30.4411759 59.6892872,30.4412059 59.6891298,30.4412229 59.6890714,30.4402547 59.6891154,30.4398722 59.6891396,30.4395358 59.6891608,30.4394903 59.6891472,30.4392717 59.6889536,30.4391469 59.6889286,30.4391174 59.6889211,30.4390705 59.6889062,30.4390316 59.6888852,30.4390007 59.6888636,30.4389819 59.6888446,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346174 59.6935301,30.4346147 59.6935224,30.4346086 59.6935129,30.4345932 59.6935014,30.4344744 59.6934215,30.4344752 59.6934118,30.4344684 59.6934032,30.4343048 59.693294,30.4335858 59.6928433,30.4335672 59.6928378,30.4335491 59.692831,30.4335344 59.6928246,30.4335169 59.6928158,30.4334908 59.6928019,30.4334747 59.6927935,30.4334378 59.6927735,30.4334063 59.6927569,30.4333486 59.6927221,30.4332896 59.6926848,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)),((30.4459925 59.6840515,30.4465029 59.6838166,30.4469327 59.6836721,30.4472874 59.6834226,30.4479163 59.6832392,30.4483415 59.6832476,30.4484247 59.6832514,30.4484595 59.6832547,30.4484884 59.6832585,30.4485108 59.6832641,30.4489705 59.6834352,30.4489993 59.6834563,30.4490069 59.6834636,30.4492468 59.6836887,30.4491255 59.6840718,30.4490543 59.6840686,30.4483928 59.684035,30.4478277 59.6840459,30.4469355 59.6841321,30.4462744 59.6842068,30.4459925 59.6840515)))', 'relation', 17990902, '{\"name\": \"Государственный музей-заповедник «Павловск»\", \"note\": \"граница имущественного комплекса организации, не граница парка\", \"boundary\": \"protected_area\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q405637\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601,30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698)))', 'relation', 17786995, '{\"landuse\": \"construction\", \"start_date\": \"06.204\", \"description\": \"реставрация Павильона Трех граций\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522477 59.6858088,30.4522705 59.6857319,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4527091 59.6855042,30.4528709 59.6855164,30.4529043 59.6855189,30.4529835 59.685525,30.4530542 59.6855302,30.4530286 59.6856166,30.4529796 59.6857822,30.4529559 59.6858622,30.4528897 59.6858572,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088)))', 'relation', 6636658, '{\"height\": \"19.650\", \"architect\": \"Чарльз Камерон\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2.45\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"source:building:part\": \"http://pancer.ru/images/project/012/2.jpg\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4530216 59.6854636,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.453064 59.6855044,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 6636659, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528709 59.6855164,30.4528746 59.6855048,30.4528788 59.6854915,30.4529122 59.6854936,30.4529942 59.6854993,30.4529881 59.6855114,30.4529835 59.685525,30.4529043 59.6855189,30.4528709 59.6855164)))', 'relation', 14572596, '{\"height\": \"6.65\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533818 59.6852214,30.453417 59.6852162,30.4534578 59.6852115,30.4535038 59.6852069,30.4535289 59.6853164,30.4535075 59.6853177,30.4534847 59.6853198,30.4534688 59.6853212,30.4534368 59.6853262,30.453436 59.6853248,30.4534146 59.6852887,30.4533878 59.6852355,30.4533818 59.6852214)))', 'relation', 17755881, '{\"height\": \"13\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.453436 59.6853248,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533268 59.6853074,30.4532684 59.6852465)))', 'relation', 17755882, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.4533836 59.6852944,30.4533532 59.6853009,30.4533268 59.6853074,30.4532946 59.6853162,30.4532665 59.6853249,30.4532343 59.6853363,30.4532132 59.6853445,30.4531881 59.6853553,30.453164 59.6853668,30.4531411 59.6853788,30.4531158 59.6853933,30.4530954 59.6854062,30.4530746 59.6854199,30.4530552 59.6854344,30.4530382 59.6854491,30.4530216 59.6854636,30.4530079 59.6854761,30.4530004 59.6854886,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 17904735, '{\"height\": \"10\", \"roof:shape\": \"flat\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.4528469 59.6846817,30.452843 59.684694,30.4529628 59.6847041,30.4530706 59.6847131,30.4530752 59.684699,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4535302 59.6851198,30.4535229 59.6851437,30.4535137 59.6851734,30.4535124 59.6851786,30.4535038 59.6852069,30.4534979 59.6851951,30.4534914 59.6851874,30.4534811 59.6851808,30.4534678 59.6851758,30.4534524 59.6851728,30.453436 59.6851719,30.4534196 59.6851732,30.4534028 59.6851772,30.4533891 59.6851835,30.4533796 59.6851915,30.4533752 59.6852006,30.4533763 59.68521,30.4533818 59.6852214,30.4533524 59.685227,30.4533302 59.6852316,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4528993 59.6854656,30.4528865 59.6854815,30.4528788 59.6854915,30.4528746 59.6855048,30.4527686 59.6854977,30.452777 59.6854654,30.4527565 59.685464,30.4527224 59.6854618,30.4526841 59.6854592,30.4526646 59.6854579,30.4526564 59.6854895,30.4525812 59.6854845,30.4525787 59.6854944,30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858,30.4522278 59.6851794)))', 'relation', 4274530, '{\"fee\": \"yes\", \"ref\": \"IIIа\", \"name\": \"Собственный сад\", \"leisure\": \"garden\", \"name:fr\": \"Jardin privé\", \"ref:okn\": \"781620399040366\", \"tourism\": \"attraction\", \"alt_name\": \"Собственный садик\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"wikidata\": \"Q118122043\", \"start_date\": \"1803\", \"garden:style\": \"french\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6518/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4521745 59.6857248,30.4521808 59.6857036,30.4522002 59.685638,30.4522191 59.6855742,30.4522258 59.6855515,30.4522802 59.6855556,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533763 59.68521,30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540229 59.6848667,30.4540358 59.6848708,30.454047 59.6848759,30.4540561 59.6848821,30.454063 59.6848889,30.4540674 59.6848962,30.4540691 59.6849039,30.454068 59.6849115,30.4540643 59.6849189,30.454058 59.6849259,30.4540493 59.6849322,30.4540386 59.6849376,30.4540261 59.684942,30.4540122 59.6849452,30.4539975 59.684947,30.4539823 59.6849475,30.4539763 59.6849646,30.453965 59.6849637,30.4539277 59.6849606,30.4538688 59.6849558,30.4538059 59.6849506,30.4537818 59.6849487,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537483 59.6850789,30.4538612 59.6850876,30.4539247 59.6850925,30.4539406 59.6850424,30.4539786 59.6850519,30.4540221 59.685063,30.4540417 59.6850686,30.4540646 59.6850751,30.4541059 59.6850881,30.4541472 59.6851025,30.4541871 59.685118,30.4542254 59.6851343,30.4542622 59.6851516,30.4542942 59.6851377,30.4544115 59.6852076,30.4543838 59.6852203,30.4544141 59.6852392,30.4544426 59.6852588,30.4544691 59.6852791,30.4544972 59.6853031,30.4545225 59.6853279,30.4545451 59.6853534,30.4545829 59.6853462,30.4546442 59.6854282,30.4546081 59.6854351,30.4546263 59.6854611,30.4546407 59.6854917,30.4546513 59.6855211,30.4546577 59.6855509,30.4545667 59.6855569,30.4545695 59.6855677,30.4545502 59.6855689,30.4545521 59.6855762,30.454475 59.6855814,30.454473 59.685574,30.4544524 59.6855754,30.4544496 59.6855646,30.4544349 59.6855656,30.4543687 59.68557,30.4543619 59.6855441,30.4543522 59.6855184,30.4543439 59.6854971,30.4543247 59.685468,30.454307 59.6854434,30.4542866 59.6854194,30.4542636 59.6853959,30.4542381 59.6853732,30.4542062 59.685347,30.4541753 59.6853248,30.4541426 59.6853062,30.4541083 59.6852876,30.4540689 59.6852681,30.4540273 59.6852498,30.4539837 59.6852328,30.4539382 59.685217,30.4538908 59.6852026,30.4538877 59.6852126,30.4539316 59.6852158,30.4539299 59.6852218,30.4539248 59.68524,30.453923 59.6852463,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536921 59.6853643,30.4536766 59.6853631,30.453626 59.6853592,30.4536111 59.6853581,30.4536187 59.6853329,30.4534688 59.6853212,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.4532824 59.685393,30.4532679 59.6854007,30.4532019 59.6854356,30.4531881 59.6854429,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.45306 59.6855156,30.4530542 59.6855302,30.4530286 59.6856166,30.4530752 59.6856201,30.4531272 59.685624,30.4531226 59.6856395,30.4531 59.6857159,30.4530826 59.6857747,30.4530781 59.6857896,30.4530261 59.6857857,30.4529796 59.6857822,30.4529559 59.6858622,30.4529512 59.6858765,30.4529486 59.6858896,30.4529478 59.6859011,30.4529482 59.6859112,30.452952 59.685926,30.4529569 59.6859385,30.4529638 59.6859523,30.4529718 59.6859649,30.4529791 59.6859757,30.4529856 59.6859841,30.4530246 59.6859742,30.4530338 59.6859834,30.4530767 59.6860278,30.4530861 59.6860371,30.4530482 59.6860471,30.4530568 59.6860536,30.4530663 59.6860602,30.4530779 59.6860674,30.4530898 59.6860742,30.4531018 59.6860809,30.4531136 59.6860871,30.4531293 59.6860946,30.453148 59.6861029,30.4531695 59.6861116,30.4532167 59.6861306,30.4533686 59.6861421,30.453376 59.6861189,30.4533898 59.68612,30.4534436 59.6861244,30.453457 59.6861255,30.4534496 59.6861487,30.4536027 59.6861615,30.4535556 59.6863114,30.4535958 59.6863065,30.4536563 59.6862959,30.4537014 59.6862868,30.4537731 59.6862682,30.4538342 59.6862493,30.453879 59.6862345,30.4539364 59.686214,30.4539768 59.686198,30.45402 59.6861768,30.4540703 59.686148,30.4541119 59.6861223,30.4541469 59.6860952,30.4541742 59.6860729,30.4541995 59.6860505,30.4542215 59.6860272,30.4542918 59.6860451,30.4543031 59.6860479,30.4543127 59.6860386,30.45433 59.6860429,30.4543365 59.6860363,30.4544062 59.6860538,30.4543997 59.6860604,30.4544185 59.6860651,30.4544086 59.6860746,30.4544964 59.6860973,30.4544728 59.6861239,30.4544395 59.686154,30.4544059 59.686181,30.4543849 59.6861942,30.4544137 59.6862059,30.4542999 59.6862773,30.4542705 59.6862654,30.4542363 59.6862844,30.4541965 59.6863041,30.4541887 59.6863078,30.4542091 59.6863195,30.4542 59.6863235,30.4541696 59.6863371,30.4541607 59.6863411,30.4541407 59.6863296,30.4541297 59.6863344,30.4540887 59.6863495,30.4540549 59.6863624,30.4540219 59.6863729,30.4540399 59.6863883,30.4540005 59.6863999,30.4540172 59.6864141,30.4540057 59.6864176,30.4539576 59.686432,30.4539454 59.6864356,30.4539287 59.6864214,30.4538817 59.6864353,30.453863 59.6864194,30.4538212 59.6864281,30.4537814 59.6864354,30.4537376 59.6864434,30.4536952 59.6864492,30.4536556 59.6864553,30.4536188 59.68646,30.4535812 59.6864636,30.453575 59.6864544,30.4534768 59.6864467,30.4533659 59.6864383,30.4533611 59.6864525,30.4533485 59.6864515,30.4533248 59.6864494,30.4532998 59.6864473,30.4532869 59.6864462,30.4532916 59.686432,30.4532725 59.6864305,30.4532826 59.6863983,30.4531363 59.6863866,30.453138 59.686381,30.4531642 59.6862975,30.4531215 59.686294,30.4531372 59.6862455,30.4531795 59.686249,30.453196 59.6861992,30.4531704 59.6862175,30.4531608 59.6862141,30.453137 59.6862056,30.4531278 59.6862023,30.4531534 59.686184,30.4530963 59.6861616,30.4530418 59.6861992,30.4530167 59.6861897,30.4529804 59.6861727,30.4529497 59.6861561,30.4529175 59.6861373,30.4528879 59.6861175,30.4528659 59.6861008,30.4528406 59.6860793,30.4528174 59.6860572,30.4527956 59.6860336,30.4527791 59.6860133,30.4527643 59.6859927,30.4527472 59.6859643,30.4527383 59.6859422,30.4527314 59.6859191,30.4527279 59.6859036,30.4528174 59.6858982,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088,30.4522705 59.6857319,30.4522289 59.6857289,30.4521745 59.6857248)))', 'relation', 1759666, '{\"name\": \"Павловский дворец\", \"name:ca\": \"Palau Pàvlovsk\", \"name:en\": \"Pavlovsk Palace\", \"name:fi\": \"Pavlovskin_palatsi\", \"name:fr\": \"Palais de Pavlovsk\", \"name:pt\": \"Palácio de Pavlovsk\", \"name:uz\": \"Pavlovsk saroyi\", \"name:zh\": \"巴甫洛夫斯克的宫殿\", \"ref:okn\": \"781610399040316\", \"tourism\": \"museum\", \"building\": \"palace\", \"historic\": \"yes\", \"int_name\": \"Palais de Pavlovsk\", \"wikidata\": \"Q118121947\", \"wikipedia\": \"ru:Павловский дворец\", \"start_date\": \"1782\", \"addr:street\": \"Садовая улица\", \"roof:colour\": \"#DADDE2\", \"building:colour\": \"#FFE19C\", \"addr:housenumber\": \"20 литА\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534688 59.6853212,30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536666 59.6853366,30.4536187 59.6853329,30.4534688 59.6853212)))', 'relation', 6636665, '{\"name\": \"Южный корпус\", \"height\": \"15\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4534995 59.6852209)))', 'relation', 14572597, '{\"height\": \"15\", \"roof:shape\": \"gabled\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540054 59.6848752,30.4537854 59.6848579,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537003 59.685133,30.453682 59.6851921,30.4535124 59.6851786)))', 'relation', 18019154, '{\"height\": \"13\", \"roof:shape\": \"hipped\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL);\n--Testcase 402:\nSELECT count(*) FROM json_osm_test;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 404: オーク / Sồi\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 406:\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 407:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 408: 落葉性 / Cây rụng lá\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 409:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n--Testcase 410: 常緑植物 / Cây thường xanh\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n\n--Testcase 411:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n--Testcase 412: XVIII cent.\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n\n--Testcase 413:\nDELETE FROM json_osm_test;\n\n--Testcase 500:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/macaddr.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr) SERVER sqlite_svr OPTIONS (table 'type_MACADDR');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03');\n--Testcase 012:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03');\n--Testcase 013:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (3, '08002b:010203');\n--Testcase 014:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (4, '08002b-010203');\n--Testcase 015:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203');\n--Testcase 016:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203');\n--Testcase 017:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (7, '08002b010203');\n--Testcase 018:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03');\n--Testcase 019:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03');\n--Testcase 020:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (10, '08002F:010203');\n--Testcase 021:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (11, '08002F-010203');\n--Testcase 022:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203');\n--Testcase 023:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203');\n--Testcase 024:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (14, '08002F010203');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (15, decode('08002F010203', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (16, decode('08002b010203', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE macaddr;\n--Testcase 029:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03');\n--Testcase 030:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03');\n--Testcase 031:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (19, '08002b:010203');\n--Testcase 032:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (20, '08002b-010203');\n--Testcase 033:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203');\n--Testcase 034:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203');\n--Testcase 035:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (23, '08002b010203');\n--Testcase 036:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03');\n--Testcase 037:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03');\n--Testcase 038:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (26, '08002F:010203');\n--Testcase 039:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (27, '08002F-010203');\n--Testcase 040:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203');\n--Testcase 041:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203');\n--Testcase 042:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03');\n--Testcase 046:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03');\n--Testcase 047:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (33, '08002b:010203');\n--Testcase 048:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (34, '08002b-010203');\n--Testcase 049:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203');\n--Testcase 050:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203');\n--Testcase 051:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (37, '08002b010203');\n--Testcase 052:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03');\n--Testcase 053:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03');\n--Testcase 054:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (40, '08002F:010203');\n--Testcase 055:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (41, '08002F-010203');\n--Testcase 056:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203');\n--Testcase 057:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203');\n--Testcase 058:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03');\n--Testcase 062:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03');\n--Testcase 063:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (47, '08002b:010203');\n--Testcase 064:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (48, '08002b-010203');\n--Testcase 065:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203');\n--Testcase 066:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203');\n--Testcase 067:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (51, '08002b010203');\n--Testcase 068:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03');\n--Testcase 069:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03');\n--Testcase 070:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (54, '08002F:010203');\n--Testcase 071:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (55, '08002F-010203');\n--Testcase 072:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203');\n--Testcase 073:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203');\n--Testcase 074:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 091:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17; -- 9527026057731\n--Testcase 098:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (66, '00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (67, '00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (68, '00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" DESC;\n\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDRpk\" (col macaddr OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDRpk\" VALUES ('01-02-03-04-05-06');\n--Testcase 159:\nSELECT * FROM \"type_MACADDRpk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDRpk\";\n\n--no macaddr operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06' FROM \"type_MACADDR\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/macaddr8.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR8\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03:04:05');\n--Testcase 012:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03-04-05');\n--Testcase 013:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (3, '08002b01:02030405');\n--Testcase 014:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (4, '08002b01-02030405');\n--Testcase 015:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203.0405');\n--Testcase 016:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203-0405');\n--Testcase 017:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (7, '08002b0102030405');\n--Testcase 018:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03:04:05');\n--Testcase 019:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03-04-05');\n--Testcase 020:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (10, '08002F01:02030405');\n--Testcase 021:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (11, '08002F01-02030405');\n--Testcase 022:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203.0405');\n--Testcase 023:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203-0405');\n--Testcase 024:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (14, '08002F0102030405');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (15, decode('08002F0102030405', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (16, decode('08002b0102030405', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE macaddr8;\n--Testcase 029:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03:04:05');\n--Testcase 030:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03-04-05');\n--Testcase 031:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (19, '08002b01:02030405');\n--Testcase 032:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (20, '08002b01-02030405');\n--Testcase 033:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203.0405');\n--Testcase 034:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203-0405');\n--Testcase 035:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (23, '08002b0102030405');\n--Testcase 036:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03:04:05');\n--Testcase 037:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03-04-05');\n--Testcase 038:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (26, '08002F01:02030405');\n--Testcase 039:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (27, '08002F01-02030405');\n--Testcase 040:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203.0405');\n--Testcase 041:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203-0405');\n--Testcase 042:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03:04:05');\n--Testcase 046:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03-04-05');\n--Testcase 047:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (33, '08002b01:02030405');\n--Testcase 048:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (34, '08002b01-02030405');\n--Testcase 049:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203.0405');\n--Testcase 050:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203-0405');\n--Testcase 051:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (37, '08002b0102030405');\n--Testcase 052:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03:04:05');\n--Testcase 053:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03-04-05');\n--Testcase 054:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (40, '08002F01:02030405');\n--Testcase 055:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (41, '08002F01-02030405');\n--Testcase 056:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203.0405');\n--Testcase 057:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203-0405');\n--Testcase 058:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03:04:05');\n--Testcase 062:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03-04-05');\n--Testcase 063:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (47, '08002b01:02030405');\n--Testcase 064:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (48, '08002b01-02030405');\n--Testcase 065:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203.0405');\n--Testcase 066:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203-0405');\n--Testcase 067:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (51, '08002b0102030405');\n--Testcase 068:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03:04:05');\n--Testcase 069:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03-04-05');\n--Testcase 070:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (54, '08002F01:02030405');\n--Testcase 071:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (55, '08002F01-02030405');\n--Testcase 072:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203.0405');\n--Testcase 073:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203-0405');\n--Testcase 074:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR8+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 091:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 098:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04:04:05');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR8+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR8+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR8\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (66, '00:00:00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (67, '00:00:00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (68, '00:00:00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" DESC;\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDR8pk\" (col macaddr8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01-02-03-04-05-06-07-08');\n--Testcase 159:\nSELECT * FROM \"type_MACADDR8pk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDR8pk\";\n\n--no macaddr8 operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR8\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/numeric.sql",
    "content": "--\n-- NUMERIC\n--\n--Testcase 567:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 568:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 569:\nCREATE FOREIGN TABLE num_data (id int4 OPTIONS (key 'true'), val numeric(210,10)) SERVER sqlite_svr;\n--Testcase 570:\nCREATE FOREIGN TABLE num_exp_add (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 571:\nCREATE FOREIGN TABLE num_exp_sub (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 572:\nCREATE FOREIGN TABLE num_exp_div (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 573:\nCREATE FOREIGN TABLE num_exp_mul (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 574:\nCREATE FOREIGN TABLE num_exp_sqrt (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 575:\nCREATE FOREIGN TABLE num_exp_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 576:\nCREATE FOREIGN TABLE num_exp_log10 (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 577:\nCREATE FOREIGN TABLE num_exp_power_10_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n\n--Testcase 578:\nCREATE FOREIGN TABLE num_result (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), result numeric(210,10)) SERVER sqlite_svr;\n\n\n-- ******************************\n-- * The following EXPECTED results are computed by bc(1)\n-- * with a scale of 200\n-- ******************************\n\nBEGIN TRANSACTION;\n--Testcase 1:\nINSERT INTO num_exp_add VALUES (0,0,'0');\n--Testcase 2:\nINSERT INTO num_exp_sub VALUES (0,0,'0');\n--Testcase 3:\nINSERT INTO num_exp_mul VALUES (0,0,'0');\n--Testcase 4:\nINSERT INTO num_exp_div VALUES (0,0,'NaN');\n--Testcase 5:\nINSERT INTO num_exp_add VALUES (0,1,'0');\n--Testcase 6:\nINSERT INTO num_exp_sub VALUES (0,1,'0');\n--Testcase 7:\nINSERT INTO num_exp_mul VALUES (0,1,'0');\n--Testcase 8:\nINSERT INTO num_exp_div VALUES (0,1,'NaN');\n--Testcase 9:\nINSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');\n--Testcase 10:\nINSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');\n--Testcase 11:\nINSERT INTO num_exp_mul VALUES (0,2,'0');\n--Testcase 12:\nINSERT INTO num_exp_div VALUES (0,2,'0');\n--Testcase 13:\nINSERT INTO num_exp_add VALUES (0,3,'4.31');\n--Testcase 14:\nINSERT INTO num_exp_sub VALUES (0,3,'-4.31');\n--Testcase 15:\nINSERT INTO num_exp_mul VALUES (0,3,'0');\n--Testcase 16:\nINSERT INTO num_exp_div VALUES (0,3,'0');\n--Testcase 17:\nINSERT INTO num_exp_add VALUES (0,4,'7799461.4119');\n--Testcase 18:\nINSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');\n--Testcase 19:\nINSERT INTO num_exp_mul VALUES (0,4,'0');\n--Testcase 20:\nINSERT INTO num_exp_div VALUES (0,4,'0');\n--Testcase 21:\nINSERT INTO num_exp_add VALUES (0,5,'16397.038491');\n--Testcase 22:\nINSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');\n--Testcase 23:\nINSERT INTO num_exp_mul VALUES (0,5,'0');\n--Testcase 24:\nINSERT INTO num_exp_div VALUES (0,5,'0');\n--Testcase 25:\nINSERT INTO num_exp_add VALUES (0,6,'93901.57763026');\n--Testcase 26:\nINSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');\n--Testcase 27:\nINSERT INTO num_exp_mul VALUES (0,6,'0');\n--Testcase 28:\nINSERT INTO num_exp_div VALUES (0,6,'0');\n--Testcase 29:\nINSERT INTO num_exp_add VALUES (0,7,'-83028485');\n--Testcase 30:\nINSERT INTO num_exp_sub VALUES (0,7,'83028485');\n--Testcase 31:\nINSERT INTO num_exp_mul VALUES (0,7,'0');\n--Testcase 32:\nINSERT INTO num_exp_div VALUES (0,7,'0');\n--Testcase 33:\nINSERT INTO num_exp_add VALUES (0,8,'74881');\n--Testcase 34:\nINSERT INTO num_exp_sub VALUES (0,8,'-74881');\n--Testcase 35:\nINSERT INTO num_exp_mul VALUES (0,8,'0');\n--Testcase 36:\nINSERT INTO num_exp_div VALUES (0,8,'0');\n--Testcase 37:\nINSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');\n--Testcase 38:\nINSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');\n--Testcase 39:\nINSERT INTO num_exp_mul VALUES (0,9,'0');\n--Testcase 40:\nINSERT INTO num_exp_div VALUES (0,9,'0');\n--Testcase 41:\nINSERT INTO num_exp_add VALUES (1,0,'0');\n--Testcase 42:\nINSERT INTO num_exp_sub VALUES (1,0,'0');\n--Testcase 43:\nINSERT INTO num_exp_mul VALUES (1,0,'0');\n--Testcase 44:\nINSERT INTO num_exp_div VALUES (1,0,'NaN');\n--Testcase 45:\nINSERT INTO num_exp_add VALUES (1,1,'0');\n--Testcase 46:\nINSERT INTO num_exp_sub VALUES (1,1,'0');\n--Testcase 47:\nINSERT INTO num_exp_mul VALUES (1,1,'0');\n--Testcase 48:\nINSERT INTO num_exp_div VALUES (1,1,'NaN');\n--Testcase 49:\nINSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');\n--Testcase 50:\nINSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');\n--Testcase 51:\nINSERT INTO num_exp_mul VALUES (1,2,'0');\n--Testcase 52:\nINSERT INTO num_exp_div VALUES (1,2,'0');\n--Testcase 53:\nINSERT INTO num_exp_add VALUES (1,3,'4.31');\n--Testcase 54:\nINSERT INTO num_exp_sub VALUES (1,3,'-4.31');\n--Testcase 55:\nINSERT INTO num_exp_mul VALUES (1,3,'0');\n--Testcase 56:\nINSERT INTO num_exp_div VALUES (1,3,'0');\n--Testcase 57:\nINSERT INTO num_exp_add VALUES (1,4,'7799461.4119');\n--Testcase 58:\nINSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');\n--Testcase 59:\nINSERT INTO num_exp_mul VALUES (1,4,'0');\n--Testcase 60:\nINSERT INTO num_exp_div VALUES (1,4,'0');\n--Testcase 61:\nINSERT INTO num_exp_add VALUES (1,5,'16397.038491');\n--Testcase 62:\nINSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');\n--Testcase 63:\nINSERT INTO num_exp_mul VALUES (1,5,'0');\n--Testcase 64:\nINSERT INTO num_exp_div VALUES (1,5,'0');\n--Testcase 65:\nINSERT INTO num_exp_add VALUES (1,6,'93901.57763026');\n--Testcase 66:\nINSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');\n--Testcase 67:\nINSERT INTO num_exp_mul VALUES (1,6,'0');\n--Testcase 68:\nINSERT INTO num_exp_div VALUES (1,6,'0');\n--Testcase 69:\nINSERT INTO num_exp_add VALUES (1,7,'-83028485');\n--Testcase 70:\nINSERT INTO num_exp_sub VALUES (1,7,'83028485');\n--Testcase 71:\nINSERT INTO num_exp_mul VALUES (1,7,'0');\n--Testcase 72:\nINSERT INTO num_exp_div VALUES (1,7,'0');\n--Testcase 73:\nINSERT INTO num_exp_add VALUES (1,8,'74881');\n--Testcase 74:\nINSERT INTO num_exp_sub VALUES (1,8,'-74881');\n--Testcase 75:\nINSERT INTO num_exp_mul VALUES (1,8,'0');\n--Testcase 76:\nINSERT INTO num_exp_div VALUES (1,8,'0');\n--Testcase 77:\nINSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');\n--Testcase 78:\nINSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');\n--Testcase 79:\nINSERT INTO num_exp_mul VALUES (1,9,'0');\n--Testcase 80:\nINSERT INTO num_exp_div VALUES (1,9,'0');\n--Testcase 81:\nINSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');\n--Testcase 82:\nINSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');\n--Testcase 83:\nINSERT INTO num_exp_mul VALUES (2,0,'0');\n--Testcase 84:\nINSERT INTO num_exp_div VALUES (2,0,'NaN');\n--Testcase 85:\nINSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');\n--Testcase 86:\nINSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');\n--Testcase 87:\nINSERT INTO num_exp_mul VALUES (2,1,'0');\n--Testcase 88:\nINSERT INTO num_exp_div VALUES (2,1,'NaN');\n--Testcase 89:\nINSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');\n--Testcase 90:\nINSERT INTO num_exp_sub VALUES (2,2,'0');\n--Testcase 91:\nINSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');\n--Testcase 92:\nINSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');\n--Testcase 93:\nINSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');\n--Testcase 94:\nINSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');\n--Testcase 95:\nINSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');\n--Testcase 96:\nINSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');\n--Testcase 97:\nINSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');\n--Testcase 98:\nINSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');\n--Testcase 99:\nINSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');\n--Testcase 100:\nINSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');\n--Testcase 101:\nINSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');\n--Testcase 102:\nINSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');\n--Testcase 103:\nINSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');\n--Testcase 104:\nINSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');\n--Testcase 105:\nINSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');\n--Testcase 106:\nINSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');\n--Testcase 107:\nINSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');\n--Testcase 108:\nINSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');\n--Testcase 109:\nINSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');\n--Testcase 110:\nINSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');\n--Testcase 111:\nINSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');\n--Testcase 112:\nINSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');\n--Testcase 113:\nINSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');\n--Testcase 114:\nINSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');\n--Testcase 115:\nINSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');\n--Testcase 116:\nINSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');\n--Testcase 117:\nINSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');\n--Testcase 118:\nINSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');\n--Testcase 119:\nINSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');\n--Testcase 120:\nINSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');\n--Testcase 121:\nINSERT INTO num_exp_add VALUES (3,0,'4.31');\n--Testcase 122:\nINSERT INTO num_exp_sub VALUES (3,0,'4.31');\n--Testcase 123:\nINSERT INTO num_exp_mul VALUES (3,0,'0');\n--Testcase 124:\nINSERT INTO num_exp_div VALUES (3,0,'NaN');\n--Testcase 125:\nINSERT INTO num_exp_add VALUES (3,1,'4.31');\n--Testcase 126:\nINSERT INTO num_exp_sub VALUES (3,1,'4.31');\n--Testcase 127:\nINSERT INTO num_exp_mul VALUES (3,1,'0');\n--Testcase 128:\nINSERT INTO num_exp_div VALUES (3,1,'NaN');\n--Testcase 129:\nINSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');\n--Testcase 130:\nINSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');\n--Testcase 131:\nINSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');\n--Testcase 132:\nINSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');\n--Testcase 133:\nINSERT INTO num_exp_add VALUES (3,3,'8.62');\n--Testcase 134:\nINSERT INTO num_exp_sub VALUES (3,3,'0');\n--Testcase 135:\nINSERT INTO num_exp_mul VALUES (3,3,'18.5761');\n--Testcase 136:\nINSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');\n--Testcase 137:\nINSERT INTO num_exp_add VALUES (3,4,'7799465.7219');\n--Testcase 138:\nINSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');\n--Testcase 139:\nINSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');\n--Testcase 140:\nINSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');\n--Testcase 141:\nINSERT INTO num_exp_add VALUES (3,5,'16401.348491');\n--Testcase 142:\nINSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');\n--Testcase 143:\nINSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');\n--Testcase 144:\nINSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');\n--Testcase 145:\nINSERT INTO num_exp_add VALUES (3,6,'93905.88763026');\n--Testcase 146:\nINSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');\n--Testcase 147:\nINSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');\n--Testcase 148:\nINSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');\n--Testcase 149:\nINSERT INTO num_exp_add VALUES (3,7,'-83028480.69');\n--Testcase 150:\nINSERT INTO num_exp_sub VALUES (3,7,'83028489.31');\n--Testcase 151:\nINSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');\n--Testcase 152:\nINSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');\n--Testcase 153:\nINSERT INTO num_exp_add VALUES (3,8,'74885.31');\n--Testcase 154:\nINSERT INTO num_exp_sub VALUES (3,8,'-74876.69');\n--Testcase 155:\nINSERT INTO num_exp_mul VALUES (3,8,'322737.11');\n--Testcase 156:\nINSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');\n--Testcase 157:\nINSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');\n--Testcase 158:\nINSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');\n--Testcase 159:\nINSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');\n--Testcase 160:\nINSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');\n--Testcase 161:\nINSERT INTO num_exp_add VALUES (4,0,'7799461.4119');\n--Testcase 162:\nINSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');\n--Testcase 163:\nINSERT INTO num_exp_mul VALUES (4,0,'0');\n--Testcase 164:\nINSERT INTO num_exp_div VALUES (4,0,'NaN');\n--Testcase 165:\nINSERT INTO num_exp_add VALUES (4,1,'7799461.4119');\n--Testcase 166:\nINSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');\n--Testcase 167:\nINSERT INTO num_exp_mul VALUES (4,1,'0');\n--Testcase 168:\nINSERT INTO num_exp_div VALUES (4,1,'NaN');\n--Testcase 169:\nINSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');\n--Testcase 170:\nINSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');\n--Testcase 171:\nINSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');\n--Testcase 172:\nINSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');\n--Testcase 173:\nINSERT INTO num_exp_add VALUES (4,3,'7799465.7219');\n--Testcase 174:\nINSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');\n--Testcase 175:\nINSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');\n--Testcase 176:\nINSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');\n--Testcase 177:\nINSERT INTO num_exp_add VALUES (4,4,'15598922.8238');\n--Testcase 178:\nINSERT INTO num_exp_sub VALUES (4,4,'0');\n--Testcase 179:\nINSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');\n--Testcase 180:\nINSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');\n--Testcase 181:\nINSERT INTO num_exp_add VALUES (4,5,'7815858.450391');\n--Testcase 182:\nINSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');\n--Testcase 183:\nINSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');\n--Testcase 184:\nINSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');\n--Testcase 185:\nINSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');\n--Testcase 186:\nINSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');\n--Testcase 187:\nINSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');\n--Testcase 188:\nINSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');\n--Testcase 189:\nINSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');\n--Testcase 190:\nINSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');\n--Testcase 191:\nINSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');\n--Testcase 192:\nINSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');\n--Testcase 193:\nINSERT INTO num_exp_add VALUES (4,8,'7874342.4119');\n--Testcase 194:\nINSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');\n--Testcase 195:\nINSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');\n--Testcase 196:\nINSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');\n--Testcase 197:\nINSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');\n--Testcase 198:\nINSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');\n--Testcase 199:\nINSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');\n--Testcase 200:\nINSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');\n--Testcase 201:\nINSERT INTO num_exp_add VALUES (5,0,'16397.038491');\n--Testcase 202:\nINSERT INTO num_exp_sub VALUES (5,0,'16397.038491');\n--Testcase 203:\nINSERT INTO num_exp_mul VALUES (5,0,'0');\n--Testcase 204:\nINSERT INTO num_exp_div VALUES (5,0,'NaN');\n--Testcase 205:\nINSERT INTO num_exp_add VALUES (5,1,'16397.038491');\n--Testcase 206:\nINSERT INTO num_exp_sub VALUES (5,1,'16397.038491');\n--Testcase 207:\nINSERT INTO num_exp_mul VALUES (5,1,'0');\n--Testcase 208:\nINSERT INTO num_exp_div VALUES (5,1,'NaN');\n--Testcase 209:\nINSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');\n--Testcase 210:\nINSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');\n--Testcase 211:\nINSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');\n--Testcase 212:\nINSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');\n--Testcase 213:\nINSERT INTO num_exp_add VALUES (5,3,'16401.348491');\n--Testcase 214:\nINSERT INTO num_exp_sub VALUES (5,3,'16392.728491');\n--Testcase 215:\nINSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');\n--Testcase 216:\nINSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');\n--Testcase 217:\nINSERT INTO num_exp_add VALUES (5,4,'7815858.450391');\n--Testcase 218:\nINSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');\n--Testcase 219:\nINSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');\n--Testcase 220:\nINSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');\n--Testcase 221:\nINSERT INTO num_exp_add VALUES (5,5,'32794.076982');\n--Testcase 222:\nINSERT INTO num_exp_sub VALUES (5,5,'0');\n--Testcase 223:\nINSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');\n--Testcase 224:\nINSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');\n--Testcase 225:\nINSERT INTO num_exp_add VALUES (5,6,'110298.61612126');\n--Testcase 226:\nINSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');\n--Testcase 227:\nINSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');\n--Testcase 228:\nINSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');\n--Testcase 229:\nINSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');\n--Testcase 230:\nINSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');\n--Testcase 231:\nINSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');\n--Testcase 232:\nINSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');\n--Testcase 233:\nINSERT INTO num_exp_add VALUES (5,8,'91278.038491');\n--Testcase 234:\nINSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');\n--Testcase 235:\nINSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');\n--Testcase 236:\nINSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');\n--Testcase 237:\nINSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');\n--Testcase 238:\nINSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');\n--Testcase 239:\nINSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');\n--Testcase 240:\nINSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');\n--Testcase 241:\nINSERT INTO num_exp_add VALUES (6,0,'93901.57763026');\n--Testcase 242:\nINSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');\n--Testcase 243:\nINSERT INTO num_exp_mul VALUES (6,0,'0');\n--Testcase 244:\nINSERT INTO num_exp_div VALUES (6,0,'NaN');\n--Testcase 245:\nINSERT INTO num_exp_add VALUES (6,1,'93901.57763026');\n--Testcase 246:\nINSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');\n--Testcase 247:\nINSERT INTO num_exp_mul VALUES (6,1,'0');\n--Testcase 248:\nINSERT INTO num_exp_div VALUES (6,1,'NaN');\n--Testcase 249:\nINSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');\n--Testcase 250:\nINSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');\n--Testcase 251:\nINSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');\n--Testcase 252:\nINSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');\n--Testcase 253:\nINSERT INTO num_exp_add VALUES (6,3,'93905.88763026');\n--Testcase 254:\nINSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');\n--Testcase 255:\nINSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');\n--Testcase 256:\nINSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');\n--Testcase 257:\nINSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');\n--Testcase 258:\nINSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');\n--Testcase 259:\nINSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');\n--Testcase 260:\nINSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');\n--Testcase 261:\nINSERT INTO num_exp_add VALUES (6,5,'110298.61612126');\n--Testcase 262:\nINSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');\n--Testcase 263:\nINSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');\n--Testcase 264:\nINSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');\n--Testcase 265:\nINSERT INTO num_exp_add VALUES (6,6,'187803.15526052');\n--Testcase 266:\nINSERT INTO num_exp_sub VALUES (6,6,'0');\n--Testcase 267:\nINSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');\n--Testcase 268:\nINSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');\n--Testcase 269:\nINSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');\n--Testcase 270:\nINSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');\n--Testcase 271:\nINSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');\n--Testcase 272:\nINSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');\n--Testcase 273:\nINSERT INTO num_exp_add VALUES (6,8,'168782.57763026');\n--Testcase 274:\nINSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');\n--Testcase 275:\nINSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');\n--Testcase 276:\nINSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');\n--Testcase 277:\nINSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');\n--Testcase 278:\nINSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');\n--Testcase 279:\nINSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');\n--Testcase 280:\nINSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');\n--Testcase 281:\nINSERT INTO num_exp_add VALUES (7,0,'-83028485');\n--Testcase 282:\nINSERT INTO num_exp_sub VALUES (7,0,'-83028485');\n--Testcase 283:\nINSERT INTO num_exp_mul VALUES (7,0,'0');\n--Testcase 284:\nINSERT INTO num_exp_div VALUES (7,0,'NaN');\n--Testcase 285:\nINSERT INTO num_exp_add VALUES (7,1,'-83028485');\n--Testcase 286:\nINSERT INTO num_exp_sub VALUES (7,1,'-83028485');\n--Testcase 287:\nINSERT INTO num_exp_mul VALUES (7,1,'0');\n--Testcase 288:\nINSERT INTO num_exp_div VALUES (7,1,'NaN');\n--Testcase 289:\nINSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');\n--Testcase 290:\nINSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');\n--Testcase 291:\nINSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');\n--Testcase 292:\nINSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');\n--Testcase 293:\nINSERT INTO num_exp_add VALUES (7,3,'-83028480.69');\n--Testcase 294:\nINSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');\n--Testcase 295:\nINSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');\n--Testcase 296:\nINSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');\n--Testcase 297:\nINSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');\n--Testcase 298:\nINSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');\n--Testcase 299:\nINSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');\n--Testcase 300:\nINSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');\n--Testcase 301:\nINSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');\n--Testcase 302:\nINSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');\n--Testcase 303:\nINSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');\n--Testcase 304:\nINSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');\n--Testcase 305:\nINSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');\n--Testcase 306:\nINSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');\n--Testcase 307:\nINSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');\n--Testcase 308:\nINSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');\n--Testcase 309:\nINSERT INTO num_exp_add VALUES (7,7,'-166056970');\n--Testcase 310:\nINSERT INTO num_exp_sub VALUES (7,7,'0');\n--Testcase 311:\nINSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');\n--Testcase 312:\nINSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');\n--Testcase 313:\nINSERT INTO num_exp_add VALUES (7,8,'-82953604');\n--Testcase 314:\nINSERT INTO num_exp_sub VALUES (7,8,'-83103366');\n--Testcase 315:\nINSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');\n--Testcase 316:\nINSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');\n--Testcase 317:\nINSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');\n--Testcase 318:\nINSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');\n--Testcase 319:\nINSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');\n--Testcase 320:\nINSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');\n--Testcase 321:\nINSERT INTO num_exp_add VALUES (8,0,'74881');\n--Testcase 322:\nINSERT INTO num_exp_sub VALUES (8,0,'74881');\n--Testcase 323:\nINSERT INTO num_exp_mul VALUES (8,0,'0');\n--Testcase 324:\nINSERT INTO num_exp_div VALUES (8,0,'NaN');\n--Testcase 325:\nINSERT INTO num_exp_add VALUES (8,1,'74881');\n--Testcase 326:\nINSERT INTO num_exp_sub VALUES (8,1,'74881');\n--Testcase 327:\nINSERT INTO num_exp_mul VALUES (8,1,'0');\n--Testcase 328:\nINSERT INTO num_exp_div VALUES (8,1,'NaN');\n--Testcase 329:\nINSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');\n--Testcase 330:\nINSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');\n--Testcase 331:\nINSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');\n--Testcase 332:\nINSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');\n--Testcase 333:\nINSERT INTO num_exp_add VALUES (8,3,'74885.31');\n--Testcase 334:\nINSERT INTO num_exp_sub VALUES (8,3,'74876.69');\n--Testcase 335:\nINSERT INTO num_exp_mul VALUES (8,3,'322737.11');\n--Testcase 336:\nINSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');\n--Testcase 337:\nINSERT INTO num_exp_add VALUES (8,4,'7874342.4119');\n--Testcase 338:\nINSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');\n--Testcase 339:\nINSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');\n--Testcase 340:\nINSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');\n--Testcase 341:\nINSERT INTO num_exp_add VALUES (8,5,'91278.038491');\n--Testcase 342:\nINSERT INTO num_exp_sub VALUES (8,5,'58483.961509');\n--Testcase 343:\nINSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');\n--Testcase 344:\nINSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');\n--Testcase 345:\nINSERT INTO num_exp_add VALUES (8,6,'168782.57763026');\n--Testcase 346:\nINSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');\n--Testcase 347:\nINSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');\n--Testcase 348:\nINSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');\n--Testcase 349:\nINSERT INTO num_exp_add VALUES (8,7,'-82953604');\n--Testcase 350:\nINSERT INTO num_exp_sub VALUES (8,7,'83103366');\n--Testcase 351:\nINSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');\n--Testcase 352:\nINSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');\n--Testcase 353:\nINSERT INTO num_exp_add VALUES (8,8,'149762');\n--Testcase 354:\nINSERT INTO num_exp_sub VALUES (8,8,'0');\n--Testcase 355:\nINSERT INTO num_exp_mul VALUES (8,8,'5607164161');\n--Testcase 356:\nINSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');\n--Testcase 357:\nINSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');\n--Testcase 358:\nINSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');\n--Testcase 359:\nINSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');\n--Testcase 360:\nINSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');\n--Testcase 361:\nINSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');\n--Testcase 362:\nINSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');\n--Testcase 363:\nINSERT INTO num_exp_mul VALUES (9,0,'0');\n--Testcase 364:\nINSERT INTO num_exp_div VALUES (9,0,'NaN');\n--Testcase 365:\nINSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');\n--Testcase 366:\nINSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');\n--Testcase 367:\nINSERT INTO num_exp_mul VALUES (9,1,'0');\n--Testcase 368:\nINSERT INTO num_exp_div VALUES (9,1,'NaN');\n--Testcase 369:\nINSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');\n--Testcase 370:\nINSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');\n--Testcase 371:\nINSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');\n--Testcase 372:\nINSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');\n--Testcase 373:\nINSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');\n--Testcase 374:\nINSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');\n--Testcase 375:\nINSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');\n--Testcase 376:\nINSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');\n--Testcase 377:\nINSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');\n--Testcase 378:\nINSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');\n--Testcase 379:\nINSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');\n--Testcase 380:\nINSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');\n--Testcase 381:\nINSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');\n--Testcase 382:\nINSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');\n--Testcase 383:\nINSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');\n--Testcase 384:\nINSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');\n--Testcase 385:\nINSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');\n--Testcase 386:\nINSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');\n--Testcase 387:\nINSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');\n--Testcase 388:\nINSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');\n--Testcase 389:\nINSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');\n--Testcase 390:\nINSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');\n--Testcase 391:\nINSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');\n--Testcase 392:\nINSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');\n--Testcase 393:\nINSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');\n--Testcase 394:\nINSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');\n--Testcase 395:\nINSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');\n--Testcase 396:\nINSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');\n--Testcase 397:\nINSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');\n--Testcase 398:\nINSERT INTO num_exp_sub VALUES (9,9,'0');\n--Testcase 399:\nINSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');\n--Testcase 400:\nINSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 401:\nINSERT INTO num_exp_sqrt VALUES (0,'0');\n--Testcase 402:\nINSERT INTO num_exp_sqrt VALUES (1,'0');\n--Testcase 403:\nINSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');\n--Testcase 404:\nINSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');\n--Testcase 405:\nINSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');\n--Testcase 406:\nINSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');\n--Testcase 407:\nINSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');\n--Testcase 408:\nINSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');\n--Testcase 409:\nINSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');\n--Testcase 410:\nINSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 411:\nINSERT INTO num_exp_ln VALUES (0,'NaN');\n--Testcase 412:\nINSERT INTO num_exp_ln VALUES (1,'NaN');\n--Testcase 413:\nINSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');\n--Testcase 414:\nINSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');\n--Testcase 415:\nINSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');\n--Testcase 416:\nINSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');\n--Testcase 417:\nINSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');\n--Testcase 418:\nINSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');\n--Testcase 419:\nINSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');\n--Testcase 420:\nINSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 421:\nINSERT INTO num_exp_log10 VALUES (0,'NaN');\n--Testcase 422:\nINSERT INTO num_exp_log10 VALUES (1,'NaN');\n--Testcase 423:\nINSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');\n--Testcase 424:\nINSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');\n--Testcase 425:\nINSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');\n--Testcase 426:\nINSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');\n--Testcase 427:\nINSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');\n--Testcase 428:\nINSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');\n--Testcase 429:\nINSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');\n--Testcase 430:\nINSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 431:\nINSERT INTO num_exp_power_10_ln VALUES (0,'NaN');\n--Testcase 432:\nINSERT INTO num_exp_power_10_ln VALUES (1,'NaN');\n--Testcase 433:\nINSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');\n--Testcase 434:\nINSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');\n--Testcase 435:\nINSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');\n--Testcase 436:\nINSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');\n--Testcase 437:\nINSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');\n--Testcase 438:\nINSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');\n--Testcase 439:\nINSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');\n--Testcase 440:\nINSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 441:\nINSERT INTO num_data VALUES (0, '0');\n--Testcase 442:\nINSERT INTO num_data VALUES (1, '0');\n--Testcase 443:\nINSERT INTO num_data VALUES (2, '-34338492.215397047');\n--Testcase 444:\nINSERT INTO num_data VALUES (3, '4.31');\n--Testcase 445:\nINSERT INTO num_data VALUES (4, '7799461.4119');\n--Testcase 446:\nINSERT INTO num_data VALUES (5, '16397.038491');\n--Testcase 447:\nINSERT INTO num_data VALUES (6, '93901.57763026');\n--Testcase 448:\nINSERT INTO num_data VALUES (7, '-83028485');\n--Testcase 449:\nINSERT INTO num_data VALUES (8, '74881');\n--Testcase 450:\nINSERT INTO num_data VALUES (9, '-24926804.045047420');\n\nCOMMIT TRANSACTION;\n\n-- ******************************\n-- * Create indices for faster checks\n-- ******************************\n-- Skip these setting, creating foreign table with primary key already covered.\n--CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);\n--CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);\n--CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);\n--CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);\n--CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);\n--CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);\n--VACUUM ANALYZE num_exp_add;\n--VACUUM ANALYZE num_exp_sub;\n--VACUUM ANALYZE num_exp_div;\n--VACUUM ANALYZE num_exp_mul;\n--VACUUM ANALYZE num_exp_sqrt;\n--VACUUM ANALYZE num_exp_ln;\n--VACUUM ANALYZE num_exp_log10;\n--VACUUM ANALYZE num_exp_power_10_ln;\n\n-- ******************************\n-- * Now check the behaviour of the NUMERIC type\n-- ******************************\n\n-- ******************************\n-- * Addition check\n-- ******************************\n\n--Testcase 451:\nDELETE FROM num_result;\n--Testcase 452:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 453:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 454:\nDELETE FROM num_result;\n--Testcase 455:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)\n    FROM num_data t1, num_data t2;\n--Testcase 456:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 10);\n\n-- ******************************\n-- * Subtraction check\n-- ******************************\n--Testcase 457:\nDELETE FROM num_result;\n--Testcase 458:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 459:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 460:\nDELETE FROM num_result;\n--Testcase 461:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)\n    FROM num_data t1, num_data t2;\n--Testcase 462:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 40);\n\n-- ******************************\n-- * Multiply check\n-- ******************************\n--Testcase 463:\nDELETE FROM num_result;\n--Testcase 464:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 465:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 466:\nDELETE FROM num_result;\n--Testcase 467:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)\n    FROM num_data t1, num_data t2;\n--Testcase 468:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 30);\n\n-- ******************************\n-- * Division check\n-- ******************************\n--Testcase 469:\nDELETE FROM num_result;\n--Testcase 470:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 471:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 472:\nDELETE FROM num_result;\n--Testcase 473:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 474:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 80);\n\n-- ******************************\n-- * Square root check\n-- ******************************\n--Testcase 475:\nDELETE FROM num_result;\n--Testcase 476:\nINSERT INTO num_result SELECT id, 0, SQRT(ABS(val))\n    FROM num_data;\n--Testcase 477:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_sqrt t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Natural logarithm check\n-- ******************************\n--Testcase 478:\nDELETE FROM num_result;\n--Testcase 479:\nINSERT INTO num_result SELECT id, 0, LN(ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 480:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Logarithm base 10 check\n-- ******************************\n--Testcase 481:\nDELETE FROM num_result;\n--Testcase 482:\nINSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 483:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_log10 t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * POWER(10, LN(value)) check\n-- ******************************\n--Testcase 484:\nDELETE FROM num_result;\n--Testcase 485:\nINSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 486:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_power_10_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * miscellaneous checks for things that have been broken in the past...\n-- ******************************\n-- numeric AVG used to fail on some platforms\n--Testcase 487:\nSELECT AVG(val) FROM num_data;\n--Testcase 488:\nSELECT STDDEV(val) FROM num_data;\n--Testcase 489:\nSELECT VARIANCE(val) FROM num_data;\n\n-- Check for appropriate rounding and overflow\n--Testcase 579:\nCREATE FOREIGN TABLE fract_only (id int, val numeric(4,4)) SERVER sqlite_svr;\n--Testcase 490:\nINSERT INTO fract_only VALUES (1, '0.0');\n--Testcase 491:\nINSERT INTO fract_only VALUES (2, '0.1');\n--Testcase 492:\nINSERT INTO fract_only VALUES (3, '1.0');\t-- should fail\n--Testcase 493:\nINSERT INTO fract_only VALUES (4, '-0.9999');\n--Testcase 494:\nINSERT INTO fract_only VALUES (5, '0.99994');\n--Testcase 495:\nINSERT INTO fract_only VALUES (6, '0.99995');  -- should fail\n--Testcase 496:\nINSERT INTO fract_only VALUES (7, '0.00001');\n--Testcase 497:\nINSERT INTO fract_only VALUES (8, '0.00017');\n--Testcase 498:\nSELECT * FROM fract_only;\n--Testcase 580:\nDROP FOREIGN TABLE fract_only;\n\n-- Check inf/nan conversion behavior\n--Testcase 581:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 582:\nDELETE FROM FLOAT8_TMP;\n--Testcase 583:\nINSERT INTO FLOAT8_TMP VALUES ('NaN');\n--Testcase 584:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 585:\nDELETE FROM FLOAT8_TMP;\n--Testcase 586:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity');\n--Testcase 587:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 588:\nDELETE FROM FLOAT8_TMP;\n--Testcase 589:\nINSERT INTO FLOAT8_TMP VALUES ('-Infinity');\n--Testcase 590:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n\n--Testcase 591:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 592:\nDELETE FROM FLOAT4_TMP;\n--Testcase 593:\nINSERT INTO FLOAT4_TMP VALUES ('NaN');\n--Testcase 594:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 595:\nDELETE FROM FLOAT4_TMP;\n--Testcase 596:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity');\n--Testcase 597:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 598:\nDELETE FROM FLOAT4_TMP;\n--Testcase 599:\nINSERT INTO FLOAT4_TMP VALUES ('-Infinity');\n--Testcase 600:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n-- Simple check that ceil(), floor(), and round() work correctly\n--Testcase 601:\nCREATE FOREIGN TABLE ceil_floor_round (a numeric OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO ceil_floor_round VALUES ('-5.5');\n--Testcase 500:\nINSERT INTO ceil_floor_round VALUES ('-5.499999');\n--Testcase 501:\nINSERT INTO ceil_floor_round VALUES ('9.5');\n--Testcase 502:\nINSERT INTO ceil_floor_round VALUES ('9.4999999');\n--Testcase 503:\nINSERT INTO ceil_floor_round VALUES ('0.0');\n--Testcase 504:\nINSERT INTO ceil_floor_round VALUES ('0.0000001');\n--Testcase 505:\nINSERT INTO ceil_floor_round VALUES ('-0.000001');\n--Testcase 506:\nSELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round ORDER BY a;\n\n-- Check rounding, it should round ties away from zero.\n--Testcase 602:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 603:\nDELETE FROM INT4_TMP;\n--Testcase 604:\nINSERT INTO INT4_TMP SELECT a FROM generate_series(-5,5) a;\n--Testcase 605:\nSELECT f1 as pow,\n\tround((-2.5 * 10 ^ f1)::numeric, -f1),\n\tround((-1.5 * 10 ^ f1)::numeric, -f1),\n\tround((-0.5 * 10 ^ f1)::numeric, -f1),\n\tround((0.5 * 10 ^ f1)::numeric, -f1),\n\tround((1.5 * 10 ^ f1)::numeric, -f1),\n\tround((2.5 * 10 ^ f1)::numeric, -f1)\nFROM INT4_TMP;\n\n-- Testing for width_bucket(). For convenience, we test both the\n-- numeric and float8 versions of the function in this file.\n-- errors\n--Testcase 606:\nCREATE FOREIGN TABLE width_bucket_tbl (\n\tid1 numeric,\n\tid2 numeric,\n\tid3 numeric,\n\tid4 int,\n\tid int OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 607:\nDELETE FROM width_bucket_tbl;\n--Testcase 608:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 609:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 610:\nDELETE FROM width_bucket_tbl;\n--Testcase 611:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 612:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 613:\nDELETE FROM width_bucket_tbl;\n--Testcase 614:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 615:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 616:\nDELETE FROM width_bucket_tbl;\n--Testcase 617:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 618:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 619:\nDELETE FROM width_bucket_tbl;\n--Testcase 620:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 621:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 622:\nDELETE FROM width_bucket_tbl;\n--Testcase 623:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 624:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 625:\nDELETE FROM width_bucket_tbl;\n--Testcase 626:\nINSERT INTO width_bucket_tbl VALUES ('NaN'::numeric, 3.0, 4.0, 888);\n--Testcase 627:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 628:\nDELETE FROM width_bucket_tbl;\n--Testcase 629:\nINSERT INTO width_bucket_tbl VALUES (0, 'NaN'::numeric, 4.0, 888);\n--Testcase 630:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n\n-- normal operation\n--Testcase 631:\nCREATE FOREIGN TABLE width_bucket_test (\n\toperand_num numeric OPTIONS (key 'true'),\n\toperand_f8 float8\n) SERVER sqlite_svr;\n\n--COPY width_bucket_test (operand_num) FROM stdin;\n--Testcase 507:\nINSERT INTO width_bucket_test (operand_num) VALUES\n(-5.2),\n(-0.0000000001),\n(0.000000000001),\n(1),\n(1.99999999999999),\n(2),\n(2.00000000000001),\n(3),\n(4),\n(4.5),\n(5),\n(5.5),\n(6),\n(7),\n(8),\n(9),\n(9.99999999999999),\n(10),\n(10.0000000000001);\n\n--Testcase 508:\nUPDATE width_bucket_test SET operand_f8 = operand_num::float8;\n\n--Testcase 509:\nSELECT\n    operand_num,\n    width_bucket(operand_num, 0, 10, 5) AS wb_1,\n    width_bucket(operand_f8, 0, 10, 5) AS wb_1f,\n    width_bucket(operand_num, 10, 0, 5) AS wb_2,\n    width_bucket(operand_f8, 10, 0, 5) AS wb_2f,\n    width_bucket(operand_num, 2, 8, 4) AS wb_3,\n    width_bucket(operand_f8, 2, 8, 4) AS wb_3f,\n    width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,\n    width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,\n    width_bucket(operand_num, -25, 25, 10) AS wb_5,\n    width_bucket(operand_f8, -25, 25, 10) AS wb_5f\n    FROM width_bucket_test;\n\n-- for float8 only, check positive and negative infinity: we require\n-- finite bucket bounds, but allow an infinite operand\n--Testcase 510:\nDELETE FROM width_bucket_tbl;\n-- postgres does not support insert 'Infinity' and '-Infinity' as numeric.\n--Testcase 632:\nINSERT INTO width_bucket_tbl VALUES (0.0, 0.0, 5, 10);\n--Testcase 633:\nSELECT width_bucket(id1::float8, 'Infinity'::float8, id3, id4) FROM width_bucket_tbl;  -- error\n\n--Testcase 511:\nDELETE FROM width_bucket_tbl;\n--Testcase 634:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, 0.0, 20);\n--Testcase 635:\nSELECT width_bucket(id1::float8, id2, 'Infinity'::float8, id4) FROM width_bucket_tbl; -- error\n--Testcase 512:\nDELETE FROM width_bucket_tbl;\n--Testcase 636:\nINSERT INTO width_bucket_tbl VALUES (0.0, 1, 10, 10);\n--Testcase 637:\nSELECT width_bucket('Infinity'::float8, id2, id3, id4), width_bucket('-Infinity'::float8, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 638:\nDROP FOREIGN TABLE width_bucket_test;\n-- TO_CHAR()\n--\n--Testcase 513:\nSELECT '' AS to_char_1, to_char(val, '9G999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 514:\nSELECT '' AS to_char_2, to_char(val, '9G999G999G999G999G999D999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 515:\nSELECT '' AS to_char_3, to_char(val, '9999999999999999.999999999999999PR')\n\tFROM num_data;\n\n--Testcase 516:\nSELECT '' AS to_char_4, to_char(val, '9999999999999999.999999999999999S')\n\tFROM num_data;\n\n--Testcase 517:\nSELECT '' AS to_char_5,  to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;\n--Testcase 518:\nSELECT '' AS to_char_6,  to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;\n--Testcase 519:\nSELECT '' AS to_char_7,  to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;\n--Testcase 520:\nSELECT '' AS to_char_8,  to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;\n--Testcase 521:\nSELECT '' AS to_char_9,  to_char(val, '0999999999999999.999999999999999')       FROM num_data;\n--Testcase 522:\nSELECT '' AS to_char_10, to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;\n--Testcase 523:\nSELECT '' AS to_char_11, to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;\n--Testcase 524:\nSELECT '' AS to_char_12, to_char(val, 'FM9999999999999999.099999999999999') \tFROM num_data;\n--Testcase 525:\nSELECT '' AS to_char_13, to_char(val, 'FM9999999999990999.990999999999999') \tFROM num_data;\n--Testcase 526:\nSELECT '' AS to_char_14, to_char(val, 'FM0999999999999999.999909999999999') \tFROM num_data;\n--Testcase 527:\nSELECT '' AS to_char_15, to_char(val, 'FM9999999990999999.099999999999999') \tFROM num_data;\n--Testcase 528:\nSELECT '' AS to_char_16, to_char(val, 'L9999999999999999.099999999999999')\tFROM num_data;\n--Testcase 529:\nSELECT '' AS to_char_17, to_char(val, 'FM9999999999999999.99999999999999')\tFROM num_data;\n--Testcase 530:\nSELECT '' AS to_char_18, to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 531:\nSELECT '' AS to_char_19, to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 532:\nSELECT '' AS to_char_20, to_char(val, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM num_data;\n--Testcase 533:\nSELECT '' AS to_char_21, to_char(val, '999999SG9999999999')\t\t\tFROM num_data;\n--Testcase 534:\nSELECT '' AS to_char_22, to_char(val, 'FM9999999999999999.999999999999999')\tFROM num_data;\n--Testcase 535:\nSELECT '' AS to_char_23, to_char(val, '9.999EEEE')\t\t\t\tFROM num_data;\n\n--Testcase 536:\nDELETE FROM ceil_floor_round;\n--Testcase 537:\nINSERT INTO ceil_floor_round VALUES ('100'::numeric);\n--Testcase 538:\nSELECT '' AS to_char_24, to_char(a, 'FM999.9') FROM ceil_floor_round;\n--Testcase 539:\nSELECT '' AS to_char_25, to_char(a, 'FM999.') FROM ceil_floor_round;\n--Testcase 540:\nSELECT '' AS to_char_26, to_char(a, 'FM999') FROM ceil_floor_round;\n\n-- Check parsing of literal text in a format string\n--Testcase 541:\nSELECT '' AS to_char_27, to_char(a, 'foo999') FROM ceil_floor_round;\n--Testcase 542:\nSELECT '' AS to_char_28, to_char(a, 'f\\oo999') FROM ceil_floor_round;\n--Testcase 543:\nSELECT '' AS to_char_29, to_char(a, 'f\\\\oo999') FROM ceil_floor_round;\n--Testcase 544:\nSELECT '' AS to_char_30, to_char(a, 'f\\\"oo999') FROM ceil_floor_round;\n--Testcase 545:\nSELECT '' AS to_char_31, to_char(a, 'f\\\\\"oo999') FROM ceil_floor_round;\n--Testcase 546:\nSELECT '' AS to_char_32, to_char(a, 'f\"ool\"999') FROM ceil_floor_round;\n--Testcase 547:\nSELECT '' AS to_char_33, to_char(a, 'f\"\\ool\"999') FROM ceil_floor_round;\n--Testcase 548:\nSELECT '' AS to_char_34, to_char(a, 'f\"\\\\ool\"999') FROM ceil_floor_round;\n--Testcase 549:\nSELECT '' AS to_char_35, to_char(a, 'f\"ool\\\"999') FROM ceil_floor_round;\n--Testcase 550:\nSELECT '' AS to_char_36, to_char(a, 'f\"ool\\\\\"999') FROM ceil_floor_round;\n\n-- TO_NUMBER()\n--\n--Testcase 639:\ncreate foreign table to_number_tbl (a text, id int options (key 'true')) server sqlite_svr;\nSET lc_numeric = 'C';\n--Testcase 640:\nDELETE FROM to_number_tbl;\n--Testcase 641:\nINSERT INTO to_number_tbl VALUES ('-34,338,492');\n--Testcase 642:\nSELECT '' AS to_number_1,  to_number(a, '99G999G999') FROM to_number_tbl;\n\n--Testcase 643:\nDELETE FROM to_number_tbl;\n--Testcase 644:\nINSERT INTO to_number_tbl VALUES ('-34,338,492.654,878');\n--Testcase 645:\nSELECT '' AS to_number_2,  to_number(a, '99G999G999D999G999') FROM to_number_tbl;\n\n--Testcase 646:\nDELETE FROM to_number_tbl;\n--Testcase 647:\nINSERT INTO to_number_tbl VALUES ('<564646.654564>');\n--Testcase 648:\nSELECT '' AS to_number_3,  to_number(a, '999999.999999PR') FROM to_number_tbl;\n\n--Testcase 649:\nDELETE FROM to_number_tbl;\n--Testcase 650:\nINSERT INTO to_number_tbl VALUES ('0.00001-');\n--Testcase 651:\nSELECT '' AS to_number_4,  to_number(a, '9.999999S') FROM to_number_tbl;\n\n--Testcase 652:\nDELETE FROM to_number_tbl;\n--Testcase 653:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 654:\nSELECT '' AS to_number_5,  to_number(a, 'FM9.999999S') FROM to_number_tbl;\n\n--Testcase 655:\nDELETE FROM to_number_tbl;\n--Testcase 656:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 657:\nSELECT '' AS to_number_5,  to_number(a, 'FM9.999999MI') FROM to_number_tbl;\n\n--Testcase 658:\nDELETE FROM to_number_tbl;\n--Testcase 659:\nINSERT INTO to_number_tbl VALUES ('5 4 4 4 4 8 . 7 8');\n--Testcase 660:\nSELECT '' AS to_number_7,  to_number(a, '9 9 9 9 9 9 . 9 9') FROM to_number_tbl;\n\n--Testcase 661:\nDELETE FROM to_number_tbl;\n--Testcase 662:\nINSERT INTO to_number_tbl VALUES ('.01');\n--Testcase 663:\nSELECT '' AS to_number_8,  to_number(a, 'FM9.99') FROM to_number_tbl;\n\n--Testcase 664:\nDELETE FROM to_number_tbl;\n--Testcase 665:\nINSERT INTO to_number_tbl VALUES ('.0');\n--Testcase 666:\nSELECT '' AS to_number_9,  to_number(a, '99999999.99999999') FROM to_number_tbl;\n\n--Testcase 667:\nDELETE FROM to_number_tbl;\n--Testcase 668:\nINSERT INTO to_number_tbl VALUES ('0');\n--Testcase 669:\nSELECT '' AS to_number_10, to_number(a, '99.99') FROM to_number_tbl;\n\n--Testcase 670:\nDELETE FROM to_number_tbl;\n--Testcase 671:\nINSERT INTO to_number_tbl VALUES ('.-01');\n--Testcase 672:\nSELECT '' AS to_number_11, to_number(a, 'S99.99') FROM to_number_tbl;\n\n--Testcase 673:\nDELETE FROM to_number_tbl;\n--Testcase 674:\nINSERT INTO to_number_tbl VALUES ('.01-');\n--Testcase 675:\nSELECT '' AS to_number_12, to_number(a, '99.99S') FROM to_number_tbl;\n\n--Testcase 676:\nDELETE FROM to_number_tbl;\n--Testcase 677:\nINSERT INTO to_number_tbl VALUES (' . 0 1-');\n--Testcase 678:\nSELECT '' AS to_number_13, to_number(a, ' 9 9 . 9 9 S') FROM to_number_tbl;\n\n--Testcase 679:\nDELETE FROM to_number_tbl;\n--Testcase 680:\nINSERT INTO to_number_tbl VALUES ('34,50');\n--Testcase 681:\nSELECT '' AS to_number_14, to_number(a,'999,99') FROM to_number_tbl;\n\n--Testcase 682:\nDELETE FROM to_number_tbl;\n--Testcase 683:\nINSERT INTO to_number_tbl VALUES ('123,000');\n--Testcase 684:\nSELECT '' AS to_number_15, to_number(a,'999G') FROM to_number_tbl;\n\n--Testcase 685:\nDELETE FROM to_number_tbl;\n--Testcase 686:\nINSERT INTO to_number_tbl VALUES ('123456');\n--Testcase 687:\nSELECT '' AS to_number_16, to_number(a,'999G999') FROM to_number_tbl;\n\n--Testcase 688:\nDELETE FROM to_number_tbl;\n--Testcase 689:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 690:\nSELECT '' AS to_number_17, to_number(a,'L9,999.99') FROM to_number_tbl;\n\n--Testcase 691:\nDELETE FROM to_number_tbl;\n--Testcase 692:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 693:\nSELECT '' AS to_number_18, to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 694:\nDELETE FROM to_number_tbl;\n--Testcase 695:\nINSERT INTO to_number_tbl VALUES ('$1,234.56');\n--Testcase 696:\nSELECT '' AS to_number_19, to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 697:\nDELETE FROM to_number_tbl;\n--Testcase 698:\nINSERT INTO to_number_tbl VALUES ('1234.56');\n--Testcase 699:\nSELECT '' AS to_number_20, to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 700:\nDELETE FROM to_number_tbl;\n--Testcase 701:\nINSERT INTO to_number_tbl VALUES ('1,234.56');\n--Testcase 702:\nSELECT '' AS to_number_21, to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 703:\nDELETE FROM to_number_tbl;\n--Testcase 704:\nINSERT INTO to_number_tbl VALUES ('42nd');\n--Testcase 705:\nSELECT '' AS to_number_22, to_number(a, '99th') FROM to_number_tbl;\n\nRESET lc_numeric;\n--\n-- Input syntax\n--\n\n--Testcase 706:\nCREATE FOREIGN TABLE num_input_test (n1 numeric) SERVER sqlite_svr;\n\n-- good inputs\n--Testcase 551:\nINSERT INTO num_input_test(n1) VALUES (' 123');\n--Testcase 552:\nINSERT INTO num_input_test(n1) VALUES ('   3245874    ');\n--Testcase 553:\nINSERT INTO num_input_test(n1) VALUES ('  -93853');\n--Testcase 554:\nINSERT INTO num_input_test(n1) VALUES ('555.50');\n--Testcase 555:\nINSERT INTO num_input_test(n1) VALUES ('-555.50');\n--Testcase 556:\nINSERT INTO num_input_test(n1) VALUES ('NaN ');\n--Testcase 557:\nINSERT INTO num_input_test(n1) VALUES ('        nan');\n\n-- bad inputs\n--Testcase 558:\nINSERT INTO num_input_test(n1) VALUES ('     ');\n--Testcase 559:\nINSERT INTO num_input_test(n1) VALUES ('   1234   %');\n--Testcase 560:\nINSERT INTO num_input_test(n1) VALUES ('xyz');\n--Testcase 561:\nINSERT INTO num_input_test(n1) VALUES ('- 1234');\n--Testcase 562:\nINSERT INTO num_input_test(n1) VALUES ('5 . 0');\n--Testcase 563:\nINSERT INTO num_input_test(n1) VALUES ('5. 0   ');\n--Testcase 564:\nINSERT INTO num_input_test(n1) VALUES ('');\n--Testcase 565:\nINSERT INTO num_input_test(n1) VALUES (' N aN ');\n\n--Testcase 566:\nSELECT * FROM num_input_test;\n\n--\n-- Test some corner cases for multiplication\n--\n--Testcase 707:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO num_tmp VALUES (4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 709:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 710:\nDELETE FROM num_tmp;\n--Testcase 711:\nINSERT INTO num_tmp VALUES (4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 712:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 713:\nDELETE FROM num_tmp;\n--Testcase 714:\nINSERT INTO num_tmp VALUES (4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 715:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 716:\nDELETE FROM num_tmp;\n--Testcase 717:\nINSERT INTO num_tmp VALUES (4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 718:\nSELECT n1 * n2 FROM num_tmp;\n\n--\n-- Test some corner cases for division\n--\n--Testcase 719:\nDELETE FROM num_tmp;\n--Testcase 720:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 721:\nSELECT n1::numeric / n2 FROM num_tmp;\n\n--Testcase 722:\nDELETE FROM num_tmp;\n--Testcase 723:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 724:\nSELECT div(n1::numeric, n2) FROM num_tmp;\n--Testcase 725:\nSELECT mod(n1::numeric, n2) FROM num_tmp;\n--Testcase 726:\nSELECT div(-n1::numeric, n2) FROM num_tmp;\n--Testcase 727:\nSELECT mod(-n1::numeric, n2) FROM num_tmp;\n--Testcase 728:\nselect div(-n1::numeric,n2)*n2 + mod(-n1::numeric,n2) FROM num_tmp;\n\n--Testcase 729:\nDELETE FROM num_tmp;\n--Testcase 730:\nINSERT INTO num_tmp VALUES (70.0,70);\n--Testcase 731:\nselect mod (n1, n2) FROM num_tmp;\n--Testcase 732:\nselect div (n1, n2) FROM num_tmp;\n--Testcase 733:\nselect n1 / n2 FROM num_tmp;\n\n--Testcase 734:\nDELETE FROM num_tmp;\n--Testcase 735:\nINSERT INTO num_tmp VALUES (12345678901234567890, 123);\n--Testcase 736:\nselect n1 % n2 FROM num_tmp;\n--Testcase 737:\nselect n1 / n2 FROM num_tmp;\n--Testcase 738:\nselect div(n1, n2) FROM num_tmp;\n--Testcase 739:\nselect div(n1, n2) * n2 + n1 % n2 FROM num_tmp;\n\n--\n-- Test some corner cases for square root\n--\n--Testcase 740:\nDELETE FROM num_tmp;\n--Testcase 741:\nINSERT INTO num_tmp VALUES (1.000000000000003::numeric);\n--Testcase 742:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 743:\nDELETE FROM num_tmp;\n--Testcase 744:\nINSERT INTO num_tmp VALUES (1.000000000000004::numeric);\n--Testcase 745:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 746:\nDELETE FROM num_tmp;\n--Testcase 747:\nINSERT INTO num_tmp VALUES (96627521408608.56340355805::numeric);\n--Testcase 748:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 749:\nDELETE FROM num_tmp;\n--Testcase 750:\nINSERT INTO num_tmp VALUES (96627521408608.56340355806::numeric);\n--Testcase 751:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 752:\nDELETE FROM num_tmp;\n--Testcase 753:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290367::numeric);\n--Testcase 754:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 755:\nDELETE FROM num_tmp;\n--Testcase 756:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290368::numeric);\n--Testcase 757:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 758:\nDELETE FROM num_tmp;\n--Testcase 759:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900306::numeric);\n--Testcase 760:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 761:\nDELETE FROM num_tmp;\n--Testcase 762:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900307::numeric);\n--Testcase 763:\nSELECT sqrt(n1) FROM num_tmp;\n\n--\n-- Test code path for raising to integer powers\n--\n--Testcase 764:\nDELETE FROM num_tmp;\n--Testcase 765:\nINSERT INTO num_tmp VALUES (10.0, -2147483648);\n--Testcase 766:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 767:\nDELETE FROM num_tmp;\n--Testcase 768:\nINSERT INTO num_tmp VALUES (10.0, -2147483647);\n--Testcase 769:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 770:\nDELETE FROM num_tmp;\n--Testcase 771:\nINSERT INTO num_tmp VALUES (10.0, 2147483647);\n--Testcase 772:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n--Testcase 773:\nDELETE FROM num_tmp;\n--Testcase 774:\nINSERT INTO num_tmp VALUES (117743296169.0, -1000000000);\n--Testcase 775:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n-- cases that used to return inaccurate results\n\n--Testcase 776:\nDELETE FROM num_tmp;\n--Testcase 777:\nINSERT INTO num_tmp VALUES (3.789, 21);\n--Testcase 778:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 779:\nDELETE FROM num_tmp;\n--Testcase 780:\nINSERT INTO num_tmp VALUES (3.789, 35);\n--Testcase 781:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 782:\nDELETE FROM num_tmp;\n--Testcase 783:\nINSERT INTO num_tmp VALUES (1.2, 345);\n--Testcase 784:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 785:\nDELETE FROM num_tmp;\n--Testcase 786:\nINSERT INTO num_tmp VALUES (0.12, (-20));\n--Testcase 787:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to error out\n--Testcase 788:\nDELETE FROM num_tmp;\n--Testcase 789:\nINSERT INTO num_tmp VALUES (0.12, (-25));\n--Testcase 790:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 791:\nDELETE FROM num_tmp;\n--Testcase 792:\nINSERT INTO num_tmp VALUES (0.5678, (-85));\n--Testcase 793:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for raising to non-integer powers\n--\n\n-- special cases\n--Testcase 794:\nDELETE FROM num_tmp;\n--Testcase 795:\nINSERT INTO num_tmp VALUES (0.0, 0.0);\n--Testcase 796:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 797:\nDELETE FROM num_tmp;\n--Testcase 798:\nINSERT INTO num_tmp VALUES ((-12.34), 0.0);\n--Testcase 799:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 800:\nDELETE FROM num_tmp;\n--Testcase 801:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 802:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 803:\nDELETE FROM num_tmp;\n--Testcase 804:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 805:\nselect n1 ^ n2 FROM num_tmp;\n\n-- NaNs\n--Testcase 806:\nDELETE FROM num_tmp;\n--Testcase 807:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 'NaN'::numeric);\n--Testcase 808:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 809:\nDELETE FROM num_tmp;\n--Testcase 810:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 0);\n--Testcase 811:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 812:\nDELETE FROM num_tmp;\n--Testcase 813:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 1);\n--Testcase 814:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 815:\nDELETE FROM num_tmp;\n--Testcase 816:\nINSERT INTO num_tmp VALUES (0, 'NaN'::numeric);\n--Testcase 817:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 818:\nDELETE FROM num_tmp;\n--Testcase 819:\nINSERT INTO num_tmp VALUES (1, 'NaN'::numeric);\n--Testcase 820:\nselect n1 ^ n2 FROM num_tmp;\n\n-- invalid inputs\n--Testcase 821:\nDELETE FROM num_tmp;\n--Testcase 822:\nINSERT INTO num_tmp VALUES (0.0, (-12.34));\n--Testcase 823:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 824:\nDELETE FROM num_tmp;\n--Testcase 825:\nINSERT INTO num_tmp VALUES ((-12.34), 1.2);\n--Testcase 826:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 827:\nDELETE FROM num_tmp;\n--Testcase 828:\nINSERT INTO num_tmp VALUES (32.1, 9.8);\n--Testcase 829:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 830:\nDELETE FROM num_tmp;\n--Testcase 831:\nINSERT INTO num_tmp VALUES (32.1, (-9.8));\n--Testcase 832:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 833:\nDELETE FROM num_tmp;\n--Testcase 834:\nINSERT INTO num_tmp VALUES (12.3, 45.6);\n--Testcase 835:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 836:\nDELETE FROM num_tmp;\n--Testcase 837:\nINSERT INTO num_tmp VALUES (12.3, (-45.6));\n--Testcase 838:\nselect n1 ^ n2 FROM num_tmp;\n\n-- big test\n--Testcase 839:\nDELETE FROM num_tmp;\n--Testcase 840:\nINSERT INTO num_tmp VALUES (1.234, 5678);\n--Testcase 841:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for EXP()\n--\n\n-- special cases\n--Testcase 842:\nDELETE FROM num_tmp;\n--Testcase 843:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 844:\nselect exp(n1) from num_tmp;\n\n--Testcase 845:\nDELETE FROM num_tmp;\n--Testcase 846:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 847:\nselect exp(n1) from num_tmp;\n\n--Testcase 848:\nDELETE FROM num_tmp;\n--Testcase 849:\nINSERT INTO num_tmp VALUES (1.0::numeric(71,70));\n--Testcase 850:\nselect exp(n1) from num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 851:\nDELETE FROM num_tmp;\n--Testcase 852:\nINSERT INTO num_tmp VALUES (32.999);\n--Testcase 853:\nselect exp(n1) from num_tmp;\n\n--Testcase 854:\nDELETE FROM num_tmp;\n--Testcase 855:\nINSERT INTO num_tmp VALUES (-32.999);\n--Testcase 856:\nselect exp(n1) from num_tmp;\n\n--Testcase 857:\nDELETE FROM num_tmp;\n--Testcase 858:\nINSERT INTO num_tmp VALUES (123.456);\n--Testcase 859:\nselect exp(n1) from num_tmp;\n\n--Testcase 860:\nDELETE FROM num_tmp;\n--Testcase 861:\nINSERT INTO num_tmp VALUES (-123.456);\n--Testcase 862:\nselect exp(n1) from num_tmp;\n\n-- big test\n--Testcase 863:\nDELETE FROM num_tmp;\n--Testcase 864:\nINSERT INTO num_tmp VALUES (1234.5678);\n--Testcase 865:\nselect exp(n1) from num_tmp;\n\n--\n-- Tests for generate_series\n--\n--Testcase 866:\nDELETE FROM num_tmp;\n--Testcase 867:\nINSERT INTO num_tmp select * from generate_series(0.0::numeric, 4.0::numeric);\n--Testcase 868:\nSELECT n1 FROM num_tmp;\n\n--Testcase 869:\nDELETE FROM num_tmp;\n--Testcase 870:\nINSERT INTO num_tmp select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);\n--Testcase 871:\nSELECT n1 FROM num_tmp;\n\n--Testcase 872:\nDELETE FROM num_tmp;\n--Testcase 873:\nINSERT INTO num_tmp select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);\n--Testcase 874:\nSELECT n1 FROM num_tmp;\n\n-- Trigger errors\n--Testcase 875:\nDELETE FROM num_tmp;\n--Testcase 876:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 0::numeric);\n--Testcase 877:\nSELECT n1 FROM num_tmp;\n\n--Testcase 878:\nDELETE FROM num_tmp;\n--Testcase 879:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);\n--Testcase 880:\nSELECT n1 FROM num_tmp;\n\n--Testcase 881:\nDELETE FROM num_tmp;\n--Testcase 882:\nINSERT INTO num_tmp select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);\n--Testcase 883:\nSELECT n1 FROM num_tmp;\n\n--Testcase 884:\nDELETE FROM num_tmp;\n--Testcase 885:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);\n--Testcase 886:\nSELECT n2 FROM num_tmp;\n-- Checks maximum, output is truncated\n--Testcase 887:\nDELETE FROM num_tmp;\n--Testcase 888:\nINSERT INTO num_tmp select (i / (10::numeric ^ 131071))::numeric(1,0)\n        from generate_series(6 * (10::numeric ^ 131071),\n                             9 * (10::numeric ^ 131071),\n                             10::numeric ^ 131071) i;\n--Testcase 889:\nSELECT n1 FROM num_tmp;\n                            \n-- Check usage with variables\n--Testcase 890:\nDELETE FROM num_tmp;\n--Testcase 891:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;\n--Testcase 892:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 893:\nDELETE FROM num_tmp;\n--Testcase 894:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;\n--Testcase 895:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 896:\nDELETE FROM num_tmp;\n--Testcase 897:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;\n--Testcase 898:\nSELECT n1, n2 FROM num_tmp;\n\n--\n-- Tests for LN()\n--\n\n-- Invalid inputs\n--Testcase 899:\nDELETE FROM num_tmp;\n--Testcase 900:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 901:\nselect ln(n1) from num_tmp;\n\n--Testcase 902:\nDELETE FROM num_tmp;\n--Testcase 903:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 904:\nselect ln(n1) from num_tmp;\n\n-- Some random tests\n--Testcase 905:\nDELETE FROM num_tmp;\n--Testcase 906:\nINSERT INTO num_tmp VALUES (1.2345678e-28);\n--Testcase 907:\nselect ln(n1) from num_tmp;\n\n--Testcase 908:\nDELETE FROM num_tmp;\n--Testcase 909:\nINSERT INTO num_tmp VALUES (0.0456789);\n--Testcase 910:\nselect ln(n1) from num_tmp;\n\n--Testcase 911:\nDELETE FROM num_tmp;\n--Testcase 912:\nINSERT INTO num_tmp VALUES (0.349873948359354029493948309745709580730482050975);\n--Testcase 913:\nselect ln(n1) from num_tmp;\n\n--Testcase 914:\nDELETE FROM num_tmp;\n--Testcase 915:\nINSERT INTO num_tmp VALUES (0.99949452);\n--Testcase 916:\nselect ln(n1) from num_tmp;\n\n--Testcase 917:\nDELETE FROM num_tmp;\n--Testcase 918:\nINSERT INTO num_tmp VALUES (1.00049687395);\n--Testcase 919:\nselect ln(n1) from num_tmp;\n\n--Testcase 920:\nDELETE FROM num_tmp;\n--Testcase 921:\nINSERT INTO num_tmp VALUES (1234.567890123456789);\n--Testcase 922:\nselect ln(n1) from num_tmp;\n\n--Testcase 923:\nDELETE FROM num_tmp;\n--Testcase 924:\nINSERT INTO num_tmp VALUES (5.80397490724e5);\n--Testcase 925:\nselect ln(n1) from num_tmp;\n\n--Testcase 926:\nDELETE FROM num_tmp;\n--Testcase 927:\nINSERT INTO num_tmp VALUES (9.342536355e34);\n--Testcase 928:\nselect ln(n1) from num_tmp;\n\n--\n-- Tests for LOG() (base 10)\n--\n\n-- invalid inputs\n--Testcase 929:\nDELETE FROM num_tmp;\n--Testcase 930:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 931:\nselect log(n1) from num_tmp;\n\n--Testcase 932:\nDELETE FROM num_tmp;\n--Testcase 933:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 934:\nselect log(n1) from num_tmp;\n\n-- some random tests\n--Testcase 935:\nDELETE FROM num_tmp;\n--Testcase 936:\nINSERT INTO num_tmp VALUES (1.234567e-89);\n--Testcase 937:\nselect log(n1) from num_tmp;\n\n--Testcase 938:\nDELETE FROM num_tmp;\n--Testcase 939:\nINSERT INTO num_tmp VALUES (3.4634998359873254962349856073435545);\n--Testcase 940:\nselect log(n1) from num_tmp;\n\n--Testcase 941:\nDELETE FROM num_tmp;\n--Testcase 942:\nINSERT INTO num_tmp VALUES (9.999999999999999999);\n--Testcase 943:\nselect log(n1) from num_tmp;\n\n--Testcase 944:\nDELETE FROM num_tmp;\n--Testcase 945:\nINSERT INTO num_tmp VALUES (10.00000000000000000);\n--Testcase 946:\nselect log(n1) from num_tmp;\n\n--Testcase 947:\nDELETE FROM num_tmp;\n--Testcase 948:\nINSERT INTO num_tmp VALUES (10.00000000000000001);\n--Testcase 949:\nselect log(n1) from num_tmp;\n\n--Testcase 950:\nDELETE FROM num_tmp;\n--Testcase 951:\nINSERT INTO num_tmp VALUES (590489.45235237);\n--Testcase 952:\nselect log(n1) from num_tmp;\n\n--\n-- Tests for LOG() (arbitrary base)\n--\n\n-- invalid inputs\n--Testcase 953:\nDELETE FROM num_tmp;\n--Testcase 954:\nINSERT INTO num_tmp VALUES (-12.34, 56.78);\n--Testcase 955:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 956:\nDELETE FROM num_tmp;\n--Testcase 957:\nINSERT INTO num_tmp VALUES (-12.34, -56.78);\n--Testcase 958:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 959:\nDELETE FROM num_tmp;\n--Testcase 960:\nINSERT INTO num_tmp VALUES (12.34, -56.78);\n--Testcase 961:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 962:\nDELETE FROM num_tmp;\n--Testcase 963:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 964:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 965:\nDELETE FROM num_tmp;\n--Testcase 966:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 967:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 968:\nDELETE FROM num_tmp;\n--Testcase 969:\nINSERT INTO num_tmp VALUES (.0, 12.34);\n--Testcase 970:\nselect log(n1, n2) from num_tmp;\n\n-- some random tests\n--Testcase 971:\nDELETE FROM num_tmp;\n--Testcase 972:\nINSERT INTO num_tmp VALUES (1.23e-89, 6.4689e45);\n--Testcase 973:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 974:\nDELETE FROM num_tmp;\n--Testcase 975:\nINSERT INTO num_tmp VALUES (0.99923, 4.58934e34);\n--Testcase 976:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 977:\nDELETE FROM num_tmp;\n--Testcase 978:\nINSERT INTO num_tmp VALUES (1.000016, 8.452010e18);\n--Testcase 979:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 980:\nDELETE FROM num_tmp;\n--Testcase 981:\nINSERT INTO num_tmp VALUES (3.1954752e47, 9.4792021e-73);\n--Testcase 982:\nselect log(n1, n2) from num_tmp;\n\n--\n-- Tests for scale()\n--\n--Testcase 983:\nDELETE FROM num_tmp;\n--Testcase 984:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 985:\nselect scale(n1) from num_tmp;\n\n--Testcase 986:\nDELETE FROM num_tmp;\n--Testcase 987:\nINSERT INTO num_tmp VALUES (NULL::numeric);\n--Testcase 988:\nselect scale(n1) from num_tmp;\n\n--Testcase 989:\nDELETE FROM num_tmp;\n--Testcase 990:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 991:\nselect scale(n1) from num_tmp;\n\n--Testcase 992:\nDELETE FROM num_tmp;\n--Testcase 993:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 994:\nselect scale(n1) from num_tmp;\n\n--Testcase 995:\nDELETE FROM num_tmp;\n--Testcase 996:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 997:\nselect scale(n1) from num_tmp;\n\n--Testcase 998:\nDELETE FROM num_tmp;\n--Testcase 999:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1000:\nselect scale(n1) from num_tmp;\n\n--Testcase 1001:\nDELETE FROM num_tmp;\n--Testcase 1002:\nINSERT INTO num_tmp VALUES (110123.12475871856128);\n--Testcase 1003:\nselect scale(n1) from num_tmp;\n\n--Testcase 1004:\nDELETE FROM num_tmp;\n--Testcase 1005:\nINSERT INTO num_tmp VALUES (-1123.12471856128);\n--Testcase 1006:\nselect scale(n1) from num_tmp;\n\n--Testcase 1007:\nDELETE FROM num_tmp;\n--Testcase 1008:\nINSERT INTO num_tmp VALUES (-13.000000000000000);\n--Testcase 1009:\nselect scale(n1) from num_tmp;\n\n--\n-- Tests for min_scale()\n--\n--Testcase 1010:\nDELETE FROM num_tmp;\n--Testcase 1011:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1012:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1013:\nDELETE FROM num_tmp;\n--Testcase 1014:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1015:\nselect min_scale(n1) from num_tmp;                     -- no digits\n\n--Testcase 1016:\nDELETE FROM num_tmp;\n--Testcase 1017:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1018:\nselect min_scale(n1) from num_tmp;                  -- no digits again\n\n--Testcase 1019:\nDELETE FROM num_tmp;\n--Testcase 1020:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 1021:\nselect min_scale(n1) from num_tmp;                   -- no scale\n\n--Testcase 1022:\nDELETE FROM num_tmp;\n--Testcase 1023:\nINSERT INTO num_tmp VALUES (1.1);\n--Testcase 1024:\nselect min_scale(n1) from num_tmp;                   -- scale 1\n\n--Testcase 1025:\nDELETE FROM num_tmp;\n--Testcase 1026:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 1027:\nselect min_scale(n1) from num_tmp;                  -- scale 2\n\n--Testcase 1028:\nDELETE FROM num_tmp;\n--Testcase 1029:\nINSERT INTO num_tmp VALUES (1.123);\n--Testcase 1030:\nselect min_scale(n1) from num_tmp;                 -- scale 3\n\n--Testcase 1031:\nDELETE FROM num_tmp;\n--Testcase 1032:\nINSERT INTO num_tmp VALUES (1.1234);\n--Testcase 1033:\nselect min_scale(n1) from num_tmp;                -- scale 4, filled digit\n\n--Testcase 1034:\nDELETE FROM num_tmp;\n--Testcase 1035:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1036:\nselect min_scale(n1) from num_tmp;               -- scale 5, 2 NDIGITS\n\n--Testcase 1037:\nDELETE FROM num_tmp;\n--Testcase 1038:\nINSERT INTO num_tmp VALUES (1.1000);\n--Testcase 1039:\nselect min_scale(n1) from num_tmp;                -- 1 pos in NDIGITS\n\n--Testcase 1040:\nDELETE FROM num_tmp;\n--Testcase 1041:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1042:\nselect min_scale(n1) from num_tmp;                 -- very big number\n\n--\n-- Tests for trim_scale()\n--\n--Testcase 1043:\nDELETE FROM num_tmp;\n--Testcase 1044:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1045:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1046:\nDELETE FROM num_tmp;\n--Testcase 1047:\nINSERT INTO num_tmp VALUES (1.120);\n--Testcase 1048:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1049:\nDELETE FROM num_tmp;\n--Testcase 1050:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1051:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1052:\nDELETE FROM num_tmp;\n--Testcase 1053:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1054:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1055:\nDELETE FROM num_tmp;\n--Testcase 1056:\nINSERT INTO num_tmp VALUES (1.1234500);\n--Testcase 1057:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1058:\nDELETE FROM num_tmp;\n--Testcase 1059:\nINSERT INTO num_tmp VALUES (110123.12475871856128000);\n--Testcase 1060:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1061:\nDELETE FROM num_tmp;\n--Testcase 1062:\nINSERT INTO num_tmp VALUES (-123.124718561280000000);\n--Testcase 1063:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1064:\nDELETE FROM num_tmp;\n--Testcase 1065:\nINSERT INTO num_tmp VALUES (-13.00000000000000000000);\n--Testcase 1066:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1067:\nDELETE FROM num_tmp;\n--Testcase 1068:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1069:\nselect trim_scale(n1) from num_tmp;\n\n--\n-- Tests for SUM()\n--\n\n-- cases that need carry propagation\n--Testcase 1070:\nDELETE FROM num_tmp;\n--Testcase 1071:\nINSERT INTO num_tmp SELECT * FROM generate_series(1, 100000);\n--Testcase 1072:\nSELECT SUM(9999::numeric) FROM num_tmp;\n--Testcase 1073:\nSELECT SUM((-9999)::numeric) FROM num_tmp;\n\n--\n-- Tests for GCD()\n--\n--Testcase 1074:\nDELETE FROM num_tmp;\n--Testcase 1075:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 46375::numeric),\n             (433125::numeric, 46375::numeric),\n             (43312.5::numeric, 4637.5::numeric),\n             (4331.250::numeric, 463.75000::numeric);\n--Testcase 1076:\nSELECT n1 as a, n2 as b, gcd(n1, n2), gcd(n1, -n2), gcd(-n2, n1), gcd(-n2, -n1) FROM num_tmp;\n--\n-- Tests for LCM()\n--\n--Testcase 1077:\nDELETE FROM num_tmp;\n--Testcase 1078:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 13272::numeric),\n             (13272::numeric, 13272::numeric),\n             (423282::numeric, 13272::numeric),\n             (42328.2::numeric, 1327.2::numeric),\n             (4232.820::numeric, 132.72000::numeric);\n--Testcase 1079:\nSELECT n1 as a, n2 as b, lcm(n1, n2), lcm(n1, -n2), lcm(-n2, n1), lcm(-n2, -n1) FROM num_tmp;\n\n--Testcase 1080:\nDELETE FROM num_tmp;\n--Testcase 1081:\nINSERT INTO num_tmp VALUES (10::numeric, 131068); \n--Testcase 1082:\nSELECT lcm(9999 * (n1)^n2 + (n1^n2 - 1), 2) FROM num_tmp; -- overflow\n\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 1083:\nDROP SERVER sqlite_svr;\n--Testcase 1084:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/out_of_range.sql",
    "content": "--\n-- INT4 + INT2\n--\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 02:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n\n--Testcase 03:\nDELETE FROM INT4_TMP;\n--Testcase 04:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 05:\nINSERT INTO INT4_TMP VALUES (x'7FFFFFFF'::int8 + 1, 0);\n--Testcase 06:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 07:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 08:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 09:\nDELETE FROM INT4_TMP;\n--Testcase 10:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 11:\nINSERT INTO INT4_TMP VALUES (-(x'7FFFFFFF'::int8) - 2, 0);\n--Testcase 12:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 13:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 14:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 15:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 16:\nCREATE FOREIGN TABLE INT2_TMP(f1 int2, f2 int2, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 17:\nDELETE FROM INT2_TMP;\n--Testcase 18:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 19:\nINSERT INTO INT2_TMP VALUES (x'7FFF'::int8 + 1, 0);\n--Testcase 20:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 21:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 22:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 23:\nDELETE FROM INT2_TMP;\n--Testcase 24:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 25:\nINSERT INTO INT2_TMP VALUES (-(x'7FFF'::int8) - 2, 0);\n--Testcase 26:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 27:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 28:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 29:\nCREATE FOREIGN TABLE INT8_TBL(q1 int8 OPTIONS (key 'true'), q2 int8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 31:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 32:\nINSERT INTO INT8_TBL VALUES (-9223372036854775810, 0);\n--Testcase 33:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 34:\nSELECT * FROM INT8_TBL; -- NO overflow\n--Testcase 35:\nSELECT q1 FROM INT8_TBL; -- NO overflow\n--Testcase 36:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 37:\nDELETE FROM INT8_TBL WHERE q1 = -9223372036854775810;\n--Testcase 38:\nINSERT INTO INT8_TBL VALUES (9223372036854775809, 0);\n--Testcase 39:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 40:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 41:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 42:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 43:\nDELETE FROM INT8_TBL WHERE q1 = 9223372036854775809;\n--Testcase 44:\nINSERT INTO INT8_TBL VALUES (10 * -9223372036854775810, 0);\n--Testcase 45:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 46:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 47:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 48:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 49:\nDELETE FROM INT8_TBL WHERE q1 = 10 * -9223372036854775810;\n--Testcase 50:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n\n--Testcase 003:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 004:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/timestamp.sql",
    "content": "--\n-- TIMESTAMP\n--\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 3:\nCREATE FOREIGN TABLE dates1 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number timestamp without time zone OPTIONS (column_type 'INT'))\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n--Testcase 4:\nCREATE FOREIGN TABLE dates2 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number double precision)\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n-- Showing timestamp column from SQLite value as TEXT and as INTEGER/FLOAT has same value\n--Testcase 5:\nSELECT name,\n\tto_char(date_as_text, \t'YYYY-MM-DD HH24:MI:SS.MS') as date_as_text, \n\tto_char(date_as_number, 'YYYY-MM-DD HH24:MI:SS.MS') as date_as_number\nFROM dates1;\n--Testcase 6:\nSELECT * FROM dates2;\n\n-- Comparing exact values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 7:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 8:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 9:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 10:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n-- Comparing greater values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 11:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 12:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 13:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 14:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 15:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 16:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 17:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 18:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--- Comparing without using to_timestamp\n--Testcase 19:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 20:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 21:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 22:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 23:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 24:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 25:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 26:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n-- Comparing greater values  without using to_timestamp\n\n\n--Testcase 27:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 28:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 29:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 30:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 31:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 32:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 33:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 34:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 35:\nDROP FOREIGN TABLE dates1;\n--Testcase 36:\nDROP FOREIGN TABLE dates2;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/types/uuid.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_UUID\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 012:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 013:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 014:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 015:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 016:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 017:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 018:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 019:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 020:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 021:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 022:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 023:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 024:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 025:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 026:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 029:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 030:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 031:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 032:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 033:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 034:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 035:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 036:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 037:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 038:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 039:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 040:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 041:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 042:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 043:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 044:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 045:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 046:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 047:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 048:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 049:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 050:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 051:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 052:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 053:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 054:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 056:\nCREATE FOREIGN TABLE \"type_UUID+\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');\n--Testcase 057:\nSELECT * FROM \"type_UUID+\";\n--Testcase 058:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 059:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 060:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 061:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 062:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 063:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 064:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 065:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 066:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 067:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 068:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 069:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 071:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 072:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 073:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 074:\nSELECT * FROM \"type_UUID+\";\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';\n--Testcase 076:\nSELECT * FROM \"type_UUID+\";\n--Testcase 077:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 077:\nSELECT * FROM \"type_UUID+\";\n--Testcase 078:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');\n--Testcase 079:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 41;\n--Testcase 080:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 081:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 082:\nSELECT * FROM \"type_UUID+\";\n--Testcase 083:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 086:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));\n--Testcase 087:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));\n--Testcase 088:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 089:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 42;\n--Testcase 090:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 43;\n--Testcase 091:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 092:\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 093:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (44, NULL);\n--Testcase 094:\nSELECT * FROM \"type_UUID+\";\n--Testcase 095:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 096:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n\n--Testcase 100:\nCREATE FOREIGN TABLE \"type_UUIDpk\" (col uuid OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 101:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (ADD column_type 'TEXT');\n--Testcase 102:\nINSERT INTO \"type_UUIDpk\" VALUES ('{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 103:\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 104:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 105: ERR - primary key\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 106:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 107: NO ERR, but the same semantics!\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 108:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 109:\nDELETE FROM \"type_UUIDpk\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/with_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/with_gis_support/postgis.sql",
    "content": "--Testcase 2:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 3:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 4:\nCREATE EXTENSION IF NOT EXISTS postgis;\n--Testcase 5:\nCREATE EXTENSION postgis_raster;\n--Testcase 6:\nCREATE EXTENSION postgis_topology;\n\n-- TEST GIS DATA FROM UNION ASTRONOMIQUE INTERNATIONAL (国際天文学連合): MARS, Olympus mons\n--Testcase 11:\nCREATE SCHEMA \"♂\";\n--Testcase 12:\nCREATE TABLE \"♂\".\"テスト\" (\n\tid int4 NULL,\n\t\"UAI\" varchar(254) NULL,\n\t\"⌖\" public.geometry(point, 104904) NULL,\n\tgeom public.geometry(geometry, 104904) NULL,\n\t\"t₀\" date NULL,\n\t\"class\" text NULL,\n\t\"URL\" varchar(80) NULL\n);\n--Testcase 13: ETC...\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(991, 'Olympus Mons', 'SRID=104904;POINT (226.19749330952843 18.652758890345698)'::geometry, 'SRID=104904;MULTIPOLYGON (((223.78717231750488 23.3314151763916, 224.22803688049316 23.324007034301758, 224.32436180114746 23.5648136138916, 224.7186985015869 23.593564987182617, 224.79486274719238 23.45737648010254, 225.06530570983887 23.238798141479492, 225.67255210876465 23.437196731567383, 226.2211856842041 23.6611385345459, 226.5472011566162 23.65372657775879, 227.6215763092041 23.435148239135742, 228.19009590148926 23.390283584594727, 228.753023147583 23.24955177307129, 228.90711784362793 23.1943416595459, 229.23219108581543 23.004926681518555, 229.5288143157959 22.75514030456543, 229.87227058410645 22.442903518676758, 230.2469539642334 22.14628028869629, 230.7309169769287 21.927717208862305, 231.30854988098145 21.64670753479004, 231.85495948791504 21.084684371948242, 232.19841957092285 19.88258171081543, 231.88618278503418 18.47752571105957, 231.30854988098145 17.743772506713867, 231.21887397766113 17.218599319458008, 231.17812156677246 16.751802444458008, 230.97346687316895 16.353670120239258, 230.8327350616455 15.947111129760742, 230.62945365905762 15.478002548217773, 230.4574489593506 15.352907180786133, 230.20748329162598 15.29954719543457, 229.99631309509277 15.036508560180664, 229.72586631774902 14.640104293823242, 229.41096305847168 14.377065658569336, 228.98862266540527 14.10291862487793, 228.74040412902832 13.854700088500977, 228.5107135772705 13.83247184753418, 228.31806755065918 13.962137222290039, 227.93990516662598 13.929948806762695, 227.36133766174316 13.883039474487305, 227.04734230041504 13.813947677612305, 226.68895149230957 13.851762771606445, 226.4101276397705 13.839879989624023, 226.06347465515137 13.632848739624023, 225.7766170501709 13.617597579956055, 225.32925987243652 13.481771469116211, 224.76723670959473 13.591054916381836, 224.15838050842285 13.731557846069336, 223.12800407409668 14.106241226196289, 222.39425468444824 14.402864456176758, 221.67611503601074 14.918050765991211, 221.434663772583 15.403280258178711, 221.30129432678223 16.051607131958008, 221.0864200592041 16.410966873168945, 221.09012413024902 16.6591854095459, 221.1975612640381 17.09263801574707, 220.9971103668213 17.32316017150879, 220.75670051574707 17.422361373901367, 220.82338523864746 17.844701766967773, 221.18475532531738 18.073732376098633, 221.3567600250244 18.5584774017334, 221.40367317199707 19.10576820373535, 221.3567600250244 19.90325355529785, 221.42725563049316 20.59361457824707, 221.778959274292 21.40439796447754, 222.34188652038574 22.201879501342773, 223.01658821105957 23.272138595581055, 223.3759479522705 23.668546676635742, 223.3722438812256 23.675954818725586, 223.57600212097168 23.675954818725586, 223.70566749572754 23.542585372924805, 223.78717231750488 23.3314151763916)))'::geometry, '1973-01-01', 'mo', 'http://planetarynames.wr.usgs.gov/Feature/4453');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(248, 'Karzok', 'SRID=104904;POINT (228.262902951161 18.4035270924109)'::geometry, 'SRID=104904;MULTIPOLYGON (((228.269330978394 18.2748584747314, 228.266962051392 18.2748394012451, 228.264589309692 18.2748584747314, 228.26222038269 18.2749156951904, 228.259851455688 18.2750148773193, 228.257482528687 18.2751522064209, 228.255121231079 18.2753276824951, 228.252759933472 18.2755451202393, 228.250402450562 18.2757968902588, 228.248052597046 18.2760906219482, 228.245706558228 18.2764263153076, 228.243368148804 18.2767963409424, 228.241037368774 18.2772083282471, 228.23871421814 18.2776546478271, 228.236398696899 18.2781429290771, 228.234094619751 18.2786655426025, 228.231798171997 18.2792301177979, 228.229513168335 18.2798328399658, 228.227239608765 18.2804698944092, 228.224977493286 18.2811489105225, 228.222726821899 18.2818622589111, 228.220491409302 18.2826137542725, 228.218271255493 18.2833995819092, 228.216066360474 18.2842235565186, 228.213872909546 18.2850856781006, 228.211698532104 18.285982131958, 228.209539413452 18.2869167327881, 228.207399368286 18.2878856658936, 228.205278396606 18.2888889312744, 228.203172683716 18.2899265289307, 228.201089859009 18.2910022735596, 228.199026107788 18.2921085357666, 228.196981430054 18.2932529449463, 228.194959640503 18.2944278717041, 228.192956924438 18.2956371307373, 228.190980911255 18.2968769073486, 228.189023971558 18.2981548309326, 228.187093734741 18.2994594573975, 228.185186386108 18.3007984161377, 228.183305740356 18.3021678924561, 228.181447982788 18.3035678863525, 228.179616928101 18.3050022125244, 228.177812576294 18.3064632415771, 228.176038742065 18.307954788208, 228.174287796021 18.3094730377197, 228.172567367554 18.3110218048096, 228.170873641968 18.3126010894775, 228.16921043396 18.3142032623291, 228.16757774353 18.3158359527588, 228.165975570679 18.3174953460693, 228.164403915405 18.3191814422607, 228.162858963013 18.320894241333, 228.161352157593 18.3226299285889, 228.159872055054 18.3243923187256, 228.158430099487 18.3261775970459, 228.157014846802 18.3279857635498, 228.155637741089 18.3298168182373, 228.154294967651 18.3316707611084, 228.152982711792 18.3335475921631, 228.151708602905 18.3354473114014, 228.150468826294 18.337366104126, 228.149263381958 18.3393039703369, 228.148092269897 18.3412647247314, 228.14695930481 18.343240737915, 228.145864486694 18.3452396392822, 228.144804000854 18.3472537994385, 228.143781661987 18.3492832183838, 228.142793655396 18.3513317108154, 228.141847610474 18.3533954620361, 228.140939712524 18.3554744720459, 228.140066146851 18.3575687408447, 228.139234542847 18.3596782684326, 228.138441085815 18.3617992401123, 228.137685775757 18.3639354705811, 228.136972427368 18.3660831451416, 228.136297225952 18.3682422637939, 228.135660171509 18.3704090118408, 228.135065078735 18.3725872039795, 228.134511947632 18.37477684021, 228.133996963501 18.376974105835, 228.133520126343 18.3791828155518, 228.133085250854 18.3813953399658, 228.132692337036 18.3836154937744, 228.132341384888 18.3858432769775, 228.132028579712 18.3880748748779, 228.131757736206 18.3903102874756, 228.13152885437 18.3925533294678, 228.131341934204 18.39479637146, 228.131196975708 18.3970432281494, 228.131090164185 18.3992938995361, 228.131025314331 18.4015445709229, 228.131002426147 18.4037952423096, 228.131021499634 18.4060459136963, 228.13108253479 18.408296585083, 228.131185531616 18.4105472564697, 228.131326675415 18.4127941131592, 228.131513595581 18.4150371551514, 228.13173866272 18.4172801971436, 228.132005691528 18.4195156097412, 228.132314682007 18.4217510223389, 228.132661819458 18.4239749908447, 228.133054733276 18.4261989593506, 228.13348197937 18.4284114837646, 228.133955001831 18.4306163787842, 228.134466171265 18.4328174591064, 228.135019302368 18.4350070953369, 228.135610580444 18.4371852874756, 228.13624382019 18.4393558502197, 228.136919021606 18.4415149688721, 228.137628555298 18.4436626434326, 228.138380050659 18.4457988739014, 228.13917350769 18.4479236602783, 228.140001296997 18.4500331878662, 228.140871047974 18.452127456665, 228.141775131226 18.4542064666748, 228.142721176147 18.4562740325928, 228.143705368042 18.4583225250244, 228.144723892212 18.460355758667, 228.145784378052 18.4623699188232, 228.146879196167 18.4643688201904, 228.148008346558 18.4663486480713, 228.149175643921 18.4683094024658, 228.150381088257 18.4702472686768, 228.151620864868 18.4721698760986, 228.152894973755 18.4740695953369, 228.154203414917 18.4759464263916, 228.155546188354 18.47780418396, 228.156923294067 18.4796352386475, 228.158334732056 18.4814472198486, 228.159776687622 18.4832363128662, 228.161256790161 18.4849987030029, 228.162763595581 18.4867343902588, 228.164304733276 18.4884471893311, 228.16587638855 18.4901371002197, 228.167478561401 18.4917964935303, 228.169115066528 18.49342918396, 228.170778274536 18.4950351715088, 228.172468185425 18.4966144561768, 228.174192428589 18.4981670379639, 228.175939559937 18.4996891021729, 228.177717208862 18.5011806488037, 228.179521560669 18.5026454925537, 228.181352615356 18.5040760040283, 228.183210372925 18.5054798126221, 228.185094833374 18.5068492889404, 228.187002182007 18.5081920623779, 228.188936233521 18.50950050354, 228.190893173218 18.5107746124268, 228.192869186401 18.5120182037354, 228.194871902466 18.5132274627686, 228.196897506714 18.5144062042236, 228.198942184448 18.5155506134033, 228.201009750366 18.5166568756104, 228.203096389771 18.5177326202393, 228.205202102661 18.5187740325928, 228.207326889038 18.5197811126709, 228.209466934204 18.5207500457764, 228.211629867554 18.5216846466064, 228.213804244995 18.5225811004639, 228.21600151062 18.5234432220459, 228.218210220337 18.5242710113525, 228.220434188843 18.5250568389893, 228.22266960144 18.5258121490479, 228.224924087524 18.5265254974365, 228.227186203003 18.5272045135498, 228.229463577271 18.5278415679932, 228.23175239563 18.5284442901611, 228.234052658081 18.5290088653564, 228.236360549927 18.5295352935791, 228.238679885864 18.5300235748291, 228.241006851196 18.5304698944092, 228.243341445923 18.5308818817139, 228.245683670044 18.5312557220459, 228.248029708862 18.531587600708, 228.250383377075 18.5318813323975, 228.252744674683 18.5321369171143, 228.255109786987 18.5323505401611, 228.257474899292 18.5325298309326, 228.259847640991 18.5326671600342, 228.262216567993 18.5327663421631, 228.26459312439 18.5328235626221, 228.266965866089 18.5328426361084, 228.269342422485 18.5328235626221, 228.271715164185 18.5327625274658, 228.274087905884 18.5326671600342, 228.276456832886 18.5325298309326, 228.278825759888 18.5323505401611, 228.281187057495 18.5321369171143, 228.283548355103 18.5318813323975, 228.285902023315 18.531587600708, 228.288251876831 18.5312519073486, 228.290594100952 18.5308818817139, 228.292928695679 18.5304698944092, 228.295255661011 18.5300197601318, 228.297574996948 18.5295352935791, 228.299882888794 18.5290088653564, 228.302179336548 18.5284442901611, 228.304468154907 18.5278415679932, 228.306745529175 18.5272006988525, 228.309011459351 18.5265254974365, 228.311262130737 18.5258083343506, 228.313501358032 18.5250568389893, 228.315725326538 18.5242671966553, 228.317934036255 18.5234432220459, 228.320127487183 18.5225811004639, 228.322305679321 18.5216808319092, 228.324464797974 18.5207462310791, 228.326608657837 18.5197772979736, 228.328733444214 18.5187702178955, 228.330839157104 18.5177326202393, 228.332925796509 18.5166568756104, 228.334989547729 18.5155467987061, 228.337034225464 18.5144023895264, 228.339059829712 18.5132274627686, 228.341062545776 18.5120143890381, 228.343042373657 18.5107707977295, 228.344995498657 18.5094966888428, 228.346929550171 18.5081882476807, 228.348836898804 18.5068454742432, 228.350721359253 18.5054759979248, 228.352579116821 18.5040721893311, 228.354410171509 18.5026416778564, 228.356214523315 18.5011768341064, 228.357992172241 18.4996852874756, 228.359739303589 18.4981632232666, 228.361463546753 18.4966106414795, 228.363153457642 18.4950313568115, 228.364816665649 18.4934253692627, 228.366449356079 18.491792678833, 228.368055343628 18.4901294708252, 228.369626998901 18.4884433746338, 228.371168136597 18.4867305755615, 228.372674942017 18.4849910736084, 228.374151229858 18.4832286834717, 228.375597000122 18.4814434051514, 228.37700843811 18.4796314239502, 228.378385543823 18.4778003692627, 228.379728317261 18.4759426116943, 228.381036758423 18.4740619659424, 228.38231086731 18.4721660614014, 228.383550643921 18.4702434539795, 228.38475227356 18.4683017730713, 228.385919570923 18.4663410186768, 228.387052536011 18.4643650054932, 228.388147354126 18.462366104126, 228.389204025269 18.4603481292725, 228.390226364136 18.4583187103271, 228.391206741333 18.4562664031982, 228.392152786255 18.4542026519775, 228.393060684204 18.4521198272705, 228.393926620483 18.4500255584717, 228.394758224487 18.4479160308838, 228.395547866821 18.4457950592041, 228.396299362183 18.4436588287354, 228.397012710571 18.4415111541748, 228.39768409729 18.4393520355225, 228.398317337036 18.4371814727783, 228.398908615112 18.4349994659424, 228.399461746216 18.4328098297119, 228.399972915649 18.4306125640869, 228.40044593811 18.4284076690674, 228.400876998901 18.4261913299561, 228.401266098022 18.4239711761475, 228.401613235474 18.4217433929443, 228.401922225952 18.4195117950439, 228.402189254761 18.417272567749, 228.402414321899 18.4150333404541, 228.402597427368 18.4127864837646, 228.402742385864 18.4105396270752, 228.40284538269 18.4082927703857, 228.402902603149 18.406042098999, 228.402921676636 18.403787612915, 228.402898788452 18.4015369415283, 228.402837753296 18.3992862701416, 228.402730941772 18.3970394134521, 228.402585983276 18.3947887420654, 228.402395248413 18.3925457000732, 228.402166366577 18.3903064727783, 228.401895523071 18.3880672454834, 228.401586532593 18.385835647583, 228.401231765747 18.3836116790771, 228.400838851929 18.3813877105713, 228.40040397644 18.3791751861572, 228.399930953979 18.3769702911377, 228.399415969849 18.3747730255127, 228.398859024048 18.3725833892822, 228.398263931274 18.3704051971436, 228.397626876831 18.3682346343994, 228.396951675415 18.3660755157471, 228.396238327026 18.3639316558838, 228.395483016968 18.361795425415, 228.394689559937 18.3596744537354, 228.393857955933 18.3575649261475, 228.392988204956 18.3554706573486, 228.39207649231 18.3533916473389, 228.391130447388 18.3513278961182, 228.390146255493 18.3492794036865, 228.389120101929 18.3472461700439, 228.388063430786 18.3452320098877, 228.386964797974 18.3432369232178, 228.385831832886 18.3412609100342, 228.384660720825 18.3393001556396, 228.383455276489 18.3373622894287, 228.382215499878 18.3354434967041, 228.380941390991 18.3335437774658, 228.379629135132 18.3316669464111, 228.378286361694 18.32981300354, 228.376905441284 18.3279819488525, 228.375494003296 18.3261699676514, 228.374048233032 18.3243846893311, 228.37257194519 18.3226261138916, 228.371061325073 18.3208866119385, 228.369520187378 18.3191776275635, 228.367948532104 18.3174915313721, 228.366346359253 18.3158321380615, 228.364709854126 18.3141994476318, 228.363046646118 18.3125972747803, 228.361356735229 18.3110179901123, 228.359636306763 18.3094692230225, 228.357885360718 18.3079509735107, 228.356107711792 18.3064594268799, 228.354303359985 18.3049983978271, 228.352472305298 18.3035640716553, 228.350618362427 18.3021640777588, 228.348733901978 18.3007946014404, 228.346826553345 18.2994556427002, 228.344896316528 18.2981510162354, 228.342943191528 18.2968769073486, 228.340963363647 18.29563331604, 228.33896446228 18.2944240570068, 228.336938858032 18.293249130249, 228.334897994995 18.2921085357666, 228.332830429077 18.2909984588623, 228.33074760437 18.2899265289307, 228.328645706177 18.2888851165771, 228.3265209198 18.2878818511963, 228.324380874634 18.2869129180908, 228.322221755981 18.285982131958, 228.32004737854 18.2850856781006, 228.31785774231 18.2842235565186, 228.315649032593 18.2833995819092, 228.313428878784 18.2826099395752, 228.311193466187 18.2818584442139, 228.3089427948 18.2811450958252, 228.306684494019 18.2804698944092, 228.304410934448 18.2798290252686, 228.302125930786 18.2792301177979, 228.299829483032 18.2786655426025, 228.297521591187 18.2781391143799, 228.295206069946 18.2776546478271, 228.292882919312 18.2772045135498, 228.290552139282 18.2767963409424, 228.288213729858 18.2764225006104, 228.28586769104 18.2760906219482, 228.283517837524 18.2757968902588, 228.281160354614 18.2755451202393, 228.278802871704 18.2753276824951, 228.276437759399 18.2751522064209, 228.274072647095 18.2750148773193, 228.271703720093 18.2749156951904, 228.269330978394 18.2748584747314)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14144');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(249, 'Pangboche', 'SRID=104904;POINT (226.595873773026 17.2783598670807)'::geometry, 'SRID=104904;MULTIPOLYGON (((226.601442337036 17.1929302215576, 226.599878311157 17.1929187774658, 226.598310470581 17.1929302215576, 226.596746444702 17.1929721832275, 226.595178604126 17.1930370330811, 226.593618392944 17.1931285858154, 226.592054367065 17.1932430267334, 226.590497970581 17.1933879852295, 226.588941574097 17.1935558319092, 226.587385177612 17.193754196167, 226.585836410522 17.1939754486084, 226.58429145813 17.1942195892334, 226.582754135132 17.1944942474365, 226.581216812134 17.1947917938232, 226.57968711853 17.1951160430908, 226.578165054321 17.195463180542, 226.576650619507 17.195837020874, 226.57513999939 17.1962375640869, 226.573637008667 17.1966648101807, 226.572145462036 17.197114944458, 226.570657730103 17.1975879669189, 226.569181442261 17.1980876922607, 226.567712783813 17.1986103057861, 226.566255569458 17.1991596221924, 226.564809799194 17.1997318267822, 226.563371658325 17.2003269195557, 226.561948776245 17.20094871521, 226.56053352356 17.2015933990479, 226.559129714966 17.2022609710693, 226.557741165161 17.2029514312744, 226.556364059448 17.2036647796631, 226.555002212524 17.2044010162354, 226.553651809692 17.2051601409912, 226.552316665649 17.2059421539307, 226.550992965698 17.2067432403564, 226.549688339233 17.2075710296631, 226.54839515686 17.2084178924561, 226.547121047974 17.2092876434326, 226.545862197876 17.2101764678955, 226.544618606567 17.211088180542, 226.543394088745 17.2120189666748, 226.542184829712 17.2129688262939, 226.540990829468 17.2139415740967, 226.539819717407 17.2149333953857, 226.538663864136 17.2159404754639, 226.537527084351 17.2169704437256, 226.536409378052 17.2180194854736, 226.535310745239 17.219087600708, 226.534231185913 17.2201709747314, 226.533174514771 17.2212734222412, 226.532133102417 17.2223949432373, 226.531118392944 17.2235317230225, 226.530118942261 17.2246875762939, 226.529146194458 17.2258586883545, 226.528188705444 17.2270450592041, 226.527257919312 17.2282466888428, 226.526346206665 17.2294635772705, 226.525461196899 17.2306995391846, 226.52459526062 17.2319469451904, 226.523752212524 17.2332057952881, 226.522932052612 17.2344837188721, 226.522138595581 17.2357730865479, 226.521364212036 17.2370738983154, 226.520616531372 17.2383899688721, 226.519891738892 17.2397136688232, 226.519193649292 17.2410526275635, 226.518518447876 17.2424030303955, 226.517869949341 17.2437648773193, 226.517244338989 17.245138168335, 226.516641616821 17.2465190887451, 226.516069412231 17.2479114532471, 226.515520095825 17.2493152618408, 226.514993667603 17.2507228851318, 226.514497756958 17.2521419525146, 226.514024734497 17.253568649292, 226.513578414917 17.2550029754639, 226.513158798218 17.2564449310303, 226.512765884399 17.2578945159912, 226.512399673462 17.2593479156494, 226.512060165405 17.2608089447021, 226.511747360229 17.2622776031494, 226.511461257935 17.2637462615967, 226.511201858521 17.2652225494385, 226.510969161987 17.2667026519775, 226.510766983032 17.2681865692139, 226.510587692261 17.2696743011475, 226.51043510437 17.2711620330811, 226.510313034058 17.2726535797119, 226.510217666626 17.27414894104, 226.510149002075 17.2756404876709, 226.510107040405 17.277135848999, 226.510091781616 17.2786350250244, 226.510103225708 17.2801303863525, 226.510145187378 17.2816257476807, 226.510213851929 17.2831211090088, 226.510305404663 17.2846164703369, 226.510431289673 17.2861080169678, 226.510580062866 17.2875957489014, 226.51075553894 17.289083480835, 226.510957717896 17.2905673980713, 226.511190414429 17.2920475006104, 226.511449813843 17.2935237884521, 226.51173210144 17.2949924468994, 226.512044906616 17.2964611053467, 226.512384414673 17.2979221343994, 226.51275062561 17.2993755340576, 226.513139724731 17.3008251190186, 226.513559341431 17.302267074585, 226.514001846313 17.3037014007568, 226.514474868774 17.3051280975342, 226.514970779419 17.306547164917, 226.515493392944 17.3079586029053, 226.516042709351 17.309362411499, 226.51661491394 17.310754776001, 226.517213821411 17.3121356964111, 226.517839431763 17.3135089874268, 226.518487930298 17.3148708343506, 226.519163131714 17.3162212371826, 226.519861221313 17.3175601959229, 226.520586013794 17.3188877105713, 226.521333694458 17.3202037811279, 226.522104263306 17.3215045928955, 226.522897720337 17.3227939605713, 226.523717880249 17.3240718841553, 226.524557113647 17.3253345489502, 226.525423049927 17.3265819549561, 226.52631187439 17.3278141021729, 226.527219772339 17.3290348052979, 226.528150558472 17.3302364349365, 226.529108047485 17.3314228057861, 226.530080795288 17.3325939178467, 226.531076431274 17.3337497711182, 226.532094955444 17.3348903656006, 226.533132553101 17.3360080718994, 226.53419303894 17.3371143341064, 226.535272598267 17.3381977081299, 226.536371231079 17.3392658233643, 226.537488937378 17.3403148651123, 226.538625717163 17.341344833374, 226.539781570435 17.3423557281494, 226.540952682495 17.3433475494385, 226.542146682739 17.3443202972412, 226.543355941772 17.3452739715576, 226.544580459595 17.3462047576904, 226.545824050903 17.3471164703369, 226.547082901001 17.3480052947998, 226.548360824585 17.3488750457764, 226.549654006958 17.3497219085693, 226.550958633423 17.350549697876, 226.552282333374 17.351354598999, 226.553617477417 17.3521366119385, 226.554967880249 17.3528957366943, 226.55633354187 17.3536319732666, 226.557710647583 17.3543453216553, 226.559099197388 17.3550395965576, 226.560503005981 17.3557071685791, 226.561918258667 17.356351852417, 226.563344955444 17.356969833374, 226.564783096313 17.3575687408447, 226.566232681274 17.3581409454346, 226.56768989563 17.3586902618408, 226.569158554077 17.3592128753662, 226.570634841919 17.359712600708, 226.572122573853 17.3601894378662, 226.573617935181 17.3606395721436, 226.575120925903 17.36106300354, 226.576631546021 17.3614635467529, 226.578149795532 17.361837387085, 226.579675674438 17.3621883392334, 226.581205368042 17.362512588501, 226.58274269104 17.3628101348877, 226.584283828735 17.3630847930908, 226.585828781128 17.3633289337158, 226.587377548218 17.3635501861572, 226.588933944702 17.363748550415, 226.590490341187 17.3639163970947, 226.592050552368 17.3640613555908, 226.593614578247 17.3641757965088, 226.595178604126 17.3642673492432, 226.596746444702 17.3643321990967, 226.598314285278 17.3643741607666, 226.599882125854 17.3643856048584, 226.601449966431 17.3643741607666, 226.603017807007 17.3643321990967, 226.604581832886 17.3642673492432, 226.606145858765 17.3641757965088, 226.607709884644 17.3640613555908, 226.609270095825 17.3639163970947, 226.610830307007 17.3637447357178, 226.612382888794 17.3635501861572, 226.613931655884 17.3633289337158, 226.615480422974 17.3630809783936, 226.617021560669 17.3628101348877, 226.618558883667 17.362512588501, 226.620088577271 17.3621883392334, 226.621610641479 17.361837387085, 226.623128890991 17.3614635467529, 226.624639511108 17.36106300354, 226.626142501831 17.3606395721436, 226.627637863159 17.3601856231689, 226.629125595093 17.359712600708, 226.630601882935 17.3592128753662, 226.632070541382 17.3586902618408, 226.633531570435 17.3581409454346, 226.634977340698 17.3575687408447, 226.636415481567 17.356969833374, 226.637842178345 17.3563480377197, 226.63925743103 17.3557033538818, 226.640661239624 17.3550357818604, 226.642049789429 17.3543453216553, 226.643426895142 17.3536319732666, 226.644792556763 17.3528957366943, 226.646142959595 17.3521327972412, 226.647478103638 17.3513507843018, 226.648801803589 17.3505458831787, 226.650110244751 17.3497219085693, 226.651399612427 17.3488750457764, 226.652677536011 17.3480052947998, 226.653936386108 17.3471126556396, 226.655179977417 17.3462009429932, 226.656408309937 17.3452701568604, 226.65761756897 17.3443202972412, 226.658807754517 17.3433475494385, 226.659982681274 17.3423557281494, 226.661138534546 17.341344833374, 226.662275314331 17.3403148651123, 226.66339302063 17.3392658233643, 226.664487838745 17.3381977081299, 226.665567398071 17.3371105194092, 226.666627883911 17.3360080718994, 226.667665481567 17.3348865509033, 226.668684005737 17.3337459564209, 226.669679641724 17.3325939178467, 226.670656204224 17.3314228057861, 226.67160987854 17.3302326202393, 226.672540664673 17.3290309906006, 226.673448562622 17.3278141021729, 226.674337387085 17.3265781402588, 226.675203323364 17.3253307342529, 226.676042556763 17.324068069458, 226.676862716675 17.3227939605713, 226.677656173706 17.3215007781982, 226.678426742554 17.3201999664307, 226.679174423218 17.318883895874, 226.679899215698 17.3175563812256, 226.680597305298 17.3162174224854, 226.681272506714 17.3148670196533, 226.681921005249 17.3135051727295, 226.682546615601 17.3121318817139, 226.683145523071 17.3107509613037, 226.683717727661 17.3093585968018, 226.684267044067 17.307954788208, 226.684789657593 17.3065433502197, 226.685285568237 17.3051242828369, 226.685754776001 17.3036975860596, 226.686201095581 17.3022632598877, 226.686616897583 17.3008213043213, 226.687009811401 17.2993717193604, 226.687376022339 17.2979183197021, 226.687715530396 17.2964572906494, 226.688024520874 17.2949886322021, 226.688310623169 17.2935199737549, 226.688570022583 17.2920436859131, 226.688798904419 17.290563583374, 226.689004898071 17.2890796661377, 226.689180374146 17.2875919342041, 226.689329147339 17.2861042022705, 226.689451217651 17.2846126556396, 226.689546585083 17.2831172943115, 226.689615249634 17.2816219329834, 226.689653396606 17.2801265716553, 226.689668655396 17.2786312103271, 226.689653396606 17.277135848999, 226.689611434937 17.2756366729736, 226.689542770386 17.2741451263428, 226.689443588257 17.2726497650146, 226.689321517944 17.2711582183838, 226.689168930054 17.2696704864502, 226.688993453979 17.2681827545166, 226.688787460327 17.2666988372803, 226.688554763794 17.2652187347412, 226.68829536438 17.2637424468994, 226.688009262085 17.2622737884521, 226.687696456909 17.2608051300049, 226.687356948853 17.2593441009521, 226.686990737915 17.2578907012939, 226.686597824097 17.256441116333, 226.686178207397 17.2549991607666, 226.685731887817 17.2535648345947, 226.685258865356 17.2521381378174, 226.684762954712 17.2507190704346, 226.684236526489 17.2493114471436, 226.683687210083 17.2479076385498, 226.683115005493 17.2465152740479, 226.682512283325 17.2451343536377, 226.681886672974 17.2437610626221, 226.681238174438 17.2424030303955, 226.680562973022 17.2410526275635, 226.679864883423 17.2397136688232, 226.679140090942 17.2383861541748, 226.678392410278 17.2370700836182, 226.677618026733 17.2357692718506, 226.676824569702 17.2344799041748, 226.67600440979 17.2332057952881, 226.675161361694 17.2319431304932, 226.674295425415 17.2306957244873, 226.673410415649 17.2294635772705, 226.672498703003 17.2282428741455, 226.671564102173 17.2270412445068, 226.670610427856 17.2258548736572, 226.669637680054 17.2246837615967, 226.66863822937 17.2235317230225, 226.6676197052 17.22239112854, 226.666582107544 17.2212734222412, 226.665525436401 17.2201709747314, 226.664445877075 17.2190837860107, 226.663347244263 17.2180194854736, 226.662229537964 17.2169704437256, 226.661092758179 17.2159404754639, 226.659936904907 17.2149295806885, 226.658761978149 17.2139377593994, 226.657571792603 17.2129650115967, 226.656362533569 17.2120151519775, 226.655138015747 17.2110843658447, 226.653894424438 17.2101726531982, 226.652635574341 17.2092838287354, 226.651357650757 17.2084140777588, 226.650068283081 17.2075672149658, 226.648759841919 17.2067432403564, 226.647439956665 17.2059383392334, 226.646104812622 17.2051563262939, 226.64475440979 17.2043972015381, 226.643388748169 17.2036609649658, 226.642011642456 17.2029476165771, 226.640623092651 17.2022571563721, 226.639223098755 17.2015895843506, 226.637807846069 17.2009449005127, 226.636381149292 17.2003269195557, 226.63494682312 17.1997318267822, 226.633497238159 17.1991558074951, 226.632040023804 17.1986103057861, 226.630575180054 17.1980838775635, 226.629095077515 17.1975879669189, 226.627611160278 17.1971111297607, 226.62611579895 17.1966609954834, 226.624616622925 17.1962375640869, 226.623106002808 17.195837020874, 226.621587753296 17.195463180542, 226.620065689087 17.1951160430908, 226.618535995483 17.1947917938232, 226.617002487183 17.1944942474365, 226.615461349487 17.1942195892334, 226.613916397095 17.1939716339111, 226.612367630005 17.1937503814697, 226.610815048218 17.1935558319092, 226.609258651733 17.1933879852295, 226.607698440552 17.1932430267334, 226.60613822937 17.1931285858154, 226.604574203491 17.1930370330811, 226.603010177612 17.1929721832275, 226.601442337036 17.1929302215576)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14145');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1849, 'Hermes Patera', 'SRID=104904;POINT (226.57 18.33)'::geometry, 'SRID=104904;POLYGON ((226.27743530274 18.067016601562, 226.25820922852 18.135681152343, 226.255462646485 18.216705322265124, 226.26507568359813 18.293609619139627, 226.25614929199594 18.331375122069314, 226.26095581055 18.369140624999, 226.28842163086 18.465270996093, 226.35159301758 18.528442382812, 226.44772338867 18.577880859374, 226.48480224609438 18.594360351561626, 226.52462768555 18.6026000976555, 226.57955932617 18.608093261718, 226.68118286133 18.586120605468, 226.70590209961 18.569641113281, 226.74435424805 18.539428710937, 226.78555297852 18.514709472656, 226.83224487305 18.498229980468, 226.86932373046687 18.488616943359126, 226.89404296875 18.4721374511715, 226.90090942383 18.451538085937, 226.90640258789 18.410339355468, 226.91189575195 18.380126953124, 226.92013549805 18.322448730468, 226.90640258789 18.251037597656, 226.87344360352 18.187866210937, 226.82949829102 18.146667480468, 226.79379272461 18.113708496093, 226.77456665039 18.102722167968, 226.72787475586 18.119201660156, 226.68392944336 18.141174316406, 226.63723754883125 18.15490722656175, 226.58779907226562 18.14254760742125, 226.56033325195 18.121948242187, 226.52188110352 18.088989257812, 226.48617553711 18.067016601562, 226.45321655274 18.083496093749, 226.38729858399 18.086242675781, 226.32412719727 18.078002929687, 226.27743530274 18.067016601562))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15690');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1688, 'Olympus Rupes', 'SRID=104904;POINT (226.43548539543502 18.401964175317982)'::geometry, 'SRID=104904;MULTILINESTRING ((227.42951774597168 22.934080123901367, 227.93671226501465 22.65593910217285, 228.34573936462402 22.4268856048584, 228.52571296691895 22.295995712280273, 228.67296028137207 22.099660873413086, 228.96746253967285 22.099660873413086, 229.62190437316895 21.739717483520508, 230.1290988922119 21.477941513061523, 230.35815620422363 21.26524543762207, 230.38258171081543 21.086992263793945, 230.2117748260498 20.55558967590332, 230.71787071228027 19.182798385620117, 230.8653507232666 18.500219345092773, 230.8653507232666 18.058469772338867, 230.8653507232666 17.96030616760254, 230.88171195983887 16.978639602661133, 230.9144344329834 16.635053634643555, 230.73446083068848 16.389638900756836, 230.6690158843994 16.242387771606445, 230.55448722839355 15.980611801147461, 230.45632362365723 15.816999435424805, 230.35815620422363 15.506139755249023, 230.0472927093506 15.457056045532227, 229.83220100402832 15.140348434448242, 229.54010200500488 14.73716926574707, 229.22923851013184 14.442667007446289, 228.86929512023926 14.213613510131836, 228.5420742034912 14.05000114440918, 228.2148494720459 14.148168563842773, 227.8221836090088 14.148168563842773, 227.2168254852295 13.984556198120117, 226.85687828063965 13.968194961547852, 226.49693489074707 14.05000114440918, 226.0879077911377 13.77186393737793, 225.80977058410645 13.755502700805664, 225.55567741394043 13.881429672241211, 225.3911952972412 14.058565139770508, 224.9426326751709 14.73716926574707, 224.76265907287598 14.73716926574707, 224.36999320983887 14.573556900024414, 223.97732734680176 14.802610397338867, 223.29015922546387 15.12983512878418, 222.70116233825684 15.391611099243164, 222.4393825531006 15.40797233581543, 221.93218803405762 15.40797233581543, 221.57224464416504 15.66975212097168, 221.4413547515869 16.09514045715332, 221.3431911468506 16.700498580932617, 221.39227104187012 17.07680320739746, 221.16321754455566 17.404027938842773, 220.89009284973145 17.53165626525879, 220.90144157409668 17.84577751159668, 221.14274787902832 17.76296043395996, 221.52316093444824 17.61672019958496, 221.86674308776855 18.074831008911133, 222.06307792663574 18.614748001098633, 221.8994655609131 18.860166549682617, 221.6376895904541 19.252832412719727, 221.62132835388184 19.59641456604004, 221.7358570098877 20.185415267944336, 221.94854927062988 20.774412155151367, 222.079439163208 21.26524543762207, 222.48846626281738 21.854246139526367, 222.99566078186035 22.508691787719727, 223.43741035461426 22.934080123901367, 223.78099250793457 23.13041114807129, 224.04277229309082 23.064966201782227, 224.3045482635498 22.999521255493164, 224.72993659973145 22.934080123901367, 224.9917163848877 22.88499641418457, 225.2862148284912 22.934080123901367, 225.72796440124512 23.01588249206543, 226.2351589202881 23.146772384643555, 226.61146354675293 23.27766227722168, 227.05321311950684 23.097688674926758, 227.42951774597168 22.934080123901367))'::geometry, '1976-01-01', 'ru', 'http://planetarynames.wr.usgs.gov/Feature/4454');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1847, 'Zeus Patera', 'SRID=104904;POINT (227.07 18.39)'::geometry, 'SRID=104904;POLYGON ((226.50457763673 18.675384521485, 226.51556396485 18.70834350586, 226.55401611329 18.766021728516, 226.6254272461 18.820953369141, 226.71881103516 18.853912353516, 226.82043457032 18.886871337891, 226.91107177735 18.886871337891, 226.99621582032 18.875885009766, 227.03741455079 18.873138427735, 226.99346923829 18.831939697266, 226.97973632813 18.77426147461, 226.99896240235 18.702850341797, 227.06213378907 18.631439208985, 227.15002441407 18.584747314454, 227.23516845704 18.568267822266, 227.30383300781875 18.59024047851625, 227.33404541016 18.628692626954, 227.34503173829 18.658905029297, 227.39721679688 18.587493896485, 227.42742919923 18.494110107422, 227.42193603516 18.408966064454, 227.39996337891 18.315582275391, 227.39172363282 18.227691650391, 227.34228515626 18.123321533204, 227.29559326173 18.018951416016, 227.21319580079 17.942047119141, 227.15551757813 17.903594970704, 227.09783935548 17.876129150391, 227.00170898438 17.845916748047, 226.9330444336 17.840423583985, 226.88635253907 17.840423583985, 226.90832519532 17.876129150391, 226.91381835938 17.925567626954, 226.90283203126 17.972259521485, 226.87536621094 18.021697998047, 226.82318115235 18.062896728516, 226.77923583985 18.098602294922, 226.83691406251 18.156280517579, 226.88360595704 18.233184814454, 226.91107177735 18.315582275391, 226.8890991211 18.40072631836, 226.88085937501 18.474884033204, 226.83142089844 18.507843017579, 226.72430419923 18.546295166016, 226.67761230469 18.584747314454, 226.6254272461 18.614959716797, 226.58972167969 18.617706298829, 226.62817382813 18.645172119141, 226.67761230469 18.650665283204, 226.61993408204 18.661651611329, 226.56500244141 18.64242553711, 226.4935913086 18.653411865235, 226.50457763673 18.675384521485))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15689');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1848, 'Athena Patera', 'SRID=104904;POINT (227.18 18.74)'::geometry, 'SRID=104904;POLYGON ((227.0290374756 18.766021728515, 227.04002380372 18.807220458984, 227.06062316896 18.840179443359, 227.08259582521 18.867645263671, 227.12928771974 18.880004882812, 227.17597961427 18.877258300781, 227.22541809083 18.866271972656, 227.28172302247 18.825073242187, 227.31605529786 18.775634765624, 227.328414917 18.731689453124, 227.33116149903 18.691864013671, 227.30369567872 18.656158447265, 227.2844696045 18.619079589843, 227.23915100099 18.599853515624, 227.18147277833 18.599853515624, 227.10594177247 18.624572753906, 227.05513000489 18.665771484374, 227.02491760255 18.705596923828, 227.0207977295 18.744049072265, 227.0290374756 18.766021728515))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15693');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1850, 'Apollo Patera', 'SRID=104904;POINT (226.45 17.94)'::geometry, 'SRID=104904;POLYGON ((226.28540039064 17.909774780272, 226.27441406252 17.938613891601, 226.26754760744 17.981185913085, 226.27716064455 18.027877807616, 226.30325317385 18.074569702147, 226.35818481447 18.091049194335, 226.40075683596 18.091049194335, 226.46804809572 18.073196411132, 226.52572631838 18.045730590819, 226.56967163088 18.023757934569, 226.63146972658 17.946853637694, 226.63558959963 17.878189086913, 226.62185668947 17.83836364746, 226.61911010744 17.806777954101, 226.59439086916 17.788925170897, 226.52847290041 17.780685424804, 226.45980834963 17.808151245116, 226.40899658205 17.832870483397, 226.37878417971 17.841110229491, 226.33758544924 17.864456176757, 226.30462646486 17.887802124022, 226.28540039064 17.909774780272))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15694');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1851, 'Olympus Paterae', 'SRID=104904;POINT (226.81 18.32)'::geometry, 'SRID=104904;POLYGON ((226.14367675781 18.452911376953, 226.16564941406 18.513336181641, 226.2041015625 18.554534912109, 226.23431396484 18.592987060547, 226.30572509766 18.625946044922, 226.36889648438 18.650665283203, 226.42108154297 18.653411865234, 226.45678710938 18.642425537109, 226.49249267578 18.700103759766, 226.54193115234 18.755035400391, 226.58312988281 18.809967041016, 226.65454101563 18.845672607422, 226.72320556641 18.870391845703, 226.82757568359 18.895111083984, 226.88525390625 18.911590576172, 226.96545410157 18.900604248046, 227.0121459961 18.900604248046, 227.04785156251 18.889617919921, 227.08355712891 18.906097412109, 227.13299560548 18.917083740234, 227.21813964844 18.911590576171, 227.28405761719 18.875885009765, 227.33349609376 18.829193115234, 227.37194824219 18.771514892578, 227.37744140626 18.735809326171, 227.38156127930375 18.711776733397812, 227.3808746337928 18.69255065917931, 227.37469482423 18.675384521484, 227.40216064454 18.620452880859, 227.43237304688 18.571014404296, 227.4515991211 18.496856689453, 227.45709228516 18.441925048828, 227.44885253907 18.38150024414, 227.44061279298 18.323822021484, 227.43237304688 18.277130126953, 227.41589355469 18.202972412109, 227.38018798829 18.120574951171, 227.34448242188 18.05191040039, 227.31701660157 17.999725341796, 227.26757812501 17.950286865234, 227.22088623048 17.911834716796, 227.17419433594 17.870635986328, 227.12475585938 17.848663330078, 227.03686523438 17.821197509765, 226.97918701173 17.801971435546, 226.88580322266 17.815704345703, 226.85009765626 17.790985107421, 226.81439208985 17.769012451171, 226.7484741211 17.741546630859, 226.68530273438 17.733306884765, 226.62762451173 17.738800048828, 226.57543945313 17.736053466796, 226.50128173829 17.72232055664, 226.39416503907 17.758026123046, 226.32550048829 17.78823852539, 226.29803466798 17.823944091796, 226.27056884766 17.843170166015, 226.21289062501 17.89810180664, 226.20465087891 17.966766357421, 226.22937011719 18.035430908203, 226.20465087891 18.084869384765, 226.18267822266 18.13980102539, 226.17169189454 18.18374633789, 226.17993164063 18.20571899414, 226.15795898438 18.252410888671, 226.13873291016 18.318328857421, 226.13049316407 18.389739990234, 226.14367675781 18.452911376953))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15695');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1870, 'Dionysus Patera', 'SRID=104904;POINT (226.77 17.96)'::geometry, 'SRID=104904;POLYGON ((226.53973388672 18.046417236328, 226.564453125 18.082122802735, 226.60015869141 18.11508178711, 226.64410400391 18.134307861328, 226.71826171875 18.117828369141, 226.77868652344 18.09310913086, 226.83361816406 18.043670654297, 226.87756347656 17.988739013672, 226.89129638672 17.936553955078, 226.8720703125 17.870635986328, 226.828125 17.82943725586, 226.7484741211 17.799224853516, 226.68530273438 17.793731689453, 226.64959716797 17.78549194336, 226.61389160156 17.782745361328, 226.63037109375 17.848663330078, 226.63037109375 17.914581298828, 226.62213134766 17.972259521485, 226.58093261719 18.021697998047, 226.53973388672 18.046417236328))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15692');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1871, 'Hera Patera', 'SRID=104904;POINT (226.23 18.45)'::geometry, 'SRID=104904;POLYGON ((226.21000671387 18.244171142578, 226.18116760254063 18.30047607421875, 226.17567443848188 18.347167968749623, 226.17155456543125 18.41445922851525, 226.19902038575 18.489990234375377, 226.24021911621563 18.549041748046875, 226.32124328613438 18.602600097655873, 226.37892150879125 18.616333007812376, 226.44209289551 18.61083984375, 226.396774292 18.582000732422, 226.3610687255875 18.55316162109375, 226.31986999512 18.511962890625, 226.2827911377 18.474884033203, 226.27043151856 18.428192138672, 226.24845886231 18.367767333984, 226.24021911621 18.21533203125, 226.21000671387 18.244171142578))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15691');\n\n-- TEST GIS DATA FROM OPENSTREETMAP: EARTH, Ancienne Sylvie\n--Testcase 14:\nCREATE TABLE \"♁\" (\n\tgeom public.geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int8 NOT NULL,\n\tver int2 NOT NULL,\n\tarr _int8 NULL,\n\tt json NULL\n);\n--Testcase 15: ETC...\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4596087 59.6907755)'::geometry, 'node', 1621246531, 4, NULL, '{\"drain\":\"disperse\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601391 59.6904673)'::geometry, 'node', 1621246620, 24, NULL, '{\"access\":\"yes\",\"addr:housenumber\":\"20 литВЕ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Ж.-Ф. Тома де Томон\",\"barrier\":\"gate\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6458/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Ворота памятника Любезным родителям\",\"ref:okn\":\"781610399040286\",\"start_date\":\"1807\",\"tourism\":\"attraction\",\"wikidata\":\"Q118122048\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617098 59.6910199)'::geometry, 'node', 1632220259, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617672 59.6909141)'::geometry, 'node', 1632220283, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461757 59.6909696)'::geometry, 'node', 1632220292, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614802 59.6907676)'::geometry, 'node', 1632220315, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615866 59.6907823)'::geometry, 'node', 1632220319, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611444 59.6908848)'::geometry, 'node', 1632220350, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611916 59.6908345)'::geometry, 'node', 1632220355, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.46127 59.6907954)'::geometry, 'node', 1632220358, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611342 59.6909402)'::geometry, 'node', 1632220359, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614212 59.6910868)'::geometry, 'node', 1632220364, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611621 59.6909941)'::geometry, 'node', 1632220366, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616766 59.6908145)'::geometry, 'node', 1632220378, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616314 59.691059)'::geometry, 'node', 1632220590, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613148 59.6910721)'::geometry, 'node', 1632220686, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613385 59.6907988)'::geometry, 'node', 1632497609, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6476/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Euterpe\",\"material\":\"metal\",\"name\":\"Эвтерпа\",\"name:el\":\"Εὐτέρπη\",\"name:la\":\"Euterpē\",\"name:uk\":\"Евтерпа\",\"name:zh\":\"欧忒耳佩\",\"note\":\"Ошибочно подписано «Clio»\",\"ref\":\"П-61/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614438 59.6907856)'::geometry, 'node', 1632497610, 30, NULL, '{\"alt_name:el\":\"Χλωρίς\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1796\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6475/\",\"historic\":\"yes\",\"historic:start_date\":\"1796\",\"int_name\":\"Flore\",\"material\":\"metal\",\"name\":\"Флора\",\"name:el\":\"Φλόρα\",\"name:en\":\"Flora\",\"ref\":\"П-62/1\",\"ref:okn\":\"781610399040456\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461244 59.690833)'::geometry, 'node', 1632497611, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6470/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Melpomene\",\"material\":\"metal\",\"name\":\"Мельпомена\",\"name:el\":\"Μελπομένη\",\"name:en\":\"Melpomene\",\"name:la\":\"Melpomenē\",\"name:uk\":\"Мельпомена\",\"name:zh\":\"墨爾波墨涅\",\"ref\":\"П-60/1\",\"ref:okn\":\"781610399040376\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617227 59.6909514)'::geometry, 'node', 1632497612, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6468/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Caliope\",\"material\":\"metal\",\"name\":\"Калиопа\",\"name:el\":\"Καλλιόπη\",\"name:la\":\"Calliopē\",\"name:uk\":\"Калліопа\",\"name:zh\":\"卡利俄佩\",\"ref\":\"П-65/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q120979306\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615805 59.6907985)'::geometry, 'node', 1632497613, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6474/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Uranie\",\"material\":\"metal\",\"name\":\"Урания\",\"name:el\":\"Οὐρανία\",\"name:la\":\"Ūrania\",\"ref\":\"П-63/1\",\"ref:okn\":\"78161039904044\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616825 59.6908428)'::geometry, 'node', 1632497614, 29, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6469/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"material\":\"metal\",\"name\":\"Клио\",\"name:el\":\"Κλειώ\",\"name:la\":\"Clīō\",\"note\":\"Подписано «Euterpe»\",\"ref\":\"П-64/1\",\"ref:okn\":\"781610399040466\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614541 59.6909278)'::geometry, 'node', 1632497615, 34, NULL, '{\"alt_name\":\"Аполлон Бельведерский\",\"artist_name\":\"Леохар;модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1782\",\"artwork_type\":\"statue\",\"description\":\"Иконография Бельведерского типа. В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6466/\",\"historic\":\"yes\",\"historic:start_date\":\"1782\",\"material\":\"metal\",\"name\":\"Аполлон\",\"name:en\":\"Apollo\",\"name:zh\":\"阿波罗神像\",\"ref\":\"П-71/1\",\"ref:okn\":\"781610399040386\",\"start_date\":\"1817\",\"tourism\":\"artwork\",\"wikidata\":\"Q118122062\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616021 59.6910564)'::geometry, 'node', 1632497616, 26, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1780\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"historic\":\"yes\",\"historic:start_date\":\"1780\",\"material\":\"metal\",\"name\":\"Венера Каллипиги\",\"ref\":\"П-67/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616651 59.6910293)'::geometry, 'node', 1632497617, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6471/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Polymnia\",\"material\":\"metal\",\"name\":\"Полигимния\",\"name:el\":\"Πολύμνια\",\"name:la\":\"Polyhymnia\",\"name:uk\":\"Полігімнія\",\"name:zh\":\"波吕许谟尼亚\",\"ref\":\"П-66/1\",\"ref:okn\":\"781610399040726\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395079\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614666 59.6910732)'::geometry, 'node', 1632497618, 30, NULL, '{\"alt_name\":\"Гермес Флорентийский\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6467/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Hermes\",\"material\":\"metal\",\"name\":\"Меркурий\",\"name:en\":\"Mercury\",\"ref\":\"П-68/1\",\"ref:okn\":\"781610399040396\",\"start_date\":\"1810\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395060\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613231 59.6910597)'::geometry, 'node', 1632497619, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_subject:wikidata\":\"Q104413\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6477/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Erato\",\"material\":\"metal\",\"name\":\"Эрато\",\"name:el\":\"Ἐρατώ\",\"name:ka\":\"ერატო\",\"name:ko\":\"에라토\",\"name:la\":\"Eratō\",\"name:uk\":\"Ерато\",\"name:zh\":\"厄剌托\",\"ref\":\"П-69/1\",\"ref:okn\":\"781610399040476\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395110\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612077 59.691005)'::geometry, 'node', 1632497620, 31, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6473/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Terpsichore\",\"material\":\"metal\",\"name\":\"Терпсихора\",\"name:el\":\"Τερψιχόρη\",\"name:en\":\"Terpsichore\",\"name:la\":\"Terpsichore\",\"ref\":\"П-70/1\",\"ref:okn\":\"781610399040436\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395096\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611782 59.690902)'::geometry, 'node', 1632497621, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1792\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6472/\",\"historic\":\"yes\",\"historic:start_date\":\"1792\",\"int_name\":\"Thalie\",\"material\":\"metal\",\"name\":\"Талия\",\"name:el\":\"Θαλία\",\"name:la\":\"Thalīa\",\"name:uk\":\"Талія\",\"name:zh\":\"塔利亚\",\"ref\":\"П-59/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612041 59.6907321)'::geometry, 'node', 1632503254, 6, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.462536 59.6908707)'::geometry, 'node', 1652587953, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4619277 59.6908578)'::geometry, 'node', 1652587958, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617256 59.6909215)'::geometry, 'node', 3177639362, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612018 59.6909805)'::geometry, 'node', 3188928044, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613001 59.6906759)'::geometry, 'node', 3218618266, 4, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614144 59.6907882)'::geometry, 'node', 4912277772, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Флора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615482 59.6907937)'::geometry, 'node', 4912277773, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Урания\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613145 59.6908057)'::geometry, 'node', 4912277774, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эвтерпа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616653 59.6908341)'::geometry, 'node', 4912277775, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Клио\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612216 59.6908451)'::geometry, 'node', 4912277776, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Мельпомена\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611751 59.690919)'::geometry, 'node', 4912277777, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Талия\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617272 59.6909351)'::geometry, 'node', 4912277778, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Калиопа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612298 59.691015)'::geometry, 'node', 4912277779, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Терпсихора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616819 59.6910157)'::geometry, 'node', 4912277780, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Полигимния\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461621 59.6910498)'::geometry, 'node', 4912277781, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Венера Каллипиги\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613548 59.6910624)'::geometry, 'node', 4912277782, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эрато\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615016 59.6910712)'::geometry, 'node', 4912277783, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Меркурий\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608954 59.6897746)'::geometry, 'node', 5251698420, 25, NULL, '{\"access\":\"permissive\",\"addr:housenumber\":\"20 литББ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Винченцо Бренна\",\"barrier\":\"gate\",\"description:access\":\"Ворота можно закрывать и открывать руками\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6459/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Большие Старосильвийские ворота\",\"ref\":\"1\",\"ref:okn\":\"781620399040626\",\"start_date\":\"1786..1793\",\"tourism\":\"attraction\",\"website\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"wheelchair\":\"yes\",\"wikidata\":\"Q118122050\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460198 59.6905729)'::geometry, 'node', 6758903438, 6, NULL, '{\"artist_name\":\"И.П. Мартос\",\"artwork_type\":\"sculpture\",\"height\":\"4\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4625734 59.6908311)'::geometry, 'node', 8331430683, 3, NULL, '{\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614743 59.690923)'::geometry, 'node', 8530936200, 1, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Аполлон\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4597619 59.6907527)'::geometry, 'node', 9140565043, 1, NULL, '{\"ford\":\"yes\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4606891 59.6906687)'::geometry, 'node', 9140576937, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608515 59.6907117)'::geometry, 'node', 9140576938, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613945 59.6911519)'::geometry, 'node', 9143069530, 5, NULL, '{\"drain\":\"no\",\"source:direction\":\"survey\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('POINT (30.4615903 59.6911716)'::geometry, 'node', 9143069534, 1, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460339 59.6906064)'::geometry, 'node', 9143093777, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601191 59.6906349)'::geometry, 'node', 9143093778, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610445 59.6908345)'::geometry, 'node', 9143093802, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610243 59.6909861)'::geometry, 'node', 9143093804, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612126 59.691117)'::geometry, 'node', 9143093806, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460445 59.6910504)'::geometry, 'node', 9656736571, 2, NULL, '{\"colour\":\"#4e3a39\",\"description\":\"Веломаршрут №4\",\"height\":\"4\",\"information\":\"guidepost\",\"material\":\"metal\",\"start_date\":\"2021-03..2021-10\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4608056 59.6895935, 30.4608954 59.6897746, 30.4609447 59.6898691, 30.4614541 59.6909278)'::geometry, 'way', 30995960, 42, '{9140727117,5251698420,1518870630,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Центральная аллея\",\"ref\":\"VII\",\"source:name\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605616 59.6906319, 30.4597619 59.6907527, 30.4596087 59.6907755)'::geometry, 'way', 149099000, 6, '{1621246509,9140565043,1621246531}', '{\"intermittent\":\"yes\",\"source:direction\":\"isoline\",\"start_date\":\"1786\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604741 59.6903357, 30.4604598 59.6904575, 30.4604646 59.6905099, 30.4604784 59.6905443, 30.4604933 59.6905665, 30.4605321 59.6905996, 30.4605616 59.6906319)'::geometry, 'way', 149099004, 8, '{1621246503,9140576877,1621246482,1621246465,1621246454,9140576939,1621246509}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601177 59.6905796, 30.4600903 59.6905709, 30.4600721 59.6905605, 30.4600579 59.6905458, 30.4600519 59.6905296, 30.4600545 59.6905133, 30.4600656 59.6904979, 30.4600844 59.6904845, 30.4601095 59.690474, 30.4601391 59.6904673, 30.460169 59.6904648, 30.4601991 59.6904661, 30.4602277 59.6904711, 30.4602498 59.6904787, 30.4602686 59.6904892, 30.4602829 59.6905018, 30.4602918 59.6905174, 30.4602917 59.6905327, 30.4602881 59.6905462, 30.4602793 59.6905579)'::geometry, 'way', 149099028, 5, '{9140576951,9140576902,9140576952,1621246602,1621246607,1621246668,1621246614,1621246615,1621246618,1621246620,1621246630,1621246244,1621246631,1621246224,1621246250,1621246635,1621246647,9140576950,9140576903,9140576949}', '{\"barrier\":\"fence\",\"colour\":\"green\",\"fence_type\":\"wood\",\"height\":\"2\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4603352 59.6911039, 30.460353 59.6910638, 30.4603719 59.6910414, 30.4603979 59.691021, 30.4604807 59.6909761, 30.460577 59.6909284, 30.4606406 59.6908886, 30.460669 59.6908562, 30.460673 59.6908234, 30.4606633 59.6907504, 30.4606582 59.6907286, 30.4606491 59.6907025, 30.4606314 59.690668, 30.460609 59.690636, 30.4605858 59.6906064, 30.4605578 59.6905735, 30.4605362 59.6905385, 30.4605214 59.6905022, 30.4605119 59.6904644, 30.4605095 59.6904098, 30.460512 59.6903499, 30.4605096 59.6903011)'::geometry, 'way', 149099029, 36, '{9140727237,4260007753,9140727241,8650331583,1621246592,1621246588,1621246578,1652603857,9140727240,8650331584,1621246577,9143093738,1621246419,9140576875,1652603906,9140576876,1621246542,8650331586,9140576874,8650331585,1621246403,9140576873,1239612684}', '{\"alt_name\":\"Окружная дорожка\",\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Круговая дорожка\",\"start_date\":\"1789.1793\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610979 59.6907799, 30.4608515 59.6907117)'::geometry, 'way', 149099034, 9, '{1632503255,9140576938}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4629005 59.6913411, 30.4614541 59.6909278)'::geometry, 'way', 150294524, 8, '{1239612692,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"III\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613148 59.6910721, 30.4613667 59.6910818, 30.4614212 59.6910868, 30.4614766 59.6910869, 30.4615311 59.6910822, 30.4615833 59.6910728, 30.4616314 59.691059, 30.461674 59.6910412, 30.4617098 59.6910199, 30.4617378 59.6909958, 30.461757 59.6909696, 30.4617669 59.6909421, 30.4617672 59.6909141, 30.4617579 59.6908866, 30.4617393 59.6908603, 30.4617119 59.690836, 30.4616766 59.6908145, 30.4616343 59.6907964, 30.4615866 59.6907823, 30.4615347 59.6907726, 30.4614802 59.6907676, 30.4614248 59.6907674, 30.4613703 59.6907721, 30.4613181 59.6907815, 30.46127 59.6907954, 30.4612274 59.6908132, 30.4611916 59.6908345, 30.4611636 59.6908586, 30.4611444 59.6908848, 30.4611345 59.6909123, 30.4611342 59.6909402, 30.4611435 59.6909678, 30.4611621 59.6909941, 30.4611895 59.6910184, 30.4612248 59.6910399, 30.461267 59.6910579, 30.4613148 59.6910721)'::geometry, 'way', 150294525, 6, '{1632220686,9143093824,1632220364,9143093807,1632220588,9143093808,1632220590,9143093809,1632220259,9143093810,1632220292,9143093811,1632220283,9143093812,1632220296,9143093813,1632220378,9143093814,1632220319,9143093815,1632220315,9143093816,1632220323,9143093817,1632220358,9143093818,1632220355,9143093819,1632220350,9143093820,1632220359,9143093821,1632220366,9143093822,1632220374,9143093823,1632220686}', '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.460726 59.6910052, 30.460614 59.6910145, 30.4605241 59.69102, 30.4604597 59.691022, 30.4603979 59.691021)'::geometry, 'way', 150294532, 30, '{1632497615,1632220252,9140727238,9140727242,9140727239,1621246592}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"ref\":\"X\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605096 59.6903011, 30.4614541 59.6909278)'::geometry, 'way', 150294541, 8, '{1239612684,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VIII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4617339 59.6901702)'::geometry, 'way', 150294547, 9, '{1632497615,1518870645}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461819 59.6910085, 30.4618473 59.6909863, 30.4618928 59.6909647, 30.461951 59.6909401, 30.4620356 59.6909251, 30.462536 59.6908707)'::geometry, 'way', 152440395, 6, '{1652587944,1652587948,1652587950,9143093800,1652587952,1652587953}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613063 59.6907075, 30.4612631 59.6907161, 30.4612041 59.6907321)'::geometry, 'way', 152442436, 10, '{1652605207,9143204222,1632503254}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4617627 59.6907689, 30.4618218 59.6907946, 30.4618794 59.6908253, 30.4619277 59.6908578)'::geometry, 'way', 152442438, 8, '{1652605205,1652605201,1652605200,1652587958}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4612018 59.6909805, 30.4617256 59.6909215, 30.4625734 59.6908311, 30.4628306 59.6908088)'::geometry, 'way', 311975108, 20, '{3188928044,3177639362,8331430683,7911801321}', '{\"layer\":\"-1\",\"name\":\"Старосильвийская дождевая канализация\",\"source:direction\":\"survey\",\"tunnel\":\"yes\",\"waterway\":\"drain\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611708 59.6911018, 30.4611289 59.6910829, 30.4610793 59.6910531, 30.4610552 59.6910294, 30.4610432 59.6910153, 30.4610243 59.6909861)'::geometry, 'way', 313051687, 8, '{1632503180,9143069533,9143093805,9143069532,1632503185,9143093804}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061)'::geometry, 'way', 426269715, 5, '{4255746051,4255746033,9140576943,9140576942,9140576941,9140576940,4255746057,4255746007,9140576945,9140576946,9140576944,4255746054,4255745992,4255746051}', '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603979 59.691021, 30.4603224 59.6910067, 30.4602382 59.6909843, 30.4601137 59.6909482, 30.4600256 59.6909178, 30.4599203 59.6908773, 30.4597958 59.6908259, 30.4597422 59.6908088, 30.4596966 59.6907997, 30.4596501 59.6907961, 30.4596189 59.6907966, 30.4595885 59.6908005, 30.4595518 59.6908091, 30.4595101 59.6908241)'::geometry, 'way', 438780267, 20, '{1621246592,1621246561,1622496989,8850590008,1621246248,1621246252,8650331580,8849369897,9140576840,8650331579,9140576841,8650331578,9140576842,1622496957}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"loc_name\":\"Спуск у места домика Крик\",\"name\":\"Криковская дорога\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4625498 59.6908065, 30.4614541 59.6909278)'::geometry, 'way', 750779153, 4, '{1632220250,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IV\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4631938 59.6918756)'::geometry, 'way', 750779155, 5, '{1632497615,1195120146}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"II\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4606491 59.6907025)'::geometry, 'way', 750779156, 5, '{1632497615,1621246419}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IX\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4625914 59.6924527)'::geometry, 'way', 750779157, 4, '{1632497615,1652587960}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"I\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611165 59.6918779, 30.46118 59.6916919, 30.4614541 59.6909278)'::geometry, 'way', 750779158, 4, '{9159459639,1239612686,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"XII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4596189 59.6907966, 30.4596712 59.6907865, 30.4597275 59.6907729, 30.459757 59.6907607, 30.4597619 59.6907527, 30.4597677 59.6907431, 30.4597919 59.6907269, 30.4598455 59.6907093, 30.459934 59.6906931, 30.4600118 59.6906782, 30.4600467 59.690666, 30.4600681 59.6906484, 30.4600725 59.6906275, 30.4600655 59.6906044, 30.4600295 59.6905552, 30.4600066 59.6905268, 30.4600031 59.690512, 30.4600111 59.6904995, 30.460044 59.6904799, 30.4600789 59.6904629, 30.4601241 59.6904473)'::geometry, 'way', 988944864, 2, '{9140576841,9140565053,9140565052,9140565051,9140565043,9140565050,9140565049,9140565048,9140565047,9140565046,9140565045,9140565044,1621246253,9140565042,1621246302,1621246323,9140576899,9140576892,9143093786,9143093785,1621246340}', '{\"highway\":\"path\",\"surface\":\"ground\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4607784 59.690696, 30.4606891 59.6906687)'::geometry, 'way', 988944880, 3, '{9140576936,9140576937}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601316 59.6905738, 30.4601383 59.6905745, 30.460144 59.6905725, 30.4601453 59.6905691, 30.4601415 59.6905663, 30.4601348 59.6905656, 30.4601291 59.6905676, 30.4601278 59.6905709, 30.4601316 59.6905738)'::geometry, 'way', 989184163, 1, '{9142788307,9142788306,9142788305,9142788304,9142788303,9142788302,9142788301,9142788300,9142788307}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601637 59.6905695, 30.4601704 59.6905701, 30.4601761 59.6905682, 30.4601774 59.6905648, 30.4601736 59.6905619, 30.4601668 59.6905613, 30.4601612 59.6905632, 30.4601599 59.6905666, 30.4601637 59.6905695)'::geometry, 'way', 989184166, 1, '{9142819031,9142819030,9142819029,9142819028,9142819027,9142819026,9142819025,9142819024,9142819031}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4615026 59.6911479, 30.4614481 59.6911519, 30.4613945 59.6911519)'::geometry, 'way', 989211851, 4, '{1652605211,9143069529,9143069530}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603719 59.6910414, 30.4597387 59.6911122)'::geometry, 'way', 989211857, 12, '{8650331583,4260007752}', '{\"highway\":\"path\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"start_date\":\"1780.1785\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603446 59.6911727, 30.4603806 59.6910714, 30.4603967 59.691047, 30.4604235 59.6910376, 30.4604664 59.6910348, 30.4605415 59.6910308)'::geometry, 'way', 989211858, 1, '{9143069609,9143069608,9143069607,9143069606,9143069605,9143069604}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613583 59.6906799, 30.4614025 59.6907746, 30.461428 59.6907726, 30.4614548 59.6907726, 30.4614763 59.6907739)'::geometry, 'way', 989211859, 1, '{9143093728,9143093727,9143093726,9143093725,9143093724}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461314 59.6906832, 30.461361 59.6907794, 30.4613301 59.6907854, 30.4613033 59.6907929, 30.4612845 59.690799, 30.4609841 59.6905973)'::geometry, 'way', 989211860, 1, '{9143093729,9143093730,9143093731,9143093732,9143093734,9143093733}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611484 59.6909364, 30.4611471 59.6909174, 30.4611497 59.6909005, 30.4611578 59.6908836, 30.4611645 59.6908714, 30.4611739 59.6908606, 30.4606917 59.6907283, 30.460681 59.6907283, 30.460677 59.6907337, 30.460685 59.6907601, 30.4606891 59.6907817, 30.4606917 59.6908129, 30.4606944 59.6908426, 30.4606837 59.6908656, 30.4606596 59.6908927, 30.4606247 59.6909184, 30.460563 59.6909523, 30.460453 59.6910064)'::geometry, 'way', 989211861, 1, '{9143093739,9143093740,9143093741,9143093742,9143093743,9143093744,9143093755,9143093737,9143093736,9143093754,9143093753,9143093722,9143093721,9143093720,9143093719,9143093718,9143093717,9143069616}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605335 59.6903364, 30.4605335 59.6903946, 30.4605308 59.6904501, 30.4605348 59.6904813, 30.4605442 59.6905137, 30.4605576 59.6905394, 30.4605818 59.6905773, 30.4606193 59.6906247, 30.4606408 59.6906545, 30.4606596 59.6906856, 30.4606716 59.6906958, 30.4606958 59.6907039, 30.4611947 59.6908433, 30.4612155 59.6908301, 30.4612369 59.6908166, 30.461253 59.6908098, 30.4609492 59.6906112)'::geometry, 'way', 989211862, 1, '{9143093764,9143093763,9143093762,9143093748,9143093761,9143093760,9143093759,9143093758,9143093757,9143093756,9143093752,9143093751,9143093750,9143093747,9143093746,9143093745,9143093735}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604919 59.6903357, 30.4604919 59.690398, 30.4604892 59.6904494, 30.4604946 59.690486, 30.4605053 59.6905157, 30.4605161 59.6905387, 30.4605402 59.6905766, 30.4605778 59.690624, 30.4605992 59.6906538, 30.460626 59.6906931, 30.4606368 59.6907255, 30.4606448 59.6907574, 30.4606502 59.6907871, 30.4606542 59.6908196, 30.4606502 59.6908494, 30.4606327 59.6908751, 30.4606059 59.6908927, 30.4605496 59.6909266, 30.4604128 59.6909942)'::geometry, 'way', 989211863, 1, '{9143093776,9143093775,9143093774,9143093773,9143093749,9143093772,9143093771,9143093770,9143093769,9143093768,9143093767,9143093765,9143093766,9143069615,9143069610,9143069614,9143069613,9143069612,9143069611}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619893 59.6908956, 30.4620356 59.6909251)'::geometry, 'way', 989211867, 2, '{1652587955,1652587952}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610753 59.6908007, 30.4610979 59.6907799)'::geometry, 'way', 989211868, 4, '{9143093801,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611491 59.6907553, 30.4610979 59.6907799)'::geometry, 'way', 989211869, 4, '{1632503177,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461012 59.6909572, 30.4610056 59.6909157, 30.4610163 59.6908698, 30.4610445 59.6908345)'::geometry, 'way', 989211870, 4, '{1632503179,9143093803,1632503181,9143093802}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613456 59.6911475, 30.46131 59.6911438, 30.4612696 59.6911343, 30.4612126 59.691117)'::geometry, 'way', 989211871, 4, '{1652605209,9143069531,1632503237,9143093806}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4622826 59.6903796)'::geometry, 'way', 991343632, 2, '{1632497615,1518870652}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"V\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4620021 59.690877, 30.4617551 59.6909043, 30.4617579 59.690914, 30.4617593 59.6909255, 30.4617606 59.6909377)'::geometry, 'way', 991343633, 1, '{9159456550,9159456549,9159456545,9159456544,9159456543}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619941 59.6908547, 30.4617471 59.690882, 30.4617392 59.6908714, 30.4617298 59.6908606, 30.4617164 59.6908491)'::geometry, 'way', 991343634, 1, '{9159456552,9159456551,9159456548,9159456547,9159456546}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4602794 59.6911745, 30.4603083 59.6910871)'::geometry, 'way', 991343661, 1, '{9159459675,9159459674}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4614541 59.6909278)'::geometry, 'way', 1042527594, 11, '{9140727237,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч Амфитеатра\",\"ref\":\"XI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4611342 59.6909402, 30.4611345 59.6909123, 30.4611444 59.6908848, 30.4611636 59.6908586, 30.4611916 59.6908345, 30.4612274 59.6908132, 30.46127 59.6907954, 30.4613181 59.6907815, 30.4613703 59.6907721, 30.4614248 59.6907674, 30.4614802 59.6907676, 30.4615347 59.6907726, 30.4615866 59.6907823, 30.4616343 59.6907964, 30.4616766 59.6908145, 30.4617119 59.690836, 30.4617393 59.6908603, 30.4617579 59.6908866, 30.4617672 59.6909141, 30.4617669 59.6909421, 30.461757 59.6909696, 30.4617378 59.6909958, 30.4617098 59.6910199, 30.461674 59.6910412, 30.4616314 59.691059, 30.4615833 59.6910728, 30.4615311 59.6910822, 30.4614766 59.6910869, 30.4614212 59.6910868, 30.4613667 59.6910818, 30.4613148 59.6910721, 30.461267 59.6910579, 30.4612248 59.6910399, 30.4611895 59.6910184, 30.4611621 59.6909941, 30.4611435 59.6909678, 30.4611342 59.6909402)))'::geometry, 'way', 150294525, 6, NULL, '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034)))'::geometry, 'way', 426269715, 5, NULL, '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601599 59.6905666, 30.4601612 59.6905632, 30.4601668 59.6905613, 30.4601736 59.6905619, 30.4601774 59.6905648, 30.4601761 59.6905682, 30.4601704 59.6905701, 30.4601637 59.6905695, 30.4601599 59.6905666)))'::geometry, 'way', 989184166, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography) SERVER sqlite_svr;\n\n--Testcase 41: ERR - raster\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, read PostGOS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49: ERR, no SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 50: ERR, no SRID\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 52:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 53: ERR damaged, but there is SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = (decode('0101000020e6100000bf72ce99fe76', 'hex')::geometry);\n\n-- Insert PostGIS/GEOS BLOB, read SpatiaLite BLOB\n--Testcase 54: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 55:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 56:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 57: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 58:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 59:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 60:  ERR damaged geometry, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (3, decode('0101000020e6100000bf72ce99fe76', 'hex'),  NULL, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 61:  ERR damaged geography, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (4, NULL, decode('0101000020e6100000bf72ce99fe76', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n\n--Testcase 62:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 63:\nINSERT INTO \"♂\" SELECT * FROM \"♂\".\"テスト\";\n--Testcase 64:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 65:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 66:\nSELECT * FROM \"♂\";\n--Testcase 67:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 69:\nSELECT * FROM \"♂\";\n\n--Testcase 70:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL ,\n\tosm_id bigint OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt text\n) SERVER sqlite_svr OPTIONS (table '♁');\n\n--Testcase 71: ERR - No SRID\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\";\n--Testcase 72: OK\nSELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 73:\nUPDATE \"♁\" SET geom = ST_SetSRID(geom, 4326);\n--Testcase 74:\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 75:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 76:\nSELECT * FROM \"♁ FDW\";\n--Testcase 77:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 78:\nSELECT * FROM \"♁ FDW\";\n\n--Testcase 79:\nDROP FOREIGN TABLE \"♂\";\n--Testcase 80:\nDROP FOREIGN TABLE \"♁ FDW\";\n--Testcase 81:\nDROP TABLE \"♁\";\n--Testcase 82:\nDROP TABLE \"♂\".\"テスト\";\n--Testcase 83:\nDROP SCHEMA \"♂\";\n\n-- Test operators implemented in PostGIS 3.4.2, other are not tested\n-- SELECT testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 100   -> TC 150                 -> TC200     -> TC250\n-- WHERE testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 300   -> TC 350                 -> TC400     -> TC450\n\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ gm1 g FROM \"types_PostGIS\";\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && gm1 g FROM \"types_PostGIS\";\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << gm1 g FROM \"types_PostGIS\";\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> gm1 g FROM \"types_PostGIS\";\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< gm1 g FROM \"types_PostGIS\";\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> gm1 g FROM \"types_PostGIS\";\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| gm1 g FROM \"types_PostGIS\";\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> gm1 g FROM \"types_PostGIS\";\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| gm1 g FROM \"types_PostGIS\";\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> gm1 g FROM \"types_PostGIS\";\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= gm1 g FROM \"types_PostGIS\";\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm = gm1 g FROM \"types_PostGIS\";\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| gm1 g FROM \"types_PostGIS\";\n--Testcase 115\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> gm1 g FROM \"types_PostGIS\";\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> gm1 g FROM \"types_PostGIS\";\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ gm1 g FROM \"types_PostGIS\";\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ gm1 g FROM \"types_PostGIS\";\n\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 157:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 159:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> gg1 g FROM \"types_PostGIS\";\n--Testcase 201:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && gg1 g FROM \"types_PostGIS\";\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> gg1 g FROM \"types_PostGIS\";\n--Testcase 203:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg = gg1 g FROM \"types_PostGIS\";\n--Testcase 204\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != gg1 g FROM \"types_PostGIS\";\n\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 300:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ gm1 IS NOT NULL;\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && gm1 IS NOT NULL;\n--Testcase 302:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << gm1 IS NOT NULL;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> gm1 IS NOT NULL;\n--Testcase 304:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< gm1 IS NOT NULL;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> gm1 IS NOT NULL;\n--Testcase 306:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| gm1 IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> gm1 IS NOT NULL;\n--Testcase 308:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| gm1 IS NOT NULL;\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> gm1 IS NOT NULL;\n--Testcase 310:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= gm1 IS NOT NULL;\n--Testcase 311:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm = gm1 IS NOT NULL;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& gm1 IS NOT NULL;\n--Testcase 313:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| gm1 IS NOT NULL;\n--Testcase 314:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> gm1 IS NOT NULL;\n--Testcase 315:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> gm1 IS NOT NULL;\n--Testcase 316:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ gm1 IS NOT NULL;\n--Testcase 317:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ gm1 IS NOT NULL;\n\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 351:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 352:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 353:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 354:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 355:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 356:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 357:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 358:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 359:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 360:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 361:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 362:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 363:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 364:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 365:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 366:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 367:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 368:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 369:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 370:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 400:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> gg1 IS NOT NULL;\n--Testcase 401:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && gg1 IS NOT NULL;\n--Testcase 402:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 404:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg = gg1 IS NOT NULL;\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != gg1 IS NOT NULL;\n\n--Testcase 450:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 451:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 452:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 453:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 454:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 500:\nDROP FOREIGN TABLE \"types_PostGIS\";\n--Testcase 501:\nDROP EXTENSION sqlite_fdw CASCADE;\n--Testcase 502:\nDROP EXTENSION postgis CASCADE;\n"
  },
  {
    "path": "sql/13.15/with_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 47:\nCREATE EXTENSION postgis;\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/without_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/without_gis_support/nogis.sql",
    "content": "--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 10:\nCREATE DOMAIN geometry AS bytea;\n--Testcase 11:\nCREATE DOMAIN geography AS bytea;\n--Testcase 12:\nCREATE DOMAIN addbandarg AS bytea;\n--Testcase 13:\nCREATE DOMAIN box2d AS bytea;\n--Testcase 14:\nCREATE DOMAIN box3d AS bytea;\n--Testcase 15:\nCREATE DOMAIN geometry_dump AS bytea;\n--Testcase 16:\nCREATE DOMAIN geomval AS bytea;\n--Testcase 17:\nCREATE DOMAIN getfaceedges_returntype AS bytea;\n--Testcase 18:\nCREATE DOMAIN rastbandarg AS bytea;\n--Testcase 19:\nCREATE DOMAIN raster AS bytea;\n--Testcase 20:\nCREATE DOMAIN reclassarg AS bytea;\n--Testcase 21:\nCREATE DOMAIN summarystats AS bytea;\n--Testcase 22:\nCREATE DOMAIN topoelement AS bytea;\n--Testcase 23:\nCREATE DOMAIN topoelementarray AS bytea;\n--Testcase 24:\nCREATE DOMAIN topogeometry AS bytea;\n--Testcase 25:\nCREATE DOMAIN unionarg AS bytea;\n--Testcase 26:\nCREATE DOMAIN validatetopology_returntype AS bytea;\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text) SERVER sqlite_svr;\n\n--Testcase 41: ERR unable to convert to unsupported PostGIS specific data type\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, but CANNOT read PostGIS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: read the same BLOBs\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n--Testcase 50:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n\n-- Insert a BLOB, read SpatiaLite BLOB without any transformations\n--Testcase 51: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 52:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 53:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 54: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n\n--Testcase 55:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 56:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 57:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 58:\nSELECT * FROM \"♂\";\n--Testcase 59:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 60:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 61:\nINSERT INTO \"♂\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\n--Testcase 62:\nSELECT * FROM \"♂\";\n\n--Testcase 63:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL,\n\tosm_id int OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt json\n) SERVER sqlite_svr\nOPTIONS (table '♁');\n\n--Testcase 55:\nINSERT INTO \"♁ FDW\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 67:\nSELECT * FROM \"♁ FDW\";\n\n-- PostGIS specific data types, but SpatiaLite or sqlite_fdw unsupported \n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box2d;\n--Testcase 69: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 70:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box3d;\n--Testcase 71: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 72:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry_dump;\n--Testcase 73: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 74:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geomval;\n--Testcase 75: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 76:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE getfaceedges_returntype;\n--Testcase 77: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 78:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE rastbandarg;\n--Testcase 79: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 80:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE raster;\n--Testcase 81: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 82:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE reclassarg;\n--Testcase 83: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 84:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE summarystats;\n--Testcase 85: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 86:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelement;\n--Testcase 87: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 88:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelementarray;\n--Testcase 89: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 90:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topogeometry;\n--Testcase 91: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 92:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE unionarg;\n--Testcase 93: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 94:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE validatetopology_returntype;\n--Testcase 95: -- ERR\nSELECT * FROM \"♂\";\n\n-- PostGIS specific data types, not bytea mode, hence error\n--Testcase 96:\nALTER DOMAIN geometry RENAME TO geom0;\n--Testcase 97:\nALTER DOMAIN geography RENAME TO geog0;\n--Testcase 98:\nCREATE DOMAIN geometry AS text;\n--Testcase 99:\nCREATE DOMAIN geography AS text;\n\n--Testcase 100:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 101: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 102:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geography;\n--Testcase 102: -- ERR\nSELECT * FROM \"♂\";\n\n--Testcase 103:\nDROP DOMAIN geometry CASCADE;\n--Testcase 104:\nDROP DOMAIN geography CASCADE;\n--Testcase 105:\nDROP DOMAIN addbandarg;\n--Testcase 106:\nDROP DOMAIN box2d;\n--Testcase 107:\nDROP DOMAIN box3d;\n--Testcase 108:\nDROP DOMAIN geometry_dump;\n--Testcase 109:\nDROP DOMAIN geomval;\n--Testcase 110:\nDROP DOMAIN getfaceedges_returntype;\n--Testcase 111:\nDROP DOMAIN rastbandarg;\n--Testcase 112:\nDROP DOMAIN raster CASCADE;\n--Testcase 113:\nDROP DOMAIN reclassarg;\n--Testcase 114:\nDROP DOMAIN summarystats;\n--Testcase 115:\nDROP DOMAIN topoelement;\n--Testcase 116:\nDROP DOMAIN topoelementarray;\n--Testcase 117:\nDROP DOMAIN topogeometry;\n--Testcase 118:\nDROP DOMAIN unionarg;\n--Testcase 119:\nDROP DOMAIN validatetopology_returntype;\n--Testcase 120:\nDROP DOMAIN geom0 CASCADE;\n--Testcase 121:\nDROP DOMAIN geog0 CASCADE;\n\n--Testcase 122:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 123:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/13.15/without_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/aggregate.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 18:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n-- test for aggregate pushdown\n--Testcase 8:\nDROP SERVER IF EXISTS sqlite_svr CASCADE;\n--Testcase 9:\nDROP EXTENSION IF EXISTS sqlite_fdw CASCADE;\n\n--Testcase 10:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 11:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 12:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nexplain (costs off, verbose) select count(distinct a) from multiprimary;\n\n--Testcase 2:\nexplain (costs off, verbose) select sum(b),max(b), min(b), avg(b) from multiprimary;\n\n--Testcase 3:\nexplain (costs off, verbose) select sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n\n--Testcase 4:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having sum(a) > 0;\n\n--Testcase 5:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having avg(a^2) > 0 and sum(a) > 0;\n\n-- stddev and variance are not pushed down\n--Testcase 6:\nexplain (costs off, verbose) select stddev(a) from multiprimary;\n--Testcase 7:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having variance(a) > 0;\n\n--Testcase 13:\nDROP FOREIGN TABLE multiprimary;\n\n--Testcase 16:\nCREATE FOREIGN TABLE limittest(id serial OPTIONS (key 'true'), x int, y text) SERVER sqlite_svr;\n\n--Testcase 17:\nINSERT INTO limittest(x, y) VALUES (1, 'x'), (2, 'x'), (3, 'x'), (4, 'x');\n--Testcase 18:\nINSERT INTO limittest(x, y) VALUES (1, 'y'), (2, 'y'), (3, 'y'), (4, 'y');\n--Testcase 19:\nINSERT INTO limittest(x, y) VALUES (1, 'z'), (2, 'z'), (3, 'z'), (4, 'z');\n\n--Testcase 20:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 21:\nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 22:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 23:\nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 24:\nEXPLAIN VERBOSE \nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 25:\nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 26:\nEXPLAIN VERBOSE \nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n--Testcase 27:\nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n\n--Testcase 28:\nDROP FOREIGN TABLE limittest;\n\n--Testcase 14:\nDROP SERVER sqlite_svr;\n--Testcase 15:\nDROP EXTENSION sqlite_fdw CASCADE;\n\n"
  },
  {
    "path": "sql/14.12/extra/aggregates.sql",
    "content": "--\n-- AGGREGATES\n--\n--Testcase 266:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 267:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 268:\nCREATE FOREIGN TABLE onek(\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 269:\nCREATE FOREIGN TABLE aggtest (\n  a       int2,\n  b     float4\n) SERVER sqlite_svr;\n\n--Testcase 270:\nCREATE FOREIGN TABLE student (\n  name    text,\n  age     int4,\n  location  point,\n  gpa     float8\n) SERVER sqlite_svr;\n\n--Testcase 271:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 272:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 678:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 679:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 680:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 681:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 682:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 273:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 683:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 684:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 685:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 686:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 687:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 274:\nCREATE FOREIGN TABLE multi_arg_agg (a int OPTIONS (key 'true'), b int, c text) SERVER sqlite_svr;\n\n--Testcase 275:\nCREATE FOREIGN TABLE VARCHAR_TBL(f1 varchar(4) OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 276:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 688:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 689:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 690:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 691:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 692:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 588:\nSET extra_float_digits = 0;\n--Testcase 1:\nSELECT avg(four) AS avg_1 FROM onek;\n\n--Testcase 2:\nSELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;\n\n--Testcase 697:\nCREATE FOREIGN TABLE agg_tb(v int, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 698:\nINSERT INTO agg_tb(v) VALUES(1), (2), (3);\n--Testcase 699: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 700:\nDELETE FROM agg_tb;\n--Testcase 701:\nINSERT INTO agg_tb(v) VALUES (NULL);\n--Testcase 702: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 703:\nDELETE FROM agg_tb;\n--Testcase 704:\nINSERT INTO agg_tb(v) VALUES (NULL), (1), (2);\n--Testcase 705: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 706:\nCREATE FOREIGN TABLE agg_tb2(v text) SERVER sqlite_svr;\n--Testcase 707:\nINSERT INTO agg_tb2(v) VALUES (array['hello', 'world']);\n--Testcase 708: -- Pg 16+\nSELECT any_value(v) FROM agg_tb2;\n\n-- In 7.1, avg(float4) is computed using float8 arithmetic.\n--Testcase 3:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 693:\nSELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;\n\n--Testcase 4:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 694:\nSELECT avg(gpa)::numeric(10,3) AS avg_3_4 FROM ONLY student;\n\n\n--Testcase 5:\nSELECT sum(four) AS sum_1500 FROM onek;\n--Testcase 6:\nSELECT sum(a) AS sum_198 FROM aggtest;\n--Testcase 7:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 695:\nSELECT sum(b)::numeric(10,3) AS avg_431_773 FROM aggtest;\n--Testcase 8:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 696:\nSELECT sum(gpa)::numeric(10,3) AS avg_6_8 FROM ONLY student;\n\n--Testcase 9:\nSELECT max(four) AS max_3 FROM onek;\n--Testcase 10:\nSELECT max(a) AS max_100 FROM aggtest;\n--Testcase 11:\nSELECT max(aggtest.b) AS max_324_78 FROM aggtest;\n--Testcase 12:\nSELECT max(student.gpa) AS max_3_7 FROM student;\n\n--Testcase 13:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 697:\nSELECT stddev_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 14:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 698:\nSELECT stddev_samp(b)::numeric(20,10) FROM aggtest;\n--Testcase 15:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 699:\nSELECT var_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 16:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 700:\nSELECT var_samp(b)::numeric(20,10) FROM aggtest;\n\n--Testcase 17:\nSELECT stddev_pop(b::numeric) FROM aggtest;\n--Testcase 18:\nSELECT stddev_samp(b::numeric) FROM aggtest;\n--Testcase 19:\nSELECT var_pop(b::numeric) FROM aggtest;\n--Testcase 20:\nSELECT var_samp(b::numeric) FROM aggtest;\n\n-- population variance is defined for a single tuple, sample variance\n-- is not\n--Testcase 277:\nCREATE FOREIGN TABLE agg_t3(a float8, b float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 278:\nDELETE FROM agg_t3;\n--Testcase 279:\nINSERT INTO agg_t3 values (1.0::float8, 2.0::float8);\n--Testcase 280:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n\n--Testcase 281:\nDELETE FROM agg_t3;\n--Testcase 282:\nINSERT INTO agg_t3 values (3.0::float8, 4.0::float8);\n--Testcase 283:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 284:\nDELETE FROM agg_t3;\n--Testcase 285:\nINSERT INTO agg_t3 values ('inf'::float8, 'inf'::float8);\n--Testcase 286:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 287:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 288:\nDELETE FROM agg_t3;\n--Testcase 289:\nINSERT INTO agg_t3 values ('nan'::float8, 'nan'::float8);\n--Testcase 290:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 291:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 292:\nCREATE FOREIGN TABLE agg_t4(a float4, b float4, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 293:\nDELETE FROM agg_t4;\n--Testcase 294:\nINSERT INTO agg_t4 values (1.0::float4, 2.0::float4);\n--Testcase 295:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n\n--Testcase 296:\nDELETE FROM agg_t4;\n--Testcase 297:\nINSERT INTO agg_t4 values (3.0::float4, 4.0::float4);\n--Testcase 298:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 299:\nDELETE FROM agg_t4;\n--Testcase 300:\nINSERT INTO agg_t4 values ('inf'::float4, 'inf'::float4);\n--Testcase 301:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 302:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 303:\nDELETE FROM agg_t4;\n--Testcase 304:\nINSERT INTO agg_t4 values ('nan'::float4, 'nan'::float4);\n--Testcase 305:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 306:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 307:\nCREATE FOREIGN TABLE agg_t5(a numeric, b numeric, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 308:\nDELETE FROM agg_t5;\n--Testcase 309:\nINSERT INTO agg_t5 values (1.0::numeric, 2.0::numeric);\n--Testcase 310:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 311:\nDELETE FROM agg_t5;\n--Testcase 312:\nINSERT INTO agg_t5 values (3.0::numeric, 4.0::numeric);\n--Testcase 313:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 597:\nDELETE FROM agg_t5;\n--Testcase 598:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 599:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 600:\nDELETE FROM agg_t5;\n--Testcase 601:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 602:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 314:\nDELETE FROM agg_t5;\n--Testcase 315:\nINSERT INTO agg_t5 values ('nan'::numeric, 'nan'::numeric);\n--Testcase 316:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n--Testcase 317:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n-- verify correct results for null and NaN inputs\n--Testcase 318:\nCREATE FOREIGN TABLE agg_t8(a text OPTIONS (key 'true'), b text) SERVER sqlite_svr;\n--Testcase 319:\nDELETE FROM agg_t8;\n--Testcase 320:\nINSERT INTO agg_t8 select * from generate_series(1,3);\n--Testcase 321:\nselect sum(null::int4) from agg_t8;\n--Testcase 322:\nselect sum(null::int8) from agg_t8;\n--Testcase 323:\nselect sum(null::numeric) from agg_t8;\n--Testcase 324:\nselect sum(null::float8) from agg_t8;\n--Testcase 325:\nselect avg(null::int4) from agg_t8;\n--Testcase 326:\nselect avg(null::int8) from agg_t8;\n--Testcase 327:\nselect avg(null::numeric) from agg_t8;\n--Testcase 328:\nselect avg(null::float8) from agg_t8;\n--Testcase 329:\nselect sum('NaN'::numeric) from agg_t8;\n--Testcase 330:\nselect avg('NaN'::numeric) from agg_t8;\n\n-- verify correct results for infinite inputs\n--Testcase 331:\nDELETE FROM agg_t3;\n--Testcase 332:\nINSERT INTO agg_t3 VALUES ('1'::float8), ('infinity'::float8);\n--Testcase 333:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 334:\nDELETE FROM agg_t3;\n--Testcase 335:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('1'::float8);\n--Testcase 336:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 337:\nDELETE FROM agg_t3;\n--Testcase 338:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('infinity'::float8);\n--Testcase 339:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 340:\nDELETE FROM agg_t3;\n--Testcase 341:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('infinity'::float8);\n--Testcase 342:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 603:\nDELETE FROM agg_t3;\n--Testcase 604:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('-infinity'::float8);\n--Testcase 605:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 606:\nDELETE FROM agg_t3;\n--Testcase 607:\nINSERT INTO agg_t3 VALUES ('1'::numeric), ('infinity'::numeric);\n--Testcase 608:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 609:\nDELETE FROM agg_t3;\n--Testcase 610:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('1'::numeric);\n--Testcase 611:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 612:\nDELETE FROM agg_t3;\n--Testcase 613:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('infinity'::numeric);\n--Testcase 614:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 615:\nDELETE FROM agg_t3;\n--Testcase 616:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('infinity'::numeric);\n--Testcase 617:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 618:\nDELETE FROM agg_t3;\n--Testcase 619:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('-infinity'::numeric);\n--Testcase 620:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n-- test accuracy with a large input offset\n--Testcase 343:\nCREATE FOREIGN TABLE agg_t6(a float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 344:\nDELETE FROM agg_t6;\n--Testcase 345:\nINSERT INTO agg_t6 VALUES (100000003), (100000004), (100000006), (100000007);\n--Testcase 346:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n--Testcase 347:\nDELETE FROM agg_t6;\n--Testcase 348:\nINSERT INTO agg_t6 VALUES (7000000000005), (7000000000007);\n--Testcase 349:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n-- SQL2003 binary aggregates\n--Testcase 21:\nSELECT regr_count(b, a) FROM aggtest;\n--Testcase 22:\nSELECT regr_sxx(b, a) FROM aggtest;\n--Testcase 23:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 701:\nSELECT regr_syy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 24:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 702:\nSELECT regr_sxy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 25:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 703:\nSELECT regr_avgx(b, a), regr_avgy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 26:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 704:\nSELECT regr_r2(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 27:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 705:\nSELECT regr_slope(b, a)::numeric(20,10), regr_intercept(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 28:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 706:\nSELECT covar_pop(b, a)::numeric(20,10), covar_samp(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 29:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 707:\nSELECT corr(b, a)::numeric(20,10) FROM aggtest;\n\n-- check single-tuple behavior\n--Testcase 350:\nCREATE FOREIGN TABLE agg_t7(a float8, b float8, c float8, d float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 351:\nDELETE FROM agg_t7;\n--Testcase 352:\nINSERT INTO agg_t7 VALUES (1, 2, 3, 4);\n--Testcase 353:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 354:\nDELETE FROM agg_t7;\n--Testcase 355:\nINSERT INTO agg_t7 VALUES (1, 'inf', 3, 'inf');\n--Testcase 356:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 357:\nDELETE FROM agg_t7;\n--Testcase 358:\nINSERT INTO agg_t7 VALUES (1, 'nan', 3, 'nan');\n--Testcase 359:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n-- test accum and combine functions directly\n--Testcase 360:\nCREATE FOREIGN TABLE regr_test (x float8, y float8, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 361:\nDELETE FROM regr_test;\n--Testcase 362:\nINSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);\n--Testcase 363:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 364:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 590:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 365:\nCREATE FOREIGN TABLE agg_t15 (a text, b int, c int, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 366:\ndelete from agg_t15;\n--Testcase 367:\ninsert into agg_t15 values ('{4,140,2900}', 100);\n--Testcase 368:\nSELECT float8_accum(a::float8[], b) from agg_t15;\n\n--Testcase 369:\ndelete from agg_t15;\n--Testcase 370:\ninsert into agg_t15 values ('{4,140,2900,1290,83075,15050}', 200, 100);\n--Testcase 371:\nSELECT float8_regr_accum(a::float8[], b, c) from agg_t15;\n\n--Testcase 372:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30);\n\n--Testcase 373:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (80,100);\n\n--Testcase 374:\nCREATE FOREIGN TABLE agg_t16 (a text, b text, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 375:\ndelete from agg_t16;\n--Testcase 376:\ninsert into agg_t16 values ('{3,60,200}', '{0,0,0}');\n--Testcase 377:\ninsert into agg_t16 values ('{0,0,0}', '{2,180,200}');\n--Testcase 378:\ninsert into agg_t16 values ('{3,60,200}', '{2,180,200}');\n--Testcase 379:\nSELECT float8_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 380:\ndelete from agg_t16;\n--Testcase 381:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{0,0,0,0,0,0}');\n--Testcase 382:\ninsert into agg_t16 values ('{0,0,0,0,0,0}', '{2,180,200,740,57800,-3400}');\n--Testcase 383:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{2,180,200,740,57800,-3400}');\n--Testcase 384:\nSELECT float8_regr_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 385:\nDROP FOREIGN TABLE regr_test;\n\n-- test count, distinct\n--Testcase 30:\nSELECT count(four) AS cnt_1000 FROM onek;\n--Testcase 31:\nSELECT count(DISTINCT four) AS cnt_4 FROM onek;\n\n--Testcase 32:\nselect ten, count(*), sum(four) from onek\ngroup by ten order by ten;\n\n--Testcase 33:\nselect ten, count(four), sum(DISTINCT four) from onek\ngroup by ten order by ten;\n\n-- user-defined aggregates\n--Testcase 386:\nCREATE AGGREGATE newavg (\n   sfunc = int4_avg_accum, basetype = int4, stype = _int8,\n   finalfunc = int8_avg,\n   initcond1 = '{0,0}'\n);\n\n--Testcase 387:\nCREATE AGGREGATE newsum (\n   sfunc1 = int4pl, basetype = int4, stype1 = int4,\n   initcond1 = '0'\n);\n\n--Testcase 388:\nCREATE AGGREGATE newcnt (*) (\n   sfunc = int8inc, stype = int8,\n   initcond = '0', parallel = safe\n);\n\n--Testcase 389:\nCREATE AGGREGATE newcnt (\"any\") (\n   sfunc = int8inc_any, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 390:\nCREATE AGGREGATE oldcnt (\n   sfunc = int8inc, basetype = 'ANY', stype = int8,\n   initcond = '0'\n);\n\n--Testcase 391:\ncreate function sum3(int8,int8,int8) returns int8 as\n'select $1 + $2 + $3' language sql strict immutable;\n\n--Testcase 392:\ncreate aggregate sum2(int8,int8) (\n   sfunc = sum3, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 34:\nSELECT newavg(four) AS avg_1 FROM onek;\n--Testcase 35:\nSELECT newsum(four) AS sum_1500 FROM onek;\n--Testcase 36:\nSELECT newcnt(four) AS cnt_1000 FROM onek;\n--Testcase 37:\nSELECT newcnt(*) AS cnt_1000 FROM onek;\n--Testcase 38:\nSELECT oldcnt(*) AS cnt_1000 FROM onek;\n--Testcase 39:\nSELECT sum2(q1,q2) FROM int8_tbl;\n\n-- test for outer-level aggregates\n\n-- this should work\n--Testcase 40:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n-- this should fail because subquery has an agg of its own in WHERE\n--Testcase 41:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b\n               where sum(distinct a.four + b.four) = b.four);\n\n-- Test handling of sublinks within outer-level aggregates.\n-- Per bug report from Daniel Grace.\n--Testcase 42:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))\nfrom tenk1 o;\n\n-- Test handling of Params within aggregate arguments in hashed aggregation.\n-- Per bug report from Jeevan Chalke.\n--Testcase 393:\nexplain (verbose, costs off)\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 394:\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 395:\nexplain (verbose, costs off)\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--Testcase 396:\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--\n-- test for bitwise integer aggregates\n--\n--Testcase 397:\nCREATE FOREIGN TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 43:\nSELECT\n  BIT_AND(i2) AS \"?\",\n  BIT_OR(i4)  AS \"?\",\n  BIT_XOR(i8) AS \"?\"\nFROM bitwise_test;\n\n--Testcase 44:\nINSERT INTO bitwise_test VALUES\n  (1, 1, 1, 1, 1),\n  (3, 3, 3, null, 2),\n  (7, 7, 7, 3, 4);\n\n--Testcase 45:\nSELECT\n  BIT_AND(i2) AS \"1\",\n  BIT_AND(i4) AS \"1\",\n  BIT_AND(i8) AS \"1\",\n  BIT_AND(i)  AS \"?\",\n  BIT_AND(x)  AS \"0\",\n\n  BIT_OR(i2)  AS \"7\",\n  BIT_OR(i4)  AS \"7\",\n  BIT_OR(i8)  AS \"7\",\n  BIT_OR(i)   AS \"?\",\n  BIT_OR(x)   AS \"7\",\n\n  BIT_XOR(i2) AS \"5\",\n  BIT_XOR(i4) AS \"5\",\n  BIT_XOR(i8) AS \"5\",\n  BIT_XOR(i)  AS \"?\",\n  BIT_XOR(x)  AS \"7\"\nFROM bitwise_test;\n\n--\n-- test boolean aggregates\n--\n-- first test all possible transition and final states\n\n--Testcase 398:\nCREATE FOREIGN TABLE bool_test_tmp(\n  b1 BOOL OPTIONS (key 'true'),\n  b2 BOOL OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n-- boolean and transitions\n-- null because strict\nBEGIN;\n--Testcase 399:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 400:\nSELECT booland_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- and actual computations\nBEGIN;\n--Testcase 401:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE);\n--Testcase 402:\nSELECT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 403:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, FALSE),\n  (FALSE, TRUE),\n  (FALSE, FALSE);\n--Testcase 404:\nSELECT NOT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- boolean or transitions\n-- null because strict\nBEGIN;\n--Testcase 405:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 406:\nSELECT boolor_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- actual computations\nBEGIN;\n--Testcase 407:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE),\n  (TRUE, FALSE),\n  (FALSE, TRUE);\n--Testcase 408:\nSELECT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 409:\nINSERT INTO bool_test_tmp VALUES\n  (FALSE, FALSE);\n--Testcase 410:\nSELECT NOT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n--Testcase 411:\nCREATE FOREIGN TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 46:\nSELECT\n  BOOL_AND(b1)   AS \"n\",\n  BOOL_OR(b3)    AS \"n\"\nFROM bool_test;\n\n--Testcase 47:\nINSERT INTO bool_test VALUES\n  (TRUE, null, FALSE, null),\n  (FALSE, TRUE, null, null),\n  (null, TRUE, FALSE, null);\n\n--Testcase 48:\nSELECT\n  BOOL_AND(b1)     AS \"f\",\n  BOOL_AND(b2)     AS \"t\",\n  BOOL_AND(b3)     AS \"f\",\n  BOOL_AND(b4)     AS \"n\",\n  BOOL_AND(NOT b2) AS \"f\",\n  BOOL_AND(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 49:\nSELECT\n  EVERY(b1)     AS \"f\",\n  EVERY(b2)     AS \"t\",\n  EVERY(b3)     AS \"f\",\n  EVERY(b4)     AS \"n\",\n  EVERY(NOT b2) AS \"f\",\n  EVERY(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 50:\nSELECT\n  BOOL_OR(b1)      AS \"t\",\n  BOOL_OR(b2)      AS \"t\",\n  BOOL_OR(b3)      AS \"f\",\n  BOOL_OR(b4)      AS \"n\",\n  BOOL_OR(NOT b2)  AS \"f\",\n  BOOL_OR(NOT b3)  AS \"t\"\nFROM bool_test;\n\n--\n-- Test cases that should be optimized into indexscans instead of\n-- the generic aggregate implementation.\n--\n\n-- Basic cases\n--Testcase 51:\nexplain (costs off)\n  select min(unique1) from tenk1;\n--Testcase 52:\nselect min(unique1) from tenk1;\n--Testcase 53:\nexplain (costs off)\n  select max(unique1) from tenk1;\n--Testcase 54:\nselect max(unique1) from tenk1;\n--Testcase 55:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 < 42;\n--Testcase 56:\nselect max(unique1) from tenk1 where unique1 < 42;\n--Testcase 57:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42;\n--Testcase 58:\nselect max(unique1) from tenk1 where unique1 > 42;\n\n-- the planner may choose a generic aggregate here if parallel query is\n-- enabled, since that plan will be parallel safe and the \"optimized\"\n-- plan, which has almost identical cost, will not be.  we want to test\n-- the optimized plan, so temporarily disable parallel query.\nbegin;\n--Testcase 628:\nset local max_parallel_workers_per_gather = 0;\n--Testcase 59:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42000;\n--Testcase 60:\nselect max(unique1) from tenk1 where unique1 > 42000;\nrollback;\n\n-- multi-column index (uses tenk1_thous_tenthous)\n--Testcase 61:\nexplain (costs off)\n  select max(tenthous) from tenk1 where thousand = 33;\n--Testcase 62:\nselect max(tenthous) from tenk1 where thousand = 33;\n--Testcase 63:\nexplain (costs off)\n  select min(tenthous) from tenk1 where thousand = 33;\n--Testcase 64:\nselect min(tenthous) from tenk1 where thousand = 33;\n\n-- check parameter propagation into an indexscan subquery\n--Testcase 65:\nexplain (costs off)\n  select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n    from int4_tbl;\n--Testcase 66:\nselect f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n  from int4_tbl;\n\n-- check some cases that were handled incorrectly in 8.3.0\n--Testcase 67:\nexplain (costs off)\n  select distinct max(unique2) from tenk1;\n--Testcase 68:\nselect distinct max(unique2) from tenk1;\n--Testcase 69:\nexplain (costs off)\n  select max(unique2) from tenk1 order by 1;\n--Testcase 70:\nselect max(unique2) from tenk1 order by 1;\n--Testcase 71:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2);\n--Testcase 72:\nselect max(unique2) from tenk1 order by max(unique2);\n--Testcase 73:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 74:\nselect max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 75:\nexplain (costs off)\n  select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n--Testcase 76:\nselect max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n\n-- interesting corner case: constant gets optimized into a seqscan\n--Testcase 77:\nexplain (costs off)\n  select max(100) from tenk1;\n--Testcase 78:\nselect max(100) from tenk1;\n\n-- try it on an inheritance tree\n--Testcase 412:\ncreate foreign table minmaxtest(f1 int) server sqlite_svr;\n--Testcase 413:\ncreate table minmaxtest1() inherits (minmaxtest);\n--Testcase 414:\ncreate table minmaxtest2() inherits (minmaxtest);\n--Testcase 415:\ncreate table minmaxtest3() inherits (minmaxtest);\n--Testcase 416:\ncreate index minmaxtest1i on minmaxtest1(f1);\n--Testcase 417:\ncreate index minmaxtest2i on minmaxtest2(f1 desc);\n--Testcase 418:\ncreate index minmaxtest3i on minmaxtest3(f1) where f1 is not null;\n\n--Testcase 79:\ninsert into minmaxtest values(11), (12);\n--Testcase 80:\ninsert into minmaxtest1 values(13), (14);\n--Testcase 81:\ninsert into minmaxtest2 values(15), (16);\n--Testcase 82:\ninsert into minmaxtest3 values(17), (18);\n\n--Testcase 83:\nexplain (costs off)\n  select min(f1), max(f1) from minmaxtest;\n--Testcase 84:\nselect min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT doesn't do anything useful here, but it shouldn't fail\n--Testcase 85:\nexplain (costs off)\n  select distinct min(f1), max(f1) from minmaxtest;\n--Testcase 86:\nselect distinct min(f1), max(f1) from minmaxtest;\n\n-- check for correct detection of nested-aggregate errors\n--Testcase 87:\nselect max(min(unique1)) from tenk1;\n--Testcase 88:\nselect (select max(min(unique1)) from int8_tbl) from tenk1;\nselect avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3))\n            from tenk1 a1(col1)))\nfrom tenk1 a2(col2);\n--\n-- Test removal of redundant GROUP BY columns\n--\n\n--Testcase 419:\ncreate foreign table agg_t1 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int, d int) server sqlite_svr;\n--Testcase 420:\ncreate foreign table agg_t2 (x int OPTIONS (key 'true'), y int OPTIONS (key 'true'), z int) server sqlite_svr;\n--Testcase 421:\ncreate foreign table agg_t9 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int) server sqlite_svr;\n\n-- Non-primary-key columns can be removed from GROUP BY\n--Testcase 89:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- No removal can happen if the complete PK is not present in GROUP BY\n--Testcase 90:\nexplain (costs off) select a,c from agg_t1 group by a,c,d;\n\n-- Test removal across multiple relations\n--Testcase 91:\nexplain (costs off) select *\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.y,agg_t2.z;\n\n-- Test case where agg_t1 can be optimized but not agg_t2\n--Testcase 92:\nexplain (costs off) select agg_t1.*,agg_t2.x,agg_t2.z\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.z;\n\n-- Cannot optimize when PK is deferrable\n--Testcase 422:\nexplain (costs off) select * from agg_t9 group by a,b,c;\n\n--Testcase 423:\ncreate temp table t1c () inherits (agg_t1);\n\n-- Ensure we don't remove any columns when t1 has a child table\n--Testcase 424:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- Okay to remove columns if we're only querying the parent.\n--Testcase 425:\nexplain (costs off) select * from only agg_t1 group by a,b,c,d;\n\n-- Skip this test, sqlite_fdw does not support partition table\n--create foreign table p_t1 (\n--  a int options (key 'true'),\n--  b int options (key 'true'),\n--  c int,\n--  d int,\n--) partition by list(a) server sqlite_svr;\n--create temp table p_t1_1 partition of p_t1 for values in(1);\n--create temp table p_t1_2 partition of p_t1 for values in(2);\n\n-- Ensure we can remove non-PK columns for partitioned tables.\n--explain (costs off) select * from p_t1 group by a,b,c,d;\n\n--drop table t1 cascade;\n--drop table t2;\n--drop table t3;\n--drop table p_t1;\n\n--\n-- Test GROUP BY matching of join columns that are type-coerced due to USING\n--\n\n--Testcase 426:\ncreate foreign table t1(f1 int, f2 int) server sqlite_svr;\n--Testcase 427:\ncreate foreign table t2(f1 bigint, f2 oid) server sqlite_svr;\n\n--Testcase 428:\nselect f1 from t1 left join t2 using (f1) group by f1;\n--Testcase 429:\nselect f1 from t1 left join t2 using (f1) group by t1.f1;\n--Testcase 430:\nselect t1.f1 from t1 left join t2 using (f1) group by t1.f1;\n-- only this one should fail:\n--Testcase 431:\nselect t1.f1 from t1 left join t2 using (f1) group by f1;\n\n-- check case where we have to inject nullingrels into coerced join alias\nselect f1, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0)\ngroup by f1;\n\n-- same, for a RelabelType coercion\nselect f2, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0)\ngroup by f2;\n\n--Testcase 432:\ndrop foreign table t1, t2;\n--\n-- Test planner's selection of pathkeys for ORDER BY aggregates\n--\n\n-- Ensure we order by four.  This suits the most aggregate functions.\nexplain (costs off)\nselect sum(two order by two),max(four order by four), min(four order by four)\nfrom tenk1;\n\n-- Ensure we order by two.  It's a tie between ordering by two and four but\n-- we tiebreak on the aggregate's position.\nexplain (costs off)\nselect\n  sum(two order by two), max(four order by four),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Similar to above, but tiebreak on ordering by four\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Ensure this one orders by ten since there are 3 aggregates that require ten\n-- vs two that suit two and four.\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two),\n  sum(ten order by ten), min(ten order by ten), max(ten order by ten)\nfrom tenk1;\n\n-- Try a case involving a GROUP BY clause where the GROUP BY column is also\n-- part of an aggregate's ORDER BY clause.  We want a sort order that works\n-- for the GROUP BY along with the first and the last aggregate.\nexplain (costs off)\nselect\n  sum(unique1 order by ten, two), sum(unique1 order by four),\n  sum(unique1 order by two, four)\nfrom tenk1\ngroup by ten;\n\n-- Ensure that we never choose to provide presorted input to an Aggref with\n-- a volatile function in the ORDER BY / DISTINCT clause.  We want to ensure\n-- these sorts are performed individually rather than at the query level.\nexplain (costs off)\nselect\n  sum(unique1 order by two), sum(unique1 order by four),\n  sum(unique1 order by four, two), sum(unique1 order by two, random()),\n  sum(unique1 order by two, random(), random() + 1)\nfrom tenk1\ngroup by ten;\n\n-- Ensure consecutive NULLs are properly treated as distinct from each other\nselect array_agg(distinct val)\nfrom (select null as val from generate_series(1, 2)) g;\n\n-- Ensure no ordering is requested when enable_presorted_aggregate is off\nset enable_presorted_aggregate to off;\nexplain (costs off)\nselect sum(two order by two) from tenk1;\nreset enable_presorted_aggregate;\n\n--\n-- Test combinations of DISTINCT and/or ORDER BY\n--\nbegin;\n--Testcase 93:\ndelete from INT8_TBL;\n--Testcase 94:\ninsert into INT8_TBL values (1,4),(2,3),(3,1),(4,2);\n--Testcase 95:\nselect array_agg(q1 order by q2)\n  from INT8_TBL;\n--Testcase 96:\nselect array_agg(q1 order by q1)\n  from INT8_TBL;\n--Testcase 97:\nselect array_agg(q1 order by q1 desc)\n  from INT8_TBL;\n--Testcase 98:\nselect array_agg(q2 order by q1 desc)\n  from INT8_TBL;\n\n--Testcase 99:\ndelete from INT4_TBL;\n--Testcase 100:\ninsert into INT4_TBL values (1),(2),(1),(3),(null),(2);\n--Testcase 101:\nselect array_agg(distinct f1)\n  from INT4_TBL;\n--Testcase 102:\nselect array_agg(distinct f1 order by f1)\n  from INT4_TBL;\n--Testcase 103:\nselect array_agg(distinct f1 order by f1 desc)\n  from INT4_TBL;\n--Testcase 104:\nselect array_agg(distinct f1 order by f1 desc nulls last)\n  from INT4_TBL;\nrollback;\n\n-- multi-arg aggs, strict/nonstrict, distinct/order by\n--Testcase 433:\ncreate type aggtype as (a integer, b integer, c text);\n\n--Testcase 434:\ncreate function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql strict immutable;\n\n--Testcase 435:\ncreate function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql immutable;\n\n--Testcase 436:\ncreate aggregate aggfstr(integer,integer,text) (\n   sfunc = aggf_trans, stype = aggtype[],\n   initcond = '{}'\n);\n\n--Testcase 437:\ncreate aggregate aggfns(integer,integer,text) (\n   sfunc = aggfns_trans, stype = aggtype[], sspace = 10000,\n   initcond = '{}'\n);\n\nbegin;\n--Testcase 105:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 106:\nselect aggfstr(a,b,c) from multi_arg_agg;\n--Testcase 107:\nselect aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 108:\nselect aggfstr(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 109:\nselect aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 110:\nselect aggfstr(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 111:\nselect aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n-- test specific code paths\n\n--Testcase 112:\nselect aggfns(distinct a,a,c order by c using ~<~,a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 113:\nselect aggfns(distinct a,a,c order by c using ~<~) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 114:\nselect aggfns(distinct a,a,c order by a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 115:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- check node I/O via view creation and usage, also deparsing logic\n\n--Testcase 438:\ncreate view agg_view1 as\n  select aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 116:\nselect * from agg_view1;\n--Testcase 117:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 439:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 118:\nselect * from agg_view1;\n--Testcase 119:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 440:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 120:\nselect * from agg_view1;\n--Testcase 121:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 441:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by b+1) from multi_arg_agg;\n\n--Testcase 122:\nselect * from agg_view1;\n--Testcase 123:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 442:\ncreate or replace view agg_view1 as\n  select aggfns(a,a,c order by b) from multi_arg_agg;\n\n--Testcase 124:\nselect * from agg_view1;\n--Testcase 125:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 443:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by c using ~<~) from multi_arg_agg;\n\n--Testcase 126:\nselect * from agg_view1;\n--Testcase 127:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 444:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n--Testcase 128:\nselect * from agg_view1;\n--Testcase 129:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 445:\ndrop view agg_view1;\nrollback;\n\n-- incorrect DISTINCT usage errors\n--Testcase 130:\ninsert into multi_arg_agg values (1,1,'foo');\n--Testcase 131:\nselect aggfns(distinct a,b,c order by i) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 132:\nselect aggfns(distinct a,b,c order by a,b+1) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 133:\nselect aggfns(distinct a,b,c order by a,b,i,c) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 134:\nselect aggfns(distinct a,a,c order by a,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- string_agg tests\nbegin;\n--Testcase 135:\ndelete from varchar_tbl;\n--Testcase 136:\ninsert into varchar_tbl values ('aaaa'),('bbbb'),('cccc');\n--Testcase 137:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 138:\ndelete from varchar_tbl;\n--Testcase 139:\ninsert into varchar_tbl values ('aaaa'),(null),('bbbb'),('cccc');\n--Testcase 140:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 141:\ndelete from varchar_tbl;\n--Testcase 142:\ninsert into varchar_tbl values (null),(null),('bbbb'),('cccc');\n--Testcase 143:\nselect string_agg(f1,'AB') from varchar_tbl;\n\n--Testcase 144:\ndelete from varchar_tbl;\n--Testcase 145:\ninsert into varchar_tbl values (null),(null);\n--Testcase 146:\nselect string_agg(f1,',') from varchar_tbl;\nrollback;\n\n-- check some implicit casting cases, as per bug #5564\n\n--Testcase 147:\nselect string_agg(distinct f1, ',' order by f1) from varchar_tbl;  -- ok\n--Testcase 148:\nselect string_agg(distinct f1::text, ',' order by f1) from varchar_tbl;  -- not ok\n--Testcase 149:\nselect string_agg(distinct f1, ',' order by f1::text) from varchar_tbl;  -- not ok\n--Testcase 150:\nselect string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl;  -- ok\n\n-- string_agg bytea tests\n--Testcase 446:\ncreate foreign table bytea_test_table(v bytea) server sqlite_svr;\n\n--Testcase 151:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 152:\ninsert into bytea_test_table values(decode('ff','hex'));\n\n--Testcase 153:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 154:\ninsert into bytea_test_table values(decode('aa','hex'));\n\n--Testcase 155:\nselect string_agg(v, '') from bytea_test_table;\n--Testcase 156:\nselect string_agg(v, NULL) from bytea_test_table;\n--Testcase 157:\nselect string_agg(v, decode('ee', 'hex')) from bytea_test_table;\n\n--Testcase 447:\ndrop foreign table bytea_test_table;\n\n-- Test parallel string_agg and array_agg\ncreate foreign table pagg_test (x int, y int) server sqlite_svr;\ninsert into pagg_test\nselect (case x % 4 when 1 then null else x end), x % 10\nfrom generate_series(1,5000) x;\n\nset parallel_setup_cost TO 0;\nset parallel_tuple_cost TO 0;\nset parallel_leader_participation TO 0;\nset min_parallel_table_scan_size = 0;\nset bytea_output = 'escape';\nset max_parallel_workers_per_gather = 2;\n\n-- create a view as we otherwise have to repeat this query a few times.\ncreate view v_pagg_test AS\nselect\n\ty,\n\tmin(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct,\n\tmin(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct,\n\tmin(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct,\n\tmin(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct\nfrom (\n\tselect\n\t\ty,\n\t\tunnest(regexp_split_to_array(a1.t, ','))::int AS t,\n\t\tunnest(regexp_split_to_array(a1.b::text, ',')) AS b,\n\t\tunnest(a1.a) AS a,\n\t\tunnest(a1.aa) AS aa\n\tfrom (\n\t\tselect\n\t\t\ty,\n\t\t\tstring_agg(x::text, ',') AS t,\n\t\t\tstring_agg(x::text::bytea, ',') AS b,\n\t\t\tarray_agg(x) AS a,\n\t\t\tarray_agg(ARRAY[x]) AS aa\n\t\tfrom pagg_test\n\t\tgroup by y\n\t) a1\n) a2\ngroup by y;\n\n-- Ensure results are correct.\nselect * from v_pagg_test order by y;\n\n-- Ensure parallel aggregation is actually being used.\nexplain (costs off) select * from v_pagg_test order by y;\n\nset max_parallel_workers_per_gather = 0;\n\n-- Ensure results are the same without parallel aggregation.\nselect * from v_pagg_test order by y;\n\n-- Clean up\nreset max_parallel_workers_per_gather;\nreset bytea_output;\nreset min_parallel_table_scan_size;\nreset parallel_leader_participation;\nreset parallel_tuple_cost;\nreset parallel_setup_cost;\n\ndrop view v_pagg_test;\ndrop foreign table pagg_test;\n\n\n-- FILTER tests\n\n--Testcase 158:\nselect min(unique1) filter (where unique1 > 100) from tenk1;\n\n--Testcase 159:\nselect sum(1/ten) filter (where ten > 0) from tenk1;\n\n--Testcase 160:\nselect ten, sum(distinct four) filter (where four::text ~ '123') from onek a\ngroup by ten;\n\n--Testcase 161:\nselect ten, sum(distinct four) filter (where four > 10) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n--Testcase 448:\ncreate foreign table agg_t17(foo text, bar text) server sqlite_svr;\n--Testcase 449:\ninsert into agg_t17 values ('a', 'b');\n\n--Testcase 450:\nselect max(foo COLLATE \"C\") filter (where (bar collate \"POSIX\") > '0')\nfrom agg_t17;\n\ncreate foreign table agg_t170(v int) server sqlite_svr;\ninsert into agg_t170(v) values (1), (2), (3);\nselect any_value(v) filter (where v > 2) from agg_t170;\n\n-- outer reference in FILTER (PostgreSQL extension)\n--Testcase 451:\ncreate foreign table agg_t18 (inner_c int) server sqlite_svr;\n--Testcase 452:\ncreate foreign table agg_t19 (outer_c int) server sqlite_svr;\n--Testcase 453:\ninsert into agg_t18 values (1);\n--Testcase 454:\ninsert into agg_t19 values (2), (3);\n\n--Testcase 455:\nselect (select count(*)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n--Testcase 456:\nselect (select count(*) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- outer query is aggregation query\n--Testcase 457:\nselect (select count(inner_c) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n\n--Testcase 162:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1))\n     filter (where o.unique1 < 10))\nfrom tenk1 o;\t\t\t\t\t-- outer query is aggregation query\n\n-- subquery in FILTER clause (PostgreSQL extension)\n--Testcase 163:\nselect sum(unique1) FILTER (WHERE\n  unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1;\n\n-- exercise lots of aggregate parts with FILTER\nbegin;\n--Testcase 164:\ndelete from multi_arg_agg;\n--Testcase 165:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 166:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) from multi_arg_agg, generate_series(1,2) i;\nrollback;\n\n-- check handling of bare boolean Var in FILTER\n--Testcase 672:\nselect max(0) filter (where b1) from bool_test;\n--Testcase 673:\nselect (select max(0) filter (where b1)) from bool_test;\n\n-- check for correct detection of nested-aggregate errors in FILTER\n--Testcase 674:\nselect max(unique1) filter (where sum(ten) > 0) from tenk1;\n--Testcase 675:\nselect (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1;\n--Testcase 676:\nselect max(unique1) filter (where bool_or(ten > 0)) from tenk1;\n--Testcase 677:\nselect (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1;\n\n-- ordered-set aggregates\n\nbegin;\n--Testcase 167:\ndelete from FLOAT8_TBL;\n--Testcase 168:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 169:\nselect f1, percentile_cont(f1) within group (order by x::float8)\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 170:\ndelete from FLOAT8_TBL;\n--Testcase 171:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 172:\nselect f1, percentile_cont(f1 order by f1) within group (order by x)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 173:\ndelete from FLOAT8_TBL;\n--Testcase 174:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 175:\nselect f1, sum() within group (order by x::float8)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 176:\ndelete from FLOAT8_TBL;\n--Testcase 177:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 178:\nselect f1, percentile_cont(f1,f1)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\n--Testcase 179:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 708:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10) from aggtest;\n--Testcase 180:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 709:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10), sum(b)::numeric(10,3) from aggtest;\n--Testcase 181:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 710:\nselect percentile_cont(0.5) within group (order by thousand) from tenk1;\n--Testcase 182:\nselect percentile_disc(0.5) within group (order by thousand) from tenk1;\n\nbegin;\n--Testcase 183:\ndelete from INT4_TBL;\n--Testcase 184:\ninsert into INT4_TBL values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 185:\nselect rank(3) within group (order by f1) from INT4_TBL;\n--Testcase 186:\nselect cume_dist(3) within group (order by f1) from INT4_TBL;\n--Testcase 187:\ninsert into INT4_TBL values (5);\n--Testcase 458:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 711:\nselect (percent_rank(3) within group (order by f1))::numeric(20,10) from INT4_TBL;\n--Testcase 459:\ndelete from INT4_TBL where f1 = 5;\n--Testcase 188:\nselect dense_rank(3) within group (order by f1) from INT4_TBL;\nrollback;\n\n--Testcase 189:\nselect percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 190:\nselect percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 191:\nselect percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand)\nfrom tenk1;\n\n--Testcase 460:\ncreate foreign table agg_t21 (x int) server sqlite_svr;\nbegin;\n--Testcase 248:\ninsert into agg_t21 select * from generate_series(1,6);\n--Testcase 249:\nselect percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x)\nfrom agg_t21;\nrollback;\n\n--Testcase 192:\nselect ten, mode() within group (order by string4) from tenk1 group by ten;\n\n--Testcase 461:\ncreate foreign table agg_t20 (x text) server sqlite_svr;\nbegin;\n--Testcase 462:\ninsert into agg_t20 values (unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]));\n--Testcase 463:\nselect percentile_disc(array[0.25,0.5,0.75]) within group (order by x) from agg_t20;\nrollback;\n\n-- check collation propagates up in suitable cases:\nbegin;\n--Testcase 464:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 465:\nselect pg_collation_for(percentile_disc(1) within group (order by x collate \"POSIX\")) from agg_t20;\nrollback;\n\n-- ordered-set aggs created with CREATE AGGREGATE\n--Testcase 466:\ncreate aggregate my_percentile_disc(float8 ORDER BY anyelement) (\n  stype = internal,\n  sfunc = ordered_set_transition,\n  finalfunc = percentile_disc_final,\n  finalfunc_extra = true,\n  finalfunc_modify = read_write\n);\n\n--Testcase 467:\ncreate aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\") (\n  stype = internal,\n  sfunc = ordered_set_transition_multi,\n  finalfunc = rank_final,\n  finalfunc_extra = true,\n  hypothetical\n);\n\n--Testcase 633:\nalter aggregate my_percentile_disc(float8 ORDER BY anyelement)\n  rename to test_percentile_disc;\n  \n--Testcase 634:\nalter aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\")\n  rename to test_rank;\n\nbegin;\n--Testcase 468:\ninsert into agg_t21 values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 469:\nselect test_rank(3) within group (order by x) from agg_t21;\nrollback;\n \n--Testcase 193:\nselect test_percentile_disc(0.5) within group (order by thousand) from tenk1;\n\n-- ordered-set aggs can't use ungrouped vars in direct args:\nbegin;\n--Testcase 470:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 471:\nselect rank(x) within group (order by x) from agg_t21;\nrollback;\n\n-- outer-level agg can't use a grouped arg of a lower level, either:\nbegin;\n--Testcase 472:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 473:\nselect array(select percentile_disc(a) within group (order by x)\n               from (values (0.3),(0.7)) v(a) group by a)\n  from agg_t21;\nrollback;\n\n-- agg in the direct args is a grouping violation, too:\nbegin;\n--Testcase 474:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 475:\nselect rank(sum(x)) within group (order by x) from agg_t21;\nrollback;\n\n-- hypothetical-set type unification and argument-count failures:\nbegin;\n--Testcase 264:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 265:\nselect rank(3) within group (order by x) from agg_t20;\nrollback;\n\n--Testcase 194:\nselect rank(3) within group (order by stringu1,stringu2) from tenk1;\n\nbegin;\n--Testcase 476:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 477:\nselect rank('fred') within group (order by x) from agg_t21;\nrollback;\n\nbegin;\n--Testcase 478:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 479:\nselect rank('adam'::text collate \"C\") within group (order by x collate \"POSIX\")\n  from agg_t20;\nrollback;\n\n-- hypothetical-set type unification successes:\nbegin;\n--Testcase 480:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 481:\nselect rank('adam'::varchar) within group (order by x) from agg_t20;\nrollback;\n\nbegin;\n--Testcase 482:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 483:\nselect rank('3') within group (order by x) from agg_t21;\nrollback;\n\n-- divide by zero check\nbegin;\n--Testcase 484:\ninsert into agg_t21 select * from generate_series(1,0);\n--Testcase 485:\nselect percent_rank(0) within group (order by x) from agg_t21;\nrollback;\n\n-- deparse and multiple features:\n--Testcase 486:\ncreate view aggordview1 as\nselect ten,\n       percentile_disc(0.5) within group (order by thousand) as p50,\n       percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px,\n       rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred)\n  from tenk1\n group by ten order by ten;\n\n--Testcase 196:\nselect pg_get_viewdef('aggordview1');\n--Testcase 197:\nselect * from aggordview1 order by ten;\n--Testcase 487:\ndrop view aggordview1;\n\n-- variadic aggregates\n--Testcase 488:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 489:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n--Testcase 490:\ncreate function cleast_accum(anycompatible, variadic anycompatiblearray)\nreturns anycompatible language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 491:\ncreate aggregate cleast_agg(variadic items anycompatiblearray) (\n  stype = anycompatible, sfunc = cleast_accum);\n\n--Testcase 198:\nselect least_agg(q1,q2) from int8_tbl;\n--Testcase 199:\nselect least_agg(variadic array[q1,q2]) from int8_tbl;\n\n--Testcase 492:\nselect cleast_agg(q1,q2) from int8_tbl;\n--Testcase 493:\nselect cleast_agg(4.5,f1) from int4_tbl;\n--Testcase 494:\nselect cleast_agg(variadic array[4.5,f1]) from int4_tbl;\n--Testcase 495:\nselect pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl;\n\n-- test aggregates with common transition functions share the same states\n--Testcase 496:\ncreate foreign table agg_t10(one int, id int options (key 'true')) server sqlite_svr;\n--Testcase 497:\ncreate foreign table agg_t11(one int, two int, id int options (key 'true')) server sqlite_svr;\n--Testcase 498:\ncreate foreign table agg_t12(a int, id int options (key 'true')) server sqlite_svr;\nbegin work;\n\n--Testcase 499:\ncreate type avg_state as (total bigint, count bigint);\n\n--Testcase 500:\ncreate or replace function avg_transfn(state avg_state, n int) returns avg_state as\n$$\ndeclare new_state avg_state;\nbegin\n\traise notice 'avg_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state.total := n;\n\t\t\tnew_state.count := 1;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate.total := state.total + n;\n\t\tstate.count := state.count + 1;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 501:\ncreate function avg_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total / state.count;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 502:\ncreate function sum_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 503:\ncreate aggregate my_avg(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn\n);\n\n--Testcase 504:\ncreate aggregate my_sum(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn\n);\n\n-- aggregate state should be shared as aggs are the same.\n--Testcase 505:\ndelete from agg_t10;\n--Testcase 506:\ninsert into agg_t10 values (1), (3);\n--Testcase 507:\nselect my_avg(one),my_avg(one) from agg_t10;\n\n-- aggregate state should be shared as transfn is the same for both aggs.\n--Testcase 508:\nselect my_avg(one),my_sum(one) from agg_t10;\n\n-- same as previous one, but with DISTINCT, which requires sorting the input.\n--Testcase 509:\ndelete from agg_t10;\n--Testcase 510:\ninsert into agg_t10 values (1), (3), (1);\n--Testcase 511:\nselect my_avg(distinct one),my_sum(distinct one) from agg_t10;\n\n-- shouldn't share states due to the distinctness not matching.\n--Testcase 512:\ndelete from agg_t10;\n--Testcase 513:\ninsert into agg_t10 values (1), (3);\n--Testcase 514:\nselect my_avg(distinct one),my_sum(one) from agg_t10;\n\n-- shouldn't share states due to the filter clause not matching.\n--Testcase 515:\nselect my_avg(one) filter (where one > 1),my_sum(one) from agg_t10;\n\n-- this should not share the state due to different input columns.\n--Testcase 516:\ndelete from agg_t11;\n--Testcase 517:\ninsert into agg_t11 values (1,2),(3,4);\n--Testcase 518:\nselect my_avg(one),my_sum(two) from agg_t11;\n\n-- exercise cases where OSAs share state\n--Testcase 519:\ndelete from agg_t12;\n--Testcase 520:\ninsert into agg_t12 values (1), (3), (5), (7);\n--Testcase 521:\nselect\n  percentile_cont(0.5) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n--Testcase 522:\nselect\n  percentile_cont(0.25) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n-- these can't share state currently\n--Testcase 523:\nselect\n  rank(4) within group (order by a),\n  dense_rank(4) within group (order by a)\nfrom agg_t12;\n\n-- test that aggs with the same sfunc and initcond share the same agg state\n--Testcase 524:\ncreate aggregate my_sum_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 525:\ncreate aggregate my_avg_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 526:\ncreate aggregate my_avg_init2(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(4,0)'\n);\n\n-- state should be shared if INITCONDs are matching\n--Testcase 527:\ndelete from agg_t10;\n--Testcase 528:\ninsert into agg_t10 values (1), (3);\n--Testcase 529:\nselect my_sum_init(one),my_avg_init(one) from agg_t10;\n\n\n-- Varying INITCONDs should cause the states not to be shared.\n--Testcase 530:\nselect my_sum_init(one),my_avg_init2(one) from agg_t10;\n\nrollback;\n\n-- test aggregate state sharing to ensure it works if one aggregate has a\n-- finalfn and the other one has none.\nbegin work;\n\n--Testcase 531:\ncreate or replace function sum_transfn(state int4, n int4) returns int4 as\n$$\ndeclare new_state int4;\nbegin\n\traise notice 'sum_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state := n;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate := state + n;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 532:\ncreate function halfsum_finalfn(state int4) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state / 2;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 533:\ncreate aggregate my_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn\n);\n\n--Testcase 534:\ncreate aggregate my_half_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn,\n   finalfunc = halfsum_finalfn\n);\n\n-- Agg state should be shared even though my_sum has no finalfn\n--Testcase 535:\ndelete from agg_t10;\n--Testcase 536:\ninsert into agg_t10 values (1), (2), (3), (4);\n--Testcase 537:\nselect my_sum(one),my_half_sum(one) from agg_t10;\n\nrollback;\n\n\n-- test that the aggregate transition logic correctly handles\n-- transition / combine functions returning NULL\n\n-- First test the case of a normal transition function returning NULL\nBEGIN;\n--Testcase 538:\nCREATE FUNCTION balkifnull(int8, int4)\nRETURNS int8\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 539:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = balkifnull(int8, int4),\n    STYPE = int8,\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n--Testcase 200:\nSELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- Secondly test the case of a parallel aggregate combiner function\n-- returning NULL. For that use normal transition function, but a\n-- combiner function returning NULL.\nBEGIN;\n--Testcase 540:\nCREATE FUNCTION balkifnull(int8, int8)\nRETURNS int8\nPARALLEL SAFE\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 541:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = int4_sum(int8, int4),\n    STYPE = int8,\n    COMBINEFUNC = balkifnull(int8, int8),\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n-- force use of parallelism\n-- Skip this test, cannot alter foreign table tenk1\n-- ALTER FOREIGN TABLE tenk1 set (parallel_workers = 4);\n-- SET LOCAL parallel_setup_cost=0;\n-- SET LOCAL max_parallel_workers_per_gather=4;\n\n-- EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1;\n-- SELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- test multiple usage of an aggregate whose finalfn returns a R/W datum\nBEGIN;\n\nCREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray\nLANGUAGE plpgsql IMMUTABLE AS $$\nBEGIN\n    RETURN array_fill(y[1], ARRAY[4]);\nEND;\n$$;\n\nCREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nDECLARE\n    res x%TYPE;\nBEGIN\n    -- assignment is essential for this test, it expands the array to R/W\n    res := array_fill(x[1], ARRAY[4]);\n    RETURN res;\nEND;\n$$;\n\nCREATE AGGREGATE rwagg(anyarray) (\n    STYPE = anyarray,\n    SFUNC = rwagg_sfunc,\n    FINALFUNC = rwagg_finalfunc\n);\n\nCREATE FUNCTION eatarray(x real[]) RETURNS real[]\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nBEGIN\n    x[1] := x[1] + 1;\n    RETURN x;\nEND;\n$$;\n\nCREATE FOREIGN TABLE float_tb(f real) SERVER sqlite_svr;\nINSERT INTO float_tb(f)  VALUES (1.0);\nSELECT eatarray(rwagg(ARRAY[f::real])), eatarray(rwagg(ARRAY[f::real])) FROM float_tb;\n\nROLLBACK;\n\n\n-- test coverage for aggregate combine/serial/deserial functions\nBEGIN;\n\n--Testcase 635:\nSET parallel_setup_cost = 0;\n--Testcase 636:\nSET parallel_tuple_cost = 0;\n--Testcase 637:\nSET min_parallel_table_scan_size = 0;\n--Testcase 638:\nSET max_parallel_workers_per_gather = 4;\n--Testcase 639:\nSET parallel_leader_participation = off;\n--Testcase 640:\nSET enable_indexonlyscan = off;\n\n-- variance(int4) covers numeric_poly_combine\n-- sum(int8) covers int8_avg_combine\n-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg\n--Testcase 542:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 543:\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n-- variance(int8) covers numeric_combine\n-- avg(numeric) covers numeric_avg_combine\n--Testcase 544:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 545:\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\nROLLBACK;\n\n-- test coverage for dense_rank\n--Testcase 546:\ncreate foreign table agg_t13(x int, id int options (key 'true')) server sqlite_svr;\n--Testcase 547:\ninsert into agg_t13 values (1),(1),(2),(2),(3),(3);\n--Testcase 548:\nSELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM agg_t13 GROUP BY (x) ORDER BY 1;\n--Testcase 549:\ndelete from agg_t13;\n\n\n-- Ensure that the STRICT checks for aggregates does not take NULLness\n-- of ORDER BY columns into account. See bug report around\n-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz\n--Testcase 550:\ncreate foreign table agg_t14(x int, y int, id int options (key 'true')) server sqlite_svr;\n--Testcase 551:\ninsert into agg_t14 values (1, NULL), (1, 2);\n--Testcase 552:\nSELECT min(x ORDER BY y) FROM agg_t14;\n--Testcase 553:\nSELECT min(x ORDER BY y) FROM agg_t14;\n\n-- check collation-sensitive matching between grouping expressions\nbegin;\n--Testcase 554:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 555:\nselect x||'a', case x||'a' when 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\nbegin;\n--Testcase 556:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 557:\nselect x||'a', case when x||'a' = 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\n-- Make sure that generation of HashAggregate for uniqification purposes\n-- does not lead to array overflow due to unexpected duplicate hash keys\n-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com\n--Testcase 641:\nset enable_memoize to off;\n--Testcase 558:\nexplain (costs off)\n  select 1 from tenk1\n   where (hundred, thousand) in (select twothousand, twothousand from onek);\n--Testcase 642:\nreset enable_memoize;\n\n--\n-- Hash Aggregation Spill tests\n--\n\n--Testcase 643:\nset enable_sort=false;\n--Testcase 644:\nset work_mem='64kB';\n\n--Testcase 559:\nselect unique1, count(*), sum(twothousand) from tenk1\ngroup by unique1\nhaving sum(fivethous) > 4975\norder by sum(twothousand);\n\n--Testcase 645:\nset work_mem to default;\n--Testcase 646:\nset enable_sort to default;\n\n--\n-- Compare results between plans using sorting and plans using hash\n-- aggregation. Force spilling in both cases by setting work_mem low.\n--\n\n--Testcase 647:\nset work_mem='64kB';\n\n--Testcase 560:\ncreate foreign table agg_data_2k(g int, id int options (key 'true')) server sqlite_svr;\n--Testcase 561:\ncreate foreign table agg_data_20k(g int, id int options (key 'true')) server sqlite_svr;\n\n--Testcase 562:\ncreate foreign table agg_group_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 563:\ncreate foreign table agg_group_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 564:\ncreate foreign table agg_group_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 565:\ncreate foreign table agg_group_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n--Testcase 566:\ncreate foreign table agg_hash_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 567:\ncreate foreign table agg_hash_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 568:\ncreate foreign table agg_hash_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 569:\ncreate foreign table agg_hash_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n\n--Testcase 570:\ninsert into agg_data_2k select g from generate_series(0, 1999) g;\n--analyze agg_data_2k;\n\n--Testcase 571:\ninsert into agg_data_20k select g from generate_series(0, 19999) g;\n--analyze agg_data_20k;\n\n-- Produce results with sorting.\n\n--Testcase 648:\nset enable_hashagg = false;\n\n--Testcase 649:\nset jit_above_cost = 0;\n\n--Testcase 572:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 573:\ninsert into agg_group_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 574:\ninsert into agg_group_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 650:\nset jit_above_cost to default;\n\n--Testcase 575:\ninsert into agg_group_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 576:\ninsert into agg_group_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n-- Produce results with hash aggregation\n\n--Testcase 651:\nset enable_hashagg = true;\n--Testcase 652:\nset enable_sort = false;\n\n--Testcase 653:\nset jit_above_cost = 0;\n\n--Testcase 577:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 578:\ninsert into agg_hash_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 579:\ninsert into agg_hash_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 654:\nset jit_above_cost to default;\n\n--Testcase 580:\ninsert into agg_hash_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 581:\ninsert into agg_hash_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 655:\nset enable_sort = true;\n--Testcase 656:\nset work_mem to default;\n\n-- Compare group aggregation results to hash aggregation results\n\n--Testcase 582:\n(select * from agg_hash_1 except select * from agg_group_1)\n  union all\n(select * from agg_group_1 except select * from agg_hash_1);\n\n--Testcase 583:\n(select * from agg_hash_2 except select * from agg_group_2)\n  union all\n(select * from agg_group_2 except select * from agg_hash_2);\n\n--Testcase 584:\n(select * from agg_hash_3 except select * from agg_group_3)\n  union all\n(select * from agg_group_3 except select * from agg_hash_3);\n\n--Testcase 585:\n(select * from agg_hash_4 except select * from agg_group_4)\n  union all\n(select * from agg_group_4 except select * from agg_hash_4);\n\n--Testcase 712:\nDELETE FROM INT4_TBL;\n--Testcase 713:\nDELETE FROM INT8_TBL;\n--Testcase 714:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 586:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 587:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/encodings.sql",
    "content": "-- tests for PR #76 github\n-- see https://www.postgresql.org/docs/current/multibyte.html\n-- EUC_CN, not tested\n-- EUC_JP\n-- EUC_JIS_2004, not tested\n-- EUC_KR\n-- EUC_TW, not tested\n-- ISO_8859_5\n-- ISO_8859_6\n-- ISO_8859_7\n-- ISO_8859_8\n-- KOI8R, not tested\n-- KOI8U, not tested\n-- LATIN1\n-- LATIN2\n-- LATIN3\n-- LATIN4\n-- LATIN5\n-- LATIN6\n-- LATIN7\n-- LATIN8\n-- LATIN9\n-- LATIN10\n-- MULE_INTERNAL, not tested\n-- SQL_ASCII\n-- WIN866, not tested\n-- WIN874, not tested\n-- WIN1250\n-- WIN1251\n-- WIN1252\n-- WIN1253\n-- WIN1254\n-- WIN1255\n-- WIN1256\n-- WIN1257\n-- WIN1258, not tested\n\n-- ================\n-- check all data in UTF8\n-- ================\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr;\nSELECT * FROM \"Unicode data\";\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\n-- euc_jp\nCREATE DATABASE \"contrib_regression_EUC_JP\" ENCODING EUC_JP LC_CTYPE='ja_JP.eucjp' LC_COLLATE='ja_JP.eucjp' template template0;\n\\connect \"contrib_regression_EUC_JP\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_JP\";\n\n-- ko_KR.euckr\nCREATE DATABASE \"contrib_regression_EUC_KR\" ENCODING EUC_KR LC_CTYPE='ko_KR.euckr' LC_COLLATE='ko_KR.euckr' template template0;\n\\connect \"contrib_regression_EUC_KR\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_KR\";\n\n-- ISO_8859_5\nCREATE DATABASE \"contrib_regression_ISO_8859_5\" ENCODING ISO_8859_5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_5\";\n\n-- ISO_8859_6\nCREATE DATABASE \"contrib_regression_ISO_8859_6\" ENCODING ISO_8859_6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_6\";\n\n-- ISO_8859_7\nCREATE DATABASE \"contrib_regression_ISO_8859_7\" ENCODING ISO_8859_7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_7\";\n\n-- ISO_8859_8\nCREATE DATABASE \"contrib_regression_ISO_8859_8\" ENCODING ISO_8859_8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_8\";\n\n-- ISO_8859_9\nCREATE DATABASE \"contrib_regression_ISO_8859_9\" ENCODING ISO_8859_9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_9\";\n\n-- LATIN1\nCREATE DATABASE \"contrib_regression_LATIN1\" ENCODING LATIN1 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN1\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN1\";\n\n-- LATIN2\nCREATE DATABASE \"contrib_regression_LATIN2\" ENCODING LATIN2 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN2\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN2\";\n\n-- LATIN3\nCREATE DATABASE \"contrib_regression_LATIN3\" ENCODING LATIN3 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN3\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN3\";\n\n-- LATIN4\nCREATE DATABASE \"contrib_regression_LATIN4\" ENCODING LATIN4 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN4\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN4\";\n\n-- LATIN5\nCREATE DATABASE \"contrib_regression_LATIN5\" ENCODING LATIN5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN5\";\n\n-- LATIN6\nCREATE DATABASE \"contrib_regression_LATIN6\" ENCODING LATIN6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN6\";\n\n-- LATIN7\nCREATE DATABASE \"contrib_regression_LATIN7\" ENCODING LATIN7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN7\";\n\n-- LATIN8\nCREATE DATABASE \"contrib_regression_LATIN8\" ENCODING LATIN8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN8\";\n\n-- LATIN9\nCREATE DATABASE \"contrib_regression_LATIN9\" ENCODING LATIN9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN9\";\n\n-- LATIN10\nCREATE DATABASE \"contrib_regression_LATIN10\" ENCODING LATIN10 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN10\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN10\";\n\n-- cp1250\nCREATE DATABASE \"contrib_regression_WIN1250\" ENCODING WIN1250 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1250\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1250\";\n\n-- cp1251\nCREATE DATABASE \"contrib_regression_WIN1251\" ENCODING WIN1251 LC_CTYPE='bg_BG' LC_COLLATE='bg_BG' template template0;\n\\connect \"contrib_regression_WIN1251\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1251\";\n\n-- cp1252\nCREATE DATABASE \"contrib_regression_WIN1252\" ENCODING WIN1252 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1252\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1252\";\n\n-- cp1253\nCREATE DATABASE \"contrib_regression_WIN1253\" ENCODING WIN1253 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1253\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1253\";\n\n-- cp1254\nCREATE DATABASE \"contrib_regression_WIN1254\" ENCODING WIN1254 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1254\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1254\";\n\n-- cp1255\nCREATE DATABASE \"contrib_regression_WIN1255\" ENCODING WIN1255 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1255\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1255\";\n\n-- cp1256\nCREATE DATABASE \"contrib_regression_WIN1256\" ENCODING WIN1256 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1256\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1256\";\n\n-- cp1257\nCREATE DATABASE \"contrib_regression_WIN1257\" ENCODING WIN1257 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1257\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1257\";\n\n-- SQL_ASCII\nCREATE DATABASE \"contrib_regression_SQL_ASCII\" ENCODING SQL_ASCII LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_SQL_ASCII\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_SQL_ASCII\";\n"
  },
  {
    "path": "sql/14.12/extra/insert.sql",
    "content": "--\n-- insert with DEFAULT in the target_list\n--\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 18:\nCREATE FOREIGN TABLE inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing') SERVER sqlite_svr;\n--Testcase 1:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);\n--Testcase 2:\ninsert into inserttest01 (col2, col3) values (3, DEFAULT);\n--Testcase 3:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, 5, DEFAULT);\n--Testcase 4:\ninsert into inserttest01 values (DEFAULT, 5, 'test');\n--Testcase 5:\ninsert into inserttest01 values (DEFAULT, 7);\n\n--Testcase 6:\nselect * from inserttest01;\n\n--\n-- insert with similar expression / target_list values (all fail)\n--\n--Testcase 7:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT);\n--Testcase 8:\ninsert into inserttest01 (col1, col2, col3) values (1, 2);\n--Testcase 9:\ninsert into inserttest01 (col1) values (1, 2);\n--Testcase 10:\ninsert into inserttest01 (col1) values (DEFAULT, DEFAULT);\n\n--Testcase 11:\nselect * from inserttest01;\n\n--\n-- VALUES test\n--\n--Testcase 12:\ninsert into inserttest01 values(10, 20, '40'), (-1, 2, DEFAULT),\n    ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');\n\n--Testcase 13:\nselect * from inserttest01;\n\n--\n-- TOASTed value test\n--\n--Testcase 14:\ninsert into inserttest01 values(30, 50, repeat('x', 10000));\n\n--Testcase 15:\nselect col1, col2, char_length(col3) from inserttest01;\n\n--\n-- tuple larger than fillfactor\n-- foreign table does not support fillfactor\n--\n-- CREATE TABLE large_tuple_test (a int, b text) WITH (fillfactor = 10);\n-- ALTER TABLE large_tuple_test ALTER COLUMN b SET STORAGE plain;\n\n-- -- create page w/ free space in range [nearlyEmptyFreeSpace, MaxHeapTupleSize)\n-- INSERT INTO large_tuple_test (select 1, NULL);\n\n-- -- should still fit on the page\n-- INSERT INTO large_tuple_test (select 2, repeat('a', 1000));\n-- SELECT pg_size_pretty(pg_relation_size('large_tuple_test'::regclass, 'main'));\n\n-- -- add small record to the second page\n-- INSERT INTO large_tuple_test (select 3, NULL);\n\n-- -- now this tuple won't fit on the second page, but the insert should\n-- -- still succeed by extending the relation\n-- INSERT INTO large_tuple_test (select 4, repeat('a', 8126));\n\n-- DROP TABLE large_tuple_test;\n\n-- skip, sqlite fdw does not support customized type\n/*\n-- check indirection (field/array assignment), cf bug #14265\n--\n-- these tests are aware that transformInsertStmt has 3 separate code paths\n--\n\ncreate type insert_test_type as (if1 int, if2 text[]);\n\ncreate table inserttest (f1 int, f2 int[],\n                         f3 insert_test_type, f4 insert_test_type[]);\n\ninsert into inserttest (f2[1], f2[2]) values (1,2);\ninsert into inserttest (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttest (f2[1], f2[2]) select 7,8;\ninsert into inserttest (f2[1], f2[2]) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttest (f3.if1, f3.if2) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer';\n\nselect * from inserttest;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttest (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttest;\ndrop type insert_test_type;\n\n-- direct partition inserts should check partition bound constraint\ncreate table range_parted (\n\ta text,\n\tb int\n) partition by range (a, (b+0));\n\n-- no partitions, so fail\ninsert into range_parted values ('a', 11);\n\ncreate table part1 partition of range_parted for values from ('a', 1) to ('a', 10);\ncreate table part2 partition of range_parted for values from ('a', 10) to ('a', 20);\ncreate table part3 partition of range_parted for values from ('b', 1) to ('b', 10);\ncreate table part4 partition of range_parted for values from ('b', 10) to ('b', 20);\n\n-- fail\ninsert into part1 values ('a', 11);\ninsert into part1 values ('b', 1);\n-- ok\ninsert into part1 values ('a', 1);\n-- fail\ninsert into part4 values ('b', 21);\ninsert into part4 values ('a', 10);\n-- ok\ninsert into part4 values ('b', 10);\n\n-- fail (partition key a has a NOT NULL constraint)\ninsert into part1 values (null);\n-- fail (expression key (b+0) cannot be null either)\ninsert into part1 values (1);\n\ncreate table list_parted (\n\ta text,\n\tb int\n) partition by list (lower(a));\ncreate table part_aa_bb partition of list_parted FOR VALUES IN ('aa', 'bb');\ncreate table part_cc_dd partition of list_parted FOR VALUES IN ('cc', 'dd');\ncreate table part_null partition of list_parted FOR VALUES IN (null);\n\n-- fail\ninsert into part_aa_bb values ('cc', 1);\ninsert into part_aa_bb values ('AAa', 1);\ninsert into part_aa_bb values (null);\n-- ok\ninsert into part_cc_dd values ('cC', 1);\ninsert into part_null values (null, 0);\n\n-- check in case of multi-level partitioned table\ncreate table part_ee_ff partition of list_parted for values in ('ee', 'ff') partition by range (b);\ncreate table part_ee_ff1 partition of part_ee_ff for values from (1) to (10);\ncreate table part_ee_ff2 partition of part_ee_ff for values from (10) to (20);\n\n-- test default partition\ncreate table part_default partition of list_parted default;\n-- Negative test: a row, which would fit in other partition, does not fit\n-- default partition, even when inserted directly\ninsert into part_default values ('aa', 2);\ninsert into part_default values (null, 2);\n-- ok\ninsert into part_default values ('Zz', 2);\n-- test if default partition works as expected for multi-level partitioned\n-- table as well as when default partition itself is further partitioned\ndrop table part_default;\ncreate table part_xx_yy partition of list_parted for values in ('xx', 'yy') partition by list (a);\ncreate table part_xx_yy_p1 partition of part_xx_yy for values in ('xx');\ncreate table part_xx_yy_defpart partition of part_xx_yy default;\ncreate table part_default partition of list_parted default partition by range(b);\ncreate table part_default_p1 partition of part_default for values from (20) to (30);\ncreate table part_default_p2 partition of part_default for values from (30) to (40);\n\n-- fail\ninsert into part_ee_ff1 values ('EE', 11);\ninsert into part_default_p2 values ('gg', 43);\n-- fail (even the parent's, ie, part_ee_ff's partition constraint applies)\ninsert into part_ee_ff1 values ('cc', 1);\ninsert into part_default values ('gg', 43);\n-- ok\ninsert into part_ee_ff1 values ('ff', 1);\ninsert into part_ee_ff2 values ('ff', 11);\ninsert into part_default_p1 values ('cd', 25);\ninsert into part_default_p2 values ('de', 35);\ninsert into list_parted values ('ab', 21);\ninsert into list_parted values ('xx', 1);\ninsert into list_parted values ('yy', 2);\nselect tableoid::regclass, * from list_parted;\n\n-- Check tuple routing for partitioned tables\n\n-- fail\ninsert into range_parted values ('a', 0);\n-- ok\ninsert into range_parted values ('a', 1);\ninsert into range_parted values ('a', 10);\n-- fail\ninsert into range_parted values ('a', 20);\n-- ok\ninsert into range_parted values ('b', 1);\ninsert into range_parted values ('b', 10);\n-- fail (partition key (b+0) is null)\ninsert into range_parted values ('a');\n\n-- Check default partition\ncreate table part_def partition of range_parted default;\n-- fail\ninsert into part_def values ('b', 10);\n-- ok\ninsert into part_def values ('c', 10);\ninsert into range_parted values (null, null);\ninsert into range_parted values ('a', null);\ninsert into range_parted values (null, 19);\ninsert into range_parted values ('b', 20);\n\nselect tableoid::regclass, * from range_parted;\n-- ok\ninsert into list_parted values (null, 1);\ninsert into list_parted (a) values ('aA');\n-- fail (partition of part_ee_ff not found in both cases)\ninsert into list_parted values ('EE', 0);\ninsert into part_ee_ff values ('EE', 0);\n-- ok\ninsert into list_parted values ('EE', 1);\ninsert into part_ee_ff values ('EE', 10);\nselect tableoid::regclass, * from list_parted;\n\n-- some more tests to exercise tuple-routing with multi-level partitioning\ncreate table part_gg partition of list_parted for values in ('gg') partition by range (b);\ncreate table part_gg1 partition of part_gg for values from (minvalue) to (1);\ncreate table part_gg2 partition of part_gg for values from (1) to (10) partition by range (b);\ncreate table part_gg2_1 partition of part_gg2 for values from (1) to (5);\ncreate table part_gg2_2 partition of part_gg2 for values from (5) to (10);\n\ncreate table part_ee_ff3 partition of part_ee_ff for values from (20) to (30) partition by range (b);\ncreate table part_ee_ff3_1 partition of part_ee_ff3 for values from (20) to (25);\ncreate table part_ee_ff3_2 partition of part_ee_ff3 for values from (25) to (30);\n\ntruncate list_parted;\ninsert into list_parted values ('aa'), ('cc');\ninsert into list_parted select 'Ff', s.a from generate_series(1, 29) s(a);\ninsert into list_parted select 'gg', s.a from generate_series(1, 9) s(a);\ninsert into list_parted (b) values (1);\nselect tableoid::regclass::text, a, min(b) as min_b, max(b) as max_b from list_parted group by 1, 2 order by 1;\n\n-- direct partition inserts should check hash partition bound constraint\n\n-- Use hand-rolled hash functions and operator classes to get predictable\n-- result on different machines.  The hash function for int4 simply returns\n-- the sum of the values passed to it and the one for text returns the length\n-- of the non-empty string value passed to it or 0.\n\ncreate or replace function part_hashint4_noop(value int4, seed int8)\nreturns int8 as $$\nselect value + seed;\n$$ language sql immutable;\n\ncreate operator class part_test_int4_ops\nfor type int4\nusing hash as\noperator 1 =,\nfunction 2 part_hashint4_noop(int4, int8);\n\ncreate or replace function part_hashtext_length(value text, seed int8)\nRETURNS int8 AS $$\nselect length(coalesce(value, ''))::int8\n$$ language sql immutable;\n\ncreate operator class part_test_text_ops\nfor type text\nusing hash as\noperator 1 =,\nfunction 2 part_hashtext_length(text, int8);\n\ncreate table hash_parted (\n\ta int\n) partition by hash (a part_test_int4_ops);\ncreate table hpart0 partition of hash_parted for values with (modulus 4, remainder 0);\ncreate table hpart1 partition of hash_parted for values with (modulus 4, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 4, remainder 3);\n\ninsert into hash_parted values(generate_series(1,10));\n\n-- direct insert of values divisible by 4 - ok;\ninsert into hpart0 values(12),(16);\n-- fail;\ninsert into hpart0 values(11);\n-- 11 % 4 -> 3 remainder i.e. valid data for hpart3 partition\ninsert into hpart3 values(11);\n\n-- view data\nselect tableoid::regclass as part, a, a%4 as \"remainder = a % 4\"\nfrom hash_parted order by part;\n\n-- test \\d+ output on a table which has both partitioned and unpartitioned\n-- partitions\n\\d+ list_parted\n\n-- cleanup\ndrop table range_parted, list_parted;\ndrop table hash_parted;\n\n-- test that a default partition added as the first partition accepts any value\n-- including null\ncreate table list_parted (a int) partition by list (a);\ncreate table part_default partition of list_parted default;\n\\d+ part_default\ninsert into part_default values (null);\ninsert into part_default values (1);\ninsert into part_default values (-1);\nselect tableoid::regclass, a from list_parted;\n-- cleanup\ndrop table list_parted;\n\n-- more tests for certain multi-level partitioning scenarios\ncreate table mlparted (a int, b int) partition by range (a, b);\ncreate table mlparted1 (b int not null, a int not null) partition by range ((b+0));\ncreate table mlparted11 (like mlparted1);\nalter table mlparted11 drop a;\nalter table mlparted11 add a int;\nalter table mlparted11 drop a;\nalter table mlparted11 add a int not null;\n-- attnum for key attribute 'a' is different in mlparted, mlparted1, and mlparted11\nselect attrelid::regclass, attname, attnum\nfrom pg_attribute\nwhere attname = 'a'\n and (attrelid = 'mlparted'::regclass\n   or attrelid = 'mlparted1'::regclass\n   or attrelid = 'mlparted11'::regclass)\norder by attrelid::regclass::text;\n\nalter table mlparted1 attach partition mlparted11 for values from (2) to (5);\nalter table mlparted attach partition mlparted1 for values from (1, 2) to (1, 10);\n\n-- check that \"(1, 2)\" is correctly routed to mlparted11.\ninsert into mlparted values (1, 2);\nselect tableoid::regclass, * from mlparted;\n\n-- check that proper message is shown after failure to route through mlparted1\ninsert into mlparted (a, b) values (1, 5);\n\ntruncate mlparted;\nalter table mlparted add constraint check_b check (b = 3);\n\n-- have a BR trigger modify the row such that the check_b is violated\ncreate function mlparted11_trig_fn()\nreturns trigger AS\n$$\nbegin\n  NEW.b := 4;\n  return NEW;\nend;\n$$\nlanguage plpgsql;\ncreate trigger mlparted11_trig before insert ON mlparted11\n  for each row execute procedure mlparted11_trig_fn();\n\n-- check that the correct row is shown when constraint check_b fails after\n-- \"(1, 2)\" is routed to mlparted11 (actually \"(1, 4)\" would be shown due\n-- to the BR trigger mlparted11_trig_fn)\ninsert into mlparted values (1, 2);\ndrop trigger mlparted11_trig on mlparted11;\ndrop function mlparted11_trig_fn();\n\n-- check that inserting into an internal partition successfully results in\n-- checking its partition constraint before inserting into the leaf partition\n-- selected by tuple-routing\ninsert into mlparted1 (a, b) values (2, 3);\n\n-- check routing error through a list partitioned table when the key is null\ncreate table lparted_nonullpart (a int, b char) partition by list (b);\ncreate table lparted_nonullpart_a partition of lparted_nonullpart for values in ('a');\ninsert into lparted_nonullpart values (1);\ndrop table lparted_nonullpart;\n\n-- check that RETURNING works correctly with tuple-routing\nalter table mlparted drop constraint check_b;\ncreate table mlparted12 partition of mlparted1 for values from (5) to (10);\ncreate table mlparted2 (b int not null, a int not null);\nalter table mlparted attach partition mlparted2 for values from (1, 10) to (1, 20);\ncreate table mlparted3 partition of mlparted for values from (1, 20) to (1, 30);\ncreate table mlparted4 (like mlparted);\nalter table mlparted4 drop a;\nalter table mlparted4 add a int not null;\nalter table mlparted attach partition mlparted4 for values from (1, 30) to (1, 40);\nwith ins (a, b, c) as\n  (insert into mlparted (b, a) select s.a, 1 from generate_series(2, 39) s(a) returning tableoid::regclass, *)\n  select a, b, min(c), max(c) from ins group by a, b order by 1;\n\nalter table mlparted add c text;\ncreate table mlparted5 (c text, a int not null, b int not null) partition by list (c);\ncreate table mlparted5a (a int not null, c text, b int not null);\nalter table mlparted5 attach partition mlparted5a for values in ('a');\nalter table mlparted attach partition mlparted5 for values from (1, 40) to (1, 50);\nalter table mlparted add constraint check_b check (a = 1 and b < 45);\ninsert into mlparted values (1, 45, 'a');\ncreate function mlparted5abrtrig_func() returns trigger as $$ begin new.c = 'b'; return new; end; $$ language plpgsql;\ncreate trigger mlparted5abrtrig before insert on mlparted5a for each row execute procedure mlparted5abrtrig_func();\ninsert into mlparted5 (a, b, c) values (1, 40, 'a');\ndrop table mlparted5;\nalter table mlparted drop constraint check_b;\n\n-- Check multi-level default partition\ncreate table mlparted_def partition of mlparted default partition by range(a);\ncreate table mlparted_def1 partition of mlparted_def for values from (40) to (50);\ncreate table mlparted_def2 partition of mlparted_def for values from (50) to (60);\ninsert into mlparted values (40, 100);\ninsert into mlparted_def1 values (42, 100);\ninsert into mlparted_def2 values (54, 50);\n-- fail\ninsert into mlparted values (70, 100);\ninsert into mlparted_def1 values (52, 50);\ninsert into mlparted_def2 values (34, 50);\n-- ok\ncreate table mlparted_defd partition of mlparted_def default;\ninsert into mlparted values (70, 100);\n\nselect tableoid::regclass, * from mlparted_def;\n\n-- Check multi-level tuple routing with attributes dropped from the\n-- top-most parent.  First remove the last attribute.\nalter table mlparted add d int, add e int;\nalter table mlparted drop e;\ncreate table mlparted5 partition of mlparted\n  for values from (1, 40) to (1, 50) partition by range (c);\ncreate table mlparted5_ab partition of mlparted5\n  for values from ('a') to ('c') partition by list (c);\n-- This partitioned table should remain with no partitions.\ncreate table mlparted5_cd partition of mlparted5\n  for values from ('c') to ('e') partition by list (c);\ncreate table mlparted5_a partition of mlparted5_ab for values in ('a');\ncreate table mlparted5_b (d int, b int, c text, a int);\nalter table mlparted5_ab attach partition mlparted5_b for values in ('b');\ntruncate mlparted;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ntruncate mlparted;\n-- Remove the before last attribute.\nalter table mlparted add e int, add d int;\nalter table mlparted drop e;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ndrop table mlparted5;\n\n-- check that message shown after failure to find a partition shows the\n-- appropriate key description (or none) in various situations\ncreate table key_desc (a int, b int) partition by list ((a+0));\ncreate table key_desc_1 partition of key_desc for values in (1) partition by range (b);\n\ncreate user regress_insert_other_user;\ngrant select (a) on key_desc_1 to regress_insert_other_user;\ngrant insert on key_desc to regress_insert_other_user;\n\nset role regress_insert_other_user;\n-- no key description is shown\ninsert into key_desc values (1, 1);\n\nreset role;\ngrant select (b) on key_desc_1 to regress_insert_other_user;\nset role regress_insert_other_user;\n-- key description (b)=(1) is now shown\ninsert into key_desc values (1, 1);\n\n-- key description is not shown if key contains expression\ninsert into key_desc values (2, 1);\nreset role;\nrevoke all on key_desc from regress_insert_other_user;\nrevoke all on key_desc_1 from regress_insert_other_user;\ndrop role regress_insert_other_user;\ndrop table key_desc, key_desc_1;\n\n-- test minvalue/maxvalue restrictions\ncreate table mcrparted (a int, b int, c int) partition by range (a, abs(b), c);\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, 0, 0) to (1, maxvalue, maxvalue);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, minvalue);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, 0) to (30, 20, minvalue);\n\n-- check multi-column range partitioning expression enforces the same\n-- constraint as what tuple-routing would determine it to be\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, minvalue, minvalue) to (1, maxvalue, maxvalue);\ncreate table mcrparted1 partition of mcrparted for values from (2, 1, minvalue) to (10, 5, 10);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, maxvalue);\ncreate table mcrparted3 partition of mcrparted for values from (11, 1, 1) to (20, 10, 10);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, minvalue) to (30, 20, maxvalue);\ncreate table mcrparted5 partition of mcrparted for values from (30, 21, 20) to (maxvalue, maxvalue, maxvalue);\n\n-- null not allowed in range partition\ninsert into mcrparted values (null, null, null);\n\n-- routed to mcrparted0\ninsert into mcrparted values (0, 1, 1);\ninsert into mcrparted0 values (0, 1, 1);\n\n-- routed to mcparted1\ninsert into mcrparted values (9, 1000, 1);\ninsert into mcrparted1 values (9, 1000, 1);\ninsert into mcrparted values (10, 5, -1);\ninsert into mcrparted1 values (10, 5, -1);\ninsert into mcrparted values (2, 1, 0);\ninsert into mcrparted1 values (2, 1, 0);\n\n-- routed to mcparted2\ninsert into mcrparted values (10, 6, 1000);\ninsert into mcrparted2 values (10, 6, 1000);\ninsert into mcrparted values (10, 1000, 1000);\ninsert into mcrparted2 values (10, 1000, 1000);\n\n-- no partition exists, nor does mcrparted3 accept it\ninsert into mcrparted values (11, 1, -1);\ninsert into mcrparted3 values (11, 1, -1);\n\n-- routed to mcrparted5\ninsert into mcrparted values (30, 21, 20);\ninsert into mcrparted5 values (30, 21, 20);\ninsert into mcrparted4 values (30, 21, 20);\t-- error\n\n-- check rows\nselect tableoid::regclass::text, * from mcrparted order by 1;\n\n-- cleanup\ndrop table mcrparted;\n\n-- check that a BR constraint can't make partition contain violating rows\ncreate table brtrigpartcon (a int, b text) partition by list (a);\ncreate table brtrigpartcon1 partition of brtrigpartcon for values in (1);\ncreate or replace function brtrigpartcon1trigf() returns trigger as $$begin new.a := 2; return new; end$$ language plpgsql;\ncreate trigger brtrigpartcon1trig before insert on brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();\ninsert into brtrigpartcon values (1, 'hi there');\ninsert into brtrigpartcon1 values (1, 'hi there');\n\n-- check that the message shows the appropriate column description in a\n-- situation where the partitioned table is not the primary ModifyTable node\ncreate table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);\ncreate role regress_coldesc_role;\ngrant insert on inserttest3 to regress_coldesc_role;\ngrant insert on brtrigpartcon to regress_coldesc_role;\nrevoke select on brtrigpartcon from regress_coldesc_role;\nset role regress_coldesc_role;\nwith result as (insert into brtrigpartcon values (1, 'hi there') returning 1)\n  insert into inserttest3 (f3) select * from result;\nreset role;\n\n-- cleanup\nrevoke all on inserttest3 from regress_coldesc_role;\nrevoke all on brtrigpartcon from regress_coldesc_role;\ndrop role regress_coldesc_role;\ndrop table inserttest3;\ndrop table brtrigpartcon;\ndrop function brtrigpartcon1trigf();\n\n-- check that \"do nothing\" BR triggers work with tuple-routing\ncreate table donothingbrtrig_test (a int, b text) partition by list (a);\ncreate table donothingbrtrig_test1 (b text, a int);\ncreate table donothingbrtrig_test2 (c text, b text, a int);\nalter table donothingbrtrig_test2 drop column c;\ncreate or replace function donothingbrtrig_func() returns trigger as $$begin raise notice 'b: %', new.b; return NULL; end$$ language plpgsql;\ncreate trigger donothingbrtrig1 before insert on donothingbrtrig_test1 for each row execute procedure donothingbrtrig_func();\ncreate trigger donothingbrtrig2 before insert on donothingbrtrig_test2 for each row execute procedure donothingbrtrig_func();\nalter table donothingbrtrig_test attach partition donothingbrtrig_test1 for values in (1);\nalter table donothingbrtrig_test attach partition donothingbrtrig_test2 for values in (2);\ninsert into donothingbrtrig_test values (1, 'foo'), (2, 'bar');\ncopy donothingbrtrig_test from stdout;\n1\tbaz\n2\tqux\n\\.\nselect tableoid::regclass, * from donothingbrtrig_test;\n\n-- cleanup\ndrop table donothingbrtrig_test;\ndrop function donothingbrtrig_func();\n\n-- check multi-column range partitioning with minvalue/maxvalue constraints\ncreate table mcrparted (a text, b int) partition by range(a, b);\ncreate table mcrparted1_lt_b partition of mcrparted for values from (minvalue, minvalue) to ('b', minvalue);\ncreate table mcrparted2_b partition of mcrparted for values from ('b', minvalue) to ('c', minvalue);\ncreate table mcrparted3_c_to_common partition of mcrparted for values from ('c', minvalue) to ('common', minvalue);\ncreate table mcrparted4_common_lt_0 partition of mcrparted for values from ('common', minvalue) to ('common', 0);\ncreate table mcrparted5_common_0_to_10 partition of mcrparted for values from ('common', 0) to ('common', 10);\ncreate table mcrparted6_common_ge_10 partition of mcrparted for values from ('common', 10) to ('common', maxvalue);\ncreate table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);\ncreate table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);\n\n\\d+ mcrparted\n\\d+ mcrparted1_lt_b\n\\d+ mcrparted2_b\n\\d+ mcrparted3_c_to_common\n\\d+ mcrparted4_common_lt_0\n\\d+ mcrparted5_common_0_to_10\n\\d+ mcrparted6_common_ge_10\n\\d+ mcrparted7_gt_common_lt_d\n\\d+ mcrparted8_ge_d\n\ninsert into mcrparted values ('aaa', 0), ('b', 0), ('bz', 10), ('c', -10),\n    ('comm', -10), ('common', -10), ('common', 0), ('common', 10),\n    ('commons', 0), ('d', -10), ('e', 0);\nselect tableoid::regclass, * from mcrparted order by a, b;\ndrop table mcrparted;\n\n-- check that wholerow vars in the RETURNING list work with partitioned tables\ncreate table returningwrtest (a int) partition by list (a);\ncreate table returningwrtest1 partition of returningwrtest for values in (1);\ninsert into returningwrtest values (1) returning returningwrtest;\n\n-- check also that the wholerow vars in RETURNING list are converted as needed\nalter table returningwrtest add b text;\ncreate table returningwrtest2 (b text, c int, a int);\nalter table returningwrtest2 drop c;\nalter table returningwrtest attach partition returningwrtest2 for values in (2);\ninsert into returningwrtest values (2, 'foo') returning returningwrtest;\ndrop table returningwrtest;\n*/\n\n-- drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 19:\nDROP SERVER sqlite_svr;\n--Testcase 20:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/join.sql",
    "content": "--\n-- JOIN\n-- Test JOIN clauses\n--\n--Testcase 360:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 361:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 362:\nCREATE FOREIGN TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n) SERVER sqlite_svr; \n\n--Testcase 363:\nCREATE FOREIGN TABLE J2_TBL (\n  i integer,\n  k integer\n) SERVER sqlite_svr; \n\n--Testcase 364:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 365:\nCREATE FOREIGN TABLE tenk2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 366:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 539:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 540:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 541:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 542:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 543:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 367:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 544:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 545:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 546:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 547:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 548:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n--Testcase 368:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 549:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 550:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 551:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 552:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 553:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 369:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO J1_TBL VALUES (1, 4, 'one');\n--Testcase 2:\nINSERT INTO J1_TBL VALUES (2, 3, 'two');\n--Testcase 3:\nINSERT INTO J1_TBL VALUES (3, 2, 'three');\n--Testcase 4:\nINSERT INTO J1_TBL VALUES (4, 1, 'four');\n--Testcase 5:\nINSERT INTO J1_TBL VALUES (5, 0, 'five');\n--Testcase 6:\nINSERT INTO J1_TBL VALUES (6, 6, 'six');\n--Testcase 7:\nINSERT INTO J1_TBL VALUES (7, 7, 'seven');\n--Testcase 8:\nINSERT INTO J1_TBL VALUES (8, 8, 'eight');\n--Testcase 9:\nINSERT INTO J1_TBL VALUES (0, NULL, 'zero');\n--Testcase 10:\nINSERT INTO J1_TBL VALUES (NULL, NULL, 'null');\n--Testcase 11:\nINSERT INTO J1_TBL VALUES (NULL, 0, 'zero');\n\n--Testcase 12:\nINSERT INTO J2_TBL VALUES (1, -1);\n--Testcase 13:\nINSERT INTO J2_TBL VALUES (2, 2);\n--Testcase 14:\nINSERT INTO J2_TBL VALUES (3, -3);\n--Testcase 15:\nINSERT INTO J2_TBL VALUES (2, 4);\n--Testcase 16:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 17:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 18:\nINSERT INTO J2_TBL VALUES (0, NULL);\n--Testcase 19:\nINSERT INTO J2_TBL VALUES (NULL, NULL);\n--Testcase 20:\nINSERT INTO J2_TBL VALUES (NULL, 0);\n\n-- useful in some tests below\n--Testcase 370:\ncreate temp table onerow();\n--Testcase 371:\ninsert into onerow default values;\nanalyze onerow;\n\n\n--\n-- CORRELATION NAMES\n-- Make sure that table/column aliases are supported\n-- before diving into more complex join syntax.\n--\n\n--Testcase 21:\nSELECT *\n  FROM J1_TBL AS tx;\n\n--Testcase 22:\nSELECT *\n  FROM J1_TBL tx;\n\n--Testcase 23:\nSELECT *\n  FROM J1_TBL AS t1 (a, b, c);\n\n--Testcase 24:\nSELECT *\n  FROM J1_TBL t1 (a, b, c);\n\n--Testcase 25:\nSELECT *\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e);\n\n--Testcase 26:\nSELECT t1.a, t2.e\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e)\n  WHERE t1.a = t2.d;\n\n\n--\n-- CROSS JOIN\n-- Qualifications are not allowed on cross joins,\n-- which degenerate into a standard unqualified inner join.\n--\n\n--Testcase 27:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- ambiguous column\n--Testcase 28:\nSELECT i, k, t\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- resolve previous ambiguity by specifying the table name\n--Testcase 29:\nSELECT t1.i, k, t\n  FROM J1_TBL t1 CROSS JOIN J2_TBL t2;\n\n--Testcase 30:\nSELECT ii, tt, kk\n  FROM (J1_TBL CROSS JOIN J2_TBL)\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 31:\nSELECT tx.ii, tx.jj, tx.kk\n  FROM (J1_TBL t1 (a, b, c) CROSS JOIN J2_TBL t2 (d, e))\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 32:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL a CROSS JOIN J2_TBL b;\n\n\n--\n--\n-- Inner joins (equi-joins)\n--\n--\n\n--\n-- Inner joins (equi-joins) with USING clause\n-- The USING syntax changes the shape of the resulting table\n-- by including a column in the USING clause only once in the result.\n--\n\n-- Inner equi-join on specified column\n--Testcase 33:\nSELECT *\n  FROM J1_TBL INNER JOIN J2_TBL USING (i);\n\n-- Same as above, slightly different syntax\n--Testcase 34:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i);\n\n--Testcase 35:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, d) USING (a)\n  ORDER BY a, d;\n\n--Testcase 36:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, b) USING (b)\n  ORDER BY b, t1.a;\n\n-- test join using aliases\n--Testcase 489:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 490:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 491:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i)) AS x WHERE J1_TBL.t = 'one';  -- error\n--Testcase 492:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.i = 1;  -- ok\n--Testcase 493:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.t = 'one';  -- error\n--Testcase 494:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i) AS x) AS xx WHERE x.i = 1;  -- error (XXX could use better hint)\n--Testcase 495:\nSELECT *\n  FROM J1_TBL a1 JOIN J2_TBL a2 USING (i) AS a1;  -- error\n--Testcase 496:\nSELECT x.*\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 497:\nSELECT ROW(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 498:\nSELECT row_to_json(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n\n--\n-- NATURAL JOIN\n-- Inner equi-join on all columns with the same name\n--\n\n--Testcase 37:\nSELECT *\n  FROM J1_TBL NATURAL JOIN J2_TBL;\n\n--Testcase 38:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (a, d);\n\n--Testcase 39:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (d, a);\n\n-- mismatch number of columns\n-- currently, Postgres will fill in with underlying names\n--Testcase 40:\nSELECT *\n  FROM J1_TBL t1 (a, b) NATURAL JOIN J2_TBL t2 (a);\n\n\n--\n-- Inner joins (equi-joins)\n--\n\n--Testcase 41:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.i);\n\n--Testcase 42:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.k);\n\n\n--\n-- Non-equi-joins\n--\n\n--Testcase 43:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i <= J2_TBL.k);\n\n\n--\n-- Outer joins\n-- Note that OUTER is a noise word\n--\n\n--Testcase 44:\nSELECT *\n  FROM J1_TBL LEFT OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 45:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 46:\nSELECT *\n  FROM J1_TBL RIGHT OUTER JOIN J2_TBL USING (i);\n\n--Testcase 47:\nSELECT *\n  FROM J1_TBL RIGHT JOIN J2_TBL USING (i);\n\n--Testcase 48:\nSELECT *\n  FROM J1_TBL FULL OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 49:\nSELECT *\n  FROM J1_TBL FULL JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 50:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (k = 1);\n\n--Testcase 51:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (i = 1);\n\n--\n-- semijoin selectivity for <>\n--\n--Testcase 52:\nexplain (costs off)\nselect * from int4_tbl i4, tenk1 a\nwhere exists(select * from tenk1 b\n             where a.twothousand = b.twothousand and a.fivethous <> b.fivethous)\n      and i4.f1 = a.tenthous;\n\n\n--\n-- More complicated constructs\n--\n\n--\n-- Multiway full join\n--\n\n--Testcase 372:\nCREATE FOREIGN TABLE t11 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 373:\nCREATE FOREIGN TABLE t21 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 374:\nCREATE FOREIGN TABLE t31 (name TEXT, n INTEGER) SERVER sqlite_svr;\n\n--Testcase 53:\nINSERT INTO t11 VALUES ( 'bb', 11 );\n--Testcase 54:\nINSERT INTO t21 VALUES ( 'bb', 12 );\n--Testcase 55:\nINSERT INTO t21 VALUES ( 'cc', 22 );\n--Testcase 56:\nINSERT INTO t21 VALUES ( 'ee', 42 );\n--Testcase 57:\nINSERT INTO t31 VALUES ( 'bb', 13 );\n--Testcase 58:\nINSERT INTO t31 VALUES ( 'cc', 23 );\n--Testcase 59:\nINSERT INTO t31 VALUES ( 'dd', 33 );\n\n--Testcase 60:\nSELECT * FROM t11 FULL JOIN t21 USING (name) FULL JOIN t31 USING (name);\n\n--\n-- Test interactions of join syntax and subqueries\n--\n\n-- Basic cases (we expect planner to pull up the subquery here)\n--Testcase 61:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nINNER JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 62:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nLEFT JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 63:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nFULL JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n-- Cases with non-nullable expressions in subquery results;\n-- make sure these go to null as expected\n--Testcase 64:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 65:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL LEFT JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 66:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 67:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL INNER JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 68:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL FULL JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 69:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n--Testcase 70:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n-- Constants as join keys can also be problematic\n--Testcase 375:\nSELECT * FROM\n  (SELECT name, n as s1_n FROM t11) as s1\nFULL JOIN\n  (SELECT name, 2 as s2_n FROM t21) as s2\nON (s1_n = s2_n);\n\n-- Test for propagation of nullability constraints into sub-joins\n\n--Testcase 376:\ncreate foreign table x (x1 int, x2 int) server sqlite_svr;\n--Testcase 71:\ninsert into x values (1,11);\n--Testcase 72:\ninsert into x values (2,22);\n--Testcase 73:\ninsert into x values (3,null);\n--Testcase 74:\ninsert into x values (4,44);\n--Testcase 75:\ninsert into x values (5,null);\n\n--Testcase 377:\ncreate foreign table y (y1 int, y2 int) server sqlite_svr;\n--Testcase 76:\ninsert into y values (1,111);\n--Testcase 77:\ninsert into y values (2,222);\n--Testcase 78:\ninsert into y values (3,333);\n--Testcase 79:\ninsert into y values (4,null);\n\n--Testcase 80:\nselect * from x;\n--Testcase 81:\nselect * from y;\n\n--Testcase 82:\nselect * from x left join y on (x1 = y1 and x2 is not null);\n--Testcase 83:\nselect * from x left join y on (x1 = y1 and y2 is not null);\n\n--Testcase 84:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1);\n--Testcase 85:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and x2 is not null);\n--Testcase 86:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and y2 is not null);\n--Testcase 87:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and xx2 is not null);\n-- these should NOT give the same answers as above\n--Testcase 88:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (x2 is not null);\n--Testcase 89:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (y2 is not null);\n--Testcase 90:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (xx2 is not null);\n\n--\n-- regression test: check for bug with propagation of implied equality\n-- to outside an IN\n--\n--Testcase 91:\nselect count(*) from tenk1 a where unique1 in\n  (select unique1 from tenk1 b join tenk1 c using (unique1)\n   where b.unique2 = 42);\n\n--\n-- regression test: check for failure to generate a plan with multiple\n-- degenerate IN clauses\n--\n--Testcase 92:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\n\n-- try that with GEQO too\nbegin;\n--Testcase 499:\nset geqo = on;\n--Testcase 500:\nset geqo_threshold = 2;\n--Testcase 93:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\nrollback;\n\n--\n-- regression test: be sure we cope with proven-dummy append rels\n--\n--Testcase 378:\ncreate table b (aa int, bb int);\n--Testcase 379:\nexplain (costs off)\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--Testcase 380:\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--\n-- regression test: check handling of empty-FROM subquery underneath outer join\n--\n--Testcase 94:\nexplain (costs off)\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--Testcase 95:\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--\n-- regression test: check a case where join_clause_is_movable_into() gives\n-- an imprecise result, causing an assertion failure\n--\n--Testcase 96:\nselect count(*)\nfrom\n  (select t31.tenthous as x1, coalesce(t11.stringu1, t21.stringu1) as x2\n   from tenk1 t11\n   left join tenk1 t21 on t11.unique1 = t21.unique1\n   join tenk1 t31 on t11.unique2 = t31.unique2) ss,\n  tenk1 t4,\n  tenk1 t5\nwhere t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1;\n\n--\n-- regression test: check a case where we formerly missed including an EC\n-- enforcement clause because it was expected to be handled at scan level\n--\n--Testcase 97:\nexplain (costs off)\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--Testcase 98:\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--\n-- check a case where we formerly got confused by conflicting sort orders\n-- in redundant merge join path keys\n-- PS: Used ORDER BY to force SQLite and PG12 always order in the same way (NULLS FIRST/LAST default value for PG and Sqlite are different)\n--\n--Testcase 99:\nexplain (costs off)\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--Testcase 100:\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--\n-- a different check for handling of redundant sort keys in merge joins\n--\n--Testcase 101:\nexplain (costs off)\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n--Testcase 102:\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n\n--\n-- Clean up\n--\n\n--Testcase 381:\nDROP FOREIGN TABLE t11;\n--Testcase 382:\nDROP FOREIGN TABLE t21;\n--Testcase 383:\nDROP FOREIGN TABLE t31;\n\n--Testcase 384:\nDROP FOREIGN TABLE J1_TBL;\n--Testcase 385:\nDROP FOREIGN TABLE J2_TBL;\n\n-- Both DELETE and UPDATE allow the specification of additional tables\n-- to \"join\" against to determine which rows should be modified.\n\n--Testcase 386:\nCREATE FOREIGN TABLE t12 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 387:\nCREATE FOREIGN TABLE t22 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 388:\nCREATE FOREIGN TABLE t32 (x int OPTIONS (key 'true'), y int) SERVER sqlite_svr;\n\n--Testcase 103:\nINSERT INTO t12 VALUES (5, 10);\n--Testcase 104:\nINSERT INTO t12 VALUES (15, 20);\n--Testcase 105:\nINSERT INTO t12 VALUES (100, 100);\n--Testcase 106:\nINSERT INTO t12 VALUES (200, 1000);\n--Testcase 107:\nINSERT INTO t22 VALUES (200, 2000);\n--Testcase 108:\nINSERT INTO t32 VALUES (5, 20);\n--Testcase 109:\nINSERT INTO t32 VALUES (6, 7);\n--Testcase 110:\nINSERT INTO t32 VALUES (7, 8);\n--Testcase 111:\nINSERT INTO t32 VALUES (500, 100);\n\n--Testcase 112:\nDELETE FROM t32 USING t12 table1 WHERE t32.x = table1.a;\n--Testcase 113:\nSELECT * FROM t32;\n--Testcase 114:\nDELETE FROM t32 USING t12 JOIN t22 USING (a) WHERE t32.x > t12.a;\n--Testcase 115:\nSELECT * FROM t32;\n--Testcase 116:\nDELETE FROM t32 USING t32 t3_other WHERE t32.x = t3_other.x AND t32.y = t3_other.y;\n--Testcase 117:\nSELECT * FROM t32;\n\n-- Test join against inheritance tree\n\n--Testcase 389:\ncreate temp table t2a () inherits (t22);\n\n--Testcase 118:\ninsert into t2a values (200, 2001);\n\n--Testcase 119:\nselect * from t12 left join t22 on (t12.a = t22.a);\n\n-- Test matching of column name with wrong alias\n\n--Testcase 120:\nselect t12.x from t12 join t32 on (t12.a = t32.x);\n\n--Testcase 536:\ndrop table t2a;\n\n--\n-- regression test for 8.1 merge right join bug\n--\n\n--Testcase 390:\nCREATE FOREIGN TABLE tt1 ( tt1_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO tt1 VALUES (1, 11);\n--Testcase 122:\nINSERT INTO tt1 VALUES (2, NULL);\n\n--Testcase 391:\nCREATE FOREIGN TABLE tt2 ( tt2_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 123:\nINSERT INTO tt2 VALUES (21, 11);\n--Testcase 124:\nINSERT INTO tt2 VALUES (22, 11);\n\n--Testcase 501:\nset enable_hashjoin to off;\n--Testcase 502:\nset enable_nestloop to off;\n\n-- these should give the same results\n\n--Testcase 125:\nselect tt1.*, tt2.* from tt1 left join tt2 on tt1.joincol = tt2.joincol;\n\n--Testcase 126:\nselect tt1.*, tt2.* from tt2 right join tt1 on tt1.joincol = tt2.joincol;\n\n--Testcase 503:\nreset enable_hashjoin;\n--Testcase 504:\nreset enable_nestloop;\n\n--\n-- regression test for bug #13908 (hash join with skew tuples & nbatch increase)\n--\n\n--Testcase 505:\nset work_mem to '64kB';\n--Testcase 506:\nset enable_mergejoin to off;\n--Testcase 507:\nset enable_memoize to off;\n\n--Testcase 127:\nexplain (costs off)\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n--Testcase 128:\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n\n--Testcase 508:\nreset work_mem;\n--Testcase 509:\nreset enable_mergejoin;\n--Testcase 510:\nreset enable_memoize;\n\n--\n-- regression test for 8.2 bug with improper re-ordering of left joins\n--\n\n--Testcase 392:\ncreate foreign table tt3(f1 int, f2 text) server sqlite_svr;\n--Testcase 129:\ninsert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x;\n\n--Testcase 393:\ncreate foreign table tt4(f1 int) server sqlite_svr;\n--Testcase 130:\ninsert into tt4 values (0),(1),(9999);\n\n--Testcase 131:\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE c.f1 IS NULL\n) AS d ON (a.f1 = d.f1)\nWHERE d.f1 IS NULL;\n\n--\n-- regression test for proper handling of outer joins within antijoins\n--\n\n--Testcase 394:\ncreate foreign table tt4x(c1 int, c2 int, c3 int) server sqlite_svr;\n\n--Testcase 132:\nexplain (costs off)\nselect * from tt4x t1\nwhere not exists (\n  select 1 from tt4x t2\n    left join tt4x t3 on t2.c3 = t3.c1\n    left join ( select t5.c1 as c1\n                from tt4x t4 left join tt4x t5 on t4.c2 = t5.c1\n              ) a1 on t3.c2 = a1.c1\n  where t1.c1 = t2.c2\n);\n\n--\n-- regression test for problems of the sort depicted in bug #3494\n--\n\n--Testcase 395:\ncreate foreign table tt5(f1 int, f2 int) server sqlite_svr;\n--Testcase 396:\ncreate foreign table tt6(f1 int, f2 int) server sqlite_svr;\n\n--Testcase 133:\ninsert into tt5 values(1, 10);\n--Testcase 134:\ninsert into tt5 values(1, 11);\n\n--Testcase 135:\ninsert into tt6 values(1, 9);\n--Testcase 136:\ninsert into tt6 values(1, 2);\n--Testcase 137:\ninsert into tt6 values(2, 9);\n\n--Testcase 138:\nselect * from tt5,tt6 where tt5.f1 = tt6.f1 and tt5.f1 = tt5.f2 - tt6.f2;\n\n--\n-- regression test for problems of the sort depicted in bug #3588\n--\n\n--Testcase 397:\ncreate foreign table xx (pkxx int) server sqlite_svr;\n--Testcase 398:\ncreate foreign table yy (pkyy int, pkxx int) server sqlite_svr;\n\n--Testcase 139:\ninsert into xx values (1);\n--Testcase 140:\ninsert into xx values (2);\n--Testcase 141:\ninsert into xx values (3);\n\n--Testcase 142:\ninsert into yy values (101, 1);\n--Testcase 143:\ninsert into yy values (201, 2);\n--Testcase 144:\ninsert into yy values (301, NULL);\n\n--Testcase 145:\nselect yy.pkyy as yy_pkyy, yy.pkxx as yy_pkxx, yya.pkyy as yya_pkyy,\n       xxa.pkxx as xxa_pkxx, xxb.pkxx as xxb_pkxx\nfrom yy\n     left join (SELECT * FROM yy where pkyy = 101) as yya ON yy.pkyy = yya.pkyy\n     left join xx xxa on yya.pkxx = xxa.pkxx\n     left join xx xxb on coalesce (xxa.pkxx, 1) = xxb.pkxx;\n\n--\n-- regression test for improper pushing of constants across outer-join clauses\n-- (as seen in early 8.2.x releases)\n--\n\n--Testcase 399:\ncreate foreign table zt1 (f1 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 400:\ncreate foreign table zt2 (f2 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 401:\ncreate foreign table zt3 (f3 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 146:\ninsert into zt1 values(53);\n--Testcase 147:\ninsert into zt2 values(53);\n\n--Testcase 148:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zt1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 402:\ncreate temp view zv1 as select *,'dummy'::text AS junk from zt1;\n\n--Testcase 149:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zv1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 537:\ndrop view zv1;\n\n--\n-- regression test for improper extraction of OR indexqual conditions\n-- (as seen in early 8.3.x releases)\n--\n\n--Testcase 150:\nselect a.unique2, a.ten, b.tenthous, b.unique2, b.hundred\nfrom tenk1 a left join tenk1 b on a.unique2 = b.tenthous\nwhere a.unique1 = 42 and\n      ((b.unique2 is null and a.ten = 2) or b.hundred = 3);\n\n--\n-- test proper positioning of one-time quals in EXISTS (8.4devel bug)\n--\n--Testcase 151:\nprepare foo(bool) as\n  select count(*) from tenk1 a left join tenk1 b\n    on (a.unique2 = b.unique1 and exists\n        (select 1 from tenk1 c where c.thousand = b.unique2 and $1));\n--Testcase 152:\nexecute foo(true);\n--Testcase 153:\nexecute foo(false);\n\n--\n-- test for sane behavior with noncanonical merge clauses, per bug #4926\n--\n\nbegin;\n\n--Testcase 511:\nset enable_mergejoin = 1;\n--Testcase 512:\nset enable_hashjoin = 0;\n--Testcase 513:\nset enable_nestloop = 0;\n\n--Testcase 403:\ncreate foreign table a1 (i integer) server sqlite_svr;\n--Testcase 404:\ncreate foreign table b1 (x integer, y integer) server sqlite_svr;\n\n--Testcase 154:\nselect * from a1 left join b1 on i = x and i = y and x = i;\n\nrollback;\n\n-- skip this test, sqlite fdw does not support customized type\n-- test handling of merge clauses using record_ops\n--\n--begin;\n\n--create type mycomptype as (id int, v bigint);\n\n--create foreign table tidv (idv mycomptype) server sqlite_svr;\n--create index on tidv (idv);\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--set enable_mergejoin = 0;\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--rollback;\n\n--\n-- test NULL behavior of whole-row Vars, per bug #5025\n--\n--Testcase 155:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join int8_tbl t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 156:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 157:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl offset 0) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 158:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join\n  (select q1, case when q2=1 then 1 else q2 end as q2 from int8_tbl) t2\n  on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--\n-- test incorrect failure to NULL pulled-up subexpressions\n--\nbegin;\n\n--Testcase 405:\ncreate foreign table a2 (\n     code char OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 406:\ncreate foreign table b2 (\n     a char OPTIONS (key 'true'),\n     num integer OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 407:\ncreate foreign table c2 (\n     name char OPTIONS (key 'true'),\n     a char\n) server sqlite_svr;\n\n--Testcase 159:\ninsert into a2 (code) values ('p');\n--Testcase 160:\ninsert into a2 (code) values ('q');\n--Testcase 161:\ninsert into b2 (a, num) values ('p', 1);\n--Testcase 162:\ninsert into b2 (a, num) values ('p', 2);\n--Testcase 163:\ninsert into c2 (name, a) values ('A', 'p');\n--Testcase 164:\ninsert into c2 (name, a) values ('B', 'q');\n--Testcase 165:\ninsert into c2 (name, a) values ('C', null);\n\n--Testcase 166:\nselect c2.name, ss.code, ss.b_cnt, ss.const\nfrom c2 left join\n  (select a2.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const\n   from a2 left join\n     (select count(1) as cnt, b2.a from b2 group by b2.a) as b_grp\n     on a2.code = b_grp.a\n  ) as ss\n  on (c2.a = ss.code)\norder by c2.name;\n\nrollback;\n\n--\n-- test incorrect handling of placeholders that only appear in targetlists,\n-- per bug #6154\n--\n--Testcase 408:\ncreate foreign table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id int options (key 'true')) server sqlite_svr;\n--Testcase 409:\ninsert into sub_tbl values (1, 1, 1, 2, 42);\n\n--Testcase 410:\nSELECT * FROM\n( SELECT key1 from sub_tbl) sub1\nLEFT JOIN\n( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl ) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n-- test the path using join aliases, too\n--Testcase 411:\nSELECT * FROM\n( SELECT key1 from sub_tbl ) sub1\nLEFT JOIN\n( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl ) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl ) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n--\n-- test case where a PlaceHolderVar is used as a nestloop parameter\n--\n\n--Testcase 167:\nEXPLAIN (COSTS OFF)\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--Testcase 168:\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--\n-- nested nestloops can require nested PlaceHolderVars\n--\n\n--Testcase 412:\ncreate foreign table nt1 (\n  id int OPTIONS (key 'true'),\n  a1 boolean,\n  a2 boolean\n) server sqlite_svr;\n--Testcase 413:\ncreate foreign table nt2 (\n  id int OPTIONS (key 'true'),\n  nt1_id int,\n  b1 boolean,\n  b2 boolean\n) server sqlite_svr;\n--Testcase 414:\ncreate foreign table nt3 (\n  id int OPTIONS (key 'true'),\n  nt2_id int,\n  c1 boolean\n) server sqlite_svr;\n\n--Testcase 169:\ninsert into nt1 values (1,true,true);\n--Testcase 170:\ninsert into nt1 values (2,true,false);\n--Testcase 171:\ninsert into nt1 values (3,false,false);\n--Testcase 172:\ninsert into nt2 values (1,1,true,true);\n--Testcase 173:\ninsert into nt2 values (2,2,true,false);\n--Testcase 174:\ninsert into nt2 values (3,3,false,false);\n--Testcase 175:\ninsert into nt3 values (1,1,true);\n--Testcase 176:\ninsert into nt3 values (2,2,false);\n--Testcase 177:\ninsert into nt3 values (3,3,true);\n\n--Testcase 178:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 179:\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--\n-- test case where a PlaceHolderVar is propagated into a subquery\n--\n\n--Testcase 180:\nexplain (costs off)\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--Testcase 181:\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--\n-- variant where a PlaceHolderVar is needed at a join, but not above the join\n--\n\n--Testcase 514:\nexplain (costs off)\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--Testcase 515:\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--\n-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE\n--\n--Testcase 182:\nselect * from int4_tbl a full join int4_tbl b on true;\n--Testcase 183:\nselect * from int4_tbl a full join int4_tbl b on false;\n\n--\n-- test for ability to use a cartesian join when necessary\n--\n--Testcase 415:\ncreate foreign table q1(i int) server sqlite_svr;\n--Testcase 416:\ninsert into q1 values (1);\n--Testcase 417:\ncreate foreign table q2(i int) server sqlite_svr;\n--Testcase 418:\ninsert into q2 values (0);\n--Testcase 184:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere q1.i = thousand or q2.i = thousand;\n\n--Testcase 185:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere thousand = (q1.i + q2.i);\n\n--\n-- test ability to generate a suitable plan for a star-schema query\n--\n\n--Testcase 186:\nexplain (costs off)\nselect * from\n  tenk1, int8_tbl a, int8_tbl b\nwhere thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2;\n\n--\n-- test a corner case in which we shouldn't apply the star-schema optimization\n--\n\n--Testcase 187:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 188:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- variant that isn't quite a star-schema case\n\n--Testcase 189:\nselect ss1.d1 from\n  tenk1 as t1\n  inner join tenk1 as t2\n  on t1.tenthous = t2.ten\n  inner join\n    int8_tbl as i8\n    left join int4_tbl as i4\n      inner join (select 64::information_schema.cardinal_number as d1\n                  from tenk1 t3,\n                       lateral (select abs(t3.unique1) + random()) ss0(x)\n                  where t3.fivethous < 0) as ss1\n      on i4.f1 = ss1.d1\n    on i8.q1 = i4.f1\n  on t1.tenthous = ss1.d1\nwhere t1.unique1 < i4.f1;\n\n-- this variant is foldable by the remove-useless-RESULT-RTEs code\n\n--Testcase 419:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 420:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- Here's a variant that we can't fold too aggressively, though,\n-- or we end up with noplace to evaluate the lateral PHV\n\n--Testcase 421:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x from sub_tbl) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n--Testcase 422:\nselect * from\n  (select key1 as x from sub_tbl as x) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n\n-- Test proper handling of appendrel PHVs during useless-RTE removal\n--Testcase 516:\nexplain (costs off)\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n--Testcase 517:\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n  \n--\n-- test inlining of immutable functions\n--\n--Testcase 423:\ncreate function f_immutable_int4(i integer) returns integer as\n$$ begin return i; end; $$ language plpgsql immutable;\n\n-- check optimization of function scan with join\n--Testcase 424:\nexplain (costs off)\nselect unique1 from tenk1, (select * from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 425:\nexplain (verbose, costs off)\nselect unique1, x.*\nfrom tenk1, (select *, random() from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 426:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = unique1;\n\n--Testcase 427:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1;\n\n--Testcase 538:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17);\n\n--Testcase 428:\nexplain (costs off)\nselect unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 429:\nexplain (costs off)\nselect unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 430:\nexplain (costs off)\nselect unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 431:\nexplain (costs off)\nselect unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x;\n\n-- check that pullup of a const function allows further const-folding\n--Testcase 432:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = 42;\n\n-- test inlining of immutable functions with PlaceHolderVars\n--Testcase 433:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 or i4 = 42) AS b3\n     from nt2 as nt2\n       left join\n         f_immutable_int4(0) i4\n         on i4 = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 434:\ndrop function f_immutable_int4(int);\n\n-- test inlining when function returns composite\n\n--Testcase 435:\ncreate function mki8(bigint, bigint) returns int8_tbl as\n$$select row($1,$2)::int8_tbl$$ language sql;\n\n--Testcase 436:\ncreate function mki4(int) returns int4_tbl as\n$$select row($1)::int4_tbl$$ language sql;\n\n--Testcase 437:\nexplain (verbose, costs off)\nselect * from mki8(1,2);\n--Testcase 438:\nselect * from mki8(1,2);\n\n--Testcase 439:\nexplain (verbose, costs off)\nselect * from mki4(42);\n--Testcase 440:\nselect * from mki4(42);\n\n--Testcase 441:\ndrop function mki8(bigint, bigint);\n--Testcase 442:\ndrop function mki4(int);\n\n--\n-- test extraction of restriction OR clauses from join OR clause\n-- (we used to only do this for indexable clauses)\n--\n\n--Testcase 190:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4);\n--Testcase 191:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4);\n--Testcase 192:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or\n  ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4);\n\n--\n-- test placement of movable quals in a parameterized join tree\n--\n\n--Testcase 193:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 194:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 195:\nexplain (costs off)\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 196:\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 197:\nexplain (costs off)\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 198:\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 199:\nexplain (costs off)\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 200:\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 201:\nexplain (costs off)\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--Testcase 202:\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--\n-- test handling of potential equivalence clauses above outer joins\n--\n\n--Testcase 203:\nexplain (costs off)\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 204:\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 205:\nexplain (costs off)\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--Testcase 206:\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--\n-- another case with equivalence clauses above outer joins (bug #8591)\n--\n\n--Testcase 207:\nexplain (costs off)\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--Testcase 208:\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--\n-- check handling of join aliases when flattening multiple levels of subquery\n--\n\n--Testcase 209:\nexplain (verbose, costs off)\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--Testcase 210:\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--\n-- test successful handling of nested outer joins with degenerate join quals\n--\n--Testcase 443:\ncreate foreign table text_tbl(f1 text) server sqlite_svr;\n\n--Testcase 211:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 212:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 213:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 214:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 215:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 216:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 217:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--Testcase 218:\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--\n-- test for appropriate join order in the presence of lateral references\n--\n\n--Testcase 219:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 220:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 221:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 222:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 223:\nexplain (verbose, costs off)\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 224:\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--\n-- check a case in which a PlaceHolderVar forces join order\n--\n\n--Testcase 225:\nexplain (verbose, costs off)\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--Testcase 226:\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--\n-- test successful handling of full join underneath left join (bug #14105)\n--\n\n--Testcase 227:\nexplain (costs off)\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--Testcase 228:\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--\n-- test ability to push constants through outer join clauses\n--\n\n--Testcase 229:\nexplain (costs off)\n  select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0;\n\n--Testcase 230:\nexplain (costs off)\n  select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42;\n\n--\n-- test that quals attached to an outer join have correct semantics,\n-- specifically that they don't re-use expressions computed below the join;\n-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input\n--\n\n--Testcase 518:\nset enable_hashjoin to off;\n--Testcase 519:\nset enable_nestloop to off;\n\n--Testcase 231:\nexplain (verbose, costs off)\n  select a.q2, b.q1\n    from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n    where coalesce(b.q1, 1) > 0;\n--Testcase 232:\nselect a.q2, b.q1\n  from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n  where coalesce(b.q1, 1) > 0;\n\n--Testcase 520:\nreset enable_hashjoin;\n--Testcase 521:\nreset enable_nestloop;\n\n--\n-- test join removal\n--\n\nbegin;\n\n--Testcase 444:\nCREATE FOREIGN TABLE a3 (id int OPTIONS (key 'true'), b_id int) SERVER sqlite_svr;\n--Testcase 445:\nCREATE FOREIGN TABLE b3 (id int OPTIONS (key 'true'), c_id int) SERVER sqlite_svr;\n--Testcase 446:\nCREATE FOREIGN TABLE c3 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 447:\nCREATE FOREIGN TABLE d3 (a int, b int) SERVER sqlite_svr;\n--Testcase 233:\nINSERT INTO a3 VALUES (0, 0), (1, NULL);\n--Testcase 234:\nINSERT INTO b3 VALUES (0, 0), (1, NULL);\n--Testcase 235:\nINSERT INTO c3 VALUES (0), (1);\n--Testcase 236:\nINSERT INTO d3 VALUES (1,3), (2,2), (3,1);\n\n-- all three cases should be optimizable into a3 simple seqscan\n--Testcase 237:\nexplain (costs off) SELECT a3.* FROM a3 LEFT JOIN b3 ON a3.b_id = b3.id;\n--Testcase 238:\nexplain (costs off) SELECT b3.* FROM b3 LEFT JOIN c3 ON b3.c_id = c3.id;\n--Testcase 239:\nexplain (costs off)\n  SELECT a3.* FROM a3 LEFT JOIN (b3 left join c3 on b3.c_id = c3.id)\n  ON (a3.b_id = b3.id);\n\n-- check optimization of outer join within another special join\n--Testcase 240:\nexplain (costs off)\nselect id from a3 where id in (\n\tselect b3.id from b3 left join c3 on b3.id = c3.id\n);\n\n-- check that join removal works for a left join when joining a subquery\n-- that is guaranteed to be unique by its GROUP BY clause\n--Testcase 241:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 242:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- join removal is not possible when the GROUP BY contains a column that is\n-- not in the join condition.  (Note: as of 9.6, we notice that b3.id is a\n-- primary key and so drop b3.c_id from the GROUP BY of the resulting plan;\n-- but this happens too late for join removal in the outer plan level.)\n--Testcase 243:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 244:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id;\n\n-- check join removal works when uniqueness of the join condition is enforced\n-- by a UNION\n--Testcase 245:\nexplain (costs off)\nselect d3.* from d3 left join (select id from a3 union select id from b3) s\n  on d3.a = s.id;\n\n-- check join removal with a cross-type comparison operator\n--Testcase 246:\nexplain (costs off)\nselect i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4\n  on i8.q1 = i4.f1;\n\n-- check join removal with lateral references\n--Testcase 247:\nexplain (costs off)\nselect 1 from (select a3.id FROM a3 left join b3 on a3.b_id = b3.id) q,\n\t\t\t  lateral generate_series(1, q.id) gs(i) where q.id = gs.i;\n\nrollback;\n\n--Testcase 448:\ncreate foreign table parent (k int options (key 'true'), pd int) server sqlite_svr;\n--Testcase 449:\ncreate foreign table child (k int options (key 'true'), cd int) server sqlite_svr;\n--Testcase 248:\ninsert into parent values (1, 10), (2, 20), (3, 30);\n--Testcase 249:\ninsert into child values (1, 100), (4, 400);\n\n-- this case is optimizable\n--Testcase 250:\nselect p.* from parent p left join child c on (p.k = c.k);\n--Testcase 251:\nexplain (costs off)\n  select p.* from parent p left join child c on (p.k = c.k);\n\n-- this case is not\n--Testcase 252:\nselect p.*, linked from parent p\n  left join (select c.*, true as linked from child c) as ss\n  on (p.k = ss.k);\n--Testcase 253:\nexplain (costs off)\n  select p.*, linked from parent p\n    left join (select c.*, true as linked from child c) as ss\n    on (p.k = ss.k);\n\n-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling\n--Testcase 254:\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n--Testcase 255:\nexplain (costs off)\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n\n--Testcase 256:\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n--Testcase 257:\nexplain (costs off)\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n\n-- bug 5255: this is not optimizable by join removal\nbegin;\n\n--Testcase 450:\nCREATE FOREIGN TABLE a4 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 451:\nCREATE FOREIGN TABLE b4 (id int OPTIONS (key 'true'), a_id int) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO a4 VALUES (0), (1);\n--Testcase 259:\nINSERT INTO b4 VALUES (0, 0), (1, NULL);\n\n--Testcase 260:\nSELECT * FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n--Testcase 261:\nSELECT b4.* FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n\nrollback;\n\n-- another join removal bug: this is not optimizable, either\nbegin;\n\n--Testcase 452:\ncreate foreign table innertab (id int8 options (key 'true'), dat1 int8) server sqlite_svr;\n--Testcase 262:\ninsert into innertab values(123, 42);\n\n--Testcase 263:\nSELECT * FROM\n    (SELECT 1 AS x) ss1\n  LEFT JOIN\n    (SELECT q1, q2, COALESCE(dat1, q1) AS y\n     FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2\n  ON true;\n\nrollback;\n\n-- another join removal bug: we must clean up correctly when removing a PHV\nbegin;\n\n--Testcase 453:\ncreate foreign table uniquetbl (f1 text) server sqlite_svr;\n\n--Testcase 264:\nexplain (costs off)\nselect t1.* from\n  uniquetbl as t1\n  left join (select *, '***'::text as d1 from uniquetbl) t2\n  on t1.f1 = t2.f1\n  left join uniquetbl t3\n  on t2.d1 = t3.f1;\n\n--Testcase 265:\nexplain (costs off)\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\n--Testcase 266:\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\nrollback;\n\n-- test case to expose miscomputation of required relid set for a PHV\n--Testcase 522:\nexplain (verbose, costs off)\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n--Testcase 523:\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n-- -- and check a related issue where we miscompute required relids for\n-- -- a PHV that's been translated to a child rel\n-- create temp table parttbl (a integer primary key) partition by range (a);\n-- create temp table parttbl1 partition of parttbl for values from (1) to (100);\n-- insert into parttbl values (11), (12);\n-- explain (costs off)\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n\n-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs\n\n--Testcase 267:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error\n--Testcase 268:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error\n--Testcase 269:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok\n\n--\n-- Test hints given on incorrect column references are useful\n--\n\n--Testcase 270:\nselect t1.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t1\" suggestion\n--Testcase 271:\nselect t2.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t2\" suggestion\n--Testcase 272:\nselect uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once\n\n--\n-- Take care to reference the correct RTE\n--\n\n--Testcase 454:\nselect atts.relid::regclass, s.* from pg_stats s join\n    pg_attribute a on s.attname = a.attname and s.tablename =\n    a.attrelid::regclass::text join (select unnest(indkey) attnum,\n    indexrelid from pg_index i) atts on atts.attnum = a.attnum where\n    schemaname != 'pg_catalog';\n\n--\n-- Test LATERAL\n--\n\n--Testcase 273:\nselect unique2, x.*\nfrom tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 274:\nexplain (costs off)\n  select unique2, x.*\n  from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 275:\nselect unique2, x.*\nfrom int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 276:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 277:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 278:\nselect unique2, x.*\nfrom int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n--Testcase 279:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n\n-- check scoping of lateral versus parent references\n-- the first of these should return int8_tbl.q2, the second int8_tbl.q1\n--Testcase 280:\nselect *, (select r from (select q1 as q2) x, (select q2 as r) y) from int8_tbl;\n--Testcase 281:\nselect *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl;\n\n-- lateral with function in FROM\n--Testcase 282:\nselect count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 283:\nexplain (costs off)\n  select count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 284:\nexplain (costs off)\n  select count(*) from tenk1 a cross join lateral generate_series(1,two) g;\n-- don't need the explicit LATERAL keyword for functions\n--Testcase 285:\nexplain (costs off)\n  select count(*) from tenk1 a, generate_series(1,two) g;\n\n-- lateral with UNION ALL subselect\n--Testcase 286:\nexplain (costs off)\n  select * from generate_series(100,200) g,\n    lateral (select * from int8_tbl a where g = q1 union all\n             select * from int8_tbl b where g = q2) ss;\n--Testcase 287:\nselect * from generate_series(100,200) g,\n  lateral (select * from int8_tbl a where g = q1 union all\n           select * from int8_tbl b where g = q2) ss;\n\n-- lateral with VALUES\n--Testcase 288:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n--Testcase 289:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral with VALUES, no flattening possible\n--Testcase 290:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n--Testcase 291:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral injecting a strange outer join condition\n--Testcase 292:\nexplain (costs off)\n  select * from int8_tbl a,\n    int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n      on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n--Testcase 293:\nselect * from int8_tbl a,\n  int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n    on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n\n-- lateral reference to a join alias variable\n--Testcase 294:\nselect * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (select x) ss2(y);\n--Testcase 295:\nselect * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (values(x)) ss2(y);\n--Testcase 296:\nselect * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j,\n  lateral (select x) ss2(y);\n\n-- lateral references requiring pullup\n--Testcase 297:\nselect * from (values(1)) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 298:\nselect * from (select f1/1000000000 from int4_tbl) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 299:\nselect * from (values(1)) x(lb),\n  lateral (values(lb)) y(lbcopy);\n--Testcase 300:\nselect * from (values(1)) x(lb),\n  lateral (select lb from int4_tbl) y(lbcopy);\n--Testcase 301:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2);\n--Testcase 302:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 303:\nselect x.* from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 304:\nselect v.* from\n  (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 305:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 307:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy);\n\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 455:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 456:\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 457:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 458:\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n\n-- lateral can result in join conditions appearing below their\n-- real semantic level\n--Testcase 308:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 309:\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 310:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 311:\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 312:\nexplain (verbose, costs off)\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n--Testcase 313:\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n\n-- lateral reference in a PlaceHolderVar evaluated at join level\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 459:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n--Testcase 460:\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n\n-- case requiring nested PlaceHolderVars\n--Testcase 461:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl c left join (\n    int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select ss2.y offset 0) ss3;\n\n-- case that breaks the old ph_may_need optimization\n--Testcase 462:\nexplain (verbose, costs off)\nselect c.*,a.*,ss1.q1,ss2.q1,ss3.* from\n  int8_tbl c left join (\n    int8_tbl a left join\n      (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2\n       where q1 < f1) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select * from int4_tbl i where ss2.y > f1) ss3;\n\n-- check processing of postponed quals (bug #9041)\n--Testcase 463:\ndelete from sub_tbl;\n--Testcase 464:\ninsert into sub_tbl values (1, 2, 3, 4, 5);\n--Testcase 465:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x  from sub_tbl offset 0) x cross join (select key3 as y from sub_tbl offset 0) y\n  left join lateral (\n    select * from (select key5 as z from sub_tbl offset 0) z where z.z = x.x\n  ) zz on zz.z = y.y;\n\n-- check dummy rels with lateral references (bug #15694)\n--Testcase 466:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl where false) ss on true;\n--Testcase 467:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true;\n\n-- check handling of nested appendrels inside LATERAL\n--Testcase 468:\nselect * from\n  ((select key3 as v from sub_tbl) union all (select key5 as v from sub_tbl)) as q1\n  cross join lateral\n  ((select * from\n      ((select key6 as v from sub_tbl) union all (select value1 as v from sub_tbl)) as q3)\n   union all\n   (select q1.v)\n  ) as q2;\n\n-- check we don't try to do a unique-ified semijoin with LATERAL\n--Testcase 314:\nexplain (verbose, costs off)\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n--Testcase 315:\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n\n-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue,\n-- but we can make the test case much more compact with LATERAL)\n--Testcase 316:\nexplain (verbose, costs off)\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n--Testcase 317:\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n-- test some error cases where LATERAL should have been used but wasn't\n--Testcase 318:\nselect f1,g from int4_tbl a, (select f1 as g) ss;\n--Testcase 319:\nselect f1,g from int4_tbl a, (select a.f1 as g) ss;\n--Testcase 320:\nselect f1,g from int4_tbl a cross join (select f1 as g) ss;\n--Testcase 321:\nselect f1,g from int4_tbl a cross join (select a.f1 as g) ss;\n-- SQL:2008 says the left table is in scope but illegal to access here\n--Testcase 322:\nselect f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true;\n--Testcase 323:\nselect f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true;\n-- check we complain about ambiguous table references\n--Testcase 324:\nselect * from\n  int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss);\n-- LATERAL can be used to put an aggregate into the FROM clause of its query\n--Testcase 325:\nselect 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss;\n\n-- check behavior of LATERAL in UPDATE/DELETE\n\n--Testcase 469:\ncreate temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl;\n\n-- error, can't do this:\n--Testcase 326:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss;\n--Testcase 327:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss;\n-- can't do it even with LATERAL:\n--Testcase 328:\nupdate xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss;\n-- we might in future allow something like this, but for now it's an error:\n--Testcase 329:\nupdate xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- also errors:\n--Testcase 330:\ndelete from xx1 using (select * from int4_tbl where f1 = x1) ss;\n--Testcase 331:\ndelete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss;\n--Testcase 332:\ndelete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- Skip this test, sqlite fdw does not support to create partition table\n-- test LATERAL reference propagation down a multi-level inheritance hierarchy\n-- produced for a multi-level partitioned table hierarchy.\n--\n--create table join_pt1 (a int, b int, c varchar) partition by range(a);\n--create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b);\n--create table join_pt1p2 partition of join_pt1 for values from (100) to (200);\n--create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100);\n--insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y');\n--create table join_ut1 (a int, b int, c varchar);\n--insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z');\n--explain (verbose, costs off)\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n\n--drop table join_pt1;\n--drop table join_ut1;\n\n--\n-- test estimation behavior with multi-column foreign key and constant qual\n--\n\nbegin;\n\n--Testcase 524:\ncreate table fkest (x integer, x10 integer, x10b integer, x100 integer);\n--Testcase 525:\ninsert into fkest select x, x/10, x/10, x/100 from generate_series(1,1000) x;\n--Testcase 526:\ncreate unique index on fkest(x, x10, x100);\nanalyze fkest;\n\n--Testcase 527:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\n--Testcase 528:\nalter table fkest add constraint fk\n  foreign key (x, x10b, x100) references fkest (x, x10, x100);\n\n--Testcase 529:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\nrollback;\n\n--\n-- test that foreign key join estimation performs sanely for outer joins\n--\n\nbegin;\n\n--Testcase 470:\ncreate foreign table fkest (a int options (key 'true'), b int options (key 'true'), c int) server sqlite_svr;\n--Testcase 471:\ncreate foreign table fkest1 (a int options (key 'true'), b int options (key 'true')) server sqlite_svr;\n\n--Testcase 333:\ninsert into fkest select x/10, x%10, x from generate_series(1,1000) x;\n--Testcase 334:\ninsert into fkest1 select x/10, x%10 from generate_series(1,1000) x;\n\n--alter table fkest1\n--  add constraint fkest1_a_b_fkey foreign key (a,b) references fkest;\n\n--analyze fkest;\n--analyze fkest1;\n\n--Testcase 335:\nexplain (costs off)\nselect *\nfrom fkest f\n  left join fkest1 f1 on f.a = f1.a and f.b = f1.b\n  left join fkest1 f2 on f.a = f2.a and f.b = f2.b\n  left join fkest1 f3 on f.a = f3.a and f.b = f3.b\nwhere f.c = 1;\n\nrollback;\n\n--\n-- test planner's ability to mark joins as unique\n--\n\n--Testcase 472:\ncreate foreign table j11 (id int options (key 'true')) server sqlite_svr;\n--Testcase 473:\ncreate foreign table j21 (id int options (key 'true')) server sqlite_svr;\n--Testcase 474:\ncreate foreign table j31 (id int) server sqlite_svr;\n\n--Testcase 336:\ninsert into j11 values(1),(2),(3);\n--Testcase 337:\ninsert into j21 values(1),(2),(3);\n--Testcase 338:\ninsert into j31 values(1),(1);\n\n-- ensure join is properly marked as unique\n--Testcase 339:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id = j21.id;\n\n-- ensure join is not unique when not an equi-join\n--Testcase 340:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id > j21.id;\n\n-- ensure non-unique rel is not chosen as inner\n--Testcase 341:\nexplain (verbose, costs off)\nselect * from j11 inner join j31 on j11.id = j31.id;\n\n-- ensure left join is marked as unique\n--Testcase 342:\nexplain (verbose, costs off)\nselect * from j11 left join j21 on j11.id = j21.id;\n\n-- ensure right join is marked as unique\n--Testcase 343:\nexplain (verbose, costs off)\nselect * from j11 right join j21 on j11.id = j21.id;\n\n-- ensure full join is marked as unique\n--Testcase 344:\nexplain (verbose, costs off)\nselect * from j11 full join j21 on j11.id = j21.id;\n\n-- a clauseless (cross) join can't be unique\n--Testcase 345:\nexplain (verbose, costs off)\nselect * from j11 cross join j21;\n\n-- ensure a natural join is marked as unique\n--Testcase 346:\nexplain (verbose, costs off)\nselect * from j11 natural join j21;\n\n-- ensure a distinct clause allows the inner to become unique\n--Testcase 347:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select distinct id from j31) j31 on j11.id = j31.id;\n\n-- ensure group by clause allows the inner to become unique\n--Testcase 348:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select id from j31 group by id) j31 on j11.id = j31.id;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- test more complex permutations of unique joins\n\n--Testcase 475:\ncreate foreign table j12 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 476:\ncreate foreign table j22 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 477:\ncreate foreign table j32 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n\n--Testcase 349:\ninsert into j12 values(1,1),(1,2);\n--Testcase 350:\ninsert into j22 values(1,1);\n--Testcase 351:\ninsert into j32 values(1,1);\n\n--analyze j1;\n--analyze j2;\n--analyze j3;\n\n-- ensure there's no unique join when not all columns which are part of the\n-- unique index are seen in the join clause\n--Testcase 352:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1;\n\n-- ensure proper unique detection with multiple join quals\n--Testcase 353:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2;\n\n-- ensure we don't detect the join to be unique when quals are not part of the\n-- join condition\n--Testcase 354:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- as above, but for left joins.\n--Testcase 355:\nexplain (verbose, costs off)\nselect * from j12\nleft join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- validate logic in merge joins which skips mark and restore.\n-- it should only do this if all quals which were used to detect the unique\n-- are present as join quals, and not plain quals.\n--Testcase 530:\nset enable_nestloop to 0;\n--Testcase 531:\nset enable_hashjoin to 0;\n--Testcase 532:\nset enable_sort to 0;\n-- skip, cannot create index on foreign table\n-- create indexes that will be preferred over the PKs to perform the join\n--create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;\n--create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;\n-- need an additional row in j2, if we want j2_id1_idx to be preferred\n--Testcase 478:\ninsert into j22 values(1,2);\n--analyze j2;\n\n--Testcase 356:\nexplain (costs off) select * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n--Testcase 357:\nselect * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n-- Exercise array keys mark/restore B-Tree code\n--Testcase 479:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n--Testcase 480:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n-- Exercise array keys \"find extreme element\" B-Tree code\n--Testcase 481:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 482:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 533:\nreset enable_nestloop;\n--Testcase 534:\nreset enable_hashjoin;\n--Testcase 535:\nreset enable_sort;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- check that semijoin inner is not seen as unique for a portion of the outerrel\n--Testcase 483:\nCREATE FOREIGN TABLE onek (\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 358:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from tenk1 t3\n              where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n-- ... unless it actually is unique\n--Testcase 484:\ncreate table j3 as select unique1, tenthous from onek;\nvacuum analyze j3;\n--Testcase 485:\ncreate unique index on j3(unique1, tenthous);\n\n--Testcase 359:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from j3\n              where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n--Testcase 486:\ndrop table j3;\n\n--Testcase 554:\nDELETE FROM INT4_TBL;\n--Testcase 555:\nDELETE FROM INT8_TBL;\n--Testcase 556:\nDELETE FROM FLOAT8_TBL;\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 487:\nDROP SERVER sqlite_svr;\n--Testcase 488:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/limit.sql",
    "content": "--\n-- LIMIT\n-- Check the LIMIT/OFFSET feature of SELECT\n--\n--Testcase 27:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 28:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 29:\nCREATE FOREIGN TABLE onek(\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 30:\nCREATE FOREIGN TABLE int8_tbl(q1 int8 OPTIONS (key 'true'), q2 int8) SERVER sqlite_svr;\n--Testcase 104:\nINSERT INTO int8_tbl VALUES('  123   ','  456');\n--Testcase 105:\nINSERT INTO int8_tbl VALUES('123   ','4567890123456789');\n--Testcase 106:\nINSERT INTO int8_tbl VALUES('4567890123456789','123');\n--Testcase 107:\nINSERT INTO int8_tbl VALUES(+4567890123456789,'4567890123456789');\n--Testcase 108:\nINSERT INTO int8_tbl VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 31:\nCREATE FOREIGN TABLE INT8_TMP(\n        q1 int8,\n        q2 int8,\n        q3 int4,\n        q4 int2,\n        q5 text,\n        id int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 32:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 88:\nCREATE TABLE parent_table (\n\tunique1\t\tint4 PRIMARY KEY,\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\n--Testcase 89:\nCREATE FOREIGN table inherited_table ()\nINHERITS (parent_table)\nSERVER sqlite_svr options (table 'tenk1');\n\n--Testcase 1:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tORDER BY unique1 LIMIT 2;\n--Testcase 2:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 3:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60 AND unique1 < 63\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 4:\nSELECT ''::text AS three, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 100\n\t\tORDER BY unique1 LIMIT 3 OFFSET 20;\n--Testcase 5:\nSELECT ''::text AS zero, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 8 OFFSET 99;\n--Testcase 6:\nSELECT ''::text AS eleven, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 20 OFFSET 39;\n--Testcase 7:\nSELECT ''::text AS ten, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990;\n--Testcase 8:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990 LIMIT 5;\n--Testcase 9:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 LIMIT 5 OFFSET 900;\n\n-- Test null limit and offset.  The planner would discard a simple null\n-- constant, so to ensure executor is exercised, do this:\n--Testcase 10:\nselect * from int8_tbl limit (case when random() < 0.5 then null::bigint end);\n--Testcase 11:\nselect * from int8_tbl offset (case when random() < 0.5 then null::bigint end);\n\n-- Test assorted cases involving backwards fetch from a LIMIT plan node\nbegin;\n\ndeclare c1 scroll cursor for select * from int8_tbl order by q1 limit 10;\n--Testcase 12:\nfetch all in c1;\n--Testcase 13:\nfetch 1 in c1;\n--Testcase 14:\nfetch backward 1 in c1;\n--Testcase 33:\nfetch backward all in c1;\n--Testcase 34:\nfetch backward 1 in c1;\n--Testcase 35:\nfetch all in c1;\n\ndeclare c2 scroll cursor for select * from int8_tbl limit 3;\n--Testcase 36:\nfetch all in c2;\n--Testcase 37:\nfetch 1 in c2;\n--Testcase 38:\nfetch backward 1 in c2;\n--Testcase 39:\nfetch backward all in c2;\n--Testcase 40:\nfetch backward 1 in c2;\n--Testcase 41:\nfetch all in c2;\n\ndeclare c3 scroll cursor for select * from int8_tbl offset 3;\n--Testcase 42:\nfetch all in c3;\n--Testcase 43:\nfetch 1 in c3;\n--Testcase 44:\nfetch backward 1 in c3;\n--Testcase 45:\nfetch backward all in c3;\n--Testcase 46:\nfetch backward 1 in c3;\n--Testcase 47:\nfetch all in c3;\n\ndeclare c4 scroll cursor for select * from int8_tbl offset 10;\n--Testcase 48:\nfetch all in c4;\n--Testcase 49:\nfetch 1 in c4;\n--Testcase 50:\nfetch backward 1 in c4;\n--Testcase 51:\nfetch backward all in c4;\n--Testcase 52:\nfetch backward 1 in c4;\n--Testcase 53:\nfetch all in c4;\n\ndeclare c5 scroll cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;\n--Testcase 54:\nfetch all in c5;\n--Testcase 55:\nfetch 1 in c5;\n--Testcase 56:\nfetch backward 1 in c5;\n--Testcase 57:\nfetch backward 1 in c5;\n--Testcase 58:\nfetch all in c5;\n--Testcase 59:\nfetch backward all in c5;\n--Testcase 60:\nfetch all in c5;\n--Testcase 61:\nfetch backward all in c5;\n\nrollback;\n\n-- Stress test for variable LIMIT in conjunction with bounded-heap sorting\n--Testcase 62:\nDELETE FROM INT8_TMP;\n--Testcase 63:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series(1,10) q1;\n\n--Testcase 64:\nSELECT\n  (SELECT s.q1 \n     FROM (VALUES (1)) AS x,\n          (SELECT q1 FROM INT8_TMP as n \n             ORDER BY q1 LIMIT 1 OFFSET s.q1-1) AS y) AS z\n  FROM INT8_TMP AS s;\n\n--\n-- Test behavior of volatile and set-returning functions in conjunction\n-- with ORDER BY and LIMIT.\n--\n\n--Testcase 65:\ncreate temp sequence testseq;\n\n--Testcase 15:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 16:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 90:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 91:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 17:\nselect currval('testseq');\n\n--Testcase 92:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n--Testcase 93:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n\n--Testcase 94:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 95:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 96:\nselect currval('testseq');\n\n--Testcase 18:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 19:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 97:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 98:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 20:\nselect currval('testseq');\n\n-- test for limit and offset when querying table and foreign table inherited\n--Testcase 99:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n--Testcase 100:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n-- when querying regular tables with inherited tables, only limit is pushed-down when no offset is specified\n--Testcase 101:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 102:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 103:\nselect currval('testseq');\n\n--Testcase 21:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 22:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 23:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n--Testcase 24:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n-- use of random() is to keep planner from folding the expressions together\n--Testcase 66:\nDELETE FROM INT8_TMP;\n--Testcase 67:\nINSERT INTO INT8_TMP VALUES (generate_series(0,2), generate_series((random()*.1)::int,2));\n--Testcase 68:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp;\n\n--Testcase 69:\nselect q1, q2 from int8_tmp;\n\n--Testcase 70:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp order by q2 desc;\n\n--Testcase 71:\nselect q1, q2 from int8_tmp order by q2 desc;\n\n-- test for failure to set all aggregates' aggtranstype\n--Testcase 25:\nexplain (verbose, costs off)\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--Testcase 26:\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--\n-- FETCH FIRST\n-- Check the WITH TIES clause\n--\n\n--Testcase 72:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW WITH TIES;\n\n--Testcase 73:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST ROWS WITH TIES;\n\n--Testcase 74:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES;\n\n--Testcase 75:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW ONLY;\n\n-- should fail\n--Testcase 76:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tFETCH FIRST 2 ROW WITH TIES;\n\n-- test ruleutils\n--Testcase 77:\nCREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;\n--Testcase 78:\n\\d+ limit_thousand_v_1\n--Testcase 79:\nCREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;\n--Testcase 80:\n\\d+ limit_thousand_v_2\n--Testcase 81:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS WITH TIES;\t\t-- fails\n--Testcase 82:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;\n--Testcase 83:\n\\d+ limit_thousand_v_3\n--Testcase 84:\nCREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS ONLY;\n--Testcase 85:\n\\d+ limit_thousand_v_4\n-- leave these views\n\n--Testcase 109:\nDELETE FROM int8_tbl;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name\n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 86:\nDROP SERVER sqlite_svr;\n--Testcase 87:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/prepare.sql",
    "content": "-- Regression tests for prepareable statements. We query the content\n-- of the pg_prepared_statements view as prepared statements are\n-- created and removed.\n--Testcase 26:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 27:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 28:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 29:\nCREATE FOREIGN TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n) SERVER sqlite_svr;\n\n--Testcase 30:\ncreate foreign table road_tmp (a int, b int, id int options (key 'true')) server sqlite_svr;\n--Testcase 31:\ninsert into road_tmp values (1, 2);\n\n--Testcase 1:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n--Testcase 2:\nPREPARE q1 AS SELECT a FROM road_tmp;\n--Testcase 3:\nEXECUTE q1;\n\n--Testcase 4:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- should fail\n--Testcase 5:\nPREPARE q1 AS SELECT b FROM road_tmp;\n\n-- should succeed\nDEALLOCATE q1;\n--Testcase 6:\nPREPARE q1 AS SELECT b FROM road_tmp;\n--Testcase 7:\nEXECUTE q1;\n\n--Testcase 8:\nPREPARE q2 AS SELECT b FROM road_tmp;\n--Testcase 9:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- sql92 syntax\nDEALLOCATE PREPARE q1;\n\n--Testcase 10:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\nDEALLOCATE PREPARE q2;\n-- the view should return the empty set again\n--Testcase 11:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- parameterized queries\n--Testcase 12:\nPREPARE q2(text) AS\n\tSELECT datname, datistemplate, datallowconn\n\tFROM pg_database WHERE datname = $1;\n\n--Testcase 13:\nEXECUTE q2('postgres');\n\n--Testcase 14:\nPREPARE q3(text, int, float, boolean, smallint) AS\n\tSELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR\n\tten = $3::bigint OR true = $4 OR odd = $5::int)\n\tORDER BY unique1;\n\n--Testcase 15:\nEXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 4::bigint);\n\n-- too few params\n--Testcase 16:\nEXECUTE q3('bool');\n\n-- too many params\n--Testcase 17:\nEXECUTE q3('bytea', 5::smallint, 10.5::float, false, 4::bigint, true);\n\n-- wrong param types\n--Testcase 18:\nEXECUTE q3(5::smallint, 10.5::float, false, 4::bigint, 'bytea');\n\n-- invalid type\n--Testcase 19:\nPREPARE q4(nonexistenttype) AS SELECT * FROM road WHERE name = $1;\n\n-- create table as execute\n--Testcase 20:\nPREPARE q5(int, text) AS\n\tSELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2\n\tORDER BY unique1;\n--Testcase 32:\nCREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');\n--Testcase 21:\nSELECT * FROM q5_prep_results;\n--Testcase 33:\nCREATE TEMPORARY TABLE q5_prep_nodata AS EXECUTE q5(200, 'DTAAAA')\n    WITH NO DATA;\n--Testcase 34:\nSELECT * FROM q5_prep_nodata;\n\n-- unknown or unspecified parameter types: should succeed\n--Testcase 22:\nPREPARE q6 AS\n    SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;\n--Testcase 23:\nPREPARE q7(unknown) AS\n    SELECT * FROM road WHERE thepath = $1;\n\n--Testcase 24:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n-- test DEALLOCATE ALL;\nDEALLOCATE ALL;\n--Testcase 25:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n--Testcase 35:\nDROP FOREIGN TABLE tenk1;\n--Testcase 36:\nDROP FOREIGN TABLE road;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/select.sql",
    "content": "--\n-- SELECT\n--\n--Testcase 43:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 44:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 45:\nCREATE FOREIGN TABLE onek (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 46:\nCREATE FOREIGN TABLE onek2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 47:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 73:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 74:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 75:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 76:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 77:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 48:\nCREATE FOREIGN TABLE person (\n  name    text,\n  age     int4,\n  location  point\n) SERVER sqlite_svr;\n\n-- btree index\n-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 1:\nSELECT * FROM onek\n   WHERE onek.unique1 < 10\n   ORDER BY onek.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 2:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 3:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY stringu1 using <;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1d -2 +0nr -1\n--\n--Testcase 4:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using <, unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1dr -2 +0n -1\n--\n--Testcase 5:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using >, unique1 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0nr -1 +1d -2\n--\n--Testcase 6:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >, string4 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0n -1 +1dr -2\n--\n--Testcase 7:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using <, string4 using >;\n\n--\n-- test partial btree indexes\n--\n-- As of 7.2, planner probably won't pick an indexscan without stats,\n-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan\n-- followed by sort, because that could hide index ordering problems.\n--\n--ANALYZE onek2;\n\nSET enable_seqscan TO off;\nSET enable_bitmapscan TO off;\nSET enable_sort TO off;\n\n--\n-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 8:\nSELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10 order by onek2.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 9:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n    WHERE onek2.unique1 < 20\n    ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 10:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n   WHERE onek2.unique1 > 980 ORDER BY onek2.unique1;\n\nRESET enable_seqscan;\nRESET enable_bitmapscan;\nRESET enable_sort;\n\n\n--Testcase 11:\nSELECT two, stringu1, ten, string4\n   INTO TABLE tmp\n   FROM onek;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data\n--\n-- SELECT name, age FROM person*; ??? check if different\n--Testcase 12:\nSELECT p.name, p.age FROM person* p;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |\n-- sort +1nr -2\n--\n--Testcase 13:\nSELECT p.name, p.age FROM person* p ORDER BY age using >, name;\n\n--\n-- Test some cases involving whole-row Var referencing a subquery\n--\n--Testcase 49:\nselect foo from (select 1 offset 0) as foo;\n--Testcase 50:\nselect foo from (select null offset 0) as foo;\n--Testcase 51:\nselect foo from (select 'xyzzy',1,null offset 0) as foo;\n\n--\n-- Test VALUES lists\n--\n--Testcase 14:\nselect * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)\n    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;\n\n-- a more complex case\n-- looks like we're coding lisp :-)\n--Testcase 15:\nselect * from onek,\n  (values ((select i from\n    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)\n    order by i asc limit 1))) bar (i)\n  where onek.unique1 = bar.i;\n\n-- try VALUES in a subquery\n--Testcase 16:\nselect * from onek\n    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))\n    order by unique1;\n\n-- VALUES is also legal as a standalone query or a set-operation member\n--Testcase 17:\nVALUES (1,2), (3,4+4), (7,77.7);\n\n--Testcase 52:\nVALUES (1,2), (3,4+4), (7,77.7)\nUNION ALL\nSELECT 2+2, 57\nUNION ALL\nTABLE int8_tbl;\n\n--\n-- Test ORDER BY options\n--\n\n--Testcase 53:\nCREATE FOREIGN TABLE foo (f1 int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 18:\nINSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);\n\n--Testcase 19:\nSELECT * FROM foo ORDER BY f1;\n--Testcase 20:\nSELECT * FROM foo ORDER BY f1 ASC;\t-- same thing\n--Testcase 21:\nSELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--Testcase 22:\nSELECT * FROM foo ORDER BY f1 DESC;\n--Testcase 23:\nSELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n-- Skip, cannot create index on foreign table\n-- check if indexscans do the right things\n--CREATE INDEX fooi ON foo (f1);\n--SET enable_sort = false;\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--\n-- Test planning of some cases with partial indexes\n--\n\n-- partial index is usable\n--Testcase 24:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 25:\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- actually run the query with an analyze to use the partial index\n--Testcase 54:\nexplain (costs off, analyze on, timing off, summary off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 27:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 28:\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- partial index predicate implies clause, so no need for retest\n--Testcase 29:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 30:\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 31:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 32:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n-- but if it's an update target, must retest anyway\n--Testcase 33:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n--Testcase 34:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n-- partial index is not applicable\n--Testcase 35:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n--Testcase 36:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n-- partial index implies clause, but bitmap scan must recheck predicate anyway\nSET enable_indexscan TO off;\n--Testcase 37:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 38:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\nRESET enable_indexscan;\n-- check multi-index cases too\n--Testcase 39:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 40:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 41:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n--Testcase 42:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n\n--\n-- Test some corner cases that have been known to confuse the planner\n--\n\n-- ORDER BY on a constant doesn't really need any sorting\n--Testcase 55:\nSELECT 1 AS x ORDER BY x;\n\n-- But ORDER BY on a set-valued expression does\n--Testcase 56:\ncreate function sillysrf(int) returns setof int as\n  'values (1),(10),(2),($1)' language sql immutable;\n\n--Testcase 57:\nselect sillysrf(42);\n--Testcase 58:\nselect sillysrf(-1) order by 1;\n\n--Testcase 59:\ndrop function sillysrf(int);\n\n-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict\n-- (see bug #5084)\n--Testcase 60:\nselect * from (values (2),(null),(1)) v(k) where k = k order by k;\n--Testcase 61:\nselect * from (values (2),(null),(1)) v(k) where k = k;\n\n-- Test partitioned tables with no partitions, which should be handled the\n-- same as the non-inheritance case when expanding its RTE.\n--Testcase 62:\ncreate table list_parted_tbl (a int,b int) partition by list (a);\n--Testcase 63:\ncreate table list_parted_tbl1 partition of list_parted_tbl\n  for values in (1) partition by list(b);\n--Testcase 64:\nexplain (costs off) select * from list_parted_tbl;\n--Testcase 65:\ndrop table list_parted_tbl;\n\n--Testcase 78:\nDELETE FROM INT8_TBL;\n\n--Testcase 66:\nDROP FOREIGN TABLE onek;\n--Testcase 67:\nDROP FOREIGN TABLE onek2;\n--Testcase 68:\nDROP FOREIGN TABLE int8_tbl;\n--Testcase 69:\nDROP FOREIGN TABLE person;\n--Testcase 70:\nDROP FOREIGN TABLE foo;\n--Testcase 71:\nDROP SERVER sqlite_svr;\n--Testcase 72:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/select_having.sql",
    "content": "--\n-- SELECT_HAVING\n--\n\n--Testcase 22:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 23:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 24:\nCREATE FOREIGN TABLE test_having(a int OPTIONS (key 'true'), b int, c char(8), d char) SERVER sqlite_svr;\n\n-- load test data\n--Testcase 1:\nINSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');\n--Testcase 2:\nINSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');\n--Testcase 3:\nINSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');\n--Testcase 4:\nINSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');\n--Testcase 5:\nINSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');\n--Testcase 6:\nINSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');\n--Testcase 7:\nINSERT INTO test_having VALUES (6, 4, 'cccc', 'g');\n--Testcase 8:\nINSERT INTO test_having VALUES (7, 4, 'cccc', 'h');\n--Testcase 9:\nINSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');\n--Testcase 10:\nINSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');\n\n--Testcase 11:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;\n\n-- HAVING is effectively equivalent to WHERE in this case\n--Testcase 12:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING b = 3 ORDER BY b, c collate \"en_US.utf8\";\n\n--Testcase 13:\nSELECT lower(c), count(c) FROM test_having\n\tGROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY lower(c);\n\n--Testcase 14:\nSELECT c, max(a) FROM test_having\n\tGROUP BY c HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY c collate \"en_US.utf8\";\n\n-- test degenerate cases involving HAVING without GROUP BY\n-- Per SQL spec, these should generate 0 or 1 row, even without aggregates\n\n--Testcase 15:\nSELECT min(a), max(a) FROM test_having HAVING min(a) = max(a);\n--Testcase 16:\nSELECT min(a), max(a) FROM test_having HAVING min(a) < max(a);\n\n-- errors: ungrouped column references\n--Testcase 17:\nSELECT a FROM test_having HAVING min(a) < max(a);\n--Testcase 18:\nSELECT 1 AS one FROM test_having HAVING a > 1;\n\n-- the really degenerate case: need not scan table at all\n--Testcase 19:\nSELECT 1 AS one FROM test_having HAVING 1 > 2;\n--Testcase 20:\nSELECT 1 AS one FROM test_having HAVING 1 < 2;\n\n-- and just to prove that we aren't scanning the table:\n--Testcase 21:\nSELECT 1 AS one FROM test_having WHERE 1/a = 1 HAVING 1 < 2;\n\n--Testcase 25:\nDROP FOREIGN TABLE test_having;\n--Testcase 26:\nDROP SERVER sqlite_svr;\n--Testcase 27:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/sqlite_fdw_post.sql",
    "content": "-- ===================================================================\n-- create FDW objects\n-- ===================================================================\n\n--Testcase 483:\nCREATE EXTENSION sqlite_fdw;\n\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr2 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr3 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- SQLite FDW does not need User and User Mapping.\n--Testcase 484:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 485:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 756:\n-- CREATE USER MAPPING FOR public SERVER sqlite_svr3;\n-- ===================================================================\n-- create objects used through FDW sqlite server\n-- ===================================================================\n--Testcase 486:\nCREATE SCHEMA \"S 1\";\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO \"S 1\";\n\n--Testcase 1:\nINSERT INTO \"S 1\".\"T 1\"\n\tSELECT id,\n\t       id % 10,\n\t       to_char(id, 'FM00000'),\n\t       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,\n\t       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,\n\t       id % 10,\n\t       id % 10,\n\t       'foo'\n\tFROM generate_series(1, 1000) id;\n--Testcase 2:\nINSERT INTO \"S 1\".\"T 2\"\n\tSELECT id,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 3:\nINSERT INTO \"S 1\".\"T 3\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 487:\nDELETE FROM \"S 1\".\"T 3\" WHERE c1 % 2 != 0;\t-- delete for outer join tests\n--Testcase 4:\nINSERT INTO \"S 1\".\"T 4\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 488:\nDELETE FROM \"S 1\".\"T 4\" WHERE c1 % 3 != 0;\t-- delete for outer join tests\n\n/*ANALYZE \"S 1\".\"T 1\";\nANALYZE \"S 1\".\"T 2\";\nANALYZE \"S 1\".\"T 3\";\nANALYZE \"S 1\".\"T 4\";*/\n\n-- ===================================================================\n-- create foreign tables\n-- ===================================================================\n--Testcase 489:\nCREATE FOREIGN TABLE ft1 (\n\tc0 int,\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 757:\nALTER FOREIGN TABLE ft1 DROP COLUMN c0;\n\n--Testcase 490:\nCREATE FOREIGN TABLE ft2 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tcx int,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft2',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 758:\nALTER FOREIGN TABLE ft2 DROP COLUMN cx;\n\n--Testcase 491:\nCREATE FOREIGN TABLE ft4 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 3');\n\n--Testcase 492:\nCREATE FOREIGN TABLE ft5 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 4');\n\n--Testcase 493:\nCREATE FOREIGN TABLE ft6 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr2 OPTIONS (table 'T 4');\n\n--Testcase 759:\nCREATE FOREIGN TABLE ft7 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr3 OPTIONS (table 'T 4');\n\n--Testcase 760:\nALTER FOREIGN TABLE ft1 OPTIONS (table 'T 1');\n--Testcase 761:\nALTER FOREIGN TABLE ft2 OPTIONS (table 'T 1');\n--Testcase 762:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 763:\nALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 5:\n\\det+\n\n-- Test that alteration of server options causes reconnection\n-- Remote's errors might be non-English, so hide them to ensure stable results\n\\set VERBOSITY terse\n--Testcase 6:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work\n--Testcase 764:\nALTER SERVER sqlite_svr OPTIONS (SET database 'no such database');\n--Testcase 7:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should fail\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_svr\n            OPTIONS (SET database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n--Testcase 8:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work again\n\\set VERBOSITY default\n\n-- Now we should be able to run ANALYZE.\n-- To exercise multiple code paths, we use local stats on ft1\n-- and remote-estimate mode on ft2.\n--ANALYZE ft1;\n--ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');\n\n-- ===================================================================\n-- simple queries\n-- ===================================================================\n-- single table without alias\n--Testcase 9:\nEXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n--Testcase 10:\nSELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n-- single table with alias - also test that tableoid sort is not pushed to remote side\n--Testcase 11:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n--Testcase 12:\nSELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n-- whole-row reference\n--Testcase 13:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 14:\nSELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- empty result\n--Testcase 15:\nSELECT * FROM ft1 WHERE false;\n-- with WHERE clause\n--Testcase 16:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n--Testcase 17:\nSELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n-- with FOR UPDATE/SHARE\n--Testcase 18:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 19:\nSELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 20:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n--Testcase 21:\nSELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n-- aggregate\n--Testcase 22:\nSELECT COUNT(*) FROM ft1 t1;\n-- subquery\n--Testcase 23:\nSELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;\n-- subquery+MAX\n--Testcase 24:\nSELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;\n-- used in CTE\n--Testcase 25:\nWITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;\n-- fixed values\n--Testcase 26:\nSELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;\n-- Test forcing the remote server to produce sorted data for a merge join.\n--Testcase 765:\nSET enable_hashjoin TO false;\n--Testcase 766:\nSET enable_nestloop TO false;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 27:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 28:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 29:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 30:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- A join between local table and foreign join. ORDER BY clause is added to the\n-- foreign join so that the local table can be joined using merge join strategy.\n--Testcase 31:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 32:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above, except that the full join prevents any equivalence\n-- classes from being merged. This produces single relation equivalence classes\n-- included in join restrictions.\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 34:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above with all full outer joins\n--Testcase 35:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 36:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 767:\nRESET enable_hashjoin;\n--Testcase 768:\nRESET enable_nestloop;\n\n-- Test executing assertion in estimate_path_cost_size() that makes sure that\n-- retrieved_rows for foreign rel re-used to cost pre-sorted foreign paths is\n-- a sensible value even when the rel has tuples=0\n-- CREATE TABLE loct_empty (c1 int NOT NULL, c2 text);\n--Testcase 769:\nCREATE FOREIGN TABLE ft_empty (c1 int NOT NULL, c2 text)\n  SERVER sqlite_svr OPTIONS (table 'loct_empty');\n--Testcase 770:\nINSERT INTO \"S 1\".loct_empty\n  SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id;\n--Testcase 771:\nDELETE FROM \"S 1\".loct_empty;\n-- ANALYZE ft_empty;\n--Testcase 772:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft_empty ORDER BY c1;\n\n-- ===================================================================\n-- WHERE with remotely-executable conditions\n-- ===================================================================\n--Testcase 37:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr\n--Testcase 39:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NULL;        -- NullTest\n--Testcase 40:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL;    -- NullTest\n--Testcase 41:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)\n--Testcase 44:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr\n--Testcase 45:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr\n--Testcase 46:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef\n--Testcase 47:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\\\bar';  -- check special chars\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote\n-- parameterized remote path for foreign table\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n--Testcase 50:\nSELECT * FROM ft2 a, ft2 b WHERE a.c1 = 47 AND b.c1 = a.c2;\n\n-- check both safe and unsafe join conditions\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft2 a, ft2 b\n  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n--Testcase 52:\nSELECT * FROM ft2 a, ft2 b\nWHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n-- bug before 9.3.5 due to sloppy handling of remote-estimate parameters\n--Testcase 53:\nSELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));\n--Testcase 54:\nSELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));\n-- we should not push order by clause with volatile expressions or unsafe\n-- collations\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, random();\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate \"C\";\n\n-- user-defined operator/function\n--Testcase 494:\nCREATE FUNCTION sqlite_fdw_abs(int) RETURNS int AS $$\nBEGIN\nRETURN abs($1);\nEND\n$$ LANGUAGE plpgsql IMMUTABLE;\n--Testcase 495:\nCREATE OPERATOR === (\n    LEFTARG = int,\n    RIGHTARG = int,\n    PROCEDURE = int4eq,\n    COMMUTATOR = ===\n);\n\n-- built-in operators and functions can be shipped for remote execution\n--Testcase 57:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 58:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 59:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 60:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n\n-- by default, user-defined ones cannot\n--Testcase 61:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 62:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 63:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 64:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- ORDER BY can be shipped, though\n--Testcase 496:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 497:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- but let's put them in an extension ...\n--Testcase 773:\nALTER EXTENSION sqlite_fdw ADD FUNCTION sqlite_fdw_abs(int);\n--Testcase 774:\nALTER EXTENSION sqlite_fdw ADD OPERATOR === (int, int);\n--ALTER SERVER sqlite_svr2 OPTIONS (ADD extensions 'sqlite_fdw');\n\n-- ... now they can be shipped\n--Testcase 498:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 499:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 500:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 501:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- and both ORDER BY and LIMIT can be shipped\n--Testcase 502:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 503:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- ===================================================================\n-- JOIN queries\n-- ===================================================================\n-- Analyze ft4 and ft5 so that we have better statistics. These tables do not\n-- have use_remote_estimate set.\n--ANALYZE ft4;\n--ANALYZE ft5;\n\n-- join two tables\n--Testcase 65:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 66:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join three tables\n--Testcase 67:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 68:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join\n--Testcase 69:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 70:\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- left outer join three tables\n--Testcase 71:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 72:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + placement of clauses.\n-- clauses within the nullable side are not pulled up, but top level clause on\n-- non-nullable side is pushed into non-nullable side\n--Testcase 73:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n--Testcase 74:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n-- clauses within the nullable side are not pulled up, but the top level clause\n-- on nullable side is not pushed down into nullable side\n--Testcase 75:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n--Testcase 76:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n-- right outer join\n--Testcase 77:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 78:\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join three tables\n--Testcase 79:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 80:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- full outer join\n--Testcase 81:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n--Testcase 82:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n-- full outer join with restrictions on the joining relations\n-- a. the joining relations are both base relations\n--Testcase 83:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 84:\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 85:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n--Testcase 86:\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n-- b. one of the joining relations is a base relation and the other is a join\n-- relation\n--Testcase 87:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 88:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- c. test deparsing the remote query as nested subqueries\n--Testcase 89:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 90:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- d. test deparsing rowmarked relations as subqueries\n--Testcase 91:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n--Testcase 92:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n-- full outer join + inner join\n--Testcase 93:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n--Testcase 94:\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n-- full outer join three tables\n--Testcase 95:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 96:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + right outer join\n--Testcase 97:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 98:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- right outer join + full outer join\n--Testcase 99:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 100:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + left outer join\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 102:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join + full outer join\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 104:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 775:\nSET enable_memoize TO off;\n-- right outer join + left outer join\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 106:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 776:\nRESET enable_memoize;\n-- left outer join + right outer join\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 108:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause, only matched rows\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 110:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause with shippable extensions set\n--Testcase 504:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--ALTER SERVER sqlite_svr2 OPTIONS (DROP extensions);\n-- full outer join + WHERE clause with shippable extensions not set\n--Testcase 505:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--Testcase 777:\nALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- join two tables with FOR UPDATE clause\n-- tests whole-row reference for row marks\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 112:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n--Testcase 114:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n-- join two tables with FOR SHARE clause\n--Testcase 115:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 116:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n--Testcase 118:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n-- join in CTE\n--Testcase 119:\nEXPLAIN (VERBOSE, COSTS OFF)\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n--Testcase 120:\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n-- ctid with whole-row reference\n--Testcase 121:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- SEMI JOIN, not pushed down\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 123:\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- ANTI JOIN, not pushed down\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 125:\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- CROSS JOIN can be pushed down\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 127:\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- different server, not pushed down. No result expected.\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 129:\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe join conditions (c8 has a UDT), not pushed down. Practically a CROSS\n-- JOIN since c8 in both tables has same value.\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 131:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe conditions on one side (c8 has a UDT), not pushed down.\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 133:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join where unsafe to pushdown condition in WHERE clause has a column not\n-- in the SELECT clause. In this test unsafe clause needs to have column\n-- references from both joining sides so that the clause is not pushed down\n-- into one of the joining sides.\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 135:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- Aggregate after UNION, for testing setrefs\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n--Testcase 137:\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n-- join with lateral reference\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n--Testcase 139:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n\n-- non-Var items in targetlist of the nullable rel of a join preventing\n-- push-down in some cases\n-- unable to push {ft1, ft2}\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n--Testcase 141:\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n\n-- ok to push {ft1, ft2} but not {ft1, ft2, ft4}\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n--Testcase 143:\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n\n-- join with nullable side with some columns with null values\n--Testcase 144:\nUPDATE ft5 SET c3 = null where c1 % 9 = 0;\n--Testcase 145:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n--Testcase 146:\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n\n-- multi-way join involving multiple merge joins\n-- (this case used to have EPQ-related planning problems)\n--Testcase 506:\nCREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1));\n--Testcase 507:\nINSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\nANALYZE local_tbl;\n--Testcase 778:\nSET enable_nestloop TO false;\n--Testcase 779:\nSET enable_hashjoin TO false;\n--Testcase 147:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE;\n--Testcase 148:\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 ORDER BY ft1.c1 FOR UPDATE;\n--Testcase 780:\nRESET enable_nestloop;\n--Testcase 781:\nRESET enable_hashjoin;\n--DROP TABLE local_tbl;\n\n-- check join pushdown in situations where multiple userids are involved\n-- Although SQLite FDW does not need User and User mapping to connect to\n-- the database file, however, JOIN pushdown is decided by the core code.\n-- If outer and inner relation are foreign tables (or joins) belonging to\n-- the same server and assigned to the same user, join will be pushed down.\n-- Otherwise, join cannot be pushed down.\n-- In addition to an exact match of userid, we allow the case where one side\n-- has zero userid (implying current user) and the other side has explicit\n-- userid that happens to equal the current user; but in that case, pushdown of\n-- the join is only valid for the current user.\n--Testcase 508:\nCREATE ROLE regress_view_owner SUPERUSER;\n--Testcase 509:\n-- CREATE USER MAPPING FOR regress_view_owner SERVER sqlite_svr;\nGRANT SELECT ON ft4 TO regress_view_owner;\nGRANT SELECT ON ft5 TO regress_view_owner;\n\n--Testcase 510:\nCREATE VIEW v4 AS SELECT * FROM ft4;\n--Testcase 511:\nCREATE VIEW v5 AS SELECT * FROM ft5;\n--Testcase 782:\nALTER VIEW v5 OWNER TO regress_view_owner;\n--Testcase 149:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, different view owners\n--Testcase 150:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 783:\nALTER VIEW v4 OWNER TO regress_view_owner;\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 152:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, view owner not current user\n--Testcase 154:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 784:\nALTER VIEW v4 OWNER TO CURRENT_USER;\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 156:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 785:\nALTER VIEW v4 OWNER TO regress_view_owner;\n\n-- cleanup\n--Testcase 512:\nDROP OWNED BY regress_view_owner;\n--Testcase 513:\nDROP ROLE regress_view_owner;\n\n\n-- ===================================================================\n-- Aggregate and grouping queries\n-- ===================================================================\n\n-- Simple aggregates\n--Testcase 157:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n--Testcase 158:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n\n--Testcase 514:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n--Testcase 515:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n\n-- Aggregate is not pushed down as aggregation contains random()\n--Testcase 159:\nexplain (verbose, costs off)\nselect sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1;\n\n-- Aggregate over join query\n--Testcase 160:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n--Testcase 161:\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n\n-- Not pushed down due to local conditions present in underneath input rel\n--Testcase 162:\nexplain (verbose, costs off)\nselect sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1;\n\n-- GROUP BY clause having expressions\n--Testcase 163:\nexplain (verbose, costs off)\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n--Testcase 164:\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n\n-- Aggregates in subquery are pushed down.\n--Testcase 165:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n--Testcase 166:\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n\n-- Aggregate is still pushed down by taking unshippable expression out\n--Testcase 167:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n--Testcase 168:\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n\n-- Aggregate with unshippable GROUP BY clause are not pushed\n--Testcase 169:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1;\n\n-- GROUP BY clause in various forms, cardinal, alias and constant expression\n--Testcase 516:\nexplain (verbose, costs off)\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n--Testcase 517:\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n\n-- GROUP BY clause referring to same column multiple times\n-- Also, ORDER BY contains an aggregate function\n--Testcase 170:\nexplain (verbose, costs off)\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n--Testcase 171:\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n\n-- Testing HAVING clause shippability\n--Testcase 172:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n--Testcase 173:\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n\n-- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down\n--Testcase 174:\nexplain (verbose, costs off)\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n--Testcase 175:\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n\n-- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down\n--Testcase 176:\nexplain (verbose, costs off)\nselect sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1;\n\n-- Remote aggregate in combination with a local Param (for the output\n-- of an initplan) can be trouble, per bug #15781\n--Testcase 518:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n--Testcase 519:\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n\n--Testcase 520:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n--Testcase 521:\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n\n\n-- Testing ORDER BY, DISTINCT, FILTER, Ordered-sets and VARIADIC within aggregates\n\n-- ORDER BY within aggregate, same column used to order\n--Testcase 177:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n--Testcase 178:\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n\n-- ORDER BY within aggregate, different column used to order also using DESC\n--Testcase 179:\nexplain (verbose, costs off)\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n--Testcase 180:\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n\n-- DISTINCT within aggregate\n--Testcase 181:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 182:\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- DISTINCT combined with ORDER BY within aggregate\n--Testcase 183:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 184:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n--Testcase 185:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 186:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- FILTER within aggregate\n--Testcase 187:\nexplain (verbose, costs off)\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n--Testcase 188:\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n\n-- DISTINCT, ORDER BY and FILTER within aggregate\n--Testcase 189:\nexplain (verbose, costs off)\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n--Testcase 190:\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n\n-- Outer query is aggregation query\n--Testcase 191:\nexplain (verbose, costs off)\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 192:\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n-- Inner query is aggregation query\n--Testcase 193:\nexplain (verbose, costs off)\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 194:\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n\n-- Aggregate not pushed down as FILTER condition is not pushable\n--Testcase 195:\nexplain (verbose, costs off)\nselect sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1;\n--Testcase 196:\nexplain (verbose, costs off)\nselect sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1;\n\n-- Ordered-sets within aggregate\n--Testcase 197:\nexplain (verbose, costs off)\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n--Testcase 198:\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n\n-- Using multiple arguments within aggregates\n--Testcase 199:\nexplain (verbose, costs off)\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n--Testcase 200:\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n\n-- User defined function for user defined aggregate, VARIADIC\n--Testcase 522:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n--Testcase 523:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n-- Disable hash aggregation for plan stability.\n--Testcase 786:\nset enable_hashagg to false;\n\n-- Not pushed down due to user defined aggregate\n--Testcase 524:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Add function and aggregate into extension\n--alter extension postgres_fdw add function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw add aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now aggregate will be pushed.  Aggregate will display VARIADIC argument.\n--Testcase 525:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n--Testcase 526:\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n\n-- Remove function and aggregate from extension\n--alter extension postgres_fdw drop function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw drop aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Not pushed down as we have dropped objects from extension.\n--Testcase 527:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Cleanup\n--Testcase 787:\nreset enable_hashagg;\n--Testcase 528:\ndrop aggregate least_agg(variadic items anyarray);\n--Testcase 529:\ndrop function least_accum(anyelement, variadic anyarray);\n\n\n-- Testing USING OPERATOR() in ORDER BY within aggregate.\n-- For this, we need user defined operators along with operator family and\n-- operator class.  Create those and then add them in extension.  Note that\n-- user defined objects are considered unshippable unless they are part of\n-- the extension.\n--Testcase 530:\ncreate operator public.<^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4eq\n);\n\n--Testcase 531:\ncreate operator public.=^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4lt\n);\n\n--Testcase 532:\ncreate operator public.>^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4gt\n);\n\n--Testcase 533:\ncreate operator family my_op_family using btree;\n\n--Testcase 534:\ncreate function my_op_cmp(a int, b int) returns int as\n  $$begin return btint4cmp(a, b); end $$ language plpgsql;\n\n--Testcase 535:\ncreate operator class my_op_class for type int using btree family my_op_family as\n operator 1 public.<^,\n operator 3 public.=^,\n operator 5 public.>^,\n function 1 my_op_cmp(int, int);\n\n-- This will not be pushed as user defined sort operator is not part of the\n-- extension yet.\n--Testcase 536:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Update local stats on ft2\n--ANALYZE ft2;\n\n-- Add into extension\n--Testcase 788:\nalter extension sqlite_fdw add operator class my_op_class using btree;\n--Testcase 789:\nalter extension sqlite_fdw add function my_op_cmp(a int, b int);\n--Testcase 790:\nalter extension sqlite_fdw add operator family my_op_family using btree;\n--Testcase 791:\nalter extension sqlite_fdw add operator public.<^(int, int);\n--Testcase 792:\nalter extension sqlite_fdw add operator public.=^(int, int);\n--Testcase 793:\nalter extension sqlite_fdw add operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now this will be pushed as sort operator is part of the extension.\n--Testcase 537:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--Testcase 538:\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Remove from extension\n--Testcase 794:\nalter extension sqlite_fdw drop operator class my_op_class using btree;\n--Testcase 795:\nalter extension sqlite_fdw drop function my_op_cmp(a int, b int);\n--Testcase 796:\nalter extension sqlite_fdw drop operator family my_op_family using btree;\n--Testcase 797:\nalter extension sqlite_fdw drop operator public.<^(int, int);\n--Testcase 798:\nalter extension sqlite_fdw drop operator public.=^(int, int);\n--Testcase 799:\nalter extension sqlite_fdw drop operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- This will not be pushed as sort operator is now removed from the extension.\n--Testcase 539:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Cleanup\n--Testcase 540:\ndrop operator class my_op_class using btree;\n--Testcase 541:\ndrop function my_op_cmp(a int, b int);\n--Testcase 542:\ndrop operator family my_op_family using btree;\n--Testcase 543:\ndrop operator public.>^(int, int);\n--Testcase 544:\ndrop operator public.=^(int, int);\n--Testcase 545:\ndrop operator public.<^(int, int);\n\n-- Input relation to aggregate push down hook is not safe to pushdown and thus\n-- the aggregate cannot be pushed down to foreign server.\n--Testcase 201:\nexplain (verbose, costs off)\nselect count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2);\n\n-- Subquery in FROM clause having aggregate\n--Testcase 202:\nexplain (verbose, costs off)\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n--Testcase 203:\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n\n-- FULL join with IS NULL check in HAVING\n--Testcase 204:\nexplain (verbose, costs off)\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n--Testcase 205:\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n\n-- Aggregate over FULL join needing to deparse the joining relations as\n-- subqueries.\n--Testcase 206:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n--Testcase 207:\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n\n-- ORDER BY expression is part of the target list but not pushed down to\n-- foreign server.\n--Testcase 208:\nexplain (verbose, costs off)\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n--Testcase 209:\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n\n-- LATERAL join, with parameterization\n--Testcase 800:\nset enable_hashagg to false;\n--Testcase 210:\nexplain (verbose, costs off)\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 211:\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 801:\nreset enable_hashagg;\n\n-- bug #15613: bad plan for foreign table scan with lateral reference\n--Testcase 546:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n--Testcase 547:\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n-- Check with placeHolderVars\n--Testcase 212:\nexplain (verbose, costs off)\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n--Testcase 213:\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n\n\n-- Not supported cases\n-- Grouping sets\n--Testcase 214:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 215:\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 216:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 217:\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 218:\nexplain (verbose, costs off)\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 219:\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 220:\nexplain (verbose, costs off)\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n--Testcase 221:\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n\n-- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed\n--Testcase 222:\nexplain (verbose, costs off)\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n--Testcase 223:\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n\n-- WindowAgg\n--Testcase 224:\nexplain (verbose, costs off)\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 225:\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 226:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 227:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 228:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 229:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n\n\n-- ===================================================================\n-- parameterized queries\n-- ===================================================================\n-- simple join\n--Testcase 230:\nPREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);\n--Testcase 232:\nEXECUTE st1(1, 1);\n--Testcase 233:\nEXECUTE st1(101, 101);\n-- subquery using stable function (can't be sent to remote)\n--Testcase 234:\nPREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 235:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);\n--Testcase 236:\nEXECUTE st2(10, 20);\n--Testcase 237:\nEXECUTE st2(101, 121);\n-- subquery using immutable function (can be sent to remote)\n--Testcase 238:\nPREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 239:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);\n--Testcase 240:\nEXECUTE st3(10, 20);\n--Testcase 241:\nEXECUTE st3(20, 30);\n-- custom plan should be chosen initially\n--Testcase 242:\nPREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;\n--Testcase 243:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 244:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 245:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 246:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 247:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- once we try it enough times, should switch to generic plan\n--Testcase 248:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- value of $1 should not be sent to remote\n--Testcase 249:\nPREPARE st5(text,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 254:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 255:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 256:\nEXECUTE st5('foo', 1);\n\n-- altering FDW options requires replanning\n--Testcase 257:\nPREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 258:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 259:\nPREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo');\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 548:\nINSERT INTO \"S 1\".\"T 0\" SELECT * FROM \"S 1\".\"T 1\";\n--Testcase 802:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 0');\n--Testcase 261:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 262:\nEXECUTE st6;\n--Testcase 263:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 803:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 1');\n\n--Testcase 549:\nPREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 550:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 551:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--Testcase 552:\nEXECUTE st8;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- cleanup\nDEALLOCATE st1;\nDEALLOCATE st2;\nDEALLOCATE st3;\nDEALLOCATE st4;\nDEALLOCATE st5;\nDEALLOCATE st6;\nDEALLOCATE st7;\nDEALLOCATE st8;\n\n-- System columns, except ctid and oid, should not be sent to remote\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;\n--Testcase 265:\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1;\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 267:\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 553:\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 554:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n--Testcase 271:\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n\n-- ===================================================================\n-- used in PL/pgSQL function\n-- ===================================================================\n--Testcase 555:\nCREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$\nDECLARE\n\tv_c1 int;\nBEGIN\n--Testcase 556:\n    SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;\n    PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;\n    RETURN v_c1;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 272:\nSELECT f_test(100);\n--Testcase 557:\nDROP FUNCTION f_test(int);\n\n-- ===================================================================\n-- REINDEX\n-- ===================================================================\n-- remote table is not created here\n--Testcase 804:\nCREATE FOREIGN TABLE reindex_foreign (c1 int, c2 int)\n  SERVER sqlite_svr2 OPTIONS (table 'reindex_local');\nREINDEX TABLE reindex_foreign; -- error\nREINDEX TABLE CONCURRENTLY reindex_foreign; -- error\n--Testcase 805:\nDROP FOREIGN TABLE reindex_foreign;\n-- partitions and foreign tables\n--Testcase 806:\nCREATE TABLE reind_fdw_parent (c1 int) PARTITION BY RANGE (c1);\n--Testcase 807:\nCREATE TABLE reind_fdw_0_10 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (0) TO (10);\n--Testcase 808:\nCREATE FOREIGN TABLE reind_fdw_10_20 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (10) TO (20)\n  SERVER sqlite_svr OPTIONS (table 'reind_local_10_20');\nREINDEX TABLE reind_fdw_parent; -- ok\nREINDEX TABLE CONCURRENTLY reind_fdw_parent; -- ok\n--Testcase 809:\nDROP TABLE reind_fdw_parent;\n\n-- ===================================================================\n-- conversion error\n-- ===================================================================\n--Testcase 810:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;\n--Testcase 273:\nSELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1;\n--Testcase 274:\nSELECT  ftx.x1,  ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 275:\nSELECT  ftx.x1,  ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 276:\nSELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8;\n--Testcase 811:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text;\n\n-- ===================================================================\n-- subtransaction\n--  + local/remote error doesn't break cursor\n-- ===================================================================\nBEGIN;\nDECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;\n--Testcase 277:\nFETCH c;\nSAVEPOINT s;\nERROR OUT;          -- ERROR\nROLLBACK TO s;\n--Testcase 278:\nFETCH c;\nSAVEPOINT s;\n--Testcase 279:\nSELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR\nROLLBACK TO s;\n--Testcase 280:\nFETCH c;\n--Testcase 281:\nSELECT * FROM ft1 ORDER BY c1 LIMIT 1;\nCOMMIT;\n\n-- ===================================================================\n-- test handling of collations\n-- ===================================================================\n--Testcase 558:\ncreate foreign table ft3 (f1 text collate \"C\", f2 text, f3 varchar(10)) server sqlite_svr;\n\n-- can be sent to remote\n--Testcase 559:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo';\n--Testcase 560:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"C\" = 'foo';\n--Testcase 561:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo';\n--Testcase 562:\nexplain (verbose, costs off) select * from ft3 where f3 = 'foo';\n--Testcase 563:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 and l.f1 = 'foo';\n-- can't be sent to remote\n--Testcase 564:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"POSIX\" = 'foo';\n--Testcase 565:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE \"C\";\n--Testcase 566:\nexplain (verbose, costs off) select * from ft3 where f2 COLLATE \"C\" = 'foo';\n--Testcase 567:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE \"C\";\n--Testcase 568:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 COLLATE \"POSIX\" and l.f1 = 'foo';\n\n-- ===================================================================\n-- test writable foreign table stuff\n-- ===================================================================\n--Testcase 282:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 283:\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 284:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc');\n--Testcase 285:\nSELECT * FROM ft2 WHERE c1 >= 1101;\n--Testcase 286:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');\n--Testcase 287:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;              -- can be pushed down\n--Testcase 288:\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;\n--Testcase 289:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;  -- can be pushed down\n--Testcase 290:\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;\n--Testcase 291:\nSELECT * FROM ft2 WHERE c1 % 10 = 7;\n--Testcase 292:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;                               -- can be pushed down\n--Testcase 293:\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;\n--Testcase 294:\nEXPLAIN (verbose, costs off)\n  DELETE FROM ft2 WHERE c1 % 10 = 5;                               -- can be pushed down\n--Testcase 295:\nSELECT c1, c4 FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 569:\nDELETE FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 297:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;                -- can be pushed down\n--Testcase 298:\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;\n--Testcase 299:\nSELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;\n--Testcase 300:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 301:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 302:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;             -- can be pushed down\n--Testcase 303:\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;\n--Testcase 304:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 WHERE c1 = 1200;                       -- can be pushed down\n--Testcase 305:\nDELETE FROM ft2 WHERE c1 = 1200;\n\n-- Test UPDATE/DELETE on a three-table join\n--Testcase 306:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id;\n--Testcase 307:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;       -- can be pushed down\n--Testcase 308:\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;\n--Testcase 309:\nSELECT ft2, ft2.*, ft4, ft4.*\n  FROM ft2 INNER JOIN ft4 ON (ft2.c1 > 1200 AND ft2.c2 = ft4.c1)\n  INNER JOIN ft5 ON (ft4.c1 = ft5.c1);\n--Testcase 310:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;                          -- can be pushed down\n--Testcase 311:\nSELECT 100 FROM ft2, ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n\n--Testcase 570:\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n--Testcase 312:\nDELETE FROM ft2 WHERE ft2.c1 > 1200;\n\n-- Test UPDATE with a MULTIEXPR sub-select\n-- (maybe someday this'll be remotely executable, but not today)\n--Testcase 571:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n--Testcase 572:\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n--Testcase 573:\nUPDATE ft2 AS target SET (c2) = (\n    SELECT c2 / 10\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n-- Test UPDATE involving a join that can be pushed down,\n-- but a SET clause that can't be\n--Testcase 812:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n--Testcase 813:\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n\n-- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing\n-- user-defined operators/functions\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 574:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;\n--Testcase 575:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;            -- can't be pushed down\n--Testcase 576:\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 577:\nSELECT * FROM ft2 WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 578:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;                                                    -- can't be pushed down\n--Testcase 579:\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n--Testcase 580:\nSELECT ft2.*, ft4.*, ft5.* \n  FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n\n--Testcase 581:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 582:\nSELECT ft2.c1, ft2.c2, ft2.c3 FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 583:\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;\n\n--Testcase 584:\nDELETE FROM ft2 WHERE ft2.c1 > 2000;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n-- Test that trigger on remote table works as expected\n--Testcase 585:\nCREATE OR REPLACE FUNCTION \"S 1\".F_BRTRIG() RETURNS trigger AS $$\nBEGIN\n    NEW.c3 = NEW.c3 || '_trig_update';\n    RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 586:\nCREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE\n    ON ft2 FOR EACH ROW EXECUTE PROCEDURE \"S 1\".F_BRTRIG();\n\n--Testcase 313:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff');\n--Testcase 314:\nSELECT * FROM ft2 WHERE c1 = 1208;\n--Testcase 315:\nINSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;');\n--Testcase 316:\nSELECT * FROM ft2 WHERE c1 = 1218;\n--Testcase 317:\nUPDATE ft2 SET c2 = c2 + 600, c3 = c3 WHERE c1 % 10 = 8 AND c1 < 1200;\n--Testcase 318:\nSELECT * FROM ft2 WHERE c1 % 10 = 8 AND c1 < 1200;\n\n-- Test errors thrown on remote side during update\n-- create table in the remote server with check contraint\n--Testcase 738:\nCREATE FOREIGN TABLE ft1_constraint (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr OPTIONS (table 't1_constraint');\n--Testcase 747:\nINSERT INTO ft1_constraint SELECT * FROM ft1 ON CONFLICT DO NOTHING;\n-- c2 must be greater than or equal to 0, so this case is ignored.\n--Testcase 754:\nINSERT INTO ft1_constraint(c1, c2) VALUES (2222, -2) ON CONFLICT DO NOTHING; -- ignore, do nothing\n--Testcase 755:\nSELECT c1, c2 FROM ft1_constraint WHERE c1 = 2222 or c2 = -2; -- empty result\n--Testcase 748:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 749:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n--Testcase 319:\nINSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key\n--Testcase 320:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported\n--Testcase 321:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported\n--Testcase 743:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 744:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 750:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_constraint;\n--Testcase 751:\nALTER FOREIGN TABLE ft1_org RENAME TO ft1;\n\n-- Test savepoint/rollback behavior\n--Testcase 322:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 323:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\nbegin;\n--Testcase 324:\nupdate ft2 set c2 = 42 where c2 = 0;\n--Testcase 325:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s1;\n--Testcase 326:\nupdate ft2 set c2 = 44 where c2 = 4;\n--Testcase 327:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s1;\n--Testcase 328:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s2;\n--Testcase 329:\nupdate ft2 set c2 = 46 where c2 = 6;\n--Testcase 330:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrollback to savepoint s2;\n--Testcase 331:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s2;\n--Testcase 332:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s3;\n--Testcase 333:\n--skip, does not support CHECK\n--update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side\nrollback to savepoint s3;\n--Testcase 334:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s3;\n--Testcase 335:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n-- none of the above is committed yet remotely\n--Testcase 336:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\ncommit;\n--Testcase 337:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 338:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\n\n--VACUUM ANALYZE \"S 1\".\"T 1\";\n\n-- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs\n-- FIRST behavior here.\n-- ORDER BY DESC NULLS LAST options\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10;\n--Testcase 340:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795  LIMIT 10;\n-- ORDER BY DESC NULLS FIRST options\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 342:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n-- ORDER BY ASC NULLS FIRST options\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 344:\nSELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n\n-- ===================================================================\n-- test check constraints\n-- ===================================================================\n--Testcase 752:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 753:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n-- Consistent check constraints provide consistent results\n--Testcase 814:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0);\n--Testcase 587:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 588:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 815:\nSET constraint_exclusion = 'on';\n--Testcase 589:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 590:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 816:\nRESET constraint_exclusion;\n-- check constraint is enforced on the remote side, not locally\n--Testcase 745:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 746:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 817:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2positive;\n\n-- But inconsistent check constraints provide inconsistent results\n--Testcase 818:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 592:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 819:\nSET constraint_exclusion = 'on';\n--Testcase 593:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 594:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 820:\nRESET constraint_exclusion;\n-- local check constraint is not actually enforced\n--Testcase 595:\nINSERT INTO ft1(c1, c2) VALUES(1111, 2);\n--Testcase 596:\nUPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1;\n--Testcase 821:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative;\n\n-- ===================================================================\n-- test WITH CHECK OPTION constraints\n-- ===================================================================\n--Testcase 597:\nCREATE FUNCTION row_before_insupd_trigfunc() RETURNS trigger AS $$BEGIN NEW.a := NEW.a + 10; RETURN NEW; END$$ LANGUAGE plpgsql;\n\n--Testcase 598:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 599:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n--Testcase 600:\nCREATE VIEW rw_view AS SELECT * FROM foreign_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 601:\n\\d+ rw_view\n\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 602:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 603:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 604:\nINSERT INTO rw_view VALUES (0, 15); -- error\n--Testcase 605:\nSELECT * FROM foreign_tbl;\n\n--Testcase 606:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 607:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 608:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 609:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 610:\nSELECT * FROM foreign_tbl;\n\n--Testcase 611:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 612:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n\n-- test WCO for partitions\n\n--Testcase 613:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 614:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n\n--Testcase 615:\nCREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);\n--Testcase 822:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n\n--Testcase 616:\nCREATE VIEW rw_view AS SELECT * FROM parent_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 617:\n\\d+ rw_view\n\n--Testcase 618:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 619:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 620:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 621:\nINSERT INTO rw_view VALUES (0, 15); -- ok\n--Testcase 622:\nSELECT * FROM foreign_tbl;\n\n--Testcase 623:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 624:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 625:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 626:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 627:\nSELECT * FROM foreign_tbl;\n\n--Testcase 628:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n--Testcase 629:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 630:\nDROP TABLE parent_tbl CASCADE;\n\n--Testcase 631:\nDROP FUNCTION row_before_insupd_trigfunc;\n\n-- ===================================================================\n-- test serial columns (ie, sequence-based defaults)\n-- ===================================================================\n--Testcase 632:\ncreate foreign table loc1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr;\n--Testcase 633:\ncreate foreign table rem1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr options(table 'loc1');\n--Testcase 352:\nselect pg_catalog.setval('rem1_f1_seq', 10, false);\n--Testcase 353:\ninsert into loc1(f2) values('hi');\n--Testcase 634:\ninsert into rem1(f2) values('hi remote');\n--Testcase 354:\ninsert into loc1(f2) values('bye');\n--Testcase 635:\ninsert into rem1(f2) values('bye remote');\n--Testcase 355:\nselect f1, f2 from loc1;\n--Testcase 636:\nselect f1, f2 from rem1;\n\n-- ===================================================================\n-- test generated columns\n-- ===================================================================\n--Testcase 637:\ncreate foreign table grem1 (\n  a int options (key 'true'),\n  b int generated always as (a * 2) stored)\n  server sqlite_svr options(table 'grem1_post14');\n--Testcase 638:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 823:\ninsert into grem1 (a) values (1), (2);\n--Testcase 639:\nexplain (verbose, costs off)\nupdate grem1 set a = 22 where a = 2;\n--Testcase 824:\nupdate grem1 set a = 22 where a = 2;\n--Testcase 640:\nselect * from grem1;\n--Testcase 825:\ndelete from grem1;\n\n-- -- test copy from\n-- copy grem1 from stdin;\n-- 1\n-- 2\n-- \\.\n-- select * from grem1;\n-- delete from grem1;\n\n-- test batch insert\n--Testcase 826:\nalter server sqlite_svr options (add batch_size '10');\n--Testcase 827:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 828:\ninsert into grem1 (a) values (1), (2);\n--Testcase 829:\nselect * from grem1;\n--Testcase 830:\ndelete from grem1;\n--Testcase 831:\nalter server sqlite_svr options (drop batch_size);\n\n-- ===================================================================\n-- test local triggers\n-- ===================================================================\n\n-- Trigger functions \"borrowed\" from triggers regress test.\n--Testcase 641:\nCREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$\nBEGIN\n\tRAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',\n\t\tTG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;\n\tRETURN NULL;\nEND;$$;\n\n--Testcase 642:\nCREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 643:\nCREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n\n--Testcase 644:\nCREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger\nLANGUAGE plpgsql AS $$\n\ndeclare\n\toldnew text[];\n\trelid text;\n    argstr text;\nbegin\n\n\trelid := TG_relid::regclass;\n\targstr := '';\n\tfor i in 0 .. TG_nargs - 1 loop\n\t\tif i > 0 then\n\t\t\targstr := argstr || ', ';\n\t\tend if;\n\t\targstr := argstr || TG_argv[i];\n\tend loop;\n\n    RAISE NOTICE '%(%) % % % ON %',\n\t\ttg_name, argstr, TG_when, TG_level, TG_OP, relid;\n    oldnew := '{}'::text[];\n\tif TG_OP != 'INSERT' then\n\t\toldnew := array_append(oldnew, format('OLD: %s', OLD));\n\tend if;\n\n\tif TG_OP != 'DELETE' then\n\t\toldnew := array_append(oldnew, format('NEW: %s', NEW));\n\tend if;\n\n    RAISE NOTICE '%', array_to_string(oldnew, ',');\n\n\tif TG_OP = 'DELETE' then\n\t\treturn OLD;\n\telse\n\t\treturn NEW;\n\tend if;\nend;\n$$;\n\n-- Test basic functionality\n--Testcase 645:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 646:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 356:\ndelete from rem1;\n--Testcase 357:\ninsert into rem1 values(1,'insert');\n--Testcase 358:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 359:\nupdate rem1 set f2 = f2 || f2;\n\n\n-- cleanup\n--Testcase 647:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 648:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 649:\nDROP TRIGGER trig_stmt_before ON rem1;\n--Testcase 650:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n--Testcase 360:\nDELETE from rem1;\n\n-- Test multiple AFTER ROW triggers on a foreign table\n--Testcase 651:\nCREATE TRIGGER trig_row_after1\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 652:\nCREATE TRIGGER trig_row_after2\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 653:\ninsert into rem1 values(1,'insert');\n--Testcase 654:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 655:\nupdate rem1 set f2 = f2 || f2;\n--Testcase 656:\ndelete from rem1;\n\n-- cleanup\n--Testcase 657:\nDROP TRIGGER trig_row_after1 ON rem1;\n--Testcase 658:\nDROP TRIGGER trig_row_after2 ON rem1;\n\n-- Test WHEN conditions\n\n--Testcase 659:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 660:\nCREATE TRIGGER trig_row_after_insupd\nAFTER INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Insert or update not matching: nothing happens\n--Testcase 363:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 364:\nUPDATE rem1 set f2 = 'test';\n\n-- Insert or update matching: triggers are fired\n--Testcase 365:\nINSERT INTO rem1 values(2, 'update');\n--Testcase 366:\nUPDATE rem1 set f2 = 'update update' where f1 = '2';\n\n--Testcase 661:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 662:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Trigger is fired for f1=2, not for f1=1\n--Testcase 369:\nDELETE FROM rem1;\n\n-- cleanup\n--Testcase 663:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 664:\nDROP TRIGGER trig_row_after_insupd ON rem1;\n--Testcase 665:\nDROP TRIGGER trig_row_before_delete ON rem1;\n--Testcase 666:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n\n-- Test various RETURN statements in BEFORE triggers.\n\n--Testcase 667:\nCREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$\n  BEGIN\n    NEW.f2 := NEW.f2 || ' triggered !';\n    RETURN NEW;\n  END\n$$ language plpgsql;\n\n--Testcase 668:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n-- The new values should have 'triggered' appended\n--Testcase 370:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 371:\nSELECT f1, f2 from rem1;\n--Testcase 372:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 373:\nSELECT f1, f2 from rem1;\n--Testcase 374:\nUPDATE rem1 set f2 = '';\n--Testcase 375:\nSELECT f1, f2 from rem1;\n--Testcase 376:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 377:\nSELECT f1, f2 from rem1;\n\n--Testcase 669:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f1 = 10;          -- all columns should be transmitted\n--Testcase 670:\nUPDATE rem1 set f1 = 10;\n--Testcase 671:\nSELECT f1, f2 from rem1;\n\n--Testcase 378:\nDELETE FROM rem1;\n\n-- Add a second trigger, to check that the changes are propagated correctly\n-- from trigger to trigger\n--Testcase 672:\nCREATE TRIGGER trig_row_before_insupd2\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 379:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 380:\nSELECT f1, f2 from rem1;\n--Testcase 381:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 382:\nSELECT f1, f2 from rem1;\n--Testcase 383:\nUPDATE rem1 set f2 = '';\n--Testcase 384:\nSELECT f1, f2 from rem1;\n--Testcase 385:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 386:\nSELECT f1, f2 from rem1;\n\n--Testcase 673:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 674:\nDROP TRIGGER trig_row_before_insupd2 ON rem1;\n\n--Testcase 387:\nDELETE from rem1;\n\n--Testcase 388:\nINSERT INTO rem1 VALUES (1, 'test');\n\n-- Test with a trigger returning NULL\n--Testcase 675:\nCREATE FUNCTION trig_null() RETURNS TRIGGER AS $$\n  BEGIN\n    RETURN NULL;\n  END\n$$ language plpgsql;\n\n--Testcase 676:\nCREATE TRIGGER trig_null\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_null();\n\n-- Nothing should have changed.\n--Testcase 389:\nINSERT INTO rem1 VALUES (2, 'test2');\n\n--Testcase 390:\nSELECT f1, f2 from rem1;\n\n--Testcase 391:\nUPDATE rem1 SET f2 = 'test2';\n\n--Testcase 392:\nSELECT f1, f2 from rem1;\n\n--Testcase 393:\nDELETE from rem1;\n\n--Testcase 394:\nSELECT f1, f2 from rem1;\n\n--Testcase 677:\nDROP TRIGGER trig_null ON rem1;\n--Testcase 395:\nDELETE from rem1;\n\n-- Test a combination of local and remote triggers\n--Testcase 678:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 679:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 680:\nCREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 681:\nINSERT INTO rem1(f2) VALUES ('test');\n--Testcase 682:\nUPDATE rem1 SET f2 = 'testo';\n\n-- Test returning a system attribute\n--Testcase 683:\nINSERT INTO rem1(f2) VALUES ('test');\n\n-- cleanup\n--Testcase 684:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 685:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 686:\nDROP TRIGGER trig_local_before ON rem1;\n\n\n-- Test direct foreign table modification functionality\n--Testcase 832:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 833:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1 WHERE false;     -- currently can't be pushed down\n\n-- Test with statement-level triggers\n--Testcase 687:\nCREATE TRIGGER trig_stmt_before\n\tBEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 396:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 397:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 688:\nDROP TRIGGER trig_stmt_before ON rem1;\n\n--Testcase 689:\nCREATE TRIGGER trig_stmt_after\n\tAFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 398:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 399:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 690:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n-- Test with row-level ON INSERT triggers\n--Testcase 691:\nCREATE TRIGGER trig_row_before_insert\nBEFORE INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 400:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 401:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 692:\nDROP TRIGGER trig_row_before_insert ON rem1;\n\n--Testcase 693:\nCREATE TRIGGER trig_row_after_insert\nAFTER INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 402:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 403:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 694:\nDROP TRIGGER trig_row_after_insert ON rem1;\n\n-- Test with row-level ON UPDATE triggers\n--Testcase 695:\nCREATE TRIGGER trig_row_before_update\nBEFORE UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 404:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 405:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 696:\nDROP TRIGGER trig_row_before_update ON rem1;\n\n--Testcase 697:\nCREATE TRIGGER trig_row_after_update\nAFTER UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 406:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 407:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 698:\nDROP TRIGGER trig_row_after_update ON rem1;\n\n-- Test with row-level ON DELETE triggers\n--Testcase 699:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 408:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 409:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 700:\nDROP TRIGGER trig_row_before_delete ON rem1;\n\n--Testcase 701:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 410:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 411:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 702:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n-- ===================================================================\n-- test inheritance features\n-- ===================================================================\n\n--Testcase 703:\nCREATE TABLE a (aa TEXT);\n--Testcase 834:\nALTER TABLE a SET (autovacuum_enabled = 'false');\n--Testcase 704:\nCREATE FOREIGN TABLE b (aa TEXT OPTIONS (key 'true'), bb TEXT) INHERITS (a)\n  SERVER sqlite_svr OPTIONS (table 'loct');\n\n--Testcase 412:\nINSERT INTO a(aa) VALUES('aaa');\n--Testcase 413:\nINSERT INTO a(aa) VALUES('aaaa');\n--Testcase 414:\nINSERT INTO a(aa) VALUES('aaaaa');\n\n--Testcase 415:\nINSERT INTO b(aa) VALUES('bbb');\n--Testcase 416:\nINSERT INTO b(aa) VALUES('bbbb');\n--Testcase 417:\nINSERT INTO b(aa) VALUES('bbbbb');\n\n--Testcase 418:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 419:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 420:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 421:\nUPDATE a SET aa = 'zzzzzz' WHERE aa LIKE 'aaaa%';\n\n--Testcase 422:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 423:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 424:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 425:\nUPDATE b SET aa = 'new';\n\n--Testcase 426:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 427:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 428:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 429:\nUPDATE a SET aa = 'newtoo';\n\n--Testcase 430:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 431:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 432:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 433:\nDELETE FROM a;\n\n--Testcase 434:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 435:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 436:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 705:\nDROP TABLE a CASCADE;\n\n-- Check SELECT FOR UPDATE/SHARE with an inherited source table\n\n--Testcase 706:\ncreate table foo (f1 int, f2 int);\n--Testcase 707:\ncreate foreign table foo2 (f3 int OPTIONS (key 'true')) inherits (foo)\n  server sqlite_svr options (table 'loct1');\n--Testcase 708:\ncreate table bar (f1 int, f2 int);\n--Testcase 709:\ncreate foreign table bar2 (f3 int OPTIONS (key 'true')) inherits (bar)\n  server sqlite_svr options (table 'loct2');\n\n--Testcase 835:\nalter table foo set (autovacuum_enabled = 'false');\n--Testcase 836:\nalter table bar set (autovacuum_enabled = 'false');\n\n--Testcase 437:\ninsert into foo values(1,1);\n--Testcase 438:\ninsert into foo values(3,3);\n--Testcase 439:\ninsert into foo2 values(2,2,2);\n--Testcase 440:\ninsert into foo2 values(4,4,4);\n--Testcase 441:\ninsert into bar values(1,11);\n--Testcase 442:\ninsert into bar values(2,22);\n--Testcase 443:\ninsert into bar values(6,66);\n--Testcase 444:\ninsert into bar2 values(3,33,33);\n--Testcase 445:\ninsert into bar2 values(4,44,44);\n--Testcase 446:\ninsert into bar2 values(7,77,77);\n\n--Testcase 447:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for update;\n--Testcase 448:\nselect * from bar where f1 in (select f1 from foo) for update;\n\n--Testcase 449:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for share;\n--Testcase 450:\nselect * from bar where f1 in (select f1 from foo) for share;\n\n-- Now check SELECT FOR UPDATE/SHARE with an inherited source table,\n-- where the parent is itself a foreign table\n--Testcase 837:\ncreate foreign table foo2child (f3 int) inherits (foo2)\n  server sqlite_svr options (table 'loct4_2');\n\n--Testcase 838:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 839:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 840:\ndrop foreign table foo2child;\n\n-- And with a local child relation of the foreign table parent\n--Testcase 841:\ncreate table foo2child (f3 int) inherits (foo2);\n\n--Testcase 842:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 843:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 844:\ndrop table foo2child;\n\n-- Check UPDATE with inherited target and an inherited source table\n--Testcase 451:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n--Testcase 452:\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n\n--Testcase 453:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Check UPDATE with inherited target and an appendrel subquery\n--Testcase 454:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n--Testcase 455:\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n\n--Testcase 456:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Test forcing the remote server to produce sorted data for a merge join,\n-- but the foreign table is an inheritance child.\n--truncate table loct1;\n--Testcase 710:\ndelete from foo2;\ntruncate table only foo;\n\\set num_rows_foo 2000\n--Testcase 711:\ninsert into foo2 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2);\n--Testcase 712:\ninsert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2);\n--Testcase 845:\nSET enable_hashjoin to false;\n--Testcase 846:\nSET enable_nestloop to false;\n--alter foreign table foo2 options (use_remote_estimate 'true');\n--create index i_loct1_f1 on loct1(f1);\n--Testcase 713:\ncreate index i_foo_f1 on foo(f1);\nanalyze foo;\n--analyze loct1;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 714:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 715:\nselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 716:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 717:\nselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 847:\nRESET enable_hashjoin;\n--Testcase 848:\nRESET enable_nestloop;\n\n-- Test that WHERE CURRENT OF is not supported\nbegin;\ndeclare c cursor for select * from bar where f1 = 7;\n--Testcase 457:\nfetch from c;\n--Testcase 458:\nupdate bar set f2 = null where current of c;\nrollback;\n\n--Testcase 459:\nexplain (verbose, costs off)\ndelete from foo where f1 < 5;\n--Testcase 460:\ndelete from foo where f1 < 5;\n--Testcase 461:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 462:\nupdate bar set f2 = f2 + 100;\n--Testcase 463:\nselect * from bar;\n\n-- Test that UPDATE/DELETE with inherited target works with row-level triggers\n--Testcase 718:\nCREATE TRIGGER trig_row_before\nBEFORE UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 719:\nCREATE TRIGGER trig_row_after\nAFTER UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 464:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 465:\nupdate bar set f2 = f2 + 100;\n\n--Testcase 466:\nexplain (verbose, costs off)\ndelete from bar where f2 < 400;\n--Testcase 467:\ndelete from bar where f2 < 400;\n\n-- cleanup\n--Testcase 720:\ndrop table foo cascade;\n--Testcase 721:\ndrop table bar cascade;\n\n-- Test pushing down UPDATE/DELETE joins to the remote server\n--Testcase 722:\ncreate table parent (a int, b text);\n--Testcase 723:\ncreate foreign table remt1 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct3');\n--Testcase 724:\ncreate foreign table remt2 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct4');\n--Testcase 849:\nalter foreign table remt1 inherit parent;\n\n--Testcase 468:\ninsert into remt1 values (1, 'foo');\n--Testcase 469:\ninsert into remt1 values (2, 'bar');\n--Testcase 470:\ninsert into remt2 values (1, 'foo');\n--Testcase 471:\ninsert into remt2 values (2, 'bar');\n\n--Testcase 472:\nexplain (verbose, costs off)\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 473:\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 474:\nselect * from parent inner join remt2 on (parent.a = remt2.a);\n--Testcase 475:\nexplain (verbose, costs off)\ndelete from parent using remt2 where parent.a = remt2.a;\n--Testcase 476:\ndelete from parent using remt2 where parent.a = remt2.a;\n\n-- cleanup\n--Testcase 725:\ndrop foreign table remt1;\n--Testcase 726:\ndrop foreign table remt2;\n--Testcase 727:\ndrop table parent;\n\n/* \n-- Skip these tests, sqlite fdw does not support partition table, check constraint, copy from\n-- ===================================================================\n-- test tuple routing for foreign-table partitions\n-- ===================================================================\n\n-- Test insert tuple routing\ncreate table itrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table itrtest attach partition remp1 for values in (1);\nalter table itrtest attach partition remp2 for values in (2);\n\ninsert into itrtest values (1, 'foo');\ninsert into itrtest values (1, 'bar') returning *;\ninsert into itrtest values (2, 'baz');\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\n\nselect tableoid::regclass, * FROM itrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from itrtest;\n\ncreate unique index loct1_idx on loct1 (a);\n\n-- DO NOTHING without an inference specification is supported\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\n\n-- But other cases are not supported\ninsert into itrtest values (1, 'bar') on conflict (a) do nothing;\ninsert into itrtest values (1, 'bar') on conflict (a) do update set b = excluded.b;\n\nselect tableoid::regclass, * FROM itrtest;\n\ndelete from itrtest;\n\ndrop index loct1_idx;\n\n-- Test that remote triggers work with insert tuple routing\ncreate function br_insert_trigfunc() returns trigger as $$\nbegin\n\tnew.b := new.b || ' triggered !';\n\treturn new;\nend\n$$ language plpgsql;\ncreate trigger loct1_br_insert_trigger before insert on loct1\n\tfor each row execute procedure br_insert_trigfunc();\ncreate trigger loct2_br_insert_trigger before insert on loct2\n\tfor each row execute procedure br_insert_trigfunc();\n\n-- The new values are concatenated with ' triggered !'\ninsert into itrtest values (1, 'foo') returning *;\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\nwith result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result;\n\ndrop trigger loct1_br_insert_trigger on loct1;\ndrop trigger loct2_br_insert_trigger on loct2;\n\ndrop table itrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- Test update tuple routing\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table loct (a int check (a in (1)), b text);\ncreate foreign table remp (a int check (a in (1)), b text) server loopback options (table_name 'loct');\ncreate table locp (a int check (a in (2)), b text);\nalter table utrtest attach partition remp for values in (1);\nalter table utrtest attach partition locp for values in (2);\n\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- It's not allowed to move a row from a partition that is foreign to another\nupdate utrtest set a = 2 where b = 'foo' returning *;\n\n-- But the reverse is allowed\nupdate utrtest set a = 1 where b = 'qux' returning *;\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- The executor should not let unexercised FDWs shut down\nupdate utrtest set a = 1 where b = 'foo';\n\n-- Test that remote triggers work with update tuple routing\ncreate trigger loct_br_insert_trigger before insert on loct\n\tfor each row execute procedure br_insert_trigfunc();\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition is a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition isn't a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 2 returning *;\n\ndrop trigger loct_br_insert_trigger on loct;\n\n-- We can move rows to a foreign partition that has been updated already,\n-- but can't move rows to a foreign partition that hasn't been updated yet\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- Test the former case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 returning *;\nupdate utrtest set a = 1 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\n\n-- Change the definition of utrtest so that the foreign partition get updated\n-- after the local partition\ndelete from utrtest;\nalter table utrtest detach partition remp;\ndrop foreign table remp;\nalter table loct drop constraint loct_a_check;\nalter table loct add check (a in (3));\ncreate foreign table remp (a int check (a in (3)), b text) server loopback options (table_name 'loct');\nalter table utrtest attach partition remp for values in (3);\ninsert into utrtest values (2, 'qux');\ninsert into utrtest values (3, 'xyzzy');\n\n-- Test the latter case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 returning *;\nupdate utrtest set a = 3 returning *; -- ERROR\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *;\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR\n\ndrop table utrtest;\ndrop table loct;\n\n-- Test copy tuple routing\ncreate table ctrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table ctrtest attach partition remp1 for values in (1);\nalter table ctrtest attach partition remp2 for values in (2);\n\ncopy ctrtest from stdin;\n1\tfoo\n2\tqux\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\n-- Copying into foreign partitions directly should work as well\ncopy remp1 from stdin;\n1\tbar\n\\.\n\nselect tableoid::regclass, * FROM remp1;\n\ndrop table ctrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- ===================================================================\n-- test COPY FROM\n-- ===================================================================\n\ncreate table loc2 (f1 int, f2 text);\nalter table loc2 set (autovacuum_enabled = 'false');\ncreate foreign table rem2 (f1 int, f2 text) server loopback options(table_name 'loc2');\n\n-- Test basic functionality\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndelete from rem2;\n\n-- Test check constraints\nalter table loc2 add constraint loc2_f1positive check (f1 >= 0);\nalter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- check constraint is enforced on the remote side, not locally\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\ncopy rem2 from stdin; -- ERROR\n-1\txyzzy\n\\.\nselect * from rem2;\n\nalter foreign table rem2 drop constraint rem2_f1positive;\nalter table loc2 drop constraint loc2_f1positive;\n\ndelete from rem2;\n\n-- Test local triggers\ncreate trigger trig_stmt_before before insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_stmt_after after insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before on rem2;\ndrop trigger trig_row_after on rem2;\ndrop trigger trig_stmt_before on rem2;\ndrop trigger trig_stmt_after on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_row_before_insert before insert on rem2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on rem2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on rem2;\n\ndelete from rem2;\n\n-- Test remote triggers\ncreate trigger trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on loc2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on loc2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on loc2;\n\ndelete from rem2;\n\n-- Test a combination of local and remote triggers\ncreate trigger rem2_trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger rem2_trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger loc2_trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger rem2_trig_row_before on rem2;\ndrop trigger rem2_trig_row_after on rem2;\ndrop trigger loc2_trig_row_before_insert on loc2;\n\ndelete from rem2;\n\n-- test COPY FROM with foreign table created in the same transaction\ncreate table loc3 (f1 int, f2 text);\nbegin;\ncreate foreign table rem3 (f1 int, f2 text)\n\tserver loopback options(table_name 'loc3');\ncopy rem3 from stdin;\n1\tfoo\n2\tbar\n\\.\ncommit;\nselect * from rem3;\ndrop foreign table rem3;\ndrop table loc3;\n*/\n\n-- ===================================================================\n-- test for TRUNCATE\n-- ===================================================================\n--Testcase 850:\nCREATE FOREIGN TABLE tru_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable0');\n--Testcase 851:\nINSERT INTO \"S 1\".tru_rtable0 (SELECT x FROM generate_series(1,10) x);\n\n-- CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id);\n-- CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable\n--                             FOR VALUES WITH (MODULUS 2, REMAINDER 0);\n-- CREATE TABLE tru_rtable1 (id int primary key);\n-- CREATE FOREIGN TABLE tru_ftable__p1 (id int)\n--        SERVER sqlite_svr OPTIONS (table 'tru_ptable');\n-- INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x);\n\n--Testcase 852:\nINSERT INTO \"S 1\".tru_pk_table (SELECT x FROM generate_series(1,10) x);\n--Testcase 853:\nINSERT INTO \"S 1\".tru_fk_table(fkey) (SELECT x % 10 + 1 FROM generate_series(5,25) x);\n--Testcase 854:\nCREATE FOREIGN TABLE tru_pk_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_pk_table');\n\n--Testcase 855:\nCREATE FOREIGN TABLE tru_ftable_parent (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_parent');\n--Testcase 856:\nCREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_child');\n--Testcase 857:\nINSERT INTO \"S 1\".tru_rtable_parent (SELECT x FROM generate_series(1,8) x);\n--Testcase 858:\nINSERT INTO \"S 1\".tru_rtable_child  (SELECT x FROM generate_series(10, 18) x);\n\n-- normal truncate\n--Testcase 859:\nSELECT sum(id) FROM tru_ftable;        -- 55\nTRUNCATE tru_ftable;\n--Testcase 860:\nSELECT count(*) FROM \"S 1\".tru_rtable0;\t\t-- 0\n--Testcase 861:\nSELECT count(*) FROM tru_ftable;\t\t-- 0\n\n-- 'truncatable' option\n--Testcase 862:\nALTER SERVER sqlite_svr OPTIONS (ADD truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 863:\nALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n--Testcase 864:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 865:\nALTER SERVER sqlite_svr OPTIONS (DROP truncatable);\n--Testcase 866:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 867:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n\n-- -- partitioned table with both local and foreign tables as partitions\n-- SELECT sum(id) FROM tru_ptable;        -- 155\n-- TRUNCATE tru_ptable;\n-- SELECT count(*) FROM tru_ptable;\t\t-- 0\n-- SELECT count(*) FROM tru_ptable__p0;\t-- 0\n-- SELECT count(*) FROM tru_ftable__p1;\t-- 0\n-- SELECT count(*) FROM tru_rtable1;\t\t-- 0\n\n-- 'CASCADE' option\n--Testcase 868:\nSELECT sum(id) FROM tru_pk_ftable;      -- 55\n-- SQLite FDW support TRUNCATE command by executing DELETE statement without WHERE clause.\n-- In order to delete records in parent and child table subsequently,\n-- SQLite FDW executes \"PRAGMA foreign_keys = ON\" before executing DELETE statement.\nTRUNCATE tru_pk_ftable; -- success\nTRUNCATE tru_pk_ftable CASCADE; -- success\n--Testcase 869:\nSELECT count(*) FROM tru_pk_ftable;    -- 0\n--Testcase 870:\nSELECT count(*) FROM \"S 1\".tru_fk_table;\t\t-- also truncated,0\n\n-- truncate two tables at a command\n--Testcase 871:\nINSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x);\n--Testcase 872:\nINSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x);\n--Testcase 873:\nSELECT count(*) from tru_ftable; -- 8\n--Testcase 874:\nSELECT count(*) from tru_pk_ftable; -- 8\nTRUNCATE tru_ftable, tru_pk_ftable;\n--Testcase 875:\nSELECT count(*) from tru_ftable; -- 0\n--Testcase 876:\nSELECT count(*) from tru_pk_ftable; -- 0\n\n-- truncate with ONLY clause\n-- Since ONLY is specified, the table tru_ftable_child that inherits\n-- tru_ftable_parent locally is not truncated.\nTRUNCATE ONLY tru_ftable_parent;\n--Testcase 877:\nSELECT sum(id) FROM tru_ftable_parent;  -- 126\nTRUNCATE tru_ftable_parent;\n--Testcase 878:\nSELECT count(*) FROM tru_ftable_parent; -- 0\n\n-- -- in case when remote table has inherited children\n-- CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0);\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x);\n-- INSERT INTO \"S 1\".tru_rtable0_child (SELECT x FROM generate_series(10,14) x);\n-- SELECT sum(id) FROM tru_ftable;   -- 95\n\n-- -- Both parent and child tables in the foreign server are truncated\n-- -- even though ONLY is specified because ONLY has no effect\n-- -- when truncating a foreign table.\n-- TRUNCATE ONLY tru_ftable;\n-- SELECT count(*) FROM tru_ftable;   -- 0\n\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x);\n-- INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x);\n-- SELECT sum(id) FROM tru_ftable;\t\t-- 255\n-- TRUNCATE tru_ftable;\t\t\t-- truncate both of parent and child\n-- SELECT count(*) FROM tru_ftable;    -- 0\n\n-- cleanup\n--Testcase 879:\nDROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable;\n-- DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table,\n-- tru_rtable_parent,tru_rtable_child, tru_rtable0_child;\n\n-- ===================================================================\n-- test IMPORT FOREIGN SCHEMA\n-- ===================================================================\n\n--Testcase 728:\nCREATE SCHEMA import_dest1;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest1;\n--Testcase 477:\n\\det+ import_dest1.*\n--Testcase 478:\n\\d import_dest1.*\n\n-- Options\n--Testcase 729:\nCREATE SCHEMA import_dest2;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest2\n  OPTIONS (import_default 'true');\n--Testcase 479:\n\\det+ import_dest2.*\n--Testcase 480:\n\\d import_dest2.*\n\n-- Check LIMIT TO and EXCEPT\n--Testcase 730:\nCREATE SCHEMA import_dest3;\nIMPORT FOREIGN SCHEMA public LIMIT TO (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 481:\n\\det+ import_dest3.*\nIMPORT FOREIGN SCHEMA public EXCEPT (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 482:\n\\det+ import_dest3.*\n\n-- Assorted error cases\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest3;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO notthere;\nIMPORT FOREIGN SCHEMA public FROM SERVER nowhere INTO notthere;\n\n/*\n-- Skip these test, sqlite fdw does not support fetch_size option, partition table\n-- Check case of a type present only on the remote server.\n-- We can fake this by dropping the type locally in our transaction.\nCREATE TYPE \"Colors\" AS ENUM ('red', 'green', 'blue');\nCREATE TABLE import_source.t5 (c1 int, c2 text collate \"C\", \"Col\" \"Colors\");\n\nCREATE SCHEMA import_dest5;\nBEGIN;\nDROP TYPE \"Colors\" CASCADE;\nIMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)\n  FROM SERVER loopback INTO import_dest5;  -- ERROR\n\nROLLBACK;\n\nBEGIN;\n\n\nCREATE SERVER fetch101 FOREIGN DATA WRAPPER postgres_fdw OPTIONS( fetch_size '101' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nALTER SERVER fetch101 OPTIONS( SET fetch_size '202' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=202'];\n\nCREATE FOREIGN TABLE table30000 ( x int ) SERVER fetch101 OPTIONS ( fetch_size '30000' );\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nALTER FOREIGN TABLE table30000 OPTIONS ( SET fetch_size '60000');\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=60000'];\n\nROLLBACK;\n\n-- ===================================================================\n-- test partitionwise joins\n-- ===================================================================\nSET enable_partitionwise_join=on;\n\nCREATE TABLE fprt1 (a int, b int, c varchar) PARTITION BY RANGE(a);\nCREATE TABLE fprt1_p1 (LIKE fprt1);\nCREATE TABLE fprt1_p2 (LIKE fprt1);\nALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i;\nINSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i;\nCREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250)\n\tSERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true');\nCREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (TABLE_NAME 'fprt1_p2');\nANALYZE fprt1;\nANALYZE fprt1_p1;\nANALYZE fprt1_p2;\n\nCREATE TABLE fprt2 (a int, b int, c varchar) PARTITION BY RANGE(b);\nCREATE TABLE fprt2_p1 (LIKE fprt2);\nCREATE TABLE fprt2_p2 (LIKE fprt2);\nALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i;\nINSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i;\nCREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true');\nALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250);\nCREATE FOREIGN TABLE ftprt2_p2 PARTITION OF fprt2 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p2', use_remote_estimate 'true');\nANALYZE fprt2;\nANALYZE fprt2_p1;\nANALYZE fprt2_p2;\n\n-- inner join three tables\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\n\n-- left outer join + nullable clause\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\n\n-- with whole-row reference; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\n\n-- join with lateral reference\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\n\n-- with PHVs, partitionwise join selected but no join pushdown\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\n\n-- test FOR UPDATE; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\n\nRESET enable_partitionwise_join;\n\n\n-- ===================================================================\n-- test partitionwise aggregates\n-- ===================================================================\n\nCREATE TABLE pagg_tab (a int, b int, c text) PARTITION BY RANGE(a);\n\nCREATE TABLE pagg_tab_p1 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p2 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p3 (LIKE pagg_tab);\n\nINSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10;\nINSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10;\nINSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20;\n\n-- Create foreign partitions\nCREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1');\nCREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2');\nCREATE FOREIGN TABLE fpagg_tab_p3 PARTITION OF pagg_tab FOR VALUES FROM (20) TO (30) SERVER loopback OPTIONS (table_name 'pagg_tab_p3');\n\nANALYZE pagg_tab;\nANALYZE fpagg_tab_p1;\nANALYZE fpagg_tab_p2;\nANALYZE fpagg_tab_p3;\n\n-- When GROUP BY clause matches with PARTITION KEY.\n-- Plan with partitionwise aggregates is disabled\nSET enable_partitionwise_aggregate TO false;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Plan with partitionwise aggregates is enabled\nSET enable_partitionwise_aggregate TO true;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Check with whole-row reference\n-- Should have all the columns in the target list for the given relation\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- When GROUP BY clause does not match with PARTITION KEY.\nEXPLAIN (COSTS OFF)\nSELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700 ORDER BY 1;\n*/\n\n/*\n-- Skip these tests, sqlite fdw does not support nosuper user.\n-- ===================================================================\n-- access rights and superuser\n-- ===================================================================\n\n-- Non-superuser cannot create a FDW without a password in the connstr\nCREATE ROLE regress_nosuper NOSUPERUSER;\n\nGRANT USAGE ON FOREIGN DATA WRAPPER sqlite_fdw TO regress_nosuper;\n\nSET ROLE regress_nosuper;\n\nSHOW is_superuser;\n\n-- This will be OK, we can create the FDW\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_nopw FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- But creation of user mappings for non-superusers should fail\nCREATE USER MAPPING FOR public SERVER sqlite_nopw;\nCREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\nCREATE FOREIGN TABLE ft1_nopw (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_nopw;\n\nALTER FOREIGN TABLE ft1_nopw OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1_nopw ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- If we add a password to the connstr it'll fail, because we don't allow passwords\n-- in connstrs only in user mappings.\n\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw')$$;\n    END;\n$d$;\n\n-- If we add a password for our user mapping instead, we should get a different\n-- error because the password wasn't actually *used* when we run with trust auth.\n--\n-- This won't work with installcheck, but neither will most of the FDW checks.\n\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- Unpriv user cannot make the mapping passwordless\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- But the superuser can\nALTER USER MAPPING FOR regress_nosuper SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\nSET ROLE regress_nosuper;\n\n-- Should finally work now\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- unpriv user also cannot set sslcert / sslkey on the user mapping\n-- first set password_required so we see the right error messages\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (SET password_required 'true');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslcert 'foo.crt');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslkey 'foo.key');\n\n-- We're done with the role named after a specific user and need to check the\n-- changes to the public mapping.\nDROP USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\n-- This will fail again as it'll resolve the user mapping for public, which\n-- lacks password_required=false\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- The user mapping for public is passwordless and lacks the password_required=false\n-- mapping option, but will work because the current user is a superuser.\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- cleanup\nDROP USER MAPPING FOR public SERVER sqlite_nopw;\nDROP OWNED BY regress_nosuper;\nDROP ROLE regress_nosuper;\n\n-- Clean-up\nRESET enable_partitionwise_aggregate;\n*/\n-- Two-phase transactions are not supported.\nBEGIN;\n--Testcase 731:\nSELECT count(*) FROM ft1;\n-- error here\n--Testcase 732:\nPREPARE TRANSACTION 'fdw_tpc';\nROLLBACK;\n\n-- ===================================================================\n-- reestablish new connection\n-- ===================================================================\n-- -- Test case relative with option application_name is not suitable for SQLite FDW.\n-- -- Because this option is in libpq of postgres.\n-- -- Change application_name of remote connection to special one\n-- -- so that we can easily terminate the connection later.\n-- ALTER SERVER sqlite_svr OPTIONS (application_name 'fdw_retry_check');\n-- -- If debug_discard_caches is active, it results in\n-- -- dropping remote connections after every transaction, making it\n-- -- impossible to test termination meaningfully.  So turn that off\n-- -- for this test.\n-- SET debug_discard_caches = 0;\n-- -- Make sure we have a remote connection.\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- -- This query should detect the broken connection when starting new remote\n-- -- transaction, reestablish new connection, and then succeed.\n-- BEGIN;\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- If we detect the broken connection when starting a new remote\n-- -- subtransaction, we should fail instead of establishing a new connection.\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- SAVEPOINT s;\n-- -- The text of the error might vary across platforms, so only show SQLSTATE.\n-- \\set VERBOSITY sqlstate\n-- SELECT 1 FROM ft1 LIMIT 1;    -- should fail\n-- \\set VERBOSITY default\n-- COMMIT;\n\n-- RESET debug_discard_caches;\n\n-- =============================================================================\n-- test connection invalidation cases and sqlite_fdw_get_connections function\n-- =============================================================================\n-- Let's ensure to close all the existing cached connections.\n--Testcase 880:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 881:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- This test case is for closing the connection in sqlitefdw_xact_callback\nBEGIN;\n-- Connection xact depth becomes 1 i.e. the connection is in midst of the xact.\n--Testcase 882:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 883:\nSELECT 1 FROM ft7 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3 should be\n-- output.\n--Testcase 884:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Connections are not closed at the end of the alter and drop statements.\n-- That's because the connections are in midst of this xact,\n-- they are just marked as invalid in sqlitefdw_inval_callback.\n--Testcase 885:\nALTER SERVER sqlite_svr OPTIONS (ADD keep_connections 'off');\n--Testcase 886:\nDROP SERVER sqlite_svr3 CASCADE;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3\n-- should be output as invalid connections. Also the server name for\n-- sqlite_svr3 should be NULL because the server was dropped.\n--Testcase 887:\nSELECT * FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- The invalid connections get closed in sqlitefdw_xact_callback during commit.\nCOMMIT;\n--Testcase 888:\nALTER SERVER sqlite_svr OPTIONS (DROP keep_connections);\n-- All cached connections were closed while committing above xact, so no\n-- records should be output.\n--Testcase 889:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =======================================================================\n-- test sqlite_fdw_disconnect and sqlite_fdw_disconnect_all functions\n-- =======================================================================\nBEGIN;\n-- Ensure to cache loopback connection.\n--Testcase 890:\nSELECT 1 FROM ft1 LIMIT 1;\n-- Ensure to cache loopback2 connection.\n--Testcase 891:\nSELECT 1 FROM ft6 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 892:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Issue a warning and return false as sqlite_svr connection is still in use and\n-- can not be closed.\n--Testcase 893:\nSELECT sqlite_fdw_disconnect('sqlite_svr');\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 894:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Return false as connections are still in use, warnings are issued.\n-- But disable warnings temporarily because the order of them is not stable.\n--Testcase 895:\nSET client_min_messages = 'ERROR';\n--Testcase 896:\nSELECT sqlite_fdw_disconnect_all();\n--Testcase 897:\nRESET client_min_messages;\nCOMMIT;\n-- Ensure that sqlite_svr2 connection is closed.\n--Testcase 898:\nSELECT 1 FROM sqlite_fdw_disconnect('sqlite_svr2');\n--Testcase 899:\nSELECT server_name FROM sqlite_fdw_get_connections() WHERE server_name = 'sqlite_svr2';\n-- Return false as sqlite_svr2 connection is closed already.\n--Testcase 900:\nSELECT sqlite_fdw_disconnect('sqlite_svr2');\n-- Return an error as there is no foreign server with given name.\n--Testcase 901:\nSELECT sqlite_fdw_disconnect('unknownserver');\n-- Let's ensure to close all the existing cached connections.\n--Testcase 902:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 903:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =============================================================================\n-- test case for having multiple cached connections for a foreign server\n-- SQLite FDW does not support User Mapping, so cached connection is identified\n-- by only serverid (not like other FDWs use key including serverid and userid),\n-- and there is only one server for all users, so there is only one cached connection.\n-- In case of using key including serverid and userid, if many users are used,\n-- there will be many cached connections.\n-- =============================================================================\n--Testcase 904:\nCREATE ROLE regress_multi_conn_user1 SUPERUSER;\n--Testcase 905:\nCREATE ROLE regress_multi_conn_user2 SUPERUSER;\n--Testcase 906:\n-- CREATE USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 907:\n-- CREATE USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n\nBEGIN;\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user1\n--Testcase 908:\nSET ROLE regress_multi_conn_user1;\n--Testcase 909:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 910:\nRESET ROLE;\n\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user2\n--Testcase 911:\nSET ROLE regress_multi_conn_user2;\n--Testcase 912:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 913:\nRESET ROLE;\n\n-- Should output one cached connection for sqlite_svr server\n--Testcase 914:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\nCOMMIT;\n-- Let's ensure to close all the existing cached connections.\n--Testcase 915:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 916:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- Clean up\n--Testcase 917:\n-- DROP USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 918:\n-- DROP USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n--Testcase 919:\nDROP ROLE regress_multi_conn_user1;\n--Testcase 920:\nDROP ROLE regress_multi_conn_user2;\n\n-- ===================================================================\n-- Test foreign server level option keep_connections\n-- ===================================================================\n-- By default, the connections associated with foreign server are cached i.e.\n-- keep_connections option is on. Set it to off.\n--Testcase 921:\nALTER SERVER sqlite_svr OPTIONS (keep_connections 'off');\n-- connection to sqlite_svr server is closed at the end of xact\n-- as keep_connections was set to off.\n--Testcase 922:\nSELECT 1 FROM ft1 LIMIT 1;\n-- No cached connections, so no records should be output.\n--Testcase 923:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n--Testcase 924:\nALTER SERVER sqlite_svr OPTIONS (SET keep_connections 'on');\n\n-- ===================================================================\n-- batch insert\n-- ===================================================================\n\nBEGIN;\n\n--Testcase 925:\nCREATE SERVER batch10 FOREIGN DATA WRAPPER sqlite_fdw OPTIONS( batch_size '10' );\n\n--Testcase 926:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 927:\nALTER SERVER batch10 OPTIONS( SET batch_size '20' );\n\n--Testcase 928:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 929:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=20'];\n\n--Testcase 930:\nCREATE FOREIGN TABLE table30 ( x int ) SERVER batch10 OPTIONS ( batch_size '30' );\n\n--Testcase 931:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 932:\nALTER FOREIGN TABLE table30 OPTIONS ( SET batch_size '40');\n\n--Testcase 933:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 934:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=40'];\n\nROLLBACK;\n\n--Testcase 935:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '10' );\n--Testcase 936:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 937:\nINSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 938:\nINSERT INTO ftable SELECT * FROM generate_series(11, 31) i;\n--Testcase 939:\nINSERT INTO ftable VALUES (32);\n--Testcase 940:\nINSERT INTO ftable VALUES (33), (34);\n--Testcase 941:\nSELECT COUNT(*) FROM ftable;\n--Testcase 942:\nDELETE FROM ftable;\n--Testcase 943:\nDROP FOREIGN TABLE ftable;\n\n-- try if large batches exceed max number of bind parameters\n--Testcase 944:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '100000' );\n--Testcase 945:\nINSERT INTO ftable SELECT * FROM generate_series(1, 70000) i;\n--Testcase 946:\nSELECT COUNT(*) FROM ftable;\n--Testcase 947:\nDELETE FROM ftable;\n--Testcase 948:\nDROP FOREIGN TABLE ftable;\n\n-- Disable batch insert\n--Testcase 949:\nCREATE FOREIGN TABLE ftable ( x int ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '1' );\n--Testcase 950:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2);\n--Testcase 951:\nINSERT INTO ftable VALUES (1), (2);\n--Testcase 952:\nSELECT COUNT(*) FROM ftable;\n--Testcase 953:\nDROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n\n-- -- Use partitioning\n-- CREATE TABLE batch_table ( x int ) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p0f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 0)\n\t-- SERVER sqlite_svr\n\t-- OPTIONS (table 'batch_table_p0', batch_size '10');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p1f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table 'batch_table_p1', batch_size '1');\n\n-- CREATE TABLE batch_table_p2\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 3, REMAINDER 2);\n\n-- INSERT INTO \"S 1\".batch_table SELECT * FROM generate_series(1, 66) i;\n-- SELECT COUNT(*) FROM \"S 1\".batch_table;\n\n-- -- Check that enabling batched inserts doesn't interfere with cross-partition\n-- -- updates\n-- CREATE TABLE batch_cp_upd_test (a int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_cp_upd_test1 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test1_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table_name 'batch_cp_upd_test1', batch_size '10');\n-- CREATE TABLE batch_cp_up_test1 PARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (2);\n-- INSERT INTO batch_cp_upd_test VALUES (1), (2);\n\n-- -- The following moves a row from the local partition to the foreign one\n-- UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a;\n-- SELECT tableoid::regclass, * FROM batch_cp_upd_test;\n\n-- -- Clean up\n-- DROP TABLE batch_table, batch_cp_upd_test, batch_table_p0, batch_table_p1 CASCADE;\n\n-- -- Use partitioning\n-- ALTER SERVER loopback OPTIONS (ADD batch_size '10');\n\n-- CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p0f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 0)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p0');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p1f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 1)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p1');\n\n-- INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i;\n-- SELECT COUNT(*) FROM batch_table;\n-- SELECT * FROM batch_table ORDER BY x;\n\n-- ALTER SERVER loopback OPTIONS (DROP batch_size);\n\n-- ===================================================================\n-- test asynchronous execution\n-- ===================================================================\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD async_capable 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');\n\n-- CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);\n-- CREATE TABLE base_tbl1 (a int, b int, c text);\n-- CREATE TABLE base_tbl2 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)\n--   SERVER loopback OPTIONS (table_name 'base_tbl1');\n-- CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl2');\n-- INSERT INTO async_p1 SELECT 1000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- INSERT INTO async_p2 SELECT 2000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- -- simple queries\n-- CREATE TABLE result_tbl (a int, b int, c text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Check case where multiple partitions use the same connection\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- DROP FOREIGN TABLE async_p3;\n-- DROP TABLE base_tbl3;\n\n-- -- Check case where the partitioned table has local/remote partitions\n-- CREATE TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000);\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- partitionwise joins\n-- SET enable_partitionwise_join TO true;\n\n-- CREATE TABLE join_tbl (a1 int, b1 int, c1 text, a2 int, b2 int, c2 text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_partitionwise_join;\n\n-- -- Test rescan of an async Append node with do_exec_prune=false\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_hashjoin;\n\n-- -- Test interaction of async execution with plan-time partition pruning\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 3000;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 2000;\n\n-- -- Test interaction of async execution with run-time partition pruning\n-- SET plan_cache_mode TO force_generic_plan;\n\n-- PREPARE async_pt_query (int, int) AS\n--   INSERT INTO result_tbl SELECT * FROM async_pt WHERE a < $1 AND b === $2;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (3000, 505);\n-- EXECUTE async_pt_query (3000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (2000, 505);\n-- EXECUTE async_pt_query (2000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- RESET plan_cache_mode;\n\n-- CREATE TABLE local_tbl(a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo'), (2505, 505, 'bar');\n-- ANALYZE local_tbl;\n\n-- CREATE INDEX base_tbl1_idx ON base_tbl1 (a);\n-- CREATE INDEX base_tbl2_idx ON base_tbl2 (a);\n-- CREATE INDEX async_p3_idx ON async_p3 (a);\n-- ANALYZE base_tbl1;\n-- ANALYZE base_tbl2;\n-- ANALYZE async_p3;\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (use_remote_estimate 'true');\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (use_remote_estimate 'true');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (DROP use_remote_estimate);\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (DROP use_remote_estimate);\n\n-- DROP TABLE local_tbl;\n-- DROP INDEX base_tbl1_idx;\n-- DROP INDEX base_tbl2_idx;\n-- DROP INDEX async_p3_idx;\n\n-- -- Test that pending requests are processed properly\n-- SET enable_mergejoin TO false;\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n\n-- CREATE TABLE local_tbl (a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo');\n-- ANALYZE local_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n\n-- -- Check with foreign modify\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO remote_tbl VALUES (2505, 505, 'bar');\n\n-- CREATE TABLE base_tbl4 (a int, b int, c text);\n-- CREATE FOREIGN TABLE insert_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl4');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n\n-- SELECT * FROM insert_tbl ORDER BY a;\n\n-- -- Check with direct modify\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- DROP TABLE local_tbl;\n-- DROP FOREIGN TABLE remote_tbl;\n-- DROP FOREIGN TABLE insert_tbl;\n-- DROP TABLE base_tbl3;\n-- DROP TABLE base_tbl4;\n\n-- RESET enable_mergejoin;\n-- RESET enable_hashjoin;\n\n-- -- Test that UPDATE/DELETE with inherited target works with async_capable enabled\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n\n-- -- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously\n-- DELETE FROM async_p1;\n-- DELETE FROM async_p2;\n-- DELETE FROM async_p3;\n\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt;\n\n-- -- Clean up\n-- DROP TABLE async_pt;\n-- DROP TABLE base_tbl1;\n-- DROP TABLE base_tbl2;\n-- DROP TABLE result_tbl;\n-- DROP TABLE join_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP async_capable);\n-- ALTER SERVER loopback2 OPTIONS (DROP async_capable);\n\n-- ===================================================================\n-- test invalid server and foreign table options\n-- ===================================================================\n-- -- Invalid fdw_startup_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_startup_cost '100$%$#$#');\n-- -- Invalid fdw_tuple_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_tuple_cost '100$%$#$#');\n-- -- Invalid fetch_size option\n-- CREATE FOREIGN TABLE inv_fsz (c1 int )\n-- \tSERVER loopback OPTIONS (fetch_size '100$%$#$#');\n-- Invalid batch_size option\n--Testcase 954:\nCREATE FOREIGN TABLE inv_bsz (c1 int )\n\tSERVER sqlite_svr OPTIONS (batch_size '100$%$#$#');\n\n-- Clean-up\n--Testcase 733:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 734:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 735:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 736:\nDROP SERVER sqlite_svr2 CASCADE;\n--Testcase 737:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/extra/update.sql",
    "content": "--\n-- UPDATE syntax tests\n--\n--Testcase 32:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 33:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 34:\nCREATE FOREIGN TABLE update_test (\n    i   INT OPTIONS (key 'true'),\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n) SERVER sqlite_svr;\n\n--Testcase 35:\nCREATE FOREIGN TABLE upsert_test (\n    a   INT OPTIONS (key 'true'),\n    b   TEXT\n) SERVER sqlite_svr;\n\n\n--Testcase 1:\nINSERT INTO update_test VALUES (1, 5, 10, 'foo');\n--Testcase 2:\nINSERT INTO update_test(i, b, a) VALUES (2, 15, 10);\n\n--Testcase 3:\nSELECT * FROM update_test;\n\n--Testcase 4:\nUPDATE update_test SET a = DEFAULT, b = DEFAULT;\n\n--Testcase 5:\nSELECT * FROM update_test;\n\n-- aliases for the UPDATE target table\n--Testcase 6:\nUPDATE update_test AS t SET b = 10 WHERE t.a = 10;\n\n--Testcase 7:\nSELECT * FROM update_test;\n\n--Testcase 8:\nUPDATE update_test t SET b = t.b + 10 WHERE t.a = 10;\n\n--Testcase 9:\nSELECT * FROM update_test;\n\n--\n-- Test VALUES in FROM\n--\n\n--Testcase 10:\nUPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--Testcase 11:\nSELECT * FROM update_test;\n\n-- fail, wrong data type:\n--Testcase 12:\nUPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--\n-- Test multiple-set-clause syntax\n--\n\n--Testcase 13:\nINSERT INTO update_test SELECT i+2,a,b+1,c FROM update_test;\n--Testcase 14:\nSELECT * FROM update_test;\n\n--Testcase 15:\nUPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';\n--Testcase 16:\nSELECT * FROM update_test;\n--Testcase 17:\nUPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;\n--Testcase 18:\nSELECT * FROM update_test;\n-- fail, multi assignment to same column:\n--Testcase 19:\nUPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;\n\n-- uncorrelated sub-select:\n--Testcase 20:\nUPDATE update_test\n  SET (b,a) = (select a,b from update_test where b = 41 and c = 'car')\n  WHERE a = 100 AND b = 20;\n--Testcase 21:\nSELECT * FROM update_test;\n-- correlated sub-select:\n--Testcase 22:\nUPDATE update_test o\n  SET (b,a) = (select a+1,b from update_test i\n               where i.a=o.a and i.b=o.b and i.c is not distinct from o.c);\n--Testcase 23:\nSELECT * FROM update_test;\n-- fail, multiple rows supplied:\n--Testcase 24:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test);\n-- set to null if no rows supplied:\n--Testcase 25:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000)\n  WHERE a = 11;\n--Testcase 26:\nSELECT * FROM update_test;\n-- *-expansion should work in this context:\n--Testcase 27:\nUPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 100)) AS v(i, j)\n  WHERE update_test.a = v.i;\n-- you might expect this to work, but syntactically it's not a RowExpr:\n--Testcase 28:\nUPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 101)) AS v(i, j)\n  WHERE update_test.a = v.i;\n\n-- if an alias for the target table is specified, don't allow references\n-- to the original table name\n--Testcase 29:\nUPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;\n\n-- Make sure that we can update to a TOASTed value.\n--Testcase 30:\nUPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';\n--Testcase 31:\nSELECT a, b, char_length(c) FROM update_test;\n\n-- Check multi-assignment with a Result node to handle a one-time filter.\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 37:\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 38:\nSELECT a, b, char_length(c) FROM update_test;\n\n/* Skip, sqlite fdw does not support ON CONFLICT DO UPDATE\n-- Test ON CONFLICT DO UPDATE\nINSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');\n-- uncorrelated  sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nINSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a)\n  RETURNING *;\n-- correlated sub-select (EXCLUDED.* alias):\nINSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING *;\n\n-- ON CONFLICT using system attributes in RETURNING, testing both the\n-- inserting and updating paths. See bug report at:\n-- https://www.postgresql.org/message-id/73436355-6432-49B1-92ED-1FE4F7E7E100%40finefun.com.au\nINSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = 0 AS xmax_correct;\n-- currently xmax is set after a conflict - that's probably not good,\n-- but it seems worthwhile to have to be explicit if that changes.\nINSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct;\n\n\nDROP FOREIGN TABLE update_test;\nDROP FOREIGN TABLE upsert_test;\n*/\n\n/*Skip, sqlite fdw does not support create partition table\n-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children\n\nCREATE TABLE upsert_test (\n    a   INT PRIMARY KEY,\n    b   TEXT\n) PARTITION BY LIST (a);\n\nCREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1);\nCREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);\nALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2);\n\nINSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo');\n-- uncorrelated sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nWITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test\n  VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *;\n\nDROP TABLE upsert_test;\n\n---------------------------\n-- UPDATE with row movement\n---------------------------\n\n-- When a partitioned table receives an UPDATE to the partitioned key and the\n-- new values no longer meet the partition's bound, the row must be moved to\n-- the correct partition for the new partition key (if one exists). We must\n-- also ensure that updatable views on partitioned tables properly enforce any\n-- WITH CHECK OPTION that is defined. The situation with triggers in this case\n-- also requires thorough testing as partition key updates causing row\n-- movement convert UPDATEs into DELETE+INSERT.\n\nCREATE TABLE range_parted (\n\ta text,\n\tb bigint,\n\tc numeric,\n\td int,\n\te varchar\n) PARTITION BY RANGE (a, b);\n\n-- Create partitions intentionally in descending bound order, so as to test\n-- that update-row-movement works with the leaf partitions not in bound order.\nCREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);\nALTER TABLE range_parted ATTACH PARTITION part_b_20_b_30 FOR VALUES FROM ('b', 20) TO ('b', 30);\nCREATE TABLE part_b_10_b_20 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY RANGE (c);\nCREATE TABLE part_b_1_b_10 PARTITION OF range_parted FOR VALUES FROM ('b', 1) TO ('b', 10);\nALTER TABLE range_parted ATTACH PARTITION part_b_10_b_20 FOR VALUES FROM ('b', 10) TO ('b', 20);\nCREATE TABLE part_a_10_a_20 PARTITION OF range_parted FOR VALUES FROM ('a', 10) TO ('a', 20);\nCREATE TABLE part_a_1_a_10 PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('a', 10);\n\n-- Check that partition-key UPDATE works sanely on a partitioned table that\n-- does not have any child partitions.\nUPDATE part_b_10_b_20 set b = b - 6;\n\n-- Create some more partitions following the above pattern of descending bound\n-- order, but let's make the situation a bit more complex by having the\n-- attribute numbers of the columns vary from their parent partition.\nCREATE TABLE part_c_100_200 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY range (abs(d));\nALTER TABLE part_c_100_200 DROP COLUMN e, DROP COLUMN c, DROP COLUMN a;\nALTER TABLE part_c_100_200 ADD COLUMN c numeric, ADD COLUMN e varchar, ADD COLUMN a text;\nALTER TABLE part_c_100_200 DROP COLUMN b;\nALTER TABLE part_c_100_200 ADD COLUMN b bigint;\nCREATE TABLE part_d_1_15 PARTITION OF part_c_100_200 FOR VALUES FROM (1) TO (15);\nCREATE TABLE part_d_15_20 PARTITION OF part_c_100_200 FOR VALUES FROM (15) TO (20);\n\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_100_200 FOR VALUES FROM (100) TO (200);\n\nCREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_1_100 FOR VALUES FROM (1) TO (100);\n\n\\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'\n\\set show_data 'select tableoid::regclass::text COLLATE \"C\" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'\n:init_range_parted;\n:show_data;\n\n-- The order of subplans should be in bound order\nEXPLAIN (costs off) UPDATE range_parted set c = c - 50 WHERE c > 97;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_c_100_200 set c = c - 20, d = c WHERE c = 105;\n-- fail, no partition key update, so no attempt to move tuple,\n-- but \"a = 'a'\" violates partition constraint enforced by root partition)\nUPDATE part_b_10_b_20 set a = 'a';\n-- ok, partition key update, no constraint violation\nUPDATE range_parted set d = d - 10 WHERE d > 10;\n-- ok, no partition key update, no constraint violation\nUPDATE range_parted set e = d;\n-- No row found\nUPDATE part_c_1_100 set c = c + 20 WHERE c = 98;\n-- ok, row movement\nUPDATE part_b_10_b_20 set c = c + 20 returning c, b, a;\n:show_data;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *;\n-- ok, row movement, with subset of rows moved into different partition.\nUPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c;\n\n:show_data;\n\n-- Common table needed for multiple test scenarios.\nCREATE TABLE mintab(c1 int);\nINSERT into mintab VALUES (120);\n\n-- update partition key using updatable view.\nCREATE VIEW upview AS SELECT * FROM range_parted WHERE (select c > c1 FROM mintab) WITH CHECK OPTION;\n-- ok\nUPDATE upview set c = 199 WHERE b = 4;\n-- fail, check option violation\nUPDATE upview set c = 120 WHERE b = 4;\n-- fail, row movement with check option violation\nUPDATE upview set a = 'b', b = 15, c = 120 WHERE b = 4;\n-- ok, row movement, check option passes\nUPDATE upview set a = 'b', b = 15 WHERE b = 4;\n\n:show_data;\n\n-- cleanup\nDROP VIEW upview;\n\n-- RETURNING having whole-row vars.\n:init_range_parted;\nUPDATE range_parted set c = 95 WHERE a = 'b' and b > 10 and c > 100 returning (range_parted), *;\n:show_data;\n\n\n-- Transition tables with update row movement\n:init_range_parted;\n\nCREATE FUNCTION trans_updatetrigfunc() RETURNS trigger LANGUAGE plpgsql AS\n$$\n  begin\n    raise notice 'trigger = %, old table = %, new table = %',\n                 TG_NAME,\n                 (select string_agg(old_table::text, ', ' ORDER BY a) FROM old_table),\n                 (select string_agg(new_table::text, ', ' ORDER BY a) FROM new_table);\n    return null;\n  end;\n$$;\n\nCREATE TRIGGER trans_updatetrig\n  AFTER UPDATE ON range_parted REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\n\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end ) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\n\n-- Enabling OLD TABLE capture for both DELETE as well as UPDATE stmt triggers\n-- should not cause DELETEd rows to be captured twice. Similar thing for\n-- INSERT triggers and inserted rows.\nCREATE TRIGGER trans_deletetrig\n  AFTER DELETE ON range_parted REFERENCING OLD TABLE AS old_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nCREATE TRIGGER trans_inserttrig\n  AFTER INSERT ON range_parted REFERENCING NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\nDROP TRIGGER trans_deletetrig ON range_parted;\nDROP TRIGGER trans_inserttrig ON range_parted;\n-- Don't drop trans_updatetrig yet. It is required below.\n\n-- Test with transition tuple conversion happening for rows moved into the\n-- new partition. This requires a trigger that references transition table\n-- (we already have trans_updatetrig). For inserted rows, the conversion\n-- is not usually needed, because the original tuple is already compatible with\n-- the desired transition tuple format. But conversion happens when there is a\n-- BR trigger because the trigger can change the inserted row. So install a\n-- BR triggers on those child partitions where the rows will be moved.\nCREATE FUNCTION func_parted_mod_b() RETURNS trigger AS $$\nBEGIN\n   NEW.b = NEW.b + 1;\n   return NEW;\nEND $$ language plpgsql;\nCREATE TRIGGER trig_c1_100 BEFORE UPDATE OR INSERT ON part_c_1_100\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d1_15 BEFORE UPDATE OR INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d15_20 BEFORE UPDATE OR INSERT ON part_d_15_20\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\n:init_range_parted;\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n\n-- Case where per-partition tuple conversion map array is allocated, but the\n-- map is not required for the particular tuple that is routed, thanks to\n-- matching table attributes of the partition and the target table.\n:init_range_parted;\nUPDATE range_parted set b = 15 WHERE b = 1;\n:show_data;\n\nDROP TRIGGER trans_updatetrig ON range_parted;\nDROP TRIGGER trig_c1_100 ON part_c_1_100;\nDROP TRIGGER trig_d1_15 ON part_d_1_15;\nDROP TRIGGER trig_d15_20 ON part_d_15_20;\nDROP FUNCTION func_parted_mod_b();\n\n-- RLS policies with update-row-movement\n-----------------------------------------\n\nALTER TABLE range_parted ENABLE ROW LEVEL SECURITY;\nCREATE USER regress_range_parted_user;\nGRANT ALL ON range_parted, mintab TO regress_range_parted_user;\nCREATE POLICY seeall ON range_parted AS PERMISSIVE FOR SELECT USING (true);\nCREATE POLICY policy_range_parted ON range_parted for UPDATE USING (true) WITH CHECK (c % 2 = 0);\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error while moving row from\n-- part_a_10_a_20 to part_d_1_15, because we are setting 'c' to an odd number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n-- Create a trigger on part_d_1_15\nCREATE FUNCTION func_d_1_15() RETURNS trigger AS $$\nBEGIN\n   NEW.c = NEW.c + 1; -- Make even numbers odd, or vice versa\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_d_1_15 BEFORE INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_d_1_15();\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n\n-- Here, RLS checks should succeed while moving row from part_a_10_a_20 to\n-- part_d_1_15. Even though the UPDATE is setting 'c' to an odd number, the\n-- trigger at the destination partition again makes it an even number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error. Even though the UPDATE is setting\n-- 'c' to an even number, the trigger at the destination partition again makes\n-- it an odd number.\nUPDATE range_parted set a = 'b', c = 150 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP TRIGGER trig_d_1_15 ON part_d_1_15;\nDROP FUNCTION func_d_1_15();\n\n-- Policy expression contains SubPlan\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_subplan on range_parted\n    AS RESTRICTIVE for UPDATE USING (true)\n    WITH CHECK ((SELECT range_parted.c <= c1 FROM mintab));\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, mintab has row with c1 = 120\nUPDATE range_parted set a = 'b', c = 122 WHERE a = 'a' and c = 200;\n-- ok\nUPDATE range_parted set a = 'b', c = 120 WHERE a = 'a' and c = 200;\n\n-- RLS policy expression contains whole row.\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_wholerow on range_parted AS RESTRICTIVE for UPDATE USING (true)\n   WITH CHECK (range_parted = row('b', 10, 112, 1, NULL)::range_parted);\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- ok, should pass the RLS check\nUPDATE range_parted set a = 'b', c = 112 WHERE a = 'a' and c = 200;\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, the whole row RLS check should fail\nUPDATE range_parted set a = 'b', c = 116 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP POLICY policy_range_parted ON range_parted;\nDROP POLICY policy_range_parted_subplan ON range_parted;\nDROP POLICY policy_range_parted_wholerow ON range_parted;\nREVOKE ALL ON range_parted, mintab FROM regress_range_parted_user;\nDROP USER regress_range_parted_user;\nDROP TABLE mintab;\n\n\n-- statement triggers with update row movement\n---------------------------------------------------\n\n:init_range_parted;\n\nCREATE FUNCTION trigfunc() returns trigger language plpgsql as\n$$\n  begin\n    raise notice 'trigger = % fired on table % during %',\n                 TG_NAME, TG_TABLE_NAME, TG_OP;\n    return null;\n  end;\n$$;\n-- Triggers on root partition\nCREATE TRIGGER parent_delete_trig\n  AFTER DELETE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_update_trig\n  AFTER UPDATE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_insert_trig\n  AFTER INSERT ON range_parted for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_c_1_100\nCREATE TRIGGER c1_delete_trig\n  AFTER DELETE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_update_trig\n  AFTER UPDATE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_insert_trig\n  AFTER INSERT ON part_c_1_100 for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_d_1_15\nCREATE TRIGGER d1_delete_trig\n  AFTER DELETE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_update_trig\n  AFTER UPDATE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_insert_trig\n  AFTER INSERT ON part_d_1_15 for each statement execute procedure trigfunc();\n-- Triggers on leaf partition part_d_15_20\nCREATE TRIGGER d15_delete_trig\n  AFTER DELETE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_update_trig\n  AFTER UPDATE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_insert_trig\n  AFTER INSERT ON part_d_15_20 for each statement execute procedure trigfunc();\n\n-- Move all rows from part_c_100_200 to part_c_1_100. None of the delete or\n-- insert statement triggers should be fired.\nUPDATE range_parted set c = c - 50 WHERE c > 97;\n:show_data;\n\nDROP TRIGGER parent_delete_trig ON range_parted;\nDROP TRIGGER parent_update_trig ON range_parted;\nDROP TRIGGER parent_insert_trig ON range_parted;\nDROP TRIGGER c1_delete_trig ON part_c_1_100;\nDROP TRIGGER c1_update_trig ON part_c_1_100;\nDROP TRIGGER c1_insert_trig ON part_c_1_100;\nDROP TRIGGER d1_delete_trig ON part_d_1_15;\nDROP TRIGGER d1_update_trig ON part_d_1_15;\nDROP TRIGGER d1_insert_trig ON part_d_1_15;\nDROP TRIGGER d15_delete_trig ON part_d_15_20;\nDROP TRIGGER d15_update_trig ON part_d_15_20;\nDROP TRIGGER d15_insert_trig ON part_d_15_20;\n\n\n-- Creating default partition for range\n:init_range_parted;\ncreate table part_def partition of range_parted default;\n\\d+ part_def\ninsert into range_parted values ('c', 9);\n-- ok\nupdate part_def set a = 'd' where a = 'c';\n-- fail\nupdate part_def set a = 'a' where a = 'd';\n\n:show_data;\n\n-- Update row movement from non-default to default partition.\n-- fail, default partition is not under part_a_10_a_20;\nUPDATE part_a_10_a_20 set a = 'ad' WHERE a = 'a';\n-- ok\nUPDATE range_parted set a = 'ad' WHERE a = 'a';\nUPDATE range_parted set a = 'bd' WHERE a = 'b';\n:show_data;\n-- Update row movement from default to non-default partitions.\n-- ok\nUPDATE range_parted set a = 'a' WHERE a = 'ad';\nUPDATE range_parted set a = 'b' WHERE a = 'bd';\n:show_data;\n\n-- Cleanup: range_parted no longer needed.\nDROP TABLE range_parted;\n\nCREATE TABLE list_parted (\n\ta text,\n\tb int\n) PARTITION BY list (a);\nCREATE TABLE list_part1  PARTITION OF list_parted for VALUES in ('a', 'b');\nCREATE TABLE list_default PARTITION OF list_parted default;\nINSERT into list_part1 VALUES ('a', 1);\nINSERT into list_default VALUES ('d', 10);\n\n-- fail\nUPDATE list_default set a = 'a' WHERE a = 'd';\n-- ok\nUPDATE list_default set a = 'x' WHERE a = 'd';\n\nDROP TABLE list_parted;\n\n-- Test retrieval of system columns with non-consistent partition row types.\n-- This is only partially supported, as seen in the results.\n\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table utr1 (a int check (a in (1)), q text, b text);\ncreate table utr2 (a int check (a in (2)), b text);\nalter table utr1 drop column q;\nalter table utrtest attach partition utr1 for values in (1);\nalter table utrtest attach partition utr2 for values in (2);\n\ninsert into utrtest values (1, 'foo')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass;\n\nupdate utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass;\n\ndelete from utrtest\n  returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok;\n\ndrop table utrtest;\n\n--------------\n-- Some more update-partition-key test scenarios below. This time use list\n-- partitions.\n--------------\n\n-- Setup for list partitions\nCREATE TABLE list_parted (a numeric, b int, c int8) PARTITION BY list (a);\nCREATE TABLE sub_parted PARTITION OF list_parted for VALUES in (1) PARTITION BY list (b);\n\nCREATE TABLE sub_part1(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part1 for VALUES in (1);\nCREATE TABLE sub_part2(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part2 for VALUES in (2);\n\nCREATE TABLE list_part1(a numeric, b int, c int8);\nALTER TABLE list_parted ATTACH PARTITION list_part1 for VALUES in (2,3);\n\nINSERT into list_parted VALUES (2,5,50);\nINSERT into list_parted VALUES (3,6,60);\nINSERT into sub_parted VALUES (1,1,60);\nINSERT into sub_parted VALUES (1,2,10);\n\n-- Test partition constraint violation when intermediate ancestor is used and\n-- constraint is inherited from upper root.\nUPDATE sub_parted set a = 2 WHERE c = 10;\n\n-- Test update-partition-key, where the unpruned partitions do not have their\n-- partition keys updated.\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\nUPDATE list_parted set b = c + a WHERE a = 2;\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\n\n\n-- Test the case where BR UPDATE triggers change the partition key.\nCREATE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   NEW.b = 2; -- This is changing partition key column.\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER parted_mod_b before update on sub_part1\n   for each row execute procedure func_parted_mod_b();\n\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\n-- This should do the tuple routing even though there is no explicit\n-- partition-key update, because there is a trigger on sub_part1.\nUPDATE list_parted set c = 70 WHERE b  = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\nDROP TRIGGER parted_mod_b ON sub_part1;\n\n-- If BR DELETE trigger prevented DELETE from happening, we should also skip\n-- the INSERT if that delete is part of UPDATE=>DELETE+INSERT.\nCREATE OR REPLACE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   raise notice 'Trigger: Got OLD row %, but returning NULL', OLD;\n   return NULL;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_skip_delete before delete on sub_part2\n   for each row execute procedure func_parted_mod_b();\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n-- Drop the trigger. Now the row should be moved.\nDROP TRIGGER trig_skip_delete ON sub_part2;\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP FUNCTION func_parted_mod_b();\n\n-- UPDATE partition-key with FROM clause. If join produces multiple output\n-- rows for the same row to be modified, we should tuple-route the row only\n-- once. There should not be any rows inserted.\nCREATE TABLE non_parted (id int);\nINSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);\nUPDATE list_parted t1 set a = 2 FROM non_parted t2 WHERE t1.a = t2.id and a = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP TABLE non_parted;\n\n-- Cleanup: list_parted no longer needed.\nDROP TABLE list_parted;\n\n-- create custom operator class and hash function, for the same reason\n-- explained in alter_table.sql\ncreate or replace function dummy_hashint4(a int4, seed int8) returns int8 as\n$$ begin return (a + seed); end; $$ language 'plpgsql' immutable;\ncreate operator class custom_opclass for type int4 using hash as\noperator 1 = , function 2 dummy_hashint4(int4, int8);\n\ncreate table hash_parted (\n\ta int,\n\tb int\n) partition by hash (a custom_opclass, b custom_opclass);\ncreate table hpart1 partition of hash_parted for values with (modulus 2, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 8, remainder 0);\ncreate table hpart4 partition of hash_parted for values with (modulus 8, remainder 4);\ninsert into hpart1 values (1, 1);\ninsert into hpart2 values (2, 5);\ninsert into hpart4 values (3, 4);\n\n-- fail\nupdate hpart1 set a = 3, b=4 where a = 1;\n-- ok, row movement\nupdate hash_parted set b = b - 1 where b = 1;\n-- ok\nupdate hash_parted set b = b + 8 where b = 1;\n\n-- cleanup\ndrop table hash_parted;\ndrop operator class custom_opclass using hash;\ndrop function dummy_hashint4(a int4, seed int8);\n*/\n\n--drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 39:\nDROP SERVER sqlite_svr;\n--Testcase 40:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/libsqlite.sql",
    "content": "-- Test for SQLite library code source and defaults\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nSELECT sqlite_fdw_sqlite_version();\n--Testcase 3:\nSELECT length(sqlite_fdw_sqlite_code_source());\n--Testcase 4:\nSELECT sqlite_fdw_sqlite_code_source();\n\n--Testcase 7:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/selectfunc.sql",
    "content": "SET datestyle=ISO;\nSET timezone='Japan';\n\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER server1 FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/selectfunc.db');\n--CREATE USER MAPPING FOR CURRENT_USER SERVER server1 OPTIONS(user 'user', password 'pass');\n\n--IMPORT FOREIGN SCHEMA public FROM SERVER server1 INTO public OPTIONS(import_time_text 'false');\n--Testcase 3:\nCREATE FOREIGN TABLE s3(id text OPTIONS (key 'true'), time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text) SERVER server1;\n\n-- s3 (value1 as float8, value2 as bigint)\n--Testcase 4:\n\\d s3;\n--Testcase 5:\nSELECT * FROM s3;\n\n-- select float8() (not pushdown, remove float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select float8() (not pushdown, remove float8, result)\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select sqrt (builtin function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (buitin function, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function,, not pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, not pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select abs (builtin function, explain)\n--Testcase 6:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (buitin function, result)\n--Testcase 7:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (builtin function, not pushdown constraints, explain)\n--Testcase 8:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, not pushdown constraints, result)\n--Testcase 9:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, pushdown constraints, explain)\n--Testcase 10:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select abs (builtin function, pushdown constraints, result)\n--Testcase 11:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select log (builtin function, need to swap arguments, numeric cast, explain)\n-- log_<base>(v) : postgresql (base, v), sqlite (v, base)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (builtin function, need to swap arguments, numeric cast, result)\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, result)\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, result)\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, result)\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log2 (stub function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select log2 (stub function, result)\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select spread (stub agg function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, result)\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, raise exception if not expected type)\n-- SELECT spread(value1::numeric),spread(value2::numeric),spread(value3::numeric),spread(value4::numeric) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs as nest function with agg (pushdown, explain)\n--Testcase 12:\nEXPLAIN VERBOSE\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest function with agg (pushdown, result)\n--Testcase 13:\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest with log2 (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs as nest with log2 (pushdown, result)\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs with non pushdown func and explicit constant (explain)\n--Testcase 14:\nEXPLAIN VERBOSE\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select abs with non pushdown func and explicit constant (result)\n--Testcase 15:\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, result)\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant and tag (error, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1, tag1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select spread (stub agg function and group by influx_time() and tag) (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by influx_time() and tag) (result)\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by tag only) (result)\n-- SELECT tag1,spread(\"value1\") FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY tag1;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function and other aggs) (result)\n-- SELECT sum(\"value1\"),spread(\"value1\"),count(\"value1\") FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs with order by (explain)\n--Testcase 16:\nEXPLAIN VERBOSE\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by (result)\n--Testcase 17:\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by index (result)\n--Testcase 18:\nSELECT value1, abs(1-value1) FROM s3 order by 2,1;\n\n-- select abs with order by index (result)\n--Testcase 19:\nSELECT value1, abs(1-value1) FROM s3 order by 1,2;\n\n-- select abs and as\n--Testcase 20:\nSELECT abs(value3) as abs1 FROM s3;\n\n-- select spread over join query (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread over join query (result, stub call error)\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain, cannot pushdown, stub call error)\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select abs with arithmetic and tag in the middle (explain)\n--Testcase 21:\nEXPLAIN VERBOSE\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select abs with arithmetic and tag in the middle (result)\n--Testcase 22:\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select with order by limit (explain)\n--Testcase 23:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select with order by limit (explain)\n--Testcase 24:\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select mixing with non pushdown func (all not pushdown, explain)\n--Testcase 25:\nEXPLAIN VERBOSE\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- select mixing with non pushdown func (result)\n--Testcase 26:\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- sqlite data prep\n\n-- sqlite pushdown supported functions (explain)\n--Testcase 27:\nEXPLAIN VERBOSE\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown supported functions (result)\n--Testcase 28:\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown nest functions (explain)\n--Testcase 32:\nEXPLAIN VERBOSE\nSELECT round(abs(value2), 0) FROM s3;\n\n-- sqlite pushdown nest functions (result)\n--Testcase 33:\nSELECT round(abs(value2), 0) FROM s3;\n\n-- select mod (builtin function, explain)\n--Testcase 34:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, result)\n--Testcase 35:\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, not pushdown constraints, explain)\n--Testcase 36:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, not pushdown constraints, result)\n--Testcase 37:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, pushdown constraints, explain)\n--Testcase 38:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, pushdown constraints, result)\n--Testcase 39:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 40:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 41:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 42:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 43:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod as nest function with agg (pushdown, explain)\n--Testcase 44:\nEXPLAIN VERBOSE\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest function with agg (pushdown, result)\n--Testcase 45:\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, explain)\n--Testcase 46:\nEXPLAIN VERBOSE\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, result)\n--Testcase 47:\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod with non pushdown func and explicit constant (explain)\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with non pushdown func and explicit constant (result)\n--Testcase 49:\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with order by (explain)\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by (result)\n--Testcase 51:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by index (result)\n--Testcase 52:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 2,1;\n\n-- select mod with order by index (result)\n--Testcase 53:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 1,2;\n\n-- select mod with group by (explain)\n--Testcase 54:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by (result)\n--Testcase 55:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by index (result)\n--Testcase 56:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 2,1;\n\n-- select mod with group by index (result)\n--Testcase 57:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2;\n\n-- select mod with group by having (explain)\n--Testcase 58:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by having (result)\n--Testcase 59:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by index having (result)\n--Testcase 60:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2 HAVING value1 > 1;\n\n-- select mod and as\n--Testcase 61:\nSELECT value1, mod(value2, 2) as mod1 FROM s3;\n\n--Testcase 29:\nDROP FOREIGN TABLE s3;\n--Testcase 30:\nDROP SERVER server1;\n--Testcase 31:\nDROP EXTENSION sqlite_fdw;\n"
  },
  {
    "path": "sql/14.12/sqlite_fdw.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 129:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 130:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 131:\nCREATE FOREIGN TABLE department(department_id int OPTIONS (key 'true'), department_name text) SERVER sqlite_svr; \n--Testcase 132:\nCREATE FOREIGN TABLE employee(emp_id int OPTIONS (key 'true'), emp_name text, emp_dept_id int) SERVER sqlite_svr;\n--Testcase 133:\nCREATE FOREIGN TABLE empdata(emp_id int OPTIONS (key 'true'), emp_dat bytea) SERVER sqlite_svr;\n--Testcase 134:\nCREATE FOREIGN TABLE numbers(a int OPTIONS (key 'true'), b varchar(255)) SERVER sqlite_svr;\n--Testcase 135:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n--Testcase 136:\nCREATE FOREIGN TABLE noprimary(a int, b text) SERVER sqlite_svr;\n\n-- readonly/readwrite test github pull 59\nCREATE FOREIGN TABLE RO_RW_test(i int OPTIONS (key 'true'), a text, b float, c int) SERVER sqlite_svr;\n\n--Testcase 1:\nSELECT * FROM department LIMIT 10;\n--Testcase 2:\nSELECT * FROM employee LIMIT 10;\n--Testcase 3:\nSELECT * FROM empdata LIMIT 10;\n\n--Testcase 4:\nINSERT INTO department VALUES(generate_series(1,100), 'dept - ' || generate_series(1,100));\n--Testcase 5:\nINSERT INTO employee VALUES(generate_series(1,100), 'emp - ' || generate_series(1,100), generate_series(1,100));\n--Testcase 6:\nINSERT INTO empdata  VALUES(1, decode ('01234567', 'hex'));\n\n--Testcase 7:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 8:\nINSERT INTO numbers VALUES(2, 'Two');\n--Testcase 9:\nINSERT INTO numbers VALUES(3, 'Three');\n--Testcase 10:\nINSERT INTO numbers VALUES(4, 'Four');\n--Testcase 11:\nINSERT INTO numbers VALUES(5, 'Five');\n--Testcase 12:\nINSERT INTO numbers VALUES(6, 'Six');\n--Testcase 13:\nINSERT INTO numbers VALUES(7, 'Seven');\n--Testcase 14:\nINSERT INTO numbers VALUES(8, 'Eight');\n--Testcase 15:\nINSERT INTO numbers VALUES(9, 'Nine');\n\n--Testcase 16:\nSELECT count(*) FROM department;\n--Testcase 17:\nSELECT count(*) FROM employee;\n--Testcase 18:\nSELECT count(*) FROM empdata;\n\n--Testcase 19:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n\n--Testcase 20:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) LIMIT 10;\n\n--Testcase 21:\nSELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n--Testcase 22:\nSELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) ORDER BY d.department_id LIMIT 10;\n--Testcase 23:\nSELECT * FROM empdata;\n\n--Testcase 24:\nDELETE FROM employee WHERE emp_id = 10;\n\n--Testcase 25:\nSELECT COUNT(*) FROM department LIMIT 10;\n--Testcase 26:\nSELECT COUNT(*) FROM employee WHERE emp_id = 10;\n\n--Testcase 27:\nUPDATE employee SET emp_name = 'UPDATEd emp' WHERE emp_id = 20;\n--Testcase 28:\nSELECT emp_id, emp_name FROM employee WHERE emp_name like 'UPDATEd emp';\n\n--Testcase 29:\nUPDATE empdata SET emp_dat = decode ('0123', 'hex');\n--Testcase 30:\nSELECT * FROM empdata;\n\n--Testcase 31:\nSELECT * FROM employee LIMIT 10;\n--Testcase 32:\nSELECT * FROM employee WHERE emp_id IN (1);\n--Testcase 33:\nSELECT * FROM employee WHERE emp_id IN (1,3,4,5);\n--Testcase 34:\nSELECT * FROM employee WHERE emp_id IN (10000,1000);\n\n--Testcase 35:\nSELECT * FROM employee WHERE emp_id NOT IN (1) LIMIT 5;\n--Testcase 36:\nSELECT * FROM employee WHERE emp_id NOT IN (1,3,4,5) LIMIT 5;\n--Testcase 37:\nSELECT * FROM employee WHERE emp_id NOT IN (10000,1000) LIMIT 5;\n\n--Testcase 38:\nSELECT * FROM employee WHERE emp_id NOT IN (SELECT emp_id FROM employee WHERE emp_id IN (1,10));\n--Testcase 39:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 1', 'emp - 2') LIMIT 5;\n--Testcase 40:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 10') LIMIT 5;\n\n--Testcase 41:\nSELECT * FROM numbers WHERE (CASE WHEN a % 2 = 0 THEN 1 WHEN a % 5 = 0 THEN 1 ELSE 0 END) = 1;\n--Testcase 42:\nSELECT * FROM numbers WHERE (CASE b WHEN 'Two' THEN 1 WHEN 'Six' THEN 1 ELSE 0 END) = 1;\n\n--Testcase 152:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE (round(abs(a)) = 1);\n--Testcase 153:\nSELECT * FROM numbers WHERE (round(abs(a)) = 1);\n\n--Testcase 137:\ncreate or replace function test_param_WHERE() returns void as $$\nDECLARE\n  n varchar;\nBEGIN\n  FOR x IN 1..9 LOOP\n--Testcase 138:\n    SELECT b INTO n from numbers WHERE a=x;\n    raise notice 'Found number %', n;\n  end loop;\n  return;\nEND\n$$ LANGUAGE plpgsql;\n--Testcase 43:\nSELECT test_param_WHERE();\n\n--Testcase 44:\nSELECT b from numbers WHERE a=1;\n--Testcase 45:\nEXPLAIN(COSTS OFF) SELECT b from numbers WHERE a=1;\n\n--Testcase 46:\nSELECT a FROM numbers WHERE b = (SELECT NULL::text);\n\n\n--Testcase 47:\nPREPARE stmt1 (int, int) AS\n  SELECT * FROM numbers WHERE a=$1 or a=$2;\n--Testcase 48:\nEXECUTE stmt1(1,2);\n--Testcase 49:\nEXECUTE stmt1(2,2); \n--Testcase 50:\nEXECUTE stmt1(3,2); \n--Testcase 51:\nEXECUTE stmt1(4,2);\n-- generic plan\n--Testcase 52:\nEXECUTE stmt1(5,2); \n--Testcase 53:\nEXECUTE stmt1(6,2); \n--Testcase 54:\nEXECUTE stmt1(7,2); \n\n--Testcase 55:\nDELETE FROM employee;\n--Testcase 56:\nDELETE FROM department;\n--Testcase 57:\nDELETE FROM empdata;\n--Testcase 58:\nDELETE FROM numbers;\n\nBEGIN;\n--Testcase 59:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 60:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n\n--Testcase 61:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 62:\nINSERT INTO numbers VALUES(3, 'Three');\nROLLBACK;\n--Testcase 63:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 64:\nINSERT INTO numbers VALUES(4, 'Four');\nSAVEPOINT my_savepoint;\n--Testcase 65:\nINSERT INTO numbers VALUES(5, 'Five');\nROLLBACK TO SAVEPOINT my_savepoint;\n--Testcase 66:\nINSERT INTO numbers VALUES(6, 'Six');\nCOMMIT;\n\n--Testcase 67:\nSELECT * from numbers;\n\n-- duplicate key\n--Testcase 68:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 69:\nDELETE from numbers;\n\nBEGIN;\n--Testcase 70:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 71:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n-- violate unique constraint\n--Testcase 72:\nUPDATE numbers SET b='Two' WHERE a = 1; \n--Testcase 73:\nSELECT * from numbers;\n\n-- push down\n--Testcase 74:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n-- (1,2,3) is pushed down\n--Testcase 75:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (1,2,3) AND (1,2) < (a,5);\n\n--Testcase 76:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (a+2*a,5);\n\n--Testcase 77:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n--Testcase 78:\nSELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n--Testcase 79:\nSELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n-- ANY with ARRAY expression\n--Testcase 154:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n--Testcase 155:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n\n--Testcase 156:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n--Testcase 157:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n\n--Testcase 158:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n--Testcase 159:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n\n--Testcase 160:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n--Testcase 161:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n\n--Testcase 162:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n--Testcase 163:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n\n--Testcase 164:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n--Testcase 165:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n\n-- ANY with ARRAY const\n--Testcase 166:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n--Testcase 167:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n\n--Testcase 168:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n--Testcase 169:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n\n--Testcase 170:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n--Testcase 171:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n\n--Testcase 172:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n--Testcase 173:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n\n--Testcase 174:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n--Testcase 175:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n\n--Testcase 176:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n--Testcase 177:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n\n--Testcase 210:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n--Testcase 211:\nSELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n\n--Testcase 212:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n--Testcase 213:\nSELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n\n-- ALL with ARRAY expression\n--Testcase 178:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n--Testcase 179:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n\n--Testcase 180:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n--Testcase 181:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n\n--Testcase 182:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n--Testcase 183:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n\n--Testcase 184:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n--Testcase 185:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n\n--Testcase 186:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n--Testcase 187:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n\n--Testcase 188:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n--Testcase 189:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n\n-- ALL with ARRAY const\n--Testcase 190:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n--Testcase 191:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n\n--Testcase 192:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n--Testcase 193:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n\n--Testcase 194:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n--Testcase 195:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n\n--Testcase 196:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n--Testcase 197:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n\n--Testcase 198:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n--Testcase 199:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n\n--Testcase 200:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n--Testcase 201:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n\n-- ANY/ALL with TEXT ARRAY const\n--Testcase 202:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n--Testcase 203:\nSELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n\n--Testcase 204:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n--Testcase 205:\nSELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n\n--Testcase 206:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n--Testcase 207:\nSELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n\n--Testcase 208:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n--Testcase 209:\nSELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n\n--Testcase 80:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 81:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 82:\nUPDATE multiprimary SET b = 10 WHERE c = 3;\n--Testcase 83:\nSELECT * from multiprimary;\n--Testcase 84:\nUPDATE multiprimary SET a = 10 WHERE a = 1;\n--Testcase 85:\nSELECT * from multiprimary;\n--Testcase 86:\nUPDATE multiprimary SET a = 100, b=200, c=300 WHERE a=10 AND b=10;\n--Testcase 87:\nSELECT * from multiprimary;\n--Testcase 88:\nUPDATE multiprimary SET a = 1234;\n--Testcase 89:\nSELECT * from multiprimary;\n--Testcase 90:\nUPDATE multiprimary SET a = a+1, b=b+1 WHERE b=200 AND c=300;\n\n--Testcase 91:\nSELECT * from multiprimary;\n--Testcase 92:\nDELETE from multiprimary WHERE a = 1235;\n--Testcase 93:\nSELECT * from multiprimary;\n--Testcase 94:\nDELETE from multiprimary WHERE b = 2;\n--Testcase 95:\nSELECT * from multiprimary;\n\n--Testcase 96:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 97:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 98:\nINSERT INTO multiprimary VALUES(1,10,20);\n--Testcase 99:\nINSERT INTO multiprimary VALUES(2,20,40);\n\n\n\n--Testcase 100:\nSELECT count(distinct a) from multiprimary;\n--Testcase 101:\nSELECT sum(b),max(b), min(b) from multiprimary;\n--Testcase 102:\nSELECT sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n--Testcase 103:\nSELECT sum(a) from multiprimary group by b having sum(a) > 0 order by sum(a);\n--Testcase 104:\nSELECT sum(a) A from multiprimary group by b having avg(abs(a)) > 0 AND sum(a) > 0 order by A;\n--Testcase 105:\nSELECT count(nullif(a, 1)) FROM multiprimary;\n--Testcase 106:\nSELECT a,a FROM multiprimary group by 1,2;\n--Testcase 107:\nSELECT * from multiprimary, numbers WHERE multiprimary.a=numbers.a;\n\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n--Testcase 109:\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n\n--Testcase 110:\nINSERT INTO numbers VALUES(4, 'Four');\n\n-- All where clauses are pushed down\n--Testcase 111:\nSELECT * FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n--Testcase 112:\nEXPLAIN (verbose, costs off)  SELECT b, length(b) FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n\n-- Only \"length(b) = 4\" are pushed down\n--Testcase 113:\nSELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n--Testcase 114:\nEXPLAIN (verbose, costs off) SELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n\n--Testcase 115:\nINSERT INTO multiprimary (b,c) VALUES (99, 100);\n--Testcase 116:\nSELECT c FROM multiprimary WHERE COALESCE(a,b,c) = 99;\n\n\n--Testcase 139:\nCREATE FOREIGN TABLE multiprimary2(a int, b int, c int OPTIONS(column_name 'b')) SERVER sqlite_svr OPTIONS (table 'multiprimary');\n--Testcase 117:\nSELECT * FROM multiprimary2;\n--Testcase 214:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN a OPTIONS(ADD column_name 'b');\n--Testcase 118:\nSELECT * FROM multiprimary2;\n--Testcase 215:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN b OPTIONS (column_name 'nosuch column');\n--Testcase 119:\nSELECT * FROM multiprimary2;\n--Testcase 140:\nEXPLAIN (VERBOSE) SELECT * FROM multiprimary2;\n--Testcase 120:\nSELECT a FROM multiprimary2 WHERE b = 1;\n\n\n--Testcase 141:\nCREATE FOREIGN TABLE columntest(a int OPTIONS(column_name 'a a', key 'true'), \"b b\" int  OPTIONS(key 'true'), c int OPTIONS(column_name 'c c')) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO columntest VALUES(1,2,3);\n--Testcase 122:\nUPDATE columntest SET c=10 WHERE a = 1;\n--Testcase 123:\nSELECT * FROM columntest;\n--Testcase 124:\nUPDATE columntest SET a=100 WHERE c = 10;\n--Testcase 125:\nSELECT * FROM columntest;\n--Testcase 126:\nINSERT INTO noprimary VALUES(1,'2');\n--Testcase 127:\nINSERT INTO noprimary SELECT * FROM noprimary;\n--Testcase 128:\nSELECT * FROM noprimary;\n\n--get version\n--Testcase 153:\n\\df sqlite*\n--Testcase 154:\nSELECT * FROM public.sqlite_fdw_version();\n--Testcase 155:\nSELECT sqlite_fdw_version();\n\n-- issue #44 github\n--Testcase 156:\nCREATE FOREIGN TABLE fts_table (name text,  description text) SERVER sqlite_svr;\n\n--Testcase 157:\nINSERT INTO fts_table VALUES ('this is name', 'this is description');\n\n--Testcase 158:\nSELECT * FROM fts_table; -- should work\n\n--Testcase 159:\nALTER TABLE fts_table ALTER COLUMN name TYPE int;\n\n--Testcase 160:\nSELECT * FROM fts_table; -- should fail\n\n-- issue #62 github\n--Testcase 236:\nINSERT INTO noprimary VALUES (4, 'Test''s');\n--Testcase 237:\nINSERT INTO noprimary VALUES (5, 'Test');\n\n--Testcase 238:\nSELECT * FROM noprimary;\n--Testcase 239:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b = 'Test''s';\n--Testcase 240:\nSELECT * FROM noprimary where b = 'Test''s';\n\n--Testcase 241:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n--Testcase 242:\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n\n-- INSERT/UPDATE whole row with generated column\n--Testcase 216:\nCREATE FOREIGN TABLE grem1_1 (\n  a int generated always as (0) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_1');\n\n--Testcase 217:\nINSERT INTO grem1_1 DEFAULT VALUES;\n--Testcase 218:\nSELECT * FROM grem1_1;\n\n--Testcase 219:\nCREATE FOREIGN TABLE grem1_2 (\n  a int generated always as (0) stored,\n  b int generated always as (1) stored,\n  c int generated always as (2) stored,\n  d int generated always as (3) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_2');\n--Testcase 220:\nINSERT INTO grem1_2 DEFAULT VALUES;\n--Testcase 221:\nSELECT * FROM grem1_2;\n\n-- Executable test case for pushdown CASE expressions (results)\n--Testcase 224:\nCREATE FOREIGN TABLE case_exp(c1 int OPTIONS (key 'true'), c3 text, c6 varchar(10)) SERVER sqlite_svr;\n\n--Testcase 225:\nINSERT INTO case_exp\n  SELECT id,\n         to_char(id, 'FM00000'),\n         id % 10\n  FROM generate_series(1, 10) id;\n\n--Testcase 226:\nSELECT * FROM case_exp;\n\n-- CASE arg WHEN\n--Testcase 227:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n--Testcase 228:\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 229:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 230:\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n--Testcase 232:\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 233:\nSELECT * FROM case_exp WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n--Testcase 234:\nDELETE FROM case_exp;\n\n-- readonly/readwrite tests\n-- Full combinations\n-- force_RO default SERVER default TABLE default\n-- force_RO default SERVER true    TABLE default\n-- force_RO default SERVER false   TABLE default\n-- force_RO default SERVER default TABLE true\n-- force_RO default SERVER default TABLE false\n-- force_RO default SERVER true    TABLE true\n-- force_RO default SERVER false   TABLE true\n-- force_RO default SERVER false   TABLE false\n-- force_RO default SERVER true    TABLE false\n-- force_RO false   SERVER default TABLE default\n-- force_RO false   SERVER true    TABLE default\n-- force_RO false   SERVER false   TABLE default\n-- force_RO false   SERVER default TABLE true\n-- force_RO false   SERVER default TABLE false\n-- force_RO false   SERVER true    TABLE true\n-- force_RO false   SERVER false   TABLE true\n-- force_RO false   SERVER false   TABLE false\n-- force_RO false   SERVER true    TABLE false\n-- force_RO true    SERVER default TABLE default\n-- force_RO true    SERVER true    TABLE default\n-- force_RO true    SERVER false   TABLE default\n-- force_RO true    SERVER default TABLE true\n-- force_RO true    SERVER default TABLE false\n-- force_RO true    SERVER true    TABLE true\n-- force_RO true    SERVER false   TABLE true\n-- force_RO true    SERVER false   TABLE false\n-- force_RO true    SERVER true    TABLE false\n\n-- force_RO default SERVER default TABLE default\n--Testcase 235:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 236:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 237:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO default SERVER true TABLE default\n--Testcase 238:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 239:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 240:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 241:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 242:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n\n-- force_RO default SERVER false TABLE default\n--Testcase 243:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 244:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 245:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 246:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER default TABLE true\n--Testcase 247:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 248:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 249:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 250:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 251:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO default SERVER default TABLE false\n--Testcase 252:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 253:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 254:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 255:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER true TABLE true\n--Testcase 256:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 257:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 258:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 258:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 260:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 261:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO default SERVER false TABLE true\n--Testcase 262:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 263:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 264:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 265:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO default SERVER false TABLE false\n--Testcase 266:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 267:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 268:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 269:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO default SERVER true TABLE false\n--Testcase 270:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 271:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 272:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 273:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 274:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 275:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 276:\nSELECT * FROM RO_RW_test ORDER BY i;\n\n--Bind error message test for some unsupported data type\n--Testcase 277:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 278:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 279:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 277:\nDELETE FROM RO_RW_test;\n\n--Testcase 278:\nALTER SERVER sqlite_svr OPTIONS (ADD force_readonly 'false');\n\n-- force_RO false SERVER default TABLE default\n--Testcase 279:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 280:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 281:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO false SERVER true TABLE default\n--Testcase 282:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 283:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 284:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 285:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 286:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n-- force_RO false SERVER false TABLE default\n--Testcase 287:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 288:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 289:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 290:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER default TABLE true\n--Testcase 291:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 292:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 293:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 294:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 295:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO false SERVER default TABLE false\n--Testcase 296:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 297:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 298:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 299:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER true TABLE true\n--Testcase 300:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 301:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 302:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 303:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 304:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 305:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO false SERVER false TABLE true\n--Testcase 306:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 307:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 308:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 309:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO false SERVER false TABLE false\n--Testcase 310:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 311:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 312:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 313:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO false SERVER true TABLE false\n--Testcase 314:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 315:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 316:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 317:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 318:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 319:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 320:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 321:\nDELETE FROM RO_RW_test;\n\n--Testcase 322:\nALTER SERVER sqlite_svr OPTIONS (SET force_readonly 'true');\n\n-- force_RO true SERVER default TABLE default\n--Testcase 323:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- ERR\n--Testcase 324:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- ERR\n--Testcase 325:\nDELETE FROM RO_RW_test WHERE i=2; -- ERR\n\n-- force_RO true SERVER true TABLE default\n--Testcase 326:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 327:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- ERR\n--Testcase 328:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- ERR\n--Testcase 329:\nDELETE FROM RO_RW_test WHERE i=3; -- ERR\n--Testcase 330:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- ERR\n-- force_RO true SERVER false TABLE default\n--Testcase 331:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 332:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 333:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 334:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER default TABLE true\n--Testcase 335:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 336:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 337:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- ERR\n--Testcase 338:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- ERR\n--Testcase 339:\nDELETE FROM RO_RW_test WHERE i=6; -- ERR\n\n-- force_RO true SERVER default TABLE false\n--Testcase 340:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 341:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 342:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 343:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER true TABLE true\n--Testcase 344:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true'); -- ERR\n--Testcase 345:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true'); -- ERR\n--Testcase 346:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- ERR\n--Testcase 347:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 348:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 349:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- ERR\n\n-- force_RO true SERVER false TABLE true\n--Testcase 350:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 351:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- ERR\n--Testcase 352:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- ERR\n--Testcase 353:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER false TABLE false\n--Testcase 354:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 355:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 356:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 357:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER true TABLE false\n--Testcase 358:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 359:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 360:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 361:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 362:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 363:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 364:\nALTER SERVER sqlite_svr OPTIONS (DROP force_readonly);\n\n--Testcase 365:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 366:\nDROP FOREIGN TABLE RO_RW_test;\n-- End of RO/RW test\n\n--Bind error message test for some unsupported data type\n--Testcase 366:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 367:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 368:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 142:\nDROP FUNCTION test_param_WHERE();\n--Testcase 143:\nDROP FOREIGN TABLE numbers;\n--Testcase 144:\nDROP FOREIGN TABLE department;\n--Testcase 145:\nDROP FOREIGN TABLE employee;\n--Testcase 146:\nDROP FOREIGN TABLE empdata;\n--Testcase 147:\nDROP FOREIGN TABLE multiprimary;\n--Testcase 148:\nDROP FOREIGN TABLE multiprimary2;\n--Testcase 149:\nDROP FOREIGN TABLE columntest;\n--Testcase 150:\nDROP FOREIGN TABLE noprimary;\n--Testcase 161:\nDROP FOREIGN TABLE fts_table;\n--Testcase 222:\nDROP FOREIGN TABLE grem1_1;\n--Testcase 223:\nDROP FOREIGN TABLE grem1_2;\n--Testcase 235:\nDROP FOREIGN TABLE case_exp;\n\n--Testcase 151:\nDROP SERVER sqlite_svr;\n--Testcase 152:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/bitstring.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 02:\nCREATE FOREIGN TABLE \"type_BIT\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6)) SERVER sqlite_svr OPTIONS (table 'type_BIT');\n--Testcase 03:\nDROP FOREIGN TABLE IF EXISTS \"type_BIT+\";\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6), \"t\" text, \"l\" smallint, \"bi\" bigint OPTIONS (column_name 'b')) SERVER sqlite_svr OPTIONS (table 'type_BIT+');\n--Testcase 05: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (1, 1);\n--Testcase 06: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (2, 2);\n--Testcase 07: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (3, '1');\n--Testcase 08: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (4, '10');\n--Testcase 09: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 10:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 11:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 12:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 13:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 14: type mismatch with proper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (10, 53);\n--Testcase 15:\nSELECT * FROM \"type_BIT+\";\n--Testcase 16:\nSELECT * FROM \"type_BIT\" WHERE b < '110110';\n--Testcase 17:\nSELECT * FROM \"type_BIT\" WHERE b > '110110';\n--Testcase 18:\nSELECT * FROM \"type_BIT\" WHERE b = '110110';\n\n--Testcase 20:\nCREATE FOREIGN TABLE \"type_VARBIT\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70)) SERVER sqlite_svr OPTIONS (table 'type_VARBIT');\n--Testcase 21:\nDROP FOREIGN TABLE IF EXISTS \"type_VARBIT+\";\n--Testcase 22:\nCREATE FOREIGN TABLE \"type_VARBIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70), \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_VARBIT+');\n--Testcase 23:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (1, '1');\n--Testcase 24:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (2, '10');\n--Testcase 25:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (3, '11');\n--Testcase 26:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (4, '100');\n--Testcase 27:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 28:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 29:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 30:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 31:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 32:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (10, '0100100101011001010010101000111110110101101101111011000101010');\n--Testcase 33:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (11, '01001001010110010100101010001111101101011011011110110001010101');\n\n--Testcase 34:\nSELECT * FROM \"type_VARBIT+\";\n--Testcase 35:\nSELECT * FROM \"type_VARBIT+\" WHERE b < '110110';\n--Testcase 36:\nSELECT * FROM \"type_VARBIT+\" WHERE b > '110110';\n--Testcase 37:\nSELECT * FROM \"type_VARBIT+\" WHERE b = '110110';\n\n--Testcase 38:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (12, '010010010101100101001010100011111011010110110111101100010101010');\n--Testcase 39:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (13, '0100100101011001010010101000111110110101101101111011000101010101');\n--Testcase 40: very long bit string, expected ERROR, 65 bits\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (14, '01001001010110010100101010001111101101011011011110110001010101010');\n--Testcase 41:\nSELECT * FROM \"type_VARBIT+\" WHERE \"i\" > 10;\n\n--Testcase 42:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 43:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 44:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 45:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 46:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 47:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 49:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 51:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 52:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 53:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n\n--Testcase 54:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 55:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 56:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 57:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 58:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 59:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 61:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 62:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 63:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 64:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 65:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n\n--Testcase 66:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 67:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 68:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 69:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 70:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 71:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 72:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 73:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 74:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 75:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 76:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 77:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 78:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 79:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 80:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 81:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 82:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 83:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 84:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 85:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 86:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 87:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 88:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 89:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 90:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 91:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 92:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 93:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 94:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 95:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 005:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/bool.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 000:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 001:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;\n--Testcase 02:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (1, TRUE);\n--Testcase 03:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (2, FALSE);\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BOOLEAN+\"( \"i\" int, \"b\" bool, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');\n--Testcase 05:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE text;\n--Testcase 06:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (3, TRUE);\n--Testcase 07:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (4, FALSE);\n--Testcase 08:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (5, true);\n--Testcase 09:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (6, false);\n--Testcase 10:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (7, 'Yes');\n--Testcase 11:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (8, 'YeS');\n--Testcase 12:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (9, 'yes');\n--Testcase 13:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (10, 'no');\n--Testcase 14:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (11, 'No');\n--Testcase 15:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (12, 'nO');\n--Testcase 16:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (13, 'off');\n--Testcase 17:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (14, 'oFf');\n--Testcase 18:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (15, 'on');\n--Testcase 19:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (16, 'ON');\n--Testcase 20:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (17, 't');\n--Testcase 21:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (18, 'T');\n--Testcase 22:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (19, 'Y');\n--Testcase 23:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (20, 'y');\n--Testcase 24:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (21, 'F');\n--Testcase 25:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (22, 'f');\n--Testcase 26:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (23, 'x');\n--Testcase 27:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (24, '0');\n--Testcase 28:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (25, '1');\n--Testcase 29:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (26, NULL);\n--Testcase 30:\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 31:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 32:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 35\nDELETE FROM \"type_BOOLEAN\" WHERE i = 23;\n--Testcase 36:\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 37:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NULL;\n--Testcase 38:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NOT NULL;\n--Testcase 39:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b;\n--Testcase 40:\nSELECT * FROM \"type_BOOLEAN+\" WHERE NOT b;\n\n--Testcase 41:\nCREATE FOREIGN TABLE \"type_BOOLEANpk\" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 42:\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 43:\nINSERT INTO \"type_BOOLEANpk\" VALUES (FALSE);\n--Testcase 44: ERR - primary key\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 45:\nDELETE FROM \"type_BOOLEANpk\";\n\n--Testcase 46:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE float8;\n--Testcase 47:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (27, 3.14159265358979);\n--Testcase 48:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 49: ERR - invalid float for bool column\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 50\nDELETE FROM \"type_BOOLEAN\" WHERE i = 27;\n--Testcase 51:\nSELECT * FROM \"type_BOOLEAN+\";\n\n--Testcase 52:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE b;\n--Testcase 53:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE NOT b;\n--Testcase 54:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE b;\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE NOT b;\n\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n--Testcase 57:\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n\n--Testcase 58:\nCREATE FOREIGN TABLE \"type_BOOLEAN_oper\"( \"i\" int  OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');\n--Testcase 59: see INIT.SQL with mixed affinity boolean data\nSELECT * FROM \"type_BOOLEAN_oper\";\n--Testcase 60:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n--Testcase 61:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n\n--Testcase 62:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n--Testcase 63:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n\n--Testcase 64:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n--Testcase 65:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n\n--Testcase 66:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 67:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 68:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 69:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 70:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 71:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 72:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 73:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 74:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 75:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b2;\n--Testcase 76:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 77:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE b2;\n--Testcase 78:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n\n--Testcase 79:\nDELETE FROM \"type_BOOLEAN\";\n\n--Testcase 003:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/float4.sql",
    "content": "--\n-- FLOAT4\n--\n--Testcase 46:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 47:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 48:\nCREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 49:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('    0.0');\n--Testcase 2:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30   ');\n--Testcase 3:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     -34.84    ');\n--Testcase 4:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');\n--Testcase 5:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');\n\n-- test for over and under flow\n--Testcase 6:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');\n--Testcase 7:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');\n--Testcase 8:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');\n--Testcase 9:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');\n\n--Testcase 50:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);\n--Testcase 51:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);\n--Testcase 52:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);\n--Testcase 53:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);\n\n--Testcase 54:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');\n--Testcase 55:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');\n--Testcase 56:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');\n--Testcase 57:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('       ');\n--Testcase 12:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     - 3.0');\n--Testcase 17:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('123            5');\n\n-- special inputs\n--Testcase 18:\nDELETE FROM FLOAT4_TMP;\n--Testcase 58:\nINSERT INTO FLOAT4_TMP VALUES ('NaN'::float4);\n--Testcase 59:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 20:\nDELETE FROM FLOAT4_TMP;\n--Testcase 60:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4);\n--Testcase 61:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 21:\nDELETE FROM FLOAT4_TMP;\n--Testcase 62:\nINSERT INTO FLOAT4_TMP VALUES ('   NAN  '::float4);\n--Testcase 63:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 22:\nDELETE FROM FLOAT4_TMP;\n--Testcase 64:\nINSERT INTO FLOAT4_TMP VALUES ('infinity'::float4);\n--Testcase 65:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 23:\nDELETE FROM FLOAT4_TMP;\n--Testcase 66:\nINSERT INTO FLOAT4_TMP VALUES ('          -INFINiTY   '::float4);\n--Testcase 67:\nSELECT f1 FROM FLOAT4_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT4_TMP;\n--Testcase 68:\nINSERT INTO FLOAT4_TMP VALUES ('N A N'::float4);\n--Testcase 69:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 26:\nDELETE FROM FLOAT4_TMP;\n--Testcase 70:\nINSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4);\n--Testcase 71:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 27:\nDELETE FROM FLOAT4_TMP;\n--Testcase 72:\nINSERT INTO FLOAT4_TMP VALUES (' INFINITY    x'::float4);\n--Testcase 73:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT4_TMP;\n--Testcase 74:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0);\n--Testcase 75:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 30:\nDELETE FROM FLOAT4_TMP;\n--Testcase 76:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4);\n--Testcase 77:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 185:\nDELETE FROM FLOAT4_TMP;\n--Testcase 186:\nINSERT INTO FLOAT4_TMP VALUES ('42'::float4 / 'Infinity'::float4);\n--Testcase 187:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 31:\nDELETE FROM FLOAT4_TMP;\n--Testcase 78:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4);\n--Testcase 79:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 188:\nDELETE FROM FLOAT4_TMP;\n--Testcase 189:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / '0'::float4);\n--Testcase 190:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 32:\nDELETE FROM FLOAT4_TMP;\n--Testcase 80:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4);\n--Testcase 81:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT4_TBL;\n\n--SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';\n\n--SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 35:\nSELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 36:\nSELECT f.* FROM FLOAT4_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 37:\nSELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 38:\nSELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 39:\nSELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 40:\nSELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n-- test divide by zero\n--Testcase 41:\nSELECT f.f1 / '0.0' from FLOAT4_TBL f;\n\n--Testcase 42:\nSELECT * FROM FLOAT4_TBL;\n\n-- test the unary float4abs operator\n--Testcase 43:\nSELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;\n\n--Testcase 44:\nUPDATE FLOAT4_TBL\n   SET f1 = FLOAT4_TBL.f1 * '-1'\n   WHERE FLOAT4_TBL.f1 > '0.0';\n\n--Testcase 45:\nSELECT * FROM FLOAT4_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 82:\nDELETE FROM FLOAT4_TMP;\n--Testcase 83:\nINSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4);\n--Testcase 84:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 85:\nDELETE FROM FLOAT4_TMP;\n--Testcase 86:\nINSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4);\n--Testcase 87:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 88:\nDELETE FROM FLOAT4_TMP;\n--Testcase 89:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4);\n--Testcase 90:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 91:\nDELETE FROM FLOAT4_TMP;\n--Testcase 92:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4);\n--Testcase 93:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 94:\nDELETE FROM FLOAT4_TMP;\n--Testcase 95:\nINSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4);\n--Testcase 96:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 97:\nDELETE FROM FLOAT4_TMP;\n--Testcase 98:\nINSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4);\n--Testcase 99:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 100:\nDELETE FROM FLOAT4_TMP;\n--Testcase 101:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4);\n--Testcase 102:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 103:\nDELETE FROM FLOAT4_TMP;\n--Testcase 104:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4);\n--Testcase 105:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 106:\nDELETE FROM FLOAT4_TMP;\n--Testcase 107:\nINSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4);\n--Testcase 108:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 109:\nDELETE FROM FLOAT4_TMP;\n--Testcase 110:\nINSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4);\n--Testcase 111:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 112:\nDELETE FROM FLOAT4_TMP;\n--Testcase 113:\nINSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4);\n--Testcase 114:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 115:\nDELETE FROM FLOAT4_TMP;\n--Testcase 116:\nINSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4);\n--Testcase 117:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n\n-- Test for correct input rounding in edge cases.\n-- These lists are from Paxson 1991, excluding subnormals and\n-- inputs of over 9 sig. digits.\n--Testcase 118:\nDELETE FROM FLOAT4_TMP;\n--Testcase 119:\nINSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4);\n--Testcase 120:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 121:\nDELETE FROM FLOAT4_TMP;\n--Testcase 122:\nINSERT INTO FLOAT4_TMP VALUES ('67e14'::float4);\n--Testcase 123:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 124:\nDELETE FROM FLOAT4_TMP;\n--Testcase 125:\nINSERT INTO FLOAT4_TMP VALUES ('985e15'::float4);\n--Testcase 126:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 127:\nDELETE FROM FLOAT4_TMP;\n--Testcase 128:\nINSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4);\n--Testcase 129:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 130:\nDELETE FROM FLOAT4_TMP;\n--Testcase 131:\nINSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4);\n--Testcase 132:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 133:\nDELETE FROM FLOAT4_TMP;\n--Testcase 134:\nINSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4);\n--Testcase 135:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 136:\nDELETE FROM FLOAT4_TMP;\n--Testcase 137:\nINSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4);\n--Testcase 138:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 139:\nDELETE FROM FLOAT4_TMP;\n--Testcase 140:\nINSERT INTO FLOAT4_TMP VALUES ('57e18'::float4);\n--Testcase 141:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 142:\nDELETE FROM FLOAT4_TMP;\n--Testcase 143:\nINSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4);\n--Testcase 144:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 145:\nDELETE FROM FLOAT4_TMP;\n--Testcase 146:\nINSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4);\n--Testcase 147:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 148:\nDELETE FROM FLOAT4_TMP;\n--Testcase 149:\nINSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4);\n--Testcase 150:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 151:\nDELETE FROM FLOAT4_TMP;\n--Testcase 152:\nINSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4);\n--Testcase 153:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 154:\nDELETE FROM FLOAT4_TMP;\n--Testcase 155:\nINSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4);\n--Testcase 156:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 157:\nDELETE FROM FLOAT4_TMP;\n--Testcase 158:\nINSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4);\n--Testcase 159:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 160:\nDELETE FROM FLOAT4_TMP;\n--Testcase 161:\nINSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4);\n--Testcase 162:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- Test that the smallest possible normalized input value inputs\n-- correctly, either in 9-significant-digit or shortest-decimal\n-- format.\n--\n-- exact val is             1.1754943508...\n-- shortest val is          1.1754944000\n-- midpoint to next val is  1.1754944208...\n\n--Testcase 163:\nDELETE FROM FLOAT4_TMP;\n--Testcase 164:\nINSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4);\n--Testcase 165:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 166:\nDELETE FROM FLOAT4_TMP;\n--Testcase 167:\nINSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4);\n--Testcase 168:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 169:\ncreate type xfloat4;\n--Testcase 170:\ncreate function xfloat4in(cstring) returns xfloat4 immutable strict\n  language internal as 'int4in';\n--Testcase 171:\ncreate function xfloat4out(xfloat4) returns cstring immutable strict\n  language internal as 'int4out';\n--Testcase 172:\ncreate type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4);\n--Testcase 173:\ncreate cast (xfloat4 as float4) without function;\n--Testcase 174:\ncreate cast (float4 as xfloat4) without function;\n--Testcase 175:\ncreate cast (xfloat4 as integer) without function;\n--Testcase 176:\ncreate cast (integer as xfloat4) without function;\n\n-- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 177:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 178:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'00000001'),\n  (x'00000002'), (x'00000003'),\n  (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'),\n  (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'),\n  -- stress values\n  (x'0053c4f4'),  -- 7693e-42\n  (x'006c85c4'),  -- 996622e-44\n  (x'0041ca76'),  -- 60419369e-46\n  (x'004b7678'),  -- 6930161142e-48\n  -- taken from upstream testsuite\n  (x'00000007'),\n  (x'00424fe2'),\n  -- borderline between subnormal and normal\n  (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff');\n--Testcase 179:\nselect float4send(flt) as ibits,\n       flt\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\nbegin;\n\n--Testcase 180:\ninsert into testdata(bits) values\n  (x'00000000'),\n  -- smallest normal values\n  (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'),\n  (x'00800006'),\n  -- small normal values chosen for short vs. long output\n  (x'008002f1'), (x'008002f2'), (x'008002f3'),\n  (x'00800e17'), (x'00800e18'), (x'00800e19'),\n  -- assorted values (random mantissae)\n  (x'01000001'), (x'01102843'), (x'01a52c98'),\n  (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'),\n  (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'),\n  (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'),\n  (x'1f850283'), (x'2874a9d6'),\n  -- values around 5e-08\n  (x'3356bf94'), (x'3356bf95'), (x'3356bf96'),\n  -- around 1e-07\n  (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'),\n  -- around 3e-07 .. 1e-04\n  (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'),\n  (x'350637bc'), (x'350637bd'), (x'350637be'),\n  (x'35719786'), (x'35719787'), (x'35719788'),\n  (x'358637bc'), (x'358637bd'), (x'358637be'),\n  (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'),\n  (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'),\n  -- format crossover at 1e-04\n  (x'38d1b714'), (x'38d1b715'), (x'38d1b716'),\n  (x'38d1b717'), (x'38d1b718'), (x'38d1b719'),\n  (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'),\n  (x'38d1b71d'),\n  --\n  (x'38dffffe'), (x'38dfffff'), (x'38e00000'),\n  (x'38efffff'), (x'38f00000'), (x'38f00001'),\n  (x'3a83126e'), (x'3a83126f'), (x'3a831270'),\n  (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'),\n  (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'),\n  -- chosen to need 9 digits for 3dcccd70\n  (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'),\n  --\n  (x'3effffff'), (x'3f000000'), (x'3f000001'),\n  (x'3f333332'), (x'3f333333'), (x'3f333334'),\n  -- approach 1.0 with increasing numbers of 9s\n  (x'3f666665'), (x'3f666666'), (x'3f666667'),\n  (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'),\n  (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'),\n  (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'),\n  (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'),\n  (x'3f7fffee'), (x'3f7fffef'),\n  -- values very close to 1\n  (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'),\n  (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'),\n  (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'),\n  (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'),\n  (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'),\n  (x'3f7fffff'),\n  (x'3f800000'),\n  (x'3f800001'), (x'3f800002'), (x'3f800003'),\n  (x'3f800004'), (x'3f800005'), (x'3f800006'),\n  (x'3f800007'), (x'3f800008'), (x'3f800009'),\n  -- values 1 to 1.1\n  (x'3f80000f'), (x'3f800010'), (x'3f800011'),\n  (x'3f800012'), (x'3f800013'), (x'3f800014'),\n  (x'3f800017'), (x'3f800018'), (x'3f800019'),\n  (x'3f80001a'), (x'3f80001b'), (x'3f80001c'),\n  (x'3f800029'), (x'3f80002a'), (x'3f80002b'),\n  (x'3f800053'), (x'3f800054'), (x'3f800055'),\n  (x'3f800346'), (x'3f800347'), (x'3f800348'),\n  (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'),\n  (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'),\n  (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'),\n  --\n  (x'3fc90fdb'), -- pi/2\n  (x'402df854'), -- e\n  (x'40490fdb'), -- pi\n  --\n  (x'409fffff'), (x'40a00000'), (x'40a00001'),\n  (x'40afffff'), (x'40b00000'), (x'40b00001'),\n  (x'411fffff'), (x'41200000'), (x'41200001'),\n  (x'42c7ffff'), (x'42c80000'), (x'42c80001'),\n  (x'4479ffff'), (x'447a0000'), (x'447a0001'),\n  (x'461c3fff'), (x'461c4000'), (x'461c4001'),\n  (x'47c34fff'), (x'47c35000'), (x'47c35001'),\n  (x'497423ff'), (x'49742400'), (x'49742401'),\n  (x'4b18967f'), (x'4b189680'), (x'4b189681'),\n  (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'),\n  (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'),\n  (x'501502f8'), (x'501502f9'), (x'501502fa'),\n  (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'),\n  -- stress values\n  (x'1f6c1e4a'),  -- 5e-20\n  (x'59be6cea'),  -- 67e14\n  (x'5d5ab6c4'),  -- 985e15\n  (x'2cc4a9bd'),  -- 55895e-16\n  (x'15ae43fd'),  -- 7038531e-32\n  (x'2cf757ca'),  -- 702990899e-20\n  (x'665ba998'),  -- 25933168707e13\n  (x'743c3324'),  -- 596428896559e20\n  -- exercise fixed-point memmoves\n  (x'47f1205a'),\n  (x'4640e6ae'),\n  (x'449a5225'),\n  (x'42f6e9d5'),\n  (x'414587dd'),\n  (x'3f9e064b'),\n  -- these cases come from the upstream's testsuite\n  -- BoundaryRoundEven\n  (x'4c000004'),\n  (x'50061c46'),\n  (x'510006a8'),\n  -- ExactValueRoundEven\n  (x'48951f84'),\n  (x'45fd1840'),\n  -- LotsOfTrailingZeros\n  (x'39800000'),\n  (x'3b200000'),\n  (x'3b900000'),\n  (x'3bd00000'),\n  -- Regression\n  (x'63800000'),\n  (x'4b000000'),\n  (x'4b800000'),\n  (x'4c000001'),\n  (x'4c800b0d'),\n  (x'00d24584'),\n  (x'00d90b88'),\n  (x'45803f34'),\n  (x'4f9f24f7'),\n  (x'3a8722c3'),\n  (x'5c800041'),\n  (x'15ae43fd'),\n  (x'5d4cccfb'),\n  (x'4c800001'),\n  (x'57800ed8'),\n  (x'5f000000'),\n  (x'700000f0'),\n  (x'5f23e9ac'),\n  (x'5e9502f9'),\n  (x'5e8012b1'),\n  (x'3c000028'),\n  (x'60cde861'),\n  (x'03aa2a50'),\n  (x'43480000'),\n  (x'4c000000'),\n  -- LooksLikePow5\n  (x'5D1502F9'),\n  (x'5D9502F9'),\n  (x'5E1502F9'),\n  -- OutputLength\n  (x'3f99999a'),\n  (x'3f9d70a4'),\n  (x'3f9df3b6'),\n  (x'3f9e0419'),\n  (x'3f9e0610'),\n  (x'3f9e064b'),\n  (x'3f9e0651'),\n  (x'03d20cfe');\n\n--Testcase 181:\nselect float4send(flt) as ibits,\n       flt,\n       flt::text::float4 as r_flt,\n       float4send(flt::text::float4) as obits,\n       float4send(flt::text::float4) = float4send(flt) as correct\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\n-- clean up, lest opr_sanity complain\n--Testcase 182:\ndrop type xfloat4 cascade;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/float8.sql",
    "content": "--\n-- FLOAT8\n--\n--Testcase 113:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 114:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 115:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 116:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 2:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 3:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 4:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 5:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- test for underflow and overflow handling\n--Testcase 6:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e400'::float8);\n--Testcase 7:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e400'::float8);\n--Testcase 8:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e-400'::float8);\n--Testcase 9:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e-400'::float8);\n\n-- test smallest normalized input\n--Testcase 117:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('2.2250738585072014E-308'::float8);\n--Testcase 118:\nSELECT float8send(f1) FROM FLOAT8_TMP;\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('     ');\n--Testcase 12:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');\n--Testcase 17:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');\n\n-- special inputs\n--Testcase 19:\nDELETE FROM FLOAT8_TMP;\n--Testcase 119:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8);\n--Testcase 120:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 20:\nDELETE FROM FLOAT8_TMP;\n--Testcase 121:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8);\n--Testcase 122:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 21:\nDELETE FROM FLOAT8_TMP;\n--Testcase 123:\nINSERT INTO FLOAT8_TMP VALUES ('   NAN  '::float8);\n--Testcase 124:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 22:\nDELETE FROM FLOAT8_TMP;\n--Testcase 125:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8);\n--Testcase 126:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 23:\nDELETE FROM FLOAT8_TMP;\n--Testcase 127:\nINSERT INTO FLOAT8_TMP VALUES ('          -INFINiTY   '::float8);\n--Testcase 128:\nSELECT f1 FROM FLOAT8_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT8_TMP;\n--Testcase 129:\nINSERT INTO FLOAT8_TMP VALUES ('N A N'::float8);\n--Testcase 130:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 26:\nDELETE FROM FLOAT8_TMP;\n--Testcase 131:\nINSERT INTO FLOAT8_TMP VALUES ('NaN x'::float8);\n--Testcase 132:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 27:\nDELETE FROM FLOAT8_TMP;\n--Testcase 133:\nINSERT INTO FLOAT8_TMP VALUES (' INFINITY    x'::float8);\n--Testcase 134:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT8_TMP;\n--Testcase 135:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 + 100.0);\n--Testcase 136:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 30:\nDELETE FROM FLOAT8_TMP;\n--Testcase 137:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 / 'Infinity'::float8);\n--Testcase 138:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 272:\nDELETE FROM FLOAT8_TMP;\n--Testcase 273:\nINSERT INTO FLOAT8_TMP VALUES ('42'::float8 / 'Infinity'::float8);\n--Testcase 274:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 31:\nDELETE FROM FLOAT8_TMP;\n--Testcase 139:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / 'nan'::float8);\n--Testcase 140:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 275:\nDELETE FROM FLOAT8_TMP;\n--Testcase 276:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / '0'::float8);\n--Testcase 277:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 32:\nDELETE FROM FLOAT8_TMP;\n--Testcase 141:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::numeric::float8);\n--Testcase 142:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 35:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';\n\n--Testcase 36:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';\n\n--Testcase 37:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;\n\n--Testcase 38:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 39:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 40:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 41:\nSELECT f.f1, f.f1 * '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 42:\nSELECT f.f1, f.f1 + '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 43:\nSELECT f.f1, f.f1 / '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 44:\nSELECT f.f1, f.f1 - '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 45:\nSELECT f.f1 ^ '2.0' AS square_f1\n   FROM FLOAT8_TBL f where f.f1 = '1004.3';\n\n-- absolute value\n--Testcase 46:\nSELECT f.f1, @f.f1 AS abs_f1\n   FROM FLOAT8_TBL f;\n\n-- truncate\n--Testcase 47:\nSELECT f.f1, trunc(f.f1) AS trunc_f1\n   FROM FLOAT8_TBL f;\n\n-- round\n--Testcase 48:\nSELECT f.f1, round(f.f1) AS round_f1\n   FROM FLOAT8_TBL f;\n\n-- ceil / ceiling\n--Testcase 49:\nselect ceil(f1) as ceil_f1 from float8_tbl f;\n--Testcase 50:\nselect ceiling(f1) as ceiling_f1 from float8_tbl f;\n\n-- floor\n--Testcase 51:\nselect floor(f1) as floor_f1 from float8_tbl f;\n\n-- sign\n--Testcase 52:\nselect sign(f1) as sign_f1 from float8_tbl f;\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 278:\nSET extra_float_digits = 0;\n\n-- square root\nBEGIN;\n--Testcase 53:\nDELETE FROM FLOAT8_TBL;\n--Testcase 54:\nINSERT INTO FLOAT8_TBL VALUES ('64'::float8);\n--Testcase 55:\nSELECT sqrt(f1) as eight FROM FLOAT8_TBL;\n--Testcase 56:\nSELECT |/f1 as eight FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 57:\nSELECT f.f1, |/f.f1 AS sqrt_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- power\n--Testcase 58:\nDELETE FROM FLOAT8_TMP;\n--Testcase 143:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, '0.5'::float8);\n--Testcase 144:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 60:\nDELETE FROM FLOAT8_TMP;\n--Testcase 145:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, '0.5'::float8);\n--Testcase 146:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 61:\nDELETE FROM FLOAT8_TMP;\n--Testcase 147:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, 'NaN'::float8);\n--Testcase 148:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 62:\nDELETE FROM FLOAT8_TMP;\n--Testcase 149:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, 'NaN'::float8);\n--Testcase 150:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 63:\nDELETE FROM FLOAT8_TMP;\n--Testcase 151:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'NaN'::float8);\n--Testcase 152:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 64:\nDELETE FROM FLOAT8_TMP;\n--Testcase 153:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'NaN'::float8);\n--Testcase 154:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 65:\nDELETE FROM FLOAT8_TMP;\n--Testcase 155:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8 , '0'::float8);\n--Testcase 156:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 279:\nDELETE FROM FLOAT8_TMP;\n--Testcase 280:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '0'::float8);\n--Testcase 281:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 282:\nDELETE FROM FLOAT8_TMP;\n--Testcase 283:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '0'::float8);\n--Testcase 284:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 285:\nDELETE FROM FLOAT8_TMP;\n--Testcase 286:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, 'infinity'::float8);\n--Testcase 287:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 288:\nDELETE FROM FLOAT8_TMP;\n--Testcase 289:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, '-infinity'::float8);\n--Testcase 290:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 291:\nDELETE FROM FLOAT8_TMP;\n--Testcase 292:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'infinity'::float8);\n--Testcase 293:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 294:\nDELETE FROM FLOAT8_TMP;\n--Testcase 295:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, '-infinity'::float8);\n--Testcase 296:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 297:\nDELETE FROM FLOAT8_TMP;\n--Testcase 298:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'infinity'::float8);\n--Testcase 299:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 300:\nDELETE FROM FLOAT8_TMP;\n--Testcase 301:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, '-infinity'::float8);\n--Testcase 302:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 303:\nDELETE FROM FLOAT8_TMP;\n--Testcase 304:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, 'infinity'::float8);\n--Testcase 305:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 306:\nDELETE FROM FLOAT8_TMP;\n--Testcase 307:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, 'infinity'::float8);\n--Testcase 308:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 309:\nDELETE FROM FLOAT8_TMP;\n--Testcase 310:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, 'infinity'::float8);\n--Testcase 311:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 312:\nDELETE FROM FLOAT8_TMP;\n--Testcase 313:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, 'infinity'::float8);\n--Testcase 314:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 315:\nDELETE FROM FLOAT8_TMP;\n--Testcase 316:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, '-infinity'::float8);\n--Testcase 317:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 318:\nDELETE FROM FLOAT8_TMP;\n--Testcase 319:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, '-infinity'::float8);\n--Testcase 320:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 321:\nDELETE FROM FLOAT8_TMP;\n--Testcase 322:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, '-infinity'::float8);\n--Testcase 323:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 324:\nDELETE FROM FLOAT8_TMP;\n--Testcase 325:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, '-infinity'::float8);\n--Testcase 326:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 327:\nDELETE FROM FLOAT8_TMP;\n--Testcase 328:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-2'::float8);\n--Testcase 329:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 330:\nDELETE FROM FLOAT8_TMP;\n--Testcase 331:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '2'::float8);\n--Testcase 332:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 333:\nDELETE FROM FLOAT8_TMP;\n--Testcase 334:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, 'infinity'::float8);\n--Testcase 335:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 336:\nDELETE FROM FLOAT8_TMP;\n--Testcase 337:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-infinity'::float8);\n--Testcase 338:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- Intel's icc misoptimizes the code that controls the sign of this result,\n-- even with -mp1.  Pending a fix for that, only test for \"is it zero\".\n--Testcase 339:\nDELETE FROM FLOAT8_TMP;\n--Testcase 340:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-2'::float8);\n--Testcase 341:\nSELECT power(f1, f2) = '0' FROM FLOAT8_TMP;\n--Testcase 342:\nDELETE FROM FLOAT8_TMP;\n--Testcase 343:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3'::float8);\n--Testcase 344:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 345:\nDELETE FROM FLOAT8_TMP;\n--Testcase 346:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '2'::float8);\n--Testcase 347:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 348:\nDELETE FROM FLOAT8_TMP;\n--Testcase 349:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '3'::float8);\n--Testcase 350:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 351:\nDELETE FROM FLOAT8_TMP;\n--Testcase 352:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3.5'::float8);\n--Testcase 353:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 354:\nDELETE FROM FLOAT8_TMP;\n--Testcase 355:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, 'infinity'::float8);\n--Testcase 356:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 357:\nDELETE FROM FLOAT8_TMP;\n--Testcase 358:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-infinity'::float8);\n--Testcase 359:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- take exp of ln(f.f1)\n--Testcase 67:\nSELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- check edge cases for exp\n--Testcase 360:\nDELETE FROM FLOAT8_TMP;\n--Testcase 361:\nINSERT INTO FLOAT8_TMP VALUES ('inf'::float8), ('-inf'::float8), ('nan'::float8);\n--Testcase 362:\nSELECT exp(f1) FROM FLOAT8_TMP;\n\n-- cube root\nBEGIN;\n--Testcase 68:\nDELETE FROM FLOAT8_TBL;\n--Testcase 69:\nINSERT INTO FLOAT8_TBL VALUES ('27'::float8);\n--Testcase 70:\nSELECT ||/f1 as three FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 71:\nSELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;\n\n\n--Testcase 72:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 73:\nUPDATE FLOAT8_TBL\n   SET f1 = FLOAT8_TBL.f1 * '-1'\n   WHERE FLOAT8_TBL.f1 > '0.0';\n\n--Testcase 74:\nSELECT f.f1 * '1e200' from FLOAT8_TBL f;\n\n--Testcase 75:\nSELECT f.f1 ^ '1e200' from FLOAT8_TBL f;\n\nBEGIN;\n--Testcase 76:\nDELETE FROM FLOAT8_TBL;\n--Testcase 77:\nINSERT INTO FLOAT8_TBL VALUES (0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5);\n--Testcase 78:\nSELECT * FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 79:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;\n\n--Testcase 80:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;\n\n--Testcase 81:\nSELECT exp(f.f1) from FLOAT8_TBL f;\n\n--Testcase 82:\nSELECT f.f1 / '0.0' from FLOAT8_TBL f;\n\n--Testcase 83:\nSELECT * FROM FLOAT8_TBL;\n\n-- hyperbolic functions\n-- we run these with extra_float_digits = 0 too, since different platforms\n-- tend to produce results that vary in the last place.\n--Testcase 157:\nDELETE FROM FLOAT8_TMP;\n--Testcase 158:\nINSERT INTO FLOAT8_TMP(f1) VALUES (1);\n--Testcase 159:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n--Testcase 160:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n--Testcase 161:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n--Testcase 162:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 163:\nDELETE FROM FLOAT8_TMP;\n--Testcase 164:\nINSERT INTO FLOAT8_TMP(f1) VALUES (2);\n--Testcase 165:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n--Testcase 166:\nDELETE FROM FLOAT8_TMP;\n--Testcase 167:\nINSERT INTO FLOAT8_TMP(f1) VALUES (0.5);\n--Testcase 168:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- test Inf/NaN cases for hyperbolic functions\n--Testcase 169:\nDELETE FROM FLOAT8_TMP;\n--Testcase 170:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 171:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 172:\nDELETE FROM FLOAT8_TMP;\n--Testcase 173:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 174:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 175:\nDELETE FROM FLOAT8_TMP;\n--Testcase 176:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 177:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 178:\nDELETE FROM FLOAT8_TMP;\n--Testcase 179:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 180:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 181:\nDELETE FROM FLOAT8_TMP;\n--Testcase 182:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 183:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 184:\nDELETE FROM FLOAT8_TMP;\n--Testcase 185:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 186:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 187:\nDELETE FROM FLOAT8_TMP;\n--Testcase 188:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 189:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 190:\nDELETE FROM FLOAT8_TMP;\n--Testcase 191:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 192:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 193:\nDELETE FROM FLOAT8_TMP;\n--Testcase 194:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 195:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 196:\nDELETE FROM FLOAT8_TMP;\n--Testcase 197:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 198:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 199:\nDELETE FROM FLOAT8_TMP;\n--Testcase 200:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 201:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 202:\nDELETE FROM FLOAT8_TMP;\n--Testcase 203:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 204:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test\n-- SELECT acosh(float8 'infinity');\n--Testcase 205:\nDELETE FROM FLOAT8_TMP;\n--Testcase 206:\nINSERT INTO FLOAT8_TMP VALUES (float8 '-infinity');\n--Testcase 207:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 208:\nDELETE FROM FLOAT8_TMP;\n--Testcase 209:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 210:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 211:\nDELETE FROM FLOAT8_TMP;\n--Testcase 212:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'infinity'));\n--Testcase 213:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 214:\nDELETE FROM FLOAT8_TMP;\n--Testcase 215:\nINSERT INTO FLOAT8_TMP VALUES ((float8 '-infinity'));\n--Testcase 216:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 217:\nDELETE FROM FLOAT8_TMP;\n--Testcase 218:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 219:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 369:\nRESET extra_float_digits;\n\n-- test for over- and underflow\n--Testcase 84:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');\n\n--Testcase 85:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');\n\n--Testcase 86:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');\n\n--Testcase 87:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');\n\n-- maintain external table consistency across platforms\n-- delete all values and reinsert well-behaved ones\n\n--Testcase 88:\nDELETE FROM FLOAT8_TBL;\n\n--Testcase 89:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');\n\n--Testcase 90:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');\n\n--Testcase 91:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');\n\n--Testcase 92:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');\n\n--Testcase 93:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');\n\n--Testcase 94:\nSELECT * FROM FLOAT8_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 220:\nDELETE FROM FLOAT8_TMP;\n--Testcase 221:\nINSERT INTO FLOAT8_TMP VALUES ('32767.4'::float8);\n--Testcase 222:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 223:\nDELETE FROM FLOAT8_TMP;\n--Testcase 224:\nINSERT INTO FLOAT8_TMP VALUES ('32767.6'::float8);\n--Testcase 225:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 226:\nDELETE FROM FLOAT8_TMP;\n--Testcase 227:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.4'::float8);\n--Testcase 228:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 229:\nDELETE FROM FLOAT8_TMP;\n--Testcase 230:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.6'::float8);\n--Testcase 231:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 232:\nDELETE FROM FLOAT8_TMP;\n--Testcase 233:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.4'::float8);\n--Testcase 234:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 235:\nDELETE FROM FLOAT8_TMP;\n--Testcase 236:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.6'::float8);\n--Testcase 237:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 238:\nDELETE FROM FLOAT8_TMP;\n--Testcase 239:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.4'::float8);\n--Testcase 240:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 241:\nDELETE FROM FLOAT8_TMP;\n--Testcase 242:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.6'::float8);\n--Testcase 243:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 244:\nDELETE FROM FLOAT8_TMP;\n--Testcase 245:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854773760'::float8);\n--Testcase 246:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 247:\nDELETE FROM FLOAT8_TMP;\n--Testcase 248:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854775807'::float8);\n--Testcase 249:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 250:\nDELETE FROM FLOAT8_TMP;\n--Testcase 251:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854775808.5'::float8);\n--Testcase 252:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 253:\nDELETE FROM FLOAT8_TMP;\n--Testcase 254:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854780000'::float8);\n--Testcase 255:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n-- test exact cases for trigonometric functions in degrees\n\nBEGIN;\n--Testcase 95:\nDELETE FROM FLOAT8_TBL;\n--Testcase 96:\nINSERT INTO FLOAT8_TBL VALUES (0), (30), (90), (150), (180),\n      (210), (270), (330), (360);\n--Testcase 97:\nSELECT f1,\n       sind(f1),\n       sind(f1) IN (-1,-0.5,0,0.5,1) AS sind_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 98:\nDELETE FROM FLOAT8_TBL;\n--Testcase 99:\nINSERT INTO FLOAT8_TBL VALUES (0), (60), (90), (120), (180),\n      (240), (270), (300), (360);\n--Testcase 100:\nSELECT f1,\n       cosd(f1),\n       cosd(f1) IN (-1,-0.5,0,0.5,1) AS cosd_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 101:\nDELETE FROM FLOAT8_TBL;\n--Testcase 102:\nINSERT INTO FLOAT8_TBL VALUES (0), (45), (90), (135), (180),\n      (225), (270), (315), (360);\n--Testcase 103:\nSELECT f1,\n       tand(f1),\n       tand(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS tand_exact,\n       cotd(f1),\n       cotd(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS cotd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 104:\nDELETE FROM FLOAT8_TBL;\n--Testcase 105:\nINSERT INTO FLOAT8_TBL VALUES (-1), (-0.5), (0), (0.5), (1);\n--Testcase 106:\nSELECT f1,\n       asind(f1),\n       asind(f1) IN (-90,-30,0,30,90) AS asind_exact,\n       acosd(f1),\n       acosd(f1) IN (0,60,90,120,180) AS acosd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 107:\nDELETE FROM FLOAT8_TBL;\n--Testcase 108:\nINSERT INTO FLOAT8_TBL VALUES ('-Infinity'::float8), (-1), (0), (1),\n      ('Infinity'::float8);\n--Testcase 109:\nSELECT f1,\n       atand(f1),\n       atand(f1) IN (-90,-45,0,45,90) AS atand_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 110:\nDELETE FROM FLOAT8_TBL;\n--Testcase 111:\nINSERT INTO FLOAT8_TBL SELECT * FROM generate_series(0, 360, 90);\n--Testcase 112:\nSELECT x, y,\n       atan2d(y, x),\n       atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact\nFROM (SELECT 10*cosd(f1), 10*sind(f1)\n          FROM FLOAT8_TBL) AS t(x,y);\n\nROLLBACK;\n\n--\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 256:\ncreate type xfloat8;\n--Testcase 257:\ncreate function xfloat8in(cstring) returns xfloat8 immutable strict\n  language internal as 'int8in';\n--Testcase 258:\ncreate function xfloat8out(xfloat8) returns cstring immutable strict\n  language internal as 'int8out';\n--Testcase 259:\ncreate type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);\n--Testcase 260:\ncreate cast (xfloat8 as float8) without function;\n--Testcase 261:\ncreate cast (float8 as xfloat8) without function;\n--Testcase 262:\ncreate cast (xfloat8 as bigint) without function;\n--Testcase 263:\ncreate cast (bigint as xfloat8) without function;\n\n-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 264:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 265:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'0000000000000001'),\n  (x'0000000000000002'), (x'0000000000000003'),\n  (x'0000000000001000'), (x'0000000100000000'),\n  (x'0000010000000000'), (x'0000010100000000'),\n  (x'0000400000000000'), (x'0000400100000000'),\n  (x'0000800000000000'), (x'0000800000000001'),\n  -- these values taken from upstream testsuite\n  (x'00000000000f4240'),\n  (x'00000000016e3600'),\n  (x'0000008cdcdea440'),\n  -- borderline between subnormal and normal\n  (x'000ffffffffffff0'), (x'000ffffffffffff1'),\n  (x'000ffffffffffffe'), (x'000fffffffffffff');\n--Testcase 266:\nselect float8send(flt) as ibits,\n       flt\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- round-trip tests\n\nbegin;\n--Testcase 267:\ninsert into testdata(bits) values\n  (x'0000000000000000'),\n  -- smallest normal values\n  (x'0010000000000000'), (x'0010000000000001'),\n  (x'0010000000000002'), (x'0018000000000000'),\n  --\n  (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),\n  (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),\n  (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),\n  (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),\n  (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),\n  (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),\n  (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),\n  (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),\n  (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),\n  (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),\n  -- values very close to 1\n  (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),\n  (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),\n  (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),\n  (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),\n  (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),\n  (x'3fefffffffffffff'),\n  (x'3ff0000000000000'),\n  (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),\n  (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),\n  (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),\n  --\n  (x'3ff921fb54442d18'),\n  (x'4005bf0a8b14576a'),\n  (x'400921fb54442d18'),\n  --\n  (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),\n  (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),\n  (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),\n  (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),\n  (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),\n  (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),\n  (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),\n  (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),\n  (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),\n  (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),\n  (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),\n  (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),\n  (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),\n  (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),\n  (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),\n  (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),\n  (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),\n  (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),\n  (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),\n  (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),\n  (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),\n  (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),\n  (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),\n  (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),\n  (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),\n  --\n  (x'7feffffffffffffe'), (x'7fefffffffffffff'),\n  -- round to even tests (+ve)\n  (x'4350000000000002'),\n  (x'4350000000002e06'),\n  (x'4352000000000003'),\n  (x'4352000000000004'),\n  (x'4358000000000003'),\n  (x'4358000000000004'),\n  (x'435f000000000020'),\n  -- round to even tests (-ve)\n  (x'c350000000000002'),\n  (x'c350000000002e06'),\n  (x'c352000000000003'),\n  (x'c352000000000004'),\n  (x'c358000000000003'),\n  (x'c358000000000004'),\n  (x'c35f000000000020'),\n  -- exercise fixed-point memmoves\n  (x'42dc12218377de66'),\n  (x'42a674e79c5fe51f'),\n  (x'4271f71fb04cb74c'),\n  (x'423cbe991a145879'),\n  (x'4206fee0e1a9e061'),\n  (x'41d26580b487e6b4'),\n  (x'419d6f34540ca453'),\n  (x'41678c29dcd6e9dc'),\n  (x'4132d687e3df217d'),\n  (x'40fe240c9fcb68c8'),\n  (x'40c81cd6e63c53d3'),\n  (x'40934a4584fd0fdc'),\n  (x'405edd3c07fb4c93'),\n  (x'4028b0fcd32f7076'),\n  (x'3ff3c0ca428c59f8'),\n  -- these cases come from the upstream's testsuite\n  -- LotsOfTrailingZeros)\n  (x'3e60000000000000'),\n  -- Regression\n  (x'c352bd2668e077c4'),\n  (x'434018601510c000'),\n  (x'43d055dc36f24000'),\n  (x'43e052961c6f8000'),\n  (x'3ff3c0ca2a5b1d5d'),\n  -- LooksLikePow5\n  (x'4830f0cf064dd592'),\n  (x'4840f0cf064dd592'),\n  (x'4850f0cf064dd592'),\n  -- OutputLength\n  (x'3ff3333333333333'),\n  (x'3ff3ae147ae147ae'),\n  (x'3ff3be76c8b43958'),\n  (x'3ff3c083126e978d'),\n  (x'3ff3c0c1fc8f3238'),\n  (x'3ff3c0c9539b8887'),\n  (x'3ff3c0ca2a5b1d5d'),\n  (x'3ff3c0ca4283de1b'),\n  (x'3ff3c0ca43db770a'),\n  (x'3ff3c0ca428abd53'),\n  (x'3ff3c0ca428c1d2b'),\n  (x'3ff3c0ca428c51f2'),\n  (x'3ff3c0ca428c58fc'),\n  (x'3ff3c0ca428c59dd'),\n  (x'3ff3c0ca428c59f8'),\n  (x'3ff3c0ca428c59fb'),\n  -- 32-bit chunking\n  (x'40112e0be8047a7d'),\n  (x'40112e0be815a889'),\n  (x'40112e0be826d695'),\n  (x'40112e0be83804a1'),\n  (x'40112e0be84932ad'),\n  -- MinMaxShift\n  (x'0040000000000000'),\n  (x'007fffffffffffff'),\n  (x'0290000000000000'),\n  (x'029fffffffffffff'),\n  (x'4350000000000000'),\n  (x'435fffffffffffff'),\n  (x'1330000000000000'),\n  (x'133fffffffffffff'),\n  (x'3a6fa7161a4d6e0c');\n--Testcase 268:\nselect float8send(flt) as ibits,\n       flt,\n       flt::text::float8 as r_flt,\n       float8send(flt::text::float8) as obits,\n       float8send(flt::text::float8) = float8send(flt) as correct\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- clean up, lest opr_sanity complain\n--Testcase 269:\ndrop type xfloat8 cascade;\n\n--Testcase 363:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/int4.sql",
    "content": "--\n-- INT4 Based on PostgreSQL tests, please don't add additional tests here, use other test files\n--\n--Testcase 61:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 62:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 63:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 64:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n \n--Testcase 1:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n\n--Testcase 2:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n\n--Testcase 3:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n\n--Testcase 4:\nINSERT INTO INT4_TBL(f1) VALUES ('34.5');\n\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n\n--Testcase 6:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n-- bad input values -- should give errors\n--Testcase 7:\nINSERT INTO INT4_TBL(f1) VALUES ('1000000000000');\n--Testcase 8:\nINSERT INTO INT4_TBL(f1) VALUES ('asdf');\n--Testcase 9:\nINSERT INTO INT4_TBL(f1) VALUES ('     ');\n--Testcase 10:\nINSERT INTO INT4_TBL(f1) VALUES ('   asdf   ');\n--Testcase 11:\nINSERT INTO INT4_TBL(f1) VALUES ('- 1234');\n--Testcase 12:\nINSERT INTO INT4_TBL(f1) VALUES ('123       5');\n--Testcase 13:\nINSERT INTO INT4_TBL(f1) VALUES ('');\n\n\n--Testcase 14:\nSELECT * FROM INT4_TBL;\n\n--Testcase 15:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';\n\n--Testcase 16:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';\n\n--Testcase 17:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';\n\n--Testcase 18:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';\n\n--Testcase 19:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';\n\n--Testcase 20:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';\n\n--Testcase 21:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';\n\n--Testcase 22:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';\n\n--Testcase 23:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';\n\n--Testcase 24:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';\n\n--Testcase 25:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';\n\n--Testcase 26:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';\n\n-- positive odds\n--Testcase 27:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';\n\n-- any evens\n--Testcase 28:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';\n\n--Testcase 29:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 30:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 31:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 32:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 33:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 34:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 35:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 36:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 37:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 38:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 39:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 40:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 41:\nSELECT i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 42:\nSELECT i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;\n\n--\n-- more complex expressions\n--\n\n-- variations on unary minus parsing\n\n--Testcase 65:\nDELETE FROM INT4_TMP;\n--Testcase 66:\nINSERT INTO INT4_TMP VALUES (-2, 3);\n--Testcase 67:\nSELECT f1 + f2 as one FROM INT4_TMP;\n\n--Testcase 68:\nDELETE FROM INT4_TMP;\n--Testcase 69:\nINSERT INTO INT4_TMP VALUES (4, 2);\n--Testcase 70:\nSELECT f1 - f2 as two FROM INT4_TMP;\n\n--Testcase 46:\nDELETE FROM INT4_TMP;\n--Testcase 71:\nINSERT INTO INT4_TMP VALUES (2, 1);\n--Testcase 72:\nSELECT f1- -f2 as three FROM INT4_TMP;\n\n--Testcase 47:\nDELETE FROM INT4_TMP;\n--Testcase 73:\nINSERT INTO INT4_TMP VALUES (2, 2);\n--Testcase 74:\nSELECT f1 - -f2 as four FROM INT4_TMP;\n\n--Testcase 75:\nDELETE FROM INT4_TMP;\n--Testcase 76:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int2, '16'::int2 / '4'::int2);\n--Testcase 77:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 78:\nDELETE FROM INT4_TMP;\n--Testcase 79:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int4, '16'::int2 / '4'::int4);\n--Testcase 80:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 81:\nDELETE FROM INT4_TMP;\n--Testcase 82:\nINSERT INTO INT4_TMP VALUES ('2'::int4 * '2'::int2, '16'::int4 / '4'::int2);\n--Testcase 83:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 84:\nDELETE FROM INT4_TMP;\n--Testcase 85:\nINSERT INTO INT4_TMP VALUES ('1000'::int4, '999'::int4);\n--Testcase 86:\nSELECT f1 < f2 AS false FROM INT4_TMP;\n\n--Testcase 50:\nDELETE FROM INT4_TMP;\n--Testcase 91:\nINSERT INTO INT4_TMP VALUES (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1);\n--Testcase 92:\nSELECT f1 as ten FROM INT4_TMP;\n\n--Testcase 51:\nDELETE FROM INT4_TMP;\n--Testcase 93:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 94:\nSELECT f1 + f1/f2 as three FROM INT4_TMP;\n\n--Testcase 52:\nDELETE FROM INT4_TMP;\n--Testcase 95:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 96:\nSELECT (f1 + f2)/f2 as two FROM INT4_TMP;\n\n-- corner case\n--Testcase 54:\nDELETE FROM INT4_TMP;\n--Testcase 97:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 98:\nSELECT (f1<<31)::text FROM INT4_TMP;\n\n--Testcase 56:\nDELETE FROM INT4_TMP;\n--Testcase 99:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 100:\nSELECT ((f1<<31)+1)::text FROM INT4_TMP;\n\n-- check sane handling of INT_MIN overflow cases\n--Testcase 58:\nDELETE FROM INT4_TMP;\n--Testcase 101:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int4);\n--Testcase 102:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 103:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 104:\nSELECT f1 % f2 FROM INT4_TMP;\n\n--Testcase 60:\nDELETE FROM INT4_TMP;\n--Testcase 105:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int2);\n--Testcase 106:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 107:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 108:\nSELECT f1 % f2 FROM INT4_TMP;\n\n-- check rounding when casting from float\n--Testcase 109:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 110:\nDELETE FROM FLOAT8_TMP;\n--Testcase 111:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 112:\nSELECT f1 as x, f1::int4 as int4_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 113:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 114:\nDELETE FROM NUMERIC_TMP;\n--Testcase 115:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 116:\nSELECT f1 as x, f1::int4 as int4_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 117:\nDELETE FROM INT4_TMP;\n--Testcase 118:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 6410818::int4),\n             (61866666::int4, 6410818::int4),\n             (-61866666::int4, 6410818::int4),\n             ((-2147483648)::int4, 1::int4),\n             ((-2147483648)::int4, 2147483647::int4),\n             ((-2147483648)::int4, 1073741824::int4);\n--Testcase 119:\nSELECT f1, f2, gcd(f1, f2), gcd(f1, -f2), gcd(f2, f1), gcd(-f2, f1) FROM INT4_TMP;\n\n--Testcase 120:\nDELETE FROM INT4_TMP;\n--Testcase 121:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 0::int4);\n--Testcase 122:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 123:\nDELETE FROM INT4_TMP;\n--Testcase 124:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-2147483648)::int4);\n--Testcase 125:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n-- test lcm()\n--Testcase 126:\nDELETE FROM INT4_TMP;\n--Testcase 127:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 42::int4),\n             (42::int4, 42::int4),\n             (330::int4, 462::int4),\n             (-330::int4, 462::int4),\n             ((-2147483648)::int4, 0::int4);\n--Testcase 128:\nSELECT f1, f2, lcm(f1, f2), lcm(f1, -f2), lcm(f2, f1), lcm(-f2, f1) FROM INT4_TMP;\n\n--Testcase 129:\nDELETE FROM INT4_TMP;\n--Testcase 130:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 1::int4);\n--Testcase 131:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 132:\nDELETE FROM INT4_TMP;\n--Testcase 133:\nINSERT INTO INT4_TMP VALUES (2147483647::int4, 2147483646::int4);\n--Testcase 134:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 137:\nDELETE FROM INT4_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 135:\nDROP SERVER sqlite_svr;\n--Testcase 136:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/int8.sql",
    "content": "--\n-- INT8\n-- Test int8 64-bit integers.\n--\n--Testcase 140:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 141:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 142:\nCREATE FOREIGN TABLE INT8_TBL(\n\tq1 int8 OPTIONS (key 'true'),\n\tq2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 143:\nCREATE FOREIGN TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4, \n\tq4 int2,\n\tq5 text,\n\tid int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 2:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 3:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 4:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 5:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n-- bad inputs\n--Testcase 6:\nINSERT INTO INT8_TBL(q1) VALUES ('      ');\n--Testcase 7:\nINSERT INTO INT8_TBL(q1) VALUES ('xxx');\n--Testcase 8:\nINSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');\n--Testcase 9:\nINSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');\n--Testcase 10:\nINSERT INTO INT8_TBL(q1) VALUES ('- 123');\n--Testcase 11:\nINSERT INTO INT8_TBL(q1) VALUES ('  345     5');\n--Testcase 12:\nINSERT INTO INT8_TBL(q1) VALUES ('');\n\n--Testcase 13:\nSELECT * FROM INT8_TBL;\n\n-- int8/int8 cmp\n--Testcase 14:\nSELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;\n--Testcase 15:\nSELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;\n--Testcase 16:\nSELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;\n--Testcase 17:\nSELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;\n--Testcase 18:\nSELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;\n--Testcase 19:\nSELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;\n\n-- int8/int4 cmp\n--Testcase 20:\nSELECT * FROM INT8_TBL WHERE q2 = 456;\n--Testcase 21:\nSELECT * FROM INT8_TBL WHERE q2 <> 456;\n--Testcase 22:\nSELECT * FROM INT8_TBL WHERE q2 < 456;\n--Testcase 23:\nSELECT * FROM INT8_TBL WHERE q2 > 456;\n--Testcase 24:\nSELECT * FROM INT8_TBL WHERE q2 <= 456;\n--Testcase 25:\nSELECT * FROM INT8_TBL WHERE q2 >= 456;\n\n-- int4/int8 cmp\n--Testcase 26:\nSELECT * FROM INT8_TBL WHERE 123 = q1;\n--Testcase 27:\nSELECT * FROM INT8_TBL WHERE 123 <> q1;\n--Testcase 28:\nSELECT * FROM INT8_TBL WHERE 123 < q1;\n--Testcase 29:\nSELECT * FROM INT8_TBL WHERE 123 > q1;\n--Testcase 30:\nSELECT * FROM INT8_TBL WHERE 123 <= q1;\n--Testcase 31:\nSELECT * FROM INT8_TBL WHERE 123 >= q1;\n\n-- int8/int2 cmp\n--Testcase 32:\nSELECT * FROM INT8_TBL WHERE q2 = '456'::int2;\n--Testcase 33:\nSELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;\n--Testcase 34:\nSELECT * FROM INT8_TBL WHERE q2 < '456'::int2;\n--Testcase 35:\nSELECT * FROM INT8_TBL WHERE q2 > '456'::int2;\n--Testcase 36:\nSELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;\n--Testcase 37:\nSELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;\n\n-- int2/int8 cmp\n--Testcase 38:\nSELECT * FROM INT8_TBL WHERE '123'::int2 = q1;\n--Testcase 39:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;\n--Testcase 40:\nSELECT * FROM INT8_TBL WHERE '123'::int2 < q1;\n--Testcase 41:\nSELECT * FROM INT8_TBL WHERE '123'::int2 > q1;\n--Testcase 42:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;\n--Testcase 43:\nSELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;\n\n\n--Testcase 44:\nSELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;\n\n--Testcase 45:\nSELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;\n--Testcase 46:\nSELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;\n--Testcase 47:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;\n--Testcase 48:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL\n WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);\n--Testcase 49:\nSELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;\n\n--Testcase 50:\nSELECT q1, float8(q1) FROM INT8_TBL;\n--Testcase 51:\nSELECT q2, float8(q2) FROM INT8_TBL;\n\n--Testcase 52:\nSELECT 37 + q1 AS plus4 FROM INT8_TBL;\n--Testcase 53:\nSELECT 37 - q1 AS minus4 FROM INT8_TBL;\n--Testcase 54:\nSELECT 2 * q1 AS \"twice int4\" FROM INT8_TBL;\n--Testcase 55:\nSELECT q1 * 2 AS \"twice int4\" FROM INT8_TBL;\n\n-- int8 op int4\n--Testcase 56:\nSELECT q1 + 42::int4 AS \"8plus4\", q1 - 42::int4 AS \"8minus4\", q1 * 42::int4 AS \"8mul4\", q1 / 42::int4 AS \"8div4\" FROM INT8_TBL;\n-- int4 op int8\n--Testcase 57:\nSELECT 246::int4 + q1 AS \"4plus8\", 246::int4 - q1 AS \"4minus8\", 246::int4 * q1 AS \"4mul8\", 246::int4 / q1 AS \"4div8\" FROM INT8_TBL;\n\n-- int8 op int2\n--Testcase 58:\nSELECT q1 + 42::int2 AS \"8plus2\", q1 - 42::int2 AS \"8minus2\", q1 * 42::int2 AS \"8mul2\", q1 / 42::int2 AS \"8div2\" FROM INT8_TBL;\n-- int2 op int8\n--Testcase 59:\nSELECT 246::int2 + q1 AS \"2plus8\", 246::int2 - q1 AS \"2minus8\", 246::int2 * q1 AS \"2mul8\", 246::int2 / q1 AS \"2div8\" FROM INT8_TBL;\n\n--Testcase 60:\nSELECT q2, abs(q2) FROM INT8_TBL;\n--Testcase 61:\nSELECT min(q1), min(q2) FROM INT8_TBL;\n--Testcase 62:\nSELECT max(q1), max(q2) FROM INT8_TBL;\n\n\n-- TO_CHAR()\n--\n--Testcase 63:\nSELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')\n\tFROM INT8_TBL;\n\n--Testcase 64:\nSELECT to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')\n\tFROM INT8_TBL;\n\n--Testcase 65:\nSELECT to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')\n\tFROM INT8_TBL;\n\n--Testcase 66:\nSELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')\n\tFROM INT8_TBL;\n\n--Testcase 67:\nSELECT to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;\n--Testcase 68:\nSELECT to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;\n--Testcase 69:\nSELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;\n--Testcase 70:\nSELECT to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;\n--Testcase 71:\nSELECT to_char(q2, '0999999999999999')       FROM INT8_TBL;\n--Testcase 72:\nSELECT to_char(q2, 'S0999999999999999')      FROM INT8_TBL;\n--Testcase 73:\nSELECT to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;\n--Testcase 74:\nSELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;\n--Testcase 75:\nSELECT to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;\n--Testcase 76:\nSELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;\n--Testcase 77:\nSELECT to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;\n--Testcase 78:\nSELECT to_char(q2, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM INT8_TBL;\n--Testcase 79:\nSELECT to_char(q2, '999999SG9999999999')     FROM INT8_TBL;\n\n-- check min/max values and overflow behavior\n--Testcase 80:\nDELETE FROM INT8_TMP;\n--Testcase 144:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 145:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 81:\nDELETE FROM INT8_TMP;\n--Testcase 146:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775809'::int8);\n--Testcase 147:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 82:\nDELETE FROM INT8_TMP;\n--Testcase 148:\nINSERT INTO INT8_TMP VALUES ('9223372036854775807'::int8);\n--Testcase 149:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 83:\nDELETE FROM INT8_TMP;\n--Testcase 150:\nINSERT INTO INT8_TMP VALUES ('9223372036854775808'::int8);\n--Testcase 151:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 84:\nDELETE FROM INT8_TMP;\n--Testcase 152:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775807'::int8));\n--Testcase 153:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 86:\nDELETE FROM INT8_TMP;\n--Testcase 154:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775808'::int8));\n--Testcase 155:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 87:\nDELETE FROM INT8_TMP;\n--Testcase 156:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 157:\nSELECT q1 + q2 FROM INT8_TMP;\n--Testcase 88:\nDELETE FROM INT8_TMP;\n--Testcase 158:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 159:\nSELECT q1 + q2 FROM INT8_TMP;\n\n--Testcase 89:\nDELETE FROM INT8_TMP;\n--Testcase 160:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 161:\nSELECT q1-q2 FROM INT8_TMP;\n--Testcase 90:\nDELETE FROM INT8_TMP;\n--Testcase 162:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 163:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 91:\nDELETE FROM INT8_TMP;\n--Testcase 164:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 165:\nSELECT q1 * q2 FROM INT8_TMP;\n\n--Testcase 92:\nDELETE FROM INT8_TMP;\n--Testcase 166:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 167:\nSELECT q1 / q2 FROM INT8_TMP;\n\n--Testcase 93:\nDELETE FROM INT8_TMP;\n--Testcase 168:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 169:\nSELECT q1 % q2 FROM INT8_TMP;\n\n--Testcase 94:\nDELETE FROM INT8_TMP;\n--Testcase 170:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 171:\nSELECT abs(q1) FROM INT8_TMP;\n\n--Testcase 95:\nDELETE FROM INT8_TMP;\n--Testcase 172:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 173:\nSELECT q1 + q3 FROM INT8_TMP;\n--Testcase 96:\nDELETE FROM INT8_TMP;\n--Testcase 174:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('-9223372036854775800'::int8 , '100'::int4);\n--Testcase 175:\nSELECT q1 - q3 FROM INT8_TMP;\n--Testcase 97:\nDELETE FROM INT8_TMP;\n--Testcase 176:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 177:\nSELECT q1 * q3 FROM INT8_TMP;\n\n--Testcase 98:\nDELETE FROM INT8_TMP;\n--Testcase 178:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 179:\nSELECT q3 + q1 FROM INT8_TMP;\n--Testcase 99:\nDELETE FROM INT8_TMP;\n--Testcase 180:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('-100'::int4 , '9223372036854775800'::int8);\n--Testcase 181:\nSELECT q3 - q1 FROM INT8_TMP;\n--Testcase 100:\nDELETE FROM INT8_TMP;\n--Testcase 182:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 183:\nSELECT q3 * q1 FROM INT8_TMP;\n\n--Testcase 101:\nDELETE FROM INT8_TMP;\n--Testcase 184:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 185:\nSELECT q1 + q4 FROM INT8_TMP;\n--Testcase 102:\nDELETE FROM INT8_TMP;\n--Testcase 186:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775800'::int8 , '100'::int2);\n--Testcase 187:\nSELECT q1 - q4 FROM INT8_TMP;\n--Testcase 103:\nDELETE FROM INT8_TMP;\n--Testcase 188:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 189:\nSELECT q1 * q4 FROM INT8_TMP;\n--Testcase 104:\nDELETE FROM INT8_TMP;\n--Testcase 190:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775808'::int8 , '0'::int2);\n--Testcase 191:\nSELECT q1 / q4 FROM INT8_TMP;\n\n--Testcase 105:\nDELETE FROM INT8_TMP;\n--Testcase 192:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 193:\nSELECT q4 + q1 FROM INT8_TMP;\n--Testcase 106:\nDELETE FROM INT8_TMP;\n--Testcase 194:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('-100'::int2 , '9223372036854775800'::int8);\n--Testcase 195:\nSELECT q4 - q1 FROM INT8_TMP;\n--Testcase 107:\nDELETE FROM INT8_TMP;\n--Testcase 196:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 197:\nSELECT q4 * q1 FROM INT8_TMP;\n--Testcase 108:\nDELETE FROM INT8_TMP;\n--Testcase 198:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '0'::int8);\n--Testcase 199:\nSELECT q4 / q1 FROM INT8_TMP;\n\n--Testcase 110:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;\n--Testcase 111:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 112:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;\n--Testcase 113:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 200:\nDELETE FROM INT8_TMP;\n--Testcase 201:\nINSERT INTO INT8_TMP(q5) VALUES ('42'), ('-37');\n--Testcase 202:\nSELECT CAST(q5::int2 as int8) FROM INT8_TMP;\n\n--Testcase 114:\nSELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;\n\n--Testcase 203:\nDELETE FROM INT8_TMP;\n--Testcase 204:\nINSERT INTO INT8_TMP(q5) VALUES ('36854775807.0');\n--Testcase 205:\nSELECT CAST(q5::float4 AS int8) FROM INT8_TMP;\n\n--Testcase 206:\nDELETE FROM INT8_TMP;\n--Testcase 207:\nINSERT INTO INT8_TMP(q5) VALUES ('922337203685477580700.0');\n--Testcase 208:\nSELECT CAST(q5::float8 AS int8) FROM INT8_TMP;\n\n--Testcase 115:\nSELECT CAST(q1 AS oid) FROM INT8_TBL;\n--Testcase 209:\nSELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';\n\n-- bit operations\n\n--Testcase 116:\nSELECT q1, q2, q1 & q2 AS \"and\", q1 | q2 AS \"or\", q1 # q2 AS \"xor\", ~q1 AS \"not\" FROM INT8_TBL;\n--Testcase 117:\nSELECT q1, q1 << 2 AS \"shl\", q1 >> 3 AS \"shr\" FROM INT8_TBL;\n\n\n-- generate_series\n\n--Testcase 118:\nDELETE FROM INT8_TMP;\n--Testcase 210:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8) q1;\n--Testcase 211:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 120:\nDELETE FROM INT8_TMP;\n--Testcase 212:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0) q1; -- should error\n--Testcase 213:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 122:\nDELETE FROM INT8_TMP;\n--Testcase 214:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2) q1;\n--Testcase 215:\nSELECT q1 FROM INT8_TMP;\n\n-- corner case\n--Testcase 216:\nDELETE FROM INT8_TMP;\n--Testcase 217:\nINSERT INTO INT8_TMP VALUES (-1::int8<<63);\n--Testcase 218:\nSELECT q1::text FROM INT8_TMP;\n\n--Testcase 219:\nDELETE FROM INT8_TMP;\n--Testcase 220:\nINSERT INTO INT8_TMP VALUES ((-1::int8<<63)+1);\n--Testcase 221:\nSELECT q1::text FROM INT8_TMP;\n\n-- check sane handling of INT64_MIN overflow cases\n--Testcase 125:\nDELETE FROM INT8_TMP;\n--Testcase 222:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int8, 888);\n--Testcase 126:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int8, 888);\n--Testcase 127:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int8, 888);\n--Testcase 128:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 129:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 130:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int4, 888);\n--Testcase 131:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int4, 888);\n--Testcase 132:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int4, 888);\n--Testcase 133:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 134:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 135:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int2, 888);\n--Testcase 136:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int2, 888);\n--Testcase 137:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int2, 888);\n--Testcase 138:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 139:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n\n-- check rounding when casting from float\n--Testcase 223:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 224:\nDELETE FROM FLOAT8_TMP;\n--Testcase 225:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 226:\nSELECT f1 as x, f1::int8 as int8_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 227:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 228:\nDELETE FROM NUMERIC_TMP;\n--Testcase 229:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 230:\nSELECT f1 as x, f1::int8 as int8_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 231:\nDELETE FROM INT8_TMP;\n--Testcase 232:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 1::int8),\n             ((-9223372036854775808)::int8, 9223372036854775807::int8),\n             ((-9223372036854775808)::int8, 4611686018427387904::int8);\n--Testcase 233:\nSELECT q1, q2, gcd(q1, q2), gcd(q1, -q2), gcd(q2, q1), gcd(-q2, q1) FROM INT8_TMP;\n\n--Testcase 234:\nDELETE FROM INT8_TMP;\n--Testcase 235:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 0::int8);\n--Testcase 236:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 237:\nDELETE FROM INT8_TMP;\n--Testcase 238:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, (-9223372036854775808)::int8);\n--Testcase 239:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n-- test lcm()\n--Testcase 240:\nDELETE FROM INT8_TMP;\n--Testcase 241:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (29893644334::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 0::int8);\n--Testcase 242:\nSELECT q1, q2, lcm(q1, q2), lcm(q1, -q2), lcm(q2, q1), lcm(-q2, q1) FROM INT8_TMP;\n\n--Testcase 243:\nDELETE FROM INT8_TMP;\n--Testcase 244:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 1::int8);\n--Testcase 245:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 246:\nDELETE FROM INT8_TMP;\n--Testcase 247:\nINSERT INTO INT8_TMP VALUES ((9223372036854775807)::int8, (9223372036854775806)::int8);\n--Testcase 248:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 251:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 249:\nDROP SERVER sqlite_svr;\n--Testcase 250:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/json.sql",
    "content": "-- SET log_min_messages TO DEBUG3;\n-- SET client_min_messages TO DEBUG3;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 010:\nCREATE FOREIGN TABLE \"type_JSON\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" json,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" json\n) SERVER sqlite_svr OPTIONS (table 'type_JSON');\n--Testcase 011:\nCREATE FOREIGN TABLE \"type_JSONB\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB');\n--Testcase 012:\nCREATE FOREIGN TABLE \"type_JSONB+\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tl int, t varchar(16), tx text,\t\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB+');\n\n--Testcase 013:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, ot1, oi, oi1) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}],\"a+u\":47,\"5\":true,\"cc3\":[\"a\", \"b\", \"c\"], \"c3\":[true, false]}',\n'c', 'c3', 2, 1),\n(2, '[11,22,33,44,55,66,77,88,99,10,11,12,13,14]',\n'1', '29', 3, 1),\n(3, '{\"a\":\"xyz\", \"π\":3.1415926535, \"aπ\":false }',\n'a', 'π', 1, NULL),\n(4, '{\"a\":null, \"a22\":22.0, \"a2\":2 }',\n'a', '22', 4, NULL),\n(5, '[9,null,7,6,5,4,3,2,1,0]',\n'1', '5', -4, 5),\n(6, '[0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,null,true]',\n'1', '21', -2, 5);\n\n--Testcase 014:\nINSERT INTO \"type_JSONB\" SELECT * FROM \"type_JSON\";\n--Testcase 015: check some SQLite JSONb initial bytes\nSELECT i, tx FROM \"type_JSONB+\";\n\n--Testcase 020:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 021: SQLite queries to type_JSON will be without normalization for j column\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\n--Testcase 022:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n\n--Testcase 023:\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 024:\nSELECT \"i\", \"j\", j.\"j\"->'a' res FROM \"type_JSON\" j;\n--Testcase 025:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 026:\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 027:\nSELECT \"i\", \"j\", j.\"j\"->'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 028:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 029:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 030:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res FROM \"type_JSON\" j;\n--Testcase 031:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 032:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 033:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 034:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 035:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 036:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'a' IS NOT NULL;\n--Testcase 037:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 038:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 039:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'a' IS NOT NULL;\n\n--Testcase 040:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 041:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 042:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 044:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 045:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n\n--Testcase 046:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 047:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 048:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSON\" j;\n--Testcase 049:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 050:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 051:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 052:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 053:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 054:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSON\" j;\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 056:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 057:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 058:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 059:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 060:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n--Testcase 061:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 062:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 063:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n\n--Testcase 064:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 065:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 066:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n--Testcase 067:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 068:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 069:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 071:\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 072:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 073:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 074:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n--Testcase 075:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 077:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 078:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 079:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 081:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 082:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 083:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 085:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 086:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n--Testcase 087:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n\n--Testcase 088:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 089:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 090:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n--Testcase 091:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 093:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 095:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n\n--Testcase 096:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 097:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 099:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n\n-- extraction with arithmetical an other expressions\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 101:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 103:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 105:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 107:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 109:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 111:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 113:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 115:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 117:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 119:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 120:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 121:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 123:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 125:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 127:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 129:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 131:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 133:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 135:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 137:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 139:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 141:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 143:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 144:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 145:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 146:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 147:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n\n--Testcase 148:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 149:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 151:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 153:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 155:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 157:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 159:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 161:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 163:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 165:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 167:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 169:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 171:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 172:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 173:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 174:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 175:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 176:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 177:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 178:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 179:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n\n\n--TCs for SQLite JSON -> format, no sense in PostgreSQL itself\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 201:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 203:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 204:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 205:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 206:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 207:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 208:\nDELETE FROM \"type_JSON\"; \n--Testcase 209:\nDELETE FROM \"type_JSONB\";\n--Testcase 210:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 211:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 212:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 213:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 214:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 215:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 216:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 217:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 218:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 219:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 220:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 221:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 222:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 223:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 224:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 225:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 226:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 227:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n-- end of SQLite right -> ->> operand test\n\n-- Operators -> ->> in SELECT context\n--Testcase 230:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n--Testcase 231:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 232:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 233:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 234:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n--Testcase 235:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 236:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 237:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 238:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n--Testcase 239:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n\n--Testcase 240:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n--Testcase 241:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 250:\nDELETE FROM \"type_JSON\"; \n--Testcase 251:\nDELETE FROM \"type_JSONB\";\n--Testcase 252:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 253:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 254:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 255:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 256:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 257:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 261:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 262:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 263:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 265\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 267:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 269:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 270:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 271:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 272:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 273\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 274:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 275:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 276:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n--Testcase 277: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n\n--Testcase 278:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n--Testcase 279:\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n\n--Testcase 280:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n--Testcase 281: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n\n--Testcase 282:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n--Testcase 283:\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n\n--Testcase 284:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n--Testcase 285: no such\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n\n--Testcase 286:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 287:\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 288:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n--Testcase 289: no such\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n\n--Testcase 290:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 291:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 292:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 293:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 294:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 295:\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 296:\nSELECT * FROM \"type_JSONB+\";\n\n--Testcase 297:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 298:\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 299:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n--Testcase 300: no such\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n\n--Multievel extraction chains\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 302:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 304:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 306:\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n--Testcase 308:\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n\n\n-- UPDATE tests\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 310:\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 311:\nSELECT * FROM \"type_JSON\" WHERE \"i\" = 1;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 313:\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 314:\nSELECT * FROM \"type_JSONB+\" WHERE \"i\" = 1;\n\n\n-- Real GIS data test, data from https://www.wikidata.org/wiki/Q118122043\n-- https://commons.wikimedia.org/wiki/Category:Private_Garden_(Pavlovsk)\n-- License of testing data in json_osm_test table: ODbL, © OpenStreetMap contributors\n--Testcase 400:\nCREATE FOREIGN TABLE json_osm_test (\n\twkt text NOT NULL,\n\tosm_type varchar(8) OPTIONS (key 'true') NOT NULL,\n\tosm_id int8 OPTIONS (key 'true') NOT NULL,\n\tt json OPTIONS (column_name 'tags') NULL,\n\tway_nodes text NULL\n) SERVER sqlite_svr;\n\n--Testcase 401:\nINSERT INTO json_osm_test VALUES ('SRID=4326;POINT(30.4536193 59.6847624)', 'node', 1198356775, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4522474 59.6851858)', 'node', 1198357028, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4532025 59.6850113)', 'node', 1738381537, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"description\": \"Ваза в дендрарии Собственного садика\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529584 59.6849417)', 'node', 3968068680, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526407 59.68497)', 'node', 4487385447, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"late C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4524943 59.6854502)', 'node', 4912270255, '{\"fee\": \"yes\", \"access\": \"customers\", \"barrier\": \"gate\", \"vehicle\": \"no\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"barrier:personnel\": \"additional\"}', NULL),\n ('SRID=4326;POINT(30.452977 59.6847621)', 'node', 7484858507, '{\"name\": \"Неизвестный мужчина\", \"ref:okn\": \"781610399040516\", \"tourism\": \"artwork\", \"alt_name\": \"Спутник Одиссея\", \"heritage\": \"2\", \"historic\": \"yes\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6522/\"}', NULL),\n ('SRID=4326;POINT(30.452909 59.6847573)', 'node', 7484858508, '{\"name\": \"Антиной\", \"ref:okn\": \"781610399040526\", \"tourism\": \"artwork\", \"alt_name\": \"Дионис\", \"heritage\": \"2\", \"historic\": \"yes\", \"material\": \"stone\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6521/\"}', NULL),\n ('SRID=4326;POINT(30.4529561 59.6848095)', 'node', 8114975053, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528946 59.6848042)', 'node', 8114975054, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528732 59.6848762)', 'node', 8114975055, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529364 59.6848802)', 'node', 8114975056, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528444 59.6851765)', 'node', 8289295956, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527798 59.6851726)', 'node', 8289295957, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528665 59.6850957)', 'node', 8289295958, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528046 59.685091)', 'node', 8289295959, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528947 59.6850172)', 'node', 8289295960, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528301 59.6850118)', 'node', 8289295961, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529101 59.6849636)', 'node', 8289295962, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528496 59.684959)', 'node', 8289295963, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528359 59.6852187)', 'node', 8331430659, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527605 59.685213)', 'node', 8331430660, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4523414 59.6851726)', 'node', 8331430663, '{\"name\": \"Сатир\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4523561 59.685141)', 'node', 8331430664, '{\"name\": \"Сатиресса\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4527994 59.6847007)', 'node', 8566916332, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4528945 59.6847497)', 'node', 8566916333, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529784 59.6853519)', 'node', 8895996426, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4529255 59.6853861)', 'node', 8895996427, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4525278 59.685471)', 'node', 8895996643, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4534153 59.6851412)', 'node', 8899249758, '{\"genus\": \"Elaeagnus\", \"taxon\": \"Elaeagnus commutata\", \"natural\": \"shrub\", \"genus:ru\": \"Лох\", \"taxon:ru\": \"Лох серебристый\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4535524 59.6848638)', 'node', 8899249764, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4535202 59.6849613)', 'node', 8899249765, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534934 59.6850486)', 'node', 8899249766, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534679 59.685136)', 'node', 8899249767, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4528899 59.6851725)', 'node', 8899249768, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530448 59.6850046)', 'node', 8899249769, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4533465 59.6850216)', 'node', 8899249770, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4532205 59.6849417)', 'node', 8899249771, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531776 59.6850839)', 'node', 8899249772, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6851265)', 'node', 8899249773, '{\"genus\": \"Malus\", \"taxon\": \"Malus niedzwetzkyana\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Яблоня\", \"taxon:ru\": \"Яблоня Недзвецкого\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533043 59.6851928)', 'node', 8899249779, '{\"height\": \"4\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.452916 59.6849894)', 'node', 8899249796, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4528248 59.684983)', 'node', 8899249797, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531527 59.685139)', 'node', 8899299127, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529549 59.6850382)', 'node', 8902082041, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530139 59.6850101)', 'node', 8902082042, '{\"genus\": \"Amelanchier\", \"taxon\": \"Amelanchier canadensis\", \"natural\": \"shrub\", \"genus:ru\": \"Ирга\", \"taxon:ru\": \"Ирга канадская\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530089 59.6850564)', 'node', 8902082048, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529982 59.685072)', 'node', 8902082055, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530213 59.6850872)', 'node', 8902082060, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529918 59.6851617)', 'node', 8902082061, '{\"genus\": \"Berberis\", \"taxon\": \"Berberis vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Барбарис\", \"taxon:ru\": \"Барбарис обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530615 59.685137)', 'node', 8902082071, '{\"genus\": \"Paeonia\", \"taxon\": \"Paeonia suffruticosa\", \"natural\": \"shrub\", \"genus:ru\": \"Пион\", \"taxon:ru\": \"Пион древовидный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531031 59.6851282)', 'node', 8902082072, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530991 59.6851451)', 'node', 8902082073, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531977 59.6851532)', 'node', 8902082074, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453207 59.6851336)', 'node', 8902082075, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532426 59.6850926)', 'node', 8902082171, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532694 59.6851157)', 'node', 8902082172, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533707 59.6851035)', 'node', 8902082173, '{\"genus\": \"Hydrangea\", \"taxon\": \"Hydrangea paniculata\", \"natural\": \"shrub\", \"genus:ru\": \"Гортензия\", \"taxon:ru\": \"Гортензия метельчатая\"}', NULL),\n ('SRID=4326;POINT(30.4528986 59.6851502)', 'node', 8902082174, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4530486 59.6848994)', 'node', 8904992674, '{\"genus\": \"Viburnum\", \"taxon\": \"Viburnum opulus\", \"natural\": \"shrub\", \"genus:ru\": \"Калина\", \"taxon:ru\": \"Калина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532396 59.6848373)', 'node', 8905335421, '{\"genus\": \"Corylus\", \"taxon\": \"Corylus avellana\", \"natural\": \"shrub\", \"genus:ru\": \"Лещина\", \"taxon:ru\": \"Лещина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532946 59.684841)', 'node', 8905335422, '{\"genus\": \"Spiraea\", \"taxon\": \"Spiraea chamaedryfolia\", \"natural\": \"shrub\", \"genus:ru\": \"Спирея\", \"taxon:ru\": \"Спирея дубравколистная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533857 59.6849271)', 'node', 8905335423, '{\"genus\": \"Euonymus\", \"taxon\": \"Euonymus europaeus\", \"natural\": \"shrub\", \"genus:ru\": \"Бересклет\", \"taxon:ru\": \"Бересклет европейский\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6849004)', 'node', 8905335424, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus sachalinensis\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Вишня\", \"taxon:ru\": \"Вишня сахалинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533998 59.6848611)', 'node', 8905335425, '{\"genus\": \"Buxus\", \"taxon\": \"Buxus sempervirens\", \"height\": \"1\", \"natural\": \"shrub\", \"genus:ru\": \"Самшит\", \"taxon:ru\": \"Самшит вечнозелёный\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4534776 59.6848679)', 'node', 8905335426, '{\"genus\": \"Rhamnus\", \"taxon\": \"Rhamnus cathartica\", \"height\": \"4\", \"natural\": \"tree\", \"genus:ru\": \"Жостер\", \"taxon:ru\": \"Жостер слабительный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534324 59.6849515)', 'node', 8905335427, '{\"genus\": \"Lonicera\", \"taxon\": \"Lonicera caerulea\", \"natural\": \"shrub\", \"genus:ru\": \"Жимолость\", \"taxon:ru\": \"Жимолость синяя\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453365 59.684981)', 'node', 8905335428, '{\"genus\": \"Philadelphus\", \"taxon\": \"Philadelphus coronarius\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник венечный\"}', NULL),\n ('SRID=4326;POINT(30.4533874 59.6849671)', 'node', 8905335429, '{\"genus\": \"Juniperus\", \"taxon\": \"Juniperus sabina\", \"height\": \"0.5\", \"natural\": \"shrub\", \"genus:ru\": \"Можжевельник\", \"taxon:ru\": \"Можжевельник казацкий\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4531319 59.6849356)', 'node', 8905335430, '{\"genus\": \"Picea\", \"taxon\": \"Picea abies\", \"height\": \"0.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель европейская\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532466 59.6848527)', 'node', 8905335431, '{\"genus\": \"Ginkgo\", \"taxon\": \"Ginkgo biloba\", \"height\": \"2.5\", \"natural\": \"tree\", \"genus:ru\": \"Гингко\", \"taxon:ru\": \"Гинкго двулопастный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"label\"}', NULL),\n ('SRID=4326;POINT(30.4532184 59.6848635)', 'node', 8905335468, '{\"genus\": \"Daphne\", \"taxon\": \"Daphne mezereum\", \"natural\": \"shrub\", \"genus:ru\": \"Волчеягодник\", \"taxon:ru\": \"Волчеягодник обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532392 59.6848902)', 'node', 8905335469, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526679 59.6846912)', 'node', 8905558225, '{\"height\": \"3\", \"highway\": \"street_lamp\", \"man_made\": \"surveillance\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530347 59.6849253)', 'node', 8906857477, '{\"genus\": \"Philadelphus lemoinei\", \"taxon\": \"Philadelphus lemoinei\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник Лемуана\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530224 59.6849455)', 'node', 8906857478, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530015 59.6847554)', 'node', 8906857479, '{\"natural\": \"tree_stump\"}', NULL),\n ('SRID=4326;LINESTRING(30.4522584 59.6851734,30.4522474 59.6851858)', 'way', 103807093, '{\"highway\": \"footway\", \"surface\": \"compacted\"}', '{3968068679,1198357028}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525041 59.6846527,30.4522364 59.6845601,30.4516531 59.6843525,30.4513385 59.6842533,30.4513511 59.6841667)', 'way', 103807103, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{8566824024,12023699867,8114975022,1195141497,4014269128,3186425168}'),\n ('SRID=4326;LINESTRING(30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456)', 'way', 103807114, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{1198357004,303515662,8566916345,1198356771,8566916346,1198356889,1198357009,8906857470}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529382 59.6847803,30.4528051 59.6851927,30.4527793 59.6852746,30.4527609 59.6853349,30.4527422 59.6853961,30.4527263 59.6854482,30.4527224 59.6854618)', 'way', 153761053, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068681,8114975050,8114975107,8895975844,8895975845,8895975847,4912270253,1664064412}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4532459 59.6852254,30.45322 59.6852491)', 'way', 153761054, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975105,3968068669}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4528762 59.6851274,30.4530118 59.6851874)', 'way', 153947121, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381541,1665582246}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4529574 59.6848702,30.4531238 59.6848204)', 'way', 153947122, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1738381532,1665582234}'),\n ('SRID=4326;LINESTRING(30.4533888 59.6848413,30.4535109 59.6849058,30.4534919 59.684967)', 'way', 153947123, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582235,1738381534,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533267 59.6852228,30.4533391 59.6851996,30.4533483 59.6851876,30.4533556 59.6851828,30.4533653 59.6851769,30.4533784 59.6851717,30.4533901 59.6851678,30.4534147 59.6851629,30.4534315 59.6851615,30.4534524 59.6850941)', 'way', 153947124, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975034,8899249793,8114975035,8902027910,8899249794,8902027909,8899249795,1738381544,8114975036,1665582244}'),\n ('SRID=4326;LINESTRING(30.4531795 59.685129,30.4533062 59.6850846,30.4534722 59.6850303,30.4534919 59.684967)', 'way', 153947125, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975075,1665582243,1738381539,1665582240}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4530483 59.6850678,30.4529356 59.6849912)', 'way', 153947126, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,1665582242,8902082170}'),\n ('SRID=4326;LINESTRING(30.4529356 59.6849912,30.4530873 59.6849398,30.453213 59.6848988)', 'way', 153947127, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8902082170,1665582238,8904992643}'),\n ('SRID=4326;LINESTRING(30.4532598 59.6849025,30.4533508 59.6849575,30.4534722 59.6850303,30.4534524 59.6850941)', 'way', 153947128, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992648,1665582239,1738381539,1665582244}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4531238 59.6848204,30.4533888 59.6848413,30.4535282 59.6848524)', 'way', 153947130, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1665582234,1665582235,1665582236}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4530873 59.6849398,30.4532201 59.6849487,30.4533508 59.6849575,30.4534919 59.684967)', 'way', 153947131, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1665582238,8902082149,1665582239,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533062 59.6850846,30.4533306 59.6850189,30.4533508 59.6849575,30.4533888 59.6848413)', 'way', 153947132, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,1665582243,8902082150,1665582239,1665582235}'),\n ('SRID=4326;LINESTRING(30.4534524 59.6850941,30.4533062 59.6850846,30.4531801 59.6850762,30.4530483 59.6850678,30.452898 59.6850578)', 'way', 153947133, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582244,1665582243,8902082168,1665582242,1665582241}'),\n ('SRID=4326;LINESTRING(30.4532234 59.6850226,30.4533062 59.6850846,30.4534147 59.6851629)', 'way', 153947134, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975088,1665582243,1738381544}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4530483 59.6850678,30.4530675 59.6850048,30.4530873 59.6849398,30.4531238 59.6848204)', 'way', 153947135, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,1665582242,8902082151,1665582238,1665582234}'),\n ('SRID=4326;LINESTRING(30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858)', 'way', 312745383, '{\"barrier\": \"fence\"}', '{1439053672,4912270255,4438910482,8895996664,4438910480,3234125031,4438910477,8893386635,4438910475,8895996665,4438910473,8114975112,8114975111,1198357028}'),\n ('SRID=4326;LINESTRING(30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554)', 'way', 315626926, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053649,8895996432,8895996430,1439053648,1439053645,8895996431,1439053641,1439053639}'),\n ('SRID=4326;LINESTRING(30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577)', 'way', 317173782, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{1653641713,8114975028,8114975027,8566824024}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.4526304 59.6847065,30.4529536 59.6847313,30.453482 59.6847765,30.4535921 59.6847856,30.4535778 59.6848316,30.4534654 59.685163)', 'way', 393601662, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774427,8905543616,3968068681,7927774426,3968068674,8114975049,3968068687}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4530118 59.6851874,30.4532501 59.6852048,30.4532657 59.6852057)', 'way', 393601664, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1665582246,8899299159,1665582248}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4528762 59.6851274,30.4530483 59.6850678,30.4531752 59.6850205)', 'way', 393601667, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1738381541,1665582242,8114975100}'),\n ('SRID=4326;LINESTRING(30.452545 59.6854429,30.4525305 59.6854105,30.4525224 59.6853929,30.4525133 59.6853758,30.4525036 59.6853597,30.4524909 59.6853438,30.4524775 59.6853279,30.4524583 59.6853083,30.4524437 59.6852938,30.4524165 59.6852717,30.4523957 59.6852568,30.452375 59.6852427,30.4523461 59.6852243,30.4523179 59.6852068)', 'way', 393620818, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975116,8895996660,8895996640,4438927787,8895996641,8895996659,8895996642,4438927782,8114975115,8895996661,8895996639,4438927777,8895996638,8114975114}'),\n ('SRID=4326;LINESTRING(30.45322 59.6852491,30.4530263 59.6852336,30.4529402 59.6852275,30.4528645 59.6852217)', 'way', 393620820, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068669,8895975857,8895975877,8895975841}'),\n ('SRID=4326;LINESTRING(30.4527686 59.6854977,30.4528746 59.6855048)', 'way', 446650486, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053671,1439053674}'),\n ('SRID=4326;LINESTRING(30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905)', 'way', 446650506, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053619,8914843795,8895996424,8914843796,1439053616,8914843797,8895996423,8914843798,1439053613,8914843799,8895996422,8895996441,8914843802,8895996421,8914843801,1439053611,8914843800,8895996420,1439053614}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522278 59.6851794)', 'way', 446651403, '{\"barrier\": \"fence\"}', '{1198357028,1653641713}'),\n ('SRID=4326;LINESTRING(30.4524943 59.6854502,30.452545 59.6854429,30.4525879 59.6854383,30.4527263 59.6854482,30.4528729 59.6854587)', 'way', 500077282, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{4912270255,8114975116,4438928092,4912270253,4438928093}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522167 59.6853009)', 'way', 758868053, '{\"highway\": \"footway\"}', '{1198357028,1406921754}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529562 59.6847243)', 'way', 849729200, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068681,8905543615}'),\n ('SRID=4326;LINESTRING(30.453482 59.6847765,30.4534851 59.684767)', 'way', 849729201, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774426,8905543614}'),\n ('SRID=4326;LINESTRING(30.452599 59.6846895,30.4525675 59.6846756,30.45256 59.6846723,30.452568 59.6846486,30.4535014 59.6847265,30.4534976 59.6847368)', 'way', 849729202, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068677,12023732269,8566916344,8566916343,8566916342,7927774425}'),\n ('SRID=4326;LINESTRING(30.4528543 59.6851747,30.4529071 59.6850026,30.4529249 59.685004,30.4529333 59.6849769,30.452917 59.6849756,30.4529721 59.6847963)', 'way', 871154683, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8114975041,8899249805,8899249804,8899249803,8899249802,8114975042}'),\n ('SRID=4326;LINESTRING(30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274,30.4526587 59.6847165)', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8114975046,8114975047,8906857474,8906857473,8114975046}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4531264 59.6851489)', 'way', 871154687, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,8114975076}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257)', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,8114975073,8114975074,8114975057,8114975058,8114975059,8114975075,8114975060,8114975061,8114975067,8114975068,8114975069,8114975077,8114975070,8114975062,8114975063,8114975064,8114975076,8114975065,8114975066,8114975071,8114975072,8114975078}'),\n ('SRID=4326;LINESTRING(30.4532501 59.6852048,30.4531713 59.6851525)', 'way', 871154689, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8899299159,8114975077}'),\n ('SRID=4326;LINESTRING(30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998)', 'way', 871154691, '{\"highway\": \"footway\"}', '{8114975097,8114975079,8114975080,8114975081,8114975082,8114975083,8114975099,8114975084,8114975085,8114975086,8114975087,8114975088,8114975089,8114975090,8114975091,8114975092,8114975100,8114975093,8114975094,8114975095,8114975096,8114975097}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4529574 59.6848702,30.4530873 59.6849398,30.4531787 59.684998)', 'way', 871154694, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1738381532,1665582238,8114975097}'),\n ('SRID=4326;LINESTRING(30.4532281 59.6850005,30.4533508 59.6849575,30.4535109 59.6849058,30.4535282 59.6848524)', 'way', 871154695, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975099,1665582239,1738381534,1665582236}'),\n ('SRID=4326;LINESTRING(30.4532459 59.6852254,30.4528051 59.6851927,30.4522785 59.6851511)', 'way', 871154698, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8114975105,8114975107,8114975109}'),\n ('SRID=4326;LINESTRING(30.4526095 59.6853751,30.4526201 59.6853832,30.4527025 59.6853899,30.4527175 59.6853841,30.4527302 59.6853414,30.4527195 59.685334,30.4526348 59.6853281,30.4526225 59.6853328,30.4526095 59.6853751)', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', '{8114975123,8114975124,8114975125,8895996607,8895996606,8114975126,8114975127,8114975181,8114975123}'),\n ('SRID=4326;LINESTRING(30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686)', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', '{8114975136,8114975137,8114975138,8114975139,8114975140,8114975141,8114975142,8114975143,8114975136}'),\n ('SRID=4326;LINESTRING(30.4525419 59.6853075,30.4525505 59.6853142,30.4526031 59.6853185,30.4526157 59.6853129,30.4526268 59.6852724,30.4526177 59.6852659,30.4525671 59.6852621,30.452555 59.6852672,30.4525419 59.6853075)', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', '{8114975144,8114975145,8114975146,8114975147,8114975148,8114975149,8114975150,8114975151,8114975144}'),\n ('SRID=4326;LINESTRING(30.4526478 59.6852554,30.4526557 59.6852612,30.452739 59.6852678,30.4527533 59.685262,30.452765 59.685222,30.4527443 59.68522,30.4527459 59.685216,30.452673 59.6852102,30.4526587 59.6852148,30.4526478 59.6852554)', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', '{8114975172,8114975173,8114975174,8114975175,8114975176,8114975177,8114975178,8114975179,8114975180,8114975172}'),\n ('SRID=4326;LINESTRING(30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', '{8129422266,8129422267,8129422268,8129422269,8129422270,8129422271,8129422272,8895996472,8129422273,8895996471,8129422266}'),\n ('SRID=4326;LINESTRING(30.4536402 59.684764,30.4536193 59.6847624,30.4536067 59.6847614)', 'way', 891865282, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{1635198216,1198356775,8289295975}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232)', 'way', 922841960, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824024,1653641402,8566824025,8566824026}'),\n ('SRID=4326;LINESTRING(30.453531 59.6847593,30.4531199 59.6847256)', 'way', 922854851, '{\"height\": \"8\", \"natural\": \"tree_row\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{5002059748,5002059751}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.452599 59.6846895)', 'way', 922854852, '{\"highway\": \"steps\"}', '{7927774427,3968068677}'),\n ('SRID=4326;LINESTRING(30.4536067 59.6847614,30.4535894 59.6847601)', 'way', 922854853, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{8289295975,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4526552 59.6847274,30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274)))', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398)))', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102)))', 'way', 871154691, '{\"highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526095 59.6853751,30.4526225 59.6853328,30.4526348 59.6853281,30.4527195 59.685334,30.4527302 59.6853414,30.4527175 59.6853841,30.4527025 59.6853899,30.4526201 59.6853832,30.4526095 59.6853751)))', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139)))', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525419 59.6853075,30.452555 59.6852672,30.4525671 59.6852621,30.4526177 59.6852659,30.4526268 59.6852724,30.4526157 59.6853129,30.4526031 59.6853185,30.4525505 59.6853142,30.4525419 59.6853075)))', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526478 59.6852554,30.4526587 59.6852148,30.452673 59.6852102,30.4527459 59.685216,30.4527443 59.68522,30.452765 59.685222,30.4527533 59.685262,30.452739 59.6852678,30.4526557 59.6852612,30.4526478 59.6852554)))', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)))', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;LINESTRING(30.4521596 59.6854203,30.4524943 59.6854502)', 'way', 961421780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8893386627,4912270255}'),\n ('SRID=4326;LINESTRING(30.4533818 59.6852214,30.4533763 59.68521)', 'way', 961717566, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053598,1439053596}'),\n ('SRID=4326;LINESTRING(30.4534979 59.6851951,30.4535038 59.6852069)', 'way', 961717567, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053589,1439053591}'),\n ('SRID=4326;LINESTRING(30.4533763 59.68521,30.4534979 59.6851951)', 'way', 961717568, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053596,1439053589}'),\n ('SRID=4326;LINESTRING(30.4527378 59.6852117,30.4526559 59.6852052,30.4525684 59.6851982,30.4524641 59.6851898,30.4522584 59.6851734)', 'way', 961717569, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975842,8895975876,8895975873,8895975858,3968068679}'),\n ('SRID=4326;LINESTRING(30.4530032 59.685292,30.453022 59.6852839,30.4530407 59.6852758,30.4530635 59.68527,30.4530877 59.685267,30.4531091 59.6852663,30.4531333 59.6852683,30.4531547 59.6852744,30.45322 59.6852491)', 'way', 961717570, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975875,8895975856,8895975855,8895975850,8895975854,8895975853,8895975852,8895975851,3968068669}'),\n ('SRID=4326;LINESTRING(30.4524419 59.6852441,30.452456 59.6851977,30.4524483 59.6851915,30.4523702 59.6851856,30.4523568 59.6851898,30.4523826 59.6852055,30.4524088 59.6852218,30.4524248 59.6852328,30.4524419 59.6852441)', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', '{8895975865,8895975864,8895975863,8895975862,8895975859,8895975861,8895975860,8895975838,8895975865}'),\n ('SRID=4326;LINESTRING(30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946)', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', '{8895975872,8895975871,8895975870,8895975869,8895975868,8895975867,8895975866,8895975872}'),\n ('SRID=4326;LINESTRING(30.4530263 59.6852336,30.4530032 59.685292,30.4529231 59.6852858,30.4527793 59.6852746,30.452638 59.6852636,30.4525513 59.6852568,30.4524466 59.6852487,30.4524641 59.6851898)', 'way', 961717573, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975857,8895975875,8895975843,8895975844,8895975848,8895975846,8895975874,8895975858}'),\n ('SRID=4326;LINESTRING(30.4529402 59.6852275,30.4529231 59.6852858,30.4529053 59.6853463,30.4528865 59.6854078)', 'way', 961717574, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975877,8895975843,8895975880,8895975878}'),\n ('SRID=4326;LINESTRING(30.4526559 59.6852052,30.452638 59.6852636,30.4526195 59.6853238,30.4526009 59.6853847,30.4527422 59.6853961,30.4528865 59.6854078)', 'way', 961717575, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975876,8895975848,8895975849,8895975879,8895975847,8895975878}'),\n ('SRID=4326;LINESTRING(30.4525684 59.6851982,30.4525513 59.6852568,30.4525338 59.685317,30.4526195 59.6853238,30.4527609 59.6853349,30.4529053 59.6853463)', 'way', 961717576, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975873,8895975846,8895975881,8895975849,8895975845,8895975880}'),\n ('SRID=4326;LINESTRING(30.4527487 59.6852082,30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082)', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', '{8895975885,8895975884,8895975883,8895975882,8895975885}'),\n ('SRID=4326;LINESTRING(30.4532064 59.6852443,30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443)', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', '{8895975889,8895975888,8895975887,8895975886,8895975889}'),\n ('SRID=4326;LINESTRING(30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696)', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', '{8895975901,8895975902,8895975900,8895975903,8895975891,8895975890,8895975901}'),\n ('SRID=4326;LINESTRING(30.4530554 59.6852658,30.4530414 59.6852392,30.453028 59.6852429,30.4530143 59.6852802,30.4530288 59.6852733,30.453041 59.6852693,30.4530554 59.6852658)', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', '{8895975898,8895975895,8895975896,8895975907,8895975897,8895975906,8895975898}'),\n ('SRID=4326;LINESTRING(30.4530632 59.6852641,30.4530782 59.6852621,30.4530921 59.6852616,30.4531031 59.6852618,30.4531172 59.6852446,30.4530501 59.6852392,30.4530632 59.6852641)', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', '{8895975905,8895975899,8895975904,8895975892,8895975893,8895975894,8895975905}'),\n ('SRID=4326;LINESTRING(30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204)', 'way', 961717582, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053627,8914843793,8895996425,8914843794,1439053619}'),\n ('SRID=4326;LINESTRING(30.4525812 59.6854845,30.4526564 59.6854895)', 'way', 961717593, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{8895996555,1439053669}'),\n ('SRID=4326;LINESTRING(30.4527747 59.6854387,30.4528506 59.685445,30.4528681 59.6854402,30.4528755 59.6854172,30.4528654 59.6854091,30.4527852 59.6854026,30.4527687 59.6854078,30.4527618 59.6854305,30.4527747 59.6854387)', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', '{8895996465,8895996464,8895996463,8895996462,8895996461,8895996460,8895996459,8895996458,8895996465}'),\n ('SRID=4326;LINESTRING(30.4525201 59.6853123,30.4525328 59.6853069,30.4525442 59.6852666,30.4525351 59.6852597,30.4524557 59.6852538,30.4524775 59.6852724,30.4524969 59.6852906,30.4525201 59.6853123)', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', '{8895996470,8895996469,8895996468,8895996467,8895996466,8895996428,8895996429,8895996470}'),\n ('SRID=4326;LINESTRING(30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969,30.4523418 59.6851889)', 'way', 961717596, '{\"landuse\": \"grass\"}', '{8895996495,8895975839,8895996483,8895996484,8895996485,8895996486,8895996487,8895996488,8895996489,8895996490,8895996491,8895996492,8895996493,8895996494,8895996496,8895996473,8895996479,8895996480,8895996474,8895996509,8895996508,8895996507,8895996506,8895996505,8895996504,8895996503,8895996502,8895996501,8895996500,8895996499,8895996498,8895996497,8895996478,8895996495}'),\n ('SRID=4326;LINESTRING(30.4523081 59.6852118,30.4522803 59.6851945,30.4522795 59.6852157,30.4523143 59.6852356,30.4523427 59.6852536,30.4523628 59.6852673,30.4523827 59.6852816,30.4524087 59.6853027,30.4524225 59.6853163,30.4524411 59.6853354,30.452454 59.6853507,30.452466 59.6853657,30.4524751 59.6853808,30.4524839 59.6853973,30.4524918 59.6854125,30.4524982 59.6854272,30.452501 59.6854325,30.4525097 59.6854362,30.4525224 59.6854348,30.4525257 59.6854303,30.4525231 59.6854242,30.4525171 59.6854097,30.4525091 59.6853943,30.4525002 59.6853776,30.4524909 59.685362,30.4524785 59.6853465,30.4524653 59.6853309,30.4524465 59.6853116,30.4524322 59.6852976,30.4524056 59.685276,30.4523853 59.6852614,30.4523649 59.6852475,30.4523362 59.6852293,30.4523081 59.6852118)', 'way', 961717597, '{\"landuse\": \"grass\"}', '{8895996522,8895996477,8895996536,8895996524,8895996525,8895996526,8895996527,8895996528,8895996529,8895996530,8895996531,8895996532,8895996533,8895996534,8895996535,8895996537,8895996482,8895996476,8895996481,8895996523,8895996475,8895996521,8895996520,8895996519,8895996518,8895996517,8895996516,8895996515,8895996514,8895996513,8895996512,8895996511,8895996510,8895996522}'),\n ('SRID=4326;LINESTRING(30.4526076 59.685425,30.4526842 59.6854313,30.4527032 59.6854269,30.4527112 59.6854034,30.4527003 59.6853955,30.4526196 59.6853891,30.4526042 59.6853942,30.4525975 59.6854176,30.4526076 59.685425)', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', '{8895996545,8895996544,8895996543,8895996542,8895996541,8895996540,8895996539,8895996538,8895996545}'),\n ('SRID=4326;LINESTRING(30.4528639 59.685494,30.4528702 59.6854731,30.4527911 59.6854671,30.4527849 59.685488,30.4528639 59.685494)', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996549,8895996548,8895996547,8895996546,8895996549}'),\n ('SRID=4326;LINESTRING(30.4526433 59.6854773,30.4526495 59.6854564,30.4525705 59.6854504,30.4525642 59.6854713,30.4526433 59.6854773)', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996553,8895996552,8895996551,8895996550,8895996553}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528709 59.6855164)', 'way', 961717601, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,8895996554}'),\n ('SRID=4326;LINESTRING(30.4529138 59.6853368,30.4529235 59.6853445,30.4529678 59.6853472,30.4529853 59.6853413,30.4529963 59.6853005,30.4529866 59.6852936,30.4529427 59.6852903,30.4529263 59.6852951,30.4529138 59.6853368)', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', '{8895996564,8895996563,8895996562,8895996561,8895996560,8895996559,8895996558,8895996557,8895996564}'),\n ('SRID=4326;LINESTRING(30.452933 59.6852753,30.4529441 59.6852838,30.4529886 59.6852873,30.453002 59.6852821,30.4530171 59.6852433,30.4530088 59.6852371,30.4529582 59.685233,30.4529444 59.6852374,30.452933 59.6852753)', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', '{8895996572,8895996571,8895996570,8895996569,8895996568,8895996567,8895996566,8895996565,8895996572}'),\n ('SRID=4326;LINESTRING(30.4525595 59.6852465,30.4525692 59.6852544,30.4526207 59.6852585,30.4526333 59.6852538,30.452645 59.6852146,30.4526353 59.6852076,30.4525847 59.6852036,30.4525709 59.685208,30.4525595 59.6852465)', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', '{8895996580,8895996579,8895996578,8895996577,8895996576,8895996575,8895996574,8895996573,8895996580}'),\n ('SRID=4326;LINESTRING(30.452817 59.6852667,30.4528288 59.6852748,30.4529066 59.6852809,30.45292 59.6852751,30.4529319 59.6852358,30.4529216 59.6852291,30.452851 59.685224,30.4528493 59.6852281,30.452831 59.6852267,30.452817 59.6852667)', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', '{8895996589,8895996588,8895996587,8895996586,8895996585,8895996584,8895996581,8895996583,8895996582,8895996589}'),\n ('SRID=4326;LINESTRING(30.4527946 59.6853272,30.4528053 59.6853349,30.4528878 59.6853416,30.4529031 59.6853359,30.4529154 59.6852941,30.4529042 59.6852874,30.4528247 59.6852816,30.4528087 59.6852864,30.4527946 59.6853272)', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', '{8895996597,8895996596,8895996595,8895996594,8895996593,8895996592,8895996591,8895996590,8895996597}'),\n ('SRID=4326;LINESTRING(30.4527745 59.6853889,30.4527865 59.6853969,30.4528677 59.6854032,30.4528839 59.6853982,30.4528953 59.6853552,30.4528845 59.6853477,30.4528052 59.6853419,30.4527899 59.6853454,30.4527745 59.6853889)', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', '{8895996605,8895996604,8895996603,8895996602,8895996601,8895996600,8895996599,8895996598,8895996605}'),\n ('SRID=4326;LINESTRING(30.452565 59.6854206,30.4525598 59.6854071,30.4525516 59.6853892,30.4525422 59.6853716,30.4525319 59.6853544,30.4525184 59.6853376,30.4525045 59.6853211,30.4524848 59.6853009,30.4524693 59.6852857,30.4524408 59.6852624,30.4524192 59.685247,30.4523979 59.6852324,30.4523685 59.6852137,30.4523402 59.6851962)', 'way', 961717608, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996623,8895996621,8895996620,8895996619,8895996618,8895996617,8895996616,8895996615,8895996614,8895996613,8895996612,8895996611,8895996610,8895996622}'),\n ('SRID=4326;LINESTRING(30.4525109 59.6854262,30.4525044 59.6854114,30.4524965 59.6853961,30.4524877 59.6853796,30.4524784 59.6853642,30.4524662 59.6853489,30.4524532 59.6853335,30.4524345 59.6853143,30.4524204 59.6853005,30.4523942 59.6852791,30.452374 59.6852647,30.4523538 59.6852509,30.4523252 59.6852327,30.4522972 59.6852153)', 'way', 961717609, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996637,8895996635,8895996634,8895996633,8895996632,8895996631,8895996630,8895996629,8895996628,8895996627,8895996626,8895996625,8895996624,8895996636}'),\n ('SRID=4326;LINESTRING(30.4523179 59.6852068,30.4522881 59.6851891,30.4522584 59.6851734,30.4522785 59.6851511,30.4525958 59.6847532,30.4529382 59.6847803,30.4535778 59.6848316)', 'way', 961717610, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975114,8895996608,3968068679,8114975109,8114975051,8114975050,8114975049}'),\n ('SRID=4326;LINESTRING(30.4527224 59.6854618,30.4527166 59.6854798)', 'way', 961717612, '{\"highway\": \"steps\", \"incline\": \"up\", \"surface\": \"paving_stones\"}', '{1664064412,8895996662}'),\n ('SRID=4326;LINESTRING(30.4534116 59.6851536,30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536)', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249763,8899249762,8899249761,8899249760,8899249759,8899249763}'),\n ('SRID=4326;LINESTRING(30.4535137 59.6851734,30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437)', 'way', 962062988, '{\"source:taxon\": \"board\"}', '{8899249777,8899249776,8899249775,8899249774}'),\n ('SRID=4326;LINESTRING(30.4534505 59.6851512,30.4535484 59.6848425)', 'way', 962062989, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8899249781,8899249780}'),\n ('SRID=4326;LINESTRING(30.4532761 59.6852013,30.4533137 59.6852128,30.453319 59.6851999,30.4533257 59.6851898,30.4533338 59.6851796,30.4533458 59.6851715,30.4533606 59.6851647,30.453378 59.6851586,30.4533941 59.6851559,30.4533211 59.6851024,30.4533083 59.6851038,30.4532761 59.6852013)', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249792,8899249791,8899249790,8899249789,8899249788,8899249787,8899249786,8899249785,8899249784,8899249783,8899249782,8899249792}'),\n ('SRID=4326;LINESTRING(30.4534315 59.6851615,30.4534654 59.685163)', 'way', 962062991, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975036,3968068687}'),\n ('SRID=4326;LINESTRING(30.45277 59.6851675,30.4528221 59.6849965,30.4528061 59.6849952,30.4528148 59.6849678,30.4528309 59.6849691,30.4528877 59.684789)', 'way', 962062992, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8899249807,8899249801,8899249800,8899249799,8899249798,8899249806}'),\n ('SRID=4326;LINESTRING(30.4530825 59.6850727,30.4530768 59.6850789,30.4531357 59.6851196,30.4531475 59.6851179,30.4531599 59.6851179,30.4531731 59.6851201,30.4531813 59.685123,30.4532721 59.6850914,30.45327 59.6850856,30.4530825 59.6850727)', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249816,8899249815,8899249814,8899249813,8899249812,8899249811,8899249810,8899249809,8899249808,8899249816}'),\n ('SRID=4326;LINESTRING(30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148)', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299126,8899299125,8899299124,8899299123,8899299122,8899299121,8899299120,8899299119,8899299118,8899299117,8899299126}'),\n ('SRID=4326;LINESTRING(30.4531566 59.6851458,30.4531627 59.6851441,30.4531665 59.6851411,30.4531672 59.6851376,30.4531645 59.6851343,30.4531591 59.685132,30.4531523 59.6851313,30.4531455 59.6851322,30.4531404 59.6851346,30.4531381 59.685138,30.4531391 59.6851415,30.4531433 59.6851444,30.4531496 59.6851459,30.4531566 59.6851458)', 'way', 962062995, '{\"landuse\": \"grass\"}', '{8899299139,8899299138,8899299137,8899299136,8899299135,8899299134,8899299133,8899299132,8899299131,8899299130,8899299129,8899299128,8899299140,8899299139}'),\n ('SRID=4326;LINESTRING(30.4531836 59.6851532,30.45325 59.6851972,30.4532587 59.6851977,30.4532923 59.6851023,30.4532804 59.6850981,30.4531914 59.68513,30.4531946 59.6851353,30.453195 59.6851401,30.4531936 59.6851444,30.45319 59.6851488,30.4531836 59.6851532)', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299150,8899299149,8899299141,8899299148,8899299142,8899299147,8899299146,8899299145,8899299144,8899299143,8899299150}'),\n ('SRID=4326;LINESTRING(30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299158,8899299157,8899299156,8899299155,8899299154,8899299153,8899299152,8899299151,8899249778,8899299158}'),\n ('SRID=4326;LINESTRING(30.4532162 59.6852145,30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145)', 'way', 962062998, '{\"landuse\": \"grass\"}', '{8899299165,8899299164,8899299163,8899299161,8899299160,8899299162,8899299165}'),\n ('SRID=4326;LINESTRING(30.4532627 59.6852077,30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077)', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', '{8902082028,8902082027,8902082026,8902082025,8902082024,8902082023,8902082022,8902082021,8902082020,8902027911,8902082019,8902082018,8902082017,8902027912,8902027916,8902027913,8902027915,8902027914,8902082028}'),\n ('SRID=4326;LINESTRING(30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082032,8902082031,8902082030,8902082029,8902082032}'),\n ('SRID=4326;LINESTRING(30.4529465 59.6849826,30.4530583 59.6849454,30.4530566 59.6849397,30.4529452 59.6849315,30.4529338 59.6849691,30.4529492 59.6849698,30.4529465 59.6849826)', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082038,8902082037,8902082036,8902082035,8902082034,8902082033,8902082038}'),\n ('SRID=4326;LINESTRING(30.4530344 59.685052,30.4530456 59.6850508,30.4530757 59.684955,30.4530662 59.6849507,30.4529465 59.6849918,30.4530344 59.685052)', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082047,8902082046,8902082045,8902082044,8902082043,8902082047}'),\n ('SRID=4326;LINESTRING(30.4529083 59.6850544,30.4530153 59.6850613,30.4530221 59.685056,30.4529398 59.6850009,30.4529378 59.6850121,30.4529184 59.6850114,30.4529083 59.6850544)', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082054,8902082053,8902082052,8902082051,8902082050,8902082049,8902082054}'),\n ('SRID=4326;LINESTRING(30.4528875 59.6851184,30.4530138 59.6850731,30.4530125 59.6850679,30.4529043 59.6850625,30.4528875 59.6851184)', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082059,8902082058,8902082057,8902082056,8902082059}'),\n ('SRID=4326;LINESTRING(30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789)', 'way', 962382766, '{\"landuse\": \"grass\"}', '{8902082065,8902082064,8902082063,8902082062,8902082065}'),\n ('SRID=4326;LINESTRING(30.4529896 59.6851748,30.4530072 59.6851719,30.4530311 59.6850841,30.4530206 59.6850798,30.4528885 59.6851275,30.4529896 59.6851748)', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082070,8902082069,8902082068,8902082067,8902082066,8902082070}'),\n ('SRID=4326;LINESTRING(30.4533332 59.6850719,30.4534612 59.68503,30.4533655 59.6849715,30.4533546 59.6849733,30.4533227 59.6850682,30.4533332 59.6850719)', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082080,8902082079,8902082078,8902082077,8902082076,8902082080}'),\n ('SRID=4326;LINESTRING(30.4533437 59.685083,30.4534444 59.6850899,30.4534619 59.6850382,30.4533411 59.685078,30.4533437 59.685083)', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082084,8902082083,8902082082,8902082081,8902082084}'),\n ('SRID=4326;LINESTRING(30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173)', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082090,8902082089,8902082088,8902082087,8902082086,8902082085,8902082090}'),\n ('SRID=4326;LINESTRING(30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113)', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082096,8902082095,8902082094,8902082093,8902082092,8902082091,8902082096}'),\n ('SRID=4326;LINESTRING(30.4532258 59.6849527,30.4532116 59.6849902,30.4532207 59.684992,30.4532298 59.6849953,30.4533219 59.6849634,30.4533191 59.6849588,30.4532258 59.6849527)', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082102,8902082101,8902082100,8902082099,8902082098,8902082097,8902082102}'),\n ('SRID=4326;LINESTRING(30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082108,8902082107,8902082106,8902082105,8902082104,8902082103,8902082108}'),\n ('SRID=4326;LINESTRING(30.4530763 59.6850024,30.4531619 59.6850065,30.4531647 59.6850018,30.4531695 59.6849976,30.4531032 59.6849548,30.453091 59.6849565,30.4530763 59.6850024)', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082109,8902082114,8902082113,8902082112,8902082111,8902082110,8902082109}'),\n ('SRID=4326;LINESTRING(30.4530716 59.6850547,30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547)', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082120,8902082119,8902082118,8902082117,8902082116,8902082115,8902082120}'),\n ('SRID=4326;LINESTRING(30.4531735 59.6850722,30.4531863 59.6850287,30.4531799 59.6850271,30.4531749 59.6850252,30.4530791 59.6850599,30.453083 59.685065,30.4531735 59.6850722)', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082126,8902082125,8902082124,8902082123,8902082122,8902082121,8902082126}'),\n ('SRID=4326;LINESTRING(30.4531903 59.6850727,30.4532727 59.6850781,30.4532816 59.6850715,30.4532223 59.6850274,30.453211 59.6850297,30.453201 59.6850303,30.4531903 59.6850727)', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082132,8902082131,8902082130,8902082129,8902082128,8902082127,8902082132}'),\n ('SRID=4326;LINESTRING(30.453206 59.6849937,30.4532201 59.6849487)', 'way', 962382778, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975081,8902082149}'),\n ('SRID=4326;LINESTRING(30.4532335 59.6850137,30.4533306 59.6850189)', 'way', 962382779, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975086,8902082150}'),\n ('SRID=4326;LINESTRING(30.4531682 59.6850102,30.4530675 59.6850048)', 'way', 962382780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975094,8902082151}'),\n ('SRID=4326;LINESTRING(30.4531253 59.6850083,30.4531256 59.6850158,30.4531288 59.6850232,30.4531349 59.6850302,30.4531434 59.6850364,30.4531543 59.6850416,30.4531669 59.6850457,30.4531809 59.6850485,30.4531957 59.6850498,30.4532107 59.6850496,30.4532253 59.685048,30.4532391 59.685045,30.4532514 59.6850406,30.4532618 59.6850352,30.4532699 59.6850288,30.4532753 59.6850217,30.4532779 59.6850143,30.4532776 59.6850067,30.4532744 59.6849993,30.4532684 59.6849924,30.4532598 59.6849862,30.453249 59.6849809,30.4532363 59.6849768,30.4532224 59.6849741,30.4532076 59.6849728,30.4531926 59.6849729,30.4531779 59.6849745,30.4531642 59.6849776,30.4531519 59.6849819,30.4531415 59.6849874,30.4531334 59.6849938,30.4531279 59.6850008,30.4531253 59.6850083)', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082167,8902082134,8902082166,8902082133,8902082165,8902082148,8902082164,8902082147,8902082163,8902082146,8902082162,8902082145,8902082161,8902082144,8902082160,8902082143,8902082159,8902082142,8902082158,8902082141,8902082157,8902082140,8902082156,8902082139,8902082155,8902082138,8902082154,8902082137,8902082153,8902082136,8902082152,8902082135,8902082167}'),\n ('SRID=4326;LINESTRING(30.4531956 59.6850267,30.4531801 59.6850762)', 'way', 962382782, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975091,8902082168}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4529124 59.6850066,30.4529307 59.6850078,30.4529356 59.6849912,30.4529412 59.6849735,30.4529245 59.6849722,30.4529389 59.6849276)', 'way', 962382783, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381535,8902082040,8902082170,8902082039,8902082169,1665582237}'),\n ('SRID=4326;LINESTRING(30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877)', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992660,8904992659,8904992658,8904992657,8904992656,8904992655,8904992654,8904992653,8904992652,8904992651,8904992650,8904992649,8904992648,8904992647,8904992646,8904992645,8904992644,8904992643,8904992642,8904992641,8904992640,8904992639,8904992660}'),\n ('SRID=4326;LINESTRING(30.4532432 59.6848971,30.4532493 59.6848954,30.4532531 59.6848924,30.4532538 59.6848889,30.4532511 59.6848856,30.4532457 59.6848833,30.4532389 59.6848826,30.4532321 59.6848835,30.453227 59.684886,30.4532247 59.6848893,30.4532257 59.6848928,30.4532299 59.6848957,30.4532362 59.6848972,30.4532432 59.6848971)', 'way', 962678726, '{\"landuse\": \"grass\"}', '{8904992673,8904992672,8904992671,8904992670,8904992669,8904992668,8904992667,8904992666,8904992665,8904992664,8904992663,8904992662,8904992661,8904992673}'),\n ('SRID=4326;LINESTRING(30.4530998 59.6849248,30.4531105 59.684928,30.4532056 59.6848974,30.4532029 59.6848932,30.4532023 59.6848877,30.4532043 59.6848829,30.4532098 59.6848776,30.4531384 59.6848341,30.4531253 59.6848349,30.4530998 59.6849248)', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992682,8904992681,8904992680,8904992679,8904992637,8904992678,8904992677,8904992676,8904992675,8904992682}'),\n ('SRID=4326;LINESTRING(30.4530724 59.6849262,30.4530868 59.6849239,30.4531127 59.6848333,30.4531034 59.6848301,30.4529683 59.6848711,30.4530724 59.6849262)', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992687,8904992686,8904992685,8904992684,8904992683,8904992687}'),\n ('SRID=4326;LINESTRING(30.4530589 59.6849341,30.4530633 59.6849302,30.452961 59.6848772,30.4529482 59.6849246,30.4530589 59.6849341)', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992691,8904992690,8904992689,8904992688,8904992691}'),\n ('SRID=4326;LINESTRING(30.4531212 59.684939,30.4533222 59.6849516,30.4533269 59.6849477,30.4532581 59.6849071,30.4532455 59.6849087,30.4532339 59.6849085,30.4532243 59.684907,30.4532133 59.6849034,30.4531185 59.6849335,30.4531212 59.684939)', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992699,8904992698,8904992697,8904992696,8904992692,8904992638,8904992695,8904992694,8904992693,8904992699}'),\n ('SRID=4326;LINESTRING(30.453536 59.6848401,30.4529797 59.6847958,30.452977 59.6848046,30.4535329 59.6848493,30.453536 59.6848401)', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', '{8905335420,8905335419,8905335418,8905335417,8905335420}'),\n ('SRID=4326;LINESTRING(30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335435,8905335434,8905335433,8905335432,8905335435}'),\n ('SRID=4326;LINESTRING(30.4533819 59.6849565,30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565)', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335439,8905335438,8905335437,8905335436,8905335439}'),\n ('SRID=4326;LINESTRING(30.4533623 59.6849431,30.4533739 59.6849464,30.4534994 59.6849065,30.4534038 59.6848537,30.4533921 59.6848545,30.4533623 59.6849431)', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335444,8905335443,8905335442,8905335441,8905335440,8905335444}'),\n ('SRID=4326;LINESTRING(30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335454,8905335453,8905335452,8905335451,8905335450,8905335449,8905335448,8905335447,8905335446,8905335454}'),\n ('SRID=4326;LINESTRING(30.4529663 59.6848632,30.4530962 59.6848253,30.4530928 59.6848201,30.4529831 59.6848107,30.4529663 59.6848632)', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335458,8905335457,8905335456,8905335455,8905335458}'),\n ('SRID=4326;LINESTRING(30.4532195 59.6848732,30.4532263 59.6848712,30.4532379 59.6848698,30.4532504 59.6848704,30.4532619 59.6848729,30.4532706 59.684876,30.4533642 59.6848467,30.4533614 59.6848416,30.453158 59.6848262,30.4531503 59.6848308,30.4532195 59.6848732)', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335467,8905335466,8905335465,8905335464,8905335463,8905335462,8905335461,8905335445,8905335460,8905335459,8905335467}'),\n ('SRID=4326;LINESTRING(30.4532684 59.6848807,30.4533888 59.6848413)', 'way', 962714221, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992654,1665582235}'),\n ('SRID=4326;LINESTRING(30.4531238 59.6848204,30.4532177 59.684877)', 'way', 962714222, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582234,8904992660}'),\n ('SRID=4326;LINESTRING(30.4527677 59.6846399,30.4528579 59.6846477)', 'way', 962735606, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8905543613,1198356896}'),\n ('SRID=4326;LINESTRING(30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399)', 'way', 962735608, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824026,1198356935,8566824027,8905543613}'),\n ('SRID=4326;LINESTRING(30.4534851 59.684767,30.4534913 59.6847521,30.4534976 59.6847368)', 'way', 962735609, '{\"highway\": \"steps\"}', '{8905543614,12023732271,7927774425}'),\n ('SRID=4326;LINESTRING(30.4529562 59.6847243,30.4529615 59.6847082,30.4529628 59.6847041)', 'way', 962735610, '{\"highway\": \"steps\"}', '{8905543615,12023732270,3968068678}'),\n ('SRID=4326;LINESTRING(30.4526304 59.6847065,30.4525958 59.6847532)', 'way', 962735611, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8905543616,8114975051}'),\n ('SRID=4326;LINESTRING(30.4528676 59.6847547,30.4526341 59.6847357,30.452631 59.6847454,30.4528645 59.6847644,30.4528676 59.6847547)', 'way', 962735612, '{\"landuse\": \"grass\"}', '{8905558220,8905558219,8905558218,8905558217,8905558220}'),\n ('SRID=4326;LINESTRING(30.4535589 59.6848104,30.4530176 59.6847681,30.4530149 59.6847769,30.4535559 59.6848195,30.4535589 59.6848104)', 'way', 962735613, '{\"landuse\": \"grass\"}', '{8905558224,8905558223,8905558222,8905558221,8905558224}'),\n ('SRID=4326;LINESTRING(30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573,30.4530182 59.6847465)', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8905558227,8905558226,8906857476,8906857475,8905558227}'),\n ('SRID=4326;LINESTRING(30.4523152 59.6851448,30.4526116 59.6847664)', 'way', 962869359, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.7\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857452,8906857451}'),\n ('SRID=4326;LINESTRING(30.4526277 59.6846803,30.4526365 59.6846782,30.4526406 59.6846738,30.4526381 59.684669,30.4526302 59.6846662,30.4526205 59.6846666,30.4526137 59.6846701,30.4526128 59.684675,30.4526184 59.684679,30.4526277 59.6846803)', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857461,8906857453,8906857460,8906857459,8906857458,8906857457,8906857456,8906857455,8906857454,8906857461}'),\n ('SRID=4326;LINESTRING(30.4535863 59.6847456,30.4535811 59.6847595)', 'way', 962869365, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8906857470,8289295976}'),\n ('SRID=4326;MULTIPOLYGON(((30.4513 59.6845239,30.4513105 59.6845148,30.4513253 59.6844972,30.4513336 59.6844848,30.4513473 59.6844699,30.4513568 59.6844555,30.4513653 59.6844381,30.4513738 59.6844262,30.4513936 59.6844093,30.4514013 59.6843976,30.4514225 59.6843888,30.4514444 59.6843812,30.4514614 59.6843629,30.4514704 59.6843445,30.4514736 59.6843262,30.4514828 59.6842988,30.4514912 59.6842865,30.4514975 59.6842799,30.4515117 59.6842705,30.4515428 59.6842625,30.4516031 59.6842549,30.4518408 59.6843394,30.4519523 59.6843794,30.4520216 59.6844035,30.4520874 59.6844268,30.4521402 59.684444,30.4521943 59.6844606,30.452244 59.6844736,30.4522939 59.6844865,30.4523452 59.6844991,30.4524113 59.6845149,30.4524654 59.6845284,30.4525244 59.6845406,30.4525539 59.6845467,30.452566 59.6845558,30.452571 59.6845656,30.4525675 59.6845745,30.4525615 59.68459,30.4525618 59.6845988,30.4525613 59.6846073,30.4525568 59.6846156,30.4525466 59.6846232,30.4525331 59.6846279,30.4525251 59.684634,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4521768 59.6852884,30.4521573 59.685297,30.4521207 59.6853099,30.4520859 59.6853167,30.4520483 59.6853214,30.4520121 59.6853235,30.4519679 59.6853228,30.4519209 59.685316,30.4518731 59.6853033,30.4518364 59.6852869,30.4518016 59.6852646,30.4517747 59.6852436,30.4517546 59.685224,30.4517399 59.685205,30.4517278 59.6851773,30.4517104 59.6851603,30.4516916 59.6851468,30.4516857 59.6851285,30.4516903 59.6851123,30.4517117 59.6851023,30.4517426 59.685094,30.4517784 59.6850892,30.4518103 59.6850908,30.4518403 59.6851005,30.4518731 59.6850949,30.4518771 59.6850809,30.4518692 59.685051,30.4518777 59.6850294,30.4519043 59.6850131,30.4519376 59.6850028,30.4519737 59.684999,30.4520079 59.6849997,30.4520477 59.685012,30.4520887 59.6850223,30.4521435 59.6850216,30.4521948 59.6850093,30.4522112 59.6849969,30.4522301 59.6849727,30.45222 59.6849586,30.4521979 59.6849496,30.4521524 59.6849328,30.452119 59.6849135,30.452105 59.6848849,30.4521099 59.684868,30.4520932 59.684849,30.4520658 59.6848372,30.4520255 59.6848223,30.4520099 59.6848104,30.4519866 59.6847939,30.4519651 59.6847718,30.4519517 59.6847501,30.4519518 59.6847258,30.4519545 59.6847041,30.4519786 59.6846635,30.4520121 59.6846479,30.452051 59.6846256,30.4520604 59.6846161,30.4520537 59.6846046,30.4520175 59.6845829,30.4519692 59.6845613,30.451933 59.684566,30.4519102 59.6845748,30.4518928 59.6845917,30.4518772 59.6846127,30.4518697 59.684638,30.4518561 59.6846587,30.4518347 59.6846794,30.4518136 59.6846859,30.451785 59.6846963,30.4517612 59.6847117,30.4517363 59.6847257,30.4517004 59.6847328,30.4516678 59.6847376,30.4516243 59.6847395,30.4515783 59.6847426,30.4515624 59.6847383,30.451536 59.6847319,30.4515265 59.6847207,30.4515128 59.6847092,30.4515012 59.6846991,30.4514963 59.6846932,30.4515039 59.6846846,30.4515091 59.6846707,30.4515006 59.6846638,30.4514837 59.6846584,30.4514488 59.6846536,30.4514298 59.6846424,30.4514235 59.6846339,30.451434 59.6846216,30.451452 59.6846104,30.4514721 59.684604,30.4514816 59.6845934,30.4514827 59.6845827,30.4514763 59.6845715,30.4514427 59.6845604,30.4514004 59.6845719,30.4513792 59.6845708,30.451356 59.684566,30.4513317 59.6845601,30.4513137 59.6845489,30.4513042 59.6845393,30.4513 59.6845239)))', 'relation', 12444790, '{\"natural\": \"wood\", \"leaf_type\": \"mixed\", \"leaf_cycle\": \"mixed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523568 59.6851898,30.4523702 59.6851856,30.4524483 59.6851915,30.452456 59.6851977,30.4524419 59.6852441,30.4524248 59.6852328,30.4524088 59.6852218,30.4523826 59.6852055,30.4523568 59.6851898)))', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459)))', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082,30.4523303 59.6851757)))', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443,30.4528543 59.6852169)))', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622)))', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6852802,30.453028 59.6852429,30.4530414 59.6852392,30.4530554 59.6852658,30.453041 59.6852693,30.4530288 59.6852733,30.4530143 59.6852802)))', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530501 59.6852392,30.4531172 59.6852446,30.4531031 59.6852618,30.4530921 59.6852616,30.4530782 59.6852621,30.4530632 59.6852641,30.4530501 59.6852392)))', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.4531138 59.6852988,30.4530897 59.6853096,30.4530682 59.6853211,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168)))', 'relation', 12935642, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530106 59.6853114,30.4530161 59.6853019,30.4530244 59.6852922,30.4530375 59.685285,30.4530534 59.685278,30.4530732 59.685274,30.4530931 59.6852723,30.4531124 59.685272,30.4531329 59.6852751,30.4531443 59.685278,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530111 59.6853217,30.4530106 59.6853114)))', 'relation', 12922491, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530012 59.685359,30.4529724 59.685378,30.4529542 59.6853912,30.4529312 59.685409,30.4529136 59.685403)))', 'relation', 12935641, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527618 59.6854305,30.4527687 59.6854078,30.4527852 59.6854026,30.4528654 59.6854091,30.4528755 59.6854172,30.4528681 59.6854402,30.4528506 59.685445,30.4527747 59.6854387,30.4527618 59.6854305)))', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524557 59.6852538,30.4525351 59.6852597,30.4525442 59.6852666,30.4525328 59.6853069,30.4525201 59.6853123,30.4524969 59.6852906,30.4524775 59.6852724,30.4524557 59.6852538)))', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523226 59.6851969,30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969)))', 'way', 961717596, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522795 59.6852157,30.4522803 59.6851945,30.4523081 59.6852118,30.4523362 59.6852293,30.4523649 59.6852475,30.4523853 59.6852614,30.4524056 59.685276,30.4524322 59.6852976,30.4524465 59.6853116,30.4524653 59.6853309,30.4524785 59.6853465,30.4524909 59.685362,30.4525002 59.6853776,30.4525091 59.6853943,30.4525171 59.6854097,30.4525231 59.6854242,30.4525257 59.6854303,30.4525224 59.6854348,30.4525097 59.6854362,30.452501 59.6854325,30.4524982 59.6854272,30.4524918 59.6854125,30.4524839 59.6853973,30.4524751 59.6853808,30.452466 59.6853657,30.452454 59.6853507,30.4524411 59.6853354,30.4524225 59.6853163,30.4524087 59.6853027,30.4523827 59.6852816,30.4523628 59.6852673,30.4523427 59.6852536,30.4523143 59.6852356,30.4522795 59.6852157)))', 'way', 961717597, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525975 59.6854176,30.4526042 59.6853942,30.4526196 59.6853891,30.4527003 59.6853955,30.4527112 59.6854034,30.4527032 59.6854269,30.4526842 59.6854313,30.4526076 59.685425,30.4525975 59.6854176)))', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527849 59.685488,30.4527911 59.6854671,30.4528702 59.6854731,30.4528639 59.685494,30.4527849 59.685488)))', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525642 59.6854713,30.4525705 59.6854504,30.4526495 59.6854564,30.4526433 59.6854773,30.4525642 59.6854713)))', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529138 59.6853368,30.4529263 59.6852951,30.4529427 59.6852903,30.4529866 59.6852936,30.4529963 59.6853005,30.4529853 59.6853413,30.4529678 59.6853472,30.4529235 59.6853445,30.4529138 59.6853368)))', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452933 59.6852753,30.4529444 59.6852374,30.4529582 59.685233,30.4530088 59.6852371,30.4530171 59.6852433,30.453002 59.6852821,30.4529886 59.6852873,30.4529441 59.6852838,30.452933 59.6852753)))', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525595 59.6852465,30.4525709 59.685208,30.4525847 59.6852036,30.4526353 59.6852076,30.452645 59.6852146,30.4526333 59.6852538,30.4526207 59.6852585,30.4525692 59.6852544,30.4525595 59.6852465)))', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452817 59.6852667,30.452831 59.6852267,30.4528493 59.6852281,30.452851 59.685224,30.4529216 59.6852291,30.4529319 59.6852358,30.45292 59.6852751,30.4529066 59.6852809,30.4528288 59.6852748,30.452817 59.6852667)))', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527946 59.6853272,30.4528087 59.6852864,30.4528247 59.6852816,30.4529042 59.6852874,30.4529154 59.6852941,30.4529031 59.6853359,30.4528878 59.6853416,30.4528053 59.6853349,30.4527946 59.6853272)))', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527745 59.6853889,30.4527899 59.6853454,30.4528052 59.6853419,30.4528845 59.6853477,30.4528953 59.6853552,30.4528839 59.6853982,30.4528677 59.6854032,30.4527865 59.6853969,30.4527745 59.6853889)))', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536,30.4533349 59.6850974)))', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437,30.4535137 59.6851734,30.4534909 59.6851715)))', 'relation', 12925809, '{\"crop\": \"grape\", \"genus\": \"Vitis\", \"taxon\": \"Vitis amurensis\", \"landuse\": \"vineyard\", \"genus:ru\": \"Виноград\", \"taxon:ru\": \"Виноград амурский\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532761 59.6852013,30.4533083 59.6851038,30.4533211 59.6851024,30.4533941 59.6851559,30.453378 59.6851586,30.4533606 59.6851647,30.4533458 59.6851715,30.4533338 59.6851796,30.4533257 59.6851898,30.453319 59.6851999,30.4533137 59.6852128,30.4532761 59.6852013)))', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530768 59.6850789,30.4530825 59.6850727,30.45327 59.6850856,30.4532721 59.6850914,30.4531813 59.685123,30.4531731 59.6851201,30.4531599 59.6851179,30.4531475 59.6851179,30.4531357 59.6851196,30.4530768 59.6850789)))', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728)))', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531381 59.685138,30.4531404 59.6851346,30.4531455 59.6851322,30.4531523 59.6851313,30.4531591 59.685132,30.4531645 59.6851343,30.4531672 59.6851376,30.4531665 59.6851411,30.4531627 59.6851441,30.4531566 59.6851458,30.4531496 59.6851459,30.4531433 59.6851444,30.4531391 59.6851415,30.4531381 59.685138)))', 'way', 962062995, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531836 59.6851532,30.45319 59.6851488,30.4531936 59.6851444,30.453195 59.6851401,30.4531946 59.6851353,30.4531914 59.68513,30.4532804 59.6850981,30.4532923 59.6851023,30.4532587 59.6851977,30.45325 59.6851972,30.4531836 59.6851532)))', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)))', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145,30.4528382 59.6851861)))', 'way', 962062998, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077,30.4528577 59.6851769)))', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)))', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529338 59.6849691,30.4529452 59.6849315,30.4530566 59.6849397,30.4530583 59.6849454,30.4529465 59.6849826,30.4529492 59.6849698,30.4529338 59.6849691)))', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529465 59.6849918,30.4530662 59.6849507,30.4530757 59.684955,30.4530456 59.6850508,30.4530344 59.685052,30.4529465 59.6849918)))', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529083 59.6850544,30.4529184 59.6850114,30.4529378 59.6850121,30.4529398 59.6850009,30.4530221 59.685056,30.4530153 59.6850613,30.4529083 59.6850544)))', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528875 59.6851184,30.4529043 59.6850625,30.4530125 59.6850679,30.4530138 59.6850731,30.4528875 59.6851184)))', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739)))', 'way', 962382766, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528885 59.6851275,30.4530206 59.6850798,30.4530311 59.6850841,30.4530072 59.6851719,30.4529896 59.6851748,30.4528885 59.6851275)))', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533227 59.6850682,30.4533546 59.6849733,30.4533655 59.6849715,30.4534612 59.68503,30.4533332 59.6850719,30.4533227 59.6850682)))', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533411 59.685078,30.4534619 59.6850382,30.4534444 59.6850899,30.4533437 59.685083,30.4533411 59.685078)))', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233)))', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005)))', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532116 59.6849902,30.4532258 59.6849527,30.4533191 59.6849588,30.4533219 59.6849634,30.4532298 59.6849953,30.4532207 59.684992,30.4532116 59.6849902)))', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)))', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530763 59.6850024,30.453091 59.6849565,30.4531032 59.6849548,30.4531695 59.6849976,30.4531647 59.6850018,30.4531619 59.6850065,30.4530763 59.6850024)))', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547,30.4530603 59.6850515)))', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530791 59.6850599,30.4531749 59.6850252,30.4531799 59.6850271,30.4531863 59.6850287,30.4531735 59.6850722,30.453083 59.685065,30.4530791 59.6850599)))', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531903 59.6850727,30.453201 59.6850303,30.453211 59.6850297,30.4532223 59.6850274,30.4532816 59.6850715,30.4532727 59.6850781,30.4531903 59.6850727)))', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531253 59.6850083,30.4531279 59.6850008,30.4531334 59.6849938,30.4531415 59.6849874,30.4531519 59.6849819,30.4531642 59.6849776,30.4531779 59.6849745,30.4531926 59.6849729,30.4532076 59.6849728,30.4532224 59.6849741,30.4532363 59.6849768,30.453249 59.6849809,30.4532598 59.6849862,30.4532684 59.6849924,30.4532744 59.6849993,30.4532776 59.6850067,30.4532779 59.6850143,30.4532753 59.6850217,30.4532699 59.6850288,30.4532618 59.6850352,30.4532514 59.6850406,30.4532391 59.685045,30.4532253 59.685048,30.4532107 59.6850496,30.4531957 59.6850498,30.4531809 59.6850485,30.4531669 59.6850457,30.4531543 59.6850416,30.4531434 59.6850364,30.4531349 59.6850302,30.4531288 59.6850232,30.4531256 59.6850158,30.4531253 59.6850083)))', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903)))', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532247 59.6848893,30.453227 59.684886,30.4532321 59.6848835,30.4532389 59.6848826,30.4532457 59.6848833,30.4532511 59.6848856,30.4532538 59.6848889,30.4532531 59.6848924,30.4532493 59.6848954,30.4532432 59.6848971,30.4532362 59.6848972,30.4532299 59.6848957,30.4532257 59.6848928,30.4532247 59.6848893)))', 'way', 962678726, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530998 59.6849248,30.4531253 59.6848349,30.4531384 59.6848341,30.4532098 59.6848776,30.4532043 59.6848829,30.4532023 59.6848877,30.4532029 59.6848932,30.4532056 59.6848974,30.4531105 59.684928,30.4530998 59.6849248)))', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529683 59.6848711,30.4531034 59.6848301,30.4531127 59.6848333,30.4530868 59.6849239,30.4530724 59.6849262,30.4529683 59.6848711)))', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529482 59.6849246,30.452961 59.6848772,30.4530633 59.6849302,30.4530589 59.6849341,30.4529482 59.6849246)))', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531185 59.6849335,30.4532133 59.6849034,30.4532243 59.684907,30.4532339 59.6849085,30.4532455 59.6849087,30.4532581 59.6849071,30.4533269 59.6849477,30.4533222 59.6849516,30.4531212 59.684939,30.4531185 59.6849335)))', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452977 59.6848046,30.4529797 59.6847958,30.453536 59.6848401,30.4535329 59.6848493,30.452977 59.6848046)))', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)))', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565,30.4533809 59.6849511)))', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533623 59.6849431,30.4533921 59.6848545,30.4534038 59.6848537,30.4534994 59.6849065,30.4533739 59.6849464,30.4533623 59.6849431)))', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)))', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529663 59.6848632,30.4529831 59.6848107,30.4530928 59.6848201,30.4530962 59.6848253,30.4529663 59.6848632)))', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531503 59.6848308,30.453158 59.6848262,30.4533614 59.6848416,30.4533642 59.6848467,30.4532706 59.684876,30.4532619 59.6848729,30.4532504 59.6848704,30.4532379 59.6848698,30.4532263 59.6848712,30.4532195 59.6848732,30.4531503 59.6848308)))', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452631 59.6847454,30.4526341 59.6847357,30.4528676 59.6847547,30.4528645 59.6847644,30.452631 59.6847454)))', 'way', 962735612, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530149 59.6847769,30.4530176 59.6847681,30.4535589 59.6848104,30.4535559 59.6848195,30.4530149 59.6847769)))', 'way', 962735613, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6847573,30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573)))', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523152 59.6851448,30.4526116 59.6847664,30.4528877 59.684789,30.4528309 59.6849691,30.4528148 59.6849678,30.4528061 59.6849952,30.4528221 59.6849965,30.45277 59.6851675,30.4527658 59.68518,30.4523152 59.6851448)))', 'relation', 12933782, '{\"ref\": \"5\", \"name\": \"Кенконс\", \"genus\": \"Tilia\", \"name:en\": \"The Quincunx\", \"natural\": \"wood\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526128 59.684675,30.4526137 59.6846701,30.4526205 59.6846666,30.4526302 59.6846662,30.4526381 59.684669,30.4526406 59.6846738,30.4526365 59.6846782,30.4526277 59.6846803,30.4526184 59.684679,30.4526128 59.684675)))', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526042 59.6846709,30.4526082 59.6846655,30.452617 59.6846635,30.4528469 59.6846817,30.452843 59.684694,30.4528376 59.6847122,30.4526498 59.6846973,30.4526123 59.6846817,30.4526042 59.6846709)))', 'relation', 12933783, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530629 59.6847308,30.4530706 59.6847131,30.4530752 59.684699,30.4535863 59.6847456,30.4535811 59.6847595,30.4535752 59.6847748,30.4530629 59.6847308)))', 'relation', 12933784, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4534977 59.6852035,30.4534967 59.6852111,30.453492 59.6852191,30.4534813 59.6852261,30.4534692 59.6852309,30.4534524 59.6852342,30.453435 59.6852355,30.4534193 59.6852337,30.4534045 59.6852307,30.4533914 59.6852248,30.4533831 59.6852182,30.4533763 59.68521,30.4533752 59.6852006)))', 'relation', 12935640, '{\"height\": \"5.5\", \"roof:shape\": \"pyramidal\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"0.5\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526773 59.6854805,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.4527511 59.6854859,30.4526773 59.6854805)))', 'relation', 12987950, '{\"height\": \"1\", \"roof:shape\": \"skillion\", \"roof:colour\": \"grey\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"roof:direction\": \"170\", \"building:colour\": \"#E4C78F\", \"roof:orientation\": \"along\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4526773 59.6854805,30.4527511 59.6854859,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528709 59.6855164,30.4527091 59.6855042,30.4525787 59.6854944)))', 'relation', 12935639, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4522474 59.6851858,30.4522167 59.6853009,30.4522119 59.6853269,30.4521905 59.6853763,30.4521596 59.6854203,30.4521293 59.6854701,30.4520946 59.6855262,30.4520624 59.6855804,30.4520524 59.6856064,30.452047 59.6856386,30.452047 59.6856666,30.4520551 59.685713,30.4520778 59.685798,30.4520997 59.6858613,30.4521127 59.6859046,30.4521047 59.6859432,30.4520825 59.6859825,30.4520478 59.686026,30.4520492 59.6860479,30.4520658 59.6860755,30.4520819 59.6860924,30.4521387 59.6861383,30.4521581 59.6861556,30.4521822 59.6861782,30.45222 59.6862149,30.4522535 59.6862461,30.4522676 59.6862668,30.4522828 59.6862897,30.4522911 59.6863104,30.4522992 59.6863312,30.4523018 59.6863618,30.4522989 59.6863961,30.4522911 59.6864255,30.452286 59.6864496,30.4522787 59.6864747,30.4522743 59.6864925,30.452274 59.6865148,30.4522776 59.6865312,30.4522888 59.6865538,30.4523045 59.686573,30.4523226 59.6865862,30.4523413 59.6865954,30.4523836 59.686613,30.4524214 59.6866244,30.4524614 59.686634,30.4524912 59.6866392,30.4525264 59.6866438,30.4525641 59.6866457,30.4526585 59.6866455,30.4527524 59.6866414,30.4528825 59.6866353,30.4530173 59.6866255,30.4531259 59.6866181,30.4531936 59.6866133,30.453271 59.6866114,30.4533083 59.686614,30.4534028 59.6866228,30.4535229 59.6866363,30.4536201 59.6866455,30.453691 59.6866508,30.4536976 59.6866508,30.4539823 59.6866673,30.4539778 59.6866919,30.4544217 59.6867427,30.4544227 59.6867377,30.4544646 59.686742,30.4544638 59.6867472,30.4545508 59.6867576,30.4545534 59.6867525,30.4545963 59.6867573,30.4546214 59.6867604,30.4546788 59.6867553,30.4548168 59.686752,30.4551163 59.6867835,30.4552388 59.6868093,30.4553945 59.6868602,30.455491 59.6869022,30.4555769 59.68694,30.4556466 59.6869672,30.4557807 59.6870023,30.4558987 59.6870186,30.4559816 59.68702,30.4560875 59.6870601,30.4561508 59.6871091,30.4561831 59.6871675,30.456183 59.687235,30.4561616 59.6872894,30.4561159 59.6873352,30.4560824 59.6873697,30.4560436 59.6874139,30.4560113 59.687453,30.4559765 59.6875127,30.4559804 59.6875356,30.4559953 59.6875601,30.4560395 59.6875816,30.4560838 59.6875938,30.4561467 59.6876019,30.4561991 59.6876021,30.4563573 59.6875979,30.4565289 59.6875961,30.4566782 59.6875933,30.4567611 59.687592,30.4568899 59.687586,30.4570005 59.6875828,30.4570995 59.6875755,30.4572099 59.6875697,30.4573214 59.6875781,30.4574243 59.6875895,30.4575564 59.6876086,30.4576489 59.6876236,30.4577906 59.6876357,30.4578929 59.687656,30.4579737 59.6876911,30.4580413 59.6877282,30.4581225 59.6877678,30.4581817 59.6878027,30.4582341 59.6878291,30.4583152 59.6878863,30.4583478 59.6879193,30.4583877 59.6879673,30.458411 59.6880122,30.4584387 59.6880452,30.4584657 59.6880811,30.4585427 59.6881373,30.4585748 59.6881735,30.4586375 59.6882236,30.4586938 59.6882576,30.4587833 59.6883125,30.45884 59.6883434,30.4588959 59.6883741,30.4589723 59.6884163,30.4590175 59.6884495,30.4590717 59.6884887,30.4591366 59.6885238,30.4591908 59.6885653,30.4592104 59.6886013,30.4592312 59.6886474,30.4592494 59.6886943,30.4592859 59.6887303,30.4593172 59.688773,30.4593556 59.6888131,30.459429 59.6888677,30.459467 59.6889042,30.4594979 59.688929,30.4595172 59.6889694,30.4595266 59.6890044,30.4595285 59.689042,30.4595248 59.6890919,30.4595255 59.6891719,30.4595317 59.6892178,30.4595442 59.6893129,30.4595387 59.689363,30.4595118 59.6894235,30.4594761 59.689469,30.4594014 59.6895068,30.4593069 59.6895588,30.4592476 59.6895966,30.4591945 59.6896312,30.4591511 59.6896562,30.4591092 59.6896944,30.4590843 59.6897378,30.4590826 59.689771,30.4590853 59.6898069,30.4591078 59.6898435,30.4592007 59.6898882,30.4592339 59.6899293,30.4592628 59.6899874,30.4592762 59.6900429,30.45928 59.6901025,30.4592809 59.6901575,30.4592798 59.6902243,30.4593042 59.6902777,30.4593662 59.6903178,30.4594544 59.6903409,30.4595249 59.6903674,30.4595807 59.6903944,30.4596268 59.6904316,30.4596583 59.6904756,30.4596087 59.690551,30.4596006 59.6905905,30.4595977 59.6906403,30.4595904 59.6906903,30.4595826 59.6907418,30.4595821 59.6908019,30.459583 59.6908375,30.459529 59.6908703,30.4594074 59.6909353,30.4592831 59.6909939,30.459213 59.6910431,30.4591817 59.691066,30.4591361 59.6911201,30.4591012 59.6911675,30.4591012 59.691223,30.4591406 59.6912486,30.4592295 59.6912875,30.4592895 59.6913173,30.4593728 59.6913444,30.4594455 59.6913593,30.459517 59.6913682,30.4596037 59.6913935,30.4596491 59.6914211,30.4596908 59.6914522,30.4597319 59.6914924,30.4597559 59.6915361,30.4597745 59.6915821,30.459787 59.6916313,30.4597852 59.6916643,30.4597718 59.6917238,30.4597396 59.6917861,30.4596859 59.6918429,30.4596685 59.6918693,30.4596383 59.6919054,30.4596009 59.6919405,30.4595315 59.6919991,30.4594652 59.6920502,30.4594082 59.6920946,30.4593773 59.6921151,30.4593545 59.6921348,30.4593366 59.6921529,30.4593399 59.6921734,30.4593659 59.6921939,30.4596045 59.6923272,30.4596496 59.6923362,30.4596901 59.6923377,30.4597398 59.6923315,30.4597933 59.6923156,30.4598526 59.6922792,30.4599141 59.692234,30.4600168 59.6921771,30.4600862 59.6921317,30.4601606 59.6921103,30.4602526 59.6920827,30.460323 59.6920633,30.4603814 59.6920333,30.4604812 59.6919715,30.4605362 59.6919506,30.4606073 59.6919499,30.4606743 59.6919675,30.4607467 59.6920081,30.4608017 59.6920284,30.4608728 59.6920473,30.4609935 59.6920595,30.4610726 59.692067,30.4611517 59.6920866,30.4612403 59.6921299,30.4612939 59.6921759,30.4613569 59.6922104,30.4614227 59.6922341,30.4614964 59.6922659,30.4615568 59.6923059,30.4616211 59.6923729,30.4616748 59.6924466,30.4617579 59.6925197,30.4618368 59.6925614,30.461948 59.6926074,30.4620442 59.6926525,30.4621643 59.6927115,30.4622732 59.6927583,30.4623906 59.6927971,30.4625398 59.6928238,30.4626554 59.6928355,30.4627278 59.6928346,30.4627807 59.6928331,30.4629009 59.6928193,30.4629797 59.6928093,30.4630314 59.6928086,30.4630815 59.6928162,30.4631241 59.6928309,30.4631433 59.692849,30.4631354 59.6928782,30.4630918 59.6929178,30.4629933 59.692982,30.4628509 59.6930395,30.4627989 59.693076,30.4627775 59.6931068,30.4627715 59.6931374,30.4627782 59.6931678,30.4628 59.6931938,30.462816 59.6932161,30.4628201 59.6932352,30.4628276 59.6932642,30.4628055 59.6932947,30.462749 59.6933555,30.4627356 59.6934076,30.4627544 59.6934638,30.4627866 59.6935491,30.4628348 59.6936025,30.4628814 59.6936516,30.4629464 59.6936976,30.4630181 59.6937555,30.4631033 59.6938351,30.463194 59.693908,30.4632997 59.6939707,30.4633997 59.6940315,30.4634563 59.6940722,30.4634978 59.6941112,30.4635448 59.6941433,30.4635995 59.6941633,30.4636618 59.6941785,30.4637065 59.6941778,30.4637604 59.694169,30.4638165 59.6941725,30.4638941 59.6941882,30.463945 59.6941973,30.4639826 59.6942136,30.4640155 59.6942304,30.4640341 59.6942422,30.4640539 59.694259,30.4640781 59.6942943,30.4641097 59.6943536,30.4641054 59.6943849,30.4640955 59.6944214,30.4640677 59.6944543,30.4640278 59.694509,30.4639684 59.6945921,30.4639761 59.694632,30.4640196 59.6946691,30.4640928 59.6947215,30.4641504 59.6947644,30.4642414 59.694848,30.4643013 59.6949614,30.4643265 59.6950347,30.4643629 59.6950927,30.464383 59.6951471,30.4644155 59.6951914,30.4644503 59.6952616,30.464467 59.6953187,30.4644779 59.6953885,30.4644493 59.6954307,30.4644137 59.6954645,30.4643477 59.6955048,30.4642827 59.6955528,30.4641331 59.6956106,30.4640324 59.6956546,30.4639589 59.6956973,30.4639054 59.6957548,30.4638826 59.6958068,30.4638917 59.6958626,30.4638959 59.695908,30.4638913 59.6959452,30.4638761 59.6959807,30.4638581 59.6960266,30.4638387 59.6960774,30.4638353 59.6961315,30.4638514 59.6962235,30.4639031 59.6963079,30.4639806 59.6963837,30.4640641 59.696435,30.4641563 59.6964993,30.4642492 59.6965314,30.464353 59.6965624,30.4645112 59.6966079,30.4646909 59.6966431,30.4648519 59.6966796,30.4649082 59.6966992,30.4649645 59.6967256,30.4650316 59.6967635,30.465104 59.6968014,30.4651737 59.6968352,30.4652724 59.696889,30.4653398 59.6969338,30.4653714 59.6969637,30.4653977 59.6970024,30.4654124 59.6970396,30.4654285 59.6970924,30.4654299 59.6971357,30.4654285 59.6971912,30.4654178 59.6972534,30.4654178 59.6973103,30.4654268 59.6973472,30.465443 59.6973849,30.4654739 59.6974306,30.465535 59.6974889,30.4655776 59.6975263,30.4655998 59.6975497,30.4656249 59.6975948,30.4656281 59.6976305,30.4656291 59.6976586,30.465636 59.697698,30.4656478 59.6977439,30.4656559 59.6977839,30.4656639 59.6978247,30.4656741 59.697865,30.4656808 59.6978977,30.4656931 59.6979479,30.4657242 59.6979888,30.4657651 59.6980369,30.4658049 59.6980618,30.4658569 59.6980859,30.4659085 59.6981101,30.4659691 59.6981356,30.4659934 59.6981619,30.4660187 59.6982125,30.4660434 59.6982506,30.4660765 59.6982913,30.46612 59.6983229,30.46618 59.6983645,30.4662324 59.6983954,30.466279 59.6984245,30.4663222 59.6984585,30.4663422 59.6984839,30.4663508 59.6985161,30.466347 59.6985389,30.4663297 59.6985658,30.4662984 59.6986043,30.4662667 59.6986353,30.4662287 59.6986639,30.4662098 59.6986996,30.4662023 59.698738,30.4662177 59.6987814,30.4662476 59.6988217,30.4662941 59.6988595,30.4663218 59.6988897,30.4663703 59.6989336,30.4664066 59.698983,30.4664342 59.6990318,30.46626 59.699006,30.4662245 59.6990009,30.4661986 59.6989985,30.465736 59.6989731,30.465674 59.6989864,30.4656438 59.6989955,30.4656194 59.6990058,30.4655995 59.6990178,30.4655881 59.6990296,30.4655669 59.6990522,30.4655425 59.6990838,30.4655077 59.6991223,30.4654429 59.6991855,30.4653481 59.6992218,30.4652461 59.6992516,30.4651852 59.6992621,30.4651339 59.6992648,30.4650235 59.6992651,30.4649339 59.6992741,30.4648662 59.6992863,30.4647744 59.6993078,30.4647108 59.6993347,30.4646409 59.6993755,30.4645943 59.6994397,30.4645313 59.6994729,30.464447 59.6994976,30.4643342 59.6995189,30.4641272 59.6995513,30.4601 59.6956121,30.4590933 59.6945995,30.4585195 59.6940453,30.4565283 59.6920253,30.4559963 59.6915691,30.455779 59.6913562,30.4555191 59.6911016,30.4536132 59.6892318,30.4533114 59.6893232,30.4532486 59.6892981,30.453085 59.689221,30.4529871 59.689177,30.4528879 59.6891357,30.4528128 59.6891072,30.4524488 59.6889751,30.4524008 59.688958,30.4523038 59.6889045,30.4522723 59.6888961,30.4522552 59.6888858,30.4522361 59.6888724,30.452216 59.68885,30.4521838 59.6888324,30.4521207 59.6887986,30.4520511 59.6887644,30.4518909 59.6886967,30.4517882 59.6886551,30.4516822 59.6886098,30.4515358 59.6885556,30.4514019 59.6885123,30.4513037 59.6884778,30.4512571 59.6884636,30.4512056 59.6884428,30.4511404 59.6884196,30.4510778 59.6883871,30.4510264 59.6883553,30.4509783 59.6883239,30.4508749 59.6882578,30.4508266 59.688226,30.4507678 59.6881981,30.4505943 59.6881208,30.4501869 59.6879433,30.4499736 59.6878632,30.4499334 59.6878503,30.4498881 59.687841,30.4497871 59.6878092,30.4494924 59.6876814,30.4490926 59.6875099,30.4490362 59.6874936,30.4489854 59.6874759,30.4489383 59.6874638,30.448876 59.687449,30.4487626 59.6874338,30.4486346 59.6874221,30.4485214 59.6874142,30.4483648 59.6874032,30.4474691 59.687337,30.4468361 59.6872873,30.4467403 59.6872722,30.446684 59.6872669,30.4463496 59.6872017,30.4463085 59.6871943,30.4462561 59.6871833,30.4462179 59.6871721,30.446187 59.6871613,30.4461557 59.68715,30.4461253 59.6871366,30.4461066 59.6871274,30.4460918 59.6871135,30.4460273 59.6870454,30.4459552 59.6870078,30.4459436 59.6870073,30.4459073 59.6869902,30.4458766 59.6869748,30.445846 59.6869616,30.4458216 59.6869518,30.4457961 59.6869433,30.4457578 59.6869309,30.4457123 59.6869183,30.4456647 59.6869057,30.4455949 59.6868892,30.4455514 59.68688,30.4455232 59.6868726,30.4455129 59.6868665,30.4453868 59.6868434,30.44531 59.6868381,30.4452457 59.6868322,30.44506 59.686812,30.4450028 59.6868076,30.4449557 59.6868041,30.4449237 59.6868029,30.4448943 59.6868019,30.4448734 59.6868039,30.4448512 59.6868054,30.4448212 59.6868026,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017)))', 'relation', 4187886, '{\"ref\": \"II\", \"name\": \"Долина реки Славянки\", \"place\": \"quarter\", \"name:az\": \"Slavyanka çayının vadisi\", \"name:fr\": \"Vallée de la rivière Slavianka\", \"name:hy\": \"Սլավյանկա գետի հովիտ\", \"name:uk\": \"Долина річки Слов''янки\", \"name:zh\": \"谷斯拉维亚卡河\", \"boundary\": \"protected_area\", \"int_name\": \"Vallée de la rivière Slavianka\", \"wikidata\": \"Q121809341\", \"wikipedia\": \"ru:Павловский парк#Долина реки Славянки\", \"description\": \"Район Павловского парка\"}', NULL),\n ('SRID=4326;LINESTRING(30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392)', 'way', 1297781094, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{8289295976,12023732271,12023732270,12023732269,8114975027,12023699867,12023732331,12023732330,12023732337,12023732336}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528788 59.6854915)', 'way', 1093902027, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,1439053668}'),\n ('SRID=4326;LINESTRING(30.4535894 59.6847601,30.4535811 59.6847595)', 'way', 1297781085, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{12023732332,8289295976}'),\n ('SRID=4326;LINESTRING(30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601)', 'way', 1297781086, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{12023732335,12023732334,12023732333,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4519927 59.6856654,30.451993 59.6856352,30.4519974 59.6856085,30.4520057 59.6855861,30.452033 59.685533,30.4520717 59.6854725,30.4521073 59.6854196,30.4521538 59.6853554,30.4521646 59.6853419,30.4521729 59.6853289,30.4521751 59.685321,30.4521778 59.6853033,30.4521768 59.6852884,30.4522278 59.6851794,30.4522474 59.6851858,30.4522695 59.6851929,30.4522692 59.6852184,30.452307 59.6852409,30.4523333 59.6852571,30.4523534 59.6852701,30.4523836 59.685295,30.4524088 59.6853175,30.4524395 59.6853504,30.4524616 59.6853789,30.4524735 59.685401,30.4524845 59.6854195,30.4524943 59.6854502,30.452497 59.6854882,30.452346 59.6854768,30.4523217 59.6855588,30.4522802 59.6855556,30.4522258 59.6855515,30.4522191 59.6855742,30.4522002 59.685638,30.4521808 59.6857036,30.4521745 59.6857248,30.4522289 59.6857289,30.4522705 59.6857319,30.4522477 59.6858088,30.4522804 59.6858113,30.4525803 59.6858339,30.4526091 59.6858361,30.4526832 59.6858416,30.4528205 59.685852,30.4528174 59.6858982,30.4527279 59.6859036,30.4527314 59.6859191,30.4527383 59.6859422,30.4527472 59.6859643,30.4527643 59.6859927,30.4527791 59.6860133,30.4527956 59.6860336,30.4528174 59.6860572,30.4528406 59.6860793,30.4528659 59.6861008,30.4528879 59.6861175,30.4529175 59.6861373,30.4529497 59.6861561,30.4529804 59.6861727,30.4530167 59.6861897,30.4530418 59.6861992,30.4530963 59.6861616,30.4531534 59.686184,30.4531278 59.6862023,30.453137 59.6862056,30.4531608 59.6862141,30.4531704 59.6862175,30.453196 59.6861992,30.4531795 59.686249,30.4531642 59.6862975,30.453138 59.686381,30.4531363 59.6863866,30.4532826 59.6863983,30.4532725 59.6864305,30.4532916 59.686432,30.4532869 59.6864462,30.4532998 59.6864473,30.4533248 59.6864494,30.4533485 59.6864515,30.4533611 59.6864525,30.4533659 59.6864383,30.4534768 59.6864467,30.453575 59.6864544,30.4535812 59.6864636,30.4536188 59.68646,30.4536556 59.6864553,30.4536952 59.6864492,30.4537376 59.6864434,30.4537814 59.6864354,30.4538212 59.6864281,30.453863 59.6864194,30.4538817 59.6864353,30.4539287 59.6864214,30.4539454 59.6864356,30.4539576 59.686432,30.4540057 59.6864176,30.4540172 59.6864141,30.4540005 59.6863999,30.4540399 59.6863883,30.4540219 59.6863729,30.4540549 59.6863624,30.4540887 59.6863495,30.4541297 59.6863344,30.4541407 59.6863296,30.4541607 59.6863411,30.4541696 59.6863371,30.4542 59.6863235,30.4542091 59.6863195,30.4541887 59.6863078,30.4541965 59.6863041,30.4542363 59.6862844,30.4542705 59.6862654,30.4542999 59.6862773,30.4544137 59.6862059,30.4543849 59.6861942,30.4544059 59.686181,30.4544395 59.686154,30.4544728 59.6861239,30.4544964 59.6860973,30.4545494 59.6861117,30.4546053 59.6861282,30.4545922 59.6861427,30.4545784 59.6861572,30.4545449 59.6861862,30.4545138 59.6862131,30.4544576 59.6862495,30.4543906 59.6862854,30.4543294 59.6863147,30.4542746 59.6863415,30.454221 59.6863683,30.454115 59.6864133,30.454039 59.6864407,30.4539464 59.6864693,30.4539252 59.6864763,30.4538233 59.6865047,30.4536724 59.6865094,30.4536724 59.6865223,30.4536503 59.6865223,30.4535973 59.686521,30.4535465 59.6865208,30.4535021 59.6865209,30.4534712 59.6865222,30.4534473 59.6865255,30.453429 59.6865331,30.4534215 59.6865438,30.4534132 59.686574,30.4534136 59.6865866,30.453423 59.6865971,30.4534445 59.6866075,30.4534686 59.686613,30.4534579 59.6866461,30.4534073 59.6866421,30.4533332 59.6866345,30.4532837 59.6866305,30.453254 59.6866292,30.4532071 59.6866305,30.4531615 59.686632,30.4531191 59.6866347,30.4531041 59.6865988,30.4531448 59.6865925,30.4531695 59.6865869,30.4531966 59.6865772,30.4532138 59.6865676,30.4532231 59.6865589,30.453199 59.6865568,30.4531811 59.6865532,30.4531596 59.6865468,30.4531373 59.6865396,30.4531219 59.6865326,30.4530964 59.6865196,30.4530733 59.6865042,30.4530555 59.6864887,30.4530367 59.6864681,30.4530227 59.6864499,30.4530105 59.6864274,30.4530012 59.6864103,30.4529945 59.6863933,30.4529919 59.6863759,30.4529905 59.686347,30.4529907 59.6863231,30.4529911 59.6862911,30.4529891 59.686281,30.4529827 59.6862715,30.4529634 59.6862545,30.4529402 59.6862373,30.4529067 59.6862141,30.4528563 59.6861801,30.4528201 59.6861533,30.4527906 59.6861317,30.4527578 59.6861047,30.452731 59.6860823,30.4527092 59.6860609,30.4526947 59.6860457,30.4526816 59.6860278,30.4526652 59.6860011,30.4526541 59.6859782,30.4526337 59.6859283,30.4526256 59.6859159,30.4526103 59.685908,30.4525905 59.6859034,30.4525603 59.6859009,30.452391 59.6858965,30.4523675 59.6858999,30.4523504 59.685904,30.4523333 59.6859114,30.452312 59.685923,30.4522313 59.6859637,30.4521811 59.6859882,30.452085 59.686032,30.4520765 59.6860386,30.4520753 59.6860476,30.4520797 59.6860577,30.4520264 59.6860652,30.4520201 59.6860504,30.4520162 59.6860346,30.4520143 59.6860207,30.4520168 59.6860051,30.4520203 59.685989,30.4520274 59.6859769,30.4520341 59.6859612,30.4520405 59.6859506,30.452047 59.6859415,30.4520537 59.6859259,30.4520544 59.6859134,30.4520523 59.6858956,30.4520465 59.6858708,30.4520254 59.6858069,30.4519995 59.68571,30.4519927 59.6856654),(30.4521704 59.6857398,30.4521704 59.6857513,30.4521744 59.6857635,30.4521811 59.6857763,30.4521945 59.6857899,30.4522187 59.6858021,30.4522414 59.6858088,30.4522629 59.685735,30.4521731 59.6857289,30.4521704 59.6857398),(30.452226 59.6855475,30.4523159 59.6855543,30.4523387 59.6854798,30.4523212 59.6854826,30.4523011 59.6854866,30.452277 59.6854941,30.4522596 59.6855015,30.4522448 59.6855117,30.4522354 59.6855225,30.4522301 59.6855347,30.452226 59.6855475),(30.4522508 59.6858359,30.4525647 59.6858582,30.4525714 59.6858373,30.4522575 59.6858142,30.4522508 59.6858359),(30.4523249 59.685462,30.4523727 59.6854667,30.4523804 59.6854465,30.4523327 59.6854418,30.4523249 59.685462)))', 'relation', 6636677, '{\"surface\": \"fine_gravel\", \"area:highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533763 59.68521,30.4534979 59.6851951,30.4535038 59.6852069,30.4534995 59.6852209,30.4533878 59.6852355,30.4533818 59.6852214,30.4533763 59.68521)))', 'relation', 12947389, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523253 59.6851768,30.4523286 59.6851637,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4525881 59.6854311,30.452574 59.6853959,30.4525486 59.6853522,30.4525291 59.6853286,30.4525137 59.6853106,30.452501 59.6852981,30.4524755 59.6852751,30.452455 59.6852592,30.4524366 59.6852453,30.4524178 59.6852321,30.4523994 59.6852201,30.4523706 59.6852014,30.452339 59.6851839,30.4523253 59.6851768)))', 'relation', 5906400, '{\"ref\": \"2\", \"name\": \"Цветочный партер\", \"leisure\": \"garden\", \"name:en\": \"The Flower Parterre\", \"ref:okn\": \"781620399040956\", \"alt_name\": \"Цветники Марии Фёдоровны\", \"wikidata\": \"Q118122045\", \"garden:type\": \"flowerbed\", \"garden:style\": \"french\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.4533268 59.6853074,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532343 59.6853363,30.453156 59.6852825)))', 'relation', 17755883, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4531158 59.6853933,30.4531719 59.6854212,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530216 59.6854636,30.4529242 59.6854401,30.4529045 59.6854337)))', 'relation', 17755885, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4532343 59.6853363,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.453238 59.6853862,30.453207 59.6854026,30.4531719 59.6854212,30.4531158 59.6853933,30.4530217 59.6853466)))', 'relation', 17755884, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527677 59.6846399,30.4527719 59.6846286,30.4527799 59.6846212,30.4527933 59.6846157,30.4528134 59.6846137,30.4528403 59.6846144,30.4528537 59.6846178,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399)))', 'relation', 12932608, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 1721132, '{\"ref\": \"3\", \"name\": \"Павильон Трёх граций\", \"note\": \"Геометрические теги крыши павильона размещены отдельно\", \"name:es\": \"Pabellón de las tres gracias\", \"name:fr\": \"Pavillon des Trois Grâces\", \"name:pt\": \"Pavilhão das Três Graças\", \"name:zh\": \"三美人亭\", \"ref:okn\": \"781610399040356\", \"tourism\": \"attraction\", \"building\": \"yes\", \"heritage\": \"2\", \"historic\": \"yes\", \"wikidata\": \"Q112716431\", \"addr:city\": \"Павловск\", \"architect\": \"Чарльз Камерон\", \"start_date\": \"1800\", \"addr:street\": \"Садовая улица\", \"architect:en\": \"Charles Cameron\", \"addr:housenumber\": \"20 литЧ\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6514/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12202573, '{\"height\": \"7\", \"min_height\": \"5.5\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12497925, '{\"height\": \"1.5\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525466 59.6846232,30.4525568 59.6846156,30.4525613 59.6846073,30.4525618 59.6845988,30.4525615 59.68459,30.4525675 59.6845745,30.452571 59.6845656,30.452566 59.6845558,30.4525539 59.6845467,30.4526659 59.6845694,30.4527826 59.6845897,30.4528946 59.6846069,30.4530012 59.6846212,30.4535732 59.6846878,30.4535916 59.6846905,30.453606 59.6846946,30.4536164 59.684701,30.4536208 59.6847085,30.4536214 59.684718,30.4536181 59.6847274,30.4536067 59.6847614,30.4535894 59.6847601,30.4535811 59.6847595,30.4535863 59.6847456,30.4535923 59.6847296,30.4535925 59.6847224,30.4535886 59.6847164,30.4535807 59.6847121,30.4535698 59.6847103,30.4535555 59.6847085,30.4530859 59.6846667,30.4530887 59.6846582,30.4530942 59.6846416,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399,30.4525841 59.6846239,30.4525626 59.6846222,30.4525466 59.6846232)))', 'relation', 12131779, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452047 59.6856386,30.4520524 59.6856064,30.4520624 59.6855804,30.4520946 59.6855262,30.4521293 59.6854701,30.4521596 59.6854203,30.4521905 59.6853763,30.4522119 59.6853269,30.4522167 59.6853009,30.4522474 59.6851858,30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4601554 59.6854805,30.4601767 59.6856005,30.4601793 59.6857568,30.4601468 59.6858374,30.4600081 59.6860973,30.459853 59.68614,30.459704 59.6863415,30.4596832 59.6864086,30.4596712 59.686482,30.4596638 59.6865545,30.459666 59.6866369,30.4596929 59.6867933,30.4597047 59.6868418,30.4597409 59.6869365,30.4598403 59.6871335,30.4599111 59.6872432,30.4599552 59.6873116,30.4600453 59.6874469,30.460134 59.687572,30.4600858 59.6875668,30.4600427 59.6875593,30.4599863 59.6875559,30.4598958 59.6875545,30.4597744 59.6875619,30.4597289 59.6875627,30.4596698 59.687583,30.4596323 59.6876026,30.4595974 59.6876371,30.4595625 59.6876658,30.4595236 59.6876852,30.459478 59.6876967,30.459407 59.6877062,30.4593453 59.6877028,30.4592849 59.6876838,30.4592367 59.6876553,30.4591509 59.6875883,30.4590905 59.6875599,30.4590355 59.6875424,30.4589524 59.6875261,30.4588343 59.6875105,30.4586868 59.6875038,30.4585474 59.6875038,30.4584333 59.6875086,30.4583274 59.6875126,30.4582348 59.6875193,30.4581437 59.6875301,30.4580095 59.6875505,30.4579371 59.6875654,30.4579009 59.6875782,30.4578312 59.6876019,30.4577386 59.6876249,30.4576489 59.6876236,30.4575564 59.6876086,30.4574243 59.6875895,30.4573214 59.6875781,30.4572099 59.6875697,30.4570995 59.6875755,30.4570005 59.6875828,30.4568899 59.687586,30.4567611 59.687592,30.4566782 59.6875933,30.4565289 59.6875961,30.4563573 59.6875979,30.4561991 59.6876021,30.4561467 59.6876019,30.4560838 59.6875938,30.4560395 59.6875816,30.4559953 59.6875601,30.4559804 59.6875356,30.4559765 59.6875127,30.4560113 59.687453,30.4560436 59.6874139,30.4560824 59.6873697,30.4561159 59.6873352,30.4561616 59.6872894,30.456183 59.687235,30.4561831 59.6871675,30.4561508 59.6871091,30.4560875 59.6870601,30.4559816 59.68702,30.4558987 59.6870186,30.4557807 59.6870023,30.4556466 59.6869672,30.4555769 59.68694,30.455491 59.6869022,30.4553945 59.6868602,30.4552388 59.6868093,30.4551163 59.6867835,30.4548168 59.686752,30.4546788 59.6867553,30.4546214 59.6867604,30.4545963 59.6867573,30.4545534 59.6867525,30.4545508 59.6867576,30.4544638 59.6867472,30.4544646 59.686742,30.4544227 59.6867377,30.4544217 59.6867427,30.4539778 59.6866919,30.4539823 59.6866673,30.4536976 59.6866508,30.453691 59.6866508,30.4536201 59.6866455,30.4535229 59.6866363,30.4534028 59.6866228,30.4533083 59.686614,30.453271 59.6866114,30.4531936 59.6866133,30.4531259 59.6866181,30.4530173 59.6866255,30.4528825 59.6866353,30.4527524 59.6866414,30.4526585 59.6866455,30.4525641 59.6866457,30.4525264 59.6866438,30.4524912 59.6866392,30.4524614 59.686634,30.4524214 59.6866244,30.4523836 59.686613,30.4523413 59.6865954,30.4523226 59.6865862,30.4523045 59.686573,30.4522888 59.6865538,30.4522776 59.6865312,30.452274 59.6865148,30.4522743 59.6864925,30.4522787 59.6864747,30.452286 59.6864496,30.4522911 59.6864255,30.4522989 59.6863961,30.4523018 59.6863618,30.4522992 59.6863312,30.4522911 59.6863104,30.4522828 59.6862897,30.4522676 59.6862668,30.4522535 59.6862461,30.45222 59.6862149,30.4521822 59.6861782,30.4521581 59.6861556,30.4521387 59.6861383,30.4520819 59.6860924,30.4520658 59.6860755,30.4520492 59.6860479,30.4520478 59.686026,30.4520825 59.6859825,30.4521047 59.6859432,30.4521127 59.6859046,30.4520997 59.6858613,30.4520778 59.685798,30.4520551 59.685713,30.452047 59.6856666,30.452047 59.6856386)))', 'relation', 4194432, '{\"ref\": \"III\", \"name\": \"Придворцовый район\", \"place\": \"quarter\", \"name:fr\": \"Secteur central\", \"website\": \"https://pavlovskmuseum.ru/about/park/layout/36/\", \"boundary\": \"protected_area\", \"wikidata\": \"Q121809724\", \"wikipedia\": \"ru:Павловский парк#Центральный (Придворцовый) район\", \"description\": \"Район исторического Павловского парка\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4366882 59.6889898,30.4370373 59.6889668,30.4370736 59.6889644,30.4371138 59.6889367,30.4374634 59.6889115,30.4375002 59.6889088,30.4375427 59.6889059,30.4380171 59.6888738,30.438182 59.6888616,30.4383254 59.6888487,30.4384589 59.6888338,30.4385849 59.6888182,30.4388652 59.6887778,30.4389016 59.6887728,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346802 59.6935317,30.4346817 59.6935045,30.4346729 59.6934955,30.4346017 59.6934439,30.4344133 59.6933106,30.4344523 59.6932882,30.4344971 59.6932601,30.4345233 59.6932407,30.4345424 59.6932254,30.4345634 59.6932027,30.4345863 59.693171,30.4345979 59.6931498,30.4346066 59.6931248,30.4346128 59.6930889,30.434612 59.693054,30.4346077 59.6930245,30.4346019 59.6930124,30.4345969 59.693,30.4345757 59.6929702,30.4345621 59.6929518,30.434542 59.6929299,30.4345091 59.6928998,30.4344756 59.6928775,30.4344413 59.6928581,30.4343883 59.6928337,30.4343603 59.6928224,30.4343198 59.692809,30.4342705 59.6927958,30.4342429 59.6927909,30.4341796 59.6927811,30.4341217 59.6927737,30.4340777 59.6927708,30.4340075 59.6927673,30.4339293 59.6927692,30.4338474 59.6927768,30.433767 59.6927902,30.4337225 59.6928016,30.4335043 59.6926756,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)))', 'relation', 1721131, '{\"name\": \"Павловский парк\", \"note\": \"https://wiki.openstreetmap.org/wiki/RU:Павловск/Павловский_парк\", \"leisure\": \"park\", \"name:be\": \"Паўлаўскі парк\", \"name:bg\": \"Павловски парк\", \"name:ca\": \"Parc Pàvlovsk\", \"name:en\": \"Pavlovsk Park\", \"name:es\": \"Parque Pávlovsk\", \"name:fr\": \"Parc de Pavlovsk\", \"name:he\": \"פארק פבלובסק\", \"name:hy\": \"Պավլովսկ պարկը\", \"name:nl\": \"Pavlovskpark\", \"name:ru\": \"Павловский парк\", \"name:zh\": \"巴甫洛夫斯克公园\", \"ref:okn\": \"781720399040986\", \"website\": \"https://pavlovskmuseum.ru/about/park/\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"historic\": \"yes\", \"int_name\": \"Parc de Pavlovsk\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q2506336\", \"wikipedia\": \"ru:Павловский парк\", \"fee:amount\": \"100\", \"start_date\": \"1777\", \"opening_hours\": \"07:00-19:00\", \"protect_class\": \"22\", \"operator:phone\": \"+7 (812) 452-15-36\", \"fee:conditional\": \"yes @ 9:00-17:00\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6407/\", \"operator:tourism\": \"museum\", \"operator:website\": \"http://www.pavlovskmuseum.ru\", \"protection_title\": \"Государственный музей-заповедник\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4368674 59.6896812,30.4373083 59.6896203,30.4383622 59.6894747,30.4383925 59.6894699,30.4387768 59.6894091,30.4389533 59.6893793,30.4395631 59.6892765,30.4395975 59.6896826,30.43963 59.6897841,30.4411104 59.6895883,30.4411759 59.6892872,30.4412059 59.6891298,30.4412229 59.6890714,30.4402547 59.6891154,30.4398722 59.6891396,30.4395358 59.6891608,30.4394903 59.6891472,30.4392717 59.6889536,30.4391469 59.6889286,30.4391174 59.6889211,30.4390705 59.6889062,30.4390316 59.6888852,30.4390007 59.6888636,30.4389819 59.6888446,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346174 59.6935301,30.4346147 59.6935224,30.4346086 59.6935129,30.4345932 59.6935014,30.4344744 59.6934215,30.4344752 59.6934118,30.4344684 59.6934032,30.4343048 59.693294,30.4335858 59.6928433,30.4335672 59.6928378,30.4335491 59.692831,30.4335344 59.6928246,30.4335169 59.6928158,30.4334908 59.6928019,30.4334747 59.6927935,30.4334378 59.6927735,30.4334063 59.6927569,30.4333486 59.6927221,30.4332896 59.6926848,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)),((30.4459925 59.6840515,30.4465029 59.6838166,30.4469327 59.6836721,30.4472874 59.6834226,30.4479163 59.6832392,30.4483415 59.6832476,30.4484247 59.6832514,30.4484595 59.6832547,30.4484884 59.6832585,30.4485108 59.6832641,30.4489705 59.6834352,30.4489993 59.6834563,30.4490069 59.6834636,30.4492468 59.6836887,30.4491255 59.6840718,30.4490543 59.6840686,30.4483928 59.684035,30.4478277 59.6840459,30.4469355 59.6841321,30.4462744 59.6842068,30.4459925 59.6840515)))', 'relation', 17990902, '{\"name\": \"Государственный музей-заповедник «Павловск»\", \"note\": \"граница имущественного комплекса организации, не граница парка\", \"boundary\": \"protected_area\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q405637\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601,30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698)))', 'relation', 17786995, '{\"landuse\": \"construction\", \"start_date\": \"06.204\", \"description\": \"реставрация Павильона Трех граций\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522477 59.6858088,30.4522705 59.6857319,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4527091 59.6855042,30.4528709 59.6855164,30.4529043 59.6855189,30.4529835 59.685525,30.4530542 59.6855302,30.4530286 59.6856166,30.4529796 59.6857822,30.4529559 59.6858622,30.4528897 59.6858572,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088)))', 'relation', 6636658, '{\"height\": \"19.650\", \"architect\": \"Чарльз Камерон\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2.45\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"source:building:part\": \"http://pancer.ru/images/project/012/2.jpg\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4530216 59.6854636,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.453064 59.6855044,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 6636659, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528709 59.6855164,30.4528746 59.6855048,30.4528788 59.6854915,30.4529122 59.6854936,30.4529942 59.6854993,30.4529881 59.6855114,30.4529835 59.685525,30.4529043 59.6855189,30.4528709 59.6855164)))', 'relation', 14572596, '{\"height\": \"6.65\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533818 59.6852214,30.453417 59.6852162,30.4534578 59.6852115,30.4535038 59.6852069,30.4535289 59.6853164,30.4535075 59.6853177,30.4534847 59.6853198,30.4534688 59.6853212,30.4534368 59.6853262,30.453436 59.6853248,30.4534146 59.6852887,30.4533878 59.6852355,30.4533818 59.6852214)))', 'relation', 17755881, '{\"height\": \"13\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.453436 59.6853248,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533268 59.6853074,30.4532684 59.6852465)))', 'relation', 17755882, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.4533836 59.6852944,30.4533532 59.6853009,30.4533268 59.6853074,30.4532946 59.6853162,30.4532665 59.6853249,30.4532343 59.6853363,30.4532132 59.6853445,30.4531881 59.6853553,30.453164 59.6853668,30.4531411 59.6853788,30.4531158 59.6853933,30.4530954 59.6854062,30.4530746 59.6854199,30.4530552 59.6854344,30.4530382 59.6854491,30.4530216 59.6854636,30.4530079 59.6854761,30.4530004 59.6854886,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 17904735, '{\"height\": \"10\", \"roof:shape\": \"flat\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.4528469 59.6846817,30.452843 59.684694,30.4529628 59.6847041,30.4530706 59.6847131,30.4530752 59.684699,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4535302 59.6851198,30.4535229 59.6851437,30.4535137 59.6851734,30.4535124 59.6851786,30.4535038 59.6852069,30.4534979 59.6851951,30.4534914 59.6851874,30.4534811 59.6851808,30.4534678 59.6851758,30.4534524 59.6851728,30.453436 59.6851719,30.4534196 59.6851732,30.4534028 59.6851772,30.4533891 59.6851835,30.4533796 59.6851915,30.4533752 59.6852006,30.4533763 59.68521,30.4533818 59.6852214,30.4533524 59.685227,30.4533302 59.6852316,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4528993 59.6854656,30.4528865 59.6854815,30.4528788 59.6854915,30.4528746 59.6855048,30.4527686 59.6854977,30.452777 59.6854654,30.4527565 59.685464,30.4527224 59.6854618,30.4526841 59.6854592,30.4526646 59.6854579,30.4526564 59.6854895,30.4525812 59.6854845,30.4525787 59.6854944,30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858,30.4522278 59.6851794)))', 'relation', 4274530, '{\"fee\": \"yes\", \"ref\": \"IIIа\", \"name\": \"Собственный сад\", \"leisure\": \"garden\", \"name:fr\": \"Jardin privé\", \"ref:okn\": \"781620399040366\", \"tourism\": \"attraction\", \"alt_name\": \"Собственный садик\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"wikidata\": \"Q118122043\", \"start_date\": \"1803\", \"garden:style\": \"french\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6518/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4521745 59.6857248,30.4521808 59.6857036,30.4522002 59.685638,30.4522191 59.6855742,30.4522258 59.6855515,30.4522802 59.6855556,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533763 59.68521,30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540229 59.6848667,30.4540358 59.6848708,30.454047 59.6848759,30.4540561 59.6848821,30.454063 59.6848889,30.4540674 59.6848962,30.4540691 59.6849039,30.454068 59.6849115,30.4540643 59.6849189,30.454058 59.6849259,30.4540493 59.6849322,30.4540386 59.6849376,30.4540261 59.684942,30.4540122 59.6849452,30.4539975 59.684947,30.4539823 59.6849475,30.4539763 59.6849646,30.453965 59.6849637,30.4539277 59.6849606,30.4538688 59.6849558,30.4538059 59.6849506,30.4537818 59.6849487,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537483 59.6850789,30.4538612 59.6850876,30.4539247 59.6850925,30.4539406 59.6850424,30.4539786 59.6850519,30.4540221 59.685063,30.4540417 59.6850686,30.4540646 59.6850751,30.4541059 59.6850881,30.4541472 59.6851025,30.4541871 59.685118,30.4542254 59.6851343,30.4542622 59.6851516,30.4542942 59.6851377,30.4544115 59.6852076,30.4543838 59.6852203,30.4544141 59.6852392,30.4544426 59.6852588,30.4544691 59.6852791,30.4544972 59.6853031,30.4545225 59.6853279,30.4545451 59.6853534,30.4545829 59.6853462,30.4546442 59.6854282,30.4546081 59.6854351,30.4546263 59.6854611,30.4546407 59.6854917,30.4546513 59.6855211,30.4546577 59.6855509,30.4545667 59.6855569,30.4545695 59.6855677,30.4545502 59.6855689,30.4545521 59.6855762,30.454475 59.6855814,30.454473 59.685574,30.4544524 59.6855754,30.4544496 59.6855646,30.4544349 59.6855656,30.4543687 59.68557,30.4543619 59.6855441,30.4543522 59.6855184,30.4543439 59.6854971,30.4543247 59.685468,30.454307 59.6854434,30.4542866 59.6854194,30.4542636 59.6853959,30.4542381 59.6853732,30.4542062 59.685347,30.4541753 59.6853248,30.4541426 59.6853062,30.4541083 59.6852876,30.4540689 59.6852681,30.4540273 59.6852498,30.4539837 59.6852328,30.4539382 59.685217,30.4538908 59.6852026,30.4538877 59.6852126,30.4539316 59.6852158,30.4539299 59.6852218,30.4539248 59.68524,30.453923 59.6852463,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536921 59.6853643,30.4536766 59.6853631,30.453626 59.6853592,30.4536111 59.6853581,30.4536187 59.6853329,30.4534688 59.6853212,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.4532824 59.685393,30.4532679 59.6854007,30.4532019 59.6854356,30.4531881 59.6854429,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.45306 59.6855156,30.4530542 59.6855302,30.4530286 59.6856166,30.4530752 59.6856201,30.4531272 59.685624,30.4531226 59.6856395,30.4531 59.6857159,30.4530826 59.6857747,30.4530781 59.6857896,30.4530261 59.6857857,30.4529796 59.6857822,30.4529559 59.6858622,30.4529512 59.6858765,30.4529486 59.6858896,30.4529478 59.6859011,30.4529482 59.6859112,30.452952 59.685926,30.4529569 59.6859385,30.4529638 59.6859523,30.4529718 59.6859649,30.4529791 59.6859757,30.4529856 59.6859841,30.4530246 59.6859742,30.4530338 59.6859834,30.4530767 59.6860278,30.4530861 59.6860371,30.4530482 59.6860471,30.4530568 59.6860536,30.4530663 59.6860602,30.4530779 59.6860674,30.4530898 59.6860742,30.4531018 59.6860809,30.4531136 59.6860871,30.4531293 59.6860946,30.453148 59.6861029,30.4531695 59.6861116,30.4532167 59.6861306,30.4533686 59.6861421,30.453376 59.6861189,30.4533898 59.68612,30.4534436 59.6861244,30.453457 59.6861255,30.4534496 59.6861487,30.4536027 59.6861615,30.4535556 59.6863114,30.4535958 59.6863065,30.4536563 59.6862959,30.4537014 59.6862868,30.4537731 59.6862682,30.4538342 59.6862493,30.453879 59.6862345,30.4539364 59.686214,30.4539768 59.686198,30.45402 59.6861768,30.4540703 59.686148,30.4541119 59.6861223,30.4541469 59.6860952,30.4541742 59.6860729,30.4541995 59.6860505,30.4542215 59.6860272,30.4542918 59.6860451,30.4543031 59.6860479,30.4543127 59.6860386,30.45433 59.6860429,30.4543365 59.6860363,30.4544062 59.6860538,30.4543997 59.6860604,30.4544185 59.6860651,30.4544086 59.6860746,30.4544964 59.6860973,30.4544728 59.6861239,30.4544395 59.686154,30.4544059 59.686181,30.4543849 59.6861942,30.4544137 59.6862059,30.4542999 59.6862773,30.4542705 59.6862654,30.4542363 59.6862844,30.4541965 59.6863041,30.4541887 59.6863078,30.4542091 59.6863195,30.4542 59.6863235,30.4541696 59.6863371,30.4541607 59.6863411,30.4541407 59.6863296,30.4541297 59.6863344,30.4540887 59.6863495,30.4540549 59.6863624,30.4540219 59.6863729,30.4540399 59.6863883,30.4540005 59.6863999,30.4540172 59.6864141,30.4540057 59.6864176,30.4539576 59.686432,30.4539454 59.6864356,30.4539287 59.6864214,30.4538817 59.6864353,30.453863 59.6864194,30.4538212 59.6864281,30.4537814 59.6864354,30.4537376 59.6864434,30.4536952 59.6864492,30.4536556 59.6864553,30.4536188 59.68646,30.4535812 59.6864636,30.453575 59.6864544,30.4534768 59.6864467,30.4533659 59.6864383,30.4533611 59.6864525,30.4533485 59.6864515,30.4533248 59.6864494,30.4532998 59.6864473,30.4532869 59.6864462,30.4532916 59.686432,30.4532725 59.6864305,30.4532826 59.6863983,30.4531363 59.6863866,30.453138 59.686381,30.4531642 59.6862975,30.4531215 59.686294,30.4531372 59.6862455,30.4531795 59.686249,30.453196 59.6861992,30.4531704 59.6862175,30.4531608 59.6862141,30.453137 59.6862056,30.4531278 59.6862023,30.4531534 59.686184,30.4530963 59.6861616,30.4530418 59.6861992,30.4530167 59.6861897,30.4529804 59.6861727,30.4529497 59.6861561,30.4529175 59.6861373,30.4528879 59.6861175,30.4528659 59.6861008,30.4528406 59.6860793,30.4528174 59.6860572,30.4527956 59.6860336,30.4527791 59.6860133,30.4527643 59.6859927,30.4527472 59.6859643,30.4527383 59.6859422,30.4527314 59.6859191,30.4527279 59.6859036,30.4528174 59.6858982,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088,30.4522705 59.6857319,30.4522289 59.6857289,30.4521745 59.6857248)))', 'relation', 1759666, '{\"name\": \"Павловский дворец\", \"name:ca\": \"Palau Pàvlovsk\", \"name:en\": \"Pavlovsk Palace\", \"name:fi\": \"Pavlovskin_palatsi\", \"name:fr\": \"Palais de Pavlovsk\", \"name:pt\": \"Palácio de Pavlovsk\", \"name:uz\": \"Pavlovsk saroyi\", \"name:zh\": \"巴甫洛夫斯克的宫殿\", \"ref:okn\": \"781610399040316\", \"tourism\": \"museum\", \"building\": \"palace\", \"historic\": \"yes\", \"int_name\": \"Palais de Pavlovsk\", \"wikidata\": \"Q118121947\", \"wikipedia\": \"ru:Павловский дворец\", \"start_date\": \"1782\", \"addr:street\": \"Садовая улица\", \"roof:colour\": \"#DADDE2\", \"building:colour\": \"#FFE19C\", \"addr:housenumber\": \"20 литА\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534688 59.6853212,30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536666 59.6853366,30.4536187 59.6853329,30.4534688 59.6853212)))', 'relation', 6636665, '{\"name\": \"Южный корпус\", \"height\": \"15\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4534995 59.6852209)))', 'relation', 14572597, '{\"height\": \"15\", \"roof:shape\": \"gabled\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540054 59.6848752,30.4537854 59.6848579,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537003 59.685133,30.453682 59.6851921,30.4535124 59.6851786)))', 'relation', 18019154, '{\"height\": \"13\", \"roof:shape\": \"hipped\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL);\n--Testcase 402:\nSELECT count(*) FROM json_osm_test;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 404: オーク / Sồi\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 406:\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 407:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 408: 落葉性 / Cây rụng lá\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 409:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n--Testcase 410: 常緑植物 / Cây thường xanh\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n\n--Testcase 411:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n--Testcase 412: XVIII cent.\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n\n--Testcase 413:\nDELETE FROM json_osm_test;\n\n--Testcase 500:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/macaddr.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr) SERVER sqlite_svr OPTIONS (table 'type_MACADDR');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03');\n--Testcase 012:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03');\n--Testcase 013:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (3, '08002b:010203');\n--Testcase 014:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (4, '08002b-010203');\n--Testcase 015:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203');\n--Testcase 016:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203');\n--Testcase 017:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (7, '08002b010203');\n--Testcase 018:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03');\n--Testcase 019:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03');\n--Testcase 020:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (10, '08002F:010203');\n--Testcase 021:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (11, '08002F-010203');\n--Testcase 022:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203');\n--Testcase 023:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203');\n--Testcase 024:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (14, '08002F010203');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (15, decode('08002F010203', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (16, decode('08002b010203', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE macaddr;\n--Testcase 029:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03');\n--Testcase 030:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03');\n--Testcase 031:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (19, '08002b:010203');\n--Testcase 032:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (20, '08002b-010203');\n--Testcase 033:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203');\n--Testcase 034:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203');\n--Testcase 035:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (23, '08002b010203');\n--Testcase 036:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03');\n--Testcase 037:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03');\n--Testcase 038:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (26, '08002F:010203');\n--Testcase 039:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (27, '08002F-010203');\n--Testcase 040:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203');\n--Testcase 041:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203');\n--Testcase 042:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03');\n--Testcase 046:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03');\n--Testcase 047:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (33, '08002b:010203');\n--Testcase 048:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (34, '08002b-010203');\n--Testcase 049:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203');\n--Testcase 050:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203');\n--Testcase 051:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (37, '08002b010203');\n--Testcase 052:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03');\n--Testcase 053:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03');\n--Testcase 054:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (40, '08002F:010203');\n--Testcase 055:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (41, '08002F-010203');\n--Testcase 056:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203');\n--Testcase 057:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203');\n--Testcase 058:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03');\n--Testcase 062:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03');\n--Testcase 063:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (47, '08002b:010203');\n--Testcase 064:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (48, '08002b-010203');\n--Testcase 065:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203');\n--Testcase 066:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203');\n--Testcase 067:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (51, '08002b010203');\n--Testcase 068:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03');\n--Testcase 069:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03');\n--Testcase 070:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (54, '08002F:010203');\n--Testcase 071:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (55, '08002F-010203');\n--Testcase 072:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203');\n--Testcase 073:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203');\n--Testcase 074:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 091:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17; -- 9527026057731\n--Testcase 098:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (66, '00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (67, '00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (68, '00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" DESC;\n\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDRpk\" (col macaddr OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDRpk\" VALUES ('01-02-03-04-05-06');\n--Testcase 159:\nSELECT * FROM \"type_MACADDRpk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDRpk\";\n\n--no macaddr operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06' FROM \"type_MACADDR\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/macaddr8.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR8\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03:04:05');\n--Testcase 012:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03-04-05');\n--Testcase 013:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (3, '08002b01:02030405');\n--Testcase 014:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (4, '08002b01-02030405');\n--Testcase 015:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203.0405');\n--Testcase 016:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203-0405');\n--Testcase 017:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (7, '08002b0102030405');\n--Testcase 018:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03:04:05');\n--Testcase 019:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03-04-05');\n--Testcase 020:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (10, '08002F01:02030405');\n--Testcase 021:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (11, '08002F01-02030405');\n--Testcase 022:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203.0405');\n--Testcase 023:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203-0405');\n--Testcase 024:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (14, '08002F0102030405');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (15, decode('08002F0102030405', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (16, decode('08002b0102030405', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE macaddr8;\n--Testcase 029:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03:04:05');\n--Testcase 030:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03-04-05');\n--Testcase 031:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (19, '08002b01:02030405');\n--Testcase 032:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (20, '08002b01-02030405');\n--Testcase 033:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203.0405');\n--Testcase 034:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203-0405');\n--Testcase 035:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (23, '08002b0102030405');\n--Testcase 036:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03:04:05');\n--Testcase 037:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03-04-05');\n--Testcase 038:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (26, '08002F01:02030405');\n--Testcase 039:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (27, '08002F01-02030405');\n--Testcase 040:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203.0405');\n--Testcase 041:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203-0405');\n--Testcase 042:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03:04:05');\n--Testcase 046:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03-04-05');\n--Testcase 047:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (33, '08002b01:02030405');\n--Testcase 048:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (34, '08002b01-02030405');\n--Testcase 049:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203.0405');\n--Testcase 050:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203-0405');\n--Testcase 051:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (37, '08002b0102030405');\n--Testcase 052:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03:04:05');\n--Testcase 053:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03-04-05');\n--Testcase 054:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (40, '08002F01:02030405');\n--Testcase 055:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (41, '08002F01-02030405');\n--Testcase 056:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203.0405');\n--Testcase 057:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203-0405');\n--Testcase 058:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03:04:05');\n--Testcase 062:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03-04-05');\n--Testcase 063:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (47, '08002b01:02030405');\n--Testcase 064:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (48, '08002b01-02030405');\n--Testcase 065:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203.0405');\n--Testcase 066:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203-0405');\n--Testcase 067:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (51, '08002b0102030405');\n--Testcase 068:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03:04:05');\n--Testcase 069:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03-04-05');\n--Testcase 070:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (54, '08002F01:02030405');\n--Testcase 071:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (55, '08002F01-02030405');\n--Testcase 072:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203.0405');\n--Testcase 073:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203-0405');\n--Testcase 074:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR8+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 091:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 098:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04:04:05');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR8+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR8+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR8\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (66, '00:00:00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (67, '00:00:00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (68, '00:00:00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" DESC;\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDR8pk\" (col macaddr8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01-02-03-04-05-06-07-08');\n--Testcase 159:\nSELECT * FROM \"type_MACADDR8pk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDR8pk\";\n\n--no macaddr8 operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR8\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/numeric.sql",
    "content": "--\n-- NUMERIC\n--\n--Testcase 567:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 568:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 569:\nCREATE FOREIGN TABLE num_data (id int4 OPTIONS (key 'true'), val numeric(210,10)) SERVER sqlite_svr;\n--Testcase 570:\nCREATE FOREIGN TABLE num_exp_add (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 571:\nCREATE FOREIGN TABLE num_exp_sub (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 572:\nCREATE FOREIGN TABLE num_exp_div (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 573:\nCREATE FOREIGN TABLE num_exp_mul (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 574:\nCREATE FOREIGN TABLE num_exp_sqrt (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 575:\nCREATE FOREIGN TABLE num_exp_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 576:\nCREATE FOREIGN TABLE num_exp_log10 (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 577:\nCREATE FOREIGN TABLE num_exp_power_10_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n\n--Testcase 578:\nCREATE FOREIGN TABLE num_result (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), result numeric(210,10)) SERVER sqlite_svr;\n\n\n-- ******************************\n-- * The following EXPECTED results are computed by bc(1)\n-- * with a scale of 200\n-- ******************************\n\nBEGIN TRANSACTION;\n--Testcase 1:\nINSERT INTO num_exp_add VALUES (0,0,'0');\n--Testcase 2:\nINSERT INTO num_exp_sub VALUES (0,0,'0');\n--Testcase 3:\nINSERT INTO num_exp_mul VALUES (0,0,'0');\n--Testcase 4:\nINSERT INTO num_exp_div VALUES (0,0,'NaN');\n--Testcase 5:\nINSERT INTO num_exp_add VALUES (0,1,'0');\n--Testcase 6:\nINSERT INTO num_exp_sub VALUES (0,1,'0');\n--Testcase 7:\nINSERT INTO num_exp_mul VALUES (0,1,'0');\n--Testcase 8:\nINSERT INTO num_exp_div VALUES (0,1,'NaN');\n--Testcase 9:\nINSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');\n--Testcase 10:\nINSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');\n--Testcase 11:\nINSERT INTO num_exp_mul VALUES (0,2,'0');\n--Testcase 12:\nINSERT INTO num_exp_div VALUES (0,2,'0');\n--Testcase 13:\nINSERT INTO num_exp_add VALUES (0,3,'4.31');\n--Testcase 14:\nINSERT INTO num_exp_sub VALUES (0,3,'-4.31');\n--Testcase 15:\nINSERT INTO num_exp_mul VALUES (0,3,'0');\n--Testcase 16:\nINSERT INTO num_exp_div VALUES (0,3,'0');\n--Testcase 17:\nINSERT INTO num_exp_add VALUES (0,4,'7799461.4119');\n--Testcase 18:\nINSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');\n--Testcase 19:\nINSERT INTO num_exp_mul VALUES (0,4,'0');\n--Testcase 20:\nINSERT INTO num_exp_div VALUES (0,4,'0');\n--Testcase 21:\nINSERT INTO num_exp_add VALUES (0,5,'16397.038491');\n--Testcase 22:\nINSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');\n--Testcase 23:\nINSERT INTO num_exp_mul VALUES (0,5,'0');\n--Testcase 24:\nINSERT INTO num_exp_div VALUES (0,5,'0');\n--Testcase 25:\nINSERT INTO num_exp_add VALUES (0,6,'93901.57763026');\n--Testcase 26:\nINSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');\n--Testcase 27:\nINSERT INTO num_exp_mul VALUES (0,6,'0');\n--Testcase 28:\nINSERT INTO num_exp_div VALUES (0,6,'0');\n--Testcase 29:\nINSERT INTO num_exp_add VALUES (0,7,'-83028485');\n--Testcase 30:\nINSERT INTO num_exp_sub VALUES (0,7,'83028485');\n--Testcase 31:\nINSERT INTO num_exp_mul VALUES (0,7,'0');\n--Testcase 32:\nINSERT INTO num_exp_div VALUES (0,7,'0');\n--Testcase 33:\nINSERT INTO num_exp_add VALUES (0,8,'74881');\n--Testcase 34:\nINSERT INTO num_exp_sub VALUES (0,8,'-74881');\n--Testcase 35:\nINSERT INTO num_exp_mul VALUES (0,8,'0');\n--Testcase 36:\nINSERT INTO num_exp_div VALUES (0,8,'0');\n--Testcase 37:\nINSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');\n--Testcase 38:\nINSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');\n--Testcase 39:\nINSERT INTO num_exp_mul VALUES (0,9,'0');\n--Testcase 40:\nINSERT INTO num_exp_div VALUES (0,9,'0');\n--Testcase 41:\nINSERT INTO num_exp_add VALUES (1,0,'0');\n--Testcase 42:\nINSERT INTO num_exp_sub VALUES (1,0,'0');\n--Testcase 43:\nINSERT INTO num_exp_mul VALUES (1,0,'0');\n--Testcase 44:\nINSERT INTO num_exp_div VALUES (1,0,'NaN');\n--Testcase 45:\nINSERT INTO num_exp_add VALUES (1,1,'0');\n--Testcase 46:\nINSERT INTO num_exp_sub VALUES (1,1,'0');\n--Testcase 47:\nINSERT INTO num_exp_mul VALUES (1,1,'0');\n--Testcase 48:\nINSERT INTO num_exp_div VALUES (1,1,'NaN');\n--Testcase 49:\nINSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');\n--Testcase 50:\nINSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');\n--Testcase 51:\nINSERT INTO num_exp_mul VALUES (1,2,'0');\n--Testcase 52:\nINSERT INTO num_exp_div VALUES (1,2,'0');\n--Testcase 53:\nINSERT INTO num_exp_add VALUES (1,3,'4.31');\n--Testcase 54:\nINSERT INTO num_exp_sub VALUES (1,3,'-4.31');\n--Testcase 55:\nINSERT INTO num_exp_mul VALUES (1,3,'0');\n--Testcase 56:\nINSERT INTO num_exp_div VALUES (1,3,'0');\n--Testcase 57:\nINSERT INTO num_exp_add VALUES (1,4,'7799461.4119');\n--Testcase 58:\nINSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');\n--Testcase 59:\nINSERT INTO num_exp_mul VALUES (1,4,'0');\n--Testcase 60:\nINSERT INTO num_exp_div VALUES (1,4,'0');\n--Testcase 61:\nINSERT INTO num_exp_add VALUES (1,5,'16397.038491');\n--Testcase 62:\nINSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');\n--Testcase 63:\nINSERT INTO num_exp_mul VALUES (1,5,'0');\n--Testcase 64:\nINSERT INTO num_exp_div VALUES (1,5,'0');\n--Testcase 65:\nINSERT INTO num_exp_add VALUES (1,6,'93901.57763026');\n--Testcase 66:\nINSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');\n--Testcase 67:\nINSERT INTO num_exp_mul VALUES (1,6,'0');\n--Testcase 68:\nINSERT INTO num_exp_div VALUES (1,6,'0');\n--Testcase 69:\nINSERT INTO num_exp_add VALUES (1,7,'-83028485');\n--Testcase 70:\nINSERT INTO num_exp_sub VALUES (1,7,'83028485');\n--Testcase 71:\nINSERT INTO num_exp_mul VALUES (1,7,'0');\n--Testcase 72:\nINSERT INTO num_exp_div VALUES (1,7,'0');\n--Testcase 73:\nINSERT INTO num_exp_add VALUES (1,8,'74881');\n--Testcase 74:\nINSERT INTO num_exp_sub VALUES (1,8,'-74881');\n--Testcase 75:\nINSERT INTO num_exp_mul VALUES (1,8,'0');\n--Testcase 76:\nINSERT INTO num_exp_div VALUES (1,8,'0');\n--Testcase 77:\nINSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');\n--Testcase 78:\nINSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');\n--Testcase 79:\nINSERT INTO num_exp_mul VALUES (1,9,'0');\n--Testcase 80:\nINSERT INTO num_exp_div VALUES (1,9,'0');\n--Testcase 81:\nINSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');\n--Testcase 82:\nINSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');\n--Testcase 83:\nINSERT INTO num_exp_mul VALUES (2,0,'0');\n--Testcase 84:\nINSERT INTO num_exp_div VALUES (2,0,'NaN');\n--Testcase 85:\nINSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');\n--Testcase 86:\nINSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');\n--Testcase 87:\nINSERT INTO num_exp_mul VALUES (2,1,'0');\n--Testcase 88:\nINSERT INTO num_exp_div VALUES (2,1,'NaN');\n--Testcase 89:\nINSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');\n--Testcase 90:\nINSERT INTO num_exp_sub VALUES (2,2,'0');\n--Testcase 91:\nINSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');\n--Testcase 92:\nINSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');\n--Testcase 93:\nINSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');\n--Testcase 94:\nINSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');\n--Testcase 95:\nINSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');\n--Testcase 96:\nINSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');\n--Testcase 97:\nINSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');\n--Testcase 98:\nINSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');\n--Testcase 99:\nINSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');\n--Testcase 100:\nINSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');\n--Testcase 101:\nINSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');\n--Testcase 102:\nINSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');\n--Testcase 103:\nINSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');\n--Testcase 104:\nINSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');\n--Testcase 105:\nINSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');\n--Testcase 106:\nINSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');\n--Testcase 107:\nINSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');\n--Testcase 108:\nINSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');\n--Testcase 109:\nINSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');\n--Testcase 110:\nINSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');\n--Testcase 111:\nINSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');\n--Testcase 112:\nINSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');\n--Testcase 113:\nINSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');\n--Testcase 114:\nINSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');\n--Testcase 115:\nINSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');\n--Testcase 116:\nINSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');\n--Testcase 117:\nINSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');\n--Testcase 118:\nINSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');\n--Testcase 119:\nINSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');\n--Testcase 120:\nINSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');\n--Testcase 121:\nINSERT INTO num_exp_add VALUES (3,0,'4.31');\n--Testcase 122:\nINSERT INTO num_exp_sub VALUES (3,0,'4.31');\n--Testcase 123:\nINSERT INTO num_exp_mul VALUES (3,0,'0');\n--Testcase 124:\nINSERT INTO num_exp_div VALUES (3,0,'NaN');\n--Testcase 125:\nINSERT INTO num_exp_add VALUES (3,1,'4.31');\n--Testcase 126:\nINSERT INTO num_exp_sub VALUES (3,1,'4.31');\n--Testcase 127:\nINSERT INTO num_exp_mul VALUES (3,1,'0');\n--Testcase 128:\nINSERT INTO num_exp_div VALUES (3,1,'NaN');\n--Testcase 129:\nINSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');\n--Testcase 130:\nINSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');\n--Testcase 131:\nINSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');\n--Testcase 132:\nINSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');\n--Testcase 133:\nINSERT INTO num_exp_add VALUES (3,3,'8.62');\n--Testcase 134:\nINSERT INTO num_exp_sub VALUES (3,3,'0');\n--Testcase 135:\nINSERT INTO num_exp_mul VALUES (3,3,'18.5761');\n--Testcase 136:\nINSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');\n--Testcase 137:\nINSERT INTO num_exp_add VALUES (3,4,'7799465.7219');\n--Testcase 138:\nINSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');\n--Testcase 139:\nINSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');\n--Testcase 140:\nINSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');\n--Testcase 141:\nINSERT INTO num_exp_add VALUES (3,5,'16401.348491');\n--Testcase 142:\nINSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');\n--Testcase 143:\nINSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');\n--Testcase 144:\nINSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');\n--Testcase 145:\nINSERT INTO num_exp_add VALUES (3,6,'93905.88763026');\n--Testcase 146:\nINSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');\n--Testcase 147:\nINSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');\n--Testcase 148:\nINSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');\n--Testcase 149:\nINSERT INTO num_exp_add VALUES (3,7,'-83028480.69');\n--Testcase 150:\nINSERT INTO num_exp_sub VALUES (3,7,'83028489.31');\n--Testcase 151:\nINSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');\n--Testcase 152:\nINSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');\n--Testcase 153:\nINSERT INTO num_exp_add VALUES (3,8,'74885.31');\n--Testcase 154:\nINSERT INTO num_exp_sub VALUES (3,8,'-74876.69');\n--Testcase 155:\nINSERT INTO num_exp_mul VALUES (3,8,'322737.11');\n--Testcase 156:\nINSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');\n--Testcase 157:\nINSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');\n--Testcase 158:\nINSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');\n--Testcase 159:\nINSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');\n--Testcase 160:\nINSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');\n--Testcase 161:\nINSERT INTO num_exp_add VALUES (4,0,'7799461.4119');\n--Testcase 162:\nINSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');\n--Testcase 163:\nINSERT INTO num_exp_mul VALUES (4,0,'0');\n--Testcase 164:\nINSERT INTO num_exp_div VALUES (4,0,'NaN');\n--Testcase 165:\nINSERT INTO num_exp_add VALUES (4,1,'7799461.4119');\n--Testcase 166:\nINSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');\n--Testcase 167:\nINSERT INTO num_exp_mul VALUES (4,1,'0');\n--Testcase 168:\nINSERT INTO num_exp_div VALUES (4,1,'NaN');\n--Testcase 169:\nINSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');\n--Testcase 170:\nINSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');\n--Testcase 171:\nINSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');\n--Testcase 172:\nINSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');\n--Testcase 173:\nINSERT INTO num_exp_add VALUES (4,3,'7799465.7219');\n--Testcase 174:\nINSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');\n--Testcase 175:\nINSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');\n--Testcase 176:\nINSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');\n--Testcase 177:\nINSERT INTO num_exp_add VALUES (4,4,'15598922.8238');\n--Testcase 178:\nINSERT INTO num_exp_sub VALUES (4,4,'0');\n--Testcase 179:\nINSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');\n--Testcase 180:\nINSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');\n--Testcase 181:\nINSERT INTO num_exp_add VALUES (4,5,'7815858.450391');\n--Testcase 182:\nINSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');\n--Testcase 183:\nINSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');\n--Testcase 184:\nINSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');\n--Testcase 185:\nINSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');\n--Testcase 186:\nINSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');\n--Testcase 187:\nINSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');\n--Testcase 188:\nINSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');\n--Testcase 189:\nINSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');\n--Testcase 190:\nINSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');\n--Testcase 191:\nINSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');\n--Testcase 192:\nINSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');\n--Testcase 193:\nINSERT INTO num_exp_add VALUES (4,8,'7874342.4119');\n--Testcase 194:\nINSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');\n--Testcase 195:\nINSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');\n--Testcase 196:\nINSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');\n--Testcase 197:\nINSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');\n--Testcase 198:\nINSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');\n--Testcase 199:\nINSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');\n--Testcase 200:\nINSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');\n--Testcase 201:\nINSERT INTO num_exp_add VALUES (5,0,'16397.038491');\n--Testcase 202:\nINSERT INTO num_exp_sub VALUES (5,0,'16397.038491');\n--Testcase 203:\nINSERT INTO num_exp_mul VALUES (5,0,'0');\n--Testcase 204:\nINSERT INTO num_exp_div VALUES (5,0,'NaN');\n--Testcase 205:\nINSERT INTO num_exp_add VALUES (5,1,'16397.038491');\n--Testcase 206:\nINSERT INTO num_exp_sub VALUES (5,1,'16397.038491');\n--Testcase 207:\nINSERT INTO num_exp_mul VALUES (5,1,'0');\n--Testcase 208:\nINSERT INTO num_exp_div VALUES (5,1,'NaN');\n--Testcase 209:\nINSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');\n--Testcase 210:\nINSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');\n--Testcase 211:\nINSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');\n--Testcase 212:\nINSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');\n--Testcase 213:\nINSERT INTO num_exp_add VALUES (5,3,'16401.348491');\n--Testcase 214:\nINSERT INTO num_exp_sub VALUES (5,3,'16392.728491');\n--Testcase 215:\nINSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');\n--Testcase 216:\nINSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');\n--Testcase 217:\nINSERT INTO num_exp_add VALUES (5,4,'7815858.450391');\n--Testcase 218:\nINSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');\n--Testcase 219:\nINSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');\n--Testcase 220:\nINSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');\n--Testcase 221:\nINSERT INTO num_exp_add VALUES (5,5,'32794.076982');\n--Testcase 222:\nINSERT INTO num_exp_sub VALUES (5,5,'0');\n--Testcase 223:\nINSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');\n--Testcase 224:\nINSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');\n--Testcase 225:\nINSERT INTO num_exp_add VALUES (5,6,'110298.61612126');\n--Testcase 226:\nINSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');\n--Testcase 227:\nINSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');\n--Testcase 228:\nINSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');\n--Testcase 229:\nINSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');\n--Testcase 230:\nINSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');\n--Testcase 231:\nINSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');\n--Testcase 232:\nINSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');\n--Testcase 233:\nINSERT INTO num_exp_add VALUES (5,8,'91278.038491');\n--Testcase 234:\nINSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');\n--Testcase 235:\nINSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');\n--Testcase 236:\nINSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');\n--Testcase 237:\nINSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');\n--Testcase 238:\nINSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');\n--Testcase 239:\nINSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');\n--Testcase 240:\nINSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');\n--Testcase 241:\nINSERT INTO num_exp_add VALUES (6,0,'93901.57763026');\n--Testcase 242:\nINSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');\n--Testcase 243:\nINSERT INTO num_exp_mul VALUES (6,0,'0');\n--Testcase 244:\nINSERT INTO num_exp_div VALUES (6,0,'NaN');\n--Testcase 245:\nINSERT INTO num_exp_add VALUES (6,1,'93901.57763026');\n--Testcase 246:\nINSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');\n--Testcase 247:\nINSERT INTO num_exp_mul VALUES (6,1,'0');\n--Testcase 248:\nINSERT INTO num_exp_div VALUES (6,1,'NaN');\n--Testcase 249:\nINSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');\n--Testcase 250:\nINSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');\n--Testcase 251:\nINSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');\n--Testcase 252:\nINSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');\n--Testcase 253:\nINSERT INTO num_exp_add VALUES (6,3,'93905.88763026');\n--Testcase 254:\nINSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');\n--Testcase 255:\nINSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');\n--Testcase 256:\nINSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');\n--Testcase 257:\nINSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');\n--Testcase 258:\nINSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');\n--Testcase 259:\nINSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');\n--Testcase 260:\nINSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');\n--Testcase 261:\nINSERT INTO num_exp_add VALUES (6,5,'110298.61612126');\n--Testcase 262:\nINSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');\n--Testcase 263:\nINSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');\n--Testcase 264:\nINSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');\n--Testcase 265:\nINSERT INTO num_exp_add VALUES (6,6,'187803.15526052');\n--Testcase 266:\nINSERT INTO num_exp_sub VALUES (6,6,'0');\n--Testcase 267:\nINSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');\n--Testcase 268:\nINSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');\n--Testcase 269:\nINSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');\n--Testcase 270:\nINSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');\n--Testcase 271:\nINSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');\n--Testcase 272:\nINSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');\n--Testcase 273:\nINSERT INTO num_exp_add VALUES (6,8,'168782.57763026');\n--Testcase 274:\nINSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');\n--Testcase 275:\nINSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');\n--Testcase 276:\nINSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');\n--Testcase 277:\nINSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');\n--Testcase 278:\nINSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');\n--Testcase 279:\nINSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');\n--Testcase 280:\nINSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');\n--Testcase 281:\nINSERT INTO num_exp_add VALUES (7,0,'-83028485');\n--Testcase 282:\nINSERT INTO num_exp_sub VALUES (7,0,'-83028485');\n--Testcase 283:\nINSERT INTO num_exp_mul VALUES (7,0,'0');\n--Testcase 284:\nINSERT INTO num_exp_div VALUES (7,0,'NaN');\n--Testcase 285:\nINSERT INTO num_exp_add VALUES (7,1,'-83028485');\n--Testcase 286:\nINSERT INTO num_exp_sub VALUES (7,1,'-83028485');\n--Testcase 287:\nINSERT INTO num_exp_mul VALUES (7,1,'0');\n--Testcase 288:\nINSERT INTO num_exp_div VALUES (7,1,'NaN');\n--Testcase 289:\nINSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');\n--Testcase 290:\nINSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');\n--Testcase 291:\nINSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');\n--Testcase 292:\nINSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');\n--Testcase 293:\nINSERT INTO num_exp_add VALUES (7,3,'-83028480.69');\n--Testcase 294:\nINSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');\n--Testcase 295:\nINSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');\n--Testcase 296:\nINSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');\n--Testcase 297:\nINSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');\n--Testcase 298:\nINSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');\n--Testcase 299:\nINSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');\n--Testcase 300:\nINSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');\n--Testcase 301:\nINSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');\n--Testcase 302:\nINSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');\n--Testcase 303:\nINSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');\n--Testcase 304:\nINSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');\n--Testcase 305:\nINSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');\n--Testcase 306:\nINSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');\n--Testcase 307:\nINSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');\n--Testcase 308:\nINSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');\n--Testcase 309:\nINSERT INTO num_exp_add VALUES (7,7,'-166056970');\n--Testcase 310:\nINSERT INTO num_exp_sub VALUES (7,7,'0');\n--Testcase 311:\nINSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');\n--Testcase 312:\nINSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');\n--Testcase 313:\nINSERT INTO num_exp_add VALUES (7,8,'-82953604');\n--Testcase 314:\nINSERT INTO num_exp_sub VALUES (7,8,'-83103366');\n--Testcase 315:\nINSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');\n--Testcase 316:\nINSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');\n--Testcase 317:\nINSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');\n--Testcase 318:\nINSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');\n--Testcase 319:\nINSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');\n--Testcase 320:\nINSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');\n--Testcase 321:\nINSERT INTO num_exp_add VALUES (8,0,'74881');\n--Testcase 322:\nINSERT INTO num_exp_sub VALUES (8,0,'74881');\n--Testcase 323:\nINSERT INTO num_exp_mul VALUES (8,0,'0');\n--Testcase 324:\nINSERT INTO num_exp_div VALUES (8,0,'NaN');\n--Testcase 325:\nINSERT INTO num_exp_add VALUES (8,1,'74881');\n--Testcase 326:\nINSERT INTO num_exp_sub VALUES (8,1,'74881');\n--Testcase 327:\nINSERT INTO num_exp_mul VALUES (8,1,'0');\n--Testcase 328:\nINSERT INTO num_exp_div VALUES (8,1,'NaN');\n--Testcase 329:\nINSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');\n--Testcase 330:\nINSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');\n--Testcase 331:\nINSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');\n--Testcase 332:\nINSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');\n--Testcase 333:\nINSERT INTO num_exp_add VALUES (8,3,'74885.31');\n--Testcase 334:\nINSERT INTO num_exp_sub VALUES (8,3,'74876.69');\n--Testcase 335:\nINSERT INTO num_exp_mul VALUES (8,3,'322737.11');\n--Testcase 336:\nINSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');\n--Testcase 337:\nINSERT INTO num_exp_add VALUES (8,4,'7874342.4119');\n--Testcase 338:\nINSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');\n--Testcase 339:\nINSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');\n--Testcase 340:\nINSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');\n--Testcase 341:\nINSERT INTO num_exp_add VALUES (8,5,'91278.038491');\n--Testcase 342:\nINSERT INTO num_exp_sub VALUES (8,5,'58483.961509');\n--Testcase 343:\nINSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');\n--Testcase 344:\nINSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');\n--Testcase 345:\nINSERT INTO num_exp_add VALUES (8,6,'168782.57763026');\n--Testcase 346:\nINSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');\n--Testcase 347:\nINSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');\n--Testcase 348:\nINSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');\n--Testcase 349:\nINSERT INTO num_exp_add VALUES (8,7,'-82953604');\n--Testcase 350:\nINSERT INTO num_exp_sub VALUES (8,7,'83103366');\n--Testcase 351:\nINSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');\n--Testcase 352:\nINSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');\n--Testcase 353:\nINSERT INTO num_exp_add VALUES (8,8,'149762');\n--Testcase 354:\nINSERT INTO num_exp_sub VALUES (8,8,'0');\n--Testcase 355:\nINSERT INTO num_exp_mul VALUES (8,8,'5607164161');\n--Testcase 356:\nINSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');\n--Testcase 357:\nINSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');\n--Testcase 358:\nINSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');\n--Testcase 359:\nINSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');\n--Testcase 360:\nINSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');\n--Testcase 361:\nINSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');\n--Testcase 362:\nINSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');\n--Testcase 363:\nINSERT INTO num_exp_mul VALUES (9,0,'0');\n--Testcase 364:\nINSERT INTO num_exp_div VALUES (9,0,'NaN');\n--Testcase 365:\nINSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');\n--Testcase 366:\nINSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');\n--Testcase 367:\nINSERT INTO num_exp_mul VALUES (9,1,'0');\n--Testcase 368:\nINSERT INTO num_exp_div VALUES (9,1,'NaN');\n--Testcase 369:\nINSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');\n--Testcase 370:\nINSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');\n--Testcase 371:\nINSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');\n--Testcase 372:\nINSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');\n--Testcase 373:\nINSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');\n--Testcase 374:\nINSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');\n--Testcase 375:\nINSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');\n--Testcase 376:\nINSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');\n--Testcase 377:\nINSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');\n--Testcase 378:\nINSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');\n--Testcase 379:\nINSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');\n--Testcase 380:\nINSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');\n--Testcase 381:\nINSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');\n--Testcase 382:\nINSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');\n--Testcase 383:\nINSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');\n--Testcase 384:\nINSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');\n--Testcase 385:\nINSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');\n--Testcase 386:\nINSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');\n--Testcase 387:\nINSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');\n--Testcase 388:\nINSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');\n--Testcase 389:\nINSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');\n--Testcase 390:\nINSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');\n--Testcase 391:\nINSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');\n--Testcase 392:\nINSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');\n--Testcase 393:\nINSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');\n--Testcase 394:\nINSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');\n--Testcase 395:\nINSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');\n--Testcase 396:\nINSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');\n--Testcase 397:\nINSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');\n--Testcase 398:\nINSERT INTO num_exp_sub VALUES (9,9,'0');\n--Testcase 399:\nINSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');\n--Testcase 400:\nINSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 401:\nINSERT INTO num_exp_sqrt VALUES (0,'0');\n--Testcase 402:\nINSERT INTO num_exp_sqrt VALUES (1,'0');\n--Testcase 403:\nINSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');\n--Testcase 404:\nINSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');\n--Testcase 405:\nINSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');\n--Testcase 406:\nINSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');\n--Testcase 407:\nINSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');\n--Testcase 408:\nINSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');\n--Testcase 409:\nINSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');\n--Testcase 410:\nINSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 411:\nINSERT INTO num_exp_ln VALUES (0,'NaN');\n--Testcase 412:\nINSERT INTO num_exp_ln VALUES (1,'NaN');\n--Testcase 413:\nINSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');\n--Testcase 414:\nINSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');\n--Testcase 415:\nINSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');\n--Testcase 416:\nINSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');\n--Testcase 417:\nINSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');\n--Testcase 418:\nINSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');\n--Testcase 419:\nINSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');\n--Testcase 420:\nINSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 421:\nINSERT INTO num_exp_log10 VALUES (0,'NaN');\n--Testcase 422:\nINSERT INTO num_exp_log10 VALUES (1,'NaN');\n--Testcase 423:\nINSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');\n--Testcase 424:\nINSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');\n--Testcase 425:\nINSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');\n--Testcase 426:\nINSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');\n--Testcase 427:\nINSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');\n--Testcase 428:\nINSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');\n--Testcase 429:\nINSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');\n--Testcase 430:\nINSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 431:\nINSERT INTO num_exp_power_10_ln VALUES (0,'NaN');\n--Testcase 432:\nINSERT INTO num_exp_power_10_ln VALUES (1,'NaN');\n--Testcase 433:\nINSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');\n--Testcase 434:\nINSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');\n--Testcase 435:\nINSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');\n--Testcase 436:\nINSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');\n--Testcase 437:\nINSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');\n--Testcase 438:\nINSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');\n--Testcase 439:\nINSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');\n--Testcase 440:\nINSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 441:\nINSERT INTO num_data VALUES (0, '0');\n--Testcase 442:\nINSERT INTO num_data VALUES (1, '0');\n--Testcase 443:\nINSERT INTO num_data VALUES (2, '-34338492.215397047');\n--Testcase 444:\nINSERT INTO num_data VALUES (3, '4.31');\n--Testcase 445:\nINSERT INTO num_data VALUES (4, '7799461.4119');\n--Testcase 446:\nINSERT INTO num_data VALUES (5, '16397.038491');\n--Testcase 447:\nINSERT INTO num_data VALUES (6, '93901.57763026');\n--Testcase 448:\nINSERT INTO num_data VALUES (7, '-83028485');\n--Testcase 449:\nINSERT INTO num_data VALUES (8, '74881');\n--Testcase 450:\nINSERT INTO num_data VALUES (9, '-24926804.045047420');\n\nCOMMIT TRANSACTION;\n\n-- ******************************\n-- * Create indices for faster checks\n-- ******************************\n-- Skip these setting, creating foreign table with primary key already covered.\n--CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);\n--CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);\n--CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);\n--CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);\n--CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);\n--CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);\n--VACUUM ANALYZE num_exp_add;\n--VACUUM ANALYZE num_exp_sub;\n--VACUUM ANALYZE num_exp_div;\n--VACUUM ANALYZE num_exp_mul;\n--VACUUM ANALYZE num_exp_sqrt;\n--VACUUM ANALYZE num_exp_ln;\n--VACUUM ANALYZE num_exp_log10;\n--VACUUM ANALYZE num_exp_power_10_ln;\n\n-- ******************************\n-- * Now check the behaviour of the NUMERIC type\n-- ******************************\n\n-- ******************************\n-- * Addition check\n-- ******************************\n\n--Testcase 451:\nDELETE FROM num_result;\n--Testcase 452:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 453:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 454:\nDELETE FROM num_result;\n--Testcase 455:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)\n    FROM num_data t1, num_data t2;\n--Testcase 456:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 10);\n\n-- ******************************\n-- * Subtraction check\n-- ******************************\n--Testcase 457:\nDELETE FROM num_result;\n--Testcase 458:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 459:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 460:\nDELETE FROM num_result;\n--Testcase 461:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)\n    FROM num_data t1, num_data t2;\n--Testcase 462:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 40);\n\n-- ******************************\n-- * Multiply check\n-- ******************************\n--Testcase 463:\nDELETE FROM num_result;\n--Testcase 464:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 465:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 466:\nDELETE FROM num_result;\n--Testcase 467:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)\n    FROM num_data t1, num_data t2;\n--Testcase 468:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 30);\n\n-- ******************************\n-- * Division check\n-- ******************************\n--Testcase 469:\nDELETE FROM num_result;\n--Testcase 470:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 471:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 472:\nDELETE FROM num_result;\n--Testcase 473:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 474:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 80);\n\n-- ******************************\n-- * Square root check\n-- ******************************\n--Testcase 475:\nDELETE FROM num_result;\n--Testcase 476:\nINSERT INTO num_result SELECT id, 0, SQRT(ABS(val))\n    FROM num_data;\n--Testcase 477:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_sqrt t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Natural logarithm check\n-- ******************************\n--Testcase 478:\nDELETE FROM num_result;\n--Testcase 479:\nINSERT INTO num_result SELECT id, 0, LN(ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 480:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Logarithm base 10 check\n-- ******************************\n--Testcase 481:\nDELETE FROM num_result;\n--Testcase 482:\nINSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 483:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_log10 t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * POWER(10, LN(value)) check\n-- ******************************\n--Testcase 484:\nDELETE FROM num_result;\n--Testcase 485:\nINSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 486:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_power_10_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Check behavior with Inf and NaN inputs.  It's easiest to handle these\n-- * separately from the num_data framework used above, because some input\n-- * combinations will throw errors.\n-- ******************************\n--Testcase 1451:\nCREATE FOREIGN TABLE v (id int4 OPTIONS (key 'true'), x numeric, val float8) SERVER sqlite_svr;\n\nBEGIN;\n--Testcase 1452:\nDELETE FROM v;\n--Testcase 1453:\nINSERT INTO v(x) VALUES ('0'::float8),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan');\n--Testcase 1454:\nSELECT x1, x2,\n  x1::numeric + x2::numeric AS sum,\n  x1::numeric - x2::numeric AS diff,\n  x1::numeric * x2::numeric AS prod\nFROM v AS v1(id, x1), v AS v2(id, x2);\n\n--Testcase 1455:\nSELECT x1, x2,\n  x1::numeric / x2::numeric AS quot,\n  x1::numeric % x2::numeric AS mod,\n  div(x1::numeric, x2::numeric) AS div\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x2 != 0;\nROLLBACK;\n\nBEGIN;\n--Testcase 1286:\nDELETE FROM v;\n--Testcase 1287:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1288:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1289:\nDELETE FROM v;\n--Testcase 1290:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1291:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1292:\nDELETE FROM v;\n--Testcase 1293:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1294:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1295:\nDELETE FROM v;\n--Testcase 1296:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1297:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1298:\nDELETE FROM v;\n--Testcase 1299:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1300:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1301:\nDELETE FROM v;\n--Testcase 1302:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1303:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1304:\nDELETE FROM v;\n--Testcase 1305:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1306:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1307:\nDELETE FROM v;\n--Testcase 1308:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1309:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1310:\nDELETE FROM v;\n--Testcase 1311:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1312:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1313:\nDELETE FROM v;\n--Testcase 1314:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1315:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1316:\nDELETE FROM v;\n--Testcase 1317:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1318:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1319:\nDELETE FROM v;\n--Testcase 1320:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1321:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1456:\nDELETE FROM v;\n--Testcase 1457:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1458:\nSELECT x, -x as minusx, abs(x::numeric), floor(x::numeric), ceil(x::numeric), sign(x::numeric), numeric_inc(x::numeric) as inc\nFROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1459:\nDELETE FROM v;\n--Testcase 1460:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1461:\nSELECT x, round(x::numeric), round(x::numeric,1) as round1, trunc(x::numeric), trunc(x::numeric,1) as trunc1\nFROM v;\nROLLBACK;\n\n-- the large values fall into the numeric abbreviation code's maximal classes\nBEGIN;\n--Testcase 1462:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),\n                        ('inf'),('-inf'),('nan'),\n                        ('inf'),('-inf'),('nan');\n--Testcase 1463:\nSELECT substring(x::text, 1, 32) FROM v ORDER BY x;\nROLLBACK;\n\n--Testcase 1464:\nDELETE FROM v;\n--Testcase 1465:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('4.2'),('inf'),('nan');\n--Testcase 1466:\nSELECT x, sqrt(x) FROM v;\n\n--Testcase 1333:\nDELETE FROM v;\n--Testcase 1334:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1335:\nSELECT sqrt(x::numeric) FROM v;\n--Testcase 1336:\nDELETE FROM v;\n--Testcase 1337:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1338:\nSELECT sqrt(x::numeric) FROM v;\n\n--Testcase 1467:\nDELETE FROM v;\n--Testcase 1468:\nINSERT INTO v(x) VALUES ('1'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1469:\nSELECT x,\n  log(x::numeric),\n  log10(x::numeric),\n  ln(x::numeric)\nFROM v;\n\n--Testcase 1342:\nDELETE FROM v;\n--Testcase 1343:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1344:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1345:\nDELETE FROM v;\n--Testcase 1346:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1347:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1348:\nDELETE FROM v;\n--Testcase 1349:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1350:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1470:\nDELETE FROM v;\n--Testcase 1471:\nINSERT INTO v(x) VALUES ('2'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1472:\nSELECT x1, x2,\n  log(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2);\n--Testcase 1354:\nDELETE FROM v;\n--Testcase 1355:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1356:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1357:\nDELETE FROM v;\n--Testcase 1358:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1359:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1360:\nDELETE FROM v;\n--Testcase 1361:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1362:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1363:\nDELETE FROM v;\n--Testcase 1364:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1365:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1366:\nDELETE FROM v;\n--Testcase 1367:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1368:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1369:\nDELETE FROM v;\n--Testcase 1370:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1371:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1372:\nDELETE FROM v;\n--Testcase 1373:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1374:\nSELECT log(x::numeric, 'inf') FROM v;\n\n--Testcase 1473:\nDELETE FROM v;\n--Testcase 1474:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('2'),('4.2'),('inf'),('nan');\n--Testcase 1475:\nSELECT x1, x2,\n  power(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x1 != 0 OR x2 >= 0;\n\n--Testcase 1378:\nDELETE FROM v;\n--Testcase 1379:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1380:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1381:\nDELETE FROM v;\n--Testcase 1382:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1383:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1384:\nDELETE FROM v;\n--Testcase 1385:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1386:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1387:\nDELETE FROM v;\n--Testcase 1388:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1389:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1390:\nDELETE FROM v;\n--Testcase 1391:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1392:\nSELECT power(x::numeric, '3.3') FROM v;\n--Testcase 1393:\nDELETE FROM v;\n--Testcase 1394:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1395:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1396:\nDELETE FROM v;\n--Testcase 1397:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1398:\nSELECT power(x::numeric, '-1.5') FROM v;\n--Testcase 1399:\nDELETE FROM v;\n--Testcase 1400:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1401:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1402:\nDELETE FROM v;\n--Testcase 1403:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1404:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1405:\nDELETE FROM v;\n--Testcase 1406:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1407:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1408:\nDELETE FROM v;\n--Testcase 1409:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1410:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1411:\nDELETE FROM v;\n--Testcase 1412:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1413:\nSELECT power(x::numeric, '2') FROM v;\n--Testcase 1414:\nDELETE FROM v;\n--Testcase 1415:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1416:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1417:\nDELETE FROM v;\n--Testcase 1418:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1419:\nSELECT power(x::numeric, '4.5') FROM v;\n--Testcase 1420:\nDELETE FROM v;\n--Testcase 1421:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1422:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1423:\nDELETE FROM v;\n--Testcase 1424:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1425:\nSELECT power(x::numeric, '-3') FROM v;\n--Testcase 1426:\nDELETE FROM v;\n--Testcase 1427:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1428:\nSELECT power(x::numeric, '0') FROM v;\n--Testcase 1429:\nDELETE FROM v;\n--Testcase 1430:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1431:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1432:\nDELETE FROM v;\n--Testcase 1433:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1434:\nSELECT power(x::numeric, '-inf') FROM v;\n\n-- ******************************\n-- * miscellaneous checks for things that have been broken in the past...\n-- ******************************\n-- numeric AVG used to fail on some platforms\n--Testcase 487:\nSELECT AVG(val) FROM num_data;\n--Testcase 1137:\nSELECT MAX(val) FROM num_data;\n--Testcase 1138:\nSELECT MIN(val) FROM num_data;\n--Testcase 488:\nSELECT STDDEV(val) FROM num_data;\n--Testcase 489:\nSELECT VARIANCE(val) FROM num_data;\n\n-- Check for appropriate rounding and overflow\n--Testcase 579:\nCREATE FOREIGN TABLE fract_only (id int, val numeric(4,4)) SERVER sqlite_svr;\n--Testcase 490:\nINSERT INTO fract_only VALUES (1, '0.0');\n--Testcase 491:\nINSERT INTO fract_only VALUES (2, '0.1');\n--Testcase 492:\nINSERT INTO fract_only VALUES (3, '1.0');\t-- should fail\n--Testcase 493:\nINSERT INTO fract_only VALUES (4, '-0.9999');\n--Testcase 494:\nINSERT INTO fract_only VALUES (5, '0.99994');\n--Testcase 495:\nINSERT INTO fract_only VALUES (6, '0.99995');  -- should fail\n--Testcase 496:\nINSERT INTO fract_only VALUES (7, '0.00001');\n--Testcase 497:\nINSERT INTO fract_only VALUES (8, '0.00017');\n--Testcase 1139:\nINSERT INTO fract_only VALUES (9, 'NaN');\n--Testcase 1140:\nINSERT INTO fract_only VALUES (10, 'Inf');\t-- should fail\n--Testcase 1141:\nINSERT INTO fract_only VALUES (11, '-Inf');\t-- should fail\n--Testcase 498:\nSELECT * FROM fract_only;\n--Testcase 580:\nDROP FOREIGN TABLE fract_only;\n\n-- Check conversion to integers\n-- SQLite promises to preserve the first 15 significant decimal digits of the floating point value.\n-- However, it makes no guarantees about the accuracy of computations on floating point values, as no such guarantees are possible.\n-- A floating-point value as written in an SQL statement may not be the same as the value represented internally.\n-- Actual result is different from expected result.\n--Testcase 1485:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1486:\nDELETE FROM num_tmp;\n--Testcase 1487:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.5);\n--Testcase 1488:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1489:\nDELETE FROM num_tmp;\n--Testcase 1490:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.4);\n--Testcase 1491:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1492:\nDELETE FROM num_tmp;\n--Testcase 1493:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.4);\n--Testcase 1494:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1495:\nDELETE FROM num_tmp;\n--Testcase 1496:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.5);\n--Testcase 1497:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1498:\nDELETE FROM num_tmp;\n--Testcase 1499:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.5);\n--Testcase 1500:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1501:\nDELETE FROM num_tmp;\n--Testcase 1502:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.4);\n--Testcase 1503:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1504:\nDELETE FROM num_tmp;\n--Testcase 1505:\nINSERT INTO num_tmp(n1) VALUES (2147483647.4);\n--Testcase 1506:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1507:\nDELETE FROM num_tmp;\n--Testcase 1508:\nINSERT INTO num_tmp(n1) VALUES (2147483647.5);\n--Testcase 1509:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1510:\nDELETE FROM num_tmp;\n--Testcase 1511:\nINSERT INTO num_tmp(n1) VALUES (-32768.5);\n--Testcase 1512:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1513:\nDELETE FROM num_tmp;\n--Testcase 1514:\nINSERT INTO num_tmp(n1) VALUES (-32768.4);\n--Testcase 1515:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1516:\nDELETE FROM num_tmp;\n--Testcase 1517:\nINSERT INTO num_tmp(n1) VALUES (32767.4);\n--Testcase 1518:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1519:\nDELETE FROM num_tmp;\n--Testcase 1520:\nINSERT INTO num_tmp(n1) VALUES (32767.5);\n--Testcase 1521:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1555:\nDELETE FROM num_tmp;\n--Testcase 1555:\nDROP FOREIGN TABLE num_tmp;\n\n-- Check inf/nan conversion behavior\n--Testcase 581:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 582:\nDELETE FROM FLOAT8_TMP;\n--Testcase 583:\nINSERT INTO FLOAT8_TMP VALUES ('NaN');\n--Testcase 584:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 585:\nDELETE FROM FLOAT8_TMP;\n--Testcase 586:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity');\n--Testcase 587:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 588:\nDELETE FROM FLOAT8_TMP;\n--Testcase 589:\nINSERT INTO FLOAT8_TMP VALUES ('-Infinity');\n--Testcase 590:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 1142:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, f2 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 1143:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1144:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1145:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1146:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1147:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1148:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1149:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1150:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1151:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 591:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 592:\nDELETE FROM FLOAT4_TMP;\n--Testcase 593:\nINSERT INTO FLOAT4_TMP VALUES ('NaN');\n--Testcase 594:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 595:\nDELETE FROM FLOAT4_TMP;\n--Testcase 596:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity');\n--Testcase 597:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 598:\nDELETE FROM FLOAT4_TMP;\n--Testcase 599:\nINSERT INTO FLOAT4_TMP VALUES ('-Infinity');\n--Testcase 600:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 1152:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1153:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1154:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1155:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1156:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1157:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1158:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1159:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1160:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1161:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1162:\nINSERT INTO NUMERIC_TMP VALUES ('42'::int2);\n--Testcase 1163:\nSELECT f1::numeric FROM NUMERIC_TMP;\n\n--Testcase 1164:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1165:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1166:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1167:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1168:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1169:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1170:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1171:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1172:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1173:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1174:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1175:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1176:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1177:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1178:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1179:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1180:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1181:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1182:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1183:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1184:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1185:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1186:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1187:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1188:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1189:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1190:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n-- Simple check that ceil(), floor(), and round() work correctly\n--Testcase 601:\nCREATE FOREIGN TABLE ceil_floor_round (a numeric OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO ceil_floor_round VALUES ('-5.5');\n--Testcase 500:\nINSERT INTO ceil_floor_round VALUES ('-5.499999');\n--Testcase 501:\nINSERT INTO ceil_floor_round VALUES ('9.5');\n--Testcase 502:\nINSERT INTO ceil_floor_round VALUES ('9.4999999');\n--Testcase 503:\nINSERT INTO ceil_floor_round VALUES ('0.0');\n--Testcase 504:\nINSERT INTO ceil_floor_round VALUES ('0.0000001');\n--Testcase 505:\nINSERT INTO ceil_floor_round VALUES ('-0.000001');\n--Testcase 506:\nSELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round ORDER BY a;\n\n-- Check rounding, it should round ties away from zero.\n--Testcase 602:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 603:\nDELETE FROM INT4_TMP;\n--Testcase 604:\nINSERT INTO INT4_TMP SELECT a FROM generate_series(-5,5) a;\n--Testcase 605:\nSELECT f1 as pow,\n\tround((-2.5 * 10 ^ f1)::numeric, -f1),\n\tround((-1.5 * 10 ^ f1)::numeric, -f1),\n\tround((-0.5 * 10 ^ f1)::numeric, -f1),\n\tround((0.5 * 10 ^ f1)::numeric, -f1),\n\tround((1.5 * 10 ^ f1)::numeric, -f1),\n\tround((2.5 * 10 ^ f1)::numeric, -f1)\nFROM INT4_TMP;\n\n-- Testing for width_bucket(). For convenience, we test both the\n-- numeric and float8 versions of the function in this file.\n-- errors\n--Testcase 606:\nCREATE FOREIGN TABLE width_bucket_tbl (\n\tid1 numeric,\n\tid2 numeric,\n\tid3 numeric,\n\tid4 int,\n\tid int OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 607:\nDELETE FROM width_bucket_tbl;\n--Testcase 608:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 609:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 610:\nDELETE FROM width_bucket_tbl;\n--Testcase 611:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 612:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 613:\nDELETE FROM width_bucket_tbl;\n--Testcase 614:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 615:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 616:\nDELETE FROM width_bucket_tbl;\n--Testcase 617:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 618:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 619:\nDELETE FROM width_bucket_tbl;\n--Testcase 620:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 621:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 622:\nDELETE FROM width_bucket_tbl;\n--Testcase 623:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 624:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 625:\nDELETE FROM width_bucket_tbl;\n--Testcase 626:\nINSERT INTO width_bucket_tbl VALUES ('NaN'::numeric, 3.0, 4.0, 888);\n--Testcase 627:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 628:\nDELETE FROM width_bucket_tbl;\n--Testcase 629:\nINSERT INTO width_bucket_tbl VALUES (0, 'NaN'::numeric, 4.0, 888);\n--Testcase 630:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 1191:\nDELETE FROM width_bucket_tbl;\n--Testcase 1192:\nINSERT INTO width_bucket_tbl VALUES (2.0, 3.0, '-inf'::numeric, 888);\n--Testcase 1193:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 1194:\nDELETE FROM width_bucket_tbl;\n--Testcase 1195:\nINSERT INTO width_bucket_tbl VALUES (0, '-inf'::numeric, 4.0 , 888);\n--Testcase 1196:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n-- normal operation\n--Testcase 631:\nCREATE FOREIGN TABLE width_bucket_test (\n\toperand_num numeric OPTIONS (key 'true'),\n\toperand_f8 float8\n) SERVER sqlite_svr;\n\n--COPY width_bucket_test (operand_num) FROM stdin;\n--Testcase 507:\nINSERT INTO width_bucket_test (operand_num) VALUES\n(-5.2),\n(-0.0000000001),\n(0.000000000001),\n(1),\n(1.99999999999999),\n(2),\n(2.00000000000001),\n(3),\n(4),\n(4.5),\n(5),\n(5.5),\n(6),\n(7),\n(8),\n(9),\n(9.99999999999999),\n(10),\n(10.0000000000001);\n\n--Testcase 508:\nUPDATE width_bucket_test SET operand_f8 = operand_num::float8;\n\n--Testcase 509:\nSELECT\n    operand_num,\n    width_bucket(operand_num, 0, 10, 5) AS wb_1,\n    width_bucket(operand_f8, 0, 10, 5) AS wb_1f,\n    width_bucket(operand_num, 10, 0, 5) AS wb_2,\n    width_bucket(operand_f8, 10, 0, 5) AS wb_2f,\n    width_bucket(operand_num, 2, 8, 4) AS wb_3,\n    width_bucket(operand_f8, 2, 8, 4) AS wb_3f,\n    width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,\n    width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,\n    width_bucket(operand_num, -25, 25, 10) AS wb_5,\n    width_bucket(operand_f8, -25, 25, 10) AS wb_5f\n    FROM width_bucket_test;\n\n-- Check positive and negative infinity: we require\n-- finite bucket bounds, but allow an infinite operand\n--Testcase 1197:\nDELETE FROM width_bucket_tbl;\n--Testcase 1198:\nINSERT INTO width_bucket_tbl VALUES (0.0, 'Infinity'::numeric , 5, 10);\n--Testcase 1199:\nSELECT width_bucket(id1::numeric, 'Infinity'::numeric, id3, id4) FROM width_bucket_tbl; -- error\n--Testcase 1200:\nDELETE FROM width_bucket_tbl;\n--Testcase 1201:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, '-Infinity'::numeric, 20);\n--Testcase 1202:\nSELECT width_bucket(id1::numeric, id2, '-Infinity'::numeric, id4) FROM width_bucket_tbl; -- error\n--Testcase 1203:\nDELETE FROM width_bucket_tbl;\n--Testcase 1204:\nINSERT INTO width_bucket_tbl VALUES ('Infinity'::numeric, 1, 10, 10), ('-Infinity'::numeric, 1, 10, 10);\n--Testcase 1205:\nSELECT width_bucket(id1::numeric, id2, id3, id4) FROM width_bucket_tbl;\n--Testcase 510:\nDELETE FROM width_bucket_tbl;\n-- postgres does not support insert 'Infinity' and '-Infinity' as numeric.\n--Testcase 632:\nINSERT INTO width_bucket_tbl VALUES (0.0, 0.0, 5, 10);\n--Testcase 633:\nSELECT width_bucket(id1::float8, 'Infinity'::float8, id3, id4) FROM width_bucket_tbl;  -- error\n\n--Testcase 511:\nDELETE FROM width_bucket_tbl;\n--Testcase 634:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, 0.0, 20);\n--Testcase 635:\nSELECT width_bucket(id1::float8, id2, 'Infinity'::float8, id4) FROM width_bucket_tbl; -- error\n--Testcase 512:\nDELETE FROM width_bucket_tbl;\n--Testcase 636:\nINSERT INTO width_bucket_tbl VALUES (0.0, 1, 10, 10);\n--Testcase 637:\nSELECT width_bucket('Infinity'::float8, id2, id3, id4), width_bucket('-Infinity'::float8, id2, id3, id4) FROM width_bucket_tbl;\n\n-- Simple test for roundoff error when results should be exact\n--Testcase 1445:\nDELETE FROM width_bucket_tbl;\n--Testcase 1446:\nINSERT INTO width_bucket_tbl SELECT x, 10, 100, 9 FROM generate_series(0, 110, 10) x;\n--Testcase 1447:\nSELECT id1, width_bucket(id1::float8, id2, id3, id4) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 1448:\nDELETE FROM width_bucket_tbl;\n--Testcase 1449:\nINSERT INTO width_bucket_tbl SELECT x, 100, 10, 9 FROM generate_series(0, 110, 10) x;       \n--Testcase 1450:\nSELECT id1, width_bucket(id1::float8, 100, 10, 9) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 638:\nDROP FOREIGN TABLE width_bucket_test;\n\n-- TO_CHAR()\n--\n--Testcase 513:\nSELECT to_char(val, '9G999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 514:\nSELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 515:\nSELECT to_char(val, '9999999999999999.999999999999999PR')\n\tFROM num_data;\n\n--Testcase 516:\nSELECT to_char(val, '9999999999999999.999999999999999S')\n\tFROM num_data;\n\n--Testcase 517:\nSELECT to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;\n--Testcase 518:\nSELECT to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;\n--Testcase 519:\nSELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;\n--Testcase 520:\nSELECT to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;\n--Testcase 521:\nSELECT to_char(val, '0999999999999999.999999999999999')       FROM num_data;\n--Testcase 522:\nSELECT to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;\n--Testcase 523:\nSELECT to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;\n--Testcase 524:\nSELECT to_char(val, 'FM9999999999999999.099999999999999') \tFROM num_data;\n--Testcase 525:\nSELECT to_char(val, 'FM9999999999990999.990999999999999') \tFROM num_data;\n--Testcase 526:\nSELECT to_char(val, 'FM0999999999999999.999909999999999') \tFROM num_data;\n--Testcase 527:\nSELECT to_char(val, 'FM9999999990999999.099999999999999') \tFROM num_data;\n--Testcase 528:\nSELECT to_char(val, 'L9999999999999999.099999999999999')\tFROM num_data;\n--Testcase 529:\nSELECT to_char(val, 'FM9999999999999999.99999999999999')\tFROM num_data;\n--Testcase 530:\nSELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 531:\nSELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 532:\nSELECT to_char(val, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM num_data;\n--Testcase 533:\nSELECT to_char(val, '999999SG9999999999')\t\t\tFROM num_data;\n--Testcase 534:\nSELECT to_char(val, 'FM9999999999999999.999999999999999')\tFROM num_data;\n--Testcase 535:\nSELECT to_char(val, '9.999EEEE')\t\t\t\tFROM num_data;\n\n--Testcase 1476:\nDELETE FROM v;\n--Testcase 1477:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1478:\nSELECT x,\n  to_char(x, '9.999EEEE') as numeric,\n  to_char(x::float8, '9.999EEEE') as float8,\n  to_char(x::float4, '9.999EEEE') as float4\nFROM v;\n\n--Testcase 1522:\nDELETE FROM v;\n--Testcase 1523:\nINSERT INTO v(x) VALUES (-16379),(-16378),(-1234),(-789),(-45),(-5),(-4),(-3),(-2),(-1),(0),\n                        (1),(2),(3),(4),(5),(38),(275),(2345),(45678),(131070),(131071);\n--Testcase 1524:\nSELECT x,\n  to_char(('1.2345e'||x)::numeric, '9.999EEEE') as numeric\nFROM v;\n\n--Testcase 1479:\nDELETE FROM v;\n--Testcase 1480:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1481:\nSELECT x,\n  to_char(x, 'MI9999999999.99') as numeric,\n  to_char(x::float8, 'MI9999999999.99') as float8,\n  to_char(x::float4, 'MI9999999999.99') as float4\nFROM v;\n\n--Testcase 1482:\nDELETE FROM v;\n--Testcase 1483:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1484:\nSELECT x,\n  to_char(x, 'MI99.99') as numeric,\n  to_char(x::float8, 'MI99.99') as float8,\n  to_char(x::float4, 'MI99.99') as float4\nFROM v;\n\n--Testcase 536:\nDELETE FROM ceil_floor_round;\n--Testcase 537:\nINSERT INTO ceil_floor_round VALUES ('100'::numeric);\n--Testcase 538:\nSELECT to_char(a, 'FM999.9') FROM ceil_floor_round;\n--Testcase 539:\nSELECT to_char(a, 'FM999.') FROM ceil_floor_round;\n--Testcase 540:\nSELECT to_char(a, 'FM999') FROM ceil_floor_round;\n\n-- Check parsing of literal text in a format string\n--Testcase 541:\nSELECT to_char(a, 'foo999') FROM ceil_floor_round;\n--Testcase 542:\nSELECT to_char(a, 'f\\oo999') FROM ceil_floor_round;\n--Testcase 543:\nSELECT to_char(a, 'f\\\\oo999') FROM ceil_floor_round;\n--Testcase 544:\nSELECT to_char(a, 'f\\\"oo999') FROM ceil_floor_round;\n--Testcase 545:\nSELECT to_char(a, 'f\\\\\"oo999') FROM ceil_floor_round;\n--Testcase 546:\nSELECT to_char(a, 'f\"ool\"999') FROM ceil_floor_round;\n--Testcase 547:\nSELECT to_char(a, 'f\"\\ool\"999') FROM ceil_floor_round;\n--Testcase 548:\nSELECT to_char(a, 'f\"\\\\ool\"999') FROM ceil_floor_round;\n--Testcase 549:\nSELECT to_char(a, 'f\"ool\\\"999') FROM ceil_floor_round;\n--Testcase 550:\nSELECT to_char(a, 'f\"ool\\\\\"999') FROM ceil_floor_round;\n\n-- TO_NUMBER()\n--\n--Testcase 639:\ncreate foreign table to_number_tbl (a text, id int options (key 'true')) server sqlite_svr;\n--Testcase 1211:\nSET lc_numeric = 'C';\n--Testcase 640:\nDELETE FROM to_number_tbl;\n--Testcase 641:\nINSERT INTO to_number_tbl VALUES ('-34,338,492');\n--Testcase 642:\nSELECT to_number(a, '99G999G999') FROM to_number_tbl;\n\n--Testcase 643:\nDELETE FROM to_number_tbl;\n--Testcase 644:\nINSERT INTO to_number_tbl VALUES ('-34,338,492.654,878');\n--Testcase 645:\nSELECT to_number(a, '99G999G999D999G999') FROM to_number_tbl;\n\n--Testcase 646:\nDELETE FROM to_number_tbl;\n--Testcase 647:\nINSERT INTO to_number_tbl VALUES ('<564646.654564>');\n--Testcase 648:\nSELECT to_number(a, '999999.999999PR') FROM to_number_tbl;\n\n--Testcase 649:\nDELETE FROM to_number_tbl;\n--Testcase 650:\nINSERT INTO to_number_tbl VALUES ('0.00001-');\n--Testcase 651:\nSELECT to_number(a, '9.999999S') FROM to_number_tbl;\n\n--Testcase 652:\nDELETE FROM to_number_tbl;\n--Testcase 653:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 654:\nSELECT to_number(a, 'FM9.999999S') FROM to_number_tbl;\n\n--Testcase 655:\nDELETE FROM to_number_tbl;\n--Testcase 656:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 657:\nSELECT to_number(a, 'FM9.999999MI') FROM to_number_tbl;\n\n--Testcase 658:\nDELETE FROM to_number_tbl;\n--Testcase 659:\nINSERT INTO to_number_tbl VALUES ('5 4 4 4 4 8 . 7 8');\n--Testcase 660:\nSELECT to_number(a, '9 9 9 9 9 9 . 9 9') FROM to_number_tbl;\n\n--Testcase 661:\nDELETE FROM to_number_tbl;\n--Testcase 662:\nINSERT INTO to_number_tbl VALUES ('.01');\n--Testcase 663:\nSELECT to_number(a, 'FM9.99') FROM to_number_tbl;\n\n--Testcase 664:\nDELETE FROM to_number_tbl;\n--Testcase 665:\nINSERT INTO to_number_tbl VALUES ('.0');\n--Testcase 666:\nSELECT to_number(a, '99999999.99999999') FROM to_number_tbl;\n\n--Testcase 667:\nDELETE FROM to_number_tbl;\n--Testcase 668:\nINSERT INTO to_number_tbl VALUES ('0');\n--Testcase 669:\nSELECT to_number(a, '99.99') FROM to_number_tbl;\n\n--Testcase 670:\nDELETE FROM to_number_tbl;\n--Testcase 671:\nINSERT INTO to_number_tbl VALUES ('.-01');\n--Testcase 672:\nSELECT to_number(a, 'S99.99') FROM to_number_tbl;\n\n--Testcase 673:\nDELETE FROM to_number_tbl;\n--Testcase 674:\nINSERT INTO to_number_tbl VALUES ('.01-');\n--Testcase 675:\nSELECT to_number(a, '99.99S') FROM to_number_tbl;\n\n--Testcase 676:\nDELETE FROM to_number_tbl;\n--Testcase 677:\nINSERT INTO to_number_tbl VALUES (' . 0 1-');\n--Testcase 678:\nSELECT to_number(a, ' 9 9 . 9 9 S') FROM to_number_tbl;\n\n--Testcase 679:\nDELETE FROM to_number_tbl;\n--Testcase 680:\nINSERT INTO to_number_tbl VALUES ('34,50');\n--Testcase 681:\nSELECT to_number(a,'999,99') FROM to_number_tbl;\n\n--Testcase 682:\nDELETE FROM to_number_tbl;\n--Testcase 683:\nINSERT INTO to_number_tbl VALUES ('123,000');\n--Testcase 684:\nSELECT to_number(a,'999G') FROM to_number_tbl;\n\n--Testcase 685:\nDELETE FROM to_number_tbl;\n--Testcase 686:\nINSERT INTO to_number_tbl VALUES ('123456');\n--Testcase 687:\nSELECT to_number(a,'999G999') FROM to_number_tbl;\n\n--Testcase 688:\nDELETE FROM to_number_tbl;\n--Testcase 689:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 690:\nSELECT to_number(a,'L9,999.99') FROM to_number_tbl;\n\n--Testcase 691:\nDELETE FROM to_number_tbl;\n--Testcase 692:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 693:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 694:\nDELETE FROM to_number_tbl;\n--Testcase 695:\nINSERT INTO to_number_tbl VALUES ('$1,234.56');\n--Testcase 696:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 697:\nDELETE FROM to_number_tbl;\n--Testcase 698:\nINSERT INTO to_number_tbl VALUES ('1234.56');\n--Testcase 699:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 700:\nDELETE FROM to_number_tbl;\n--Testcase 701:\nINSERT INTO to_number_tbl VALUES ('1,234.56');\n--Testcase 702:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 703:\nDELETE FROM to_number_tbl;\n--Testcase 704:\nINSERT INTO to_number_tbl VALUES ('42nd');\n--Testcase 705:\nSELECT to_number(a, '99th') FROM to_number_tbl;\n\n--Testcase 1212:\nRESET lc_numeric;\n--\n-- Input syntax\n--\n\n--Testcase 706:\nCREATE FOREIGN TABLE num_input_test (n1 numeric) SERVER sqlite_svr;\n\n-- good inputs\n--Testcase 551:\nINSERT INTO num_input_test(n1) VALUES (' 123');\n--Testcase 552:\nINSERT INTO num_input_test(n1) VALUES ('   3245874    ');\n--Testcase 553:\nINSERT INTO num_input_test(n1) VALUES ('  -93853');\n--Testcase 554:\nINSERT INTO num_input_test(n1) VALUES ('555.50');\n--Testcase 555:\nINSERT INTO num_input_test(n1) VALUES ('-555.50');\n--Testcase 556:\nINSERT INTO num_input_test(n1) VALUES ('NaN ');\n--Testcase 557:\nINSERT INTO num_input_test(n1) VALUES ('        nan');\n--Testcase 1213:\nINSERT INTO num_input_test(n1) VALUES (' inf ');\n--Testcase 1214:\nINSERT INTO num_input_test(n1) VALUES (' +inf ');\n--Testcase 1215:\nINSERT INTO num_input_test(n1) VALUES (' -inf ');\n--Testcase 1216:\nINSERT INTO num_input_test(n1) VALUES (' Infinity ');\n--Testcase 1217:\nINSERT INTO num_input_test(n1) VALUES (' +inFinity ');\n--Testcase 1218:\nINSERT INTO num_input_test(n1) VALUES (' -INFINITY ');\n\n-- bad inputs\n--Testcase 558:\nINSERT INTO num_input_test(n1) VALUES ('     ');\n--Testcase 559:\nINSERT INTO num_input_test(n1) VALUES ('   1234   %');\n--Testcase 560:\nINSERT INTO num_input_test(n1) VALUES ('xyz');\n--Testcase 561:\nINSERT INTO num_input_test(n1) VALUES ('- 1234');\n--Testcase 562:\nINSERT INTO num_input_test(n1) VALUES ('5 . 0');\n--Testcase 563:\nINSERT INTO num_input_test(n1) VALUES ('5. 0   ');\n--Testcase 564:\nINSERT INTO num_input_test(n1) VALUES ('');\n--Testcase 565:\nINSERT INTO num_input_test(n1) VALUES (' N aN ');\n--Testcase 1219:\nINSERT INTO num_input_test(n1) VALUES ('+ infinity');\n\n--Testcase 566:\nSELECT * FROM num_input_test;\n\n--\n-- Test some corner cases for multiplication\n--\n--Testcase 707:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO num_tmp VALUES (4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 709:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 710:\nDELETE FROM num_tmp;\n--Testcase 711:\nINSERT INTO num_tmp VALUES (4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 712:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 713:\nDELETE FROM num_tmp;\n--Testcase 714:\nINSERT INTO num_tmp VALUES (4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 715:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 716:\nDELETE FROM num_tmp;\n--Testcase 717:\nINSERT INTO num_tmp VALUES (4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 718:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 1525:\nDELETE FROM num_tmp;\n--Testcase 1526:\nINSERT INTO num_tmp VALUES ((0.1 - 2e-16383), (0.1 - 3e-16383));\n--Testcase 1527:\nSELECT trim_scale(n1 * n2) FROM num_tmp;\n\n--\n-- Test some corner cases for division\n--\n--Testcase 719:\nDELETE FROM num_tmp;\n--Testcase 720:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 721:\nSELECT n1::numeric / n2 FROM num_tmp;\n\n--Testcase 722:\nDELETE FROM num_tmp;\n--Testcase 723:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 724:\nSELECT div(n1::numeric, n2) FROM num_tmp;\n--Testcase 725:\nSELECT mod(n1::numeric, n2) FROM num_tmp;\n--Testcase 726:\nSELECT div(-n1::numeric, n2) FROM num_tmp;\n--Testcase 727:\nSELECT mod(-n1::numeric, n2) FROM num_tmp;\n--Testcase 728:\nselect div(-n1::numeric,n2)*n2 + mod(-n1::numeric,n2) FROM num_tmp;\n\n--Testcase 729:\nDELETE FROM num_tmp;\n--Testcase 730:\nINSERT INTO num_tmp VALUES (70.0,70);\n--Testcase 731:\nselect mod (n1, n2) FROM num_tmp;\n--Testcase 732:\nselect div (n1, n2) FROM num_tmp;\n--Testcase 733:\nselect n1 / n2 FROM num_tmp;\n\n--Testcase 734:\nDELETE FROM num_tmp;\n--Testcase 735:\nINSERT INTO num_tmp VALUES (12345678901234567890, 123);\n--Testcase 736:\nselect n1 % n2 FROM num_tmp;\n--Testcase 737:\nselect n1 / n2 FROM num_tmp;\n--Testcase 738:\nselect div(n1, n2) FROM num_tmp;\n--Testcase 739:\nselect div(n1, n2) * n2 + n1 % n2 FROM num_tmp;\n\n--\n-- Test some corner cases for square root\n--\n--Testcase 740:\nDELETE FROM num_tmp;\n--Testcase 741:\nINSERT INTO num_tmp VALUES (1.000000000000003::numeric);\n--Testcase 742:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 743:\nDELETE FROM num_tmp;\n--Testcase 744:\nINSERT INTO num_tmp VALUES (1.000000000000004::numeric);\n--Testcase 745:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 746:\nDELETE FROM num_tmp;\n--Testcase 747:\nINSERT INTO num_tmp VALUES (96627521408608.56340355805::numeric);\n--Testcase 748:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 749:\nDELETE FROM num_tmp;\n--Testcase 750:\nINSERT INTO num_tmp VALUES (96627521408608.56340355806::numeric);\n--Testcase 751:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 752:\nDELETE FROM num_tmp;\n--Testcase 753:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290367::numeric);\n--Testcase 754:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 755:\nDELETE FROM num_tmp;\n--Testcase 756:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290368::numeric);\n--Testcase 757:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 758:\nDELETE FROM num_tmp;\n--Testcase 759:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900306::numeric);\n--Testcase 760:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 761:\nDELETE FROM num_tmp;\n--Testcase 762:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900307::numeric);\n--Testcase 763:\nSELECT sqrt(n1) FROM num_tmp;\n\n--\n-- Test code path for raising to integer powers\n--\n--Testcase 764:\nDELETE FROM num_tmp;\n--Testcase 765:\nINSERT INTO num_tmp VALUES (10.0, -2147483648);\n--Testcase 766:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 767:\nDELETE FROM num_tmp;\n--Testcase 768:\nINSERT INTO num_tmp VALUES (10.0, -2147483647);\n--Testcase 769:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 770:\nDELETE FROM num_tmp;\n--Testcase 771:\nINSERT INTO num_tmp VALUES (10.0, 2147483647);\n--Testcase 772:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n--Testcase 773:\nDELETE FROM num_tmp;\n--Testcase 774:\nINSERT INTO num_tmp VALUES (117743296169.0, -1000000000);\n--Testcase 775:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n-- cases that used to return inaccurate results\n\n--Testcase 776:\nDELETE FROM num_tmp;\n--Testcase 777:\nINSERT INTO num_tmp VALUES (3.789, 21);\n--Testcase 778:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 779:\nDELETE FROM num_tmp;\n--Testcase 780:\nINSERT INTO num_tmp VALUES (3.789, 35);\n--Testcase 781:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 782:\nDELETE FROM num_tmp;\n--Testcase 783:\nINSERT INTO num_tmp VALUES (1.2, 345);\n--Testcase 784:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 785:\nDELETE FROM num_tmp;\n--Testcase 786:\nINSERT INTO num_tmp VALUES (0.12, (-20));\n--Testcase 787:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1220:\nDELETE FROM num_tmp;\n--Testcase 1221:\nINSERT INTO num_tmp VALUES (1.000000000123, (-2147483648));\n--Testcase 1222:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1528:\nDELETE FROM num_tmp;\n--Testcase 1529:\nINSERT INTO num_tmp VALUES (0.9999999999, 23300000000000);\n--Testcase 1530:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n-- cases that used to error out\n--Testcase 788:\nDELETE FROM num_tmp;\n--Testcase 789:\nINSERT INTO num_tmp VALUES (0.12, (-25));\n--Testcase 790:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 791:\nDELETE FROM num_tmp;\n--Testcase 792:\nINSERT INTO num_tmp VALUES (0.5678, (-85));\n--Testcase 793:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1531:\nDELETE FROM num_tmp;\n--Testcase 1532:\nINSERT INTO num_tmp VALUES (0.9999999999, 70000000000000);\n--Testcase 1533:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n-- negative base to integer powers\n--Testcase 1534:\nDELETE FROM num_tmp;\n--Testcase 1535:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483646);\n--Testcase 1536:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1537:\nDELETE FROM num_tmp;\n--Testcase 1538:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483647);\n--Testcase 1539:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1540:\nDELETE FROM num_tmp;\n--Testcase 1541:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483648);\n--Testcase 1542:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1543:\nDELETE FROM num_tmp;\n--Testcase 1544:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000000);\n--Testcase 1545:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1546:\nDELETE FROM num_tmp;\n--Testcase 1547:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000001);\n--Testcase 1548:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for raising to non-integer powers\n--\n\n-- special cases\n--Testcase 794:\nDELETE FROM num_tmp;\n--Testcase 795:\nINSERT INTO num_tmp VALUES (0.0, 0.0);\n--Testcase 796:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 797:\nDELETE FROM num_tmp;\n--Testcase 798:\nINSERT INTO num_tmp VALUES ((-12.34), 0.0);\n--Testcase 799:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 800:\nDELETE FROM num_tmp;\n--Testcase 801:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 802:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 803:\nDELETE FROM num_tmp;\n--Testcase 804:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 805:\nselect n1 ^ n2 FROM num_tmp;\n\n-- NaNs\n--Testcase 806:\nDELETE FROM num_tmp;\n--Testcase 807:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 'NaN'::numeric);\n--Testcase 808:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 809:\nDELETE FROM num_tmp;\n--Testcase 810:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 0);\n--Testcase 811:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 812:\nDELETE FROM num_tmp;\n--Testcase 813:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 1);\n--Testcase 814:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 815:\nDELETE FROM num_tmp;\n--Testcase 816:\nINSERT INTO num_tmp VALUES (0, 'NaN'::numeric);\n--Testcase 817:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 818:\nDELETE FROM num_tmp;\n--Testcase 819:\nINSERT INTO num_tmp VALUES (1, 'NaN'::numeric);\n--Testcase 820:\nselect n1 ^ n2 FROM num_tmp;\n\n-- invalid inputs\n--Testcase 821:\nDELETE FROM num_tmp;\n--Testcase 822:\nINSERT INTO num_tmp VALUES (0.0, (-12.34));\n--Testcase 823:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 824:\nDELETE FROM num_tmp;\n--Testcase 825:\nINSERT INTO num_tmp VALUES ((-12.34), 1.2);\n--Testcase 826:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 827:\nDELETE FROM num_tmp;\n--Testcase 828:\nINSERT INTO num_tmp VALUES (32.1, 9.8);\n--Testcase 829:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 830:\nDELETE FROM num_tmp;\n--Testcase 831:\nINSERT INTO num_tmp VALUES (32.1, (-9.8));\n--Testcase 832:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 833:\nDELETE FROM num_tmp;\n--Testcase 834:\nINSERT INTO num_tmp VALUES (12.3, 45.6);\n--Testcase 835:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 836:\nDELETE FROM num_tmp;\n--Testcase 837:\nINSERT INTO num_tmp VALUES (12.3, (-45.6));\n--Testcase 838:\nselect n1 ^ n2 FROM num_tmp;\n\n-- big test\n--Testcase 839:\nDELETE FROM num_tmp;\n--Testcase 840:\nINSERT INTO num_tmp VALUES (1.234, 5678);\n--Testcase 841:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for EXP()\n--\n\n-- special cases\n--Testcase 842:\nDELETE FROM num_tmp;\n--Testcase 843:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 844:\nselect exp(n1) from num_tmp;\n\n--Testcase 845:\nDELETE FROM num_tmp;\n--Testcase 846:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 847:\nselect exp(n1) from num_tmp;\n\n--Testcase 848:\nDELETE FROM num_tmp;\n--Testcase 849:\nINSERT INTO num_tmp VALUES (1.0::numeric(71,70));\n--Testcase 850:\nselect exp(n1) from num_tmp;\n\n--Testcase 1223:\nDELETE FROM num_tmp;\n--Testcase 1224:\nINSERT INTO num_tmp VALUES ('nan'::numeric);\n--Testcase 1225:\nselect exp(n1) from num_tmp;\n\n--Testcase 1226:\nDELETE FROM num_tmp;\n--Testcase 1227:\nINSERT INTO num_tmp VALUES ('inf'::numeric);\n--Testcase 1228:\nselect exp(n1) from num_tmp;\n\n--Testcase 1229:\nDELETE FROM num_tmp;\n--Testcase 1230:\nINSERT INTO num_tmp VALUES ('-inf'::numeric);\n--Testcase 1231:\nselect exp(n1) from num_tmp;\n\n--Testcase 1549:\nDELETE FROM num_tmp;\n--Testcase 1550:\nINSERT INTO num_tmp VALUES ('-5000'::numeric);\n--Testcase 1551:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n--Testcase 1552:\nDELETE FROM num_tmp;\n--Testcase 1553:\nINSERT INTO num_tmp VALUES ('-10000'::numeric);\n--Testcase 1554:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 851:\nDELETE FROM num_tmp;\n--Testcase 852:\nINSERT INTO num_tmp VALUES (32.999);\n--Testcase 853:\nselect exp(n1) from num_tmp;\n\n--Testcase 854:\nDELETE FROM num_tmp;\n--Testcase 855:\nINSERT INTO num_tmp VALUES (-32.999);\n--Testcase 856:\nselect exp(n1) from num_tmp;\n\n--Testcase 857:\nDELETE FROM num_tmp;\n--Testcase 858:\nINSERT INTO num_tmp VALUES (123.456);\n--Testcase 859:\nselect exp(n1) from num_tmp;\n\n--Testcase 860:\nDELETE FROM num_tmp;\n--Testcase 861:\nINSERT INTO num_tmp VALUES (-123.456);\n--Testcase 862:\nselect exp(n1) from num_tmp;\n\n-- big test\n--Testcase 863:\nDELETE FROM num_tmp;\n--Testcase 864:\nINSERT INTO num_tmp VALUES (1234.5678);\n--Testcase 865:\nselect exp(n1) from num_tmp;\n\n--\n-- Tests for generate_series\n--\n--Testcase 866:\nDELETE FROM num_tmp;\n--Testcase 867:\nINSERT INTO num_tmp select * from generate_series(0.0::numeric, 4.0::numeric);\n--Testcase 868:\nSELECT n1 FROM num_tmp;\n\n--Testcase 869:\nDELETE FROM num_tmp;\n--Testcase 870:\nINSERT INTO num_tmp select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);\n--Testcase 871:\nSELECT n1 FROM num_tmp;\n\n--Testcase 872:\nDELETE FROM num_tmp;\n--Testcase 873:\nINSERT INTO num_tmp select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);\n--Testcase 874:\nSELECT n1 FROM num_tmp;\n\n-- Trigger errors\n--Testcase 875:\nDELETE FROM num_tmp;\n--Testcase 876:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 0::numeric);\n--Testcase 877:\nSELECT n1 FROM num_tmp;\n\n--Testcase 878:\nDELETE FROM num_tmp;\n--Testcase 879:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);\n--Testcase 880:\nSELECT n1 FROM num_tmp;\n\n--Testcase 881:\nDELETE FROM num_tmp;\n--Testcase 882:\nINSERT INTO num_tmp select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);\n--Testcase 883:\nSELECT n1 FROM num_tmp;\n\n--Testcase 884:\nDELETE FROM num_tmp;\n--Testcase 885:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);\n--Testcase 886:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1232:\nDELETE FROM num_tmp;\n--Testcase 1233:\nINSERT INTO num_tmp select * from generate_series('inf'::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1234:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1235:\nDELETE FROM num_tmp;\n--Testcase 1236:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1237:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1238:\nDELETE FROM num_tmp;\n--Testcase 1239:\nINSERT INTO num_tmp select * from generate_series(0::numeric, '42'::numeric, '-inf'::numeric);\n--Testcase 1240:\nSELECT n2 FROM num_tmp;\n\n-- Checks maximum, output is truncated\n--Testcase 887:\nDELETE FROM num_tmp;\n--Testcase 888:\nINSERT INTO num_tmp select (i / (10::numeric ^ 131071))::numeric(1,0)\n        from generate_series(6 * (10::numeric ^ 131071),\n                             9 * (10::numeric ^ 131071),\n                             10::numeric ^ 131071) i;\n--Testcase 889:\nSELECT n1 FROM num_tmp;\n                            \n-- Check usage with variables\n--Testcase 890:\nDELETE FROM num_tmp;\n--Testcase 891:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;\n--Testcase 892:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 893:\nDELETE FROM num_tmp;\n--Testcase 894:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;\n--Testcase 895:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 896:\nDELETE FROM num_tmp;\n--Testcase 897:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;\n--Testcase 898:\nSELECT n1, n2 FROM num_tmp;\n\n--\n-- Tests for LN()\n--\n\n-- Invalid inputs\n--Testcase 899:\nDELETE FROM num_tmp;\n--Testcase 900:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 901:\nselect ln(n1) from num_tmp;\n\n--Testcase 902:\nDELETE FROM num_tmp;\n--Testcase 903:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 904:\nselect ln(n1) from num_tmp;\n\n-- Some random tests\n--Testcase 905:\nDELETE FROM num_tmp;\n--Testcase 906:\nINSERT INTO num_tmp VALUES (1.2345678e-28);\n--Testcase 907:\nselect ln(n1) from num_tmp;\n\n--Testcase 908:\nDELETE FROM num_tmp;\n--Testcase 909:\nINSERT INTO num_tmp VALUES (0.0456789);\n--Testcase 910:\nselect ln(n1) from num_tmp;\n\n--Testcase 911:\nDELETE FROM num_tmp;\n--Testcase 912:\nINSERT INTO num_tmp VALUES (0.349873948359354029493948309745709580730482050975);\n--Testcase 913:\nselect ln(n1) from num_tmp;\n\n--Testcase 914:\nDELETE FROM num_tmp;\n--Testcase 915:\nINSERT INTO num_tmp VALUES (0.99949452);\n--Testcase 916:\nselect ln(n1) from num_tmp;\n\n--Testcase 917:\nDELETE FROM num_tmp;\n--Testcase 918:\nINSERT INTO num_tmp VALUES (1.00049687395);\n--Testcase 919:\nselect ln(n1) from num_tmp;\n\n--Testcase 920:\nDELETE FROM num_tmp;\n--Testcase 921:\nINSERT INTO num_tmp VALUES (1234.567890123456789);\n--Testcase 922:\nselect ln(n1) from num_tmp;\n\n--Testcase 923:\nDELETE FROM num_tmp;\n--Testcase 924:\nINSERT INTO num_tmp VALUES (5.80397490724e5);\n--Testcase 925:\nselect ln(n1) from num_tmp;\n\n--Testcase 926:\nDELETE FROM num_tmp;\n--Testcase 927:\nINSERT INTO num_tmp VALUES (9.342536355e34);\n--Testcase 928:\nselect ln(n1) from num_tmp;\n\n--\n-- Tests for LOG() (base 10)\n--\n\n-- invalid inputs\n--Testcase 929:\nDELETE FROM num_tmp;\n--Testcase 930:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 931:\nselect log(n1) from num_tmp;\n\n--Testcase 932:\nDELETE FROM num_tmp;\n--Testcase 933:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 934:\nselect log(n1) from num_tmp;\n\n-- some random tests\n--Testcase 935:\nDELETE FROM num_tmp;\n--Testcase 936:\nINSERT INTO num_tmp VALUES (1.234567e-89);\n--Testcase 937:\nselect log(n1) from num_tmp;\n\n--Testcase 938:\nDELETE FROM num_tmp;\n--Testcase 939:\nINSERT INTO num_tmp VALUES (3.4634998359873254962349856073435545);\n--Testcase 940:\nselect log(n1) from num_tmp;\n\n--Testcase 941:\nDELETE FROM num_tmp;\n--Testcase 942:\nINSERT INTO num_tmp VALUES (9.999999999999999999);\n--Testcase 943:\nselect log(n1) from num_tmp;\n\n--Testcase 944:\nDELETE FROM num_tmp;\n--Testcase 945:\nINSERT INTO num_tmp VALUES (10.00000000000000000);\n--Testcase 946:\nselect log(n1) from num_tmp;\n\n--Testcase 947:\nDELETE FROM num_tmp;\n--Testcase 948:\nINSERT INTO num_tmp VALUES (10.00000000000000001);\n--Testcase 949:\nselect log(n1) from num_tmp;\n\n--Testcase 950:\nDELETE FROM num_tmp;\n--Testcase 951:\nINSERT INTO num_tmp VALUES (590489.45235237);\n--Testcase 952:\nselect log(n1) from num_tmp;\n\n--\n-- Tests for LOG() (arbitrary base)\n--\n\n-- invalid inputs\n--Testcase 953:\nDELETE FROM num_tmp;\n--Testcase 954:\nINSERT INTO num_tmp VALUES (-12.34, 56.78);\n--Testcase 955:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 956:\nDELETE FROM num_tmp;\n--Testcase 957:\nINSERT INTO num_tmp VALUES (-12.34, -56.78);\n--Testcase 958:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 959:\nDELETE FROM num_tmp;\n--Testcase 960:\nINSERT INTO num_tmp VALUES (12.34, -56.78);\n--Testcase 961:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 962:\nDELETE FROM num_tmp;\n--Testcase 963:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 964:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 965:\nDELETE FROM num_tmp;\n--Testcase 966:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 967:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 968:\nDELETE FROM num_tmp;\n--Testcase 969:\nINSERT INTO num_tmp VALUES (.0, 12.34);\n--Testcase 970:\nselect log(n1, n2) from num_tmp;\n\n-- some random tests\n--Testcase 971:\nDELETE FROM num_tmp;\n--Testcase 972:\nINSERT INTO num_tmp VALUES (1.23e-89, 6.4689e45);\n--Testcase 973:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 974:\nDELETE FROM num_tmp;\n--Testcase 975:\nINSERT INTO num_tmp VALUES (0.99923, 4.58934e34);\n--Testcase 976:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 977:\nDELETE FROM num_tmp;\n--Testcase 978:\nINSERT INTO num_tmp VALUES (1.000016, 8.452010e18);\n--Testcase 979:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 980:\nDELETE FROM num_tmp;\n--Testcase 981:\nINSERT INTO num_tmp VALUES (3.1954752e47, 9.4792021e-73);\n--Testcase 982:\nselect log(n1, n2) from num_tmp;\n\n--\n-- Tests for scale()\n--\n--Testcase 983:\nDELETE FROM num_tmp;\n--Testcase 984:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 985:\nselect scale(n1) from num_tmp;\n\n--Testcase 1241:\nDELETE FROM num_tmp;\n--Testcase 1242:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1243:\nselect scale(n1) from num_tmp;\n\n--Testcase 986:\nDELETE FROM num_tmp;\n--Testcase 987:\nINSERT INTO num_tmp VALUES (NULL::numeric);\n--Testcase 988:\nselect scale(n1) from num_tmp;\n\n--Testcase 989:\nDELETE FROM num_tmp;\n--Testcase 990:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 991:\nselect scale(n1) from num_tmp;\n\n--Testcase 992:\nDELETE FROM num_tmp;\n--Testcase 993:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 994:\nselect scale(n1) from num_tmp;\n\n--Testcase 995:\nDELETE FROM num_tmp;\n--Testcase 996:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 997:\nselect scale(n1) from num_tmp;\n\n--Testcase 998:\nDELETE FROM num_tmp;\n--Testcase 999:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1000:\nselect scale(n1) from num_tmp;\n\n--Testcase 1001:\nDELETE FROM num_tmp;\n--Testcase 1002:\nINSERT INTO num_tmp VALUES (110123.12475871856128);\n--Testcase 1003:\nselect scale(n1) from num_tmp;\n\n--Testcase 1004:\nDELETE FROM num_tmp;\n--Testcase 1005:\nINSERT INTO num_tmp VALUES (-1123.12471856128);\n--Testcase 1006:\nselect scale(n1) from num_tmp;\n\n--Testcase 1007:\nDELETE FROM num_tmp;\n--Testcase 1008:\nINSERT INTO num_tmp VALUES (-13.000000000000000);\n--Testcase 1009:\nselect scale(n1) from num_tmp;\n\n--\n-- Tests for min_scale()\n--\n--Testcase 1010:\nDELETE FROM num_tmp;\n--Testcase 1011:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1012:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1244:\nDELETE FROM num_tmp;\n--Testcase 1245:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1246:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1013:\nDELETE FROM num_tmp;\n--Testcase 1014:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1015:\nselect min_scale(n1) from num_tmp;                     -- no digits\n\n--Testcase 1016:\nDELETE FROM num_tmp;\n--Testcase 1017:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1018:\nselect min_scale(n1) from num_tmp;                  -- no digits again\n\n--Testcase 1019:\nDELETE FROM num_tmp;\n--Testcase 1020:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 1021:\nselect min_scale(n1) from num_tmp;                   -- no scale\n\n--Testcase 1022:\nDELETE FROM num_tmp;\n--Testcase 1023:\nINSERT INTO num_tmp VALUES (1.1);\n--Testcase 1024:\nselect min_scale(n1) from num_tmp;                   -- scale 1\n\n--Testcase 1025:\nDELETE FROM num_tmp;\n--Testcase 1026:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 1027:\nselect min_scale(n1) from num_tmp;                  -- scale 2\n\n--Testcase 1028:\nDELETE FROM num_tmp;\n--Testcase 1029:\nINSERT INTO num_tmp VALUES (1.123);\n--Testcase 1030:\nselect min_scale(n1) from num_tmp;                 -- scale 3\n\n--Testcase 1031:\nDELETE FROM num_tmp;\n--Testcase 1032:\nINSERT INTO num_tmp VALUES (1.1234);\n--Testcase 1033:\nselect min_scale(n1) from num_tmp;                -- scale 4, filled digit\n\n--Testcase 1034:\nDELETE FROM num_tmp;\n--Testcase 1035:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1036:\nselect min_scale(n1) from num_tmp;               -- scale 5, 2 NDIGITS\n\n--Testcase 1037:\nDELETE FROM num_tmp;\n--Testcase 1038:\nINSERT INTO num_tmp VALUES (1.1000);\n--Testcase 1039:\nselect min_scale(n1) from num_tmp;                -- 1 pos in NDIGITS\n\n--Testcase 1040:\nDELETE FROM num_tmp;\n--Testcase 1041:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1042:\nselect min_scale(n1) from num_tmp;                 -- very big number\n\n--\n-- Tests for trim_scale()\n--\n--Testcase 1043:\nDELETE FROM num_tmp;\n--Testcase 1044:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1045:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1247:\nDELETE FROM num_tmp;\n--Testcase 1248:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1249:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1046:\nDELETE FROM num_tmp;\n--Testcase 1047:\nINSERT INTO num_tmp VALUES (1.120);\n--Testcase 1048:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1049:\nDELETE FROM num_tmp;\n--Testcase 1050:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1051:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1052:\nDELETE FROM num_tmp;\n--Testcase 1053:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1054:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1055:\nDELETE FROM num_tmp;\n--Testcase 1056:\nINSERT INTO num_tmp VALUES (1.1234500);\n--Testcase 1057:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1058:\nDELETE FROM num_tmp;\n--Testcase 1059:\nINSERT INTO num_tmp VALUES (110123.12475871856128000);\n--Testcase 1060:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1061:\nDELETE FROM num_tmp;\n--Testcase 1062:\nINSERT INTO num_tmp VALUES (-123.124718561280000000);\n--Testcase 1063:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1064:\nDELETE FROM num_tmp;\n--Testcase 1065:\nINSERT INTO num_tmp VALUES (-13.00000000000000000000);\n--Testcase 1066:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1067:\nDELETE FROM num_tmp;\n--Testcase 1068:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1069:\nselect trim_scale(n1) from num_tmp;\n\n--\n-- Tests for SUM()\n--\n\n-- cases that need carry propagation\n--Testcase 1070:\nDELETE FROM num_tmp;\n--Testcase 1071:\nINSERT INTO num_tmp SELECT * FROM generate_series(1, 100000);\n--Testcase 1072:\nSELECT SUM(9999::numeric) FROM num_tmp;\n--Testcase 1073:\nSELECT SUM((-9999)::numeric) FROM num_tmp;\n\n--\n-- Tests for GCD()\n--\n--Testcase 1074:\nDELETE FROM num_tmp;\n--Testcase 1075:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 46375::numeric),\n             (433125::numeric, 46375::numeric),\n             (43312.5::numeric, 4637.5::numeric),\n             (4331.250::numeric, 463.75000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n\n--Testcase 1076:\nSELECT n1 as a, n2 as b, gcd(n1, n2), gcd(n1, -n2), gcd(-n2, n1), gcd(-n2, -n1) FROM num_tmp;\n--\n-- Tests for LCM()\n--\n--Testcase 1077:\nDELETE FROM num_tmp;\n--Testcase 1078:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 13272::numeric),\n             (13272::numeric, 13272::numeric),\n             (423282::numeric, 13272::numeric),\n             (42328.2::numeric, 1327.2::numeric),\n             (4232.820::numeric, 132.72000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n--Testcase 1079:\nSELECT n1 as a, n2 as b, lcm(n1, n2), lcm(n1, -n2), lcm(-n2, n1), lcm(-n2, -n1) FROM num_tmp;\n\n--Testcase 1080:\nDELETE FROM num_tmp;\n--Testcase 1081:\nINSERT INTO num_tmp VALUES (10::numeric, 131068); \n--Testcase 1082:\nSELECT lcm(9999 * (n1)^n2 + (n1^n2 - 1), 2) FROM num_tmp; -- overflow\n\n--\n-- Tests for factorial\n--\n--Testcase 1250:\nDELETE FROM num_tmp;\n--Testcase 1251:\nINSERT INTO num_tmp VALUES (4); \n--Testcase 1252:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1253:\nDELETE FROM num_tmp;\n--Testcase 1254:\nINSERT INTO num_tmp VALUES (15); \n--Testcase 1255:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1256:\nDELETE FROM num_tmp;\n--Testcase 1257:\nINSERT INTO num_tmp VALUES (100000); \n--Testcase 1258:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1259:\nDELETE FROM num_tmp;\n--Testcase 1260:\nINSERT INTO num_tmp VALUES (0); \n--Testcase 1261:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1262:\nDELETE FROM num_tmp;\n--Testcase 1263:\nINSERT INTO num_tmp VALUES (-4); \n--Testcase 1264:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--\n-- Tests for pg_lsn()\n--\n--Testcase 1265:\nDELETE FROM num_tmp;\n--Testcase 1266:\nINSERT INTO num_tmp VALUES (23783416::numeric); \n--Testcase 1267:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1268:\nDELETE FROM num_tmp;\n--Testcase 1269:\nINSERT INTO num_tmp VALUES (0::numeric); \n--Testcase 1270:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1271:\nDELETE FROM num_tmp;\n--Testcase 1272:\nINSERT INTO num_tmp VALUES (18446744073709551615::numeric); \n--Testcase 1273:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1274:\nDELETE FROM num_tmp;\n--Testcase 1275:\nINSERT INTO num_tmp VALUES (-1::numeric); \n--Testcase 1276:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1277:\nDELETE FROM num_tmp;\n--Testcase 1278:\nINSERT INTO num_tmp VALUES (18446744073709551616::numeric); \n--Testcase 1279:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1280:\nDELETE FROM num_tmp;\n--Testcase 1281:\nINSERT INTO num_tmp VALUES ('NaN'::numeric); \n--Testcase 1282:\nSELECT pg_lsn(n1) FROM num_tmp; \n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 1083:\nDROP SERVER sqlite_svr;\n--Testcase 1084:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/out_of_range.sql",
    "content": "--\n-- INT4 + INT2\n--\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 02:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n\n--Testcase 03:\nDELETE FROM INT4_TMP;\n--Testcase 04:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 05:\nINSERT INTO INT4_TMP VALUES (x'7FFFFFFF'::int8 + 1, 0);\n--Testcase 06:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 07:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 08:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 09:\nDELETE FROM INT4_TMP;\n--Testcase 10:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 11:\nINSERT INTO INT4_TMP VALUES (-(x'7FFFFFFF'::int8) - 2, 0);\n--Testcase 12:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 13:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 14:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 15:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 16:\nCREATE FOREIGN TABLE INT2_TMP(f1 int2, f2 int2, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 17:\nDELETE FROM INT2_TMP;\n--Testcase 18:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 19:\nINSERT INTO INT2_TMP VALUES (x'7FFF'::int8 + 1, 0);\n--Testcase 20:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 21:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 22:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 23:\nDELETE FROM INT2_TMP;\n--Testcase 24:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 25:\nINSERT INTO INT2_TMP VALUES (-(x'7FFF'::int8) - 2, 0);\n--Testcase 26:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 27:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 28:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 29:\nCREATE FOREIGN TABLE INT8_TBL(q1 int8 OPTIONS (key 'true'), q2 int8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 31:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 32:\nINSERT INTO INT8_TBL VALUES (-9223372036854775810, 0);\n--Testcase 33:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 34:\nSELECT * FROM INT8_TBL; -- NO overflow\n--Testcase 35:\nSELECT q1 FROM INT8_TBL; -- NO overflow\n--Testcase 36:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 37:\nDELETE FROM INT8_TBL WHERE q1 = -9223372036854775810;\n--Testcase 38:\nINSERT INTO INT8_TBL VALUES (9223372036854775809, 0);\n--Testcase 39:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 40:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 41:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 42:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 43:\nDELETE FROM INT8_TBL WHERE q1 = 9223372036854775809;\n--Testcase 44:\nINSERT INTO INT8_TBL VALUES (10 * -9223372036854775810, 0);\n--Testcase 45:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 46:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 47:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 48:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 49:\nDELETE FROM INT8_TBL WHERE q1 = 10 * -9223372036854775810;\n--Testcase 50:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n\n--Testcase 003:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 004:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/timestamp.sql",
    "content": "--\n-- TIMESTAMP\n--\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 3:\nCREATE FOREIGN TABLE dates1 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number timestamp without time zone OPTIONS (column_type 'INT'))\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n--Testcase 4:\nCREATE FOREIGN TABLE dates2 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number double precision)\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n-- Showing timestamp column from SQLite value as TEXT and as INTEGER/FLOAT has same value\n--Testcase 5:\nSELECT name,\n\tto_char(date_as_text, \t'YYYY-MM-DD HH24:MI:SS.MS') as date_as_text, \n\tto_char(date_as_number, 'YYYY-MM-DD HH24:MI:SS.MS') as date_as_number\nFROM dates1;\n--Testcase 6:\nSELECT * FROM dates2;\n\n-- Comparing exact values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 7:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 8:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 9:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 10:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n-- Comparing greater values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 11:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 12:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 13:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 14:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 15:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 16:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 17:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 18:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--- Comparing without using to_timestamp\n--Testcase 19:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 20:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 21:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 22:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 23:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 24:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 25:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 26:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n-- Comparing greater values  without using to_timestamp\n\n\n--Testcase 27:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 28:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 29:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 30:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 31:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 32:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 33:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 34:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 35:\nDROP FOREIGN TABLE dates1;\n--Testcase 36:\nDROP FOREIGN TABLE dates2;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/types/uuid.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_UUID\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 012:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 013:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 014:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 015:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 016:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 017:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 018:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 019:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 020:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 021:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 022:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 023:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 024:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 025:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 026:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 029:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 030:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 031:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 032:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 033:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 034:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 035:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 036:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 037:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 038:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 039:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 040:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 041:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 042:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 043:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 044:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 045:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 046:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 047:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 048:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 049:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 050:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 051:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 052:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 053:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 054:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 056:\nCREATE FOREIGN TABLE \"type_UUID+\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');\n--Testcase 057:\nSELECT * FROM \"type_UUID+\";\n--Testcase 058:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 059:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 060:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 061:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 062:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 063:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 064:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 065:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 066:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 067:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 068:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 069:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 071:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 072:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 073:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 074:\nSELECT * FROM \"type_UUID+\";\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';\n--Testcase 076:\nSELECT * FROM \"type_UUID+\";\n--Testcase 077:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 077:\nSELECT * FROM \"type_UUID+\";\n--Testcase 078:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');\n--Testcase 079:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 41;\n--Testcase 080:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 081:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 082:\nSELECT * FROM \"type_UUID+\";\n--Testcase 083:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 086:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));\n--Testcase 087:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));\n--Testcase 088:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 089:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 42;\n--Testcase 090:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 43;\n--Testcase 091:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 092:\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 093:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (44, NULL);\n--Testcase 094:\nSELECT * FROM \"type_UUID+\";\n--Testcase 095:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 096:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n\n--Testcase 100:\nCREATE FOREIGN TABLE \"type_UUIDpk\" (col uuid OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 101:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (ADD column_type 'TEXT');\n--Testcase 102:\nINSERT INTO \"type_UUIDpk\" VALUES ('{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 103:\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 104:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 105: ERR - primary key\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 106:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 107: NO ERR, but the same semantics!\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 108:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 109:\nDELETE FROM \"type_UUIDpk\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/with_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/with_gis_support/postgis.sql",
    "content": "--Testcase 2:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 3:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 4:\nCREATE EXTENSION IF NOT EXISTS postgis;\n--Testcase 5:\nCREATE EXTENSION postgis_raster;\n--Testcase 6:\nCREATE EXTENSION postgis_topology;\n\n-- TEST GIS DATA FROM UNION ASTRONOMIQUE INTERNATIONAL (国際天文学連合): MARS, Olympus mons\n--Testcase 11:\nCREATE SCHEMA \"♂\";\n--Testcase 12:\nCREATE TABLE \"♂\".\"テスト\" (\n\tid int4 NULL,\n\t\"UAI\" varchar(254) NULL,\n\t\"⌖\" public.geometry(point, 104904) NULL,\n\tgeom public.geometry(geometry, 104904) NULL,\n\t\"t₀\" date NULL,\n\t\"class\" text NULL,\n\t\"URL\" varchar(80) NULL\n);\n--Testcase 13: ETC...\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(991, 'Olympus Mons', 'SRID=104904;POINT (226.19749330952843 18.652758890345698)'::geometry, 'SRID=104904;MULTIPOLYGON (((223.78717231750488 23.3314151763916, 224.22803688049316 23.324007034301758, 224.32436180114746 23.5648136138916, 224.7186985015869 23.593564987182617, 224.79486274719238 23.45737648010254, 225.06530570983887 23.238798141479492, 225.67255210876465 23.437196731567383, 226.2211856842041 23.6611385345459, 226.5472011566162 23.65372657775879, 227.6215763092041 23.435148239135742, 228.19009590148926 23.390283584594727, 228.753023147583 23.24955177307129, 228.90711784362793 23.1943416595459, 229.23219108581543 23.004926681518555, 229.5288143157959 22.75514030456543, 229.87227058410645 22.442903518676758, 230.2469539642334 22.14628028869629, 230.7309169769287 21.927717208862305, 231.30854988098145 21.64670753479004, 231.85495948791504 21.084684371948242, 232.19841957092285 19.88258171081543, 231.88618278503418 18.47752571105957, 231.30854988098145 17.743772506713867, 231.21887397766113 17.218599319458008, 231.17812156677246 16.751802444458008, 230.97346687316895 16.353670120239258, 230.8327350616455 15.947111129760742, 230.62945365905762 15.478002548217773, 230.4574489593506 15.352907180786133, 230.20748329162598 15.29954719543457, 229.99631309509277 15.036508560180664, 229.72586631774902 14.640104293823242, 229.41096305847168 14.377065658569336, 228.98862266540527 14.10291862487793, 228.74040412902832 13.854700088500977, 228.5107135772705 13.83247184753418, 228.31806755065918 13.962137222290039, 227.93990516662598 13.929948806762695, 227.36133766174316 13.883039474487305, 227.04734230041504 13.813947677612305, 226.68895149230957 13.851762771606445, 226.4101276397705 13.839879989624023, 226.06347465515137 13.632848739624023, 225.7766170501709 13.617597579956055, 225.32925987243652 13.481771469116211, 224.76723670959473 13.591054916381836, 224.15838050842285 13.731557846069336, 223.12800407409668 14.106241226196289, 222.39425468444824 14.402864456176758, 221.67611503601074 14.918050765991211, 221.434663772583 15.403280258178711, 221.30129432678223 16.051607131958008, 221.0864200592041 16.410966873168945, 221.09012413024902 16.6591854095459, 221.1975612640381 17.09263801574707, 220.9971103668213 17.32316017150879, 220.75670051574707 17.422361373901367, 220.82338523864746 17.844701766967773, 221.18475532531738 18.073732376098633, 221.3567600250244 18.5584774017334, 221.40367317199707 19.10576820373535, 221.3567600250244 19.90325355529785, 221.42725563049316 20.59361457824707, 221.778959274292 21.40439796447754, 222.34188652038574 22.201879501342773, 223.01658821105957 23.272138595581055, 223.3759479522705 23.668546676635742, 223.3722438812256 23.675954818725586, 223.57600212097168 23.675954818725586, 223.70566749572754 23.542585372924805, 223.78717231750488 23.3314151763916)))'::geometry, '1973-01-01', 'mo', 'http://planetarynames.wr.usgs.gov/Feature/4453');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(248, 'Karzok', 'SRID=104904;POINT (228.262902951161 18.4035270924109)'::geometry, 'SRID=104904;MULTIPOLYGON (((228.269330978394 18.2748584747314, 228.266962051392 18.2748394012451, 228.264589309692 18.2748584747314, 228.26222038269 18.2749156951904, 228.259851455688 18.2750148773193, 228.257482528687 18.2751522064209, 228.255121231079 18.2753276824951, 228.252759933472 18.2755451202393, 228.250402450562 18.2757968902588, 228.248052597046 18.2760906219482, 228.245706558228 18.2764263153076, 228.243368148804 18.2767963409424, 228.241037368774 18.2772083282471, 228.23871421814 18.2776546478271, 228.236398696899 18.2781429290771, 228.234094619751 18.2786655426025, 228.231798171997 18.2792301177979, 228.229513168335 18.2798328399658, 228.227239608765 18.2804698944092, 228.224977493286 18.2811489105225, 228.222726821899 18.2818622589111, 228.220491409302 18.2826137542725, 228.218271255493 18.2833995819092, 228.216066360474 18.2842235565186, 228.213872909546 18.2850856781006, 228.211698532104 18.285982131958, 228.209539413452 18.2869167327881, 228.207399368286 18.2878856658936, 228.205278396606 18.2888889312744, 228.203172683716 18.2899265289307, 228.201089859009 18.2910022735596, 228.199026107788 18.2921085357666, 228.196981430054 18.2932529449463, 228.194959640503 18.2944278717041, 228.192956924438 18.2956371307373, 228.190980911255 18.2968769073486, 228.189023971558 18.2981548309326, 228.187093734741 18.2994594573975, 228.185186386108 18.3007984161377, 228.183305740356 18.3021678924561, 228.181447982788 18.3035678863525, 228.179616928101 18.3050022125244, 228.177812576294 18.3064632415771, 228.176038742065 18.307954788208, 228.174287796021 18.3094730377197, 228.172567367554 18.3110218048096, 228.170873641968 18.3126010894775, 228.16921043396 18.3142032623291, 228.16757774353 18.3158359527588, 228.165975570679 18.3174953460693, 228.164403915405 18.3191814422607, 228.162858963013 18.320894241333, 228.161352157593 18.3226299285889, 228.159872055054 18.3243923187256, 228.158430099487 18.3261775970459, 228.157014846802 18.3279857635498, 228.155637741089 18.3298168182373, 228.154294967651 18.3316707611084, 228.152982711792 18.3335475921631, 228.151708602905 18.3354473114014, 228.150468826294 18.337366104126, 228.149263381958 18.3393039703369, 228.148092269897 18.3412647247314, 228.14695930481 18.343240737915, 228.145864486694 18.3452396392822, 228.144804000854 18.3472537994385, 228.143781661987 18.3492832183838, 228.142793655396 18.3513317108154, 228.141847610474 18.3533954620361, 228.140939712524 18.3554744720459, 228.140066146851 18.3575687408447, 228.139234542847 18.3596782684326, 228.138441085815 18.3617992401123, 228.137685775757 18.3639354705811, 228.136972427368 18.3660831451416, 228.136297225952 18.3682422637939, 228.135660171509 18.3704090118408, 228.135065078735 18.3725872039795, 228.134511947632 18.37477684021, 228.133996963501 18.376974105835, 228.133520126343 18.3791828155518, 228.133085250854 18.3813953399658, 228.132692337036 18.3836154937744, 228.132341384888 18.3858432769775, 228.132028579712 18.3880748748779, 228.131757736206 18.3903102874756, 228.13152885437 18.3925533294678, 228.131341934204 18.39479637146, 228.131196975708 18.3970432281494, 228.131090164185 18.3992938995361, 228.131025314331 18.4015445709229, 228.131002426147 18.4037952423096, 228.131021499634 18.4060459136963, 228.13108253479 18.408296585083, 228.131185531616 18.4105472564697, 228.131326675415 18.4127941131592, 228.131513595581 18.4150371551514, 228.13173866272 18.4172801971436, 228.132005691528 18.4195156097412, 228.132314682007 18.4217510223389, 228.132661819458 18.4239749908447, 228.133054733276 18.4261989593506, 228.13348197937 18.4284114837646, 228.133955001831 18.4306163787842, 228.134466171265 18.4328174591064, 228.135019302368 18.4350070953369, 228.135610580444 18.4371852874756, 228.13624382019 18.4393558502197, 228.136919021606 18.4415149688721, 228.137628555298 18.4436626434326, 228.138380050659 18.4457988739014, 228.13917350769 18.4479236602783, 228.140001296997 18.4500331878662, 228.140871047974 18.452127456665, 228.141775131226 18.4542064666748, 228.142721176147 18.4562740325928, 228.143705368042 18.4583225250244, 228.144723892212 18.460355758667, 228.145784378052 18.4623699188232, 228.146879196167 18.4643688201904, 228.148008346558 18.4663486480713, 228.149175643921 18.4683094024658, 228.150381088257 18.4702472686768, 228.151620864868 18.4721698760986, 228.152894973755 18.4740695953369, 228.154203414917 18.4759464263916, 228.155546188354 18.47780418396, 228.156923294067 18.4796352386475, 228.158334732056 18.4814472198486, 228.159776687622 18.4832363128662, 228.161256790161 18.4849987030029, 228.162763595581 18.4867343902588, 228.164304733276 18.4884471893311, 228.16587638855 18.4901371002197, 228.167478561401 18.4917964935303, 228.169115066528 18.49342918396, 228.170778274536 18.4950351715088, 228.172468185425 18.4966144561768, 228.174192428589 18.4981670379639, 228.175939559937 18.4996891021729, 228.177717208862 18.5011806488037, 228.179521560669 18.5026454925537, 228.181352615356 18.5040760040283, 228.183210372925 18.5054798126221, 228.185094833374 18.5068492889404, 228.187002182007 18.5081920623779, 228.188936233521 18.50950050354, 228.190893173218 18.5107746124268, 228.192869186401 18.5120182037354, 228.194871902466 18.5132274627686, 228.196897506714 18.5144062042236, 228.198942184448 18.5155506134033, 228.201009750366 18.5166568756104, 228.203096389771 18.5177326202393, 228.205202102661 18.5187740325928, 228.207326889038 18.5197811126709, 228.209466934204 18.5207500457764, 228.211629867554 18.5216846466064, 228.213804244995 18.5225811004639, 228.21600151062 18.5234432220459, 228.218210220337 18.5242710113525, 228.220434188843 18.5250568389893, 228.22266960144 18.5258121490479, 228.224924087524 18.5265254974365, 228.227186203003 18.5272045135498, 228.229463577271 18.5278415679932, 228.23175239563 18.5284442901611, 228.234052658081 18.5290088653564, 228.236360549927 18.5295352935791, 228.238679885864 18.5300235748291, 228.241006851196 18.5304698944092, 228.243341445923 18.5308818817139, 228.245683670044 18.5312557220459, 228.248029708862 18.531587600708, 228.250383377075 18.5318813323975, 228.252744674683 18.5321369171143, 228.255109786987 18.5323505401611, 228.257474899292 18.5325298309326, 228.259847640991 18.5326671600342, 228.262216567993 18.5327663421631, 228.26459312439 18.5328235626221, 228.266965866089 18.5328426361084, 228.269342422485 18.5328235626221, 228.271715164185 18.5327625274658, 228.274087905884 18.5326671600342, 228.276456832886 18.5325298309326, 228.278825759888 18.5323505401611, 228.281187057495 18.5321369171143, 228.283548355103 18.5318813323975, 228.285902023315 18.531587600708, 228.288251876831 18.5312519073486, 228.290594100952 18.5308818817139, 228.292928695679 18.5304698944092, 228.295255661011 18.5300197601318, 228.297574996948 18.5295352935791, 228.299882888794 18.5290088653564, 228.302179336548 18.5284442901611, 228.304468154907 18.5278415679932, 228.306745529175 18.5272006988525, 228.309011459351 18.5265254974365, 228.311262130737 18.5258083343506, 228.313501358032 18.5250568389893, 228.315725326538 18.5242671966553, 228.317934036255 18.5234432220459, 228.320127487183 18.5225811004639, 228.322305679321 18.5216808319092, 228.324464797974 18.5207462310791, 228.326608657837 18.5197772979736, 228.328733444214 18.5187702178955, 228.330839157104 18.5177326202393, 228.332925796509 18.5166568756104, 228.334989547729 18.5155467987061, 228.337034225464 18.5144023895264, 228.339059829712 18.5132274627686, 228.341062545776 18.5120143890381, 228.343042373657 18.5107707977295, 228.344995498657 18.5094966888428, 228.346929550171 18.5081882476807, 228.348836898804 18.5068454742432, 228.350721359253 18.5054759979248, 228.352579116821 18.5040721893311, 228.354410171509 18.5026416778564, 228.356214523315 18.5011768341064, 228.357992172241 18.4996852874756, 228.359739303589 18.4981632232666, 228.361463546753 18.4966106414795, 228.363153457642 18.4950313568115, 228.364816665649 18.4934253692627, 228.366449356079 18.491792678833, 228.368055343628 18.4901294708252, 228.369626998901 18.4884433746338, 228.371168136597 18.4867305755615, 228.372674942017 18.4849910736084, 228.374151229858 18.4832286834717, 228.375597000122 18.4814434051514, 228.37700843811 18.4796314239502, 228.378385543823 18.4778003692627, 228.379728317261 18.4759426116943, 228.381036758423 18.4740619659424, 228.38231086731 18.4721660614014, 228.383550643921 18.4702434539795, 228.38475227356 18.4683017730713, 228.385919570923 18.4663410186768, 228.387052536011 18.4643650054932, 228.388147354126 18.462366104126, 228.389204025269 18.4603481292725, 228.390226364136 18.4583187103271, 228.391206741333 18.4562664031982, 228.392152786255 18.4542026519775, 228.393060684204 18.4521198272705, 228.393926620483 18.4500255584717, 228.394758224487 18.4479160308838, 228.395547866821 18.4457950592041, 228.396299362183 18.4436588287354, 228.397012710571 18.4415111541748, 228.39768409729 18.4393520355225, 228.398317337036 18.4371814727783, 228.398908615112 18.4349994659424, 228.399461746216 18.4328098297119, 228.399972915649 18.4306125640869, 228.40044593811 18.4284076690674, 228.400876998901 18.4261913299561, 228.401266098022 18.4239711761475, 228.401613235474 18.4217433929443, 228.401922225952 18.4195117950439, 228.402189254761 18.417272567749, 228.402414321899 18.4150333404541, 228.402597427368 18.4127864837646, 228.402742385864 18.4105396270752, 228.40284538269 18.4082927703857, 228.402902603149 18.406042098999, 228.402921676636 18.403787612915, 228.402898788452 18.4015369415283, 228.402837753296 18.3992862701416, 228.402730941772 18.3970394134521, 228.402585983276 18.3947887420654, 228.402395248413 18.3925457000732, 228.402166366577 18.3903064727783, 228.401895523071 18.3880672454834, 228.401586532593 18.385835647583, 228.401231765747 18.3836116790771, 228.400838851929 18.3813877105713, 228.40040397644 18.3791751861572, 228.399930953979 18.3769702911377, 228.399415969849 18.3747730255127, 228.398859024048 18.3725833892822, 228.398263931274 18.3704051971436, 228.397626876831 18.3682346343994, 228.396951675415 18.3660755157471, 228.396238327026 18.3639316558838, 228.395483016968 18.361795425415, 228.394689559937 18.3596744537354, 228.393857955933 18.3575649261475, 228.392988204956 18.3554706573486, 228.39207649231 18.3533916473389, 228.391130447388 18.3513278961182, 228.390146255493 18.3492794036865, 228.389120101929 18.3472461700439, 228.388063430786 18.3452320098877, 228.386964797974 18.3432369232178, 228.385831832886 18.3412609100342, 228.384660720825 18.3393001556396, 228.383455276489 18.3373622894287, 228.382215499878 18.3354434967041, 228.380941390991 18.3335437774658, 228.379629135132 18.3316669464111, 228.378286361694 18.32981300354, 228.376905441284 18.3279819488525, 228.375494003296 18.3261699676514, 228.374048233032 18.3243846893311, 228.37257194519 18.3226261138916, 228.371061325073 18.3208866119385, 228.369520187378 18.3191776275635, 228.367948532104 18.3174915313721, 228.366346359253 18.3158321380615, 228.364709854126 18.3141994476318, 228.363046646118 18.3125972747803, 228.361356735229 18.3110179901123, 228.359636306763 18.3094692230225, 228.357885360718 18.3079509735107, 228.356107711792 18.3064594268799, 228.354303359985 18.3049983978271, 228.352472305298 18.3035640716553, 228.350618362427 18.3021640777588, 228.348733901978 18.3007946014404, 228.346826553345 18.2994556427002, 228.344896316528 18.2981510162354, 228.342943191528 18.2968769073486, 228.340963363647 18.29563331604, 228.33896446228 18.2944240570068, 228.336938858032 18.293249130249, 228.334897994995 18.2921085357666, 228.332830429077 18.2909984588623, 228.33074760437 18.2899265289307, 228.328645706177 18.2888851165771, 228.3265209198 18.2878818511963, 228.324380874634 18.2869129180908, 228.322221755981 18.285982131958, 228.32004737854 18.2850856781006, 228.31785774231 18.2842235565186, 228.315649032593 18.2833995819092, 228.313428878784 18.2826099395752, 228.311193466187 18.2818584442139, 228.3089427948 18.2811450958252, 228.306684494019 18.2804698944092, 228.304410934448 18.2798290252686, 228.302125930786 18.2792301177979, 228.299829483032 18.2786655426025, 228.297521591187 18.2781391143799, 228.295206069946 18.2776546478271, 228.292882919312 18.2772045135498, 228.290552139282 18.2767963409424, 228.288213729858 18.2764225006104, 228.28586769104 18.2760906219482, 228.283517837524 18.2757968902588, 228.281160354614 18.2755451202393, 228.278802871704 18.2753276824951, 228.276437759399 18.2751522064209, 228.274072647095 18.2750148773193, 228.271703720093 18.2749156951904, 228.269330978394 18.2748584747314)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14144');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(249, 'Pangboche', 'SRID=104904;POINT (226.595873773026 17.2783598670807)'::geometry, 'SRID=104904;MULTIPOLYGON (((226.601442337036 17.1929302215576, 226.599878311157 17.1929187774658, 226.598310470581 17.1929302215576, 226.596746444702 17.1929721832275, 226.595178604126 17.1930370330811, 226.593618392944 17.1931285858154, 226.592054367065 17.1932430267334, 226.590497970581 17.1933879852295, 226.588941574097 17.1935558319092, 226.587385177612 17.193754196167, 226.585836410522 17.1939754486084, 226.58429145813 17.1942195892334, 226.582754135132 17.1944942474365, 226.581216812134 17.1947917938232, 226.57968711853 17.1951160430908, 226.578165054321 17.195463180542, 226.576650619507 17.195837020874, 226.57513999939 17.1962375640869, 226.573637008667 17.1966648101807, 226.572145462036 17.197114944458, 226.570657730103 17.1975879669189, 226.569181442261 17.1980876922607, 226.567712783813 17.1986103057861, 226.566255569458 17.1991596221924, 226.564809799194 17.1997318267822, 226.563371658325 17.2003269195557, 226.561948776245 17.20094871521, 226.56053352356 17.2015933990479, 226.559129714966 17.2022609710693, 226.557741165161 17.2029514312744, 226.556364059448 17.2036647796631, 226.555002212524 17.2044010162354, 226.553651809692 17.2051601409912, 226.552316665649 17.2059421539307, 226.550992965698 17.2067432403564, 226.549688339233 17.2075710296631, 226.54839515686 17.2084178924561, 226.547121047974 17.2092876434326, 226.545862197876 17.2101764678955, 226.544618606567 17.211088180542, 226.543394088745 17.2120189666748, 226.542184829712 17.2129688262939, 226.540990829468 17.2139415740967, 226.539819717407 17.2149333953857, 226.538663864136 17.2159404754639, 226.537527084351 17.2169704437256, 226.536409378052 17.2180194854736, 226.535310745239 17.219087600708, 226.534231185913 17.2201709747314, 226.533174514771 17.2212734222412, 226.532133102417 17.2223949432373, 226.531118392944 17.2235317230225, 226.530118942261 17.2246875762939, 226.529146194458 17.2258586883545, 226.528188705444 17.2270450592041, 226.527257919312 17.2282466888428, 226.526346206665 17.2294635772705, 226.525461196899 17.2306995391846, 226.52459526062 17.2319469451904, 226.523752212524 17.2332057952881, 226.522932052612 17.2344837188721, 226.522138595581 17.2357730865479, 226.521364212036 17.2370738983154, 226.520616531372 17.2383899688721, 226.519891738892 17.2397136688232, 226.519193649292 17.2410526275635, 226.518518447876 17.2424030303955, 226.517869949341 17.2437648773193, 226.517244338989 17.245138168335, 226.516641616821 17.2465190887451, 226.516069412231 17.2479114532471, 226.515520095825 17.2493152618408, 226.514993667603 17.2507228851318, 226.514497756958 17.2521419525146, 226.514024734497 17.253568649292, 226.513578414917 17.2550029754639, 226.513158798218 17.2564449310303, 226.512765884399 17.2578945159912, 226.512399673462 17.2593479156494, 226.512060165405 17.2608089447021, 226.511747360229 17.2622776031494, 226.511461257935 17.2637462615967, 226.511201858521 17.2652225494385, 226.510969161987 17.2667026519775, 226.510766983032 17.2681865692139, 226.510587692261 17.2696743011475, 226.51043510437 17.2711620330811, 226.510313034058 17.2726535797119, 226.510217666626 17.27414894104, 226.510149002075 17.2756404876709, 226.510107040405 17.277135848999, 226.510091781616 17.2786350250244, 226.510103225708 17.2801303863525, 226.510145187378 17.2816257476807, 226.510213851929 17.2831211090088, 226.510305404663 17.2846164703369, 226.510431289673 17.2861080169678, 226.510580062866 17.2875957489014, 226.51075553894 17.289083480835, 226.510957717896 17.2905673980713, 226.511190414429 17.2920475006104, 226.511449813843 17.2935237884521, 226.51173210144 17.2949924468994, 226.512044906616 17.2964611053467, 226.512384414673 17.2979221343994, 226.51275062561 17.2993755340576, 226.513139724731 17.3008251190186, 226.513559341431 17.302267074585, 226.514001846313 17.3037014007568, 226.514474868774 17.3051280975342, 226.514970779419 17.306547164917, 226.515493392944 17.3079586029053, 226.516042709351 17.309362411499, 226.51661491394 17.310754776001, 226.517213821411 17.3121356964111, 226.517839431763 17.3135089874268, 226.518487930298 17.3148708343506, 226.519163131714 17.3162212371826, 226.519861221313 17.3175601959229, 226.520586013794 17.3188877105713, 226.521333694458 17.3202037811279, 226.522104263306 17.3215045928955, 226.522897720337 17.3227939605713, 226.523717880249 17.3240718841553, 226.524557113647 17.3253345489502, 226.525423049927 17.3265819549561, 226.52631187439 17.3278141021729, 226.527219772339 17.3290348052979, 226.528150558472 17.3302364349365, 226.529108047485 17.3314228057861, 226.530080795288 17.3325939178467, 226.531076431274 17.3337497711182, 226.532094955444 17.3348903656006, 226.533132553101 17.3360080718994, 226.53419303894 17.3371143341064, 226.535272598267 17.3381977081299, 226.536371231079 17.3392658233643, 226.537488937378 17.3403148651123, 226.538625717163 17.341344833374, 226.539781570435 17.3423557281494, 226.540952682495 17.3433475494385, 226.542146682739 17.3443202972412, 226.543355941772 17.3452739715576, 226.544580459595 17.3462047576904, 226.545824050903 17.3471164703369, 226.547082901001 17.3480052947998, 226.548360824585 17.3488750457764, 226.549654006958 17.3497219085693, 226.550958633423 17.350549697876, 226.552282333374 17.351354598999, 226.553617477417 17.3521366119385, 226.554967880249 17.3528957366943, 226.55633354187 17.3536319732666, 226.557710647583 17.3543453216553, 226.559099197388 17.3550395965576, 226.560503005981 17.3557071685791, 226.561918258667 17.356351852417, 226.563344955444 17.356969833374, 226.564783096313 17.3575687408447, 226.566232681274 17.3581409454346, 226.56768989563 17.3586902618408, 226.569158554077 17.3592128753662, 226.570634841919 17.359712600708, 226.572122573853 17.3601894378662, 226.573617935181 17.3606395721436, 226.575120925903 17.36106300354, 226.576631546021 17.3614635467529, 226.578149795532 17.361837387085, 226.579675674438 17.3621883392334, 226.581205368042 17.362512588501, 226.58274269104 17.3628101348877, 226.584283828735 17.3630847930908, 226.585828781128 17.3633289337158, 226.587377548218 17.3635501861572, 226.588933944702 17.363748550415, 226.590490341187 17.3639163970947, 226.592050552368 17.3640613555908, 226.593614578247 17.3641757965088, 226.595178604126 17.3642673492432, 226.596746444702 17.3643321990967, 226.598314285278 17.3643741607666, 226.599882125854 17.3643856048584, 226.601449966431 17.3643741607666, 226.603017807007 17.3643321990967, 226.604581832886 17.3642673492432, 226.606145858765 17.3641757965088, 226.607709884644 17.3640613555908, 226.609270095825 17.3639163970947, 226.610830307007 17.3637447357178, 226.612382888794 17.3635501861572, 226.613931655884 17.3633289337158, 226.615480422974 17.3630809783936, 226.617021560669 17.3628101348877, 226.618558883667 17.362512588501, 226.620088577271 17.3621883392334, 226.621610641479 17.361837387085, 226.623128890991 17.3614635467529, 226.624639511108 17.36106300354, 226.626142501831 17.3606395721436, 226.627637863159 17.3601856231689, 226.629125595093 17.359712600708, 226.630601882935 17.3592128753662, 226.632070541382 17.3586902618408, 226.633531570435 17.3581409454346, 226.634977340698 17.3575687408447, 226.636415481567 17.356969833374, 226.637842178345 17.3563480377197, 226.63925743103 17.3557033538818, 226.640661239624 17.3550357818604, 226.642049789429 17.3543453216553, 226.643426895142 17.3536319732666, 226.644792556763 17.3528957366943, 226.646142959595 17.3521327972412, 226.647478103638 17.3513507843018, 226.648801803589 17.3505458831787, 226.650110244751 17.3497219085693, 226.651399612427 17.3488750457764, 226.652677536011 17.3480052947998, 226.653936386108 17.3471126556396, 226.655179977417 17.3462009429932, 226.656408309937 17.3452701568604, 226.65761756897 17.3443202972412, 226.658807754517 17.3433475494385, 226.659982681274 17.3423557281494, 226.661138534546 17.341344833374, 226.662275314331 17.3403148651123, 226.66339302063 17.3392658233643, 226.664487838745 17.3381977081299, 226.665567398071 17.3371105194092, 226.666627883911 17.3360080718994, 226.667665481567 17.3348865509033, 226.668684005737 17.3337459564209, 226.669679641724 17.3325939178467, 226.670656204224 17.3314228057861, 226.67160987854 17.3302326202393, 226.672540664673 17.3290309906006, 226.673448562622 17.3278141021729, 226.674337387085 17.3265781402588, 226.675203323364 17.3253307342529, 226.676042556763 17.324068069458, 226.676862716675 17.3227939605713, 226.677656173706 17.3215007781982, 226.678426742554 17.3201999664307, 226.679174423218 17.318883895874, 226.679899215698 17.3175563812256, 226.680597305298 17.3162174224854, 226.681272506714 17.3148670196533, 226.681921005249 17.3135051727295, 226.682546615601 17.3121318817139, 226.683145523071 17.3107509613037, 226.683717727661 17.3093585968018, 226.684267044067 17.307954788208, 226.684789657593 17.3065433502197, 226.685285568237 17.3051242828369, 226.685754776001 17.3036975860596, 226.686201095581 17.3022632598877, 226.686616897583 17.3008213043213, 226.687009811401 17.2993717193604, 226.687376022339 17.2979183197021, 226.687715530396 17.2964572906494, 226.688024520874 17.2949886322021, 226.688310623169 17.2935199737549, 226.688570022583 17.2920436859131, 226.688798904419 17.290563583374, 226.689004898071 17.2890796661377, 226.689180374146 17.2875919342041, 226.689329147339 17.2861042022705, 226.689451217651 17.2846126556396, 226.689546585083 17.2831172943115, 226.689615249634 17.2816219329834, 226.689653396606 17.2801265716553, 226.689668655396 17.2786312103271, 226.689653396606 17.277135848999, 226.689611434937 17.2756366729736, 226.689542770386 17.2741451263428, 226.689443588257 17.2726497650146, 226.689321517944 17.2711582183838, 226.689168930054 17.2696704864502, 226.688993453979 17.2681827545166, 226.688787460327 17.2666988372803, 226.688554763794 17.2652187347412, 226.68829536438 17.2637424468994, 226.688009262085 17.2622737884521, 226.687696456909 17.2608051300049, 226.687356948853 17.2593441009521, 226.686990737915 17.2578907012939, 226.686597824097 17.256441116333, 226.686178207397 17.2549991607666, 226.685731887817 17.2535648345947, 226.685258865356 17.2521381378174, 226.684762954712 17.2507190704346, 226.684236526489 17.2493114471436, 226.683687210083 17.2479076385498, 226.683115005493 17.2465152740479, 226.682512283325 17.2451343536377, 226.681886672974 17.2437610626221, 226.681238174438 17.2424030303955, 226.680562973022 17.2410526275635, 226.679864883423 17.2397136688232, 226.679140090942 17.2383861541748, 226.678392410278 17.2370700836182, 226.677618026733 17.2357692718506, 226.676824569702 17.2344799041748, 226.67600440979 17.2332057952881, 226.675161361694 17.2319431304932, 226.674295425415 17.2306957244873, 226.673410415649 17.2294635772705, 226.672498703003 17.2282428741455, 226.671564102173 17.2270412445068, 226.670610427856 17.2258548736572, 226.669637680054 17.2246837615967, 226.66863822937 17.2235317230225, 226.6676197052 17.22239112854, 226.666582107544 17.2212734222412, 226.665525436401 17.2201709747314, 226.664445877075 17.2190837860107, 226.663347244263 17.2180194854736, 226.662229537964 17.2169704437256, 226.661092758179 17.2159404754639, 226.659936904907 17.2149295806885, 226.658761978149 17.2139377593994, 226.657571792603 17.2129650115967, 226.656362533569 17.2120151519775, 226.655138015747 17.2110843658447, 226.653894424438 17.2101726531982, 226.652635574341 17.2092838287354, 226.651357650757 17.2084140777588, 226.650068283081 17.2075672149658, 226.648759841919 17.2067432403564, 226.647439956665 17.2059383392334, 226.646104812622 17.2051563262939, 226.64475440979 17.2043972015381, 226.643388748169 17.2036609649658, 226.642011642456 17.2029476165771, 226.640623092651 17.2022571563721, 226.639223098755 17.2015895843506, 226.637807846069 17.2009449005127, 226.636381149292 17.2003269195557, 226.63494682312 17.1997318267822, 226.633497238159 17.1991558074951, 226.632040023804 17.1986103057861, 226.630575180054 17.1980838775635, 226.629095077515 17.1975879669189, 226.627611160278 17.1971111297607, 226.62611579895 17.1966609954834, 226.624616622925 17.1962375640869, 226.623106002808 17.195837020874, 226.621587753296 17.195463180542, 226.620065689087 17.1951160430908, 226.618535995483 17.1947917938232, 226.617002487183 17.1944942474365, 226.615461349487 17.1942195892334, 226.613916397095 17.1939716339111, 226.612367630005 17.1937503814697, 226.610815048218 17.1935558319092, 226.609258651733 17.1933879852295, 226.607698440552 17.1932430267334, 226.60613822937 17.1931285858154, 226.604574203491 17.1930370330811, 226.603010177612 17.1929721832275, 226.601442337036 17.1929302215576)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14145');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1849, 'Hermes Patera', 'SRID=104904;POINT (226.57 18.33)'::geometry, 'SRID=104904;POLYGON ((226.27743530274 18.067016601562, 226.25820922852 18.135681152343, 226.255462646485 18.216705322265124, 226.26507568359813 18.293609619139627, 226.25614929199594 18.331375122069314, 226.26095581055 18.369140624999, 226.28842163086 18.465270996093, 226.35159301758 18.528442382812, 226.44772338867 18.577880859374, 226.48480224609438 18.594360351561626, 226.52462768555 18.6026000976555, 226.57955932617 18.608093261718, 226.68118286133 18.586120605468, 226.70590209961 18.569641113281, 226.74435424805 18.539428710937, 226.78555297852 18.514709472656, 226.83224487305 18.498229980468, 226.86932373046687 18.488616943359126, 226.89404296875 18.4721374511715, 226.90090942383 18.451538085937, 226.90640258789 18.410339355468, 226.91189575195 18.380126953124, 226.92013549805 18.322448730468, 226.90640258789 18.251037597656, 226.87344360352 18.187866210937, 226.82949829102 18.146667480468, 226.79379272461 18.113708496093, 226.77456665039 18.102722167968, 226.72787475586 18.119201660156, 226.68392944336 18.141174316406, 226.63723754883125 18.15490722656175, 226.58779907226562 18.14254760742125, 226.56033325195 18.121948242187, 226.52188110352 18.088989257812, 226.48617553711 18.067016601562, 226.45321655274 18.083496093749, 226.38729858399 18.086242675781, 226.32412719727 18.078002929687, 226.27743530274 18.067016601562))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15690');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1688, 'Olympus Rupes', 'SRID=104904;POINT (226.43548539543502 18.401964175317982)'::geometry, 'SRID=104904;MULTILINESTRING ((227.42951774597168 22.934080123901367, 227.93671226501465 22.65593910217285, 228.34573936462402 22.4268856048584, 228.52571296691895 22.295995712280273, 228.67296028137207 22.099660873413086, 228.96746253967285 22.099660873413086, 229.62190437316895 21.739717483520508, 230.1290988922119 21.477941513061523, 230.35815620422363 21.26524543762207, 230.38258171081543 21.086992263793945, 230.2117748260498 20.55558967590332, 230.71787071228027 19.182798385620117, 230.8653507232666 18.500219345092773, 230.8653507232666 18.058469772338867, 230.8653507232666 17.96030616760254, 230.88171195983887 16.978639602661133, 230.9144344329834 16.635053634643555, 230.73446083068848 16.389638900756836, 230.6690158843994 16.242387771606445, 230.55448722839355 15.980611801147461, 230.45632362365723 15.816999435424805, 230.35815620422363 15.506139755249023, 230.0472927093506 15.457056045532227, 229.83220100402832 15.140348434448242, 229.54010200500488 14.73716926574707, 229.22923851013184 14.442667007446289, 228.86929512023926 14.213613510131836, 228.5420742034912 14.05000114440918, 228.2148494720459 14.148168563842773, 227.8221836090088 14.148168563842773, 227.2168254852295 13.984556198120117, 226.85687828063965 13.968194961547852, 226.49693489074707 14.05000114440918, 226.0879077911377 13.77186393737793, 225.80977058410645 13.755502700805664, 225.55567741394043 13.881429672241211, 225.3911952972412 14.058565139770508, 224.9426326751709 14.73716926574707, 224.76265907287598 14.73716926574707, 224.36999320983887 14.573556900024414, 223.97732734680176 14.802610397338867, 223.29015922546387 15.12983512878418, 222.70116233825684 15.391611099243164, 222.4393825531006 15.40797233581543, 221.93218803405762 15.40797233581543, 221.57224464416504 15.66975212097168, 221.4413547515869 16.09514045715332, 221.3431911468506 16.700498580932617, 221.39227104187012 17.07680320739746, 221.16321754455566 17.404027938842773, 220.89009284973145 17.53165626525879, 220.90144157409668 17.84577751159668, 221.14274787902832 17.76296043395996, 221.52316093444824 17.61672019958496, 221.86674308776855 18.074831008911133, 222.06307792663574 18.614748001098633, 221.8994655609131 18.860166549682617, 221.6376895904541 19.252832412719727, 221.62132835388184 19.59641456604004, 221.7358570098877 20.185415267944336, 221.94854927062988 20.774412155151367, 222.079439163208 21.26524543762207, 222.48846626281738 21.854246139526367, 222.99566078186035 22.508691787719727, 223.43741035461426 22.934080123901367, 223.78099250793457 23.13041114807129, 224.04277229309082 23.064966201782227, 224.3045482635498 22.999521255493164, 224.72993659973145 22.934080123901367, 224.9917163848877 22.88499641418457, 225.2862148284912 22.934080123901367, 225.72796440124512 23.01588249206543, 226.2351589202881 23.146772384643555, 226.61146354675293 23.27766227722168, 227.05321311950684 23.097688674926758, 227.42951774597168 22.934080123901367))'::geometry, '1976-01-01', 'ru', 'http://planetarynames.wr.usgs.gov/Feature/4454');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1847, 'Zeus Patera', 'SRID=104904;POINT (227.07 18.39)'::geometry, 'SRID=104904;POLYGON ((226.50457763673 18.675384521485, 226.51556396485 18.70834350586, 226.55401611329 18.766021728516, 226.6254272461 18.820953369141, 226.71881103516 18.853912353516, 226.82043457032 18.886871337891, 226.91107177735 18.886871337891, 226.99621582032 18.875885009766, 227.03741455079 18.873138427735, 226.99346923829 18.831939697266, 226.97973632813 18.77426147461, 226.99896240235 18.702850341797, 227.06213378907 18.631439208985, 227.15002441407 18.584747314454, 227.23516845704 18.568267822266, 227.30383300781875 18.59024047851625, 227.33404541016 18.628692626954, 227.34503173829 18.658905029297, 227.39721679688 18.587493896485, 227.42742919923 18.494110107422, 227.42193603516 18.408966064454, 227.39996337891 18.315582275391, 227.39172363282 18.227691650391, 227.34228515626 18.123321533204, 227.29559326173 18.018951416016, 227.21319580079 17.942047119141, 227.15551757813 17.903594970704, 227.09783935548 17.876129150391, 227.00170898438 17.845916748047, 226.9330444336 17.840423583985, 226.88635253907 17.840423583985, 226.90832519532 17.876129150391, 226.91381835938 17.925567626954, 226.90283203126 17.972259521485, 226.87536621094 18.021697998047, 226.82318115235 18.062896728516, 226.77923583985 18.098602294922, 226.83691406251 18.156280517579, 226.88360595704 18.233184814454, 226.91107177735 18.315582275391, 226.8890991211 18.40072631836, 226.88085937501 18.474884033204, 226.83142089844 18.507843017579, 226.72430419923 18.546295166016, 226.67761230469 18.584747314454, 226.6254272461 18.614959716797, 226.58972167969 18.617706298829, 226.62817382813 18.645172119141, 226.67761230469 18.650665283204, 226.61993408204 18.661651611329, 226.56500244141 18.64242553711, 226.4935913086 18.653411865235, 226.50457763673 18.675384521485))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15689');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1848, 'Athena Patera', 'SRID=104904;POINT (227.18 18.74)'::geometry, 'SRID=104904;POLYGON ((227.0290374756 18.766021728515, 227.04002380372 18.807220458984, 227.06062316896 18.840179443359, 227.08259582521 18.867645263671, 227.12928771974 18.880004882812, 227.17597961427 18.877258300781, 227.22541809083 18.866271972656, 227.28172302247 18.825073242187, 227.31605529786 18.775634765624, 227.328414917 18.731689453124, 227.33116149903 18.691864013671, 227.30369567872 18.656158447265, 227.2844696045 18.619079589843, 227.23915100099 18.599853515624, 227.18147277833 18.599853515624, 227.10594177247 18.624572753906, 227.05513000489 18.665771484374, 227.02491760255 18.705596923828, 227.0207977295 18.744049072265, 227.0290374756 18.766021728515))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15693');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1850, 'Apollo Patera', 'SRID=104904;POINT (226.45 17.94)'::geometry, 'SRID=104904;POLYGON ((226.28540039064 17.909774780272, 226.27441406252 17.938613891601, 226.26754760744 17.981185913085, 226.27716064455 18.027877807616, 226.30325317385 18.074569702147, 226.35818481447 18.091049194335, 226.40075683596 18.091049194335, 226.46804809572 18.073196411132, 226.52572631838 18.045730590819, 226.56967163088 18.023757934569, 226.63146972658 17.946853637694, 226.63558959963 17.878189086913, 226.62185668947 17.83836364746, 226.61911010744 17.806777954101, 226.59439086916 17.788925170897, 226.52847290041 17.780685424804, 226.45980834963 17.808151245116, 226.40899658205 17.832870483397, 226.37878417971 17.841110229491, 226.33758544924 17.864456176757, 226.30462646486 17.887802124022, 226.28540039064 17.909774780272))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15694');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1851, 'Olympus Paterae', 'SRID=104904;POINT (226.81 18.32)'::geometry, 'SRID=104904;POLYGON ((226.14367675781 18.452911376953, 226.16564941406 18.513336181641, 226.2041015625 18.554534912109, 226.23431396484 18.592987060547, 226.30572509766 18.625946044922, 226.36889648438 18.650665283203, 226.42108154297 18.653411865234, 226.45678710938 18.642425537109, 226.49249267578 18.700103759766, 226.54193115234 18.755035400391, 226.58312988281 18.809967041016, 226.65454101563 18.845672607422, 226.72320556641 18.870391845703, 226.82757568359 18.895111083984, 226.88525390625 18.911590576172, 226.96545410157 18.900604248046, 227.0121459961 18.900604248046, 227.04785156251 18.889617919921, 227.08355712891 18.906097412109, 227.13299560548 18.917083740234, 227.21813964844 18.911590576171, 227.28405761719 18.875885009765, 227.33349609376 18.829193115234, 227.37194824219 18.771514892578, 227.37744140626 18.735809326171, 227.38156127930375 18.711776733397812, 227.3808746337928 18.69255065917931, 227.37469482423 18.675384521484, 227.40216064454 18.620452880859, 227.43237304688 18.571014404296, 227.4515991211 18.496856689453, 227.45709228516 18.441925048828, 227.44885253907 18.38150024414, 227.44061279298 18.323822021484, 227.43237304688 18.277130126953, 227.41589355469 18.202972412109, 227.38018798829 18.120574951171, 227.34448242188 18.05191040039, 227.31701660157 17.999725341796, 227.26757812501 17.950286865234, 227.22088623048 17.911834716796, 227.17419433594 17.870635986328, 227.12475585938 17.848663330078, 227.03686523438 17.821197509765, 226.97918701173 17.801971435546, 226.88580322266 17.815704345703, 226.85009765626 17.790985107421, 226.81439208985 17.769012451171, 226.7484741211 17.741546630859, 226.68530273438 17.733306884765, 226.62762451173 17.738800048828, 226.57543945313 17.736053466796, 226.50128173829 17.72232055664, 226.39416503907 17.758026123046, 226.32550048829 17.78823852539, 226.29803466798 17.823944091796, 226.27056884766 17.843170166015, 226.21289062501 17.89810180664, 226.20465087891 17.966766357421, 226.22937011719 18.035430908203, 226.20465087891 18.084869384765, 226.18267822266 18.13980102539, 226.17169189454 18.18374633789, 226.17993164063 18.20571899414, 226.15795898438 18.252410888671, 226.13873291016 18.318328857421, 226.13049316407 18.389739990234, 226.14367675781 18.452911376953))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15695');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1870, 'Dionysus Patera', 'SRID=104904;POINT (226.77 17.96)'::geometry, 'SRID=104904;POLYGON ((226.53973388672 18.046417236328, 226.564453125 18.082122802735, 226.60015869141 18.11508178711, 226.64410400391 18.134307861328, 226.71826171875 18.117828369141, 226.77868652344 18.09310913086, 226.83361816406 18.043670654297, 226.87756347656 17.988739013672, 226.89129638672 17.936553955078, 226.8720703125 17.870635986328, 226.828125 17.82943725586, 226.7484741211 17.799224853516, 226.68530273438 17.793731689453, 226.64959716797 17.78549194336, 226.61389160156 17.782745361328, 226.63037109375 17.848663330078, 226.63037109375 17.914581298828, 226.62213134766 17.972259521485, 226.58093261719 18.021697998047, 226.53973388672 18.046417236328))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15692');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1871, 'Hera Patera', 'SRID=104904;POINT (226.23 18.45)'::geometry, 'SRID=104904;POLYGON ((226.21000671387 18.244171142578, 226.18116760254063 18.30047607421875, 226.17567443848188 18.347167968749623, 226.17155456543125 18.41445922851525, 226.19902038575 18.489990234375377, 226.24021911621563 18.549041748046875, 226.32124328613438 18.602600097655873, 226.37892150879125 18.616333007812376, 226.44209289551 18.61083984375, 226.396774292 18.582000732422, 226.3610687255875 18.55316162109375, 226.31986999512 18.511962890625, 226.2827911377 18.474884033203, 226.27043151856 18.428192138672, 226.24845886231 18.367767333984, 226.24021911621 18.21533203125, 226.21000671387 18.244171142578))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15691');\n\n-- TEST GIS DATA FROM OPENSTREETMAP: EARTH, Ancienne Sylvie\n--Testcase 14:\nCREATE TABLE \"♁\" (\n\tgeom public.geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int8 NOT NULL,\n\tver int2 NOT NULL,\n\tarr _int8 NULL,\n\tt json NULL\n);\n--Testcase 15: ETC...\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4596087 59.6907755)'::geometry, 'node', 1621246531, 4, NULL, '{\"drain\":\"disperse\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601391 59.6904673)'::geometry, 'node', 1621246620, 24, NULL, '{\"access\":\"yes\",\"addr:housenumber\":\"20 литВЕ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Ж.-Ф. Тома де Томон\",\"barrier\":\"gate\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6458/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Ворота памятника Любезным родителям\",\"ref:okn\":\"781610399040286\",\"start_date\":\"1807\",\"tourism\":\"attraction\",\"wikidata\":\"Q118122048\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617098 59.6910199)'::geometry, 'node', 1632220259, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617672 59.6909141)'::geometry, 'node', 1632220283, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461757 59.6909696)'::geometry, 'node', 1632220292, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614802 59.6907676)'::geometry, 'node', 1632220315, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615866 59.6907823)'::geometry, 'node', 1632220319, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611444 59.6908848)'::geometry, 'node', 1632220350, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611916 59.6908345)'::geometry, 'node', 1632220355, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.46127 59.6907954)'::geometry, 'node', 1632220358, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611342 59.6909402)'::geometry, 'node', 1632220359, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614212 59.6910868)'::geometry, 'node', 1632220364, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611621 59.6909941)'::geometry, 'node', 1632220366, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616766 59.6908145)'::geometry, 'node', 1632220378, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616314 59.691059)'::geometry, 'node', 1632220590, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613148 59.6910721)'::geometry, 'node', 1632220686, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613385 59.6907988)'::geometry, 'node', 1632497609, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6476/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Euterpe\",\"material\":\"metal\",\"name\":\"Эвтерпа\",\"name:el\":\"Εὐτέρπη\",\"name:la\":\"Euterpē\",\"name:uk\":\"Евтерпа\",\"name:zh\":\"欧忒耳佩\",\"note\":\"Ошибочно подписано «Clio»\",\"ref\":\"П-61/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614438 59.6907856)'::geometry, 'node', 1632497610, 30, NULL, '{\"alt_name:el\":\"Χλωρίς\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1796\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6475/\",\"historic\":\"yes\",\"historic:start_date\":\"1796\",\"int_name\":\"Flore\",\"material\":\"metal\",\"name\":\"Флора\",\"name:el\":\"Φλόρα\",\"name:en\":\"Flora\",\"ref\":\"П-62/1\",\"ref:okn\":\"781610399040456\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461244 59.690833)'::geometry, 'node', 1632497611, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6470/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Melpomene\",\"material\":\"metal\",\"name\":\"Мельпомена\",\"name:el\":\"Μελπομένη\",\"name:en\":\"Melpomene\",\"name:la\":\"Melpomenē\",\"name:uk\":\"Мельпомена\",\"name:zh\":\"墨爾波墨涅\",\"ref\":\"П-60/1\",\"ref:okn\":\"781610399040376\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617227 59.6909514)'::geometry, 'node', 1632497612, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6468/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Caliope\",\"material\":\"metal\",\"name\":\"Калиопа\",\"name:el\":\"Καλλιόπη\",\"name:la\":\"Calliopē\",\"name:uk\":\"Калліопа\",\"name:zh\":\"卡利俄佩\",\"ref\":\"П-65/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q120979306\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615805 59.6907985)'::geometry, 'node', 1632497613, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6474/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Uranie\",\"material\":\"metal\",\"name\":\"Урания\",\"name:el\":\"Οὐρανία\",\"name:la\":\"Ūrania\",\"ref\":\"П-63/1\",\"ref:okn\":\"78161039904044\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616825 59.6908428)'::geometry, 'node', 1632497614, 29, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6469/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"material\":\"metal\",\"name\":\"Клио\",\"name:el\":\"Κλειώ\",\"name:la\":\"Clīō\",\"note\":\"Подписано «Euterpe»\",\"ref\":\"П-64/1\",\"ref:okn\":\"781610399040466\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614541 59.6909278)'::geometry, 'node', 1632497615, 34, NULL, '{\"alt_name\":\"Аполлон Бельведерский\",\"artist_name\":\"Леохар;модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1782\",\"artwork_type\":\"statue\",\"description\":\"Иконография Бельведерского типа. В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6466/\",\"historic\":\"yes\",\"historic:start_date\":\"1782\",\"material\":\"metal\",\"name\":\"Аполлон\",\"name:en\":\"Apollo\",\"name:zh\":\"阿波罗神像\",\"ref\":\"П-71/1\",\"ref:okn\":\"781610399040386\",\"start_date\":\"1817\",\"tourism\":\"artwork\",\"wikidata\":\"Q118122062\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616021 59.6910564)'::geometry, 'node', 1632497616, 26, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1780\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"historic\":\"yes\",\"historic:start_date\":\"1780\",\"material\":\"metal\",\"name\":\"Венера Каллипиги\",\"ref\":\"П-67/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616651 59.6910293)'::geometry, 'node', 1632497617, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6471/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Polymnia\",\"material\":\"metal\",\"name\":\"Полигимния\",\"name:el\":\"Πολύμνια\",\"name:la\":\"Polyhymnia\",\"name:uk\":\"Полігімнія\",\"name:zh\":\"波吕许谟尼亚\",\"ref\":\"П-66/1\",\"ref:okn\":\"781610399040726\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395079\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614666 59.6910732)'::geometry, 'node', 1632497618, 30, NULL, '{\"alt_name\":\"Гермес Флорентийский\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6467/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Hermes\",\"material\":\"metal\",\"name\":\"Меркурий\",\"name:en\":\"Mercury\",\"ref\":\"П-68/1\",\"ref:okn\":\"781610399040396\",\"start_date\":\"1810\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395060\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613231 59.6910597)'::geometry, 'node', 1632497619, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_subject:wikidata\":\"Q104413\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6477/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Erato\",\"material\":\"metal\",\"name\":\"Эрато\",\"name:el\":\"Ἐρατώ\",\"name:ka\":\"ერატო\",\"name:ko\":\"에라토\",\"name:la\":\"Eratō\",\"name:uk\":\"Ерато\",\"name:zh\":\"厄剌托\",\"ref\":\"П-69/1\",\"ref:okn\":\"781610399040476\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395110\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612077 59.691005)'::geometry, 'node', 1632497620, 31, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6473/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Terpsichore\",\"material\":\"metal\",\"name\":\"Терпсихора\",\"name:el\":\"Τερψιχόρη\",\"name:en\":\"Terpsichore\",\"name:la\":\"Terpsichore\",\"ref\":\"П-70/1\",\"ref:okn\":\"781610399040436\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395096\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611782 59.690902)'::geometry, 'node', 1632497621, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1792\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6472/\",\"historic\":\"yes\",\"historic:start_date\":\"1792\",\"int_name\":\"Thalie\",\"material\":\"metal\",\"name\":\"Талия\",\"name:el\":\"Θαλία\",\"name:la\":\"Thalīa\",\"name:uk\":\"Талія\",\"name:zh\":\"塔利亚\",\"ref\":\"П-59/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612041 59.6907321)'::geometry, 'node', 1632503254, 6, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.462536 59.6908707)'::geometry, 'node', 1652587953, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4619277 59.6908578)'::geometry, 'node', 1652587958, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617256 59.6909215)'::geometry, 'node', 3177639362, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612018 59.6909805)'::geometry, 'node', 3188928044, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613001 59.6906759)'::geometry, 'node', 3218618266, 4, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614144 59.6907882)'::geometry, 'node', 4912277772, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Флора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615482 59.6907937)'::geometry, 'node', 4912277773, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Урания\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613145 59.6908057)'::geometry, 'node', 4912277774, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эвтерпа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616653 59.6908341)'::geometry, 'node', 4912277775, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Клио\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612216 59.6908451)'::geometry, 'node', 4912277776, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Мельпомена\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611751 59.690919)'::geometry, 'node', 4912277777, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Талия\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617272 59.6909351)'::geometry, 'node', 4912277778, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Калиопа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612298 59.691015)'::geometry, 'node', 4912277779, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Терпсихора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616819 59.6910157)'::geometry, 'node', 4912277780, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Полигимния\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461621 59.6910498)'::geometry, 'node', 4912277781, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Венера Каллипиги\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613548 59.6910624)'::geometry, 'node', 4912277782, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эрато\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615016 59.6910712)'::geometry, 'node', 4912277783, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Меркурий\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608954 59.6897746)'::geometry, 'node', 5251698420, 25, NULL, '{\"access\":\"permissive\",\"addr:housenumber\":\"20 литББ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Винченцо Бренна\",\"barrier\":\"gate\",\"description:access\":\"Ворота можно закрывать и открывать руками\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6459/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Большие Старосильвийские ворота\",\"ref\":\"1\",\"ref:okn\":\"781620399040626\",\"start_date\":\"1786..1793\",\"tourism\":\"attraction\",\"website\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"wheelchair\":\"yes\",\"wikidata\":\"Q118122050\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460198 59.6905729)'::geometry, 'node', 6758903438, 6, NULL, '{\"artist_name\":\"И.П. Мартос\",\"artwork_type\":\"sculpture\",\"height\":\"4\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4625734 59.6908311)'::geometry, 'node', 8331430683, 3, NULL, '{\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614743 59.690923)'::geometry, 'node', 8530936200, 1, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Аполлон\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4597619 59.6907527)'::geometry, 'node', 9140565043, 1, NULL, '{\"ford\":\"yes\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4606891 59.6906687)'::geometry, 'node', 9140576937, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608515 59.6907117)'::geometry, 'node', 9140576938, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613945 59.6911519)'::geometry, 'node', 9143069530, 5, NULL, '{\"drain\":\"no\",\"source:direction\":\"survey\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('POINT (30.4615903 59.6911716)'::geometry, 'node', 9143069534, 1, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460339 59.6906064)'::geometry, 'node', 9143093777, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601191 59.6906349)'::geometry, 'node', 9143093778, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610445 59.6908345)'::geometry, 'node', 9143093802, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610243 59.6909861)'::geometry, 'node', 9143093804, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612126 59.691117)'::geometry, 'node', 9143093806, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460445 59.6910504)'::geometry, 'node', 9656736571, 2, NULL, '{\"colour\":\"#4e3a39\",\"description\":\"Веломаршрут №4\",\"height\":\"4\",\"information\":\"guidepost\",\"material\":\"metal\",\"start_date\":\"2021-03..2021-10\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4608056 59.6895935, 30.4608954 59.6897746, 30.4609447 59.6898691, 30.4614541 59.6909278)'::geometry, 'way', 30995960, 42, '{9140727117,5251698420,1518870630,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Центральная аллея\",\"ref\":\"VII\",\"source:name\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605616 59.6906319, 30.4597619 59.6907527, 30.4596087 59.6907755)'::geometry, 'way', 149099000, 6, '{1621246509,9140565043,1621246531}', '{\"intermittent\":\"yes\",\"source:direction\":\"isoline\",\"start_date\":\"1786\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604741 59.6903357, 30.4604598 59.6904575, 30.4604646 59.6905099, 30.4604784 59.6905443, 30.4604933 59.6905665, 30.4605321 59.6905996, 30.4605616 59.6906319)'::geometry, 'way', 149099004, 8, '{1621246503,9140576877,1621246482,1621246465,1621246454,9140576939,1621246509}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601177 59.6905796, 30.4600903 59.6905709, 30.4600721 59.6905605, 30.4600579 59.6905458, 30.4600519 59.6905296, 30.4600545 59.6905133, 30.4600656 59.6904979, 30.4600844 59.6904845, 30.4601095 59.690474, 30.4601391 59.6904673, 30.460169 59.6904648, 30.4601991 59.6904661, 30.4602277 59.6904711, 30.4602498 59.6904787, 30.4602686 59.6904892, 30.4602829 59.6905018, 30.4602918 59.6905174, 30.4602917 59.6905327, 30.4602881 59.6905462, 30.4602793 59.6905579)'::geometry, 'way', 149099028, 5, '{9140576951,9140576902,9140576952,1621246602,1621246607,1621246668,1621246614,1621246615,1621246618,1621246620,1621246630,1621246244,1621246631,1621246224,1621246250,1621246635,1621246647,9140576950,9140576903,9140576949}', '{\"barrier\":\"fence\",\"colour\":\"green\",\"fence_type\":\"wood\",\"height\":\"2\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4603352 59.6911039, 30.460353 59.6910638, 30.4603719 59.6910414, 30.4603979 59.691021, 30.4604807 59.6909761, 30.460577 59.6909284, 30.4606406 59.6908886, 30.460669 59.6908562, 30.460673 59.6908234, 30.4606633 59.6907504, 30.4606582 59.6907286, 30.4606491 59.6907025, 30.4606314 59.690668, 30.460609 59.690636, 30.4605858 59.6906064, 30.4605578 59.6905735, 30.4605362 59.6905385, 30.4605214 59.6905022, 30.4605119 59.6904644, 30.4605095 59.6904098, 30.460512 59.6903499, 30.4605096 59.6903011)'::geometry, 'way', 149099029, 36, '{9140727237,4260007753,9140727241,8650331583,1621246592,1621246588,1621246578,1652603857,9140727240,8650331584,1621246577,9143093738,1621246419,9140576875,1652603906,9140576876,1621246542,8650331586,9140576874,8650331585,1621246403,9140576873,1239612684}', '{\"alt_name\":\"Окружная дорожка\",\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Круговая дорожка\",\"start_date\":\"1789.1793\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610979 59.6907799, 30.4608515 59.6907117)'::geometry, 'way', 149099034, 9, '{1632503255,9140576938}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4629005 59.6913411, 30.4614541 59.6909278)'::geometry, 'way', 150294524, 8, '{1239612692,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"III\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613148 59.6910721, 30.4613667 59.6910818, 30.4614212 59.6910868, 30.4614766 59.6910869, 30.4615311 59.6910822, 30.4615833 59.6910728, 30.4616314 59.691059, 30.461674 59.6910412, 30.4617098 59.6910199, 30.4617378 59.6909958, 30.461757 59.6909696, 30.4617669 59.6909421, 30.4617672 59.6909141, 30.4617579 59.6908866, 30.4617393 59.6908603, 30.4617119 59.690836, 30.4616766 59.6908145, 30.4616343 59.6907964, 30.4615866 59.6907823, 30.4615347 59.6907726, 30.4614802 59.6907676, 30.4614248 59.6907674, 30.4613703 59.6907721, 30.4613181 59.6907815, 30.46127 59.6907954, 30.4612274 59.6908132, 30.4611916 59.6908345, 30.4611636 59.6908586, 30.4611444 59.6908848, 30.4611345 59.6909123, 30.4611342 59.6909402, 30.4611435 59.6909678, 30.4611621 59.6909941, 30.4611895 59.6910184, 30.4612248 59.6910399, 30.461267 59.6910579, 30.4613148 59.6910721)'::geometry, 'way', 150294525, 6, '{1632220686,9143093824,1632220364,9143093807,1632220588,9143093808,1632220590,9143093809,1632220259,9143093810,1632220292,9143093811,1632220283,9143093812,1632220296,9143093813,1632220378,9143093814,1632220319,9143093815,1632220315,9143093816,1632220323,9143093817,1632220358,9143093818,1632220355,9143093819,1632220350,9143093820,1632220359,9143093821,1632220366,9143093822,1632220374,9143093823,1632220686}', '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.460726 59.6910052, 30.460614 59.6910145, 30.4605241 59.69102, 30.4604597 59.691022, 30.4603979 59.691021)'::geometry, 'way', 150294532, 30, '{1632497615,1632220252,9140727238,9140727242,9140727239,1621246592}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"ref\":\"X\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605096 59.6903011, 30.4614541 59.6909278)'::geometry, 'way', 150294541, 8, '{1239612684,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VIII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4617339 59.6901702)'::geometry, 'way', 150294547, 9, '{1632497615,1518870645}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461819 59.6910085, 30.4618473 59.6909863, 30.4618928 59.6909647, 30.461951 59.6909401, 30.4620356 59.6909251, 30.462536 59.6908707)'::geometry, 'way', 152440395, 6, '{1652587944,1652587948,1652587950,9143093800,1652587952,1652587953}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613063 59.6907075, 30.4612631 59.6907161, 30.4612041 59.6907321)'::geometry, 'way', 152442436, 10, '{1652605207,9143204222,1632503254}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4617627 59.6907689, 30.4618218 59.6907946, 30.4618794 59.6908253, 30.4619277 59.6908578)'::geometry, 'way', 152442438, 8, '{1652605205,1652605201,1652605200,1652587958}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4612018 59.6909805, 30.4617256 59.6909215, 30.4625734 59.6908311, 30.4628306 59.6908088)'::geometry, 'way', 311975108, 20, '{3188928044,3177639362,8331430683,7911801321}', '{\"layer\":\"-1\",\"name\":\"Старосильвийская дождевая канализация\",\"source:direction\":\"survey\",\"tunnel\":\"yes\",\"waterway\":\"drain\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611708 59.6911018, 30.4611289 59.6910829, 30.4610793 59.6910531, 30.4610552 59.6910294, 30.4610432 59.6910153, 30.4610243 59.6909861)'::geometry, 'way', 313051687, 8, '{1632503180,9143069533,9143093805,9143069532,1632503185,9143093804}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061)'::geometry, 'way', 426269715, 5, '{4255746051,4255746033,9140576943,9140576942,9140576941,9140576940,4255746057,4255746007,9140576945,9140576946,9140576944,4255746054,4255745992,4255746051}', '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603979 59.691021, 30.4603224 59.6910067, 30.4602382 59.6909843, 30.4601137 59.6909482, 30.4600256 59.6909178, 30.4599203 59.6908773, 30.4597958 59.6908259, 30.4597422 59.6908088, 30.4596966 59.6907997, 30.4596501 59.6907961, 30.4596189 59.6907966, 30.4595885 59.6908005, 30.4595518 59.6908091, 30.4595101 59.6908241)'::geometry, 'way', 438780267, 20, '{1621246592,1621246561,1622496989,8850590008,1621246248,1621246252,8650331580,8849369897,9140576840,8650331579,9140576841,8650331578,9140576842,1622496957}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"loc_name\":\"Спуск у места домика Крик\",\"name\":\"Криковская дорога\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4625498 59.6908065, 30.4614541 59.6909278)'::geometry, 'way', 750779153, 4, '{1632220250,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IV\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4631938 59.6918756)'::geometry, 'way', 750779155, 5, '{1632497615,1195120146}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"II\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4606491 59.6907025)'::geometry, 'way', 750779156, 5, '{1632497615,1621246419}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IX\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4625914 59.6924527)'::geometry, 'way', 750779157, 4, '{1632497615,1652587960}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"I\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611165 59.6918779, 30.46118 59.6916919, 30.4614541 59.6909278)'::geometry, 'way', 750779158, 4, '{9159459639,1239612686,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"XII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4596189 59.6907966, 30.4596712 59.6907865, 30.4597275 59.6907729, 30.459757 59.6907607, 30.4597619 59.6907527, 30.4597677 59.6907431, 30.4597919 59.6907269, 30.4598455 59.6907093, 30.459934 59.6906931, 30.4600118 59.6906782, 30.4600467 59.690666, 30.4600681 59.6906484, 30.4600725 59.6906275, 30.4600655 59.6906044, 30.4600295 59.6905552, 30.4600066 59.6905268, 30.4600031 59.690512, 30.4600111 59.6904995, 30.460044 59.6904799, 30.4600789 59.6904629, 30.4601241 59.6904473)'::geometry, 'way', 988944864, 2, '{9140576841,9140565053,9140565052,9140565051,9140565043,9140565050,9140565049,9140565048,9140565047,9140565046,9140565045,9140565044,1621246253,9140565042,1621246302,1621246323,9140576899,9140576892,9143093786,9143093785,1621246340}', '{\"highway\":\"path\",\"surface\":\"ground\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4607784 59.690696, 30.4606891 59.6906687)'::geometry, 'way', 988944880, 3, '{9140576936,9140576937}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601316 59.6905738, 30.4601383 59.6905745, 30.460144 59.6905725, 30.4601453 59.6905691, 30.4601415 59.6905663, 30.4601348 59.6905656, 30.4601291 59.6905676, 30.4601278 59.6905709, 30.4601316 59.6905738)'::geometry, 'way', 989184163, 1, '{9142788307,9142788306,9142788305,9142788304,9142788303,9142788302,9142788301,9142788300,9142788307}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601637 59.6905695, 30.4601704 59.6905701, 30.4601761 59.6905682, 30.4601774 59.6905648, 30.4601736 59.6905619, 30.4601668 59.6905613, 30.4601612 59.6905632, 30.4601599 59.6905666, 30.4601637 59.6905695)'::geometry, 'way', 989184166, 1, '{9142819031,9142819030,9142819029,9142819028,9142819027,9142819026,9142819025,9142819024,9142819031}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4615026 59.6911479, 30.4614481 59.6911519, 30.4613945 59.6911519)'::geometry, 'way', 989211851, 4, '{1652605211,9143069529,9143069530}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603719 59.6910414, 30.4597387 59.6911122)'::geometry, 'way', 989211857, 12, '{8650331583,4260007752}', '{\"highway\":\"path\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"start_date\":\"1780.1785\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603446 59.6911727, 30.4603806 59.6910714, 30.4603967 59.691047, 30.4604235 59.6910376, 30.4604664 59.6910348, 30.4605415 59.6910308)'::geometry, 'way', 989211858, 1, '{9143069609,9143069608,9143069607,9143069606,9143069605,9143069604}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613583 59.6906799, 30.4614025 59.6907746, 30.461428 59.6907726, 30.4614548 59.6907726, 30.4614763 59.6907739)'::geometry, 'way', 989211859, 1, '{9143093728,9143093727,9143093726,9143093725,9143093724}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461314 59.6906832, 30.461361 59.6907794, 30.4613301 59.6907854, 30.4613033 59.6907929, 30.4612845 59.690799, 30.4609841 59.6905973)'::geometry, 'way', 989211860, 1, '{9143093729,9143093730,9143093731,9143093732,9143093734,9143093733}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611484 59.6909364, 30.4611471 59.6909174, 30.4611497 59.6909005, 30.4611578 59.6908836, 30.4611645 59.6908714, 30.4611739 59.6908606, 30.4606917 59.6907283, 30.460681 59.6907283, 30.460677 59.6907337, 30.460685 59.6907601, 30.4606891 59.6907817, 30.4606917 59.6908129, 30.4606944 59.6908426, 30.4606837 59.6908656, 30.4606596 59.6908927, 30.4606247 59.6909184, 30.460563 59.6909523, 30.460453 59.6910064)'::geometry, 'way', 989211861, 1, '{9143093739,9143093740,9143093741,9143093742,9143093743,9143093744,9143093755,9143093737,9143093736,9143093754,9143093753,9143093722,9143093721,9143093720,9143093719,9143093718,9143093717,9143069616}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605335 59.6903364, 30.4605335 59.6903946, 30.4605308 59.6904501, 30.4605348 59.6904813, 30.4605442 59.6905137, 30.4605576 59.6905394, 30.4605818 59.6905773, 30.4606193 59.6906247, 30.4606408 59.6906545, 30.4606596 59.6906856, 30.4606716 59.6906958, 30.4606958 59.6907039, 30.4611947 59.6908433, 30.4612155 59.6908301, 30.4612369 59.6908166, 30.461253 59.6908098, 30.4609492 59.6906112)'::geometry, 'way', 989211862, 1, '{9143093764,9143093763,9143093762,9143093748,9143093761,9143093760,9143093759,9143093758,9143093757,9143093756,9143093752,9143093751,9143093750,9143093747,9143093746,9143093745,9143093735}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604919 59.6903357, 30.4604919 59.690398, 30.4604892 59.6904494, 30.4604946 59.690486, 30.4605053 59.6905157, 30.4605161 59.6905387, 30.4605402 59.6905766, 30.4605778 59.690624, 30.4605992 59.6906538, 30.460626 59.6906931, 30.4606368 59.6907255, 30.4606448 59.6907574, 30.4606502 59.6907871, 30.4606542 59.6908196, 30.4606502 59.6908494, 30.4606327 59.6908751, 30.4606059 59.6908927, 30.4605496 59.6909266, 30.4604128 59.6909942)'::geometry, 'way', 989211863, 1, '{9143093776,9143093775,9143093774,9143093773,9143093749,9143093772,9143093771,9143093770,9143093769,9143093768,9143093767,9143093765,9143093766,9143069615,9143069610,9143069614,9143069613,9143069612,9143069611}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619893 59.6908956, 30.4620356 59.6909251)'::geometry, 'way', 989211867, 2, '{1652587955,1652587952}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610753 59.6908007, 30.4610979 59.6907799)'::geometry, 'way', 989211868, 4, '{9143093801,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611491 59.6907553, 30.4610979 59.6907799)'::geometry, 'way', 989211869, 4, '{1632503177,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461012 59.6909572, 30.4610056 59.6909157, 30.4610163 59.6908698, 30.4610445 59.6908345)'::geometry, 'way', 989211870, 4, '{1632503179,9143093803,1632503181,9143093802}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613456 59.6911475, 30.46131 59.6911438, 30.4612696 59.6911343, 30.4612126 59.691117)'::geometry, 'way', 989211871, 4, '{1652605209,9143069531,1632503237,9143093806}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4622826 59.6903796)'::geometry, 'way', 991343632, 2, '{1632497615,1518870652}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"V\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4620021 59.690877, 30.4617551 59.6909043, 30.4617579 59.690914, 30.4617593 59.6909255, 30.4617606 59.6909377)'::geometry, 'way', 991343633, 1, '{9159456550,9159456549,9159456545,9159456544,9159456543}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619941 59.6908547, 30.4617471 59.690882, 30.4617392 59.6908714, 30.4617298 59.6908606, 30.4617164 59.6908491)'::geometry, 'way', 991343634, 1, '{9159456552,9159456551,9159456548,9159456547,9159456546}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4602794 59.6911745, 30.4603083 59.6910871)'::geometry, 'way', 991343661, 1, '{9159459675,9159459674}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4614541 59.6909278)'::geometry, 'way', 1042527594, 11, '{9140727237,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч Амфитеатра\",\"ref\":\"XI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4611342 59.6909402, 30.4611345 59.6909123, 30.4611444 59.6908848, 30.4611636 59.6908586, 30.4611916 59.6908345, 30.4612274 59.6908132, 30.46127 59.6907954, 30.4613181 59.6907815, 30.4613703 59.6907721, 30.4614248 59.6907674, 30.4614802 59.6907676, 30.4615347 59.6907726, 30.4615866 59.6907823, 30.4616343 59.6907964, 30.4616766 59.6908145, 30.4617119 59.690836, 30.4617393 59.6908603, 30.4617579 59.6908866, 30.4617672 59.6909141, 30.4617669 59.6909421, 30.461757 59.6909696, 30.4617378 59.6909958, 30.4617098 59.6910199, 30.461674 59.6910412, 30.4616314 59.691059, 30.4615833 59.6910728, 30.4615311 59.6910822, 30.4614766 59.6910869, 30.4614212 59.6910868, 30.4613667 59.6910818, 30.4613148 59.6910721, 30.461267 59.6910579, 30.4612248 59.6910399, 30.4611895 59.6910184, 30.4611621 59.6909941, 30.4611435 59.6909678, 30.4611342 59.6909402)))'::geometry, 'way', 150294525, 6, NULL, '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034)))'::geometry, 'way', 426269715, 5, NULL, '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601599 59.6905666, 30.4601612 59.6905632, 30.4601668 59.6905613, 30.4601736 59.6905619, 30.4601774 59.6905648, 30.4601761 59.6905682, 30.4601704 59.6905701, 30.4601637 59.6905695, 30.4601599 59.6905666)))'::geometry, 'way', 989184166, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography) SERVER sqlite_svr;\n\n--Testcase 41: ERR - raster\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, read PostGOS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49: ERR, no SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 50: ERR, no SRID\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 52:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 53: ERR damaged, but there is SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = (decode('0101000020e6100000bf72ce99fe76', 'hex')::geometry);\n\n-- Insert PostGIS/GEOS BLOB, read SpatiaLite BLOB\n--Testcase 54: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 55:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 56:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 57: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 58:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 59:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 60:  ERR damaged geometry, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (3, decode('0101000020e6100000bf72ce99fe76', 'hex'),  NULL, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 61:  ERR damaged geography, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (4, NULL, decode('0101000020e6100000bf72ce99fe76', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n\n--Testcase 62:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 63:\nINSERT INTO \"♂\" SELECT * FROM \"♂\".\"テスト\";\n--Testcase 64:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 65:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 66:\nSELECT * FROM \"♂\";\n--Testcase 67:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 69:\nSELECT * FROM \"♂\";\n\n--Testcase 70:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL ,\n\tosm_id bigint OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt text\n) SERVER sqlite_svr OPTIONS (table '♁');\n\n--Testcase 71: ERR - No SRID\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\";\n--Testcase 72: OK\nSELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 73:\nUPDATE \"♁\" SET geom = ST_SetSRID(geom, 4326);\n--Testcase 74:\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 75:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 76:\nSELECT * FROM \"♁ FDW\";\n--Testcase 77:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 78:\nSELECT * FROM \"♁ FDW\";\n\n--Testcase 79:\nDROP FOREIGN TABLE \"♂\";\n--Testcase 80:\nDROP FOREIGN TABLE \"♁ FDW\";\n--Testcase 81:\nDROP TABLE \"♁\";\n--Testcase 82:\nDROP TABLE \"♂\".\"テスト\";\n--Testcase 83:\nDROP SCHEMA \"♂\";\n\n-- Test operators implemented in PostGIS 3.4.2, other are not tested\n-- SELECT testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 100   -> TC 150                 -> TC200     -> TC250\n-- WHERE testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 300   -> TC 350                 -> TC400     -> TC450\n\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ gm1 g FROM \"types_PostGIS\";\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && gm1 g FROM \"types_PostGIS\";\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << gm1 g FROM \"types_PostGIS\";\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> gm1 g FROM \"types_PostGIS\";\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< gm1 g FROM \"types_PostGIS\";\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> gm1 g FROM \"types_PostGIS\";\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| gm1 g FROM \"types_PostGIS\";\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> gm1 g FROM \"types_PostGIS\";\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| gm1 g FROM \"types_PostGIS\";\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> gm1 g FROM \"types_PostGIS\";\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= gm1 g FROM \"types_PostGIS\";\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm = gm1 g FROM \"types_PostGIS\";\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| gm1 g FROM \"types_PostGIS\";\n--Testcase 115\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> gm1 g FROM \"types_PostGIS\";\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> gm1 g FROM \"types_PostGIS\";\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ gm1 g FROM \"types_PostGIS\";\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ gm1 g FROM \"types_PostGIS\";\n\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 157:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 159:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> gg1 g FROM \"types_PostGIS\";\n--Testcase 201:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && gg1 g FROM \"types_PostGIS\";\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> gg1 g FROM \"types_PostGIS\";\n--Testcase 203:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg = gg1 g FROM \"types_PostGIS\";\n--Testcase 204\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != gg1 g FROM \"types_PostGIS\";\n\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 300:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ gm1 IS NOT NULL;\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && gm1 IS NOT NULL;\n--Testcase 302:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << gm1 IS NOT NULL;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> gm1 IS NOT NULL;\n--Testcase 304:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< gm1 IS NOT NULL;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> gm1 IS NOT NULL;\n--Testcase 306:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| gm1 IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> gm1 IS NOT NULL;\n--Testcase 308:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| gm1 IS NOT NULL;\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> gm1 IS NOT NULL;\n--Testcase 310:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= gm1 IS NOT NULL;\n--Testcase 311:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm = gm1 IS NOT NULL;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& gm1 IS NOT NULL;\n--Testcase 313:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| gm1 IS NOT NULL;\n--Testcase 314:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> gm1 IS NOT NULL;\n--Testcase 315:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> gm1 IS NOT NULL;\n--Testcase 316:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ gm1 IS NOT NULL;\n--Testcase 317:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ gm1 IS NOT NULL;\n\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 351:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 352:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 353:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 354:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 355:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 356:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 357:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 358:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 359:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 360:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 361:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 362:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 363:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 364:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 365:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 366:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 367:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 368:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 369:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 370:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 400:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> gg1 IS NOT NULL;\n--Testcase 401:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && gg1 IS NOT NULL;\n--Testcase 402:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 404:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg = gg1 IS NOT NULL;\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != gg1 IS NOT NULL;\n\n--Testcase 450:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 451:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 452:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 453:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 454:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 500:\nDROP FOREIGN TABLE \"types_PostGIS\";\n--Testcase 501:\nDROP EXTENSION sqlite_fdw CASCADE;\n--Testcase 502:\nDROP EXTENSION postgis CASCADE;\n"
  },
  {
    "path": "sql/14.12/with_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 47:\nCREATE EXTENSION postgis;\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/without_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/without_gis_support/nogis.sql",
    "content": "--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 10:\nCREATE DOMAIN geometry AS bytea;\n--Testcase 11:\nCREATE DOMAIN geography AS bytea;\n--Testcase 12:\nCREATE DOMAIN addbandarg AS bytea;\n--Testcase 13:\nCREATE DOMAIN box2d AS bytea;\n--Testcase 14:\nCREATE DOMAIN box3d AS bytea;\n--Testcase 15:\nCREATE DOMAIN geometry_dump AS bytea;\n--Testcase 16:\nCREATE DOMAIN geomval AS bytea;\n--Testcase 17:\nCREATE DOMAIN getfaceedges_returntype AS bytea;\n--Testcase 18:\nCREATE DOMAIN rastbandarg AS bytea;\n--Testcase 19:\nCREATE DOMAIN raster AS bytea;\n--Testcase 20:\nCREATE DOMAIN reclassarg AS bytea;\n--Testcase 21:\nCREATE DOMAIN summarystats AS bytea;\n--Testcase 22:\nCREATE DOMAIN topoelement AS bytea;\n--Testcase 23:\nCREATE DOMAIN topoelementarray AS bytea;\n--Testcase 24:\nCREATE DOMAIN topogeometry AS bytea;\n--Testcase 25:\nCREATE DOMAIN unionarg AS bytea;\n--Testcase 26:\nCREATE DOMAIN validatetopology_returntype AS bytea;\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text) SERVER sqlite_svr;\n\n--Testcase 41: ERR unable to convert to unsupported PostGIS specific data type\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, but CANNOT read PostGIS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: read the same BLOBs\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n--Testcase 50:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n\n-- Insert a BLOB, read SpatiaLite BLOB without any transformations\n--Testcase 51: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 52:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 53:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 54: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n\n--Testcase 55:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 56:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 57:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 58:\nSELECT * FROM \"♂\";\n--Testcase 59:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 60:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 61:\nINSERT INTO \"♂\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\n--Testcase 62:\nSELECT * FROM \"♂\";\n\n--Testcase 63:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL,\n\tosm_id int OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt json\n) SERVER sqlite_svr\nOPTIONS (table '♁');\n\n--Testcase 55:\nINSERT INTO \"♁ FDW\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 67:\nSELECT * FROM \"♁ FDW\";\n\n-- PostGIS specific data types, but SpatiaLite or sqlite_fdw unsupported \n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box2d;\n--Testcase 69: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 70:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box3d;\n--Testcase 71: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 72:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry_dump;\n--Testcase 73: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 74:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geomval;\n--Testcase 75: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 76:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE getfaceedges_returntype;\n--Testcase 77: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 78:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE rastbandarg;\n--Testcase 79: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 80:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE raster;\n--Testcase 81: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 82:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE reclassarg;\n--Testcase 83: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 84:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE summarystats;\n--Testcase 85: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 86:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelement;\n--Testcase 87: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 88:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelementarray;\n--Testcase 89: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 90:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topogeometry;\n--Testcase 91: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 92:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE unionarg;\n--Testcase 93: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 94:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE validatetopology_returntype;\n--Testcase 95: -- ERR\nSELECT * FROM \"♂\";\n\n-- PostGIS specific data types, not bytea mode, hence error\n--Testcase 96:\nALTER DOMAIN geometry RENAME TO geom0;\n--Testcase 97:\nALTER DOMAIN geography RENAME TO geog0;\n--Testcase 98:\nCREATE DOMAIN geometry AS text;\n--Testcase 99:\nCREATE DOMAIN geography AS text;\n\n--Testcase 100:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 101: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 102:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geography;\n--Testcase 102: -- ERR\nSELECT * FROM \"♂\";\n\n--Testcase 103:\nDROP DOMAIN geometry CASCADE;\n--Testcase 104:\nDROP DOMAIN geography CASCADE;\n--Testcase 105:\nDROP DOMAIN addbandarg;\n--Testcase 106:\nDROP DOMAIN box2d;\n--Testcase 107:\nDROP DOMAIN box3d;\n--Testcase 108:\nDROP DOMAIN geometry_dump;\n--Testcase 109:\nDROP DOMAIN geomval;\n--Testcase 110:\nDROP DOMAIN getfaceedges_returntype;\n--Testcase 111:\nDROP DOMAIN rastbandarg;\n--Testcase 112:\nDROP DOMAIN raster CASCADE;\n--Testcase 113:\nDROP DOMAIN reclassarg;\n--Testcase 114:\nDROP DOMAIN summarystats;\n--Testcase 115:\nDROP DOMAIN topoelement;\n--Testcase 116:\nDROP DOMAIN topoelementarray;\n--Testcase 117:\nDROP DOMAIN topogeometry;\n--Testcase 118:\nDROP DOMAIN unionarg;\n--Testcase 119:\nDROP DOMAIN validatetopology_returntype;\n--Testcase 120:\nDROP DOMAIN geom0 CASCADE;\n--Testcase 121:\nDROP DOMAIN geog0 CASCADE;\n\n--Testcase 122:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 123:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/14.12/without_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/aggregate.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 18:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n-- test for aggregate pushdown\n--Testcase 8:\nDROP SERVER IF EXISTS sqlite_svr CASCADE;\n--Testcase 9:\nDROP EXTENSION IF EXISTS sqlite_fdw CASCADE;\n\n--Testcase 10:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 11:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 12:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nexplain (costs off, verbose) select count(distinct a) from multiprimary;\n\n--Testcase 2:\nexplain (costs off, verbose) select sum(b),max(b), min(b), avg(b) from multiprimary;\n\n--Testcase 3:\nexplain (costs off, verbose) select sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n\n--Testcase 4:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having sum(a) > 0;\n\n--Testcase 5:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having avg(a^2) > 0 and sum(a) > 0;\n\n-- stddev and variance are not pushed down\n--Testcase 6:\nexplain (costs off, verbose) select stddev(a) from multiprimary;\n--Testcase 7:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having variance(a) > 0;\n\n--Testcase 13:\nDROP FOREIGN TABLE multiprimary;\n\n--Testcase 16:\nCREATE FOREIGN TABLE limittest(id serial OPTIONS (key 'true'), x int, y text) SERVER sqlite_svr;\n\n--Testcase 17:\nINSERT INTO limittest(x, y) VALUES (1, 'x'), (2, 'x'), (3, 'x'), (4, 'x');\n--Testcase 18:\nINSERT INTO limittest(x, y) VALUES (1, 'y'), (2, 'y'), (3, 'y'), (4, 'y');\n--Testcase 19:\nINSERT INTO limittest(x, y) VALUES (1, 'z'), (2, 'z'), (3, 'z'), (4, 'z');\n\n--Testcase 20:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 21:\nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 22:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 23:\nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 24:\nEXPLAIN VERBOSE \nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 25:\nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 26:\nEXPLAIN VERBOSE \nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n--Testcase 27:\nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n\n--Testcase 28:\nDROP FOREIGN TABLE limittest;\n\n--Testcase 14:\nDROP SERVER sqlite_svr;\n--Testcase 15:\nDROP EXTENSION sqlite_fdw CASCADE;\n\n"
  },
  {
    "path": "sql/15.7/extra/aggregates.sql",
    "content": "--\n-- AGGREGATES\n--\n--Testcase 266:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 267:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 268:\nCREATE FOREIGN TABLE onek(\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 269:\nCREATE FOREIGN TABLE aggtest (\n  a       int2,\n  b     float4\n) SERVER sqlite_svr;\n\n--Testcase 270:\nCREATE FOREIGN TABLE student (\n  name    text,\n  age     int4,\n  location  point,\n  gpa     float8\n) SERVER sqlite_svr;\n\n--Testcase 271:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 272:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 697:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 698:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 699:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 700:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 701:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 273:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 702:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 703:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 704:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 705:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 706:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 274:\nCREATE FOREIGN TABLE multi_arg_agg (a int OPTIONS (key 'true'), b int, c text) SERVER sqlite_svr;\n\n--Testcase 275:\nCREATE FOREIGN TABLE VARCHAR_TBL(f1 varchar(4) OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 276:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 707:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 708:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 709:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 710:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 711:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 588:\nSET extra_float_digits = 0;\n--Testcase 1:\nSELECT avg(four) AS avg_1 FROM onek;\n\n--Testcase 2:\nSELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;\n\n--Testcase 697:\nCREATE FOREIGN TABLE agg_tb(v int, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 698:\nINSERT INTO agg_tb(v) VALUES(1), (2), (3);\n--Testcase 699: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 700:\nDELETE FROM agg_tb;\n--Testcase 701:\nINSERT INTO agg_tb(v) VALUES (NULL);\n--Testcase 702: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 703:\nDELETE FROM agg_tb;\n--Testcase 704:\nINSERT INTO agg_tb(v) VALUES (NULL), (1), (2);\n--Testcase 705: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 706:\nCREATE FOREIGN TABLE agg_tb2(v text) SERVER sqlite_svr;\n--Testcase 707:\nINSERT INTO agg_tb2(v) VALUES (array['hello', 'world']);\n--Testcase 708: -- Pg 16+\nSELECT any_value(v) FROM agg_tb2;\n\n-- In 7.1, avg(float4) is computed using float8 arithmetic.\n--Testcase 3:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 678:\nSELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;\n\n--Testcase 4:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 679:\nSELECT avg(gpa)::numeric(10,3) AS avg_3_4 FROM ONLY student;\n\n\n--Testcase 5:\nSELECT sum(four) AS sum_1500 FROM onek;\n--Testcase 6:\nSELECT sum(a) AS sum_198 FROM aggtest;\n--Testcase 7:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 680:\nSELECT sum(b)::numeric(10,3) AS avg_431_773 FROM aggtest;\n--Testcase 8:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 681:\nSELECT sum(gpa)::numeric(10,3) AS avg_6_8 FROM ONLY student;\n\n--Testcase 9:\nSELECT max(four) AS max_3 FROM onek;\n--Testcase 10:\nSELECT max(a) AS max_100 FROM aggtest;\n--Testcase 11:\nSELECT max(aggtest.b) AS max_324_78 FROM aggtest;\n--Testcase 12:\nSELECT max(student.gpa) AS max_3_7 FROM student;\n\n--Testcase 13:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 682:\nSELECT stddev_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 14:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 683:\nSELECT stddev_samp(b)::numeric(20,10) FROM aggtest;\n--Testcase 15:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 684:\nSELECT var_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 16:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 685:\nSELECT var_samp(b)::numeric(20,10) FROM aggtest;\n\n--Testcase 17:\nSELECT stddev_pop(b::numeric) FROM aggtest;\n--Testcase 18:\nSELECT stddev_samp(b::numeric) FROM aggtest;\n--Testcase 19:\nSELECT var_pop(b::numeric) FROM aggtest;\n--Testcase 20:\nSELECT var_samp(b::numeric) FROM aggtest;\n\n-- population variance is defined for a single tuple, sample variance\n-- is not\n--Testcase 277:\nCREATE FOREIGN TABLE agg_t3(a float8, b float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 278:\nDELETE FROM agg_t3;\n--Testcase 279:\nINSERT INTO agg_t3 values (1.0::float8, 2.0::float8);\n--Testcase 280:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n\n--Testcase 281:\nDELETE FROM agg_t3;\n--Testcase 282:\nINSERT INTO agg_t3 values (3.0::float8, 4.0::float8);\n--Testcase 283:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 284:\nDELETE FROM agg_t3;\n--Testcase 285:\nINSERT INTO agg_t3 values ('inf'::float8, 'inf'::float8);\n--Testcase 286:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 287:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 288:\nDELETE FROM agg_t3;\n--Testcase 289:\nINSERT INTO agg_t3 values ('nan'::float8, 'nan'::float8);\n--Testcase 290:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 291:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 292:\nCREATE FOREIGN TABLE agg_t4(a float4, b float4, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 293:\nDELETE FROM agg_t4;\n--Testcase 294:\nINSERT INTO agg_t4 values (1.0::float4, 2.0::float4);\n--Testcase 295:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n\n--Testcase 296:\nDELETE FROM agg_t4;\n--Testcase 297:\nINSERT INTO agg_t4 values (3.0::float4, 4.0::float4);\n--Testcase 298:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 299:\nDELETE FROM agg_t4;\n--Testcase 300:\nINSERT INTO agg_t4 values ('inf'::float4, 'inf'::float4);\n--Testcase 301:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 302:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 303:\nDELETE FROM agg_t4;\n--Testcase 304:\nINSERT INTO agg_t4 values ('nan'::float4, 'nan'::float4);\n--Testcase 305:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 306:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 307:\nCREATE FOREIGN TABLE agg_t5(a numeric, b numeric, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 308:\nDELETE FROM agg_t5;\n--Testcase 309:\nINSERT INTO agg_t5 values (1.0::numeric, 2.0::numeric);\n--Testcase 310:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 311:\nDELETE FROM agg_t5;\n--Testcase 312:\nINSERT INTO agg_t5 values (3.0::numeric, 4.0::numeric);\n--Testcase 313:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 597:\nDELETE FROM agg_t5;\n--Testcase 598:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 599:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 600:\nDELETE FROM agg_t5;\n--Testcase 601:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 602:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 314:\nDELETE FROM agg_t5;\n--Testcase 315:\nINSERT INTO agg_t5 values ('nan'::numeric, 'nan'::numeric);\n--Testcase 316:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n--Testcase 317:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n-- verify correct results for null and NaN inputs\n--Testcase 318:\nCREATE FOREIGN TABLE agg_t8(a text OPTIONS (key 'true'), b text) SERVER sqlite_svr;\n--Testcase 319:\nDELETE FROM agg_t8;\n--Testcase 320:\nINSERT INTO agg_t8 select * from generate_series(1,3);\n--Testcase 321:\nselect sum(null::int4) from agg_t8;\n--Testcase 322:\nselect sum(null::int8) from agg_t8;\n--Testcase 323:\nselect sum(null::numeric) from agg_t8;\n--Testcase 324:\nselect sum(null::float8) from agg_t8;\n--Testcase 325:\nselect avg(null::int4) from agg_t8;\n--Testcase 326:\nselect avg(null::int8) from agg_t8;\n--Testcase 327:\nselect avg(null::numeric) from agg_t8;\n--Testcase 328:\nselect avg(null::float8) from agg_t8;\n--Testcase 329:\nselect sum('NaN'::numeric) from agg_t8;\n--Testcase 330:\nselect avg('NaN'::numeric) from agg_t8;\n\n-- verify correct results for infinite inputs\n--Testcase 331:\nDELETE FROM agg_t3;\n--Testcase 332:\nINSERT INTO agg_t3 VALUES ('1'::float8), ('infinity'::float8);\n--Testcase 333:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 334:\nDELETE FROM agg_t3;\n--Testcase 335:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('1'::float8);\n--Testcase 336:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 337:\nDELETE FROM agg_t3;\n--Testcase 338:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('infinity'::float8);\n--Testcase 339:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 340:\nDELETE FROM agg_t3;\n--Testcase 341:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('infinity'::float8);\n--Testcase 342:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 603:\nDELETE FROM agg_t3;\n--Testcase 604:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('-infinity'::float8);\n--Testcase 605:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 606:\nDELETE FROM agg_t3;\n--Testcase 607:\nINSERT INTO agg_t3 VALUES ('1'::numeric), ('infinity'::numeric);\n--Testcase 608:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 609:\nDELETE FROM agg_t3;\n--Testcase 610:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('1'::numeric);\n--Testcase 611:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 612:\nDELETE FROM agg_t3;\n--Testcase 613:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('infinity'::numeric);\n--Testcase 614:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 615:\nDELETE FROM agg_t3;\n--Testcase 616:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('infinity'::numeric);\n--Testcase 617:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 618:\nDELETE FROM agg_t3;\n--Testcase 619:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('-infinity'::numeric);\n--Testcase 620:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n-- test accuracy with a large input offset\n--Testcase 343:\nCREATE FOREIGN TABLE agg_t6(a float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 344:\nDELETE FROM agg_t6;\n--Testcase 345:\nINSERT INTO agg_t6 VALUES (100000003), (100000004), (100000006), (100000007);\n--Testcase 346:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n--Testcase 347:\nDELETE FROM agg_t6;\n--Testcase 348:\nINSERT INTO agg_t6 VALUES (7000000000005), (7000000000007);\n--Testcase 349:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n-- SQL2003 binary aggregates\n--Testcase 21:\nSELECT regr_count(b, a) FROM aggtest;\n--Testcase 22:\nSELECT regr_sxx(b, a) FROM aggtest;\n--Testcase 23:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 686:\nSELECT regr_syy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 24:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 687:\nSELECT regr_sxy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 25:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 688:\nSELECT regr_avgx(b, a), regr_avgy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 26:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 689:\nSELECT regr_r2(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 27:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 690:\nSELECT regr_slope(b, a)::numeric(20,10), regr_intercept(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 28:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 691:\nSELECT covar_pop(b, a)::numeric(20,10), covar_samp(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 29:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 692:\nSELECT corr(b, a)::numeric(20,10) FROM aggtest;\n\n-- check single-tuple behavior\n--Testcase 350:\nCREATE FOREIGN TABLE agg_t7(a float8, b float8, c float8, d float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 351:\nDELETE FROM agg_t7;\n--Testcase 352:\nINSERT INTO agg_t7 VALUES (1, 2, 3, 4);\n--Testcase 353:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 354:\nDELETE FROM agg_t7;\n--Testcase 355:\nINSERT INTO agg_t7 VALUES (1, 'inf', 3, 'inf');\n--Testcase 356:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 357:\nDELETE FROM agg_t7;\n--Testcase 358:\nINSERT INTO agg_t7 VALUES (1, 'nan', 3, 'nan');\n--Testcase 359:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n-- test accum and combine functions directly\n--Testcase 360:\nCREATE FOREIGN TABLE regr_test (x float8, y float8, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 361:\nDELETE FROM regr_test;\n--Testcase 362:\nINSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);\n--Testcase 363:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 364:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 590:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 365:\nCREATE FOREIGN TABLE agg_t15 (a text, b int, c int, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 366:\ndelete from agg_t15;\n--Testcase 367:\ninsert into agg_t15 values ('{4,140,2900}', 100);\n--Testcase 368:\nSELECT float8_accum(a::float8[], b) from agg_t15;\n\n--Testcase 369:\ndelete from agg_t15;\n--Testcase 370:\ninsert into agg_t15 values ('{4,140,2900,1290,83075,15050}', 200, 100);\n--Testcase 371:\nSELECT float8_regr_accum(a::float8[], b, c) from agg_t15;\n\n--Testcase 372:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30);\n\n--Testcase 373:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (80,100);\n\n--Testcase 374:\nCREATE FOREIGN TABLE agg_t16 (a text, b text, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 375:\ndelete from agg_t16;\n--Testcase 376:\ninsert into agg_t16 values ('{3,60,200}', '{0,0,0}');\n--Testcase 377:\ninsert into agg_t16 values ('{0,0,0}', '{2,180,200}');\n--Testcase 378:\ninsert into agg_t16 values ('{3,60,200}', '{2,180,200}');\n--Testcase 379:\nSELECT float8_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 380:\ndelete from agg_t16;\n--Testcase 381:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{0,0,0,0,0,0}');\n--Testcase 382:\ninsert into agg_t16 values ('{0,0,0,0,0,0}', '{2,180,200,740,57800,-3400}');\n--Testcase 383:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{2,180,200,740,57800,-3400}');\n--Testcase 384:\nSELECT float8_regr_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 385:\nDROP FOREIGN TABLE regr_test;\n\n-- test count, distinct\n--Testcase 30:\nSELECT count(four) AS cnt_1000 FROM onek;\n--Testcase 31:\nSELECT count(DISTINCT four) AS cnt_4 FROM onek;\n\n--Testcase 32:\nselect ten, count(*), sum(four) from onek\ngroup by ten order by ten;\n\n--Testcase 33:\nselect ten, count(four), sum(DISTINCT four) from onek\ngroup by ten order by ten;\n\n-- user-defined aggregates\n--Testcase 386:\nCREATE AGGREGATE newavg (\n   sfunc = int4_avg_accum, basetype = int4, stype = _int8,\n   finalfunc = int8_avg,\n   initcond1 = '{0,0}'\n);\n\n--Testcase 387:\nCREATE AGGREGATE newsum (\n   sfunc1 = int4pl, basetype = int4, stype1 = int4,\n   initcond1 = '0'\n);\n\n--Testcase 388:\nCREATE AGGREGATE newcnt (*) (\n   sfunc = int8inc, stype = int8,\n   initcond = '0', parallel = safe\n);\n\n--Testcase 389:\nCREATE AGGREGATE newcnt (\"any\") (\n   sfunc = int8inc_any, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 390:\nCREATE AGGREGATE oldcnt (\n   sfunc = int8inc, basetype = 'ANY', stype = int8,\n   initcond = '0'\n);\n\n--Testcase 391:\ncreate function sum3(int8,int8,int8) returns int8 as\n'select $1 + $2 + $3' language sql strict immutable;\n\n--Testcase 392:\ncreate aggregate sum2(int8,int8) (\n   sfunc = sum3, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 34:\nSELECT newavg(four) AS avg_1 FROM onek;\n--Testcase 35:\nSELECT newsum(four) AS sum_1500 FROM onek;\n--Testcase 36:\nSELECT newcnt(four) AS cnt_1000 FROM onek;\n--Testcase 37:\nSELECT newcnt(*) AS cnt_1000 FROM onek;\n--Testcase 38:\nSELECT oldcnt(*) AS cnt_1000 FROM onek;\n--Testcase 39:\nSELECT sum2(q1,q2) FROM int8_tbl;\n\n-- test for outer-level aggregates\n\n-- this should work\n--Testcase 40:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n-- this should fail because subquery has an agg of its own in WHERE\n--Testcase 41:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b\n               where sum(distinct a.four + b.four) = b.four);\n\n-- Test handling of sublinks within outer-level aggregates.\n-- Per bug report from Daniel Grace.\n--Testcase 42:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))\nfrom tenk1 o;\n\n-- Test handling of Params within aggregate arguments in hashed aggregation.\n-- Per bug report from Jeevan Chalke.\n--Testcase 393:\nexplain (verbose, costs off)\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 394:\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 395:\nexplain (verbose, costs off)\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--Testcase 396:\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--\n-- test for bitwise integer aggregates\n--\n--Testcase 397:\nCREATE FOREIGN TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 43:\nSELECT\n  BIT_AND(i2) AS \"?\",\n  BIT_OR(i4)  AS \"?\",\n  BIT_XOR(i8) AS \"?\"\nFROM bitwise_test;\n\n--Testcase 44:\nINSERT INTO bitwise_test VALUES\n  (1, 1, 1, 1, 1),\n  (3, 3, 3, null, 2),\n  (7, 7, 7, 3, 4);\n\n--Testcase 45:\nSELECT\n  BIT_AND(i2) AS \"1\",\n  BIT_AND(i4) AS \"1\",\n  BIT_AND(i8) AS \"1\",\n  BIT_AND(i)  AS \"?\",\n  BIT_AND(x)  AS \"0\",\n\n  BIT_OR(i2)  AS \"7\",\n  BIT_OR(i4)  AS \"7\",\n  BIT_OR(i8)  AS \"7\",\n  BIT_OR(i)   AS \"?\",\n  BIT_OR(x)   AS \"7\",\n\n  BIT_XOR(i2) AS \"5\",\n  BIT_XOR(i4) AS \"5\",\n  BIT_XOR(i8) AS \"5\",\n  BIT_XOR(i)  AS \"?\",\n  BIT_XOR(x)  AS \"7\"\nFROM bitwise_test;\n\n--\n-- test boolean aggregates\n--\n-- first test all possible transition and final states\n\n--Testcase 398:\nCREATE FOREIGN TABLE bool_test_tmp(\n  b1 BOOL OPTIONS (key 'true'),\n  b2 BOOL OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n-- boolean and transitions\n-- null because strict\nBEGIN;\n--Testcase 399:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 400:\nSELECT booland_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- and actual computations\nBEGIN;\n--Testcase 401:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE);\n--Testcase 402:\nSELECT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 403:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, FALSE),\n  (FALSE, TRUE),\n  (FALSE, FALSE);\n--Testcase 404:\nSELECT NOT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- boolean or transitions\n-- null because strict\nBEGIN;\n--Testcase 405:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 406:\nSELECT boolor_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- actual computations\nBEGIN;\n--Testcase 407:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE),\n  (TRUE, FALSE),\n  (FALSE, TRUE);\n--Testcase 408:\nSELECT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 409:\nINSERT INTO bool_test_tmp VALUES\n  (FALSE, FALSE);\n--Testcase 410:\nSELECT NOT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n--Testcase 411:\nCREATE FOREIGN TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 46:\nSELECT\n  BOOL_AND(b1)   AS \"n\",\n  BOOL_OR(b3)    AS \"n\"\nFROM bool_test;\n\n--Testcase 47:\nINSERT INTO bool_test VALUES\n  (TRUE, null, FALSE, null),\n  (FALSE, TRUE, null, null),\n  (null, TRUE, FALSE, null);\n\n--Testcase 48:\nSELECT\n  BOOL_AND(b1)     AS \"f\",\n  BOOL_AND(b2)     AS \"t\",\n  BOOL_AND(b3)     AS \"f\",\n  BOOL_AND(b4)     AS \"n\",\n  BOOL_AND(NOT b2) AS \"f\",\n  BOOL_AND(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 49:\nSELECT\n  EVERY(b1)     AS \"f\",\n  EVERY(b2)     AS \"t\",\n  EVERY(b3)     AS \"f\",\n  EVERY(b4)     AS \"n\",\n  EVERY(NOT b2) AS \"f\",\n  EVERY(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 50:\nSELECT\n  BOOL_OR(b1)      AS \"t\",\n  BOOL_OR(b2)      AS \"t\",\n  BOOL_OR(b3)      AS \"f\",\n  BOOL_OR(b4)      AS \"n\",\n  BOOL_OR(NOT b2)  AS \"f\",\n  BOOL_OR(NOT b3)  AS \"t\"\nFROM bool_test;\n\n--\n-- Test cases that should be optimized into indexscans instead of\n-- the generic aggregate implementation.\n--\n\n-- Basic cases\n--Testcase 51:\nexplain (costs off)\n  select min(unique1) from tenk1;\n--Testcase 52:\nselect min(unique1) from tenk1;\n--Testcase 53:\nexplain (costs off)\n  select max(unique1) from tenk1;\n--Testcase 54:\nselect max(unique1) from tenk1;\n--Testcase 55:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 < 42;\n--Testcase 56:\nselect max(unique1) from tenk1 where unique1 < 42;\n--Testcase 57:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42;\n--Testcase 58:\nselect max(unique1) from tenk1 where unique1 > 42;\n\n-- the planner may choose a generic aggregate here if parallel query is\n-- enabled, since that plan will be parallel safe and the \"optimized\"\n-- plan, which has almost identical cost, will not be.  we want to test\n-- the optimized plan, so temporarily disable parallel query.\nbegin;\n--Testcase 628:\nset local max_parallel_workers_per_gather = 0;\n--Testcase 59:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42000;\n--Testcase 60:\nselect max(unique1) from tenk1 where unique1 > 42000;\nrollback;\n\n-- multi-column index (uses tenk1_thous_tenthous)\n--Testcase 61:\nexplain (costs off)\n  select max(tenthous) from tenk1 where thousand = 33;\n--Testcase 62:\nselect max(tenthous) from tenk1 where thousand = 33;\n--Testcase 63:\nexplain (costs off)\n  select min(tenthous) from tenk1 where thousand = 33;\n--Testcase 64:\nselect min(tenthous) from tenk1 where thousand = 33;\n\n-- check parameter propagation into an indexscan subquery\n--Testcase 65:\nexplain (costs off)\n  select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n    from int4_tbl;\n--Testcase 66:\nselect f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n  from int4_tbl;\n\n-- check some cases that were handled incorrectly in 8.3.0\n--Testcase 67:\nexplain (costs off)\n  select distinct max(unique2) from tenk1;\n--Testcase 68:\nselect distinct max(unique2) from tenk1;\n--Testcase 69:\nexplain (costs off)\n  select max(unique2) from tenk1 order by 1;\n--Testcase 70:\nselect max(unique2) from tenk1 order by 1;\n--Testcase 71:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2);\n--Testcase 72:\nselect max(unique2) from tenk1 order by max(unique2);\n--Testcase 73:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 74:\nselect max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 75:\nexplain (costs off)\n  select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n--Testcase 76:\nselect max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n\n-- interesting corner case: constant gets optimized into a seqscan\n--Testcase 77:\nexplain (costs off)\n  select max(100) from tenk1;\n--Testcase 78:\nselect max(100) from tenk1;\n\n-- try it on an inheritance tree\n--Testcase 412:\ncreate foreign table minmaxtest(f1 int) server sqlite_svr;\n--Testcase 413:\ncreate table minmaxtest1() inherits (minmaxtest);\n--Testcase 414:\ncreate table minmaxtest2() inherits (minmaxtest);\n--Testcase 415:\ncreate table minmaxtest3() inherits (minmaxtest);\n--Testcase 416:\ncreate index minmaxtest1i on minmaxtest1(f1);\n--Testcase 417:\ncreate index minmaxtest2i on minmaxtest2(f1 desc);\n--Testcase 418:\ncreate index minmaxtest3i on minmaxtest3(f1) where f1 is not null;\n\n--Testcase 79:\ninsert into minmaxtest values(11), (12);\n--Testcase 80:\ninsert into minmaxtest1 values(13), (14);\n--Testcase 81:\ninsert into minmaxtest2 values(15), (16);\n--Testcase 82:\ninsert into minmaxtest3 values(17), (18);\n\n--Testcase 83:\nexplain (costs off)\n  select min(f1), max(f1) from minmaxtest;\n--Testcase 84:\nselect min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT doesn't do anything useful here, but it shouldn't fail\n--Testcase 85:\nexplain (costs off)\n  select distinct min(f1), max(f1) from minmaxtest;\n--Testcase 86:\nselect distinct min(f1), max(f1) from minmaxtest;\n\n-- check for correct detection of nested-aggregate errors\n--Testcase 87:\nselect max(min(unique1)) from tenk1;\n--Testcase 88:\nselect (select max(min(unique1)) from int8_tbl) from tenk1;\nselect avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3))\n            from tenk1 a1(col1)))\nfrom tenk1 a2(col2);\n--\n-- Test removal of redundant GROUP BY columns\n--\n\n--Testcase 419:\ncreate foreign table agg_t1 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int, d int) server sqlite_svr;\n--Testcase 420:\ncreate foreign table agg_t2 (x int OPTIONS (key 'true'), y int OPTIONS (key 'true'), z int) server sqlite_svr;\n--Testcase 421:\ncreate foreign table agg_t9 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int) server sqlite_svr;\n\n-- Non-primary-key columns can be removed from GROUP BY\n--Testcase 89:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- No removal can happen if the complete PK is not present in GROUP BY\n--Testcase 90:\nexplain (costs off) select a,c from agg_t1 group by a,c,d;\n\n-- Test removal across multiple relations\n--Testcase 91:\nexplain (costs off) select *\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.y,agg_t2.z;\n\n-- Test case where agg_t1 can be optimized but not agg_t2\n--Testcase 92:\nexplain (costs off) select agg_t1.*,agg_t2.x,agg_t2.z\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.z;\n\n-- Cannot optimize when PK is deferrable\n--Testcase 422:\nexplain (costs off) select * from agg_t9 group by a,b,c;\n\n--Testcase 423:\ncreate temp table t1c () inherits (agg_t1);\n\n-- Ensure we don't remove any columns when t1 has a child table\n--Testcase 424:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- Okay to remove columns if we're only querying the parent.\n--Testcase 425:\nexplain (costs off) select * from only agg_t1 group by a,b,c,d;\n\n-- Skip this test, sqlite_fdw does not support partition table\n--create foreign table p_t1 (\n--  a int options (key 'true'),\n--  b int options (key 'true'),\n--  c int,\n--  d int,\n--) partition by list(a) server sqlite_svr;\n--create temp table p_t1_1 partition of p_t1 for values in(1);\n--create temp table p_t1_2 partition of p_t1 for values in(2);\n\n-- Ensure we can remove non-PK columns for partitioned tables.\n--explain (costs off) select * from p_t1 group by a,b,c,d;\n\n--drop table t1 cascade;\n--drop table t2;\n--drop table t3;\n--drop table p_t1;\n\n--\n-- Test GROUP BY matching of join columns that are type-coerced due to USING\n--\n\n--Testcase 426:\ncreate foreign table t1(f1 int, f2 int) server sqlite_svr;\n--Testcase 427:\ncreate foreign table t2(f1 bigint, f2 oid) server sqlite_svr;\n\n--Testcase 428:\nselect f1 from t1 left join t2 using (f1) group by f1;\n--Testcase 429:\nselect f1 from t1 left join t2 using (f1) group by t1.f1;\n--Testcase 430:\nselect t1.f1 from t1 left join t2 using (f1) group by t1.f1;\n-- only this one should fail:\n--Testcase 431:\nselect t1.f1 from t1 left join t2 using (f1) group by f1;\n\n-- check case where we have to inject nullingrels into coerced join alias\nselect f1, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0)\ngroup by f1;\n\n-- same, for a RelabelType coercion\nselect f2, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0)\ngroup by f2;\n\n--Testcase 432:\ndrop foreign table t1, t2;\n--\n-- Test planner's selection of pathkeys for ORDER BY aggregates\n--\n\n-- Ensure we order by four.  This suits the most aggregate functions.\nexplain (costs off)\nselect sum(two order by two),max(four order by four), min(four order by four)\nfrom tenk1;\n\n-- Ensure we order by two.  It's a tie between ordering by two and four but\n-- we tiebreak on the aggregate's position.\nexplain (costs off)\nselect\n  sum(two order by two), max(four order by four),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Similar to above, but tiebreak on ordering by four\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Ensure this one orders by ten since there are 3 aggregates that require ten\n-- vs two that suit two and four.\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two),\n  sum(ten order by ten), min(ten order by ten), max(ten order by ten)\nfrom tenk1;\n\n-- Try a case involving a GROUP BY clause where the GROUP BY column is also\n-- part of an aggregate's ORDER BY clause.  We want a sort order that works\n-- for the GROUP BY along with the first and the last aggregate.\nexplain (costs off)\nselect\n  sum(unique1 order by ten, two), sum(unique1 order by four),\n  sum(unique1 order by two, four)\nfrom tenk1\ngroup by ten;\n\n-- Ensure that we never choose to provide presorted input to an Aggref with\n-- a volatile function in the ORDER BY / DISTINCT clause.  We want to ensure\n-- these sorts are performed individually rather than at the query level.\nexplain (costs off)\nselect\n  sum(unique1 order by two), sum(unique1 order by four),\n  sum(unique1 order by four, two), sum(unique1 order by two, random()),\n  sum(unique1 order by two, random(), random() + 1)\nfrom tenk1\ngroup by ten;\n\n-- Ensure consecutive NULLs are properly treated as distinct from each other\nselect array_agg(distinct val)\nfrom (select null as val from generate_series(1, 2)) g;\n\n-- Ensure no ordering is requested when enable_presorted_aggregate is off\nset enable_presorted_aggregate to off;\nexplain (costs off)\nselect sum(two order by two) from tenk1;\nreset enable_presorted_aggregate;\n\n--\n-- Test combinations of DISTINCT and/or ORDER BY\n--\nbegin;\n--Testcase 93:\ndelete from INT8_TBL;\n--Testcase 94:\ninsert into INT8_TBL values (1,4),(2,3),(3,1),(4,2);\n--Testcase 95:\nselect array_agg(q1 order by q2)\n  from INT8_TBL;\n--Testcase 96:\nselect array_agg(q1 order by q1)\n  from INT8_TBL;\n--Testcase 97:\nselect array_agg(q1 order by q1 desc)\n  from INT8_TBL;\n--Testcase 98:\nselect array_agg(q2 order by q1 desc)\n  from INT8_TBL;\n\n--Testcase 99:\ndelete from INT4_TBL;\n--Testcase 100:\ninsert into INT4_TBL values (1),(2),(1),(3),(null),(2);\n--Testcase 101:\nselect array_agg(distinct f1)\n  from INT4_TBL;\n--Testcase 102:\nselect array_agg(distinct f1 order by f1)\n  from INT4_TBL;\n--Testcase 103:\nselect array_agg(distinct f1 order by f1 desc)\n  from INT4_TBL;\n--Testcase 104:\nselect array_agg(distinct f1 order by f1 desc nulls last)\n  from INT4_TBL;\nrollback;\n\n-- multi-arg aggs, strict/nonstrict, distinct/order by\n--Testcase 433:\ncreate type aggtype as (a integer, b integer, c text);\n\n--Testcase 434:\ncreate function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql strict immutable;\n\n--Testcase 435:\ncreate function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql immutable;\n\n--Testcase 436:\ncreate aggregate aggfstr(integer,integer,text) (\n   sfunc = aggf_trans, stype = aggtype[],\n   initcond = '{}'\n);\n\n--Testcase 437:\ncreate aggregate aggfns(integer,integer,text) (\n   sfunc = aggfns_trans, stype = aggtype[], sspace = 10000,\n   initcond = '{}'\n);\n\nbegin;\n--Testcase 105:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 106:\nselect aggfstr(a,b,c) from multi_arg_agg;\n--Testcase 107:\nselect aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 108:\nselect aggfstr(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 109:\nselect aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 110:\nselect aggfstr(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 111:\nselect aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n-- test specific code paths\n\n--Testcase 112:\nselect aggfns(distinct a,a,c order by c using ~<~,a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 113:\nselect aggfns(distinct a,a,c order by c using ~<~) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 114:\nselect aggfns(distinct a,a,c order by a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 115:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- check node I/O via view creation and usage, also deparsing logic\n\n--Testcase 438:\ncreate view agg_view1 as\n  select aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 116:\nselect * from agg_view1;\n--Testcase 117:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 439:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 118:\nselect * from agg_view1;\n--Testcase 119:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 440:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 120:\nselect * from agg_view1;\n--Testcase 121:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 441:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by b+1) from multi_arg_agg;\n\n--Testcase 122:\nselect * from agg_view1;\n--Testcase 123:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 442:\ncreate or replace view agg_view1 as\n  select aggfns(a,a,c order by b) from multi_arg_agg;\n\n--Testcase 124:\nselect * from agg_view1;\n--Testcase 125:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 443:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by c using ~<~) from multi_arg_agg;\n\n--Testcase 126:\nselect * from agg_view1;\n--Testcase 127:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 444:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n--Testcase 128:\nselect * from agg_view1;\n--Testcase 129:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 445:\ndrop view agg_view1;\nrollback;\n\n-- incorrect DISTINCT usage errors\n--Testcase 130:\ninsert into multi_arg_agg values (1,1,'foo');\n--Testcase 131:\nselect aggfns(distinct a,b,c order by i) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 132:\nselect aggfns(distinct a,b,c order by a,b+1) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 133:\nselect aggfns(distinct a,b,c order by a,b,i,c) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 134:\nselect aggfns(distinct a,a,c order by a,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- string_agg tests\nbegin;\n--Testcase 135:\ndelete from varchar_tbl;\n--Testcase 136:\ninsert into varchar_tbl values ('aaaa'),('bbbb'),('cccc');\n--Testcase 137:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 138:\ndelete from varchar_tbl;\n--Testcase 139:\ninsert into varchar_tbl values ('aaaa'),(null),('bbbb'),('cccc');\n--Testcase 140:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 141:\ndelete from varchar_tbl;\n--Testcase 142:\ninsert into varchar_tbl values (null),(null),('bbbb'),('cccc');\n--Testcase 143:\nselect string_agg(f1,'AB') from varchar_tbl;\n\n--Testcase 144:\ndelete from varchar_tbl;\n--Testcase 145:\ninsert into varchar_tbl values (null),(null);\n--Testcase 146:\nselect string_agg(f1,',') from varchar_tbl;\nrollback;\n\n-- check some implicit casting cases, as per bug #5564\n\n--Testcase 147:\nselect string_agg(distinct f1, ',' order by f1) from varchar_tbl;  -- ok\n--Testcase 148:\nselect string_agg(distinct f1::text, ',' order by f1) from varchar_tbl;  -- not ok\n--Testcase 149:\nselect string_agg(distinct f1, ',' order by f1::text) from varchar_tbl;  -- not ok\n--Testcase 150:\nselect string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl;  -- ok\n\n-- string_agg bytea tests\n--Testcase 446:\ncreate foreign table bytea_test_table(v bytea) server sqlite_svr;\n\n--Testcase 151:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 152:\ninsert into bytea_test_table values(decode('ff','hex'));\n\n--Testcase 153:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 154:\ninsert into bytea_test_table values(decode('aa','hex'));\n\n--Testcase 155:\nselect string_agg(v, '') from bytea_test_table;\n--Testcase 156:\nselect string_agg(v, NULL) from bytea_test_table;\n--Testcase 157:\nselect string_agg(v, decode('ee', 'hex')) from bytea_test_table;\n\n--Testcase 447:\ndrop foreign table bytea_test_table;\n\n-- Test parallel string_agg and array_agg\ncreate foreign table pagg_test (x int, y int) server sqlite_svr;\ninsert into pagg_test\nselect (case x % 4 when 1 then null else x end), x % 10\nfrom generate_series(1,5000) x;\n\nset parallel_setup_cost TO 0;\nset parallel_tuple_cost TO 0;\nset parallel_leader_participation TO 0;\nset min_parallel_table_scan_size = 0;\nset bytea_output = 'escape';\nset max_parallel_workers_per_gather = 2;\n\n-- create a view as we otherwise have to repeat this query a few times.\ncreate view v_pagg_test AS\nselect\n\ty,\n\tmin(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct,\n\tmin(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct,\n\tmin(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct,\n\tmin(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct\nfrom (\n\tselect\n\t\ty,\n\t\tunnest(regexp_split_to_array(a1.t, ','))::int AS t,\n\t\tunnest(regexp_split_to_array(a1.b::text, ',')) AS b,\n\t\tunnest(a1.a) AS a,\n\t\tunnest(a1.aa) AS aa\n\tfrom (\n\t\tselect\n\t\t\ty,\n\t\t\tstring_agg(x::text, ',') AS t,\n\t\t\tstring_agg(x::text::bytea, ',') AS b,\n\t\t\tarray_agg(x) AS a,\n\t\t\tarray_agg(ARRAY[x]) AS aa\n\t\tfrom pagg_test\n\t\tgroup by y\n\t) a1\n) a2\ngroup by y;\n\n-- Ensure results are correct.\nselect * from v_pagg_test order by y;\n\n-- Ensure parallel aggregation is actually being used.\nexplain (costs off) select * from v_pagg_test order by y;\n\nset max_parallel_workers_per_gather = 0;\n\n-- Ensure results are the same without parallel aggregation.\nselect * from v_pagg_test order by y;\n\n-- Clean up\nreset max_parallel_workers_per_gather;\nreset bytea_output;\nreset min_parallel_table_scan_size;\nreset parallel_leader_participation;\nreset parallel_tuple_cost;\nreset parallel_setup_cost;\n\ndrop view v_pagg_test;\ndrop foreign table pagg_test;\n\n\n-- FILTER tests\n\n--Testcase 158:\nselect min(unique1) filter (where unique1 > 100) from tenk1;\n\n--Testcase 159:\nselect sum(1/ten) filter (where ten > 0) from tenk1;\n\n--Testcase 160:\nselect ten, sum(distinct four) filter (where four::text ~ '123') from onek a\ngroup by ten;\n\n--Testcase 161:\nselect ten, sum(distinct four) filter (where four > 10) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n--Testcase 448:\ncreate foreign table agg_t17(foo text, bar text) server sqlite_svr;\n--Testcase 449:\ninsert into agg_t17 values ('a', 'b');\n\n--Testcase 450:\nselect max(foo COLLATE \"C\") filter (where (bar collate \"POSIX\") > '0')\nfrom agg_t17;\n\ncreate foreign table agg_t170(v int) server sqlite_svr;\ninsert into agg_t170(v) values (1), (2), (3);\nselect any_value(v) filter (where v > 2) from agg_t170;\n\n-- outer reference in FILTER (PostgreSQL extension)\n--Testcase 451:\ncreate foreign table agg_t18 (inner_c int) server sqlite_svr;\n--Testcase 452:\ncreate foreign table agg_t19 (outer_c int) server sqlite_svr;\n--Testcase 453:\ninsert into agg_t18 values (1);\n--Testcase 454:\ninsert into agg_t19 values (2), (3);\n\n--Testcase 455:\nselect (select count(*)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n--Testcase 456:\nselect (select count(*) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- outer query is aggregation query\n--Testcase 457:\nselect (select count(inner_c) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n\n--Testcase 162:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1))\n     filter (where o.unique1 < 10))\nfrom tenk1 o;\t\t\t\t\t-- outer query is aggregation query\n\n-- subquery in FILTER clause (PostgreSQL extension)\n--Testcase 163:\nselect sum(unique1) FILTER (WHERE\n  unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1;\n\n-- exercise lots of aggregate parts with FILTER\nbegin;\n--Testcase 164:\ndelete from multi_arg_agg;\n--Testcase 165:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 166:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) from multi_arg_agg, generate_series(1,2) i;\nrollback;\n\n-- check handling of bare boolean Var in FILTER\n--Testcase 672:\nselect max(0) filter (where b1) from bool_test;\n--Testcase 673:\nselect (select max(0) filter (where b1)) from bool_test;\n\n-- check for correct detection of nested-aggregate errors in FILTER\n--Testcase 674:\nselect max(unique1) filter (where sum(ten) > 0) from tenk1;\n--Testcase 675:\nselect (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1;\n--Testcase 676:\nselect max(unique1) filter (where bool_or(ten > 0)) from tenk1;\n--Testcase 677:\nselect (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1;\n\n-- ordered-set aggregates\n\nbegin;\n--Testcase 167:\ndelete from FLOAT8_TBL;\n--Testcase 168:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 169:\nselect f1, percentile_cont(f1) within group (order by x::float8)\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 170:\ndelete from FLOAT8_TBL;\n--Testcase 171:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 172:\nselect f1, percentile_cont(f1 order by f1) within group (order by x)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 173:\ndelete from FLOAT8_TBL;\n--Testcase 174:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 175:\nselect f1, sum() within group (order by x::float8)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 176:\ndelete from FLOAT8_TBL;\n--Testcase 177:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 178:\nselect f1, percentile_cont(f1,f1)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\n--Testcase 179:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 693:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10) from aggtest;\n--Testcase 180:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 694:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10), sum(b)::numeric(10,3) from aggtest;\n--Testcase 181:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 695:\nselect percentile_cont(0.5) within group (order by thousand) from tenk1;\n--Testcase 182:\nselect percentile_disc(0.5) within group (order by thousand) from tenk1;\n\nbegin;\n--Testcase 183:\ndelete from INT4_TBL;\n--Testcase 184:\ninsert into INT4_TBL values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 185:\nselect rank(3) within group (order by f1) from INT4_TBL;\n--Testcase 186:\nselect cume_dist(3) within group (order by f1) from INT4_TBL;\n--Testcase 187:\ninsert into INT4_TBL values (5);\n--Testcase 458:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 696:\nselect (percent_rank(3) within group (order by f1))::numeric(20,10) from INT4_TBL;\n--Testcase 459:\ndelete from INT4_TBL where f1 = 5;\n--Testcase 188:\nselect dense_rank(3) within group (order by f1) from INT4_TBL;\nrollback;\n\n--Testcase 189:\nselect percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 190:\nselect percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 191:\nselect percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand)\nfrom tenk1;\n\n--Testcase 460:\ncreate foreign table agg_t21 (x int) server sqlite_svr;\nbegin;\n--Testcase 248:\ninsert into agg_t21 select * from generate_series(1,6);\n--Testcase 249:\nselect percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x)\nfrom agg_t21;\nrollback;\n\n--Testcase 192:\nselect ten, mode() within group (order by string4) from tenk1 group by ten;\n\n--Testcase 461:\ncreate foreign table agg_t20 (x text) server sqlite_svr;\nbegin;\n--Testcase 462:\ninsert into agg_t20 values (unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]));\n--Testcase 463:\nselect percentile_disc(array[0.25,0.5,0.75]) within group (order by x) from agg_t20;\nrollback;\n\n-- check collation propagates up in suitable cases:\nbegin;\n--Testcase 464:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 465:\nselect pg_collation_for(percentile_disc(1) within group (order by x collate \"POSIX\")) from agg_t20;\nrollback;\n\n-- ordered-set aggs created with CREATE AGGREGATE\n--Testcase 466:\ncreate aggregate my_percentile_disc(float8 ORDER BY anyelement) (\n  stype = internal,\n  sfunc = ordered_set_transition,\n  finalfunc = percentile_disc_final,\n  finalfunc_extra = true,\n  finalfunc_modify = read_write\n);\n\n--Testcase 467:\ncreate aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\") (\n  stype = internal,\n  sfunc = ordered_set_transition_multi,\n  finalfunc = rank_final,\n  finalfunc_extra = true,\n  hypothetical\n);\n\n--Testcase 633:\nalter aggregate my_percentile_disc(float8 ORDER BY anyelement)\n  rename to test_percentile_disc;\n  \n--Testcase 634:\nalter aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\")\n  rename to test_rank;\n\nbegin;\n--Testcase 468:\ninsert into agg_t21 values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 469:\nselect test_rank(3) within group (order by x) from agg_t21;\nrollback;\n \n--Testcase 193:\nselect test_percentile_disc(0.5) within group (order by thousand) from tenk1;\n\n-- ordered-set aggs can't use ungrouped vars in direct args:\nbegin;\n--Testcase 470:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 471:\nselect rank(x) within group (order by x) from agg_t21;\nrollback;\n\n-- outer-level agg can't use a grouped arg of a lower level, either:\nbegin;\n--Testcase 472:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 473:\nselect array(select percentile_disc(a) within group (order by x)\n               from (values (0.3),(0.7)) v(a) group by a)\n  from agg_t21;\nrollback;\n\n-- agg in the direct args is a grouping violation, too:\nbegin;\n--Testcase 474:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 475:\nselect rank(sum(x)) within group (order by x) from agg_t21;\nrollback;\n\n-- hypothetical-set type unification and argument-count failures:\nbegin;\n--Testcase 264:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 265:\nselect rank(3) within group (order by x) from agg_t20;\nrollback;\n\n--Testcase 194:\nselect rank(3) within group (order by stringu1,stringu2) from tenk1;\n\nbegin;\n--Testcase 476:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 477:\nselect rank('fred') within group (order by x) from agg_t21;\nrollback;\n\nbegin;\n--Testcase 478:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 479:\nselect rank('adam'::text collate \"C\") within group (order by x collate \"POSIX\")\n  from agg_t20;\nrollback;\n\n-- hypothetical-set type unification successes:\nbegin;\n--Testcase 480:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 481:\nselect rank('adam'::varchar) within group (order by x) from agg_t20;\nrollback;\n\nbegin;\n--Testcase 482:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 483:\nselect rank('3') within group (order by x) from agg_t21;\nrollback;\n\n-- divide by zero check\nbegin;\n--Testcase 484:\ninsert into agg_t21 select * from generate_series(1,0);\n--Testcase 485:\nselect percent_rank(0) within group (order by x) from agg_t21;\nrollback;\n\n-- deparse and multiple features:\n--Testcase 486:\ncreate view aggordview1 as\nselect ten,\n       percentile_disc(0.5) within group (order by thousand) as p50,\n       percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px,\n       rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred)\n  from tenk1\n group by ten order by ten;\n\n--Testcase 196:\nselect pg_get_viewdef('aggordview1');\n--Testcase 197:\nselect * from aggordview1 order by ten;\n--Testcase 487:\ndrop view aggordview1;\n\n-- variadic aggregates\n--Testcase 488:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 489:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n--Testcase 490:\ncreate function cleast_accum(anycompatible, variadic anycompatiblearray)\nreturns anycompatible language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 491:\ncreate aggregate cleast_agg(variadic items anycompatiblearray) (\n  stype = anycompatible, sfunc = cleast_accum);\n\n--Testcase 198:\nselect least_agg(q1,q2) from int8_tbl;\n--Testcase 199:\nselect least_agg(variadic array[q1,q2]) from int8_tbl;\n\n--Testcase 492:\nselect cleast_agg(q1,q2) from int8_tbl;\n--Testcase 493:\nselect cleast_agg(4.5,f1) from int4_tbl;\n--Testcase 494:\nselect cleast_agg(variadic array[4.5,f1]) from int4_tbl;\n--Testcase 495:\nselect pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl;\n\n-- test aggregates with common transition functions share the same states\n--Testcase 496:\ncreate foreign table agg_t10(one int, id int options (key 'true')) server sqlite_svr;\n--Testcase 497:\ncreate foreign table agg_t11(one int, two int, id int options (key 'true')) server sqlite_svr;\n--Testcase 498:\ncreate foreign table agg_t12(a int, id int options (key 'true')) server sqlite_svr;\nbegin work;\n\n--Testcase 499:\ncreate type avg_state as (total bigint, count bigint);\n\n--Testcase 500:\ncreate or replace function avg_transfn(state avg_state, n int) returns avg_state as\n$$\ndeclare new_state avg_state;\nbegin\n\traise notice 'avg_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state.total := n;\n\t\t\tnew_state.count := 1;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate.total := state.total + n;\n\t\tstate.count := state.count + 1;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 501:\ncreate function avg_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total / state.count;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 502:\ncreate function sum_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 503:\ncreate aggregate my_avg(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn\n);\n\n--Testcase 504:\ncreate aggregate my_sum(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn\n);\n\n-- aggregate state should be shared as aggs are the same.\n--Testcase 505:\ndelete from agg_t10;\n--Testcase 506:\ninsert into agg_t10 values (1), (3);\n--Testcase 507:\nselect my_avg(one),my_avg(one) from agg_t10;\n\n-- aggregate state should be shared as transfn is the same for both aggs.\n--Testcase 508:\nselect my_avg(one),my_sum(one) from agg_t10;\n\n-- same as previous one, but with DISTINCT, which requires sorting the input.\n--Testcase 509:\ndelete from agg_t10;\n--Testcase 510:\ninsert into agg_t10 values (1), (3), (1);\n--Testcase 511:\nselect my_avg(distinct one),my_sum(distinct one) from agg_t10;\n\n-- shouldn't share states due to the distinctness not matching.\n--Testcase 512:\ndelete from agg_t10;\n--Testcase 513:\ninsert into agg_t10 values (1), (3);\n--Testcase 514:\nselect my_avg(distinct one),my_sum(one) from agg_t10;\n\n-- shouldn't share states due to the filter clause not matching.\n--Testcase 515:\nselect my_avg(one) filter (where one > 1),my_sum(one) from agg_t10;\n\n-- this should not share the state due to different input columns.\n--Testcase 516:\ndelete from agg_t11;\n--Testcase 517:\ninsert into agg_t11 values (1,2),(3,4);\n--Testcase 518:\nselect my_avg(one),my_sum(two) from agg_t11;\n\n-- exercise cases where OSAs share state\n--Testcase 519:\ndelete from agg_t12;\n--Testcase 520:\ninsert into agg_t12 values (1), (3), (5), (7);\n--Testcase 521:\nselect\n  percentile_cont(0.5) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n--Testcase 522:\nselect\n  percentile_cont(0.25) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n-- these can't share state currently\n--Testcase 523:\nselect\n  rank(4) within group (order by a),\n  dense_rank(4) within group (order by a)\nfrom agg_t12;\n\n-- test that aggs with the same sfunc and initcond share the same agg state\n--Testcase 524:\ncreate aggregate my_sum_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 525:\ncreate aggregate my_avg_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 526:\ncreate aggregate my_avg_init2(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(4,0)'\n);\n\n-- state should be shared if INITCONDs are matching\n--Testcase 527:\ndelete from agg_t10;\n--Testcase 528:\ninsert into agg_t10 values (1), (3);\n--Testcase 529:\nselect my_sum_init(one),my_avg_init(one) from agg_t10;\n\n\n-- Varying INITCONDs should cause the states not to be shared.\n--Testcase 530:\nselect my_sum_init(one),my_avg_init2(one) from agg_t10;\n\nrollback;\n\n-- test aggregate state sharing to ensure it works if one aggregate has a\n-- finalfn and the other one has none.\nbegin work;\n\n--Testcase 531:\ncreate or replace function sum_transfn(state int4, n int4) returns int4 as\n$$\ndeclare new_state int4;\nbegin\n\traise notice 'sum_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state := n;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate := state + n;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 532:\ncreate function halfsum_finalfn(state int4) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state / 2;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 533:\ncreate aggregate my_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn\n);\n\n--Testcase 534:\ncreate aggregate my_half_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn,\n   finalfunc = halfsum_finalfn\n);\n\n-- Agg state should be shared even though my_sum has no finalfn\n--Testcase 535:\ndelete from agg_t10;\n--Testcase 536:\ninsert into agg_t10 values (1), (2), (3), (4);\n--Testcase 537:\nselect my_sum(one),my_half_sum(one) from agg_t10;\n\nrollback;\n\n\n-- test that the aggregate transition logic correctly handles\n-- transition / combine functions returning NULL\n\n-- First test the case of a normal transition function returning NULL\nBEGIN;\n--Testcase 538:\nCREATE FUNCTION balkifnull(int8, int4)\nRETURNS int8\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 539:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = balkifnull(int8, int4),\n    STYPE = int8,\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n--Testcase 200:\nSELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- Secondly test the case of a parallel aggregate combiner function\n-- returning NULL. For that use normal transition function, but a\n-- combiner function returning NULL.\nBEGIN;\n--Testcase 540:\nCREATE FUNCTION balkifnull(int8, int8)\nRETURNS int8\nPARALLEL SAFE\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 541:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = int4_sum(int8, int4),\n    STYPE = int8,\n    COMBINEFUNC = balkifnull(int8, int8),\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n-- force use of parallelism\n-- Skip this test, cannot alter foreign table tenk1\n-- ALTER FOREIGN TABLE tenk1 set (parallel_workers = 4);\n-- SET LOCAL parallel_setup_cost=0;\n-- SET LOCAL max_parallel_workers_per_gather=4;\n\n-- EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1;\n-- SELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- test multiple usage of an aggregate whose finalfn returns a R/W datum\nBEGIN;\n\nCREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray\nLANGUAGE plpgsql IMMUTABLE AS $$\nBEGIN\n    RETURN array_fill(y[1], ARRAY[4]);\nEND;\n$$;\n\nCREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nDECLARE\n    res x%TYPE;\nBEGIN\n    -- assignment is essential for this test, it expands the array to R/W\n    res := array_fill(x[1], ARRAY[4]);\n    RETURN res;\nEND;\n$$;\n\nCREATE AGGREGATE rwagg(anyarray) (\n    STYPE = anyarray,\n    SFUNC = rwagg_sfunc,\n    FINALFUNC = rwagg_finalfunc\n);\n\nCREATE FUNCTION eatarray(x real[]) RETURNS real[]\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nBEGIN\n    x[1] := x[1] + 1;\n    RETURN x;\nEND;\n$$;\n\nCREATE FOREIGN TABLE float_tb(f real) SERVER sqlite_svr;\nINSERT INTO float_tb(f)  VALUES (1.0);\nSELECT eatarray(rwagg(ARRAY[f::real])), eatarray(rwagg(ARRAY[f::real])) FROM float_tb;\n\nROLLBACK;\n\n\n-- test coverage for aggregate combine/serial/deserial functions\nBEGIN;\n\n--Testcase 635:\nSET parallel_setup_cost = 0;\n--Testcase 636:\nSET parallel_tuple_cost = 0;\n--Testcase 637:\nSET min_parallel_table_scan_size = 0;\n--Testcase 638:\nSET max_parallel_workers_per_gather = 4;\n--Testcase 639:\nSET parallel_leader_participation = off;\n--Testcase 640:\nSET enable_indexonlyscan = off;\n\n-- variance(int4) covers numeric_poly_combine\n-- sum(int8) covers int8_avg_combine\n-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg\n--Testcase 542:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 543:\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n-- variance(int8) covers numeric_combine\n-- avg(numeric) covers numeric_avg_combine\n--Testcase 544:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 545:\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\nROLLBACK;\n\n-- test coverage for dense_rank\n--Testcase 546:\ncreate foreign table agg_t13(x int, id int options (key 'true')) server sqlite_svr;\n--Testcase 547:\ninsert into agg_t13 values (1),(1),(2),(2),(3),(3);\n--Testcase 548:\nSELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM agg_t13 GROUP BY (x) ORDER BY 1;\n--Testcase 549:\ndelete from agg_t13;\n\n\n-- Ensure that the STRICT checks for aggregates does not take NULLness\n-- of ORDER BY columns into account. See bug report around\n-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz\n--Testcase 550:\ncreate foreign table agg_t14(x int, y int, id int options (key 'true')) server sqlite_svr;\n--Testcase 551:\ninsert into agg_t14 values (1, NULL), (1, 2);\n--Testcase 552:\nSELECT min(x ORDER BY y) FROM agg_t14;\n--Testcase 553:\nSELECT min(x ORDER BY y) FROM agg_t14;\n\n-- check collation-sensitive matching between grouping expressions\nbegin;\n--Testcase 554:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 555:\nselect x||'a', case x||'a' when 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\nbegin;\n--Testcase 556:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 557:\nselect x||'a', case when x||'a' = 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\n-- Make sure that generation of HashAggregate for uniqification purposes\n-- does not lead to array overflow due to unexpected duplicate hash keys\n-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com\n--Testcase 641:\nset enable_memoize to off;\n--Testcase 558:\nexplain (costs off)\n  select 1 from tenk1\n   where (hundred, thousand) in (select twothousand, twothousand from onek);\n--Testcase 642:\nreset enable_memoize;\n\n--\n-- Hash Aggregation Spill tests\n--\n\n--Testcase 643:\nset enable_sort=false;\n--Testcase 644:\nset work_mem='64kB';\n\n--Testcase 559:\nselect unique1, count(*), sum(twothousand) from tenk1\ngroup by unique1\nhaving sum(fivethous) > 4975\norder by sum(twothousand);\n\n--Testcase 645:\nset work_mem to default;\n--Testcase 646:\nset enable_sort to default;\n\n--\n-- Compare results between plans using sorting and plans using hash\n-- aggregation. Force spilling in both cases by setting work_mem low.\n--\n\n--Testcase 647:\nset work_mem='64kB';\n\n--Testcase 560:\ncreate foreign table agg_data_2k(g int, id int options (key 'true')) server sqlite_svr;\n--Testcase 561:\ncreate foreign table agg_data_20k(g int, id int options (key 'true')) server sqlite_svr;\n\n--Testcase 562:\ncreate foreign table agg_group_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 563:\ncreate foreign table agg_group_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 564:\ncreate foreign table agg_group_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 565:\ncreate foreign table agg_group_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n--Testcase 566:\ncreate foreign table agg_hash_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 567:\ncreate foreign table agg_hash_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 568:\ncreate foreign table agg_hash_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 569:\ncreate foreign table agg_hash_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n\n--Testcase 570:\ninsert into agg_data_2k select g from generate_series(0, 1999) g;\n--analyze agg_data_2k;\n\n--Testcase 571:\ninsert into agg_data_20k select g from generate_series(0, 19999) g;\n--analyze agg_data_20k;\n\n-- Produce results with sorting.\n\n--Testcase 648:\nset enable_hashagg = false;\n\n--Testcase 649:\nset jit_above_cost = 0;\n\n--Testcase 572:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 573:\ninsert into agg_group_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 574:\ninsert into agg_group_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 650:\nset jit_above_cost to default;\n\n--Testcase 575:\ninsert into agg_group_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 576:\ninsert into agg_group_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n-- Produce results with hash aggregation\n\n--Testcase 651:\nset enable_hashagg = true;\n--Testcase 652:\nset enable_sort = false;\n\n--Testcase 653:\nset jit_above_cost = 0;\n\n--Testcase 577:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 578:\ninsert into agg_hash_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 579:\ninsert into agg_hash_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 654:\nset jit_above_cost to default;\n\n--Testcase 580:\ninsert into agg_hash_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 581:\ninsert into agg_hash_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 655:\nset enable_sort = true;\n--Testcase 656:\nset work_mem to default;\n\n-- Compare group aggregation results to hash aggregation results\n\n--Testcase 582:\n(select * from agg_hash_1 except select * from agg_group_1)\n  union all\n(select * from agg_group_1 except select * from agg_hash_1);\n\n--Testcase 583:\n(select * from agg_hash_2 except select * from agg_group_2)\n  union all\n(select * from agg_group_2 except select * from agg_hash_2);\n\n--Testcase 584:\n(select * from agg_hash_3 except select * from agg_group_3)\n  union all\n(select * from agg_group_3 except select * from agg_hash_3);\n\n--Testcase 585:\n(select * from agg_hash_4 except select * from agg_group_4)\n  union all\n(select * from agg_group_4 except select * from agg_hash_4);\n\n--Testcase 712:\nDELETE FROM INT4_TBL;\n--Testcase 713:\nDELETE FROM INT8_TBL;\n--Testcase 714:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 586:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 587:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/encodings.sql",
    "content": "-- tests for PR #76 github\n-- see https://www.postgresql.org/docs/current/multibyte.html\n-- EUC_CN, not tested\n-- EUC_JP\n-- EUC_JIS_2004, not tested\n-- EUC_KR\n-- EUC_TW, not tested\n-- ISO_8859_5\n-- ISO_8859_6\n-- ISO_8859_7\n-- ISO_8859_8\n-- KOI8R, not tested\n-- KOI8U, not tested\n-- LATIN1\n-- LATIN2\n-- LATIN3\n-- LATIN4\n-- LATIN5\n-- LATIN6\n-- LATIN7\n-- LATIN8\n-- LATIN9\n-- LATIN10\n-- MULE_INTERNAL, not tested\n-- SQL_ASCII\n-- WIN866, not tested\n-- WIN874, not tested\n-- WIN1250\n-- WIN1251\n-- WIN1252\n-- WIN1253\n-- WIN1254\n-- WIN1255\n-- WIN1256\n-- WIN1257\n-- WIN1258, not tested\n\n-- ================\n-- check all data in UTF8\n-- ================\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr;\nSELECT * FROM \"Unicode data\";\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\n-- euc_jp\nCREATE DATABASE \"contrib_regression_EUC_JP\" ENCODING EUC_JP LC_CTYPE='ja_JP.eucjp' LC_COLLATE='ja_JP.eucjp' template template0;\n\\connect \"contrib_regression_EUC_JP\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_JP\";\n\n-- ko_KR.euckr\nCREATE DATABASE \"contrib_regression_EUC_KR\" ENCODING EUC_KR LC_CTYPE='ko_KR.euckr' LC_COLLATE='ko_KR.euckr' template template0;\n\\connect \"contrib_regression_EUC_KR\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_KR\";\n\n-- ISO_8859_5\nCREATE DATABASE \"contrib_regression_ISO_8859_5\" ENCODING ISO_8859_5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_5\";\n\n-- ISO_8859_6\nCREATE DATABASE \"contrib_regression_ISO_8859_6\" ENCODING ISO_8859_6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_6\";\n\n-- ISO_8859_7\nCREATE DATABASE \"contrib_regression_ISO_8859_7\" ENCODING ISO_8859_7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_7\";\n\n-- ISO_8859_8\nCREATE DATABASE \"contrib_regression_ISO_8859_8\" ENCODING ISO_8859_8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_8\";\n\n-- ISO_8859_9\nCREATE DATABASE \"contrib_regression_ISO_8859_9\" ENCODING ISO_8859_9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_9\";\n\n-- LATIN1\nCREATE DATABASE \"contrib_regression_LATIN1\" ENCODING LATIN1 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN1\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN1\";\n\n-- LATIN2\nCREATE DATABASE \"contrib_regression_LATIN2\" ENCODING LATIN2 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN2\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN2\";\n\n-- LATIN3\nCREATE DATABASE \"contrib_regression_LATIN3\" ENCODING LATIN3 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN3\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN3\";\n\n-- LATIN4\nCREATE DATABASE \"contrib_regression_LATIN4\" ENCODING LATIN4 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN4\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN4\";\n\n-- LATIN5\nCREATE DATABASE \"contrib_regression_LATIN5\" ENCODING LATIN5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN5\";\n\n-- LATIN6\nCREATE DATABASE \"contrib_regression_LATIN6\" ENCODING LATIN6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN6\";\n\n-- LATIN7\nCREATE DATABASE \"contrib_regression_LATIN7\" ENCODING LATIN7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN7\";\n\n-- LATIN8\nCREATE DATABASE \"contrib_regression_LATIN8\" ENCODING LATIN8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN8\";\n\n-- LATIN9\nCREATE DATABASE \"contrib_regression_LATIN9\" ENCODING LATIN9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN9\";\n\n-- LATIN10\nCREATE DATABASE \"contrib_regression_LATIN10\" ENCODING LATIN10 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN10\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN10\";\n\n-- cp1250\nCREATE DATABASE \"contrib_regression_WIN1250\" ENCODING WIN1250 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1250\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1250\";\n\n-- cp1251\nCREATE DATABASE \"contrib_regression_WIN1251\" ENCODING WIN1251 LC_CTYPE='bg_BG' LC_COLLATE='bg_BG' template template0;\n\\connect \"contrib_regression_WIN1251\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1251\";\n\n-- cp1252\nCREATE DATABASE \"contrib_regression_WIN1252\" ENCODING WIN1252 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1252\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1252\";\n\n-- cp1253\nCREATE DATABASE \"contrib_regression_WIN1253\" ENCODING WIN1253 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1253\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1253\";\n\n-- cp1254\nCREATE DATABASE \"contrib_regression_WIN1254\" ENCODING WIN1254 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1254\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1254\";\n\n-- cp1255\nCREATE DATABASE \"contrib_regression_WIN1255\" ENCODING WIN1255 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1255\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1255\";\n\n-- cp1256\nCREATE DATABASE \"contrib_regression_WIN1256\" ENCODING WIN1256 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1256\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1256\";\n\n-- cp1257\nCREATE DATABASE \"contrib_regression_WIN1257\" ENCODING WIN1257 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1257\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1257\";\n\n-- SQL_ASCII\nCREATE DATABASE \"contrib_regression_SQL_ASCII\" ENCODING SQL_ASCII LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_SQL_ASCII\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_SQL_ASCII\";\n"
  },
  {
    "path": "sql/15.7/extra/insert.sql",
    "content": "--\n-- insert with DEFAULT in the target_list\n--\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 18:\nCREATE FOREIGN TABLE inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing') SERVER sqlite_svr;\n--Testcase 1:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);\n--Testcase 2:\ninsert into inserttest01 (col2, col3) values (3, DEFAULT);\n--Testcase 3:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, 5, DEFAULT);\n--Testcase 4:\ninsert into inserttest01 values (DEFAULT, 5, 'test');\n--Testcase 5:\ninsert into inserttest01 values (DEFAULT, 7);\n\n--Testcase 6:\nselect * from inserttest01;\n\n--\n-- insert with similar expression / target_list values (all fail)\n--\n--Testcase 7:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT);\n--Testcase 8:\ninsert into inserttest01 (col1, col2, col3) values (1, 2);\n--Testcase 9:\ninsert into inserttest01 (col1) values (1, 2);\n--Testcase 10:\ninsert into inserttest01 (col1) values (DEFAULT, DEFAULT);\n\n--Testcase 11:\nselect * from inserttest01;\n\n--\n-- VALUES test\n--\n--Testcase 12:\ninsert into inserttest01 values(10, 20, '40'), (-1, 2, DEFAULT),\n    ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');\n\n--Testcase 13:\nselect * from inserttest01;\n\n--\n-- TOASTed value test\n--\n--Testcase 14:\ninsert into inserttest01 values(30, 50, repeat('x', 10000));\n\n--Testcase 15:\nselect col1, col2, char_length(col3) from inserttest01;\n\n--\n-- tuple larger than fillfactor\n-- foreign table does not support fillfactor\n--\n-- CREATE TABLE large_tuple_test (a int, b text) WITH (fillfactor = 10);\n-- ALTER TABLE large_tuple_test ALTER COLUMN b SET STORAGE plain;\n\n-- -- create page w/ free space in range [nearlyEmptyFreeSpace, MaxHeapTupleSize)\n-- INSERT INTO large_tuple_test (select 1, NULL);\n\n-- -- should still fit on the page\n-- INSERT INTO large_tuple_test (select 2, repeat('a', 1000));\n-- SELECT pg_size_pretty(pg_relation_size('large_tuple_test'::regclass, 'main'));\n\n-- -- add small record to the second page\n-- INSERT INTO large_tuple_test (select 3, NULL);\n\n-- -- now this tuple won't fit on the second page, but the insert should\n-- -- still succeed by extending the relation\n-- INSERT INTO large_tuple_test (select 4, repeat('a', 8126));\n\n-- DROP TABLE large_tuple_test;\n\n-- skip, sqlite fdw does not support customized type\n/*\n-- check indirection (field/array assignment), cf bug #14265\n--\n-- these tests are aware that transformInsertStmt has 3 separate code paths\n--\n\ncreate type insert_test_type as (if1 int, if2 text[]);\n\ncreate table inserttest (f1 int, f2 int[],\n                         f3 insert_test_type, f4 insert_test_type[]);\n\ninsert into inserttest (f2[1], f2[2]) values (1,2);\ninsert into inserttest (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttest (f2[1], f2[2]) select 7,8;\ninsert into inserttest (f2[1], f2[2]) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttest (f3.if1, f3.if2) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer';\n\nselect * from inserttest;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttest (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttest;\ndrop type insert_test_type;\n\n-- direct partition inserts should check partition bound constraint\ncreate table range_parted (\n\ta text,\n\tb int\n) partition by range (a, (b+0));\n\n-- no partitions, so fail\ninsert into range_parted values ('a', 11);\n\ncreate table part1 partition of range_parted for values from ('a', 1) to ('a', 10);\ncreate table part2 partition of range_parted for values from ('a', 10) to ('a', 20);\ncreate table part3 partition of range_parted for values from ('b', 1) to ('b', 10);\ncreate table part4 partition of range_parted for values from ('b', 10) to ('b', 20);\n\n-- fail\ninsert into part1 values ('a', 11);\ninsert into part1 values ('b', 1);\n-- ok\ninsert into part1 values ('a', 1);\n-- fail\ninsert into part4 values ('b', 21);\ninsert into part4 values ('a', 10);\n-- ok\ninsert into part4 values ('b', 10);\n\n-- fail (partition key a has a NOT NULL constraint)\ninsert into part1 values (null);\n-- fail (expression key (b+0) cannot be null either)\ninsert into part1 values (1);\n\ncreate table list_parted (\n\ta text,\n\tb int\n) partition by list (lower(a));\ncreate table part_aa_bb partition of list_parted FOR VALUES IN ('aa', 'bb');\ncreate table part_cc_dd partition of list_parted FOR VALUES IN ('cc', 'dd');\ncreate table part_null partition of list_parted FOR VALUES IN (null);\n\n-- fail\ninsert into part_aa_bb values ('cc', 1);\ninsert into part_aa_bb values ('AAa', 1);\ninsert into part_aa_bb values (null);\n-- ok\ninsert into part_cc_dd values ('cC', 1);\ninsert into part_null values (null, 0);\n\n-- check in case of multi-level partitioned table\ncreate table part_ee_ff partition of list_parted for values in ('ee', 'ff') partition by range (b);\ncreate table part_ee_ff1 partition of part_ee_ff for values from (1) to (10);\ncreate table part_ee_ff2 partition of part_ee_ff for values from (10) to (20);\n\n-- test default partition\ncreate table part_default partition of list_parted default;\n-- Negative test: a row, which would fit in other partition, does not fit\n-- default partition, even when inserted directly\ninsert into part_default values ('aa', 2);\ninsert into part_default values (null, 2);\n-- ok\ninsert into part_default values ('Zz', 2);\n-- test if default partition works as expected for multi-level partitioned\n-- table as well as when default partition itself is further partitioned\ndrop table part_default;\ncreate table part_xx_yy partition of list_parted for values in ('xx', 'yy') partition by list (a);\ncreate table part_xx_yy_p1 partition of part_xx_yy for values in ('xx');\ncreate table part_xx_yy_defpart partition of part_xx_yy default;\ncreate table part_default partition of list_parted default partition by range(b);\ncreate table part_default_p1 partition of part_default for values from (20) to (30);\ncreate table part_default_p2 partition of part_default for values from (30) to (40);\n\n-- fail\ninsert into part_ee_ff1 values ('EE', 11);\ninsert into part_default_p2 values ('gg', 43);\n-- fail (even the parent's, ie, part_ee_ff's partition constraint applies)\ninsert into part_ee_ff1 values ('cc', 1);\ninsert into part_default values ('gg', 43);\n-- ok\ninsert into part_ee_ff1 values ('ff', 1);\ninsert into part_ee_ff2 values ('ff', 11);\ninsert into part_default_p1 values ('cd', 25);\ninsert into part_default_p2 values ('de', 35);\ninsert into list_parted values ('ab', 21);\ninsert into list_parted values ('xx', 1);\ninsert into list_parted values ('yy', 2);\nselect tableoid::regclass, * from list_parted;\n\n-- Check tuple routing for partitioned tables\n\n-- fail\ninsert into range_parted values ('a', 0);\n-- ok\ninsert into range_parted values ('a', 1);\ninsert into range_parted values ('a', 10);\n-- fail\ninsert into range_parted values ('a', 20);\n-- ok\ninsert into range_parted values ('b', 1);\ninsert into range_parted values ('b', 10);\n-- fail (partition key (b+0) is null)\ninsert into range_parted values ('a');\n\n-- Check default partition\ncreate table part_def partition of range_parted default;\n-- fail\ninsert into part_def values ('b', 10);\n-- ok\ninsert into part_def values ('c', 10);\ninsert into range_parted values (null, null);\ninsert into range_parted values ('a', null);\ninsert into range_parted values (null, 19);\ninsert into range_parted values ('b', 20);\n\nselect tableoid::regclass, * from range_parted;\n-- ok\ninsert into list_parted values (null, 1);\ninsert into list_parted (a) values ('aA');\n-- fail (partition of part_ee_ff not found in both cases)\ninsert into list_parted values ('EE', 0);\ninsert into part_ee_ff values ('EE', 0);\n-- ok\ninsert into list_parted values ('EE', 1);\ninsert into part_ee_ff values ('EE', 10);\nselect tableoid::regclass, * from list_parted;\n\n-- some more tests to exercise tuple-routing with multi-level partitioning\ncreate table part_gg partition of list_parted for values in ('gg') partition by range (b);\ncreate table part_gg1 partition of part_gg for values from (minvalue) to (1);\ncreate table part_gg2 partition of part_gg for values from (1) to (10) partition by range (b);\ncreate table part_gg2_1 partition of part_gg2 for values from (1) to (5);\ncreate table part_gg2_2 partition of part_gg2 for values from (5) to (10);\n\ncreate table part_ee_ff3 partition of part_ee_ff for values from (20) to (30) partition by range (b);\ncreate table part_ee_ff3_1 partition of part_ee_ff3 for values from (20) to (25);\ncreate table part_ee_ff3_2 partition of part_ee_ff3 for values from (25) to (30);\n\ntruncate list_parted;\ninsert into list_parted values ('aa'), ('cc');\ninsert into list_parted select 'Ff', s.a from generate_series(1, 29) s(a);\ninsert into list_parted select 'gg', s.a from generate_series(1, 9) s(a);\ninsert into list_parted (b) values (1);\nselect tableoid::regclass::text, a, min(b) as min_b, max(b) as max_b from list_parted group by 1, 2 order by 1;\n\n-- direct partition inserts should check hash partition bound constraint\n\ncreate table hash_parted (\n\ta int\n) partition by hash (a part_test_int4_ops);\ncreate table hpart0 partition of hash_parted for values with (modulus 4, remainder 0);\ncreate table hpart1 partition of hash_parted for values with (modulus 4, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 4, remainder 3);\n\ninsert into hash_parted values(generate_series(1,10));\n\n-- direct insert of values divisible by 4 - ok;\ninsert into hpart0 values(12),(16);\n-- fail;\ninsert into hpart0 values(11);\n-- 11 % 4 -> 3 remainder i.e. valid data for hpart3 partition\ninsert into hpart3 values(11);\n\n-- view data\nselect tableoid::regclass as part, a, a%4 as \"remainder = a % 4\"\nfrom hash_parted order by part;\n\n-- test \\d+ output on a table which has both partitioned and unpartitioned\n-- partitions\n\\d+ list_parted\n\n-- cleanup\ndrop table range_parted, list_parted;\ndrop table hash_parted;\n\n-- test that a default partition added as the first partition accepts any value\n-- including null\ncreate table list_parted (a int) partition by list (a);\ncreate table part_default partition of list_parted default;\n\\d+ part_default\ninsert into part_default values (null);\ninsert into part_default values (1);\ninsert into part_default values (-1);\nselect tableoid::regclass, a from list_parted;\n-- cleanup\ndrop table list_parted;\n\n-- more tests for certain multi-level partitioning scenarios\ncreate table mlparted (a int, b int) partition by range (a, b);\ncreate table mlparted1 (b int not null, a int not null) partition by range ((b+0));\ncreate table mlparted11 (like mlparted1);\nalter table mlparted11 drop a;\nalter table mlparted11 add a int;\nalter table mlparted11 drop a;\nalter table mlparted11 add a int not null;\n-- attnum for key attribute 'a' is different in mlparted, mlparted1, and mlparted11\nselect attrelid::regclass, attname, attnum\nfrom pg_attribute\nwhere attname = 'a'\n and (attrelid = 'mlparted'::regclass\n   or attrelid = 'mlparted1'::regclass\n   or attrelid = 'mlparted11'::regclass)\norder by attrelid::regclass::text;\n\nalter table mlparted1 attach partition mlparted11 for values from (2) to (5);\nalter table mlparted attach partition mlparted1 for values from (1, 2) to (1, 10);\n\n-- check that \"(1, 2)\" is correctly routed to mlparted11.\ninsert into mlparted values (1, 2);\nselect tableoid::regclass, * from mlparted;\n\n-- check that proper message is shown after failure to route through mlparted1\ninsert into mlparted (a, b) values (1, 5);\n\ntruncate mlparted;\nalter table mlparted add constraint check_b check (b = 3);\n\n-- have a BR trigger modify the row such that the check_b is violated\ncreate function mlparted11_trig_fn()\nreturns trigger AS\n$$\nbegin\n  NEW.b := 4;\n  return NEW;\nend;\n$$\nlanguage plpgsql;\ncreate trigger mlparted11_trig before insert ON mlparted11\n  for each row execute procedure mlparted11_trig_fn();\n\n-- check that the correct row is shown when constraint check_b fails after\n-- \"(1, 2)\" is routed to mlparted11 (actually \"(1, 4)\" would be shown due\n-- to the BR trigger mlparted11_trig_fn)\ninsert into mlparted values (1, 2);\ndrop trigger mlparted11_trig on mlparted11;\ndrop function mlparted11_trig_fn();\n\n-- check that inserting into an internal partition successfully results in\n-- checking its partition constraint before inserting into the leaf partition\n-- selected by tuple-routing\ninsert into mlparted1 (a, b) values (2, 3);\n\n-- check routing error through a list partitioned table when the key is null\ncreate table lparted_nonullpart (a int, b char) partition by list (b);\ncreate table lparted_nonullpart_a partition of lparted_nonullpart for values in ('a');\ninsert into lparted_nonullpart values (1);\ndrop table lparted_nonullpart;\n\n-- check that RETURNING works correctly with tuple-routing\nalter table mlparted drop constraint check_b;\ncreate table mlparted12 partition of mlparted1 for values from (5) to (10);\ncreate table mlparted2 (b int not null, a int not null);\nalter table mlparted attach partition mlparted2 for values from (1, 10) to (1, 20);\ncreate table mlparted3 partition of mlparted for values from (1, 20) to (1, 30);\ncreate table mlparted4 (like mlparted);\nalter table mlparted4 drop a;\nalter table mlparted4 add a int not null;\nalter table mlparted attach partition mlparted4 for values from (1, 30) to (1, 40);\nwith ins (a, b, c) as\n  (insert into mlparted (b, a) select s.a, 1 from generate_series(2, 39) s(a) returning tableoid::regclass, *)\n  select a, b, min(c), max(c) from ins group by a, b order by 1;\n\nalter table mlparted add c text;\ncreate table mlparted5 (c text, a int not null, b int not null) partition by list (c);\ncreate table mlparted5a (a int not null, c text, b int not null);\nalter table mlparted5 attach partition mlparted5a for values in ('a');\nalter table mlparted attach partition mlparted5 for values from (1, 40) to (1, 50);\nalter table mlparted add constraint check_b check (a = 1 and b < 45);\ninsert into mlparted values (1, 45, 'a');\ncreate function mlparted5abrtrig_func() returns trigger as $$ begin new.c = 'b'; return new; end; $$ language plpgsql;\ncreate trigger mlparted5abrtrig before insert on mlparted5a for each row execute procedure mlparted5abrtrig_func();\ninsert into mlparted5 (a, b, c) values (1, 40, 'a');\ndrop table mlparted5;\nalter table mlparted drop constraint check_b;\n\n-- Check multi-level default partition\ncreate table mlparted_def partition of mlparted default partition by range(a);\ncreate table mlparted_def1 partition of mlparted_def for values from (40) to (50);\ncreate table mlparted_def2 partition of mlparted_def for values from (50) to (60);\ninsert into mlparted values (40, 100);\ninsert into mlparted_def1 values (42, 100);\ninsert into mlparted_def2 values (54, 50);\n-- fail\ninsert into mlparted values (70, 100);\ninsert into mlparted_def1 values (52, 50);\ninsert into mlparted_def2 values (34, 50);\n-- ok\ncreate table mlparted_defd partition of mlparted_def default;\ninsert into mlparted values (70, 100);\n\nselect tableoid::regclass, * from mlparted_def;\n\n-- Check multi-level tuple routing with attributes dropped from the\n-- top-most parent.  First remove the last attribute.\nalter table mlparted add d int, add e int;\nalter table mlparted drop e;\ncreate table mlparted5 partition of mlparted\n  for values from (1, 40) to (1, 50) partition by range (c);\ncreate table mlparted5_ab partition of mlparted5\n  for values from ('a') to ('c') partition by list (c);\n-- This partitioned table should remain with no partitions.\ncreate table mlparted5_cd partition of mlparted5\n  for values from ('c') to ('e') partition by list (c);\ncreate table mlparted5_a partition of mlparted5_ab for values in ('a');\ncreate table mlparted5_b (d int, b int, c text, a int);\nalter table mlparted5_ab attach partition mlparted5_b for values in ('b');\ntruncate mlparted;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ntruncate mlparted;\n-- Remove the before last attribute.\nalter table mlparted add e int, add d int;\nalter table mlparted drop e;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ndrop table mlparted5;\n\n-- check that message shown after failure to find a partition shows the\n-- appropriate key description (or none) in various situations\ncreate table key_desc (a int, b int) partition by list ((a+0));\ncreate table key_desc_1 partition of key_desc for values in (1) partition by range (b);\n\ncreate user regress_insert_other_user;\ngrant select (a) on key_desc_1 to regress_insert_other_user;\ngrant insert on key_desc to regress_insert_other_user;\n\nset role regress_insert_other_user;\n-- no key description is shown\ninsert into key_desc values (1, 1);\n\nreset role;\ngrant select (b) on key_desc_1 to regress_insert_other_user;\nset role regress_insert_other_user;\n-- key description (b)=(1) is now shown\ninsert into key_desc values (1, 1);\n\n-- key description is not shown if key contains expression\ninsert into key_desc values (2, 1);\nreset role;\nrevoke all on key_desc from regress_insert_other_user;\nrevoke all on key_desc_1 from regress_insert_other_user;\ndrop role regress_insert_other_user;\ndrop table key_desc, key_desc_1;\n\n-- test minvalue/maxvalue restrictions\ncreate table mcrparted (a int, b int, c int) partition by range (a, abs(b), c);\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, 0, 0) to (1, maxvalue, maxvalue);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, minvalue);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, 0) to (30, 20, minvalue);\n\n-- check multi-column range partitioning expression enforces the same\n-- constraint as what tuple-routing would determine it to be\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, minvalue, minvalue) to (1, maxvalue, maxvalue);\ncreate table mcrparted1 partition of mcrparted for values from (2, 1, minvalue) to (10, 5, 10);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, maxvalue);\ncreate table mcrparted3 partition of mcrparted for values from (11, 1, 1) to (20, 10, 10);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, minvalue) to (30, 20, maxvalue);\ncreate table mcrparted5 partition of mcrparted for values from (30, 21, 20) to (maxvalue, maxvalue, maxvalue);\n\n-- null not allowed in range partition\ninsert into mcrparted values (null, null, null);\n\n-- routed to mcrparted0\ninsert into mcrparted values (0, 1, 1);\ninsert into mcrparted0 values (0, 1, 1);\n\n-- routed to mcparted1\ninsert into mcrparted values (9, 1000, 1);\ninsert into mcrparted1 values (9, 1000, 1);\ninsert into mcrparted values (10, 5, -1);\ninsert into mcrparted1 values (10, 5, -1);\ninsert into mcrparted values (2, 1, 0);\ninsert into mcrparted1 values (2, 1, 0);\n\n-- routed to mcparted2\ninsert into mcrparted values (10, 6, 1000);\ninsert into mcrparted2 values (10, 6, 1000);\ninsert into mcrparted values (10, 1000, 1000);\ninsert into mcrparted2 values (10, 1000, 1000);\n\n-- no partition exists, nor does mcrparted3 accept it\ninsert into mcrparted values (11, 1, -1);\ninsert into mcrparted3 values (11, 1, -1);\n\n-- routed to mcrparted5\ninsert into mcrparted values (30, 21, 20);\ninsert into mcrparted5 values (30, 21, 20);\ninsert into mcrparted4 values (30, 21, 20);\t-- error\n\n-- check rows\nselect tableoid::regclass::text, * from mcrparted order by 1;\n\n-- cleanup\ndrop table mcrparted;\n\n-- check that a BR constraint can't make partition contain violating rows\ncreate table brtrigpartcon (a int, b text) partition by list (a);\ncreate table brtrigpartcon1 partition of brtrigpartcon for values in (1);\ncreate or replace function brtrigpartcon1trigf() returns trigger as $$begin new.a := 2; return new; end$$ language plpgsql;\ncreate trigger brtrigpartcon1trig before insert on brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();\ninsert into brtrigpartcon values (1, 'hi there');\ninsert into brtrigpartcon1 values (1, 'hi there');\n\n-- check that the message shows the appropriate column description in a\n-- situation where the partitioned table is not the primary ModifyTable node\ncreate table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);\ncreate role regress_coldesc_role;\ngrant insert on inserttest3 to regress_coldesc_role;\ngrant insert on brtrigpartcon to regress_coldesc_role;\nrevoke select on brtrigpartcon from regress_coldesc_role;\nset role regress_coldesc_role;\nwith result as (insert into brtrigpartcon values (1, 'hi there') returning 1)\n  insert into inserttest3 (f3) select * from result;\nreset role;\n\n-- cleanup\nrevoke all on inserttest3 from regress_coldesc_role;\nrevoke all on brtrigpartcon from regress_coldesc_role;\ndrop role regress_coldesc_role;\ndrop table inserttest3;\ndrop table brtrigpartcon;\ndrop function brtrigpartcon1trigf();\n\n-- check that \"do nothing\" BR triggers work with tuple-routing\ncreate table donothingbrtrig_test (a int, b text) partition by list (a);\ncreate table donothingbrtrig_test1 (b text, a int);\ncreate table donothingbrtrig_test2 (c text, b text, a int);\nalter table donothingbrtrig_test2 drop column c;\ncreate or replace function donothingbrtrig_func() returns trigger as $$begin raise notice 'b: %', new.b; return NULL; end$$ language plpgsql;\ncreate trigger donothingbrtrig1 before insert on donothingbrtrig_test1 for each row execute procedure donothingbrtrig_func();\ncreate trigger donothingbrtrig2 before insert on donothingbrtrig_test2 for each row execute procedure donothingbrtrig_func();\nalter table donothingbrtrig_test attach partition donothingbrtrig_test1 for values in (1);\nalter table donothingbrtrig_test attach partition donothingbrtrig_test2 for values in (2);\ninsert into donothingbrtrig_test values (1, 'foo'), (2, 'bar');\ncopy donothingbrtrig_test from stdout;\n1\tbaz\n2\tqux\n\\.\nselect tableoid::regclass, * from donothingbrtrig_test;\n\n-- cleanup\ndrop table donothingbrtrig_test;\ndrop function donothingbrtrig_func();\n\n-- check multi-column range partitioning with minvalue/maxvalue constraints\ncreate table mcrparted (a text, b int) partition by range(a, b);\ncreate table mcrparted1_lt_b partition of mcrparted for values from (minvalue, minvalue) to ('b', minvalue);\ncreate table mcrparted2_b partition of mcrparted for values from ('b', minvalue) to ('c', minvalue);\ncreate table mcrparted3_c_to_common partition of mcrparted for values from ('c', minvalue) to ('common', minvalue);\ncreate table mcrparted4_common_lt_0 partition of mcrparted for values from ('common', minvalue) to ('common', 0);\ncreate table mcrparted5_common_0_to_10 partition of mcrparted for values from ('common', 0) to ('common', 10);\ncreate table mcrparted6_common_ge_10 partition of mcrparted for values from ('common', 10) to ('common', maxvalue);\ncreate table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);\ncreate table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);\n\n\\d+ mcrparted\n\\d+ mcrparted1_lt_b\n\\d+ mcrparted2_b\n\\d+ mcrparted3_c_to_common\n\\d+ mcrparted4_common_lt_0\n\\d+ mcrparted5_common_0_to_10\n\\d+ mcrparted6_common_ge_10\n\\d+ mcrparted7_gt_common_lt_d\n\\d+ mcrparted8_ge_d\n\ninsert into mcrparted values ('aaa', 0), ('b', 0), ('bz', 10), ('c', -10),\n    ('comm', -10), ('common', -10), ('common', 0), ('common', 10),\n    ('commons', 0), ('d', -10), ('e', 0);\nselect tableoid::regclass, * from mcrparted order by a, b;\ndrop table mcrparted;\n\n-- check that wholerow vars in the RETURNING list work with partitioned tables\ncreate table returningwrtest (a int) partition by list (a);\ncreate table returningwrtest1 partition of returningwrtest for values in (1);\ninsert into returningwrtest values (1) returning returningwrtest;\n\n-- check also that the wholerow vars in RETURNING list are converted as needed\nalter table returningwrtest add b text;\ncreate table returningwrtest2 (b text, c int, a int);\nalter table returningwrtest2 drop c;\nalter table returningwrtest attach partition returningwrtest2 for values in (2);\ninsert into returningwrtest values (2, 'foo') returning returningwrtest;\ndrop table returningwrtest;\n*/\n\n-- drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 19:\nDROP SERVER sqlite_svr;\n--Testcase 20:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/join.sql",
    "content": "--\n-- JOIN\n-- Test JOIN clauses\n--\n--Testcase 360:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 361:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 362:\nCREATE FOREIGN TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n) SERVER sqlite_svr; \n\n--Testcase 363:\nCREATE FOREIGN TABLE J2_TBL (\n  i integer,\n  k integer\n) SERVER sqlite_svr; \n\n--Testcase 364:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 365:\nCREATE FOREIGN TABLE tenk2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 366:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 545:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 546:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 547:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 548:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 549:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 367:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 550:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 551:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 552:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 553:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 554:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n--Testcase 368:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 555:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 556:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 557:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 558:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 559:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 369:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO J1_TBL VALUES (1, 4, 'one');\n--Testcase 2:\nINSERT INTO J1_TBL VALUES (2, 3, 'two');\n--Testcase 3:\nINSERT INTO J1_TBL VALUES (3, 2, 'three');\n--Testcase 4:\nINSERT INTO J1_TBL VALUES (4, 1, 'four');\n--Testcase 5:\nINSERT INTO J1_TBL VALUES (5, 0, 'five');\n--Testcase 6:\nINSERT INTO J1_TBL VALUES (6, 6, 'six');\n--Testcase 7:\nINSERT INTO J1_TBL VALUES (7, 7, 'seven');\n--Testcase 8:\nINSERT INTO J1_TBL VALUES (8, 8, 'eight');\n--Testcase 9:\nINSERT INTO J1_TBL VALUES (0, NULL, 'zero');\n--Testcase 10:\nINSERT INTO J1_TBL VALUES (NULL, NULL, 'null');\n--Testcase 11:\nINSERT INTO J1_TBL VALUES (NULL, 0, 'zero');\n\n--Testcase 12:\nINSERT INTO J2_TBL VALUES (1, -1);\n--Testcase 13:\nINSERT INTO J2_TBL VALUES (2, 2);\n--Testcase 14:\nINSERT INTO J2_TBL VALUES (3, -3);\n--Testcase 15:\nINSERT INTO J2_TBL VALUES (2, 4);\n--Testcase 16:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 17:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 18:\nINSERT INTO J2_TBL VALUES (0, NULL);\n--Testcase 19:\nINSERT INTO J2_TBL VALUES (NULL, NULL);\n--Testcase 20:\nINSERT INTO J2_TBL VALUES (NULL, 0);\n\n-- useful in some tests below\n--Testcase 370:\ncreate temp table onerow();\n--Testcase 371:\ninsert into onerow default values;\nanalyze onerow;\n\n\n--\n-- CORRELATION NAMES\n-- Make sure that table/column aliases are supported\n-- before diving into more complex join syntax.\n--\n\n--Testcase 21:\nSELECT *\n  FROM J1_TBL AS tx;\n\n--Testcase 22:\nSELECT *\n  FROM J1_TBL tx;\n\n--Testcase 23:\nSELECT *\n  FROM J1_TBL AS t1 (a, b, c);\n\n--Testcase 24:\nSELECT *\n  FROM J1_TBL t1 (a, b, c);\n\n--Testcase 25:\nSELECT *\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e);\n\n--Testcase 26:\nSELECT t1.a, t2.e\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e)\n  WHERE t1.a = t2.d;\n\n\n--\n-- CROSS JOIN\n-- Qualifications are not allowed on cross joins,\n-- which degenerate into a standard unqualified inner join.\n--\n\n--Testcase 27:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- ambiguous column\n--Testcase 28:\nSELECT i, k, t\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- resolve previous ambiguity by specifying the table name\n--Testcase 29:\nSELECT t1.i, k, t\n  FROM J1_TBL t1 CROSS JOIN J2_TBL t2;\n\n--Testcase 30:\nSELECT ii, tt, kk\n  FROM (J1_TBL CROSS JOIN J2_TBL)\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 31:\nSELECT tx.ii, tx.jj, tx.kk\n  FROM (J1_TBL t1 (a, b, c) CROSS JOIN J2_TBL t2 (d, e))\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 32:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL a CROSS JOIN J2_TBL b;\n\n\n--\n--\n-- Inner joins (equi-joins)\n--\n--\n\n--\n-- Inner joins (equi-joins) with USING clause\n-- The USING syntax changes the shape of the resulting table\n-- by including a column in the USING clause only once in the result.\n--\n\n-- Inner equi-join on specified column\n--Testcase 33:\nSELECT *\n  FROM J1_TBL INNER JOIN J2_TBL USING (i);\n\n-- Same as above, slightly different syntax\n--Testcase 34:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i);\n\n--Testcase 35:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, d) USING (a)\n  ORDER BY a, d;\n\n--Testcase 36:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, b) USING (b)\n  ORDER BY b, t1.a;\n\n-- test join using aliases\n--Testcase 489:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 490:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 491:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i)) AS x WHERE J1_TBL.t = 'one';  -- error\n--Testcase 492:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.i = 1;  -- ok\n--Testcase 493:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.t = 'one';  -- error\n--Testcase 494:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i) AS x) AS xx WHERE x.i = 1;  -- error (XXX could use better hint)\n--Testcase 495:\nSELECT *\n  FROM J1_TBL a1 JOIN J2_TBL a2 USING (i) AS a1;  -- error\n--Testcase 496:\nSELECT x.*\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 497:\nSELECT ROW(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 498:\nSELECT row_to_json(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n\n--\n-- NATURAL JOIN\n-- Inner equi-join on all columns with the same name\n--\n\n--Testcase 37:\nSELECT *\n  FROM J1_TBL NATURAL JOIN J2_TBL;\n\n--Testcase 38:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (a, d);\n\n--Testcase 39:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (d, a);\n\n-- mismatch number of columns\n-- currently, Postgres will fill in with underlying names\n--Testcase 40:\nSELECT *\n  FROM J1_TBL t1 (a, b) NATURAL JOIN J2_TBL t2 (a);\n\n\n--\n-- Inner joins (equi-joins)\n--\n\n--Testcase 41:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.i);\n\n--Testcase 42:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.k);\n\n\n--\n-- Non-equi-joins\n--\n\n--Testcase 43:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i <= J2_TBL.k);\n\n\n--\n-- Outer joins\n-- Note that OUTER is a noise word\n--\n\n--Testcase 44:\nSELECT *\n  FROM J1_TBL LEFT OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 45:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 46:\nSELECT *\n  FROM J1_TBL RIGHT OUTER JOIN J2_TBL USING (i);\n\n--Testcase 47:\nSELECT *\n  FROM J1_TBL RIGHT JOIN J2_TBL USING (i);\n\n--Testcase 48:\nSELECT *\n  FROM J1_TBL FULL OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 49:\nSELECT *\n  FROM J1_TBL FULL JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 50:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (k = 1);\n\n--Testcase 51:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (i = 1);\n\n--\n-- semijoin selectivity for <>\n--\n--Testcase 52:\nexplain (costs off)\nselect * from int4_tbl i4, tenk1 a\nwhere exists(select * from tenk1 b\n             where a.twothousand = b.twothousand and a.fivethous <> b.fivethous)\n      and i4.f1 = a.tenthous;\n\n\n--\n-- More complicated constructs\n--\n\n--\n-- Multiway full join\n--\n\n--Testcase 372:\nCREATE FOREIGN TABLE t11 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 373:\nCREATE FOREIGN TABLE t21 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 374:\nCREATE FOREIGN TABLE t31 (name TEXT, n INTEGER) SERVER sqlite_svr;\n\n--Testcase 53:\nINSERT INTO t11 VALUES ( 'bb', 11 );\n--Testcase 54:\nINSERT INTO t21 VALUES ( 'bb', 12 );\n--Testcase 55:\nINSERT INTO t21 VALUES ( 'cc', 22 );\n--Testcase 56:\nINSERT INTO t21 VALUES ( 'ee', 42 );\n--Testcase 57:\nINSERT INTO t31 VALUES ( 'bb', 13 );\n--Testcase 58:\nINSERT INTO t31 VALUES ( 'cc', 23 );\n--Testcase 59:\nINSERT INTO t31 VALUES ( 'dd', 33 );\n\n--Testcase 60:\nSELECT * FROM t11 FULL JOIN t21 USING (name) FULL JOIN t31 USING (name);\n\n--\n-- Test interactions of join syntax and subqueries\n--\n\n-- Basic cases (we expect planner to pull up the subquery here)\n--Testcase 61:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nINNER JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 62:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nLEFT JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 63:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nFULL JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n-- Cases with non-nullable expressions in subquery results;\n-- make sure these go to null as expected\n--Testcase 64:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 65:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL LEFT JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 66:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 67:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL INNER JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 68:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL FULL JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 69:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n--Testcase 70:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n-- Constants as join keys can also be problematic\n--Testcase 375:\nSELECT * FROM\n  (SELECT name, n as s1_n FROM t11) as s1\nFULL JOIN\n  (SELECT name, 2 as s2_n FROM t21) as s2\nON (s1_n = s2_n);\n\n-- Test for propagation of nullability constraints into sub-joins\n\n--Testcase 376:\ncreate foreign table x (x1 int, x2 int) server sqlite_svr;\n--Testcase 71:\ninsert into x values (1,11);\n--Testcase 72:\ninsert into x values (2,22);\n--Testcase 73:\ninsert into x values (3,null);\n--Testcase 74:\ninsert into x values (4,44);\n--Testcase 75:\ninsert into x values (5,null);\n\n--Testcase 377:\ncreate foreign table y (y1 int, y2 int) server sqlite_svr;\n--Testcase 76:\ninsert into y values (1,111);\n--Testcase 77:\ninsert into y values (2,222);\n--Testcase 78:\ninsert into y values (3,333);\n--Testcase 79:\ninsert into y values (4,null);\n\n--Testcase 80:\nselect * from x;\n--Testcase 81:\nselect * from y;\n\n--Testcase 82:\nselect * from x left join y on (x1 = y1 and x2 is not null);\n--Testcase 83:\nselect * from x left join y on (x1 = y1 and y2 is not null);\n\n--Testcase 84:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1);\n--Testcase 85:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and x2 is not null);\n--Testcase 86:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and y2 is not null);\n--Testcase 87:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and xx2 is not null);\n-- these should NOT give the same answers as above\n--Testcase 88:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (x2 is not null);\n--Testcase 89:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (y2 is not null);\n--Testcase 90:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (xx2 is not null);\n\n--\n-- regression test: check for bug with propagation of implied equality\n-- to outside an IN\n--\n--Testcase 91:\nselect count(*) from tenk1 a where unique1 in\n  (select unique1 from tenk1 b join tenk1 c using (unique1)\n   where b.unique2 = 42);\n\n--\n-- regression test: check for failure to generate a plan with multiple\n-- degenerate IN clauses\n--\n--Testcase 92:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\n\n-- try that with GEQO too\nbegin;\n--Testcase 499:\nset geqo = on;\n--Testcase 500:\nset geqo_threshold = 2;\n--Testcase 93:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\nrollback;\n\n--\n-- regression test: be sure we cope with proven-dummy append rels\n--\n--Testcase 378:\ncreate table b (aa int, bb int);\n--Testcase 379:\nexplain (costs off)\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--Testcase 380:\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--\n-- regression test: check handling of empty-FROM subquery underneath outer join\n--\n--Testcase 94:\nexplain (costs off)\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--Testcase 95:\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--\n-- regression test: check a case where join_clause_is_movable_into() gives\n-- an imprecise result, causing an assertion failure\n--\n--Testcase 96:\nselect count(*)\nfrom\n  (select t31.tenthous as x1, coalesce(t11.stringu1, t21.stringu1) as x2\n   from tenk1 t11\n   left join tenk1 t21 on t11.unique1 = t21.unique1\n   join tenk1 t31 on t11.unique2 = t31.unique2) ss,\n  tenk1 t4,\n  tenk1 t5\nwhere t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1;\n\n--\n-- regression test: check a case where we formerly missed including an EC\n-- enforcement clause because it was expected to be handled at scan level\n--\n--Testcase 97:\nexplain (costs off)\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--Testcase 98:\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--\n-- check a case where we formerly got confused by conflicting sort orders\n-- in redundant merge join path keys\n-- PS: Used ORDER BY to force SQLite and PG12 always order in the same way (NULLS FIRST/LAST default value for PG and Sqlite are different)\n--\n--Testcase 99:\nexplain (costs off)\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--Testcase 100:\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--\n-- a different check for handling of redundant sort keys in merge joins\n--\n--Testcase 101:\nexplain (costs off)\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n--Testcase 102:\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n\n--\n-- Clean up\n--\n\n--Testcase 381:\nDROP FOREIGN TABLE t11;\n--Testcase 382:\nDROP FOREIGN TABLE t21;\n--Testcase 383:\nDROP FOREIGN TABLE t31;\n\n--Testcase 384:\nDROP FOREIGN TABLE J1_TBL;\n--Testcase 385:\nDROP FOREIGN TABLE J2_TBL;\n\n-- Both DELETE and UPDATE allow the specification of additional tables\n-- to \"join\" against to determine which rows should be modified.\n\n--Testcase 386:\nCREATE FOREIGN TABLE t12 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 387:\nCREATE FOREIGN TABLE t22 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 388:\nCREATE FOREIGN TABLE t32 (x int OPTIONS (key 'true'), y int) SERVER sqlite_svr;\n\n--Testcase 103:\nINSERT INTO t12 VALUES (5, 10);\n--Testcase 104:\nINSERT INTO t12 VALUES (15, 20);\n--Testcase 105:\nINSERT INTO t12 VALUES (100, 100);\n--Testcase 106:\nINSERT INTO t12 VALUES (200, 1000);\n--Testcase 107:\nINSERT INTO t22 VALUES (200, 2000);\n--Testcase 108:\nINSERT INTO t32 VALUES (5, 20);\n--Testcase 109:\nINSERT INTO t32 VALUES (6, 7);\n--Testcase 110:\nINSERT INTO t32 VALUES (7, 8);\n--Testcase 111:\nINSERT INTO t32 VALUES (500, 100);\n\n--Testcase 112:\nDELETE FROM t32 USING t12 table1 WHERE t32.x = table1.a;\n--Testcase 113:\nSELECT * FROM t32;\n--Testcase 114:\nDELETE FROM t32 USING t12 JOIN t22 USING (a) WHERE t32.x > t12.a;\n--Testcase 115:\nSELECT * FROM t32;\n--Testcase 116:\nDELETE FROM t32 USING t32 t3_other WHERE t32.x = t3_other.x AND t32.y = t3_other.y;\n--Testcase 117:\nSELECT * FROM t32;\n\n-- Test join against inheritance tree\n\n--Testcase 389:\ncreate temp table t2a () inherits (t22);\n\n--Testcase 118:\ninsert into t2a values (200, 2001);\n\n--Testcase 119:\nselect * from t12 left join t22 on (t12.a = t22.a);\n\n-- Test matching of column name with wrong alias\n\n--Testcase 120:\nselect t12.x from t12 join t32 on (t12.a = t32.x);\n\n-- Test matching of locking clause with wrong alias\n\n--Testcase 540:\nselect t12.*, t22.*, unnamed_join.* from\n  t12 join t22 on (t12.a = t22.a), t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 541:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 542:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 543:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 544:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of bar;\n\n--Testcase 536:\ndrop table t2a;\n\n--\n-- regression test for 8.1 merge right join bug\n--\n\n--Testcase 390:\nCREATE FOREIGN TABLE tt1 ( tt1_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO tt1 VALUES (1, 11);\n--Testcase 122:\nINSERT INTO tt1 VALUES (2, NULL);\n\n--Testcase 391:\nCREATE FOREIGN TABLE tt2 ( tt2_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 123:\nINSERT INTO tt2 VALUES (21, 11);\n--Testcase 124:\nINSERT INTO tt2 VALUES (22, 11);\n\n--Testcase 501:\nset enable_hashjoin to off;\n--Testcase 502:\nset enable_nestloop to off;\n\n-- these should give the same results\n\n--Testcase 125:\nselect tt1.*, tt2.* from tt1 left join tt2 on tt1.joincol = tt2.joincol;\n\n--Testcase 126:\nselect tt1.*, tt2.* from tt2 right join tt1 on tt1.joincol = tt2.joincol;\n\n--Testcase 503:\nreset enable_hashjoin;\n--Testcase 504:\nreset enable_nestloop;\n\n--\n-- regression test for bug #13908 (hash join with skew tuples & nbatch increase)\n--\n\n--Testcase 505:\nset work_mem to '64kB';\n--Testcase 506:\nset enable_mergejoin to off;\n--Testcase 507:\nset enable_memoize to off;\n\n--Testcase 127:\nexplain (costs off)\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n--Testcase 128:\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n\n--Testcase 508:\nreset work_mem;\n--Testcase 509:\nreset enable_mergejoin;\n--Testcase 510:\nreset enable_memoize;\n\n--\n-- regression test for 8.2 bug with improper re-ordering of left joins\n--\n\n--Testcase 392:\ncreate foreign table tt3(f1 int, f2 text) server sqlite_svr;\n--Testcase 129:\ninsert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x;\n\n--Testcase 393:\ncreate foreign table tt4(f1 int) server sqlite_svr;\n--Testcase 130:\ninsert into tt4 values (0),(1),(9999);\n\n--Testcase 131:\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE c.f1 IS NULL\n) AS d ON (a.f1 = d.f1)\nWHERE d.f1 IS NULL;\n\n--\n-- regression test for proper handling of outer joins within antijoins\n--\n\n--Testcase 394:\ncreate foreign table tt4x(c1 int, c2 int, c3 int) server sqlite_svr;\n\n--Testcase 132:\nexplain (costs off)\nselect * from tt4x t1\nwhere not exists (\n  select 1 from tt4x t2\n    left join tt4x t3 on t2.c3 = t3.c1\n    left join ( select t5.c1 as c1\n                from tt4x t4 left join tt4x t5 on t4.c2 = t5.c1\n              ) a1 on t3.c2 = a1.c1\n  where t1.c1 = t2.c2\n);\n\n--\n-- regression test for problems of the sort depicted in bug #3494\n--\n\n--Testcase 395:\ncreate foreign table tt5(f1 int, f2 int) server sqlite_svr;\n--Testcase 396:\ncreate foreign table tt6(f1 int, f2 int) server sqlite_svr;\n\n--Testcase 133:\ninsert into tt5 values(1, 10);\n--Testcase 134:\ninsert into tt5 values(1, 11);\n\n--Testcase 135:\ninsert into tt6 values(1, 9);\n--Testcase 136:\ninsert into tt6 values(1, 2);\n--Testcase 137:\ninsert into tt6 values(2, 9);\n\n--Testcase 138:\nselect * from tt5,tt6 where tt5.f1 = tt6.f1 and tt5.f1 = tt5.f2 - tt6.f2;\n\n--\n-- regression test for problems of the sort depicted in bug #3588\n--\n\n--Testcase 397:\ncreate foreign table xx (pkxx int) server sqlite_svr;\n--Testcase 398:\ncreate foreign table yy (pkyy int, pkxx int) server sqlite_svr;\n\n--Testcase 139:\ninsert into xx values (1);\n--Testcase 140:\ninsert into xx values (2);\n--Testcase 141:\ninsert into xx values (3);\n\n--Testcase 142:\ninsert into yy values (101, 1);\n--Testcase 143:\ninsert into yy values (201, 2);\n--Testcase 144:\ninsert into yy values (301, NULL);\n\n--Testcase 145:\nselect yy.pkyy as yy_pkyy, yy.pkxx as yy_pkxx, yya.pkyy as yya_pkyy,\n       xxa.pkxx as xxa_pkxx, xxb.pkxx as xxb_pkxx\nfrom yy\n     left join (SELECT * FROM yy where pkyy = 101) as yya ON yy.pkyy = yya.pkyy\n     left join xx xxa on yya.pkxx = xxa.pkxx\n     left join xx xxb on coalesce (xxa.pkxx, 1) = xxb.pkxx;\n\n--\n-- regression test for improper pushing of constants across outer-join clauses\n-- (as seen in early 8.2.x releases)\n--\n\n--Testcase 399:\ncreate foreign table zt1 (f1 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 400:\ncreate foreign table zt2 (f2 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 401:\ncreate foreign table zt3 (f3 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 146:\ninsert into zt1 values(53);\n--Testcase 147:\ninsert into zt2 values(53);\n\n--Testcase 148:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zt1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 402:\ncreate temp view zv1 as select *,'dummy'::text AS junk from zt1;\n\n--Testcase 149:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zv1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 537:\ndrop view zv1;\n\n--\n-- regression test for improper extraction of OR indexqual conditions\n-- (as seen in early 8.3.x releases)\n--\n\n--Testcase 150:\nselect a.unique2, a.ten, b.tenthous, b.unique2, b.hundred\nfrom tenk1 a left join tenk1 b on a.unique2 = b.tenthous\nwhere a.unique1 = 42 and\n      ((b.unique2 is null and a.ten = 2) or b.hundred = 3);\n\n--\n-- test proper positioning of one-time quals in EXISTS (8.4devel bug)\n--\n--Testcase 151:\nprepare foo(bool) as\n  select count(*) from tenk1 a left join tenk1 b\n    on (a.unique2 = b.unique1 and exists\n        (select 1 from tenk1 c where c.thousand = b.unique2 and $1));\n--Testcase 152:\nexecute foo(true);\n--Testcase 153:\nexecute foo(false);\n\n--\n-- test for sane behavior with noncanonical merge clauses, per bug #4926\n--\n\nbegin;\n\n--Testcase 511:\nset enable_mergejoin = 1;\n--Testcase 512:\nset enable_hashjoin = 0;\n--Testcase 513:\nset enable_nestloop = 0;\n\n--Testcase 403:\ncreate foreign table a1 (i integer) server sqlite_svr;\n--Testcase 404:\ncreate foreign table b1 (x integer, y integer) server sqlite_svr;\n\n--Testcase 154:\nselect * from a1 left join b1 on i = x and i = y and x = i;\n\nrollback;\n\n-- skip this test, sqlite fdw does not support customized type\n-- test handling of merge clauses using record_ops\n--\n--begin;\n\n--create type mycomptype as (id int, v bigint);\n\n--create foreign table tidv (idv mycomptype) server sqlite_svr;\n--create index on tidv (idv);\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--set enable_mergejoin = 0;\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--rollback;\n\n--\n-- test NULL behavior of whole-row Vars, per bug #5025\n--\n--Testcase 155:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join int8_tbl t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 156:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 157:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl offset 0) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 158:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join\n  (select q1, case when q2=1 then 1 else q2 end as q2 from int8_tbl) t2\n  on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--\n-- test incorrect failure to NULL pulled-up subexpressions\n--\nbegin;\n\n--Testcase 405:\ncreate foreign table a2 (\n     code char OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 406:\ncreate foreign table b2 (\n     a char OPTIONS (key 'true'),\n     num integer OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 407:\ncreate foreign table c2 (\n     name char OPTIONS (key 'true'),\n     a char\n) server sqlite_svr;\n\n--Testcase 159:\ninsert into a2 (code) values ('p');\n--Testcase 160:\ninsert into a2 (code) values ('q');\n--Testcase 161:\ninsert into b2 (a, num) values ('p', 1);\n--Testcase 162:\ninsert into b2 (a, num) values ('p', 2);\n--Testcase 163:\ninsert into c2 (name, a) values ('A', 'p');\n--Testcase 164:\ninsert into c2 (name, a) values ('B', 'q');\n--Testcase 165:\ninsert into c2 (name, a) values ('C', null);\n\n--Testcase 166:\nselect c2.name, ss.code, ss.b_cnt, ss.const\nfrom c2 left join\n  (select a2.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const\n   from a2 left join\n     (select count(1) as cnt, b2.a from b2 group by b2.a) as b_grp\n     on a2.code = b_grp.a\n  ) as ss\n  on (c2.a = ss.code)\norder by c2.name;\n\nrollback;\n\n--\n-- test incorrect handling of placeholders that only appear in targetlists,\n-- per bug #6154\n--\n--Testcase 408:\ncreate foreign table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id int options (key 'true')) server sqlite_svr;\n--Testcase 409:\ninsert into sub_tbl values (1, 1, 1, 2, 42);\n\n--Testcase 410:\nSELECT * FROM\n( SELECT key1 from sub_tbl) sub1\nLEFT JOIN\n( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl ) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n-- test the path using join aliases, too\n--Testcase 411:\nSELECT * FROM\n( SELECT key1 from sub_tbl ) sub1\nLEFT JOIN\n( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl ) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl ) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n--\n-- test case where a PlaceHolderVar is used as a nestloop parameter\n--\n\n--Testcase 167:\nEXPLAIN (COSTS OFF)\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--Testcase 168:\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--\n-- nested nestloops can require nested PlaceHolderVars\n--\n\n--Testcase 412:\ncreate foreign table nt1 (\n  id int OPTIONS (key 'true'),\n  a1 boolean,\n  a2 boolean\n) server sqlite_svr;\n--Testcase 413:\ncreate foreign table nt2 (\n  id int OPTIONS (key 'true'),\n  nt1_id int,\n  b1 boolean,\n  b2 boolean\n) server sqlite_svr;\n--Testcase 414:\ncreate foreign table nt3 (\n  id int OPTIONS (key 'true'),\n  nt2_id int,\n  c1 boolean\n) server sqlite_svr;\n\n--Testcase 169:\ninsert into nt1 values (1,true,true);\n--Testcase 170:\ninsert into nt1 values (2,true,false);\n--Testcase 171:\ninsert into nt1 values (3,false,false);\n--Testcase 172:\ninsert into nt2 values (1,1,true,true);\n--Testcase 173:\ninsert into nt2 values (2,2,true,false);\n--Testcase 174:\ninsert into nt2 values (3,3,false,false);\n--Testcase 175:\ninsert into nt3 values (1,1,true);\n--Testcase 176:\ninsert into nt3 values (2,2,false);\n--Testcase 177:\ninsert into nt3 values (3,3,true);\n\n--Testcase 178:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 179:\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--\n-- test case where a PlaceHolderVar is propagated into a subquery\n--\n\n--Testcase 180:\nexplain (costs off)\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--Testcase 181:\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--\n-- variant where a PlaceHolderVar is needed at a join, but not above the join\n--\n\n--Testcase 514:\nexplain (costs off)\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--Testcase 515:\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--\n-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE\n--\n--Testcase 182:\nselect * from int4_tbl a full join int4_tbl b on true;\n--Testcase 183:\nselect * from int4_tbl a full join int4_tbl b on false;\n\n--\n-- test for ability to use a cartesian join when necessary\n--\n--Testcase 415:\ncreate foreign table q1(i int) server sqlite_svr;\n--Testcase 416:\ninsert into q1 values (1);\n--Testcase 417:\ncreate foreign table q2(i int) server sqlite_svr;\n--Testcase 418:\ninsert into q2 values (0);\n--Testcase 184:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere q1.i = thousand or q2.i = thousand;\n\n--Testcase 185:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere thousand = (q1.i + q2.i);\n\n--\n-- test ability to generate a suitable plan for a star-schema query\n--\n\n--Testcase 186:\nexplain (costs off)\nselect * from\n  tenk1, int8_tbl a, int8_tbl b\nwhere thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2;\n\n--\n-- test a corner case in which we shouldn't apply the star-schema optimization\n--\n\n--Testcase 187:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 188:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- variant that isn't quite a star-schema case\n\n--Testcase 189:\nselect ss1.d1 from\n  tenk1 as t1\n  inner join tenk1 as t2\n  on t1.tenthous = t2.ten\n  inner join\n    int8_tbl as i8\n    left join int4_tbl as i4\n      inner join (select 64::information_schema.cardinal_number as d1\n                  from tenk1 t3,\n                       lateral (select abs(t3.unique1) + random()) ss0(x)\n                  where t3.fivethous < 0) as ss1\n      on i4.f1 = ss1.d1\n    on i8.q1 = i4.f1\n  on t1.tenthous = ss1.d1\nwhere t1.unique1 < i4.f1;\n\n-- this variant is foldable by the remove-useless-RESULT-RTEs code\n\n--Testcase 419:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 420:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- Here's a variant that we can't fold too aggressively, though,\n-- or we end up with noplace to evaluate the lateral PHV\n\n--Testcase 421:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x from sub_tbl) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n--Testcase 422:\nselect * from\n  (select key1 as x from sub_tbl as x) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n\n-- Test proper handling of appendrel PHVs during useless-RTE removal\n--Testcase 516:\nexplain (costs off)\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n--Testcase 517:\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n  \n--\n-- test inlining of immutable functions\n--\n--Testcase 423:\ncreate function f_immutable_int4(i integer) returns integer as\n$$ begin return i; end; $$ language plpgsql immutable;\n\n-- check optimization of function scan with join\n--Testcase 424:\nexplain (costs off)\nselect unique1 from tenk1, (select * from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 425:\nexplain (verbose, costs off)\nselect unique1, x.*\nfrom tenk1, (select *, random() from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 426:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = unique1;\n\n--Testcase 427:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1;\n\n--Testcase 538:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17);\n\n--Testcase 428:\nexplain (costs off)\nselect unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 429:\nexplain (costs off)\nselect unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 430:\nexplain (costs off)\nselect unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 431:\nexplain (costs off)\nselect unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x;\n\n-- check that pullup of a const function allows further const-folding\n--Testcase 432:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = 42;\n\n-- test inlining of immutable functions with PlaceHolderVars\n--Testcase 433:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 or i4 = 42) AS b3\n     from nt2 as nt2\n       left join\n         f_immutable_int4(0) i4\n         on i4 = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 434:\ndrop function f_immutable_int4(int);\n\n-- test inlining when function returns composite\n\n--Testcase 435:\ncreate function mki8(bigint, bigint) returns int8_tbl as\n$$select row($1,$2)::int8_tbl$$ language sql;\n\n--Testcase 436:\ncreate function mki4(int) returns int4_tbl as\n$$select row($1)::int4_tbl$$ language sql;\n\n--Testcase 437:\nexplain (verbose, costs off)\nselect * from mki8(1,2);\n--Testcase 438:\nselect * from mki8(1,2);\n\n--Testcase 439:\nexplain (verbose, costs off)\nselect * from mki4(42);\n--Testcase 440:\nselect * from mki4(42);\n\n--Testcase 441:\ndrop function mki8(bigint, bigint);\n--Testcase 442:\ndrop function mki4(int);\n\n--\n-- test extraction of restriction OR clauses from join OR clause\n-- (we used to only do this for indexable clauses)\n--\n\n--Testcase 190:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4);\n--Testcase 191:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4);\n--Testcase 192:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or\n  ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4);\n\n--\n-- test placement of movable quals in a parameterized join tree\n--\n\n--Testcase 193:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 194:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 195:\nexplain (costs off)\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 196:\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 197:\nexplain (costs off)\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 198:\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 199:\nexplain (costs off)\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 200:\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 201:\nexplain (costs off)\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--Testcase 202:\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--\n-- test handling of potential equivalence clauses above outer joins\n--\n\n--Testcase 203:\nexplain (costs off)\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 204:\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 205:\nexplain (costs off)\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--Testcase 206:\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--\n-- another case with equivalence clauses above outer joins (bug #8591)\n--\n\n--Testcase 207:\nexplain (costs off)\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--Testcase 208:\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--\n-- check handling of join aliases when flattening multiple levels of subquery\n--\n\n--Testcase 209:\nexplain (verbose, costs off)\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--Testcase 210:\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--\n-- test successful handling of nested outer joins with degenerate join quals\n--\n--Testcase 443:\ncreate foreign table text_tbl(f1 text) server sqlite_svr;\n\n--Testcase 211:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 212:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 213:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 214:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 215:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 216:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 217:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--Testcase 218:\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--\n-- test for appropriate join order in the presence of lateral references\n--\n\n--Testcase 219:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 220:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 221:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 222:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 223:\nexplain (verbose, costs off)\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 224:\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--\n-- check a case in which a PlaceHolderVar forces join order\n--\n\n--Testcase 225:\nexplain (verbose, costs off)\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--Testcase 226:\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--\n-- test successful handling of full join underneath left join (bug #14105)\n--\n\n--Testcase 227:\nexplain (costs off)\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--Testcase 228:\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--\n-- test ability to push constants through outer join clauses\n--\n\n--Testcase 229:\nexplain (costs off)\n  select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0;\n\n--Testcase 230:\nexplain (costs off)\n  select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42;\n\n--\n-- test that quals attached to an outer join have correct semantics,\n-- specifically that they don't re-use expressions computed below the join;\n-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input\n--\n\n--Testcase 518:\nset enable_hashjoin to off;\n--Testcase 519:\nset enable_nestloop to off;\n\n--Testcase 231:\nexplain (verbose, costs off)\n  select a.q2, b.q1\n    from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n    where coalesce(b.q1, 1) > 0;\n--Testcase 232:\nselect a.q2, b.q1\n  from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n  where coalesce(b.q1, 1) > 0;\n\n--Testcase 520:\nreset enable_hashjoin;\n--Testcase 521:\nreset enable_nestloop;\n\n--\n-- test join removal\n--\n\nbegin;\n\n--Testcase 444:\nCREATE FOREIGN TABLE a3 (id int OPTIONS (key 'true'), b_id int) SERVER sqlite_svr;\n--Testcase 445:\nCREATE FOREIGN TABLE b3 (id int OPTIONS (key 'true'), c_id int) SERVER sqlite_svr;\n--Testcase 446:\nCREATE FOREIGN TABLE c3 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 447:\nCREATE FOREIGN TABLE d3 (a int, b int) SERVER sqlite_svr;\n--Testcase 233:\nINSERT INTO a3 VALUES (0, 0), (1, NULL);\n--Testcase 234:\nINSERT INTO b3 VALUES (0, 0), (1, NULL);\n--Testcase 235:\nINSERT INTO c3 VALUES (0), (1);\n--Testcase 236:\nINSERT INTO d3 VALUES (1,3), (2,2), (3,1);\n\n-- all three cases should be optimizable into a3 simple seqscan\n--Testcase 237:\nexplain (costs off) SELECT a3.* FROM a3 LEFT JOIN b3 ON a3.b_id = b3.id;\n--Testcase 238:\nexplain (costs off) SELECT b3.* FROM b3 LEFT JOIN c3 ON b3.c_id = c3.id;\n--Testcase 239:\nexplain (costs off)\n  SELECT a3.* FROM a3 LEFT JOIN (b3 left join c3 on b3.c_id = c3.id)\n  ON (a3.b_id = b3.id);\n\n-- check optimization of outer join within another special join\n--Testcase 240:\nexplain (costs off)\nselect id from a3 where id in (\n\tselect b3.id from b3 left join c3 on b3.id = c3.id\n);\n\n-- check that join removal works for a left join when joining a subquery\n-- that is guaranteed to be unique by its GROUP BY clause\n--Testcase 241:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 242:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- join removal is not possible when the GROUP BY contains a column that is\n-- not in the join condition.  (Note: as of 9.6, we notice that b3.id is a\n-- primary key and so drop b3.c_id from the GROUP BY of the resulting plan;\n-- but this happens too late for join removal in the outer plan level.)\n--Testcase 243:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 244:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id;\n\n-- check join removal works when uniqueness of the join condition is enforced\n-- by a UNION\n--Testcase 245:\nexplain (costs off)\nselect d3.* from d3 left join (select id from a3 union select id from b3) s\n  on d3.a = s.id;\n\n-- check join removal with a cross-type comparison operator\n--Testcase 246:\nexplain (costs off)\nselect i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4\n  on i8.q1 = i4.f1;\n\n-- check join removal with lateral references\n--Testcase 247:\nexplain (costs off)\nselect 1 from (select a3.id FROM a3 left join b3 on a3.b_id = b3.id) q,\n\t\t\t  lateral generate_series(1, q.id) gs(i) where q.id = gs.i;\n\nrollback;\n\n--Testcase 448:\ncreate foreign table parent (k int options (key 'true'), pd int) server sqlite_svr;\n--Testcase 449:\ncreate foreign table child (k int options (key 'true'), cd int) server sqlite_svr;\n--Testcase 248:\ninsert into parent values (1, 10), (2, 20), (3, 30);\n--Testcase 249:\ninsert into child values (1, 100), (4, 400);\n\n-- this case is optimizable\n--Testcase 250:\nselect p.* from parent p left join child c on (p.k = c.k);\n--Testcase 251:\nexplain (costs off)\n  select p.* from parent p left join child c on (p.k = c.k);\n\n-- this case is not\n--Testcase 252:\nselect p.*, linked from parent p\n  left join (select c.*, true as linked from child c) as ss\n  on (p.k = ss.k);\n--Testcase 253:\nexplain (costs off)\n  select p.*, linked from parent p\n    left join (select c.*, true as linked from child c) as ss\n    on (p.k = ss.k);\n\n-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling\n--Testcase 254:\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n--Testcase 255:\nexplain (costs off)\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n\n--Testcase 256:\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n--Testcase 257:\nexplain (costs off)\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n\n-- bug 5255: this is not optimizable by join removal\nbegin;\n\n--Testcase 450:\nCREATE FOREIGN TABLE a4 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 451:\nCREATE FOREIGN TABLE b4 (id int OPTIONS (key 'true'), a_id int) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO a4 VALUES (0), (1);\n--Testcase 259:\nINSERT INTO b4 VALUES (0, 0), (1, NULL);\n\n--Testcase 260:\nSELECT * FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n--Testcase 261:\nSELECT b4.* FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n\nrollback;\n\n-- another join removal bug: this is not optimizable, either\nbegin;\n\n--Testcase 452:\ncreate foreign table innertab (id int8 options (key 'true'), dat1 int8) server sqlite_svr;\n--Testcase 262:\ninsert into innertab values(123, 42);\n\n--Testcase 263:\nSELECT * FROM\n    (SELECT 1 AS x) ss1\n  LEFT JOIN\n    (SELECT q1, q2, COALESCE(dat1, q1) AS y\n     FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2\n  ON true;\n\nrollback;\n\n-- another join removal bug: we must clean up correctly when removing a PHV\nbegin;\n\n--Testcase 453:\ncreate foreign table uniquetbl (f1 text) server sqlite_svr;\n\n--Testcase 264:\nexplain (costs off)\nselect t1.* from\n  uniquetbl as t1\n  left join (select *, '***'::text as d1 from uniquetbl) t2\n  on t1.f1 = t2.f1\n  left join uniquetbl t3\n  on t2.d1 = t3.f1;\n\n--Testcase 265:\nexplain (costs off)\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\n--Testcase 266:\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\nrollback;\n\n-- test case to expose miscomputation of required relid set for a PHV\n--Testcase 522:\nexplain (verbose, costs off)\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n--Testcase 523:\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n-- -- and check a related issue where we miscompute required relids for\n-- -- a PHV that's been translated to a child rel\n-- create temp table parttbl (a integer primary key) partition by range (a);\n-- create temp table parttbl1 partition of parttbl for values from (1) to (100);\n-- insert into parttbl values (11), (12);\n-- explain (costs off)\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n\n-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs\n\n--Testcase 267:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error\n--Testcase 268:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error\n--Testcase 269:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok\n\n--\n-- Test hints given on incorrect column references are useful\n--\n\n--Testcase 270:\nselect t1.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t1\" suggestion\n--Testcase 271:\nselect t2.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t2\" suggestion\n--Testcase 272:\nselect uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once\n\n--\n-- Take care to reference the correct RTE\n--\n\n--Testcase 454:\nselect atts.relid::regclass, s.* from pg_stats s join\n    pg_attribute a on s.attname = a.attname and s.tablename =\n    a.attrelid::regclass::text join (select unnest(indkey) attnum,\n    indexrelid from pg_index i) atts on atts.attnum = a.attnum where\n    schemaname != 'pg_catalog';\n\n--\n-- Test LATERAL\n--\n\n--Testcase 273:\nselect unique2, x.*\nfrom tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 274:\nexplain (costs off)\n  select unique2, x.*\n  from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 275:\nselect unique2, x.*\nfrom int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 276:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 277:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 278:\nselect unique2, x.*\nfrom int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n--Testcase 279:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n\n-- check scoping of lateral versus parent references\n-- the first of these should return int8_tbl.q2, the second int8_tbl.q1\n--Testcase 280:\nselect *, (select r from (select q1 as q2) x, (select q2 as r) y) from int8_tbl;\n--Testcase 281:\nselect *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl;\n\n-- lateral with function in FROM\n--Testcase 282:\nselect count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 283:\nexplain (costs off)\n  select count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 284:\nexplain (costs off)\n  select count(*) from tenk1 a cross join lateral generate_series(1,two) g;\n-- don't need the explicit LATERAL keyword for functions\n--Testcase 285:\nexplain (costs off)\n  select count(*) from tenk1 a, generate_series(1,two) g;\n\n-- lateral with UNION ALL subselect\n--Testcase 286:\nexplain (costs off)\n  select * from generate_series(100,200) g,\n    lateral (select * from int8_tbl a where g = q1 union all\n             select * from int8_tbl b where g = q2) ss;\n--Testcase 287:\nselect * from generate_series(100,200) g,\n  lateral (select * from int8_tbl a where g = q1 union all\n           select * from int8_tbl b where g = q2) ss;\n\n-- lateral with VALUES\n--Testcase 288:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n--Testcase 289:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral with VALUES, no flattening possible\n--Testcase 290:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n--Testcase 291:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral injecting a strange outer join condition\n--Testcase 292:\nexplain (costs off)\n  select * from int8_tbl a,\n    int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n      on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n--Testcase 293:\nselect * from int8_tbl a,\n  int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n    on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n\n-- lateral reference to a join alias variable\n--Testcase 294:\nselect * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (select x) ss2(y);\n--Testcase 295:\nselect * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (values(x)) ss2(y);\n--Testcase 296:\nselect * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j,\n  lateral (select x) ss2(y);\n\n-- lateral references requiring pullup\n--Testcase 297:\nselect * from (values(1)) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 298:\nselect * from (select f1/1000000000 from int4_tbl) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 299:\nselect * from (values(1)) x(lb),\n  lateral (values(lb)) y(lbcopy);\n--Testcase 300:\nselect * from (values(1)) x(lb),\n  lateral (select lb from int4_tbl) y(lbcopy);\n--Testcase 301:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2);\n--Testcase 302:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 303:\nselect x.* from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 304:\nselect v.* from\n  (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 305:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 307:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy);\n\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 455:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 456:\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 457:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 458:\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n\n-- lateral can result in join conditions appearing below their\n-- real semantic level\n--Testcase 308:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 309:\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 310:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 311:\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 312:\nexplain (verbose, costs off)\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n--Testcase 313:\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n\n-- lateral reference in a PlaceHolderVar evaluated at join level\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 459:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n--Testcase 460:\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n\n-- case requiring nested PlaceHolderVars\n--Testcase 461:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl c left join (\n    int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select ss2.y offset 0) ss3;\n\n-- case that breaks the old ph_may_need optimization\n--Testcase 462:\nexplain (verbose, costs off)\nselect c.*,a.*,ss1.q1,ss2.q1,ss3.* from\n  int8_tbl c left join (\n    int8_tbl a left join\n      (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2\n       where q1 < f1) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select * from int4_tbl i where ss2.y > f1) ss3;\n\n-- check processing of postponed quals (bug #9041)\n--Testcase 463:\ndelete from sub_tbl;\n--Testcase 464:\ninsert into sub_tbl values (1, 2, 3, 4, 5);\n--Testcase 465:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x  from sub_tbl offset 0) x cross join (select key3 as y from sub_tbl offset 0) y\n  left join lateral (\n    select * from (select key5 as z from sub_tbl offset 0) z where z.z = x.x\n  ) zz on zz.z = y.y;\n\n-- check dummy rels with lateral references (bug #15694)\n--Testcase 466:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl where false) ss on true;\n--Testcase 467:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true;\n\n-- check handling of nested appendrels inside LATERAL\n--Testcase 468:\nselect * from\n  ((select key3 as v from sub_tbl) union all (select key5 as v from sub_tbl)) as q1\n  cross join lateral\n  ((select * from\n      ((select key6 as v from sub_tbl) union all (select value1 as v from sub_tbl)) as q3)\n   union all\n   (select q1.v)\n  ) as q2;\n\n-- check the number of columns specified\n--Testcase 539:\nSELECT * FROM (int8_tbl i cross join int4_tbl j) ss(a,b,c,d);\n\n-- check we don't try to do a unique-ified semijoin with LATERAL\n--Testcase 314:\nexplain (verbose, costs off)\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n--Testcase 315:\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n\n-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue,\n-- but we can make the test case much more compact with LATERAL)\n--Testcase 316:\nexplain (verbose, costs off)\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n--Testcase 317:\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n-- test some error cases where LATERAL should have been used but wasn't\n--Testcase 318:\nselect f1,g from int4_tbl a, (select f1 as g) ss;\n--Testcase 319:\nselect f1,g from int4_tbl a, (select a.f1 as g) ss;\n--Testcase 320:\nselect f1,g from int4_tbl a cross join (select f1 as g) ss;\n--Testcase 321:\nselect f1,g from int4_tbl a cross join (select a.f1 as g) ss;\n-- SQL:2008 says the left table is in scope but illegal to access here\n--Testcase 322:\nselect f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true;\n--Testcase 323:\nselect f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true;\n-- check we complain about ambiguous table references\n--Testcase 324:\nselect * from\n  int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss);\n-- LATERAL can be used to put an aggregate into the FROM clause of its query\n--Testcase 325:\nselect 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss;\n\n-- check behavior of LATERAL in UPDATE/DELETE\n\n--Testcase 469:\ncreate temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl;\n\n-- error, can't do this:\n--Testcase 326:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss;\n--Testcase 327:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss;\n-- can't do it even with LATERAL:\n--Testcase 328:\nupdate xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss;\n-- we might in future allow something like this, but for now it's an error:\n--Testcase 329:\nupdate xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- also errors:\n--Testcase 330:\ndelete from xx1 using (select * from int4_tbl where f1 = x1) ss;\n--Testcase 331:\ndelete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss;\n--Testcase 332:\ndelete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- Skip this test, sqlite fdw does not support to create partition table\n-- test LATERAL reference propagation down a multi-level inheritance hierarchy\n-- produced for a multi-level partitioned table hierarchy.\n--\n--create table join_pt1 (a int, b int, c varchar) partition by range(a);\n--create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b);\n--create table join_pt1p2 partition of join_pt1 for values from (100) to (200);\n--create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100);\n--insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y');\n--create table join_ut1 (a int, b int, c varchar);\n--insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z');\n--explain (verbose, costs off)\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n\n--drop table join_pt1;\n--drop table join_ut1;\n\n--\n-- test estimation behavior with multi-column foreign key and constant qual\n--\n\nbegin;\n\n--Testcase 524:\ncreate table fkest (x integer, x10 integer, x10b integer, x100 integer);\n--Testcase 525:\ninsert into fkest select x, x/10, x/10, x/100 from generate_series(1,1000) x;\n--Testcase 526:\ncreate unique index on fkest(x, x10, x100);\nanalyze fkest;\n\n--Testcase 527:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\n--Testcase 528:\nalter table fkest add constraint fk\n  foreign key (x, x10b, x100) references fkest (x, x10, x100);\n\n--Testcase 529:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\nrollback;\n\n--\n-- test that foreign key join estimation performs sanely for outer joins\n--\n\nbegin;\n\n--Testcase 470:\ncreate foreign table fkest (a int options (key 'true'), b int options (key 'true'), c int) server sqlite_svr;\n--Testcase 471:\ncreate foreign table fkest1 (a int options (key 'true'), b int options (key 'true')) server sqlite_svr;\n\n--Testcase 333:\ninsert into fkest select x/10, x%10, x from generate_series(1,1000) x;\n--Testcase 334:\ninsert into fkest1 select x/10, x%10 from generate_series(1,1000) x;\n\n--alter table fkest1\n--  add constraint fkest1_a_b_fkey foreign key (a,b) references fkest;\n\n--analyze fkest;\n--analyze fkest1;\n\n--Testcase 335:\nexplain (costs off)\nselect *\nfrom fkest f\n  left join fkest1 f1 on f.a = f1.a and f.b = f1.b\n  left join fkest1 f2 on f.a = f2.a and f.b = f2.b\n  left join fkest1 f3 on f.a = f3.a and f.b = f3.b\nwhere f.c = 1;\n\nrollback;\n\n--\n-- test planner's ability to mark joins as unique\n--\n\n--Testcase 472:\ncreate foreign table j11 (id int options (key 'true')) server sqlite_svr;\n--Testcase 473:\ncreate foreign table j21 (id int options (key 'true')) server sqlite_svr;\n--Testcase 474:\ncreate foreign table j31 (id int) server sqlite_svr;\n\n--Testcase 336:\ninsert into j11 values(1),(2),(3);\n--Testcase 337:\ninsert into j21 values(1),(2),(3);\n--Testcase 338:\ninsert into j31 values(1),(1);\n\n-- ensure join is properly marked as unique\n--Testcase 339:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id = j21.id;\n\n-- ensure join is not unique when not an equi-join\n--Testcase 340:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id > j21.id;\n\n-- ensure non-unique rel is not chosen as inner\n--Testcase 341:\nexplain (verbose, costs off)\nselect * from j11 inner join j31 on j11.id = j31.id;\n\n-- ensure left join is marked as unique\n--Testcase 342:\nexplain (verbose, costs off)\nselect * from j11 left join j21 on j11.id = j21.id;\n\n-- ensure right join is marked as unique\n--Testcase 343:\nexplain (verbose, costs off)\nselect * from j11 right join j21 on j11.id = j21.id;\n\n-- ensure full join is marked as unique\n--Testcase 344:\nexplain (verbose, costs off)\nselect * from j11 full join j21 on j11.id = j21.id;\n\n-- a clauseless (cross) join can't be unique\n--Testcase 345:\nexplain (verbose, costs off)\nselect * from j11 cross join j21;\n\n-- ensure a natural join is marked as unique\n--Testcase 346:\nexplain (verbose, costs off)\nselect * from j11 natural join j21;\n\n-- ensure a distinct clause allows the inner to become unique\n--Testcase 347:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select distinct id from j31) j31 on j11.id = j31.id;\n\n-- ensure group by clause allows the inner to become unique\n--Testcase 348:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select id from j31 group by id) j31 on j11.id = j31.id;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- test more complex permutations of unique joins\n\n--Testcase 475:\ncreate foreign table j12 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 476:\ncreate foreign table j22 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 477:\ncreate foreign table j32 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n\n--Testcase 349:\ninsert into j12 values(1,1),(1,2);\n--Testcase 350:\ninsert into j22 values(1,1);\n--Testcase 351:\ninsert into j32 values(1,1);\n\n--analyze j1;\n--analyze j2;\n--analyze j3;\n\n-- ensure there's no unique join when not all columns which are part of the\n-- unique index are seen in the join clause\n--Testcase 352:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1;\n\n-- ensure proper unique detection with multiple join quals\n--Testcase 353:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2;\n\n-- ensure we don't detect the join to be unique when quals are not part of the\n-- join condition\n--Testcase 354:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- as above, but for left joins.\n--Testcase 355:\nexplain (verbose, costs off)\nselect * from j12\nleft join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- validate logic in merge joins which skips mark and restore.\n-- it should only do this if all quals which were used to detect the unique\n-- are present as join quals, and not plain quals.\n--Testcase 530:\nset enable_nestloop to 0;\n--Testcase 531:\nset enable_hashjoin to 0;\n--Testcase 532:\nset enable_sort to 0;\n-- skip, cannot create index on foreign table\n-- create indexes that will be preferred over the PKs to perform the join\n--create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;\n--create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;\n-- need an additional row in j2, if we want j2_id1_idx to be preferred\n--Testcase 478:\ninsert into j22 values(1,2);\n--analyze j2;\n\n--Testcase 356:\nexplain (costs off) select * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n--Testcase 357:\nselect * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n-- Exercise array keys mark/restore B-Tree code\n--Testcase 479:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n--Testcase 480:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n-- Exercise array keys \"find extreme element\" B-Tree code\n--Testcase 481:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 482:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 533:\nreset enable_nestloop;\n--Testcase 534:\nreset enable_hashjoin;\n--Testcase 535:\nreset enable_sort;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- check that semijoin inner is not seen as unique for a portion of the outerrel\n--Testcase 483:\nCREATE FOREIGN TABLE onek (\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 358:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from tenk1 t3\n              where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n-- ... unless it actually is unique\n--Testcase 484:\ncreate table j3 as select unique1, tenthous from onek;\nvacuum analyze j3;\n--Testcase 485:\ncreate unique index on j3(unique1, tenthous);\n\n--Testcase 359:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from j3\n              where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n--Testcase 486:\ndrop table j3;\n\n--Testcase 560:\nDELETE FROM INT4_TBL;\n--Testcase 561:\nDELETE FROM INT8_TBL;\n--Testcase 562:\nDELETE FROM FLOAT8_TBL;\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 487:\nDROP SERVER sqlite_svr;\n--Testcase 488:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/limit.sql",
    "content": "--\n-- LIMIT\n-- Check the LIMIT/OFFSET feature of SELECT\n--\n--Testcase 27:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 28:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 29:\nCREATE FOREIGN TABLE onek(\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 30:\nCREATE FOREIGN TABLE int8_tbl(q1 int8 OPTIONS (key 'true'), q2 int8) SERVER sqlite_svr;\n--Testcase 105:\nINSERT INTO int8_tbl VALUES('  123   ','  456');\n--Testcase 106:\nINSERT INTO int8_tbl VALUES('123   ','4567890123456789');\n--Testcase 107:\nINSERT INTO int8_tbl VALUES('4567890123456789','123');\n--Testcase 108:\nINSERT INTO int8_tbl VALUES(+4567890123456789,'4567890123456789');\n--Testcase 109:\nINSERT INTO int8_tbl VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 31:\nCREATE FOREIGN TABLE INT8_TMP(\n        q1 int8,\n        q2 int8,\n        q3 int4,\n        q4 int2,\n        q5 text,\n        id int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 32:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 88:\nCREATE TABLE parent_table (\n\tunique1\t\tint4 PRIMARY KEY,\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\n--Testcase 89:\nCREATE FOREIGN table inherited_table ()\nINHERITS (parent_table)\nSERVER sqlite_svr options (table 'tenk1');\n\n--Testcase 1:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tORDER BY unique1 LIMIT 2;\n--Testcase 2:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 3:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60 AND unique1 < 63\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 4:\nSELECT ''::text AS three, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 100\n\t\tORDER BY unique1 LIMIT 3 OFFSET 20;\n--Testcase 5:\nSELECT ''::text AS zero, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 8 OFFSET 99;\n--Testcase 6:\nSELECT ''::text AS eleven, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 20 OFFSET 39;\n--Testcase 7:\nSELECT ''::text AS ten, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990;\n--Testcase 8:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990 LIMIT 5;\n--Testcase 9:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 LIMIT 5 OFFSET 900;\n\n-- Test null limit and offset.  The planner would discard a simple null\n-- constant, so to ensure executor is exercised, do this:\n--Testcase 10:\nselect * from int8_tbl limit (case when random() < 0.5 then null::bigint end);\n--Testcase 11:\nselect * from int8_tbl offset (case when random() < 0.5 then null::bigint end);\n\n-- Test assorted cases involving backwards fetch from a LIMIT plan node\nbegin;\n\ndeclare c1 scroll cursor for select * from int8_tbl order by q1 limit 10;\n--Testcase 12:\nfetch all in c1;\n--Testcase 13:\nfetch 1 in c1;\n--Testcase 14:\nfetch backward 1 in c1;\n--Testcase 33:\nfetch backward all in c1;\n--Testcase 34:\nfetch backward 1 in c1;\n--Testcase 35:\nfetch all in c1;\n\ndeclare c2 scroll cursor for select * from int8_tbl limit 3;\n--Testcase 36:\nfetch all in c2;\n--Testcase 37:\nfetch 1 in c2;\n--Testcase 38:\nfetch backward 1 in c2;\n--Testcase 39:\nfetch backward all in c2;\n--Testcase 40:\nfetch backward 1 in c2;\n--Testcase 41:\nfetch all in c2;\n\ndeclare c3 scroll cursor for select * from int8_tbl offset 3;\n--Testcase 42:\nfetch all in c3;\n--Testcase 43:\nfetch 1 in c3;\n--Testcase 44:\nfetch backward 1 in c3;\n--Testcase 45:\nfetch backward all in c3;\n--Testcase 46:\nfetch backward 1 in c3;\n--Testcase 47:\nfetch all in c3;\n\ndeclare c4 scroll cursor for select * from int8_tbl offset 10;\n--Testcase 48:\nfetch all in c4;\n--Testcase 49:\nfetch 1 in c4;\n--Testcase 50:\nfetch backward 1 in c4;\n--Testcase 51:\nfetch backward all in c4;\n--Testcase 52:\nfetch backward 1 in c4;\n--Testcase 53:\nfetch all in c4;\n\ndeclare c5 scroll cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;\n--Testcase 54:\nfetch all in c5;\n--Testcase 55:\nfetch 1 in c5;\n--Testcase 56:\nfetch backward 1 in c5;\n--Testcase 57:\nfetch backward 1 in c5;\n--Testcase 58:\nfetch all in c5;\n--Testcase 59:\nfetch backward all in c5;\n--Testcase 60:\nfetch all in c5;\n--Testcase 61:\nfetch backward all in c5;\n\nrollback;\n\n-- Stress test for variable LIMIT in conjunction with bounded-heap sorting\n--Testcase 62:\nDELETE FROM INT8_TMP;\n--Testcase 63:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series(1,10) q1;\n\n--Testcase 64:\nSELECT\n  (SELECT s.q1 \n     FROM (VALUES (1)) AS x,\n          (SELECT q1 FROM INT8_TMP as n \n             ORDER BY q1 LIMIT 1 OFFSET s.q1-1) AS y) AS z\n  FROM INT8_TMP AS s;\n\n--\n-- Test behavior of volatile and set-returning functions in conjunction\n-- with ORDER BY and LIMIT.\n--\n\n--Testcase 65:\ncreate temp sequence testseq;\n\n--Testcase 15:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 16:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 90:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 91:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 17:\nselect currval('testseq');\n\n--Testcase 92:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n--Testcase 93:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n\n--Testcase 94:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 95:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 96:\nselect currval('testseq');\n\n--Testcase 18:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 19:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 97:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 98:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 20:\nselect currval('testseq');\n\n-- test for limit and offset when querying table and foreign table inherited\n--Testcase 99:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n--Testcase 100:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n-- when querying regular tables with inherited tables, only limit is pushed-down when no offset is specified\n--Testcase 101:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 102:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 103:\nselect currval('testseq');\n\n--Testcase 21:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 22:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 23:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n--Testcase 24:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n-- use of random() is to keep planner from folding the expressions together\n--Testcase 66:\nDELETE FROM INT8_TMP;\n--Testcase 67:\nINSERT INTO INT8_TMP VALUES (generate_series(0,2), generate_series((random()*.1)::int,2));\n--Testcase 68:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp;\n\n--Testcase 69:\nselect q1, q2 from int8_tmp;\n\n--Testcase 70:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp order by q2 desc;\n\n--Testcase 71:\nselect q1, q2 from int8_tmp order by q2 desc;\n\n-- test for failure to set all aggregates' aggtranstype\n--Testcase 25:\nexplain (verbose, costs off)\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--Testcase 26:\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--\n-- FETCH FIRST\n-- Check the WITH TIES clause\n--\n\n--Testcase 72:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW WITH TIES;\n\n--Testcase 73:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST ROWS WITH TIES;\n\n--Testcase 74:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES;\n\n--Testcase 75:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW ONLY;\n\n-- SKIP LOCKED and WITH TIES are incompatible\n--Testcase 104:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;\n\n-- should fail\n--Testcase 76:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tFETCH FIRST 2 ROW WITH TIES;\n\n-- test ruleutils\n--Testcase 77:\nCREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;\n--Testcase 78:\n\\d+ limit_thousand_v_1\n--Testcase 79:\nCREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;\n--Testcase 80:\n\\d+ limit_thousand_v_2\n--Testcase 81:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS WITH TIES;\t\t-- fails\n--Testcase 82:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;\n--Testcase 83:\n\\d+ limit_thousand_v_3\n--Testcase 84:\nCREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS ONLY;\n--Testcase 85:\n\\d+ limit_thousand_v_4\n-- leave these views\n\n--Testcase 110:\nDELETE FROM int8_tbl;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name\n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 86:\nDROP SERVER sqlite_svr;\n--Testcase 87:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/prepare.sql",
    "content": "-- Regression tests for prepareable statements. We query the content\n-- of the pg_prepared_statements view as prepared statements are\n-- created and removed.\n--Testcase 26:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 27:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 28:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 29:\nCREATE FOREIGN TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n) SERVER sqlite_svr;\n\n--Testcase 30:\ncreate foreign table road_tmp (a int, b int, id int options (key 'true')) server sqlite_svr;\n--Testcase 31:\ninsert into road_tmp values (1, 2);\n\n--Testcase 1:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n--Testcase 2:\nPREPARE q1 AS SELECT a FROM road_tmp;\n--Testcase 3:\nEXECUTE q1;\n\n--Testcase 4:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- should fail\n--Testcase 5:\nPREPARE q1 AS SELECT b FROM road_tmp;\n\n-- should succeed\nDEALLOCATE q1;\n--Testcase 6:\nPREPARE q1 AS SELECT b FROM road_tmp;\n--Testcase 7:\nEXECUTE q1;\n\n--Testcase 8:\nPREPARE q2 AS SELECT b FROM road_tmp;\n--Testcase 9:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- sql92 syntax\nDEALLOCATE PREPARE q1;\n\n--Testcase 10:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\nDEALLOCATE PREPARE q2;\n-- the view should return the empty set again\n--Testcase 11:\nSELECT name, statement, parameter_types FROM pg_prepared_statements;\n\n-- parameterized queries\n--Testcase 12:\nPREPARE q2(text) AS\n\tSELECT datname, datistemplate, datallowconn\n\tFROM pg_database WHERE datname = $1;\n\n--Testcase 13:\nEXECUTE q2('postgres');\n\n--Testcase 14:\nPREPARE q3(text, int, float, boolean, smallint) AS\n\tSELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR\n\tten = $3::bigint OR true = $4 OR odd = $5::int)\n\tORDER BY unique1;\n\n--Testcase 15:\nEXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 4::bigint);\n\n-- too few params\n--Testcase 16:\nEXECUTE q3('bool');\n\n-- too many params\n--Testcase 17:\nEXECUTE q3('bytea', 5::smallint, 10.5::float, false, 4::bigint, true);\n\n-- wrong param types\n--Testcase 18:\nEXECUTE q3(5::smallint, 10.5::float, false, 4::bigint, 'bytea');\n\n-- invalid type\n--Testcase 19:\nPREPARE q4(nonexistenttype) AS SELECT * FROM road WHERE name = $1;\n\n-- create table as execute\n--Testcase 20:\nPREPARE q5(int, text) AS\n\tSELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2\n\tORDER BY unique1;\n--Testcase 32:\nCREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');\n--Testcase 21:\nSELECT * FROM q5_prep_results;\n--Testcase 33:\nCREATE TEMPORARY TABLE q5_prep_nodata AS EXECUTE q5(200, 'DTAAAA')\n    WITH NO DATA;\n--Testcase 34:\nSELECT * FROM q5_prep_nodata;\n\n-- unknown or unspecified parameter types: should succeed\n--Testcase 22:\nPREPARE q6 AS\n    SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;\n--Testcase 23:\nPREPARE q7(unknown) AS\n    SELECT * FROM road WHERE thepath = $1;\n\n--Testcase 24:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n-- test DEALLOCATE ALL;\nDEALLOCATE ALL;\n--Testcase 25:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n--Testcase 35:\nDROP FOREIGN TABLE tenk1;\n--Testcase 36:\nDROP FOREIGN TABLE road;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/select.sql",
    "content": "--\n-- SELECT\n--\n--Testcase 43:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 44:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 45:\nCREATE FOREIGN TABLE onek (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 46:\nCREATE FOREIGN TABLE onek2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 47:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 73:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 74:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 75:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 76:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 77:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 48:\nCREATE FOREIGN TABLE person (\n  name    text,\n  age     int4,\n  location  point\n) SERVER sqlite_svr;\n\n-- btree index\n-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 1:\nSELECT * FROM onek\n   WHERE onek.unique1 < 10\n   ORDER BY onek.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 2:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 3:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY stringu1 using <;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1d -2 +0nr -1\n--\n--Testcase 4:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using <, unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1dr -2 +0n -1\n--\n--Testcase 5:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using >, unique1 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0nr -1 +1d -2\n--\n--Testcase 6:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >, string4 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0n -1 +1dr -2\n--\n--Testcase 7:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using <, string4 using >;\n\n--\n-- test partial btree indexes\n--\n-- As of 7.2, planner probably won't pick an indexscan without stats,\n-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan\n-- followed by sort, because that could hide index ordering problems.\n--\n--ANALYZE onek2;\n\nSET enable_seqscan TO off;\nSET enable_bitmapscan TO off;\nSET enable_sort TO off;\n\n--\n-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 8:\nSELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10 order by onek2.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 9:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n    WHERE onek2.unique1 < 20\n    ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 10:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n   WHERE onek2.unique1 > 980 ORDER BY onek2.unique1;\n\nRESET enable_seqscan;\nRESET enable_bitmapscan;\nRESET enable_sort;\n\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data\n--\n-- SELECT name, age FROM person*; ??? check if different\n--Testcase 12:\nSELECT p.name, p.age FROM person* p;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |\n-- sort +1nr -2\n--\n--Testcase 13:\nSELECT p.name, p.age FROM person* p ORDER BY age using >, name;\n\n--\n-- Test some cases involving whole-row Var referencing a subquery\n--\n--Testcase 49:\nselect foo from (select 1 offset 0) as foo;\n--Testcase 50:\nselect foo from (select null offset 0) as foo;\n--Testcase 51:\nselect foo from (select 'xyzzy',1,null offset 0) as foo;\n\n--\n-- Test VALUES lists\n--\n--Testcase 14:\nselect * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)\n    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;\n\n-- a more complex case\n-- looks like we're coding lisp :-)\n--Testcase 15:\nselect * from onek,\n  (values ((select i from\n    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)\n    order by i asc limit 1))) bar (i)\n  where onek.unique1 = bar.i;\n\n-- try VALUES in a subquery\n--Testcase 16:\nselect * from onek\n    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))\n    order by unique1;\n\n-- VALUES is also legal as a standalone query or a set-operation member\n--Testcase 17:\nVALUES (1,2), (3,4+4), (7,77.7);\n\n--Testcase 52:\nVALUES (1,2), (3,4+4), (7,77.7)\nUNION ALL\nSELECT 2+2, 57\nUNION ALL\nTABLE int8_tbl;\n\n-- corner case: VALUES with no columns\n-- CREATE TEMP TABLE nocols();\n-- INSERT INTO nocols DEFAULT VALUES;\n-- SELECT * FROM nocols n, LATERAL (VALUES(n.*)) v;\n\n--\n-- Test ORDER BY options\n--\n\n--Testcase 53:\nCREATE FOREIGN TABLE foo (f1 int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 18:\nINSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);\n\n--Testcase 19:\nSELECT * FROM foo ORDER BY f1;\n--Testcase 20:\nSELECT * FROM foo ORDER BY f1 ASC;\t-- same thing\n--Testcase 21:\nSELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--Testcase 22:\nSELECT * FROM foo ORDER BY f1 DESC;\n--Testcase 23:\nSELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n-- Skip, cannot create index on foreign table\n-- check if indexscans do the right things\n--CREATE INDEX fooi ON foo (f1);\n--SET enable_sort = false;\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--\n-- Test planning of some cases with partial indexes\n--\n\n-- partial index is usable\n--Testcase 24:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 25:\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- actually run the query with an analyze to use the partial index\n--Testcase 54:\nexplain (costs off, analyze on, timing off, summary off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 27:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 28:\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- partial index predicate implies clause, so no need for retest\n--Testcase 29:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 30:\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 31:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 32:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n-- but if it's an update target, must retest anyway\n--Testcase 33:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n--Testcase 34:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n-- partial index is not applicable\n--Testcase 35:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n--Testcase 36:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n-- partial index implies clause, but bitmap scan must recheck predicate anyway\nSET enable_indexscan TO off;\n--Testcase 37:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 38:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\nRESET enable_indexscan;\n-- check multi-index cases too\n--Testcase 39:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 40:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 41:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n--Testcase 42:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n\n--\n-- Test some corner cases that have been known to confuse the planner\n--\n\n-- ORDER BY on a constant doesn't really need any sorting\n--Testcase 55:\nSELECT 1 AS x ORDER BY x;\n\n-- But ORDER BY on a set-valued expression does\n--Testcase 56:\ncreate function sillysrf(int) returns setof int as\n  'values (1),(10),(2),($1)' language sql immutable;\n\n--Testcase 57:\nselect sillysrf(42);\n--Testcase 58:\nselect sillysrf(-1) order by 1;\n\n--Testcase 59:\ndrop function sillysrf(int);\n\n-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict\n-- (see bug #5084)\n--Testcase 60:\nselect * from (values (2),(null),(1)) v(k) where k = k order by k;\n--Testcase 61:\nselect * from (values (2),(null),(1)) v(k) where k = k;\n\n-- Test partitioned tables with no partitions, which should be handled the\n-- same as the non-inheritance case when expanding its RTE.\n--Testcase 62:\ncreate table list_parted_tbl (a int,b int) partition by list (a);\n--Testcase 63:\ncreate table list_parted_tbl1 partition of list_parted_tbl\n  for values in (1) partition by list(b);\n--Testcase 64:\nexplain (costs off) select * from list_parted_tbl;\n--Testcase 65:\ndrop table list_parted_tbl;\n\n--Testcase 78:\nDELETE FROM INT8_TBL;\n\n--Testcase 66:\nDROP FOREIGN TABLE onek;\n--Testcase 67:\nDROP FOREIGN TABLE onek2;\n--Testcase 68:\nDROP FOREIGN TABLE int8_tbl;\n--Testcase 69:\nDROP FOREIGN TABLE person;\n--Testcase 70:\nDROP FOREIGN TABLE foo;\n--Testcase 71:\nDROP SERVER sqlite_svr;\n--Testcase 72:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/select_having.sql",
    "content": "--\n-- SELECT_HAVING\n--\n\n--Testcase 22:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 23:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 24:\nCREATE FOREIGN TABLE test_having(a int OPTIONS (key 'true'), b int, c char(8), d char) SERVER sqlite_svr;\n\n-- load test data\n--Testcase 1:\nINSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');\n--Testcase 2:\nINSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');\n--Testcase 3:\nINSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');\n--Testcase 4:\nINSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');\n--Testcase 5:\nINSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');\n--Testcase 6:\nINSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');\n--Testcase 7:\nINSERT INTO test_having VALUES (6, 4, 'cccc', 'g');\n--Testcase 8:\nINSERT INTO test_having VALUES (7, 4, 'cccc', 'h');\n--Testcase 9:\nINSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');\n--Testcase 10:\nINSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');\n\n--Testcase 11:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;\n\n-- HAVING is effectively equivalent to WHERE in this case\n--Testcase 12:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING b = 3 ORDER BY b, c collate \"en_US.utf8\";\n\n--Testcase 13:\nSELECT lower(c), count(c) FROM test_having\n\tGROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY lower(c);\n\n--Testcase 14:\nSELECT c, max(a) FROM test_having\n\tGROUP BY c HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY c collate \"en_US.utf8\";\n\n-- test degenerate cases involving HAVING without GROUP BY\n-- Per SQL spec, these should generate 0 or 1 row, even without aggregates\n\n--Testcase 15:\nSELECT min(a), max(a) FROM test_having HAVING min(a) = max(a);\n--Testcase 16:\nSELECT min(a), max(a) FROM test_having HAVING min(a) < max(a);\n\n-- errors: ungrouped column references\n--Testcase 17:\nSELECT a FROM test_having HAVING min(a) < max(a);\n--Testcase 18:\nSELECT 1 AS one FROM test_having HAVING a > 1;\n\n-- the really degenerate case: need not scan table at all\n--Testcase 19:\nSELECT 1 AS one FROM test_having HAVING 1 > 2;\n--Testcase 20:\nSELECT 1 AS one FROM test_having HAVING 1 < 2;\n\n-- and just to prove that we aren't scanning the table:\n--Testcase 21:\nSELECT 1 AS one FROM test_having WHERE 1/a = 1 HAVING 1 < 2;\n\n--Testcase 25:\nDROP FOREIGN TABLE test_having;\n--Testcase 26:\nDROP SERVER sqlite_svr;\n--Testcase 27:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/sqlite_fdw_post.sql",
    "content": "-- ===================================================================\n-- create FDW objects\n-- ===================================================================\n\n--Testcase 483:\nCREATE EXTENSION sqlite_fdw;\n\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr2 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr3 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- SQLite FDW does not need User and User Mapping.\n--Testcase 484:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 485:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 756:\n-- CREATE USER MAPPING FOR public SERVER sqlite_svr3;\n-- ===================================================================\n-- create objects used through FDW sqlite server\n-- ===================================================================\n--Testcase 486:\nCREATE SCHEMA \"S 1\";\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO \"S 1\";\n\n--Testcase 1:\nINSERT INTO \"S 1\".\"T 1\"\n\tSELECT id,\n\t       id % 10,\n\t       to_char(id, 'FM00000'),\n\t       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,\n\t       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,\n\t       id % 10,\n\t       id % 10,\n\t       'foo'\n\tFROM generate_series(1, 1000) id;\n--Testcase 2:\nINSERT INTO \"S 1\".\"T 2\"\n\tSELECT id,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 3:\nINSERT INTO \"S 1\".\"T 3\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 487:\nDELETE FROM \"S 1\".\"T 3\" WHERE c1 % 2 != 0;\t-- delete for outer join tests\n--Testcase 4:\nINSERT INTO \"S 1\".\"T 4\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 488:\nDELETE FROM \"S 1\".\"T 4\" WHERE c1 % 3 != 0;\t-- delete for outer join tests\n\n/*ANALYZE \"S 1\".\"T 1\";\nANALYZE \"S 1\".\"T 2\";\nANALYZE \"S 1\".\"T 3\";\nANALYZE \"S 1\".\"T 4\";*/\n\n-- ===================================================================\n-- create foreign tables\n-- ===================================================================\n--Testcase 489:\nCREATE FOREIGN TABLE ft1 (\n\tc0 int,\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 757:\nALTER FOREIGN TABLE ft1 DROP COLUMN c0;\n\n--Testcase 490:\nCREATE FOREIGN TABLE ft2 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tcx int,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft2',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 758:\nALTER FOREIGN TABLE ft2 DROP COLUMN cx;\n\n--Testcase 491:\nCREATE FOREIGN TABLE ft4 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 3');\n\n--Testcase 492:\nCREATE FOREIGN TABLE ft5 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 4');\n\n--Testcase 493:\nCREATE FOREIGN TABLE ft6 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr2 OPTIONS (table 'T 4');\n\n--Testcase 759:\nCREATE FOREIGN TABLE ft7 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr3 OPTIONS (table 'T 4');\n\n--Testcase 760:\nALTER FOREIGN TABLE ft1 OPTIONS (table 'T 1');\n--Testcase 761:\nALTER FOREIGN TABLE ft2 OPTIONS (table 'T 1');\n--Testcase 762:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 763:\nALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 5:\n\\det+\n\n-- Test that alteration of server options causes reconnection\n-- Remote's errors might be non-English, so hide them to ensure stable results\n\\set VERBOSITY terse\n--Testcase 6:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work\n\n--Testcase 764:\nALTER SERVER sqlite_svr OPTIONS (SET database 'no such database');\n--Testcase 7:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should fail\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_svr\n            OPTIONS (SET database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n--Testcase 8:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work again\n\\set VERBOSITY default\n\n-- Now we should be able to run ANALYZE.\n-- To exercise multiple code paths, we use local stats on ft1\n-- and remote-estimate mode on ft2.\n--ANALYZE ft1;\n--ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');\n\n-- ===================================================================\n-- test error case for create publication on foreign table\n-- ===================================================================\n--Testcase 955:\nCREATE PUBLICATION testpub_ftbl FOR TABLE ft1;  -- should fail\n\n-- ===================================================================\n-- simple queries\n-- ===================================================================\n-- single table without alias\n--Testcase 9:\nEXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n--Testcase 10:\nSELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n-- single table with alias - also test that tableoid sort is not pushed to remote side\n--Testcase 11:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n--Testcase 12:\nSELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n-- whole-row reference\n--Testcase 13:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 14:\nSELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- empty result\n--Testcase 15:\nSELECT * FROM ft1 WHERE false;\n-- with WHERE clause\n--Testcase 16:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n--Testcase 17:\nSELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n-- with FOR UPDATE/SHARE\n--Testcase 18:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 19:\nSELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 20:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n--Testcase 21:\nSELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n-- aggregate\n--Testcase 22:\nSELECT COUNT(*) FROM ft1 t1;\n-- subquery\n--Testcase 23:\nSELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;\n-- subquery+MAX\n--Testcase 24:\nSELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;\n-- used in CTE\n--Testcase 25:\nWITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;\n-- fixed values\n--Testcase 26:\nSELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;\n-- Test forcing the remote server to produce sorted data for a merge join.\n--Testcase 765:\nSET enable_hashjoin TO false;\n--Testcase 766:\nSET enable_nestloop TO false;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 27:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 28:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 29:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 30:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- A join between local table and foreign join. ORDER BY clause is added to the\n-- foreign join so that the local table can be joined using merge join strategy.\n--Testcase 31:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 32:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above, except that the full join prevents any equivalence\n-- classes from being merged. This produces single relation equivalence classes\n-- included in join restrictions.\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 34:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above with all full outer joins\n--Testcase 35:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 36:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 767:\nRESET enable_hashjoin;\n--Testcase 768:\nRESET enable_nestloop;\n\n-- Test executing assertion in estimate_path_cost_size() that makes sure that\n-- retrieved_rows for foreign rel re-used to cost pre-sorted foreign paths is\n-- a sensible value even when the rel has tuples=0\n-- CREATE TABLE loct_empty (c1 int NOT NULL, c2 text);\n--Testcase 769:\nCREATE FOREIGN TABLE ft_empty (c1 int NOT NULL, c2 text)\n  SERVER sqlite_svr OPTIONS (table 'loct_empty');\n--Testcase 770:\nINSERT INTO \"S 1\".loct_empty\n  SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id;\n--Testcase 771:\nDELETE FROM \"S 1\".loct_empty;\n-- ANALYZE ft_empty;\n--Testcase 772:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft_empty ORDER BY c1;\n\n-- ===================================================================\n-- WHERE with remotely-executable conditions\n-- ===================================================================\n--Testcase 37:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr\n--Testcase 39:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NULL;        -- NullTest\n--Testcase 40:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL;    -- NullTest\n--Testcase 41:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr\n--Testcase 42:\n\n--Testcase 956:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)\n--Testcase 44:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr\n--Testcase 45:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr\n--Testcase 46:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef\n--Testcase 47:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\\\bar';  -- check special chars\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote\n-- parameterized remote path for foreign table\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n--Testcase 50:\nSELECT * FROM ft2 a, ft2 b WHERE a.c1 = 47 AND b.c1 = a.c2;\n\n-- check both safe and unsafe join conditions\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft2 a, ft2 b\n  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n--Testcase 52:\nSELECT * FROM ft2 a, ft2 b\nWHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n-- bug before 9.3.5 due to sloppy handling of remote-estimate parameters\n--Testcase 53:\nSELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));\n--Testcase 54:\nSELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));\n-- we should not push order by clause with volatile expressions or unsafe\n-- collations\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, random();\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate \"C\";\n\n-- user-defined operator/function\n--Testcase 494:\nCREATE FUNCTION sqlite_fdw_abs(int) RETURNS int AS $$\nBEGIN\nRETURN abs($1);\nEND\n$$ LANGUAGE plpgsql IMMUTABLE;\n--Testcase 495:\nCREATE OPERATOR === (\n    LEFTARG = int,\n    RIGHTARG = int,\n    PROCEDURE = int4eq,\n    COMMUTATOR = ===\n);\n\n-- built-in operators and functions can be shipped for remote execution\n--Testcase 57:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 58:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 59:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 60:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n\n-- by default, user-defined ones cannot\n--Testcase 61:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 62:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 63:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 64:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- ORDER BY can be shipped, though\n--Testcase 496:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 497:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- but let's put them in an extension ...\n--Testcase 773:\nALTER EXTENSION sqlite_fdw ADD FUNCTION sqlite_fdw_abs(int);\n--Testcase 774:\nALTER EXTENSION sqlite_fdw ADD OPERATOR === (int, int);\n--ALTER SERVER sqlite_svr2 OPTIONS (ADD extensions 'sqlite_fdw');\n\n-- ... now they can be shipped\n--Testcase 498:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 499:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 500:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 501:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- and both ORDER BY and LIMIT can be shipped\n--Testcase 502:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 503:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- Test CASE pushdown\n--Testcase 957:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n--Testcase 958:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n\n-- Nested CASE\n--Testcase 959:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n--Testcase 960:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n-- CASE arg WHEN\n--Testcase 961:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- CASE cannot be pushed down because of unshippable arg clause\n--Testcase 962:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE random()::integer WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 963:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 964:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 965:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- check schema-qualification of regconfig constant\n--Testcase 984:\nCREATE TEXT SEARCH CONFIGURATION public.custom_search\n  (COPY = pg_catalog.english);\n--Testcase 985:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n--Testcase 986:\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n\n-- ===================================================================\n-- JOIN queries\n-- ===================================================================\n-- Analyze ft4 and ft5 so that we have better statistics. These tables do not\n-- have use_remote_estimate set.\n--ANALYZE ft4;\n--ANALYZE ft5;\n\n-- join two tables\n--Testcase 65:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 66:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join three tables\n--Testcase 67:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 68:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join\n--Testcase 69:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 70:\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- left outer join three tables\n--Testcase 71:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 72:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + placement of clauses.\n-- clauses within the nullable side are not pulled up, but top level clause on\n-- non-nullable side is pushed into non-nullable side\n--Testcase 73:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n--Testcase 74:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n-- clauses within the nullable side are not pulled up, but the top level clause\n-- on nullable side is not pushed down into nullable side\n--Testcase 75:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n--Testcase 76:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n-- right outer join\n--Testcase 77:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 78:\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join three tables\n--Testcase 79:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 80:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- full outer join\n--Testcase 81:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n--Testcase 82:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n-- full outer join with restrictions on the joining relations\n-- a. the joining relations are both base relations\n--Testcase 83:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 84:\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 85:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n--Testcase 86:\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n-- b. one of the joining relations is a base relation and the other is a join\n-- relation\n--Testcase 87:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 88:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- c. test deparsing the remote query as nested subqueries\n--Testcase 89:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 90:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- d. test deparsing rowmarked relations as subqueries\n--Testcase 91:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n--Testcase 92:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n-- full outer join + inner join\n--Testcase 93:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n--Testcase 94:\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n-- full outer join three tables\n--Testcase 95:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 96:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + right outer join\n--Testcase 97:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 98:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- right outer join + full outer join\n--Testcase 99:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 100:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + left outer join\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 102:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join + full outer join\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 104:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 775:\nSET enable_memoize TO off;\n-- right outer join + left outer join\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 106:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 776:\nRESET enable_memoize;\n-- left outer join + right outer join\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 108:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause, only matched rows\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 110:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause with shippable extensions set\n--Testcase 504:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--ALTER SERVER sqlite_svr2 OPTIONS (DROP extensions);\n-- full outer join + WHERE clause with shippable extensions not set\n--Testcase 505:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--Testcase 777:\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- join two tables with FOR UPDATE clause\n-- tests whole-row reference for row marks\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 112:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n--Testcase 114:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n-- join two tables with FOR SHARE clause\n--Testcase 115:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 116:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n--Testcase 118:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n-- join in CTE\n--Testcase 119:\nEXPLAIN (VERBOSE, COSTS OFF)\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n--Testcase 120:\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n-- ctid with whole-row reference\n--Testcase 121:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- SEMI JOIN, not pushed down\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 123:\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- ANTI JOIN, not pushed down\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 125:\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- CROSS JOIN can be pushed down\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 127:\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- different server, not pushed down. No result expected.\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 129:\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe join conditions (c8 has a UDT), not pushed down. Practically a CROSS\n-- JOIN since c8 in both tables has same value.\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 131:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe conditions on one side (c8 has a UDT), not pushed down.\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 133:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join where unsafe to pushdown condition in WHERE clause has a column not\n-- in the SELECT clause. In this test unsafe clause needs to have column\n-- references from both joining sides so that the clause is not pushed down\n-- into one of the joining sides.\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 135:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- Aggregate after UNION, for testing setrefs\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n--Testcase 137:\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n-- join with lateral reference\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n--Testcase 139:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n\n-- non-Var items in targetlist of the nullable rel of a join preventing\n-- push-down in some cases\n-- unable to push {ft1, ft2}\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n--Testcase 141:\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n\n-- ok to push {ft1, ft2} but not {ft1, ft2, ft4}\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n--Testcase 143:\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n\n-- join with nullable side with some columns with null values\n--Testcase 144:\nUPDATE ft5 SET c3 = null where c1 % 9 = 0;\n--Testcase 145:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n--Testcase 146:\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n\n-- multi-way join involving multiple merge joins\n-- (this case used to have EPQ-related planning problems)\n--Testcase 506:\nCREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1));\n--Testcase 507:\nINSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\nANALYZE local_tbl;\n--Testcase 778:\nSET enable_nestloop TO false;\n--Testcase 779:\nSET enable_hashjoin TO false;\n--Testcase 147:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE;\n--Testcase 148:\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 ORDER BY ft1.c1 FOR UPDATE;\n--Testcase 780:\nRESET enable_nestloop;\n--Testcase 781:\nRESET enable_hashjoin;\n\n-- test that add_paths_with_pathkeys_for_rel() arranges for the epq_path to\n-- return columns needed by the parent ForeignScan node\n-- This does not work as SQLite FDW does not support use_remote_estimate\n--Testcase 987:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foobar') FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100)) ss ON (local_tbl.c1 = ss.c1) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0');\n--Testcase 988:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND ft1.c1 = sqlite_fdw_abs(ft2.c2))) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n-- ALTER SERVER loopback OPTIONS (DROP fdw_startup_cost);\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n--DROP TABLE local_tbl;\n\n-- check join pushdown in situations where multiple userids are involved\n-- Although SQLite FDW does not need User and User mapping to connect to\n-- the database file, however, JOIN pushdown is decided by the core code.\n-- If outer and inner relation are foreign tables (or joins) belonging to\n-- the same server and assigned to the same user, join will be pushed down.\n-- Otherwise, join cannot be pushed down.\n-- In addition to an exact match of userid, we allow the case where one side\n-- has zero userid (implying current user) and the other side has explicit\n-- userid that happens to equal the current user; but in that case, pushdown of\n-- the join is only valid for the current user.\n--Testcase 508:\nCREATE ROLE regress_view_owner SUPERUSER;\n--Testcase 509:\n-- CREATE USER MAPPING FOR regress_view_owner SERVER sqlite_svr;\nGRANT SELECT ON ft4 TO regress_view_owner;\nGRANT SELECT ON ft5 TO regress_view_owner;\n\n--Testcase 510:\nCREATE VIEW v4 AS SELECT * FROM ft4;\n--Testcase 511:\nCREATE VIEW v5 AS SELECT * FROM ft5;\n--Testcase 782:\nALTER VIEW v5 OWNER TO regress_view_owner;\n--Testcase 149:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, different view owners\n--Testcase 150:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 783:\nALTER VIEW v4 OWNER TO regress_view_owner;\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 152:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, view owner not current user\n--Testcase 154:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 784:\nALTER VIEW v4 OWNER TO CURRENT_USER;\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 156:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 785:\nALTER VIEW v4 OWNER TO regress_view_owner;\n\n-- cleanup\n--Testcase 512:\nDROP OWNED BY regress_view_owner;\n--Testcase 513:\nDROP ROLE regress_view_owner;\n\n\n-- ===================================================================\n-- Aggregate and grouping queries\n-- ===================================================================\n\n-- Simple aggregates\n--Testcase 157:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n--Testcase 158:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n\n--Testcase 514:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n--Testcase 515:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n\n-- Aggregate is not pushed down as aggregation contains random()\n--Testcase 159:\nexplain (verbose, costs off)\nselect sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1;\n\n-- Aggregate over join query\n--Testcase 160:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n--Testcase 161:\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n\n-- Not pushed down due to local conditions present in underneath input rel\n--Testcase 162:\nexplain (verbose, costs off)\nselect sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1;\n\n-- GROUP BY clause having expressions\n--Testcase 163:\nexplain (verbose, costs off)\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n--Testcase 164:\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n\n-- Aggregates in subquery are pushed down.\n--Testcase 165:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n--Testcase 166:\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n\n-- Aggregate is still pushed down by taking unshippable expression out\n--Testcase 167:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n--Testcase 168:\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n\n-- Aggregate with unshippable GROUP BY clause are not pushed\n--Testcase 169:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1;\n\n-- GROUP BY clause in various forms, cardinal, alias and constant expression\n--Testcase 516:\nexplain (verbose, costs off)\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n--Testcase 517:\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n\n-- GROUP BY clause referring to same column multiple times\n-- Also, ORDER BY contains an aggregate function\n--Testcase 170:\n\n--Testcase 966:\nexplain (verbose, costs off)\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n--Testcase 171:\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n\n-- Testing HAVING clause shippability\n--Testcase 172:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n--Testcase 173:\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n\n-- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down\n--Testcase 174:\nexplain (verbose, costs off)\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n--Testcase 175:\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n\n-- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down\n--Testcase 176:\nexplain (verbose, costs off)\nselect sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1;\n\n-- Remote aggregate in combination with a local Param (for the output\n-- of an initplan) can be trouble, per bug #15781\n--Testcase 518:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n--Testcase 519:\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n\n--Testcase 520:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n--Testcase 521:\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n\n\n-- Testing ORDER BY, DISTINCT, FILTER, Ordered-sets and VARIADIC within aggregates\n\n-- ORDER BY within aggregate, same column used to order\n--Testcase 177:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n--Testcase 178:\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n\n-- ORDER BY within aggregate, different column used to order also using DESC\n--Testcase 179:\nexplain (verbose, costs off)\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n--Testcase 180:\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n\n-- DISTINCT within aggregate\n--Testcase 181:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 182:\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- DISTINCT combined with ORDER BY within aggregate\n--Testcase 183:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 184:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n--Testcase 185:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 186:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- FILTER within aggregate\n--Testcase 187:\nexplain (verbose, costs off)\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n--Testcase 188:\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n\n-- DISTINCT, ORDER BY and FILTER within aggregate\n--Testcase 189:\nexplain (verbose, costs off)\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n--Testcase 190:\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n\n-- Outer query is aggregation query\n--Testcase 191:\nexplain (verbose, costs off)\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 192:\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n-- Inner query is aggregation query\n--Testcase 193:\nexplain (verbose, costs off)\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 194:\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n\n-- Aggregate not pushed down as FILTER condition is not pushable\n--Testcase 195:\nexplain (verbose, costs off)\nselect sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1;\n--Testcase 196:\nexplain (verbose, costs off)\nselect sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1;\n\n-- Ordered-sets within aggregate\n--Testcase 197:\nexplain (verbose, costs off)\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n--Testcase 198:\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n\n-- Using multiple arguments within aggregates\n--Testcase 199:\nexplain (verbose, costs off)\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n--Testcase 200:\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n\n-- User defined function for user defined aggregate, VARIADIC\n--Testcase 522:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n--Testcase 523:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n-- Disable hash aggregation for plan stability.\n--Testcase 786:\nset enable_hashagg to false;\n\n-- Not pushed down due to user defined aggregate\n--Testcase 524:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Add function and aggregate into extension\n--alter extension postgres_fdw add function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw add aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now aggregate will be pushed.  Aggregate will display VARIADIC argument.\n--Testcase 525:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n--Testcase 526:\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n\n-- Remove function and aggregate from extension\n--alter extension postgres_fdw drop function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw drop aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Not pushed down as we have dropped objects from extension.\n--Testcase 527:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Cleanup\n--Testcase 787:\nreset enable_hashagg;\n--Testcase 528:\ndrop aggregate least_agg(variadic items anyarray);\n--Testcase 529:\ndrop function least_accum(anyelement, variadic anyarray);\n\n\n-- Testing USING OPERATOR() in ORDER BY within aggregate.\n-- For this, we need user defined operators along with operator family and\n-- operator class.  Create those and then add them in extension.  Note that\n-- user defined objects are considered unshippable unless they are part of\n-- the extension.\n--Testcase 530:\ncreate operator public.<^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4eq\n);\n\n--Testcase 531:\ncreate operator public.=^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4lt\n);\n\n--Testcase 532:\ncreate operator public.>^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4gt\n);\n\n--Testcase 533:\ncreate operator family my_op_family using btree;\n\n--Testcase 534:\ncreate function my_op_cmp(a int, b int) returns int as\n  $$begin return btint4cmp(a, b); end $$ language plpgsql;\n\n--Testcase 535:\ncreate operator class my_op_class for type int using btree family my_op_family as\n operator 1 public.<^,\n operator 3 public.=^,\n operator 5 public.>^,\n function 1 my_op_cmp(int, int);\n\n-- This will not be pushed as user defined sort operator is not part of the\n-- extension yet.\n--Testcase 536:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- This should not be pushed either.\n--Testcase 967:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Update local stats on ft2\n--ANALYZE ft2;\n\n-- Add into extension\n--Testcase 788:\nalter extension sqlite_fdw add operator class my_op_class using btree;\n--Testcase 789:\nalter extension sqlite_fdw add function my_op_cmp(a int, b int);\n--Testcase 790:\nalter extension sqlite_fdw add operator family my_op_family using btree;\n--Testcase 791:\nalter extension sqlite_fdw add operator public.<^(int, int);\n--Testcase 792:\nalter extension sqlite_fdw add operator public.=^(int, int);\n--Testcase 793:\nalter extension sqlite_fdw add operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now this will be pushed as sort operator is part of the extension.\n--Testcase 537:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--Testcase 538:\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- This should be pushed too.\n-- Sqlite not support pushdown user defined operators \n--Testcase 968:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Remove from extension\n--Testcase 794:\nalter extension sqlite_fdw drop operator class my_op_class using btree;\n--Testcase 795:\nalter extension sqlite_fdw drop function my_op_cmp(a int, b int);\n--Testcase 796:\nalter extension sqlite_fdw drop operator family my_op_family using btree;\n--Testcase 797:\nalter extension sqlite_fdw drop operator public.<^(int, int);\n--Testcase 798:\nalter extension sqlite_fdw drop operator public.=^(int, int);\n--Testcase 799:\nalter extension sqlite_fdw drop operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- This will not be pushed as sort operator is now removed from the extension.\n--Testcase 539:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Cleanup\n--Testcase 540:\ndrop operator class my_op_class using btree;\n--Testcase 541:\ndrop function my_op_cmp(a int, b int);\n--Testcase 542:\ndrop operator family my_op_family using btree;\n--Testcase 543:\ndrop operator public.>^(int, int);\n--Testcase 544:\ndrop operator public.=^(int, int);\n--Testcase 545:\ndrop operator public.<^(int, int);\n\n-- Input relation to aggregate push down hook is not safe to pushdown and thus\n-- the aggregate cannot be pushed down to foreign server.\n--Testcase 201:\nexplain (verbose, costs off)\nselect count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2);\n\n-- Subquery in FROM clause having aggregate\n--Testcase 202:\nexplain (verbose, costs off)\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n--Testcase 203:\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n\n-- FULL join with IS NULL check in HAVING\n--Testcase 204:\nexplain (verbose, costs off)\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n--Testcase 205:\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n\n-- Aggregate over FULL join needing to deparse the joining relations as\n-- subqueries.\n--Testcase 206:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n--Testcase 207:\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n\n-- ORDER BY expression is part of the target list but not pushed down to\n-- foreign server.\n--Testcase 208:\nexplain (verbose, costs off)\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n--Testcase 209:\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n\n-- LATERAL join, with parameterization\n--Testcase 800:\nset enable_hashagg to false;\n--Testcase 210:\nexplain (verbose, costs off)\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 211:\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 801:\nreset enable_hashagg;\n\n-- bug #15613: bad plan for foreign table scan with lateral reference\n--Testcase 546:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n--Testcase 547:\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n-- Check with placeHolderVars\n--Testcase 212:\nexplain (verbose, costs off)\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n--Testcase 213:\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n\n\n-- Not supported cases\n-- Grouping sets\n--Testcase 214:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 215:\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 216:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 217:\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 218:\nexplain (verbose, costs off)\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 219:\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 220:\nexplain (verbose, costs off)\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n--Testcase 221:\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n\n-- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed\n--Testcase 222:\nexplain (verbose, costs off)\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n--Testcase 223:\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n\n-- WindowAgg\n--Testcase 224:\nexplain (verbose, costs off)\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 225:\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 226:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 227:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 228:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 229:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n\n\n-- ===================================================================\n-- parameterized queries\n-- ===================================================================\n-- simple join\n--Testcase 230:\nPREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);\n--Testcase 232:\nEXECUTE st1(1, 1);\n--Testcase 233:\nEXECUTE st1(101, 101);\n-- subquery using stable function (can't be sent to remote)\n--Testcase 234:\nPREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 235:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);\n--Testcase 236:\nEXECUTE st2(10, 20);\n--Testcase 237:\nEXECUTE st2(101, 121);\n-- subquery using immutable function (can be sent to remote)\n--Testcase 238:\nPREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 239:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);\n--Testcase 240:\nEXECUTE st3(10, 20);\n--Testcase 241:\nEXECUTE st3(20, 30);\n-- custom plan should be chosen initially\n--Testcase 242:\nPREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;\n--Testcase 243:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 244:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 245:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 246:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 247:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- once we try it enough times, should switch to generic plan\n--Testcase 248:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- value of $1 should not be sent to remote\n--Testcase 249:\nPREPARE st5(text,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 254:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 255:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 256:\nEXECUTE st5('foo', 1);\n\n-- altering FDW options requires replanning\n--Testcase 257:\nPREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 258:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 259:\nPREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo');\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 548:\nINSERT INTO \"S 1\".\"T 0\" SELECT * FROM \"S 1\".\"T 1\";\n--Testcase 802:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 0');\n--Testcase 261:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 262:\nEXECUTE st6;\n--Testcase 263:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 803:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 1');\n\n--Testcase 549:\nPREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 550:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 551:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--Testcase 552:\nEXECUTE st8;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- cleanup\nDEALLOCATE st1;\nDEALLOCATE st2;\nDEALLOCATE st3;\nDEALLOCATE st4;\nDEALLOCATE st5;\nDEALLOCATE st6;\nDEALLOCATE st7;\nDEALLOCATE st8;\n\n-- System columns, except ctid and oid, should not be sent to remote\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;\n--Testcase 265:\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1;\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 267:\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 553:\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 554:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n--Testcase 271:\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n\n-- ===================================================================\n-- used in PL/pgSQL function\n-- ===================================================================\n--Testcase 555:\nCREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$\nDECLARE\n\tv_c1 int;\nBEGIN\n--Testcase 556:\n    SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;\n    PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;\n    RETURN v_c1;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 272:\nSELECT f_test(100);\n--Testcase 557:\nDROP FUNCTION f_test(int);\n\n-- ===================================================================\n-- REINDEX\n-- ===================================================================\n-- remote table is not created here\n--Testcase 804:\nCREATE FOREIGN TABLE reindex_foreign (c1 int, c2 int)\n  SERVER sqlite_svr2 OPTIONS (table 'reindex_local');\nREINDEX TABLE reindex_foreign; -- error\nREINDEX TABLE CONCURRENTLY reindex_foreign; -- error\n--Testcase 805:\nDROP FOREIGN TABLE reindex_foreign;\n-- partitions and foreign tables\n--Testcase 806:\nCREATE TABLE reind_fdw_parent (c1 int) PARTITION BY RANGE (c1);\n--Testcase 807:\nCREATE TABLE reind_fdw_0_10 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (0) TO (10);\n--Testcase 808:\nCREATE FOREIGN TABLE reind_fdw_10_20 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (10) TO (20)\n  SERVER sqlite_svr OPTIONS (table 'reind_local_10_20');\nREINDEX TABLE reind_fdw_parent; -- ok\nREINDEX TABLE CONCURRENTLY reind_fdw_parent; -- ok\n--Testcase 809:\nDROP TABLE reind_fdw_parent;\n\n-- ===================================================================\n-- conversion error\n-- ===================================================================\n--Testcase 810:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;\n--Testcase 273:\nSELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1;\n--Testcase 274:\nSELECT  ftx.x1,  ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 275:\nSELECT  ftx.x1,  ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 276:\nSELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8;\n-- ANALYZE ft1; -- ERROR\n\n-- ===================================================================\n-- local type can be different from remote type in some cases,\n-- in particular if similarly-named operators do equivalent things\n-- ===================================================================\n--Testcase 811:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text;\n--Testcase 969:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 970:\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 971:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n--Testcase 972:\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n-- we declared c8 to be text locally, but it's still the same type on\n-- the remote which will balk if we try to do anything incompatible\n-- with that remote type\n-- Can not create user define type in SqliteDB.\n-- Type c8 of foreign table ft1 and remote table T1 are \n-- match. These case below not error with sqlite_fdw. \n-- with that remote type\n--Testcase 973:\nSELECT * FROM ft1 WHERE c8 LIKE 'foo' LIMIT 1; -- ERROR\n--Testcase 974:\nSELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed down\n\n-- ===================================================================\n-- subtransaction\n--  + local/remote error doesn't break cursor\n-- ===================================================================\nBEGIN;\nDECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;\n--Testcase 277:\nFETCH c;\nSAVEPOINT s;\nERROR OUT;          -- ERROR\nROLLBACK TO s;\n--Testcase 278:\nFETCH c;\nSAVEPOINT s;\n--Testcase 279:\nSELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR\nROLLBACK TO s;\n--Testcase 280:\nFETCH c;\n--Testcase 281:\nSELECT * FROM ft1 ORDER BY c1 LIMIT 1;\nCOMMIT;\n\n-- ===================================================================\n-- test handling of collations\n-- ===================================================================\n--Testcase 558:\ncreate foreign table ft3 (f1 text collate \"C\", f2 text, f3 varchar(10)) server sqlite_svr;\n\n-- can be sent to remote\n--Testcase 559:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo';\n--Testcase 560:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"C\" = 'foo';\n--Testcase 561:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo';\n--Testcase 562:\nexplain (verbose, costs off) select * from ft3 where f3 = 'foo';\n--Testcase 563:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 and l.f1 = 'foo';\n-- can't be sent to remote\n--Testcase 564:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"POSIX\" = 'foo';\n--Testcase 565:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE \"C\";\n--Testcase 566:\nexplain (verbose, costs off) select * from ft3 where f2 COLLATE \"C\" = 'foo';\n--Testcase 567:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE \"C\";\n--Testcase 568:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 COLLATE \"POSIX\" and l.f1 = 'foo';\n\n-- ===================================================================\n-- test writable foreign table stuff\n-- ===================================================================\n--Testcase 282:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 283:\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 284:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc');\n--Testcase 285:\nSELECT * FROM ft2 WHERE c1 >= 1101;\n--Testcase 286:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');\n--Testcase 287:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;              -- can be pushed down\n--Testcase 288:\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;\n--Testcase 289:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;  -- can be pushed down\n--Testcase 290:\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;\n--Testcase 291:\nSELECT * FROM ft2 WHERE c1 % 10 = 7;\n--Testcase 292:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;                               -- can be pushed down\n--Testcase 293:\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;\n--Testcase 294:\nEXPLAIN (verbose, costs off)\n  DELETE FROM ft2 WHERE c1 % 10 = 5;                               -- can be pushed down\n--Testcase 295:\nSELECT c1, c4 FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 569:\nDELETE FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 297:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;                -- can be pushed down\n--Testcase 298:\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;\n--Testcase 299:\nSELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;\n--Testcase 300:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 301:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 302:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;             -- can be pushed down\n--Testcase 303:\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;\n--Testcase 304:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 WHERE c1 = 1200;                       -- can be pushed down\n--Testcase 305:\nDELETE FROM ft2 WHERE c1 = 1200;\n\n-- Test UPDATE/DELETE on a three-table join\n--Testcase 306:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id;\n--Testcase 307:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;       -- can be pushed down\n--Testcase 308:\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;\n--Testcase 309:\nSELECT ft2, ft2.*, ft4, ft4.*\n  FROM ft2 INNER JOIN ft4 ON (ft2.c1 > 1200 AND ft2.c2 = ft4.c1)\n  INNER JOIN ft5 ON (ft4.c1 = ft5.c1);\n--Testcase 310:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;                          -- can be pushed down\n--Testcase 311:\nSELECT 100 FROM ft2, ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n\n--Testcase 570:\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n--Testcase 312:\nDELETE FROM ft2 WHERE ft2.c1 > 1200;\n\n-- Test UPDATE with a MULTIEXPR sub-select\n-- (maybe someday this'll be remotely executable, but not today)\n--Testcase 571:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n--Testcase 572:\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n--Testcase 573:\nUPDATE ft2 AS target SET (c2) = (\n    SELECT c2 / 10\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n-- Test UPDATE involving a join that can be pushed down,\n-- but a SET clause that can't be\n--Testcase 812:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n--Testcase 813:\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n\n-- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing\n-- user-defined operators/functions\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 574:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;\n--Testcase 575:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;            -- can't be pushed down\n--Testcase 576:\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 577:\nSELECT * FROM ft2 WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 578:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;                                                    -- can't be pushed down\n--Testcase 579:\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n--Testcase 580:\nSELECT ft2.*, ft4.*, ft5.* \n  FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n\n--Testcase 581:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 582:\nSELECT ft2.c1, ft2.c2, ft2.c3 FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 583:\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;\n\n--Testcase 584:\nDELETE FROM ft2 WHERE ft2.c1 > 2000;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n-- Test that trigger on remote table works as expected\n--Testcase 585:\nCREATE OR REPLACE FUNCTION \"S 1\".F_BRTRIG() RETURNS trigger AS $$\nBEGIN\n    NEW.c3 = NEW.c3 || '_trig_update';\n    RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 586:\nCREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE\n    ON ft2 FOR EACH ROW EXECUTE PROCEDURE \"S 1\".F_BRTRIG();\n\n--Testcase 313:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff');\n--Testcase 314:\nSELECT * FROM ft2 WHERE c1 = 1208;\n--Testcase 315:\nINSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;');\n--Testcase 316:\nSELECT * FROM ft2 WHERE c1 = 1218;\n--Testcase 317:\nUPDATE ft2 SET c2 = c2 + 600, c3 = c3 WHERE c1 % 10 = 8 AND c1 < 1200;\n--Testcase 318:\nSELECT * FROM ft2 WHERE c1 % 10 = 8 AND c1 < 1200;\n\n-- Test errors thrown on remote side during update\n-- create table in the remote server with check contraint\n--Testcase 738:\nCREATE FOREIGN TABLE ft1_constraint (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr OPTIONS (table 't1_constraint');\n--Testcase 747:\nINSERT INTO ft1_constraint SELECT * FROM ft1 ON CONFLICT DO NOTHING;\n-- c2 must be greater than or equal to 0, so this case is ignored.\n--Testcase 754:\nINSERT INTO ft1_constraint(c1, c2) VALUES (2222, -2) ON CONFLICT DO NOTHING; -- ignore, do nothing\n--Testcase 755:\nSELECT c1, c2 FROM ft1_constraint WHERE c1 = 2222 or c2 = -2; -- empty result\n--Testcase 748:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 749:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n--Testcase 319:\nINSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key\n--Testcase 320:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported\n--Testcase 321:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported\n--Testcase 743:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 744:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 750:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_constraint;\n--Testcase 751:\nALTER FOREIGN TABLE ft1_org RENAME TO ft1;\n\n-- Test savepoint/rollback behavior\n--Testcase 322:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 323:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\nbegin;\n--Testcase 324:\nupdate ft2 set c2 = 42 where c2 = 0;\n--Testcase 325:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s1;\n--Testcase 326:\nupdate ft2 set c2 = 44 where c2 = 4;\n--Testcase 327:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s1;\n--Testcase 328:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s2;\n--Testcase 329:\nupdate ft2 set c2 = 46 where c2 = 6;\n--Testcase 330:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrollback to savepoint s2;\n--Testcase 331:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s2;\n--Testcase 332:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s3;\n--Testcase 333:\n--skip, does not support CHECK\n--update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side\nrollback to savepoint s3;\n--Testcase 334:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s3;\n--Testcase 335:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n-- none of the above is committed yet remotely\n--Testcase 336:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\ncommit;\n--Testcase 337:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 338:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\n\n--VACUUM ANALYZE \"S 1\".\"T 1\";\n\n-- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs\n-- FIRST behavior here.\n-- ORDER BY DESC NULLS LAST options\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10;\n--Testcase 340:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795  LIMIT 10;\n-- ORDER BY DESC NULLS FIRST options\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 342:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n-- ORDER BY ASC NULLS FIRST options\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 344:\nSELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n\n-- ===================================================================\n-- test check constraints\n-- ===================================================================\n--Testcase 752:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 753:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n-- Consistent check constraints provide consistent results\n--Testcase 814:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0);\n--Testcase 587:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 588:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 815:\nSET constraint_exclusion = 'on';\n--Testcase 589:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 590:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 816:\nRESET constraint_exclusion;\n-- check constraint is enforced on the remote side, not locally\n--Testcase 745:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 746:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 817:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2positive;\n\n-- But inconsistent check constraints provide inconsistent results\n--Testcase 818:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 592:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 819:\nSET constraint_exclusion = 'on';\n--Testcase 593:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 594:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 820:\nRESET constraint_exclusion;\n-- local check constraint is not actually enforced\n--Testcase 595:\nINSERT INTO ft1(c1, c2) VALUES(1111, 2);\n--Testcase 596:\nUPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1;\n--Testcase 821:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative;\n\n-- ===================================================================\n-- test WITH CHECK OPTION constraints\n-- ===================================================================\n--Testcase 597:\nCREATE FUNCTION row_before_insupd_trigfunc() RETURNS trigger AS $$BEGIN NEW.a := NEW.a + 10; RETURN NEW; END$$ LANGUAGE plpgsql;\n\n--Testcase 598:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 599:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n--Testcase 600:\nCREATE VIEW rw_view AS SELECT * FROM foreign_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 601:\n\\d+ rw_view\n\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 602:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 603:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 604:\nINSERT INTO rw_view VALUES (0, 15); -- error\n--Testcase 605:\nSELECT * FROM foreign_tbl;\n\n--Testcase 606:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 607:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 608:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 609:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 610:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 989:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 990:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 991:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 611:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 612:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n\n-- test WCO for partitions\n\n--Testcase 613:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 614:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n\n--Testcase 615:\nCREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);\n--Testcase 822:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n-- Detach and re-attach once, to stress the concurrent detach case.\n--Testcase 975:\nALTER TABLE parent_tbl DETACH PARTITION foreign_tbl CONCURRENTLY;\n--Testcase 976:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n\n--Testcase 616:\nCREATE VIEW rw_view AS SELECT * FROM parent_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 617:\n\\d+ rw_view\n\n--Testcase 618:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 619:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 620:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 621:\nINSERT INTO rw_view VALUES (0, 15); -- ok\n--Testcase 622:\nSELECT * FROM foreign_tbl;\n\n--Testcase 623:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 624:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 625:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 626:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 627:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 992:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 993:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 994:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 628:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n--Testcase 629:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 630:\nDROP TABLE parent_tbl CASCADE;\n\n--Testcase 631:\nDROP FUNCTION row_before_insupd_trigfunc;\n\n-- ===================================================================\n-- test serial columns (ie, sequence-based defaults)\n-- ===================================================================\n--Testcase 632:\ncreate foreign table loc1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr;\n--Testcase 633:\ncreate foreign table rem1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr options(table 'loc1');\n--Testcase 352:\nselect pg_catalog.setval('rem1_f1_seq', 10, false);\n--Testcase 353:\ninsert into loc1(f2) values('hi');\n--Testcase 634:\ninsert into rem1(f2) values('hi remote');\n--Testcase 354:\ninsert into loc1(f2) values('bye');\n--Testcase 635:\ninsert into rem1(f2) values('bye remote');\n--Testcase 355:\nselect f1, f2 from loc1;\n--Testcase 636:\nselect f1, f2 from rem1;\n\n-- ===================================================================\n-- test generated columns\n-- ===================================================================\n--Testcase 637:\ncreate foreign table grem1 (\n  a int options (key 'true'),\n  b int generated always as (a * 2) stored)\n  server sqlite_svr options(table 'grem1_post14');\n--Testcase 638:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 823:\ninsert into grem1 (a) values (1), (2);\n--Testcase 639:\nexplain (verbose, costs off)\nupdate grem1 set a = 22 where a = 2;\n--Testcase 824:\nupdate grem1 set a = 22 where a = 2;\n--Testcase 640:\nselect * from grem1;\n--Testcase 825:\ndelete from grem1;\n\n-- -- test copy from\n-- copy grem1 from stdin;\n-- 1\n-- 2\n-- \\.\n-- select * from grem1;\n-- delete from grem1;\n\n-- test batch insert\n--Testcase 826:\nalter server sqlite_svr options (add batch_size '10');\n--Testcase 827:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 828:\ninsert into grem1 (a) values (1), (2);\n--Testcase 829:\nselect * from grem1;\n--Testcase 830:\ndelete from grem1;\n--Testcase 831:\nalter server sqlite_svr options (drop batch_size);\n\n-- ===================================================================\n-- test local triggers\n-- ===================================================================\n\n-- Trigger functions \"borrowed\" from triggers regress test.\n--Testcase 641:\nCREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$\nBEGIN\n\tRAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',\n\t\tTG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;\n\tRETURN NULL;\nEND;$$;\n\n--Testcase 642:\nCREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 643:\nCREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n\n--Testcase 644:\nCREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger\nLANGUAGE plpgsql AS $$\n\ndeclare\n\toldnew text[];\n\trelid text;\n    argstr text;\nbegin\n\n\trelid := TG_relid::regclass;\n\targstr := '';\n\tfor i in 0 .. TG_nargs - 1 loop\n\t\tif i > 0 then\n\t\t\targstr := argstr || ', ';\n\t\tend if;\n\t\targstr := argstr || TG_argv[i];\n\tend loop;\n\n    RAISE NOTICE '%(%) % % % ON %',\n\t\ttg_name, argstr, TG_when, TG_level, TG_OP, relid;\n    oldnew := '{}'::text[];\n\tif TG_OP != 'INSERT' then\n\t\toldnew := array_append(oldnew, format('OLD: %s', OLD));\n\tend if;\n\n\tif TG_OP != 'DELETE' then\n\t\toldnew := array_append(oldnew, format('NEW: %s', NEW));\n\tend if;\n\n    RAISE NOTICE '%', array_to_string(oldnew, ',');\n\n\tif TG_OP = 'DELETE' then\n\t\treturn OLD;\n\telse\n\t\treturn NEW;\n\tend if;\nend;\n$$;\n\n-- Test basic functionality\n--Testcase 645:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 646:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 356:\ndelete from rem1;\n--Testcase 357:\ninsert into rem1 values(1,'insert');\n--Testcase 358:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 359:\nupdate rem1 set f2 = f2 || f2;\n\n\n-- cleanup\n--Testcase 647:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 648:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 649:\nDROP TRIGGER trig_stmt_before ON rem1;\n--Testcase 650:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n--Testcase 360:\nDELETE from rem1;\n\n-- Test multiple AFTER ROW triggers on a foreign table\n--Testcase 651:\nCREATE TRIGGER trig_row_after1\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 652:\nCREATE TRIGGER trig_row_after2\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 653:\ninsert into rem1 values(1,'insert');\n--Testcase 654:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 655:\nupdate rem1 set f2 = f2 || f2;\n--Testcase 656:\ndelete from rem1;\n\n-- cleanup\n--Testcase 657:\nDROP TRIGGER trig_row_after1 ON rem1;\n--Testcase 658:\nDROP TRIGGER trig_row_after2 ON rem1;\n\n-- Test WHEN conditions\n\n--Testcase 659:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 660:\nCREATE TRIGGER trig_row_after_insupd\nAFTER INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Insert or update not matching: nothing happens\n--Testcase 363:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 364:\nUPDATE rem1 set f2 = 'test';\n\n-- Insert or update matching: triggers are fired\n--Testcase 365:\nINSERT INTO rem1 values(2, 'update');\n--Testcase 366:\nUPDATE rem1 set f2 = 'update update' where f1 = '2';\n\n--Testcase 661:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 662:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Trigger is fired for f1=2, not for f1=1\n--Testcase 369:\nDELETE FROM rem1;\n\n-- cleanup\n--Testcase 663:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 664:\nDROP TRIGGER trig_row_after_insupd ON rem1;\n--Testcase 665:\nDROP TRIGGER trig_row_before_delete ON rem1;\n--Testcase 666:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n\n-- Test various RETURN statements in BEFORE triggers.\n\n--Testcase 667:\nCREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$\n  BEGIN\n    NEW.f2 := NEW.f2 || ' triggered !';\n    RETURN NEW;\n  END\n$$ language plpgsql;\n\n--Testcase 668:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n-- The new values should have 'triggered' appended\n--Testcase 370:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 371:\nSELECT f1, f2 from rem1;\n--Testcase 372:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 373:\nSELECT f1, f2 from rem1;\n--Testcase 374:\nUPDATE rem1 set f2 = '';\n--Testcase 375:\nSELECT f1, f2 from rem1;\n--Testcase 376:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 377:\nSELECT f1, f2 from rem1;\n\n--Testcase 669:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f1 = 10;          -- all columns should be transmitted\n--Testcase 670:\nUPDATE rem1 set f1 = 10;\n--Testcase 671:\nSELECT f1, f2 from rem1;\n\n--Testcase 378:\nDELETE FROM rem1;\n\n-- Add a second trigger, to check that the changes are propagated correctly\n-- from trigger to trigger\n--Testcase 672:\nCREATE TRIGGER trig_row_before_insupd2\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 379:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 380:\nSELECT f1, f2 from rem1;\n--Testcase 381:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 382:\nSELECT f1, f2 from rem1;\n--Testcase 383:\nUPDATE rem1 set f2 = '';\n--Testcase 384:\nSELECT f1, f2 from rem1;\n--Testcase 385:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 386:\nSELECT f1, f2 from rem1;\n\n--Testcase 673:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 674:\nDROP TRIGGER trig_row_before_insupd2 ON rem1;\n\n--Testcase 387:\nDELETE from rem1;\n\n--Testcase 388:\nINSERT INTO rem1 VALUES (1, 'test');\n\n-- Test with a trigger returning NULL\n--Testcase 675:\nCREATE FUNCTION trig_null() RETURNS TRIGGER AS $$\n  BEGIN\n    RETURN NULL;\n  END\n$$ language plpgsql;\n\n--Testcase 676:\nCREATE TRIGGER trig_null\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_null();\n\n-- Nothing should have changed.\n--Testcase 389:\nINSERT INTO rem1 VALUES (2, 'test2');\n\n--Testcase 390:\nSELECT f1, f2 from rem1;\n\n--Testcase 391:\nUPDATE rem1 SET f2 = 'test2';\n\n--Testcase 392:\nSELECT f1, f2 from rem1;\n\n--Testcase 393:\nDELETE from rem1;\n\n--Testcase 394:\nSELECT f1, f2 from rem1;\n\n--Testcase 677:\nDROP TRIGGER trig_null ON rem1;\n--Testcase 395:\nDELETE from rem1;\n\n-- Test a combination of local and remote triggers\n--Testcase 678:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 679:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 680:\nCREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 681:\nINSERT INTO rem1(f2) VALUES ('test');\n--Testcase 682:\nUPDATE rem1 SET f2 = 'testo';\n\n-- Test returning a system attribute\n--Testcase 683:\nINSERT INTO rem1(f2) VALUES ('test');\n\n-- cleanup\n--Testcase 684:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 685:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 686:\nDROP TRIGGER trig_local_before ON rem1;\n\n\n-- Test direct foreign table modification functionality\n--Testcase 832:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 833:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1 WHERE false;     -- currently can't be pushed down\n\n-- Test with statement-level triggers\n--Testcase 687:\nCREATE TRIGGER trig_stmt_before\n\tBEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 396:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 397:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 688:\nDROP TRIGGER trig_stmt_before ON rem1;\n\n--Testcase 689:\nCREATE TRIGGER trig_stmt_after\n\tAFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 398:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 399:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 690:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n-- Test with row-level ON INSERT triggers\n--Testcase 691:\nCREATE TRIGGER trig_row_before_insert\nBEFORE INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 400:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 401:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 692:\nDROP TRIGGER trig_row_before_insert ON rem1;\n\n--Testcase 693:\nCREATE TRIGGER trig_row_after_insert\nAFTER INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 402:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 403:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 694:\nDROP TRIGGER trig_row_after_insert ON rem1;\n\n-- Test with row-level ON UPDATE triggers\n--Testcase 695:\nCREATE TRIGGER trig_row_before_update\nBEFORE UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 404:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 405:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 696:\nDROP TRIGGER trig_row_before_update ON rem1;\n\n--Testcase 697:\nCREATE TRIGGER trig_row_after_update\nAFTER UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 406:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 407:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 698:\nDROP TRIGGER trig_row_after_update ON rem1;\n\n-- Test with row-level ON DELETE triggers\n--Testcase 699:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 408:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 409:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 700:\nDROP TRIGGER trig_row_before_delete ON rem1;\n\n--Testcase 701:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 410:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 411:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 702:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n-- ===================================================================\n-- test inheritance features\n-- ===================================================================\n\n--Testcase 703:\nCREATE TABLE a (aa TEXT);\n--Testcase 834:\nALTER TABLE a SET (autovacuum_enabled = 'false');\n--Testcase 704:\nCREATE FOREIGN TABLE b (aa TEXT OPTIONS (key 'true'), bb TEXT) INHERITS (a)\n  SERVER sqlite_svr OPTIONS (table 'loct');\n\n--Testcase 412:\nINSERT INTO a(aa) VALUES('aaa');\n--Testcase 413:\nINSERT INTO a(aa) VALUES('aaaa');\n--Testcase 414:\nINSERT INTO a(aa) VALUES('aaaaa');\n\n--Testcase 415:\nINSERT INTO b(aa) VALUES('bbb');\n--Testcase 416:\nINSERT INTO b(aa) VALUES('bbbb');\n--Testcase 417:\nINSERT INTO b(aa) VALUES('bbbbb');\n\n--Testcase 418:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 419:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 420:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 421:\nUPDATE a SET aa = 'zzzzzz' WHERE aa LIKE 'aaaa%';\n\n--Testcase 422:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 423:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 424:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 425:\nUPDATE b SET aa = 'new';\n\n--Testcase 426:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 427:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 428:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 429:\nUPDATE a SET aa = 'newtoo';\n\n--Testcase 430:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 431:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 432:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 433:\nDELETE FROM a;\n\n--Testcase 434:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 435:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 436:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 705:\nDROP TABLE a CASCADE;\n\n-- Check SELECT FOR UPDATE/SHARE with an inherited source table\n\n--Testcase 706:\ncreate table foo (f1 int, f2 int);\n--Testcase 707:\ncreate foreign table foo2 (f3 int OPTIONS (key 'true')) inherits (foo)\n  server sqlite_svr options (table 'loct1');\n--Testcase 708:\ncreate table bar (f1 int, f2 int);\n--Testcase 709:\ncreate foreign table bar2 (f3 int OPTIONS (key 'true')) inherits (bar)\n  server sqlite_svr options (table 'loct2');\n\n--Testcase 835:\nalter table foo set (autovacuum_enabled = 'false');\n--Testcase 836:\nalter table bar set (autovacuum_enabled = 'false');\n\n--Testcase 437:\ninsert into foo values(1,1);\n--Testcase 438:\ninsert into foo values(3,3);\n--Testcase 439:\ninsert into foo2 values(2,2,2);\n--Testcase 440:\ninsert into foo2 values(4,4,4);\n--Testcase 441:\ninsert into bar values(1,11);\n--Testcase 442:\ninsert into bar values(2,22);\n--Testcase 443:\ninsert into bar values(6,66);\n--Testcase 444:\ninsert into bar2 values(3,33,33);\n--Testcase 445:\ninsert into bar2 values(4,44,44);\n--Testcase 446:\ninsert into bar2 values(7,77,77);\n\n--Testcase 447:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for update;\n--Testcase 448:\nselect * from bar where f1 in (select f1 from foo) for update;\n\n--Testcase 449:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for share;\n--Testcase 450:\nselect * from bar where f1 in (select f1 from foo) for share;\n\n-- Now check SELECT FOR UPDATE/SHARE with an inherited source table,\n-- where the parent is itself a foreign table\n--Testcase 837:\ncreate foreign table foo2child (f3 int) inherits (foo2)\n  server sqlite_svr options (table 'loct4_2');\n\n--Testcase 838:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 839:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 840:\ndrop foreign table foo2child;\n\n-- And with a local child relation of the foreign table parent\n--Testcase 841:\ncreate table foo2child (f3 int) inherits (foo2);\n\n--Testcase 842:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 843:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 844:\ndrop table foo2child;\n\n-- Check UPDATE with inherited target and an inherited source table\n--Testcase 451:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n--Testcase 452:\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n\n--Testcase 453:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Check UPDATE with inherited target and an appendrel subquery\n--Testcase 454:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n--Testcase 455:\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n\n--Testcase 456:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Test forcing the remote server to produce sorted data for a merge join,\n-- but the foreign table is an inheritance child.\n--truncate table loct1;\n--Testcase 710:\ndelete from foo2;\ntruncate table only foo;\n\\set num_rows_foo 2000\n--Testcase 711:\ninsert into foo2 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2);\n--Testcase 712:\ninsert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2);\n--Testcase 845:\nSET enable_hashjoin to false;\n--Testcase 846:\nSET enable_nestloop to false;\n--alter foreign table foo2 options (use_remote_estimate 'true');\n--create index i_loct1_f1 on loct1(f1);\n--Testcase 713:\ncreate index i_foo_f1 on foo(f1);\nanalyze foo;\n--analyze loct1;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 714:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 715:\nselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 716:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 717:\nselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 847:\nRESET enable_hashjoin;\n--Testcase 848:\nRESET enable_nestloop;\n\n-- Test that WHERE CURRENT OF is not supported\nbegin;\ndeclare c cursor for select * from bar where f1 = 7;\n--Testcase 457:\nfetch from c;\n--Testcase 458:\nupdate bar set f2 = null where current of c;\nrollback;\n\n--Testcase 459:\nexplain (verbose, costs off)\ndelete from foo where f1 < 5;\n--Testcase 460:\ndelete from foo where f1 < 5;\n--Testcase 461:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 462:\nupdate bar set f2 = f2 + 100;\n--Testcase 463:\nselect * from bar;\n\n-- Test that UPDATE/DELETE with inherited target works with row-level triggers\n--Testcase 718:\nCREATE TRIGGER trig_row_before\nBEFORE UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 719:\nCREATE TRIGGER trig_row_after\nAFTER UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 464:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 465:\nupdate bar set f2 = f2 + 100;\n\n--Testcase 466:\nexplain (verbose, costs off)\ndelete from bar where f2 < 400;\n--Testcase 467:\ndelete from bar where f2 < 400;\n\n-- cleanup\n--Testcase 720:\ndrop table foo cascade;\n--Testcase 721:\ndrop table bar cascade;\n\n-- Test pushing down UPDATE/DELETE joins to the remote server\n--Testcase 722:\ncreate table parent (a int, b text);\n--Testcase 723:\ncreate foreign table remt1 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct3');\n--Testcase 724:\ncreate foreign table remt2 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct4');\n--Testcase 849:\nalter foreign table remt1 inherit parent;\n\n--Testcase 468:\ninsert into remt1 values (1, 'foo');\n--Testcase 469:\ninsert into remt1 values (2, 'bar');\n--Testcase 470:\ninsert into remt2 values (1, 'foo');\n--Testcase 471:\ninsert into remt2 values (2, 'bar');\n\n--Testcase 472:\nexplain (verbose, costs off)\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 473:\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 474:\nselect * from parent inner join remt2 on (parent.a = remt2.a);\n--Testcase 475:\nexplain (verbose, costs off)\ndelete from parent using remt2 where parent.a = remt2.a;\n--Testcase 476:\ndelete from parent using remt2 where parent.a = remt2.a;\n\n-- cleanup\n--Testcase 725:\ndrop foreign table remt1;\n--Testcase 726:\ndrop foreign table remt2;\n--Testcase 727:\ndrop table parent;\n\n/* \n-- Skip these tests, sqlite fdw does not support partition table, check constraint, copy from\n-- ===================================================================\n-- test tuple routing for foreign-table partitions\n-- ===================================================================\n\n-- Test insert tuple routing\ncreate table itrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table itrtest attach partition remp1 for values in (1);\nalter table itrtest attach partition remp2 for values in (2);\n\ninsert into itrtest values (1, 'foo');\ninsert into itrtest values (1, 'bar') returning *;\ninsert into itrtest values (2, 'baz');\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\n\nselect tableoid::regclass, * FROM itrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from itrtest;\n\ncreate unique index loct1_idx on loct1 (a);\n\n-- DO NOTHING without an inference specification is supported\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\n\n-- But other cases are not supported\ninsert into itrtest values (1, 'bar') on conflict (a) do nothing;\ninsert into itrtest values (1, 'bar') on conflict (a) do update set b = excluded.b;\n\nselect tableoid::regclass, * FROM itrtest;\n\ndelete from itrtest;\n\ndrop index loct1_idx;\n\n-- Test that remote triggers work with insert tuple routing\ncreate function br_insert_trigfunc() returns trigger as $$\nbegin\n\tnew.b := new.b || ' triggered !';\n\treturn new;\nend\n$$ language plpgsql;\ncreate trigger loct1_br_insert_trigger before insert on loct1\n\tfor each row execute procedure br_insert_trigfunc();\ncreate trigger loct2_br_insert_trigger before insert on loct2\n\tfor each row execute procedure br_insert_trigfunc();\n\n-- The new values are concatenated with ' triggered !'\ninsert into itrtest values (1, 'foo') returning *;\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\nwith result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result;\n\ndrop trigger loct1_br_insert_trigger on loct1;\ndrop trigger loct2_br_insert_trigger on loct2;\n\ndrop table itrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- Test update tuple routing\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table loct (a int check (a in (1)), b text);\ncreate foreign table remp (a int check (a in (1)), b text) server loopback options (table_name 'loct');\ncreate table locp (a int check (a in (2)), b text);\nalter table utrtest attach partition remp for values in (1);\nalter table utrtest attach partition locp for values in (2);\n\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- It's not allowed to move a row from a partition that is foreign to another\nupdate utrtest set a = 2 where b = 'foo' returning *;\n\n-- But the reverse is allowed\nupdate utrtest set a = 1 where b = 'qux' returning *;\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- The executor should not let unexercised FDWs shut down\nupdate utrtest set a = 1 where b = 'foo';\n\n-- Test that remote triggers work with update tuple routing\ncreate trigger loct_br_insert_trigger before insert on loct\n\tfor each row execute procedure br_insert_trigfunc();\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition is a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition isn't a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 2 returning *;\n\ndrop trigger loct_br_insert_trigger on loct;\n\n-- We can move rows to a foreign partition that has been updated already,\n-- but can't move rows to a foreign partition that hasn't been updated yet\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- Test the former case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 returning *;\nupdate utrtest set a = 1 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\n\n-- Change the definition of utrtest so that the foreign partition get updated\n-- after the local partition\ndelete from utrtest;\nalter table utrtest detach partition remp;\ndrop foreign table remp;\nalter table loct drop constraint loct_a_check;\nalter table loct add check (a in (3));\ncreate foreign table remp (a int check (a in (3)), b text) server loopback options (table_name 'loct');\nalter table utrtest attach partition remp for values in (3);\ninsert into utrtest values (2, 'qux');\ninsert into utrtest values (3, 'xyzzy');\n\n-- Test the latter case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 returning *;\nupdate utrtest set a = 3 returning *; -- ERROR\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *;\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR\n\ndrop table utrtest;\ndrop table loct;\n\n-- Test copy tuple routing\ncreate table ctrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table ctrtest attach partition remp1 for values in (1);\nalter table ctrtest attach partition remp2 for values in (2);\n\ncopy ctrtest from stdin;\n1\tfoo\n2\tqux\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\n-- Copying into foreign partitions directly should work as well\ncopy remp1 from stdin;\n1\tbar\n\\.\n\nselect tableoid::regclass, * FROM remp1;\n\ndrop table ctrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- ===================================================================\n-- test COPY FROM\n-- ===================================================================\n\ncreate table loc2 (f1 int, f2 text);\nalter table loc2 set (autovacuum_enabled = 'false');\ncreate foreign table rem2 (f1 int, f2 text) server loopback options(table_name 'loc2');\n\n-- Test basic functionality\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndelete from rem2;\n\n-- Test check constraints\nalter table loc2 add constraint loc2_f1positive check (f1 >= 0);\nalter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- check constraint is enforced on the remote side, not locally\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\ncopy rem2 from stdin; -- ERROR\n-1\txyzzy\n\\.\nselect * from rem2;\n\nalter foreign table rem2 drop constraint rem2_f1positive;\nalter table loc2 drop constraint loc2_f1positive;\n\ndelete from rem2;\n\n-- Test local triggers\ncreate trigger trig_stmt_before before insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_stmt_after after insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before on rem2;\ndrop trigger trig_row_after on rem2;\ndrop trigger trig_stmt_before on rem2;\ndrop trigger trig_stmt_after on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_row_before_insert before insert on rem2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on rem2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on rem2;\n\ndelete from rem2;\n\n-- Test remote triggers\ncreate trigger trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on loc2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on loc2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on loc2;\n\ndelete from rem2;\n\n-- Test a combination of local and remote triggers\ncreate trigger rem2_trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger rem2_trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger loc2_trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger rem2_trig_row_before on rem2;\ndrop trigger rem2_trig_row_after on rem2;\ndrop trigger loc2_trig_row_before_insert on loc2;\n\ndelete from rem2;\n\n-- test COPY FROM with foreign table created in the same transaction\ncreate table loc3 (f1 int, f2 text);\nbegin;\ncreate foreign table rem3 (f1 int, f2 text)\n\tserver loopback options(table_name 'loc3');\ncopy rem3 from stdin;\n1\tfoo\n2\tbar\n\\.\ncommit;\nselect * from rem3;\ndrop foreign table rem3;\ndrop table loc3;\n*/\n\n-- ===================================================================\n-- test for TRUNCATE\n-- ===================================================================\n--Testcase 850:\nCREATE FOREIGN TABLE tru_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable0');\n--Testcase 851:\nINSERT INTO \"S 1\".tru_rtable0 (SELECT x FROM generate_series(1,10) x);\n\n-- CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id);\n-- CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable\n--                             FOR VALUES WITH (MODULUS 2, REMAINDER 0);\n-- CREATE TABLE tru_rtable1 (id int primary key);\n-- CREATE FOREIGN TABLE tru_ftable__p1 (id int)\n--        SERVER sqlite_svr OPTIONS (table 'tru_ptable');\n-- INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x);\n\n--Testcase 852:\nINSERT INTO \"S 1\".tru_pk_table (SELECT x FROM generate_series(1,10) x);\n--Testcase 853:\nINSERT INTO \"S 1\".tru_fk_table(fkey) (SELECT x % 10 + 1 FROM generate_series(5,25) x);\n--Testcase 854:\nCREATE FOREIGN TABLE tru_pk_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_pk_table');\n\n--Testcase 855:\nCREATE FOREIGN TABLE tru_ftable_parent (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_parent');\n--Testcase 856:\nCREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_child');\n--Testcase 857:\nINSERT INTO \"S 1\".tru_rtable_parent (SELECT x FROM generate_series(1,8) x);\n--Testcase 858:\nINSERT INTO \"S 1\".tru_rtable_child  (SELECT x FROM generate_series(10, 18) x);\n\n-- normal truncate\n--Testcase 859:\nSELECT sum(id) FROM tru_ftable;        -- 55\nTRUNCATE tru_ftable;\n--Testcase 860:\nSELECT count(*) FROM \"S 1\".tru_rtable0;\t\t-- 0\n--Testcase 861:\nSELECT count(*) FROM tru_ftable;\t\t-- 0\n\n-- 'truncatable' option\n--Testcase 862:\nALTER SERVER sqlite_svr OPTIONS (ADD truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 863:\nALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n--Testcase 864:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 865:\nALTER SERVER sqlite_svr OPTIONS (DROP truncatable);\n--Testcase 866:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 867:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n\n-- -- partitioned table with both local and foreign tables as partitions\n-- SELECT sum(id) FROM tru_ptable;        -- 155\n-- TRUNCATE tru_ptable;\n-- SELECT count(*) FROM tru_ptable;\t\t-- 0\n-- SELECT count(*) FROM tru_ptable__p0;\t-- 0\n-- SELECT count(*) FROM tru_ftable__p1;\t-- 0\n-- SELECT count(*) FROM tru_rtable1;\t\t-- 0\n\n-- 'CASCADE' option\n--Testcase 868:\nSELECT sum(id) FROM tru_pk_ftable;      -- 55\n-- SQLite FDW support TRUNCATE command by executing DELETE statement without WHERE clause.\n-- In order to delete records in parent and child table subsequently,\n-- SQLite FDW executes \"PRAGMA foreign_keys = ON\" before executing DELETE statement.\nTRUNCATE tru_pk_ftable; -- success\nTRUNCATE tru_pk_ftable CASCADE; -- success\n--Testcase 869:\nSELECT count(*) FROM tru_pk_ftable;    -- 0\n--Testcase 870:\nSELECT count(*) FROM \"S 1\".tru_fk_table;\t\t-- also truncated,0\n\n-- truncate two tables at a command\n--Testcase 871:\nINSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x);\n--Testcase 872:\nINSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x);\n--Testcase 873:\nSELECT count(*) from tru_ftable; -- 8\n--Testcase 874:\nSELECT count(*) from tru_pk_ftable; -- 8\nTRUNCATE tru_ftable, tru_pk_ftable;\n--Testcase 875:\nSELECT count(*) from tru_ftable; -- 0\n--Testcase 876:\nSELECT count(*) from tru_pk_ftable; -- 0\n\n-- truncate with ONLY clause\n-- Since ONLY is specified, the table tru_ftable_child that inherits\n-- tru_ftable_parent locally is not truncated.\nTRUNCATE ONLY tru_ftable_parent;\n--Testcase 877:\nSELECT sum(id) FROM tru_ftable_parent;  -- 126\nTRUNCATE tru_ftable_parent;\n--Testcase 878:\nSELECT count(*) FROM tru_ftable_parent; -- 0\n\n-- -- in case when remote table has inherited children\n-- CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0);\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x);\n-- INSERT INTO \"S 1\".tru_rtable0_child (SELECT x FROM generate_series(10,14) x);\n-- SELECT sum(id) FROM tru_ftable;   -- 95\n\n-- -- Both parent and child tables in the foreign server are truncated\n-- -- even though ONLY is specified because ONLY has no effect\n-- -- when truncating a foreign table.\n-- TRUNCATE ONLY tru_ftable;\n-- SELECT count(*) FROM tru_ftable;   -- 0\n\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x);\n-- INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x);\n-- SELECT sum(id) FROM tru_ftable;\t\t-- 255\n-- TRUNCATE tru_ftable;\t\t\t-- truncate both of parent and child\n-- SELECT count(*) FROM tru_ftable;    -- 0\n\n-- cleanup\n--Testcase 879:\nDROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable;\n-- DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table,\n-- tru_rtable_parent,tru_rtable_child, tru_rtable0_child;\n\n-- ===================================================================\n-- test IMPORT FOREIGN SCHEMA\n-- ===================================================================\n\n--Testcase 728:\nCREATE SCHEMA import_dest1;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest1;\n--Testcase 477:\n\\det+ import_dest1.*\n--Testcase 478:\n\\d import_dest1.*\n\n-- Options\n--Testcase 729:\nCREATE SCHEMA import_dest2;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest2\n  OPTIONS (import_default 'true');\n--Testcase 479:\n\\det+ import_dest2.*\n--Testcase 480:\n\\d import_dest2.*\n\n-- Check LIMIT TO and EXCEPT\n--Testcase 730:\nCREATE SCHEMA import_dest3;\nIMPORT FOREIGN SCHEMA public LIMIT TO (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 481:\n\\det+ import_dest3.*\nIMPORT FOREIGN SCHEMA public EXCEPT (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 482:\n\\det+ import_dest3.*\n\n-- Assorted error cases\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest3;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO notthere;\nIMPORT FOREIGN SCHEMA public FROM SERVER nowhere INTO notthere;\n\n/*\n-- Skip these test, sqlite fdw does not support fetch_size option, partition table\n-- Check case of a type present only on the remote server.\n-- We can fake this by dropping the type locally in our transaction.\nCREATE TYPE \"Colors\" AS ENUM ('red', 'green', 'blue');\nCREATE TABLE import_source.t5 (c1 int, c2 text collate \"C\", \"Col\" \"Colors\");\n\nCREATE SCHEMA import_dest5;\nBEGIN;\nDROP TYPE \"Colors\" CASCADE;\nIMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)\n  FROM SERVER loopback INTO import_dest5;  -- ERROR\n\nROLLBACK;\n\nBEGIN;\n\n\nCREATE SERVER fetch101 FOREIGN DATA WRAPPER postgres_fdw OPTIONS( fetch_size '101' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nALTER SERVER fetch101 OPTIONS( SET fetch_size '202' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=202'];\n\nCREATE FOREIGN TABLE table30000 ( x int ) SERVER fetch101 OPTIONS ( fetch_size '30000' );\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nALTER FOREIGN TABLE table30000 OPTIONS ( SET fetch_size '60000');\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=60000'];\n\nROLLBACK;\n\n-- ===================================================================\n-- test partitionwise joins\n-- ===================================================================\nSET enable_partitionwise_join=on;\n\nCREATE TABLE fprt1 (a int, b int, c varchar) PARTITION BY RANGE(a);\nCREATE TABLE fprt1_p1 (LIKE fprt1);\nCREATE TABLE fprt1_p2 (LIKE fprt1);\nALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i;\nINSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i;\nCREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250)\n\tSERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true');\nCREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (TABLE_NAME 'fprt1_p2');\nANALYZE fprt1;\nANALYZE fprt1_p1;\nANALYZE fprt1_p2;\n\nCREATE TABLE fprt2 (a int, b int, c varchar) PARTITION BY RANGE(b);\nCREATE TABLE fprt2_p1 (LIKE fprt2);\nCREATE TABLE fprt2_p2 (LIKE fprt2);\nALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i;\nINSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i;\nCREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true');\nALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250);\nCREATE FOREIGN TABLE ftprt2_p2 PARTITION OF fprt2 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p2', use_remote_estimate 'true');\nANALYZE fprt2;\nANALYZE fprt2_p1;\nANALYZE fprt2_p2;\n\n-- inner join three tables\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\n\n-- left outer join + nullable clause\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\n\n-- with whole-row reference; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\n\n-- join with lateral reference\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\n\n-- with PHVs, partitionwise join selected but no join pushdown\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\n\n-- test FOR UPDATE; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\n\nRESET enable_partitionwise_join;\n\n\n-- ===================================================================\n-- test partitionwise aggregates\n-- ===================================================================\n\nCREATE TABLE pagg_tab (a int, b int, c text) PARTITION BY RANGE(a);\n\nCREATE TABLE pagg_tab_p1 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p2 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p3 (LIKE pagg_tab);\n\nINSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10;\nINSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10;\nINSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20;\n\n-- Create foreign partitions\nCREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1');\nCREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2');\nCREATE FOREIGN TABLE fpagg_tab_p3 PARTITION OF pagg_tab FOR VALUES FROM (20) TO (30) SERVER loopback OPTIONS (table_name 'pagg_tab_p3');\n\nANALYZE pagg_tab;\nANALYZE fpagg_tab_p1;\nANALYZE fpagg_tab_p2;\nANALYZE fpagg_tab_p3;\n\n-- When GROUP BY clause matches with PARTITION KEY.\n-- Plan with partitionwise aggregates is disabled\nSET enable_partitionwise_aggregate TO false;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Plan with partitionwise aggregates is enabled\nSET enable_partitionwise_aggregate TO true;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Check with whole-row reference\n-- Should have all the columns in the target list for the given relation\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- When GROUP BY clause does not match with PARTITION KEY.\nEXPLAIN (COSTS OFF)\nSELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700 ORDER BY 1;\n*/\n\n/*\n-- Skip these tests, sqlite fdw does not support nosuper user.\n-- ===================================================================\n-- access rights and superuser\n-- ===================================================================\n\n-- Non-superuser cannot create a FDW without a password in the connstr\nCREATE ROLE regress_nosuper NOSUPERUSER;\n\nGRANT USAGE ON FOREIGN DATA WRAPPER sqlite_fdw TO regress_nosuper;\n\nSET ROLE regress_nosuper;\n\nSHOW is_superuser;\n\n-- This will be OK, we can create the FDW\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_nopw FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- But creation of user mappings for non-superusers should fail\nCREATE USER MAPPING FOR public SERVER sqlite_nopw;\nCREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\nCREATE FOREIGN TABLE ft1_nopw (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_nopw;\n\nALTER FOREIGN TABLE ft1_nopw OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1_nopw ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- If we add a password to the connstr it'll fail, because we don't allow passwords\n-- in connstrs only in user mappings.\n\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw')$$;\n    END;\n$d$;\n\n-- If we add a password for our user mapping instead, we should get a different\n-- error because the password wasn't actually *used* when we run with trust auth.\n--\n-- This won't work with installcheck, but neither will most of the FDW checks.\n\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- Unpriv user cannot make the mapping passwordless\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- But the superuser can\nALTER USER MAPPING FOR regress_nosuper SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\nSET ROLE regress_nosuper;\n\n-- Should finally work now\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- unpriv user also cannot set sslcert / sslkey on the user mapping\n-- first set password_required so we see the right error messages\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (SET password_required 'true');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslcert 'foo.crt');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslkey 'foo.key');\n\n-- We're done with the role named after a specific user and need to check the\n-- changes to the public mapping.\nDROP USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\n-- This will fail again as it'll resolve the user mapping for public, which\n-- lacks password_required=false\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- The user mapping for public is passwordless and lacks the password_required=false\n-- mapping option, but will work because the current user is a superuser.\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- cleanup\nDROP USER MAPPING FOR public SERVER sqlite_nopw;\nDROP OWNED BY regress_nosuper;\nDROP ROLE regress_nosuper;\n\n-- Clean-up\nRESET enable_partitionwise_aggregate;\n*/\n-- Two-phase transactions are not supported.\nBEGIN;\n--Testcase 731:\nSELECT count(*) FROM ft1;\n-- error here\n--Testcase 732:\nPREPARE TRANSACTION 'fdw_tpc';\nROLLBACK;\n\n-- ===================================================================\n-- reestablish new connection\n-- ===================================================================\n-- -- Test case relative with option application_name is not suitable for SQLite FDW.\n-- -- Because this option is in libpq of postgres.\n-- -- Change application_name of remote connection to special one\n-- -- so that we can easily terminate the connection later.\n-- ALTER SERVER sqlite_svr OPTIONS (application_name 'fdw_retry_check');\n-- -- If debug_discard_caches is active, it results in\n-- -- dropping remote connections after every transaction, making it\n-- -- impossible to test termination meaningfully.  So turn that off\n-- -- for this test.\n-- SET debug_discard_caches = 0;\n-- -- Make sure we have a remote connection.\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- -- This query should detect the broken connection when starting new remote\n-- -- transaction, reestablish new connection, and then succeed.\n-- BEGIN;\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- If we detect the broken connection when starting a new remote\n-- -- subtransaction, we should fail instead of establishing a new connection.\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- SAVEPOINT s;\n-- -- The text of the error might vary across platforms, so only show SQLSTATE.\n-- \\set VERBOSITY sqlstate\n-- SELECT 1 FROM ft1 LIMIT 1;    -- should fail\n-- \\set VERBOSITY default\n-- COMMIT;\n\n-- RESET debug_discard_caches;\n\n-- =============================================================================\n-- test connection invalidation cases and sqlite_fdw_get_connections function\n-- =============================================================================\n-- Let's ensure to close all the existing cached connections.\n--Testcase 880:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 881:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- This test case is for closing the connection in sqlitefdw_xact_callback\nBEGIN;\n-- Connection xact depth becomes 1 i.e. the connection is in midst of the xact.\n--Testcase 882:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 883:\nSELECT 1 FROM ft7 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3 should be\n-- output.\n--Testcase 884:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Connections are not closed at the end of the alter and drop statements.\n-- That's because the connections are in midst of this xact,\n-- they are just marked as invalid in sqlitefdw_inval_callback.\n--Testcase 885:\nALTER SERVER sqlite_svr OPTIONS (ADD keep_connections 'off');\n--Testcase 886:\nDROP SERVER sqlite_svr3 CASCADE;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3\n-- should be output as invalid connections. Also the server name for\n-- sqlite_svr3 should be NULL because the server was dropped.\n--Testcase 887:\nSELECT * FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- The invalid connections get closed in sqlitefdw_xact_callback during commit.\nCOMMIT;\n--Testcase 888:\nALTER SERVER sqlite_svr OPTIONS (DROP keep_connections);\n-- All cached connections were closed while committing above xact, so no\n-- records should be output.\n--Testcase 889:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =======================================================================\n-- test sqlite_fdw_disconnect and sqlite_fdw_disconnect_all functions\n-- =======================================================================\nBEGIN;\n-- Ensure to cache loopback connection.\n--Testcase 890:\nSELECT 1 FROM ft1 LIMIT 1;\n-- Ensure to cache loopback2 connection.\n--Testcase 891:\nSELECT 1 FROM ft6 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 892:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Issue a warning and return false as sqlite_svr connection is still in use and\n-- can not be closed.\n--Testcase 893:\nSELECT sqlite_fdw_disconnect('sqlite_svr');\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 894:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Return false as connections are still in use, warnings are issued.\n-- But disable warnings temporarily because the order of them is not stable.\n--Testcase 895:\nSET client_min_messages = 'ERROR';\n--Testcase 896:\nSELECT sqlite_fdw_disconnect_all();\n--Testcase 897:\nRESET client_min_messages;\nCOMMIT;\n-- Ensure that sqlite_svr2 connection is closed.\n--Testcase 898:\nSELECT 1 FROM sqlite_fdw_disconnect('sqlite_svr2');\n--Testcase 899:\nSELECT server_name FROM sqlite_fdw_get_connections() WHERE server_name = 'sqlite_svr2';\n-- Return false as sqlite_svr2 connection is closed already.\n--Testcase 900:\nSELECT sqlite_fdw_disconnect('sqlite_svr2');\n-- Return an error as there is no foreign server with given name.\n--Testcase 901:\nSELECT sqlite_fdw_disconnect('unknownserver');\n-- Let's ensure to close all the existing cached connections.\n--Testcase 902:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 903:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =============================================================================\n-- test case for having multiple cached connections for a foreign server\n-- SQLite FDW does not support User Mapping, so cached connection is identified\n-- by only serverid (not like other FDWs use key including serverid and userid),\n-- and there is only one server for all users, so there is only one cached connection.\n-- In case of using key including serverid and userid, if many users are used,\n-- there will be many cached connections.\n-- =============================================================================\n--Testcase 904:\nCREATE ROLE regress_multi_conn_user1 SUPERUSER;\n--Testcase 905:\nCREATE ROLE regress_multi_conn_user2 SUPERUSER;\n--Testcase 906:\n-- CREATE USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 907:\n-- CREATE USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n\nBEGIN;\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user1\n--Testcase 908:\nSET ROLE regress_multi_conn_user1;\n--Testcase 909:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 910:\nRESET ROLE;\n\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user2\n--Testcase 911:\nSET ROLE regress_multi_conn_user2;\n--Testcase 912:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 913:\nRESET ROLE;\n\n-- Should output one cached connection for sqlite_svr server\n--Testcase 914:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\nCOMMIT;\n-- Let's ensure to close all the existing cached connections.\n--Testcase 915:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 916:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- Clean up\n--Testcase 917:\n-- DROP USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 918:\n-- DROP USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n--Testcase 919:\nDROP ROLE regress_multi_conn_user1;\n--Testcase 920:\nDROP ROLE regress_multi_conn_user2;\n\n-- ===================================================================\n-- Test foreign server level option keep_connections\n-- ===================================================================\n-- By default, the connections associated with foreign server are cached i.e.\n-- keep_connections option is on. Set it to off.\n--Testcase 921:\nALTER SERVER sqlite_svr OPTIONS (keep_connections 'off');\n-- connection to sqlite_svr server is closed at the end of xact\n-- as keep_connections was set to off.\n--Testcase 922:\nSELECT 1 FROM ft1 LIMIT 1;\n-- No cached connections, so no records should be output.\n--Testcase 923:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n--Testcase 924:\nALTER SERVER sqlite_svr OPTIONS (SET keep_connections 'on');\n\n-- ===================================================================\n-- batch insert\n-- ===================================================================\n\nBEGIN;\n\n--Testcase 925:\nCREATE SERVER batch10 FOREIGN DATA WRAPPER sqlite_fdw OPTIONS( batch_size '10' );\n\n--Testcase 926:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 927:\nALTER SERVER batch10 OPTIONS( SET batch_size '20' );\n\n--Testcase 928:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 929:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=20'];\n\n--Testcase 930:\nCREATE FOREIGN TABLE table30 ( x int ) SERVER batch10 OPTIONS ( batch_size '30' );\n\n--Testcase 931:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 932:\nALTER FOREIGN TABLE table30 OPTIONS ( SET batch_size '40');\n\n--Testcase 933:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 934:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=40'];\n\nROLLBACK;\n\n--Testcase 935:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '10' );\n--Testcase 936:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 937:\nINSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 938:\nINSERT INTO ftable SELECT * FROM generate_series(11, 31) i;\n--Testcase 939:\nINSERT INTO ftable VALUES (32);\n--Testcase 940:\nINSERT INTO ftable VALUES (33), (34);\n--Testcase 941:\nSELECT COUNT(*) FROM ftable;\n--Testcase 942:\nDELETE FROM ftable;\n--Testcase 943:\nDROP FOREIGN TABLE ftable;\n\n-- try if large batches exceed max number of bind parameters\n--Testcase 944:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '100000' );\n--Testcase 945:\nINSERT INTO ftable SELECT * FROM generate_series(1, 70000) i;\n--Testcase 946:\nSELECT COUNT(*) FROM ftable;\n--Testcase 947:\nDELETE FROM ftable;\n--Testcase 948:\nDROP FOREIGN TABLE ftable;\n\n-- Disable batch insert\n--Testcase 949:\nCREATE FOREIGN TABLE ftable ( x int ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '1' );\n--Testcase 950:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2);\n--Testcase 951:\nINSERT INTO ftable VALUES (1), (2);\n--Testcase 952:\nSELECT COUNT(*) FROM ftable;\n\n-- Disable batch inserting into foreign tables with BEFORE ROW INSERT triggers\n-- even if the batch_size option is enabled.\n--Testcase 977:\nALTER FOREIGN TABLE ftable OPTIONS ( SET batch_size '10' );\n--Testcase 978:\nCREATE TRIGGER trig_row_before BEFORE INSERT ON ftable\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 980:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (3), (4);\n--Testcase 981:\nINSERT INTO ftable VALUES (3), (4);\n--Testcase 982:\nSELECT COUNT(*) FROM ftable;\n\n-- Clean up\n--Testcase 983:\nDROP TRIGGER trig_row_before ON ftable;\n--Testcase 953:\nDROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n\n-- -- Use partitioning\n-- CREATE TABLE batch_table ( x int ) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p0f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 0)\n\t-- SERVER sqlite_svr\n\t-- OPTIONS (table 'batch_table_p0', batch_size '10');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p1f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table 'batch_table_p1', batch_size '1');\n\n-- CREATE TABLE batch_table_p2\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 3, REMAINDER 2);\n\n-- INSERT INTO \"S 1\".batch_table SELECT * FROM generate_series(1, 66) i;\n-- SELECT COUNT(*) FROM \"S 1\".batch_table;\n\n-- -- Check that enabling batched inserts doesn't interfere with cross-partition\n-- -- updates\n-- CREATE TABLE batch_cp_upd_test (a int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_cp_upd_test1 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test1_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table_name 'batch_cp_upd_test1', batch_size '10');\n-- CREATE TABLE batch_cp_up_test1 PARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (2);\n-- INSERT INTO batch_cp_upd_test VALUES (1), (2);\n\n-- -- The following moves a row from the local partition to the foreign one\n-- UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a;\n-- SELECT tableoid::regclass, * FROM batch_cp_upd_test;\n\n-- -- Clean up\n-- DROP TABLE batch_table, batch_cp_upd_test, batch_table_p0, batch_table_p1 CASCADE;\n\n-- -- Use partitioning\n-- ALTER SERVER loopback OPTIONS (ADD batch_size '10');\n\n-- CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p0f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 0)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p0');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p1f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 1)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p1');\n\n-- INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i;\n-- SELECT COUNT(*) FROM batch_table;\n-- SELECT * FROM batch_table ORDER BY x;\n\n-- ALTER SERVER loopback OPTIONS (DROP batch_size);\n\n-- ===================================================================\n-- test asynchronous execution\n-- ===================================================================\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD async_capable 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');\n\n-- CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);\n-- CREATE TABLE base_tbl1 (a int, b int, c text);\n-- CREATE TABLE base_tbl2 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)\n--   SERVER loopback OPTIONS (table_name 'base_tbl1');\n-- CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl2');\n-- INSERT INTO async_p1 SELECT 1000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- INSERT INTO async_p2 SELECT 2000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- -- simple queries\n-- CREATE TABLE result_tbl (a int, b int, c text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Check case where multiple partitions use the same connection\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- DROP FOREIGN TABLE async_p3;\n-- DROP TABLE base_tbl3;\n\n-- -- Check case where the partitioned table has local/remote partitions\n-- CREATE TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000);\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- partitionwise joins\n-- SET enable_partitionwise_join TO true;\n\n-- CREATE TABLE join_tbl (a1 int, b1 int, c1 text, a2 int, b2 int, c2 text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_partitionwise_join;\n\n-- -- Test rescan of an async Append node with do_exec_prune=false\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_hashjoin;\n\n-- -- Test interaction of async execution with plan-time partition pruning\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 3000;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 2000;\n\n-- -- Test interaction of async execution with run-time partition pruning\n-- SET plan_cache_mode TO force_generic_plan;\n\n-- PREPARE async_pt_query (int, int) AS\n--   INSERT INTO result_tbl SELECT * FROM async_pt WHERE a < $1 AND b === $2;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (3000, 505);\n-- EXECUTE async_pt_query (3000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (2000, 505);\n-- EXECUTE async_pt_query (2000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- RESET plan_cache_mode;\n\n-- CREATE TABLE local_tbl(a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo'), (2505, 505, 'bar');\n-- ANALYZE local_tbl;\n\n-- CREATE INDEX base_tbl1_idx ON base_tbl1 (a);\n-- CREATE INDEX base_tbl2_idx ON base_tbl2 (a);\n-- CREATE INDEX async_p3_idx ON async_p3 (a);\n-- ANALYZE base_tbl1;\n-- ANALYZE base_tbl2;\n-- ANALYZE async_p3;\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (use_remote_estimate 'true');\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (use_remote_estimate 'true');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (DROP use_remote_estimate);\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (DROP use_remote_estimate);\n\n-- DROP TABLE local_tbl;\n-- DROP INDEX base_tbl1_idx;\n-- DROP INDEX base_tbl2_idx;\n-- DROP INDEX async_p3_idx;\n\n-- -- UNION queries\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Disable async execution if we use gating Result nodes for pseudoconstant\n-- -- quals\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE CURRENT_USER = SESSION_USER;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER)\n-- UNION ALL\n-- (SELECT * FROM async_p2 WHERE CURRENT_USER = SESSION_USER);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM async_p2 WHERE b < 10)) s WHERE CURRENT_USER = SESSION_USER;\n\n-- -- Test that pending requests are processed properly\n-- SET enable_mergejoin TO false;\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n\n-- CREATE TABLE local_tbl (a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo');\n-- ANALYZE local_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n\n-- -- Check with foreign modify\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO remote_tbl VALUES (2505, 505, 'bar');\n\n-- CREATE TABLE base_tbl4 (a int, b int, c text);\n-- CREATE FOREIGN TABLE insert_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl4');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n\n-- SELECT * FROM insert_tbl ORDER BY a;\n\n-- -- Check with direct modify\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- DROP TABLE local_tbl;\n-- DROP FOREIGN TABLE remote_tbl;\n-- DROP FOREIGN TABLE insert_tbl;\n-- DROP TABLE base_tbl3;\n-- DROP TABLE base_tbl4;\n\n-- RESET enable_mergejoin;\n-- RESET enable_hashjoin;\n\n-- -- Test that UPDATE/DELETE with inherited target works with async_capable enabled\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n\n-- -- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously\n-- DELETE FROM async_p1;\n-- DELETE FROM async_p2;\n-- DELETE FROM async_p3;\n\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt;\n\n-- -- Clean up\n-- DROP TABLE async_pt;\n-- DROP TABLE base_tbl1;\n-- DROP TABLE base_tbl2;\n-- DROP TABLE result_tbl;\n-- DROP TABLE join_tbl;\n\n-- -- Test that an asynchronous fetch is processed before restarting the scan in\n-- -- ReScanForeignScan\n-- CREATE TABLE base_tbl (a int, b int);\n-- INSERT INTO base_tbl VALUES (1, 11), (2, 22), (3, 33);\n-- CREATE FOREIGN TABLE foreign_tbl (b int)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n-- CREATE FOREIGN TABLE foreign_tbl2 () INHERITS (foreign_tbl)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);\n-- SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);\n\n-- -- Clean up\n-- DROP FOREIGN TABLE foreign_tbl CASCADE;\n-- DROP TABLE base_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP async_capable);\n-- ALTER SERVER loopback2 OPTIONS (DROP async_capable);\n\n-- ===================================================================\n-- test invalid server and foreign table options\n-- ===================================================================\n-- -- Invalid fdw_startup_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_startup_cost '100$%$#$#');\n-- -- Invalid fdw_tuple_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_tuple_cost '100$%$#$#');\n-- -- Invalid fetch_size option\n-- CREATE FOREIGN TABLE inv_fsz (c1 int )\n-- \tSERVER loopback OPTIONS (fetch_size '100$%$#$#');\n-- Invalid batch_size option\n--Testcase 954:\nCREATE FOREIGN TABLE inv_bsz (c1 int )\n\tSERVER sqlite_svr OPTIONS (batch_size '100$%$#$#');\n\n-- -- No option is allowed to be specified at foreign data wrapper level\n-- ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (nonexistent 'fdw');\n\n-- -- ===================================================================\n-- -- test postgres_fdw.application_name GUC\n-- -- ===================================================================\n-- --- Turn debug_discard_caches off for this test to make sure that\n-- --- the remote connection is alive when checking its application_name.\n-- SET debug_discard_caches = 0;\n\n-- -- Specify escape sequences in application_name option of a server\n-- -- object so as to test that they are replaced with status information\n-- -- expectedly.\n-- --\n-- -- Since pg_stat_activity.application_name may be truncated to less than\n-- -- NAMEDATALEN characters, note that substring() needs to be used\n-- -- at the condition of test query to make sure that the string consisting\n-- -- of database name and process ID is also less than that.\n-- ALTER SERVER loopback2 OPTIONS (application_name 'fdw_%d%p');\n-- SELECT 1 FROM ft6 LIMIT 1;\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n--   WHERE application_name =\n--     substring('fdw_' || current_database() || pg_backend_pid() for\n--       current_setting('max_identifier_length')::int);\n\n-- -- postgres_fdw.application_name overrides application_name option\n-- -- of a server object if both settings are present.\n-- SET postgres_fdw.application_name TO 'fdw_%a%u%%';\n-- SELECT 1 FROM ft6 LIMIT 1;\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('application_name') ||\n--       CURRENT_USER || '%' for current_setting('max_identifier_length')::int);\n\n-- -- Test %c (session ID) and %C (cluster name) escape sequences.\n-- SET postgres_fdw.application_name TO 'fdw_%C%c';\n-- SELECT 1 FROM ft6 LIMIT 1;\n-- SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('cluster_name') ||\n--       to_hex(trunc(EXTRACT(EPOCH FROM (SELECT backend_start FROM\n--       pg_stat_get_activity(pg_backend_pid()))))::integer) || '.' ||\n--       to_hex(pg_backend_pid())\n--       for current_setting('max_identifier_length')::int);\n\n-- --Clean up\n-- RESET postgres_fdw.application_name;\n-- RESET debug_discard_caches;\n\n-- -- ===================================================================\n-- -- test parallel commit\n-- -- ===================================================================\n-- ALTER SERVER loopback OPTIONS (ADD parallel_commit 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD parallel_commit 'true');\n\n-- CREATE TABLE ploc1 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem1 (f1 int, f2 text)\n--   SERVER loopback OPTIONS (table_name 'ploc1');\n-- CREATE TABLE ploc2 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem2 (f1 int, f2 text)\n--   SERVER loopback2 OPTIONS (table_name 'ploc2');\n\n-- BEGIN;\n-- INSERT INTO prem1 VALUES (101, 'foo');\n-- INSERT INTO prem2 VALUES (201, 'bar');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (102, 'foofoo');\n-- INSERT INTO prem2 VALUES (202, 'barbar');\n-- RELEASE SAVEPOINT s;\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- -- This tests executing DEALLOCATE ALL against foreign servers in parallel\n-- -- during pre-commit\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (103, 'baz');\n-- INSERT INTO prem2 VALUES (203, 'qux');\n-- ROLLBACK TO SAVEPOINT s;\n-- RELEASE SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (104, 'bazbaz');\n-- INSERT INTO prem2 VALUES (204, 'quxqux');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- ALTER SERVER loopback OPTIONS (DROP parallel_commit);\n-- ALTER SERVER loopback2 OPTIONS (DROP parallel_commit);\n\n-- Clean-up\n--Testcase 733:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 734:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 735:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 736:\nDROP SERVER sqlite_svr2 CASCADE;\n--Testcase 737:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/extra/update.sql",
    "content": "--\n-- UPDATE syntax tests\n--\n--Testcase 32:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 33:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 34:\nCREATE FOREIGN TABLE update_test (\n    i   INT OPTIONS (key 'true'),\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n) SERVER sqlite_svr;\n\n--Testcase 35:\nCREATE FOREIGN TABLE upsert_test (\n    a   INT OPTIONS (key 'true'),\n    b   TEXT\n) SERVER sqlite_svr;\n\n\n--Testcase 1:\nINSERT INTO update_test VALUES (1, 5, 10, 'foo');\n--Testcase 2:\nINSERT INTO update_test(i, b, a) VALUES (2, 15, 10);\n\n--Testcase 3:\nSELECT * FROM update_test;\n\n--Testcase 4:\nUPDATE update_test SET a = DEFAULT, b = DEFAULT;\n\n--Testcase 5:\nSELECT * FROM update_test;\n\n-- aliases for the UPDATE target table\n--Testcase 6:\nUPDATE update_test AS t SET b = 10 WHERE t.a = 10;\n\n--Testcase 7:\nSELECT * FROM update_test;\n\n--Testcase 8:\nUPDATE update_test t SET b = t.b + 10 WHERE t.a = 10;\n\n--Testcase 9:\nSELECT * FROM update_test;\n\n--\n-- Test VALUES in FROM\n--\n\n--Testcase 10:\nUPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--Testcase 11:\nSELECT * FROM update_test;\n\n-- fail, wrong data type:\n--Testcase 12:\nUPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--\n-- Test multiple-set-clause syntax\n--\n\n--Testcase 13:\nINSERT INTO update_test SELECT i+2,a,b+1,c FROM update_test;\n--Testcase 14:\nSELECT * FROM update_test;\n\n--Testcase 15:\nUPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';\n--Testcase 16:\nSELECT * FROM update_test;\n--Testcase 17:\nUPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;\n--Testcase 18:\nSELECT * FROM update_test;\n-- fail, multi assignment to same column:\n--Testcase 19:\nUPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;\n\n-- uncorrelated sub-select:\n--Testcase 20:\nUPDATE update_test\n  SET (b,a) = (select a,b from update_test where b = 41 and c = 'car')\n  WHERE a = 100 AND b = 20;\n--Testcase 21:\nSELECT * FROM update_test;\n-- correlated sub-select:\n--Testcase 22:\nUPDATE update_test o\n  SET (b,a) = (select a+1,b from update_test i\n               where i.a=o.a and i.b=o.b and i.c is not distinct from o.c);\n--Testcase 23:\nSELECT * FROM update_test;\n-- fail, multiple rows supplied:\n--Testcase 24:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test);\n-- set to null if no rows supplied:\n--Testcase 25:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000)\n  WHERE a = 11;\n--Testcase 26:\nSELECT * FROM update_test;\n-- *-expansion should work in this context:\n--Testcase 27:\nUPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 100)) AS v(i, j)\n  WHERE update_test.a = v.i;\n-- you might expect this to work, but syntactically it's not a RowExpr:\n--Testcase 28:\nUPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 101)) AS v(i, j)\n  WHERE update_test.a = v.i;\n\n-- if an alias for the target table is specified, don't allow references\n-- to the original table name\n--Testcase 29:\nUPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;\n\n-- Make sure that we can update to a TOASTed value.\n--Testcase 30:\nUPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';\n--Testcase 31:\nSELECT a, b, char_length(c) FROM update_test;\n\n-- Check multi-assignment with a Result node to handle a one-time filter.\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 37:\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 38:\nSELECT a, b, char_length(c) FROM update_test;\n\n/* Skip, sqlite fdw does not support ON CONFLICT DO UPDATE\n-- Test ON CONFLICT DO UPDATE\nINSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');\n-- uncorrelated  sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nINSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a)\n  RETURNING *;\n-- correlated sub-select (EXCLUDED.* alias):\nINSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING *;\n\n-- ON CONFLICT using system attributes in RETURNING, testing both the\n-- inserting and updating paths. See bug report at:\n-- https://www.postgresql.org/message-id/73436355-6432-49B1-92ED-1FE4F7E7E100%40finefun.com.au\nINSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = 0 AS xmax_correct;\n-- currently xmax is set after a conflict - that's probably not good,\n-- but it seems worthwhile to have to be explicit if that changes.\nINSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct;\n\n\nDROP FOREIGN TABLE update_test;\nDROP FOREIGN TABLE upsert_test;\n*/\n\n/*Skip, sqlite fdw does not support create partition table\n-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children\n\nCREATE TABLE upsert_test (\n    a   INT PRIMARY KEY,\n    b   TEXT\n) PARTITION BY LIST (a);\n\nCREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1);\nCREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);\nALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2);\n\nINSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo');\n-- uncorrelated sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nWITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test\n  VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *;\n\nDROP TABLE upsert_test;\n\n---------------------------\n-- UPDATE with row movement\n---------------------------\n\n-- When a partitioned table receives an UPDATE to the partitioned key and the\n-- new values no longer meet the partition's bound, the row must be moved to\n-- the correct partition for the new partition key (if one exists). We must\n-- also ensure that updatable views on partitioned tables properly enforce any\n-- WITH CHECK OPTION that is defined. The situation with triggers in this case\n-- also requires thorough testing as partition key updates causing row\n-- movement convert UPDATEs into DELETE+INSERT.\n\nCREATE TABLE range_parted (\n\ta text,\n\tb bigint,\n\tc numeric,\n\td int,\n\te varchar\n) PARTITION BY RANGE (a, b);\n\n-- Create partitions intentionally in descending bound order, so as to test\n-- that update-row-movement works with the leaf partitions not in bound order.\nCREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);\nALTER TABLE range_parted ATTACH PARTITION part_b_20_b_30 FOR VALUES FROM ('b', 20) TO ('b', 30);\nCREATE TABLE part_b_10_b_20 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY RANGE (c);\nCREATE TABLE part_b_1_b_10 PARTITION OF range_parted FOR VALUES FROM ('b', 1) TO ('b', 10);\nALTER TABLE range_parted ATTACH PARTITION part_b_10_b_20 FOR VALUES FROM ('b', 10) TO ('b', 20);\nCREATE TABLE part_a_10_a_20 PARTITION OF range_parted FOR VALUES FROM ('a', 10) TO ('a', 20);\nCREATE TABLE part_a_1_a_10 PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('a', 10);\n\n-- Check that partition-key UPDATE works sanely on a partitioned table that\n-- does not have any child partitions.\nUPDATE part_b_10_b_20 set b = b - 6;\n\n-- Create some more partitions following the above pattern of descending bound\n-- order, but let's make the situation a bit more complex by having the\n-- attribute numbers of the columns vary from their parent partition.\nCREATE TABLE part_c_100_200 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY range (abs(d));\nALTER TABLE part_c_100_200 DROP COLUMN e, DROP COLUMN c, DROP COLUMN a;\nALTER TABLE part_c_100_200 ADD COLUMN c numeric, ADD COLUMN e varchar, ADD COLUMN a text;\nALTER TABLE part_c_100_200 DROP COLUMN b;\nALTER TABLE part_c_100_200 ADD COLUMN b bigint;\nCREATE TABLE part_d_1_15 PARTITION OF part_c_100_200 FOR VALUES FROM (1) TO (15);\nCREATE TABLE part_d_15_20 PARTITION OF part_c_100_200 FOR VALUES FROM (15) TO (20);\n\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_100_200 FOR VALUES FROM (100) TO (200);\n\nCREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_1_100 FOR VALUES FROM (1) TO (100);\n\n\\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'\n\\set show_data 'select tableoid::regclass::text COLLATE \"C\" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'\n:init_range_parted;\n:show_data;\n\n-- The order of subplans should be in bound order\nEXPLAIN (costs off) UPDATE range_parted set c = c - 50 WHERE c > 97;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_c_100_200 set c = c - 20, d = c WHERE c = 105;\n-- fail, no partition key update, so no attempt to move tuple,\n-- but \"a = 'a'\" violates partition constraint enforced by root partition)\nUPDATE part_b_10_b_20 set a = 'a';\n-- ok, partition key update, no constraint violation\nUPDATE range_parted set d = d - 10 WHERE d > 10;\n-- ok, no partition key update, no constraint violation\nUPDATE range_parted set e = d;\n-- No row found\nUPDATE part_c_1_100 set c = c + 20 WHERE c = 98;\n-- ok, row movement\nUPDATE part_b_10_b_20 set c = c + 20 returning c, b, a;\n:show_data;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *;\n-- ok, row movement, with subset of rows moved into different partition.\nUPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c;\n\n:show_data;\n\n-- Common table needed for multiple test scenarios.\nCREATE TABLE mintab(c1 int);\nINSERT into mintab VALUES (120);\n\n-- update partition key using updatable view.\nCREATE VIEW upview AS SELECT * FROM range_parted WHERE (select c > c1 FROM mintab) WITH CHECK OPTION;\n-- ok\nUPDATE upview set c = 199 WHERE b = 4;\n-- fail, check option violation\nUPDATE upview set c = 120 WHERE b = 4;\n-- fail, row movement with check option violation\nUPDATE upview set a = 'b', b = 15, c = 120 WHERE b = 4;\n-- ok, row movement, check option passes\nUPDATE upview set a = 'b', b = 15 WHERE b = 4;\n\n:show_data;\n\n-- cleanup\nDROP VIEW upview;\n\n-- RETURNING having whole-row vars.\n:init_range_parted;\nUPDATE range_parted set c = 95 WHERE a = 'b' and b > 10 and c > 100 returning (range_parted), *;\n:show_data;\n\n\n-- Transition tables with update row movement\n:init_range_parted;\n\nCREATE FUNCTION trans_updatetrigfunc() RETURNS trigger LANGUAGE plpgsql AS\n$$\n  begin\n    raise notice 'trigger = %, old table = %, new table = %',\n                 TG_NAME,\n                 (select string_agg(old_table::text, ', ' ORDER BY a) FROM old_table),\n                 (select string_agg(new_table::text, ', ' ORDER BY a) FROM new_table);\n    return null;\n  end;\n$$;\n\nCREATE TRIGGER trans_updatetrig\n  AFTER UPDATE ON range_parted REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\n\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end ) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\n\n-- Enabling OLD TABLE capture for both DELETE as well as UPDATE stmt triggers\n-- should not cause DELETEd rows to be captured twice. Similar thing for\n-- INSERT triggers and inserted rows.\nCREATE TRIGGER trans_deletetrig\n  AFTER DELETE ON range_parted REFERENCING OLD TABLE AS old_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nCREATE TRIGGER trans_inserttrig\n  AFTER INSERT ON range_parted REFERENCING NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\nDROP TRIGGER trans_deletetrig ON range_parted;\nDROP TRIGGER trans_inserttrig ON range_parted;\n-- Don't drop trans_updatetrig yet. It is required below.\n\n-- Test with transition tuple conversion happening for rows moved into the\n-- new partition. This requires a trigger that references transition table\n-- (we already have trans_updatetrig). For inserted rows, the conversion\n-- is not usually needed, because the original tuple is already compatible with\n-- the desired transition tuple format. But conversion happens when there is a\n-- BR trigger because the trigger can change the inserted row. So install a\n-- BR triggers on those child partitions where the rows will be moved.\nCREATE FUNCTION func_parted_mod_b() RETURNS trigger AS $$\nBEGIN\n   NEW.b = NEW.b + 1;\n   return NEW;\nEND $$ language plpgsql;\nCREATE TRIGGER trig_c1_100 BEFORE UPDATE OR INSERT ON part_c_1_100\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d1_15 BEFORE UPDATE OR INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d15_20 BEFORE UPDATE OR INSERT ON part_d_15_20\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\n:init_range_parted;\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n\n-- Case where per-partition tuple conversion map array is allocated, but the\n-- map is not required for the particular tuple that is routed, thanks to\n-- matching table attributes of the partition and the target table.\n:init_range_parted;\nUPDATE range_parted set b = 15 WHERE b = 1;\n:show_data;\n\nDROP TRIGGER trans_updatetrig ON range_parted;\nDROP TRIGGER trig_c1_100 ON part_c_1_100;\nDROP TRIGGER trig_d1_15 ON part_d_1_15;\nDROP TRIGGER trig_d15_20 ON part_d_15_20;\nDROP FUNCTION func_parted_mod_b();\n\n-- RLS policies with update-row-movement\n-----------------------------------------\n\nALTER TABLE range_parted ENABLE ROW LEVEL SECURITY;\nCREATE USER regress_range_parted_user;\nGRANT ALL ON range_parted, mintab TO regress_range_parted_user;\nCREATE POLICY seeall ON range_parted AS PERMISSIVE FOR SELECT USING (true);\nCREATE POLICY policy_range_parted ON range_parted for UPDATE USING (true) WITH CHECK (c % 2 = 0);\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error while moving row from\n-- part_a_10_a_20 to part_d_1_15, because we are setting 'c' to an odd number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n-- Create a trigger on part_d_1_15\nCREATE FUNCTION func_d_1_15() RETURNS trigger AS $$\nBEGIN\n   NEW.c = NEW.c + 1; -- Make even numbers odd, or vice versa\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_d_1_15 BEFORE INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_d_1_15();\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n\n-- Here, RLS checks should succeed while moving row from part_a_10_a_20 to\n-- part_d_1_15. Even though the UPDATE is setting 'c' to an odd number, the\n-- trigger at the destination partition again makes it an even number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error. Even though the UPDATE is setting\n-- 'c' to an even number, the trigger at the destination partition again makes\n-- it an odd number.\nUPDATE range_parted set a = 'b', c = 150 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP TRIGGER trig_d_1_15 ON part_d_1_15;\nDROP FUNCTION func_d_1_15();\n\n-- Policy expression contains SubPlan\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_subplan on range_parted\n    AS RESTRICTIVE for UPDATE USING (true)\n    WITH CHECK ((SELECT range_parted.c <= c1 FROM mintab));\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, mintab has row with c1 = 120\nUPDATE range_parted set a = 'b', c = 122 WHERE a = 'a' and c = 200;\n-- ok\nUPDATE range_parted set a = 'b', c = 120 WHERE a = 'a' and c = 200;\n\n-- RLS policy expression contains whole row.\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_wholerow on range_parted AS RESTRICTIVE for UPDATE USING (true)\n   WITH CHECK (range_parted = row('b', 10, 112, 1, NULL)::range_parted);\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- ok, should pass the RLS check\nUPDATE range_parted set a = 'b', c = 112 WHERE a = 'a' and c = 200;\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, the whole row RLS check should fail\nUPDATE range_parted set a = 'b', c = 116 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP POLICY policy_range_parted ON range_parted;\nDROP POLICY policy_range_parted_subplan ON range_parted;\nDROP POLICY policy_range_parted_wholerow ON range_parted;\nREVOKE ALL ON range_parted, mintab FROM regress_range_parted_user;\nDROP USER regress_range_parted_user;\nDROP TABLE mintab;\n\n\n-- statement triggers with update row movement\n---------------------------------------------------\n\n:init_range_parted;\n\nCREATE FUNCTION trigfunc() returns trigger language plpgsql as\n$$\n  begin\n    raise notice 'trigger = % fired on table % during %',\n                 TG_NAME, TG_TABLE_NAME, TG_OP;\n    return null;\n  end;\n$$;\n-- Triggers on root partition\nCREATE TRIGGER parent_delete_trig\n  AFTER DELETE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_update_trig\n  AFTER UPDATE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_insert_trig\n  AFTER INSERT ON range_parted for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_c_1_100\nCREATE TRIGGER c1_delete_trig\n  AFTER DELETE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_update_trig\n  AFTER UPDATE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_insert_trig\n  AFTER INSERT ON part_c_1_100 for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_d_1_15\nCREATE TRIGGER d1_delete_trig\n  AFTER DELETE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_update_trig\n  AFTER UPDATE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_insert_trig\n  AFTER INSERT ON part_d_1_15 for each statement execute procedure trigfunc();\n-- Triggers on leaf partition part_d_15_20\nCREATE TRIGGER d15_delete_trig\n  AFTER DELETE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_update_trig\n  AFTER UPDATE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_insert_trig\n  AFTER INSERT ON part_d_15_20 for each statement execute procedure trigfunc();\n\n-- Move all rows from part_c_100_200 to part_c_1_100. None of the delete or\n-- insert statement triggers should be fired.\nUPDATE range_parted set c = c - 50 WHERE c > 97;\n:show_data;\n\nDROP TRIGGER parent_delete_trig ON range_parted;\nDROP TRIGGER parent_update_trig ON range_parted;\nDROP TRIGGER parent_insert_trig ON range_parted;\nDROP TRIGGER c1_delete_trig ON part_c_1_100;\nDROP TRIGGER c1_update_trig ON part_c_1_100;\nDROP TRIGGER c1_insert_trig ON part_c_1_100;\nDROP TRIGGER d1_delete_trig ON part_d_1_15;\nDROP TRIGGER d1_update_trig ON part_d_1_15;\nDROP TRIGGER d1_insert_trig ON part_d_1_15;\nDROP TRIGGER d15_delete_trig ON part_d_15_20;\nDROP TRIGGER d15_update_trig ON part_d_15_20;\nDROP TRIGGER d15_insert_trig ON part_d_15_20;\n\n\n-- Creating default partition for range\n:init_range_parted;\ncreate table part_def partition of range_parted default;\n\\d+ part_def\ninsert into range_parted values ('c', 9);\n-- ok\nupdate part_def set a = 'd' where a = 'c';\n-- fail\nupdate part_def set a = 'a' where a = 'd';\n\n:show_data;\n\n-- Update row movement from non-default to default partition.\n-- fail, default partition is not under part_a_10_a_20;\nUPDATE part_a_10_a_20 set a = 'ad' WHERE a = 'a';\n-- ok\nUPDATE range_parted set a = 'ad' WHERE a = 'a';\nUPDATE range_parted set a = 'bd' WHERE a = 'b';\n:show_data;\n-- Update row movement from default to non-default partitions.\n-- ok\nUPDATE range_parted set a = 'a' WHERE a = 'ad';\nUPDATE range_parted set a = 'b' WHERE a = 'bd';\n:show_data;\n\n-- Cleanup: range_parted no longer needed.\nDROP TABLE range_parted;\n\nCREATE TABLE list_parted (\n\ta text,\n\tb int\n) PARTITION BY list (a);\nCREATE TABLE list_part1  PARTITION OF list_parted for VALUES in ('a', 'b');\nCREATE TABLE list_default PARTITION OF list_parted default;\nINSERT into list_part1 VALUES ('a', 1);\nINSERT into list_default VALUES ('d', 10);\n\n-- fail\nUPDATE list_default set a = 'a' WHERE a = 'd';\n-- ok\nUPDATE list_default set a = 'x' WHERE a = 'd';\n\nDROP TABLE list_parted;\n\n-- Test retrieval of system columns with non-consistent partition row types.\n-- This is only partially supported, as seen in the results.\n\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table utr1 (a int check (a in (1)), q text, b text);\ncreate table utr2 (a int check (a in (2)), b text);\nalter table utr1 drop column q;\nalter table utrtest attach partition utr1 for values in (1);\nalter table utrtest attach partition utr2 for values in (2);\n\ninsert into utrtest values (1, 'foo')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass;\n\nupdate utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass;\n\ndelete from utrtest\n  returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok;\n\ndrop table utrtest;\n\n--------------\n-- Some more update-partition-key test scenarios below. This time use list\n-- partitions.\n--------------\n\n-- Setup for list partitions\nCREATE TABLE list_parted (a numeric, b int, c int8) PARTITION BY list (a);\nCREATE TABLE sub_parted PARTITION OF list_parted for VALUES in (1) PARTITION BY list (b);\n\nCREATE TABLE sub_part1(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part1 for VALUES in (1);\nCREATE TABLE sub_part2(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part2 for VALUES in (2);\n\nCREATE TABLE list_part1(a numeric, b int, c int8);\nALTER TABLE list_parted ATTACH PARTITION list_part1 for VALUES in (2,3);\n\nINSERT into list_parted VALUES (2,5,50);\nINSERT into list_parted VALUES (3,6,60);\nINSERT into sub_parted VALUES (1,1,60);\nINSERT into sub_parted VALUES (1,2,10);\n\n-- Test partition constraint violation when intermediate ancestor is used and\n-- constraint is inherited from upper root.\nUPDATE sub_parted set a = 2 WHERE c = 10;\n\n-- Test update-partition-key, where the unpruned partitions do not have their\n-- partition keys updated.\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\nUPDATE list_parted set b = c + a WHERE a = 2;\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\n\n\n-- Test the case where BR UPDATE triggers change the partition key.\nCREATE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   NEW.b = 2; -- This is changing partition key column.\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER parted_mod_b before update on sub_part1\n   for each row execute procedure func_parted_mod_b();\n\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\n-- This should do the tuple routing even though there is no explicit\n-- partition-key update, because there is a trigger on sub_part1.\nUPDATE list_parted set c = 70 WHERE b  = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\nDROP TRIGGER parted_mod_b ON sub_part1;\n\n-- If BR DELETE trigger prevented DELETE from happening, we should also skip\n-- the INSERT if that delete is part of UPDATE=>DELETE+INSERT.\nCREATE OR REPLACE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   raise notice 'Trigger: Got OLD row %, but returning NULL', OLD;\n   return NULL;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_skip_delete before delete on sub_part2\n   for each row execute procedure func_parted_mod_b();\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n-- Drop the trigger. Now the row should be moved.\nDROP TRIGGER trig_skip_delete ON sub_part2;\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP FUNCTION func_parted_mod_b();\n\n-- UPDATE partition-key with FROM clause. If join produces multiple output\n-- rows for the same row to be modified, we should tuple-route the row only\n-- once. There should not be any rows inserted.\nCREATE TABLE non_parted (id int);\nINSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);\nUPDATE list_parted t1 set a = 2 FROM non_parted t2 WHERE t1.a = t2.id and a = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP TABLE non_parted;\n\n-- Cleanup: list_parted no longer needed.\nDROP TABLE list_parted;\n\n-- create custom operator class and hash function, for the same reason\n-- explained in alter_table.sql\ncreate or replace function dummy_hashint4(a int4, seed int8) returns int8 as\n$$ begin return (a + seed); end; $$ language 'plpgsql' immutable;\ncreate operator class custom_opclass for type int4 using hash as\noperator 1 = , function 2 dummy_hashint4(int4, int8);\n\ncreate table hash_parted (\n\ta int,\n\tb int\n) partition by hash (a custom_opclass, b custom_opclass);\ncreate table hpart1 partition of hash_parted for values with (modulus 2, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 8, remainder 0);\ncreate table hpart4 partition of hash_parted for values with (modulus 8, remainder 4);\ninsert into hpart1 values (1, 1);\ninsert into hpart2 values (2, 5);\ninsert into hpart4 values (3, 4);\n\n-- fail\nupdate hpart1 set a = 3, b=4 where a = 1;\n-- ok, row movement\nupdate hash_parted set b = b - 1 where b = 1;\n-- ok\nupdate hash_parted set b = b + 8 where b = 1;\n\n-- cleanup\ndrop table hash_parted;\ndrop operator class custom_opclass using hash;\ndrop function dummy_hashint4(a int4, seed int8);\n*/\n\n--drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 39:\nDROP SERVER sqlite_svr;\n--Testcase 40:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/libsqlite.sql",
    "content": "-- Test for SQLite library code source and defaults\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nSELECT sqlite_fdw_sqlite_version();\n--Testcase 3:\nSELECT length(sqlite_fdw_sqlite_code_source());\n--Testcase 4:\nSELECT sqlite_fdw_sqlite_code_source();\n\n--Testcase 7:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/selectfunc.sql",
    "content": "SET datestyle=ISO;\nSET timezone='Japan';\n\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER server1 FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/selectfunc.db');\n--CREATE USER MAPPING FOR CURRENT_USER SERVER server1 OPTIONS(user 'user', password 'pass');\n\n--IMPORT FOREIGN SCHEMA public FROM SERVER server1 INTO public OPTIONS(import_time_text 'false');\n--Testcase 3:\nCREATE FOREIGN TABLE s3(id text OPTIONS (key 'true'), time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text) SERVER server1;\n\n-- s3 (value1 as float8, value2 as bigint)\n--Testcase 4:\n\\d s3;\n--Testcase 5:\nSELECT * FROM s3;\n\n-- select float8() (not pushdown, remove float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select float8() (not pushdown, remove float8, result)\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select sqrt (builtin function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (buitin function, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function,, not pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, not pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select abs (builtin function, explain)\n--Testcase 6:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (buitin function, result)\n--Testcase 7:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (builtin function, not pushdown constraints, explain)\n--Testcase 8:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, not pushdown constraints, result)\n--Testcase 9:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, pushdown constraints, explain)\n--Testcase 10:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select abs (builtin function, pushdown constraints, result)\n--Testcase 11:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select log (builtin function, need to swap arguments, numeric cast, explain)\n-- log_<base>(v) : postgresql (base, v), sqlite (v, base)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (builtin function, need to swap arguments, numeric cast, result)\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, result)\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, result)\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, result)\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log2 (stub function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select log2 (stub function, result)\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select spread (stub agg function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, result)\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, raise exception if not expected type)\n-- SELECT spread(value1::numeric),spread(value2::numeric),spread(value3::numeric),spread(value4::numeric) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs as nest function with agg (pushdown, explain)\n--Testcase 12:\nEXPLAIN VERBOSE\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest function with agg (pushdown, result)\n--Testcase 13:\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest with log2 (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs as nest with log2 (pushdown, result)\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs with non pushdown func and explicit constant (explain)\n--Testcase 14:\nEXPLAIN VERBOSE\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select abs with non pushdown func and explicit constant (result)\n--Testcase 15:\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, result)\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant and tag (error, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1, tag1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select spread (stub agg function and group by influx_time() and tag) (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by influx_time() and tag) (result)\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by tag only) (result)\n-- SELECT tag1,spread(\"value1\") FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY tag1;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function and other aggs) (result)\n-- SELECT sum(\"value1\"),spread(\"value1\"),count(\"value1\") FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs with order by (explain)\n--Testcase 16:\nEXPLAIN VERBOSE\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by (result)\n--Testcase 17:\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by index (result)\n--Testcase 18:\nSELECT value1, abs(1-value1) FROM s3 order by 2,1;\n\n-- select abs with order by index (result)\n--Testcase 19:\nSELECT value1, abs(1-value1) FROM s3 order by 1,2;\n\n-- select abs and as\n--Testcase 20:\nSELECT abs(value3) as abs1 FROM s3;\n\n-- select spread over join query (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread over join query (result, stub call error)\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain, cannot pushdown, stub call error)\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select abs with arithmetic and tag in the middle (explain)\n--Testcase 21:\nEXPLAIN VERBOSE\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select abs with arithmetic and tag in the middle (result)\n--Testcase 22:\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select with order by limit (explain)\n--Testcase 23:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select with order by limit (explain)\n--Testcase 24:\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select mixing with non pushdown func (all not pushdown, explain)\n--Testcase 25:\nEXPLAIN VERBOSE\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- select mixing with non pushdown func (result)\n--Testcase 26:\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- sqlite data prep\n\n-- sqlite pushdown supported functions (explain)\n--Testcase 27:\nEXPLAIN VERBOSE\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown supported functions (result)\n--Testcase 28:\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown nest functions (explain)\n--Testcase 32:\nEXPLAIN VERBOSE\nSELECT round(abs(value2), 0) FROM s3;\n\n-- sqlite pushdown nest functions (result)\n--Testcase 33:\nSELECT round(abs(value2), 0) FROM s3;\n\n-- select mod (builtin function, explain)\n--Testcase 34:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, result)\n--Testcase 35:\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, not pushdown constraints, explain)\n--Testcase 36:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, not pushdown constraints, result)\n--Testcase 37:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, pushdown constraints, explain)\n--Testcase 38:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, pushdown constraints, result)\n--Testcase 39:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 40:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 41:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 42:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 43:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod as nest function with agg (pushdown, explain)\n--Testcase 44:\nEXPLAIN VERBOSE\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest function with agg (pushdown, result)\n--Testcase 45:\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, explain)\n--Testcase 46:\nEXPLAIN VERBOSE\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, result)\n--Testcase 47:\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod with non pushdown func and explicit constant (explain)\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with non pushdown func and explicit constant (result)\n--Testcase 49:\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with order by (explain)\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by (result)\n--Testcase 51:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by index (result)\n--Testcase 52:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 2,1;\n\n-- select mod with order by index (result)\n--Testcase 53:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 1,2;\n\n-- select mod with group by (explain)\n--Testcase 54:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by (result)\n--Testcase 55:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by index (result)\n--Testcase 56:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 2,1;\n\n-- select mod with group by index (result)\n--Testcase 57:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2;\n\n-- select mod with group by having (explain)\n--Testcase 58:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by having (result)\n--Testcase 59:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by index having (result)\n--Testcase 60:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2 HAVING value1 > 1;\n\n-- select mod and as\n--Testcase 61:\nSELECT value1, mod(value2, 2) as mod1 FROM s3;\n\n--Testcase 29:\nDROP FOREIGN TABLE s3;\n--Testcase 30:\nDROP SERVER server1;\n--Testcase 31:\nDROP EXTENSION sqlite_fdw;\n"
  },
  {
    "path": "sql/15.7/sqlite_fdw.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 129:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 130:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 131:\nCREATE FOREIGN TABLE department(department_id int OPTIONS (key 'true'), department_name text) SERVER sqlite_svr; \n--Testcase 132:\nCREATE FOREIGN TABLE employee(emp_id int OPTIONS (key 'true'), emp_name text, emp_dept_id int) SERVER sqlite_svr;\n--Testcase 133:\nCREATE FOREIGN TABLE empdata(emp_id int OPTIONS (key 'true'), emp_dat bytea) SERVER sqlite_svr;\n--Testcase 134:\nCREATE FOREIGN TABLE numbers(a int OPTIONS (key 'true'), b varchar(255)) SERVER sqlite_svr;\n--Testcase 135:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n--Testcase 136:\nCREATE FOREIGN TABLE noprimary(a int, b text) SERVER sqlite_svr;\n\n-- updatable option test (github pull 59)\nCREATE FOREIGN TABLE RO_RW_test(i int OPTIONS (key 'true'), a text, b float, c int) SERVER sqlite_svr;\n\n--Testcase 1:\nSELECT * FROM department LIMIT 10;\n--Testcase 2:\nSELECT * FROM employee LIMIT 10;\n--Testcase 3:\nSELECT * FROM empdata LIMIT 10;\n\n--Testcase 4:\nINSERT INTO department VALUES(generate_series(1,100), 'dept - ' || generate_series(1,100));\n--Testcase 5:\nINSERT INTO employee VALUES(generate_series(1,100), 'emp - ' || generate_series(1,100), generate_series(1,100));\n--Testcase 6:\nINSERT INTO empdata  VALUES(1, decode ('01234567', 'hex'));\n\n--Testcase 7:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 8:\nINSERT INTO numbers VALUES(2, 'Two');\n--Testcase 9:\nINSERT INTO numbers VALUES(3, 'Three');\n--Testcase 10:\nINSERT INTO numbers VALUES(4, 'Four');\n--Testcase 11:\nINSERT INTO numbers VALUES(5, 'Five');\n--Testcase 12:\nINSERT INTO numbers VALUES(6, 'Six');\n--Testcase 13:\nINSERT INTO numbers VALUES(7, 'Seven');\n--Testcase 14:\nINSERT INTO numbers VALUES(8, 'Eight');\n--Testcase 15:\nINSERT INTO numbers VALUES(9, 'Nine');\n\n--Testcase 16:\nSELECT count(*) FROM department;\n--Testcase 17:\nSELECT count(*) FROM employee;\n--Testcase 18:\nSELECT count(*) FROM empdata;\n\n--Testcase 19:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n\n--Testcase 20:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) LIMIT 10;\n\n--Testcase 21:\nSELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n--Testcase 22:\nSELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) ORDER BY d.department_id LIMIT 10;\n--Testcase 23:\nSELECT * FROM empdata;\n\n--Testcase 24:\nDELETE FROM employee WHERE emp_id = 10;\n\n--Testcase 25:\nSELECT COUNT(*) FROM department LIMIT 10;\n--Testcase 26:\nSELECT COUNT(*) FROM employee WHERE emp_id = 10;\n\n--Testcase 27:\nUPDATE employee SET emp_name = 'UPDATEd emp' WHERE emp_id = 20;\n--Testcase 28:\nSELECT emp_id, emp_name FROM employee WHERE emp_name like 'UPDATEd emp';\n\n--Testcase 29:\nUPDATE empdata SET emp_dat = decode ('0123', 'hex');\n--Testcase 30:\nSELECT * FROM empdata;\n\n--Testcase 31:\nSELECT * FROM employee LIMIT 10;\n--Testcase 32:\nSELECT * FROM employee WHERE emp_id IN (1);\n--Testcase 33:\nSELECT * FROM employee WHERE emp_id IN (1,3,4,5);\n--Testcase 34:\nSELECT * FROM employee WHERE emp_id IN (10000,1000);\n\n--Testcase 35:\nSELECT * FROM employee WHERE emp_id NOT IN (1) LIMIT 5;\n--Testcase 36:\nSELECT * FROM employee WHERE emp_id NOT IN (1,3,4,5) LIMIT 5;\n--Testcase 37:\nSELECT * FROM employee WHERE emp_id NOT IN (10000,1000) LIMIT 5;\n\n--Testcase 38:\nSELECT * FROM employee WHERE emp_id NOT IN (SELECT emp_id FROM employee WHERE emp_id IN (1,10));\n--Testcase 39:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 1', 'emp - 2') LIMIT 5;\n--Testcase 40:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 10') LIMIT 5;\n\n--Testcase 41:\nSELECT * FROM numbers WHERE (CASE WHEN a % 2 = 0 THEN 1 WHEN a % 5 = 0 THEN 1 ELSE 0 END) = 1;\n--Testcase 42:\nSELECT * FROM numbers WHERE (CASE b WHEN 'Two' THEN 1 WHEN 'Six' THEN 1 ELSE 0 END) = 1;\n\n--Testcase 152:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE (round(abs(a)) = 1);\n--Testcase 153:\nSELECT * FROM numbers WHERE (round(abs(a)) = 1);\n\n--Testcase 137:\ncreate or replace function test_param_WHERE() returns void as $$\nDECLARE\n  n varchar;\nBEGIN\n  FOR x IN 1..9 LOOP\n--Testcase 138:\n    SELECT b INTO n from numbers WHERE a=x;\n    raise notice 'Found number %', n;\n  end loop;\n  return;\nEND\n$$ LANGUAGE plpgsql;\n--Testcase 43:\nSELECT test_param_WHERE();\n\n--Testcase 44:\nSELECT b from numbers WHERE a=1;\n--Testcase 45:\nEXPLAIN(COSTS OFF) SELECT b from numbers WHERE a=1;\n\n--Testcase 46:\nSELECT a FROM numbers WHERE b = (SELECT NULL::text);\n\n\n--Testcase 47:\nPREPARE stmt1 (int, int) AS\n  SELECT * FROM numbers WHERE a=$1 or a=$2;\n--Testcase 48:\nEXECUTE stmt1(1,2);\n--Testcase 49:\nEXECUTE stmt1(2,2); \n--Testcase 50:\nEXECUTE stmt1(3,2); \n--Testcase 51:\nEXECUTE stmt1(4,2);\n-- generic plan\n--Testcase 52:\nEXECUTE stmt1(5,2); \n--Testcase 53:\nEXECUTE stmt1(6,2); \n--Testcase 54:\nEXECUTE stmt1(7,2); \n\n--Testcase 55:\nDELETE FROM employee;\n--Testcase 56:\nDELETE FROM department;\n--Testcase 57:\nDELETE FROM empdata;\n--Testcase 58:\nDELETE FROM numbers;\n\nBEGIN;\n--Testcase 59:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 60:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n\n--Testcase 61:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 62:\nINSERT INTO numbers VALUES(3, 'Three');\nROLLBACK;\n--Testcase 63:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 64:\nINSERT INTO numbers VALUES(4, 'Four');\nSAVEPOINT my_savepoint;\n--Testcase 65:\nINSERT INTO numbers VALUES(5, 'Five');\nROLLBACK TO SAVEPOINT my_savepoint;\n--Testcase 66:\nINSERT INTO numbers VALUES(6, 'Six');\nCOMMIT;\n\n--Testcase 67:\nSELECT * from numbers;\n\n-- duplicate key\n--Testcase 68:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 69:\nDELETE from numbers;\n\nBEGIN;\n--Testcase 70:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 71:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n-- violate unique constraint\n--Testcase 72:\nUPDATE numbers SET b='Two' WHERE a = 1; \n--Testcase 73:\nSELECT * from numbers;\n\n-- push down\n--Testcase 74:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n-- (1,2,3) is pushed down\n--Testcase 75:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (1,2,3) AND (1,2) < (a,5);\n\n--Testcase 76:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (a+2*a,5);\n\n--Testcase 77:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n--Testcase 78:\nSELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n--Testcase 79:\nSELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n-- ANY with ARRAY expression\n--Testcase 154:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n--Testcase 155:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n\n--Testcase 156:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n--Testcase 157:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n\n--Testcase 158:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n--Testcase 159:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n\n--Testcase 160:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n--Testcase 161:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n\n--Testcase 162:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n--Testcase 163:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n\n--Testcase 164:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n--Testcase 165:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n\n-- ANY with ARRAY const\n--Testcase 166:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n--Testcase 167:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n\n--Testcase 168:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n--Testcase 169:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n\n--Testcase 170:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n--Testcase 171:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n\n--Testcase 172:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n--Testcase 173:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n\n--Testcase 174:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n--Testcase 175:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n\n--Testcase 176:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n--Testcase 177:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n\n--Testcase 210:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n--Testcase 211:\nSELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n\n--Testcase 212:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n--Testcase 213:\nSELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n\n-- ALL with ARRAY expression\n--Testcase 178:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n--Testcase 179:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n\n--Testcase 180:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n--Testcase 181:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n\n--Testcase 182:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n--Testcase 183:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n\n--Testcase 184:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n--Testcase 185:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n\n--Testcase 186:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n--Testcase 187:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n\n--Testcase 188:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n--Testcase 189:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n\n-- ALL with ARRAY const\n--Testcase 190:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n--Testcase 191:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n\n--Testcase 192:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n--Testcase 193:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n\n--Testcase 194:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n--Testcase 195:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n\n--Testcase 196:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n--Testcase 197:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n\n--Testcase 198:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n--Testcase 199:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n\n--Testcase 200:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n--Testcase 201:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n\n-- ANY/ALL with TEXT ARRAY const\n--Testcase 202:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n--Testcase 203:\nSELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n\n--Testcase 204:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n--Testcase 205:\nSELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n\n--Testcase 206:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n--Testcase 207:\nSELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n\n--Testcase 208:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n--Testcase 209:\nSELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n\n--Testcase 80:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 81:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 82:\nUPDATE multiprimary SET b = 10 WHERE c = 3;\n--Testcase 83:\nSELECT * from multiprimary;\n--Testcase 84:\nUPDATE multiprimary SET a = 10 WHERE a = 1;\n--Testcase 85:\nSELECT * from multiprimary;\n--Testcase 86:\nUPDATE multiprimary SET a = 100, b=200, c=300 WHERE a=10 AND b=10;\n--Testcase 87:\nSELECT * from multiprimary;\n--Testcase 88:\nUPDATE multiprimary SET a = 1234;\n--Testcase 89:\nSELECT * from multiprimary;\n--Testcase 90:\nUPDATE multiprimary SET a = a+1, b=b+1 WHERE b=200 AND c=300;\n\n--Testcase 91:\nSELECT * from multiprimary;\n--Testcase 92:\nDELETE from multiprimary WHERE a = 1235;\n--Testcase 93:\nSELECT * from multiprimary;\n--Testcase 94:\nDELETE from multiprimary WHERE b = 2;\n--Testcase 95:\nSELECT * from multiprimary;\n\n--Testcase 96:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 97:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 98:\nINSERT INTO multiprimary VALUES(1,10,20);\n--Testcase 99:\nINSERT INTO multiprimary VALUES(2,20,40);\n\n\n\n--Testcase 100:\nSELECT count(distinct a) from multiprimary;\n--Testcase 101:\nSELECT sum(b),max(b), min(b) from multiprimary;\n--Testcase 102:\nSELECT sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n--Testcase 103:\nSELECT sum(a) from multiprimary group by b having sum(a) > 0 order by sum(a);\n--Testcase 104:\nSELECT sum(a) A from multiprimary group by b having avg(abs(a)) > 0 AND sum(a) > 0 order by A;\n--Testcase 105:\nSELECT count(nullif(a, 1)) FROM multiprimary;\n--Testcase 106:\nSELECT a,a FROM multiprimary group by 1,2;\n--Testcase 107:\nSELECT * from multiprimary, numbers WHERE multiprimary.a=numbers.a;\n\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n--Testcase 109:\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n\n--Testcase 110:\nINSERT INTO numbers VALUES(4, 'Four');\n\n-- All where clauses are pushed down\n--Testcase 111:\nSELECT * FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n--Testcase 112:\nEXPLAIN (verbose, costs off)  SELECT b, length(b) FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n\n-- Only \"length(b) = 4\" are pushed down\n--Testcase 113:\nSELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n--Testcase 114:\nEXPLAIN (verbose, costs off) SELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n\n--Testcase 115:\nINSERT INTO multiprimary (b,c) VALUES (99, 100);\n--Testcase 116:\nSELECT c FROM multiprimary WHERE COALESCE(a,b,c) = 99;\n\n\n--Testcase 139:\nCREATE FOREIGN TABLE multiprimary2(a int, b int, c int OPTIONS(column_name 'b')) SERVER sqlite_svr OPTIONS (table 'multiprimary');\n--Testcase 117:\nSELECT * FROM multiprimary2;\n--Testcase 214:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN a OPTIONS(ADD column_name 'b');\n--Testcase 118:\nSELECT * FROM multiprimary2;\n--Testcase 215:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN b OPTIONS (column_name 'nosuch column');\n--Testcase 119:\nSELECT * FROM multiprimary2;\n--Testcase 140:\nEXPLAIN (VERBOSE) SELECT * FROM multiprimary2;\n--Testcase 120:\nSELECT a FROM multiprimary2 WHERE b = 1;\n\n\n--Testcase 141:\nCREATE FOREIGN TABLE columntest(a int OPTIONS(column_name 'a a', key 'true'), \"b b\" int  OPTIONS(key 'true'), c int OPTIONS(column_name 'c c')) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO columntest VALUES(1,2,3);\n--Testcase 122:\nUPDATE columntest SET c=10 WHERE a = 1;\n--Testcase 123:\nSELECT * FROM columntest;\n--Testcase 124:\nUPDATE columntest SET a=100 WHERE c = 10;\n--Testcase 125:\nSELECT * FROM columntest;\n--Testcase 126:\nINSERT INTO noprimary VALUES(1,'2');\n--Testcase 127:\nINSERT INTO noprimary SELECT * FROM noprimary;\n--Testcase 128:\nSELECT * FROM noprimary;\n\n--get version\n--Testcase 153:\n\\df sqlite*\n--Testcase 154:\nSELECT * FROM public.sqlite_fdw_version();\n--Testcase 155:\nSELECT sqlite_fdw_version();\n\n-- issue #44 github\n--Testcase 156:\nCREATE FOREIGN TABLE fts_table (name text,  description text) SERVER sqlite_svr;\n\n--Testcase 157:\nINSERT INTO fts_table VALUES ('this is name', 'this is description');\n\n--Testcase 158:\nSELECT * FROM fts_table; -- should work\n\n--Testcase 159:\nALTER TABLE fts_table ALTER COLUMN name TYPE int;\n\n--Testcase 160:\nSELECT * FROM fts_table; -- should fail\n\n-- issue #62 github\n--Testcase 236:\nINSERT INTO noprimary VALUES (4, 'Test''s');\n--Testcase 237:\nINSERT INTO noprimary VALUES (5, 'Test');\n\n--Testcase 238:\nSELECT * FROM noprimary;\n--Testcase 239:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b = 'Test''s';\n--Testcase 240:\nSELECT * FROM noprimary where b = 'Test''s';\n\n--Testcase 241:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n--Testcase 242:\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n\n-- INSERT/UPDATE whole row with generated column\n--Testcase 216:\nCREATE FOREIGN TABLE grem1_1 (\n  a int generated always as (0) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_1');\n\n--Testcase 217:\nINSERT INTO grem1_1 DEFAULT VALUES;\n--Testcase 218:\nSELECT * FROM grem1_1;\n\n--Testcase 219:\nCREATE FOREIGN TABLE grem1_2 (\n  a int generated always as (0) stored,\n  b int generated always as (1) stored,\n  c int generated always as (2) stored,\n  d int generated always as (3) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_2');\n--Testcase 220:\nINSERT INTO grem1_2 DEFAULT VALUES;\n--Testcase 221:\nSELECT * FROM grem1_2;\n\n-- Executable test case for pushdown CASE expressions (results)\n--Testcase 224:\nCREATE FOREIGN TABLE case_exp(c1 int OPTIONS (key 'true'), c3 text, c6 varchar(10)) SERVER sqlite_svr;\n\n--Testcase 225:\nINSERT INTO case_exp\n  SELECT id,\n         to_char(id, 'FM00000'),\n         id % 10\n  FROM generate_series(1, 10) id;\n\n--Testcase 226:\nSELECT * FROM case_exp;\n\n-- CASE arg WHEN\n--Testcase 227:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n--Testcase 228:\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 229:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 230:\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n--Testcase 232:\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 233:\nSELECT * FROM case_exp WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n--Testcase 234:\nDELETE FROM case_exp;\n\n-- readonly/readwrite tests\n-- Full combinations\n-- force_RO default SERVER default TABLE default\n-- force_RO default SERVER true    TABLE default\n-- force_RO default SERVER false   TABLE default\n-- force_RO default SERVER default TABLE true\n-- force_RO default SERVER default TABLE false\n-- force_RO default SERVER true    TABLE true\n-- force_RO default SERVER false   TABLE true\n-- force_RO default SERVER false   TABLE false\n-- force_RO default SERVER true    TABLE false\n-- force_RO false   SERVER default TABLE default\n-- force_RO false   SERVER true    TABLE default\n-- force_RO false   SERVER false   TABLE default\n-- force_RO false   SERVER default TABLE true\n-- force_RO false   SERVER default TABLE false\n-- force_RO false   SERVER true    TABLE true\n-- force_RO false   SERVER false   TABLE true\n-- force_RO false   SERVER false   TABLE false\n-- force_RO false   SERVER true    TABLE false\n-- force_RO true    SERVER default TABLE default\n-- force_RO true    SERVER true    TABLE default\n-- force_RO true    SERVER false   TABLE default\n-- force_RO true    SERVER default TABLE true\n-- force_RO true    SERVER default TABLE false\n-- force_RO true    SERVER true    TABLE true\n-- force_RO true    SERVER false   TABLE true\n-- force_RO true    SERVER false   TABLE false\n-- force_RO true    SERVER true    TABLE false\n\n-- force_RO default SERVER default TABLE default\n--Testcase 235:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 236:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 237:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO default SERVER true TABLE default\n--Testcase 238:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 239:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 240:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 241:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 242:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n\n-- force_RO default SERVER false TABLE default\n--Testcase 243:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 244:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 245:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 246:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER default TABLE true\n--Testcase 247:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 248:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 249:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 250:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 251:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO default SERVER default TABLE false\n--Testcase 252:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 253:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 254:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 255:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER true TABLE true\n--Testcase 256:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 257:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 258:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 258:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 260:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 261:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO default SERVER false TABLE true\n--Testcase 262:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 263:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 264:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 265:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO default SERVER false TABLE false\n--Testcase 266:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 267:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 268:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 269:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO default SERVER true TABLE false\n--Testcase 270:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 271:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 272:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 273:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 274:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 275:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 276:\nSELECT * FROM RO_RW_test ORDER BY i;\n\n--Bind error message test for some unsupported data type\n--Testcase 277:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 278:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 279:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 277:\nDELETE FROM RO_RW_test;\n\n--Testcase 278:\nALTER SERVER sqlite_svr OPTIONS (ADD force_readonly 'false');\n\n-- force_RO false SERVER default TABLE default\n--Testcase 279:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 280:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 281:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO false SERVER true TABLE default\n--Testcase 282:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 283:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 284:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 285:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 286:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n-- force_RO false SERVER false TABLE default\n--Testcase 287:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 288:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 289:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 290:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER default TABLE true\n--Testcase 291:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 292:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 293:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 294:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 295:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO false SERVER default TABLE false\n--Testcase 296:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 297:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 298:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 299:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER true TABLE true\n--Testcase 300:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 301:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 302:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 303:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 304:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 305:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO false SERVER false TABLE true\n--Testcase 306:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 307:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 308:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 309:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO false SERVER false TABLE false\n--Testcase 310:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 311:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 312:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 313:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO false SERVER true TABLE false\n--Testcase 314:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 315:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 316:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 317:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 318:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 319:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 320:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 321:\nDELETE FROM RO_RW_test;\n\n--Testcase 322:\nALTER SERVER sqlite_svr OPTIONS (SET force_readonly 'true');\n\n-- force_RO true SERVER default TABLE default\n--Testcase 323:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- ERR\n--Testcase 324:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- ERR\n--Testcase 325:\nDELETE FROM RO_RW_test WHERE i=2; -- ERR\n\n-- force_RO true SERVER true TABLE default\n--Testcase 326:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 327:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- ERR\n--Testcase 328:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- ERR\n--Testcase 329:\nDELETE FROM RO_RW_test WHERE i=3; -- ERR\n--Testcase 330:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- ERR\n-- force_RO true SERVER false TABLE default\n--Testcase 331:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 332:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 333:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 334:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER default TABLE true\n--Testcase 335:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 336:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 337:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- ERR\n--Testcase 338:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- ERR\n--Testcase 339:\nDELETE FROM RO_RW_test WHERE i=6; -- ERR\n\n-- force_RO true SERVER default TABLE false\n--Testcase 340:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 341:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 342:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 343:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER true TABLE true\n--Testcase 344:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true'); -- ERR\n--Testcase 345:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true'); -- ERR\n--Testcase 346:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- ERR\n--Testcase 347:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 348:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 349:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- ERR\n\n-- force_RO true SERVER false TABLE true\n--Testcase 350:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 351:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- ERR\n--Testcase 352:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- ERR\n--Testcase 353:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER false TABLE false\n--Testcase 354:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 355:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 356:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 357:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER true TABLE false\n--Testcase 358:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 359:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 360:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 361:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 362:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 363:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 364:\nALTER SERVER sqlite_svr OPTIONS (DROP force_readonly);\n\n--Testcase 365:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 366:\nDROP FOREIGN TABLE RO_RW_test;\n-- End of RO/RW test\n\n--Bind error message test for some unsupported data type\n--Testcase 366:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 367:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 368:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 142:\nDROP FUNCTION test_param_WHERE();\n--Testcase 143:\nDROP FOREIGN TABLE numbers;\n--Testcase 144:\nDROP FOREIGN TABLE department;\n--Testcase 145:\nDROP FOREIGN TABLE employee;\n--Testcase 146:\nDROP FOREIGN TABLE empdata;\n--Testcase 147:\nDROP FOREIGN TABLE multiprimary;\n--Testcase 148:\nDROP FOREIGN TABLE multiprimary2;\n--Testcase 149:\nDROP FOREIGN TABLE columntest;\n--Testcase 150:\nDROP FOREIGN TABLE noprimary;\n--Testcase 161:\nDROP FOREIGN TABLE fts_table;\n--Testcase 222:\nDROP FOREIGN TABLE grem1_1;\n--Testcase 223:\nDROP FOREIGN TABLE grem1_2;\n--Testcase 235:\nDROP FOREIGN TABLE case_exp;\n\n--Testcase 151:\nDROP SERVER sqlite_svr;\n--Testcase 152:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/bitstring.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 02:\nCREATE FOREIGN TABLE \"type_BIT\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6)) SERVER sqlite_svr OPTIONS (table 'type_BIT');\n--Testcase 03:\nDROP FOREIGN TABLE IF EXISTS \"type_BIT+\";\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6), \"t\" text, \"l\" smallint, \"bi\" bigint OPTIONS (column_name 'b')) SERVER sqlite_svr OPTIONS (table 'type_BIT+');\n--Testcase 05: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (1, 1);\n--Testcase 06: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (2, 2);\n--Testcase 07: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (3, '1');\n--Testcase 08: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (4, '10');\n--Testcase 09: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 10:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 11:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 12:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 13:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 14: type mismatch with proper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (10, 53);\n--Testcase 15:\nSELECT * FROM \"type_BIT+\";\n--Testcase 16:\nSELECT * FROM \"type_BIT\" WHERE b < '110110';\n--Testcase 17:\nSELECT * FROM \"type_BIT\" WHERE b > '110110';\n--Testcase 18:\nSELECT * FROM \"type_BIT\" WHERE b = '110110';\n\n--Testcase 20:\nCREATE FOREIGN TABLE \"type_VARBIT\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70)) SERVER sqlite_svr OPTIONS (table 'type_VARBIT');\n--Testcase 21:\nDROP FOREIGN TABLE IF EXISTS \"type_VARBIT+\";\n--Testcase 22:\nCREATE FOREIGN TABLE \"type_VARBIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70), \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_VARBIT+');\n--Testcase 23:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (1, '1');\n--Testcase 24:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (2, '10');\n--Testcase 25:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (3, '11');\n--Testcase 26:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (4, '100');\n--Testcase 27:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 28:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 29:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 30:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 31:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 32:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (10, '0100100101011001010010101000111110110101101101111011000101010');\n--Testcase 33:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (11, '01001001010110010100101010001111101101011011011110110001010101');\n\n--Testcase 34:\nSELECT * FROM \"type_VARBIT+\";\n--Testcase 35:\nSELECT * FROM \"type_VARBIT+\" WHERE b < '110110';\n--Testcase 36:\nSELECT * FROM \"type_VARBIT+\" WHERE b > '110110';\n--Testcase 37:\nSELECT * FROM \"type_VARBIT+\" WHERE b = '110110';\n\n--Testcase 38:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (12, '010010010101100101001010100011111011010110110111101100010101010');\n--Testcase 39:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (13, '0100100101011001010010101000111110110101101101111011000101010101');\n--Testcase 40: very long bit string, expected ERROR, 65 bits\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (14, '01001001010110010100101010001111101101011011011110110001010101010');\n--Testcase 41:\nSELECT * FROM \"type_VARBIT+\" WHERE \"i\" > 10;\n\n--Testcase 42:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 43:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 44:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 45:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 46:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 47:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 49:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 51:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 52:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 53:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n\n--Testcase 54:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 55:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 56:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 57:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 58:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 59:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 61:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 62:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 63:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 64:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 65:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n\n--Testcase 66:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 67:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 68:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 69:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 70:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 71:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 72:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 73:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 74:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 75:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 76:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 77:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 78:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 79:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 80:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 81:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 82:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 83:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 84:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 85:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 86:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 87:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 88:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 89:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 90:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 91:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 92:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 93:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 94:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 95:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 005:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/bool.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 000:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 001:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;\n--Testcase 02:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (1, TRUE);\n--Testcase 03:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (2, FALSE);\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BOOLEAN+\"( \"i\" int, \"b\" bool, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');\n--Testcase 05:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE text;\n--Testcase 06:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (3, TRUE);\n--Testcase 07:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (4, FALSE);\n--Testcase 08:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (5, true);\n--Testcase 09:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (6, false);\n--Testcase 10:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (7, 'Yes');\n--Testcase 11:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (8, 'YeS');\n--Testcase 12:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (9, 'yes');\n--Testcase 13:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (10, 'no');\n--Testcase 14:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (11, 'No');\n--Testcase 15:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (12, 'nO');\n--Testcase 16:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (13, 'off');\n--Testcase 17:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (14, 'oFf');\n--Testcase 18:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (15, 'on');\n--Testcase 19:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (16, 'ON');\n--Testcase 20:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (17, 't');\n--Testcase 21:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (18, 'T');\n--Testcase 22:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (19, 'Y');\n--Testcase 23:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (20, 'y');\n--Testcase 24:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (21, 'F');\n--Testcase 25:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (22, 'f');\n--Testcase 26:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (23, 'x');\n--Testcase 27:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (24, '0');\n--Testcase 28:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (25, '1');\n--Testcase 29:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (26, NULL);\n--Testcase 30:\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 31:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 32:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 35\nDELETE FROM \"type_BOOLEAN\" WHERE i = 23;\n--Testcase 36:\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 37:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NULL;\n--Testcase 38:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NOT NULL;\n--Testcase 39:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b;\n--Testcase 40:\nSELECT * FROM \"type_BOOLEAN+\" WHERE NOT b;\n\n--Testcase 41:\nCREATE FOREIGN TABLE \"type_BOOLEANpk\" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 42:\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 43:\nINSERT INTO \"type_BOOLEANpk\" VALUES (FALSE);\n--Testcase 44: ERR - primary key\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 45:\nDELETE FROM \"type_BOOLEANpk\";\n\n--Testcase 46:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE float8;\n--Testcase 47:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (27, 3.14159265358979);\n--Testcase 48:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 49: ERR - invalid float for bool column\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 50\nDELETE FROM \"type_BOOLEAN\" WHERE i = 27;\n--Testcase 51:\nSELECT * FROM \"type_BOOLEAN+\";\n\n--Testcase 52:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE b;\n--Testcase 53:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE NOT b;\n--Testcase 54:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE b;\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE NOT b;\n\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n--Testcase 57:\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n\n--Testcase 58:\nCREATE FOREIGN TABLE \"type_BOOLEAN_oper\"( \"i\" int  OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');\n--Testcase 59: see INIT.SQL with mixed affinity boolean data\nSELECT * FROM \"type_BOOLEAN_oper\";\n--Testcase 60:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n--Testcase 61:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n\n--Testcase 62:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n--Testcase 63:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n\n--Testcase 64:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n--Testcase 65:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n\n--Testcase 66:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 67:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 68:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 69:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 70:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 71:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 72:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 73:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 74:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 75:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b2;\n--Testcase 76:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 77:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE b2;\n--Testcase 78:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n\n--Testcase 79:\nDELETE FROM \"type_BOOLEAN\";\n\n--Testcase 003:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/float4.sql",
    "content": "--\n-- FLOAT4\n--\n--Testcase 46:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 47:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 48:\nCREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 49:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('    0.0');\n--Testcase 2:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30   ');\n--Testcase 3:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     -34.84    ');\n--Testcase 4:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');\n--Testcase 5:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');\n\n-- test for over and under flow\n--Testcase 6:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');\n--Testcase 7:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');\n--Testcase 8:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');\n--Testcase 9:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');\n\n--Testcase 50:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);\n--Testcase 51:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);\n--Testcase 52:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);\n--Testcase 53:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);\n\n--Testcase 54:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');\n--Testcase 55:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');\n--Testcase 56:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');\n--Testcase 57:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('       ');\n--Testcase 12:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     - 3.0');\n--Testcase 17:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('123            5');\n\n-- special inputs\n--Testcase 18:\nDELETE FROM FLOAT4_TMP;\n--Testcase 58:\nINSERT INTO FLOAT4_TMP VALUES ('NaN'::float4);\n--Testcase 59:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 20:\nDELETE FROM FLOAT4_TMP;\n--Testcase 60:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4);\n--Testcase 61:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 21:\nDELETE FROM FLOAT4_TMP;\n--Testcase 62:\nINSERT INTO FLOAT4_TMP VALUES ('   NAN  '::float4);\n--Testcase 63:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 22:\nDELETE FROM FLOAT4_TMP;\n--Testcase 64:\nINSERT INTO FLOAT4_TMP VALUES ('infinity'::float4);\n--Testcase 65:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 23:\nDELETE FROM FLOAT4_TMP;\n--Testcase 66:\nINSERT INTO FLOAT4_TMP VALUES ('          -INFINiTY   '::float4);\n--Testcase 67:\nSELECT f1 FROM FLOAT4_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT4_TMP;\n--Testcase 68:\nINSERT INTO FLOAT4_TMP VALUES ('N A N'::float4);\n--Testcase 69:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 26:\nDELETE FROM FLOAT4_TMP;\n--Testcase 70:\nINSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4);\n--Testcase 71:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 27:\nDELETE FROM FLOAT4_TMP;\n--Testcase 72:\nINSERT INTO FLOAT4_TMP VALUES (' INFINITY    x'::float4);\n--Testcase 73:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT4_TMP;\n--Testcase 74:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0);\n--Testcase 75:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 30:\nDELETE FROM FLOAT4_TMP;\n--Testcase 76:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4);\n--Testcase 77:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 185:\nDELETE FROM FLOAT4_TMP;\n--Testcase 186:\nINSERT INTO FLOAT4_TMP VALUES ('42'::float4 / 'Infinity'::float4);\n--Testcase 187:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 31:\nDELETE FROM FLOAT4_TMP;\n--Testcase 78:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4);\n--Testcase 79:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 188:\nDELETE FROM FLOAT4_TMP;\n--Testcase 189:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / '0'::float4);\n--Testcase 190:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 32:\nDELETE FROM FLOAT4_TMP;\n--Testcase 80:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4);\n--Testcase 81:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT4_TBL;\n\n--SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';\n\n--SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 35:\nSELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 36:\nSELECT f.* FROM FLOAT4_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 37:\nSELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 38:\nSELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 39:\nSELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 40:\nSELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n-- test divide by zero\n--Testcase 41:\nSELECT f.f1 / '0.0' from FLOAT4_TBL f;\n\n--Testcase 42:\nSELECT * FROM FLOAT4_TBL;\n\n-- test the unary float4abs operator\n--Testcase 43:\nSELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;\n\n--Testcase 44:\nUPDATE FLOAT4_TBL\n   SET f1 = FLOAT4_TBL.f1 * '-1'\n   WHERE FLOAT4_TBL.f1 > '0.0';\n\n--Testcase 45:\nSELECT * FROM FLOAT4_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 82:\nDELETE FROM FLOAT4_TMP;\n--Testcase 83:\nINSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4);\n--Testcase 84:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 85:\nDELETE FROM FLOAT4_TMP;\n--Testcase 86:\nINSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4);\n--Testcase 87:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 88:\nDELETE FROM FLOAT4_TMP;\n--Testcase 89:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4);\n--Testcase 90:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 91:\nDELETE FROM FLOAT4_TMP;\n--Testcase 92:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4);\n--Testcase 93:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 94:\nDELETE FROM FLOAT4_TMP;\n--Testcase 95:\nINSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4);\n--Testcase 96:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 97:\nDELETE FROM FLOAT4_TMP;\n--Testcase 98:\nINSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4);\n--Testcase 99:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 100:\nDELETE FROM FLOAT4_TMP;\n--Testcase 101:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4);\n--Testcase 102:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 103:\nDELETE FROM FLOAT4_TMP;\n--Testcase 104:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4);\n--Testcase 105:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 106:\nDELETE FROM FLOAT4_TMP;\n--Testcase 107:\nINSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4);\n--Testcase 108:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 109:\nDELETE FROM FLOAT4_TMP;\n--Testcase 110:\nINSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4);\n--Testcase 111:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 112:\nDELETE FROM FLOAT4_TMP;\n--Testcase 113:\nINSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4);\n--Testcase 114:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 115:\nDELETE FROM FLOAT4_TMP;\n--Testcase 116:\nINSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4);\n--Testcase 117:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n\n-- Test for correct input rounding in edge cases.\n-- These lists are from Paxson 1991, excluding subnormals and\n-- inputs of over 9 sig. digits.\n--Testcase 118:\nDELETE FROM FLOAT4_TMP;\n--Testcase 119:\nINSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4);\n--Testcase 120:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 121:\nDELETE FROM FLOAT4_TMP;\n--Testcase 122:\nINSERT INTO FLOAT4_TMP VALUES ('67e14'::float4);\n--Testcase 123:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 124:\nDELETE FROM FLOAT4_TMP;\n--Testcase 125:\nINSERT INTO FLOAT4_TMP VALUES ('985e15'::float4);\n--Testcase 126:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 127:\nDELETE FROM FLOAT4_TMP;\n--Testcase 128:\nINSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4);\n--Testcase 129:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 130:\nDELETE FROM FLOAT4_TMP;\n--Testcase 131:\nINSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4);\n--Testcase 132:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 133:\nDELETE FROM FLOAT4_TMP;\n--Testcase 134:\nINSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4);\n--Testcase 135:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 136:\nDELETE FROM FLOAT4_TMP;\n--Testcase 137:\nINSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4);\n--Testcase 138:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 139:\nDELETE FROM FLOAT4_TMP;\n--Testcase 140:\nINSERT INTO FLOAT4_TMP VALUES ('57e18'::float4);\n--Testcase 141:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 142:\nDELETE FROM FLOAT4_TMP;\n--Testcase 143:\nINSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4);\n--Testcase 144:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 145:\nDELETE FROM FLOAT4_TMP;\n--Testcase 146:\nINSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4);\n--Testcase 147:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 148:\nDELETE FROM FLOAT4_TMP;\n--Testcase 149:\nINSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4);\n--Testcase 150:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 151:\nDELETE FROM FLOAT4_TMP;\n--Testcase 152:\nINSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4);\n--Testcase 153:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 154:\nDELETE FROM FLOAT4_TMP;\n--Testcase 155:\nINSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4);\n--Testcase 156:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 157:\nDELETE FROM FLOAT4_TMP;\n--Testcase 158:\nINSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4);\n--Testcase 159:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 160:\nDELETE FROM FLOAT4_TMP;\n--Testcase 161:\nINSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4);\n--Testcase 162:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- Test that the smallest possible normalized input value inputs\n-- correctly, either in 9-significant-digit or shortest-decimal\n-- format.\n--\n-- exact val is             1.1754943508...\n-- shortest val is          1.1754944000\n-- midpoint to next val is  1.1754944208...\n\n--Testcase 163:\nDELETE FROM FLOAT4_TMP;\n--Testcase 164:\nINSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4);\n--Testcase 165:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 166:\nDELETE FROM FLOAT4_TMP;\n--Testcase 167:\nINSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4);\n--Testcase 168:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 169:\ncreate type xfloat4;\n--Testcase 170:\ncreate function xfloat4in(cstring) returns xfloat4 immutable strict\n  language internal as 'int4in';\n--Testcase 171:\ncreate function xfloat4out(xfloat4) returns cstring immutable strict\n  language internal as 'int4out';\n--Testcase 172:\ncreate type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4);\n--Testcase 173:\ncreate cast (xfloat4 as float4) without function;\n--Testcase 174:\ncreate cast (float4 as xfloat4) without function;\n--Testcase 175:\ncreate cast (xfloat4 as integer) without function;\n--Testcase 176:\ncreate cast (integer as xfloat4) without function;\n\n-- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 177:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 178:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'00000001'),\n  (x'00000002'), (x'00000003'),\n  (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'),\n  (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'),\n  -- stress values\n  (x'0053c4f4'),  -- 7693e-42\n  (x'006c85c4'),  -- 996622e-44\n  (x'0041ca76'),  -- 60419369e-46\n  (x'004b7678'),  -- 6930161142e-48\n  -- taken from upstream testsuite\n  (x'00000007'),\n  (x'00424fe2'),\n  -- borderline between subnormal and normal\n  (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff');\n--Testcase 179:\nselect float4send(flt) as ibits,\n       flt\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\nbegin;\n\n--Testcase 180:\ninsert into testdata(bits) values\n  (x'00000000'),\n  -- smallest normal values\n  (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'),\n  (x'00800006'),\n  -- small normal values chosen for short vs. long output\n  (x'008002f1'), (x'008002f2'), (x'008002f3'),\n  (x'00800e17'), (x'00800e18'), (x'00800e19'),\n  -- assorted values (random mantissae)\n  (x'01000001'), (x'01102843'), (x'01a52c98'),\n  (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'),\n  (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'),\n  (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'),\n  (x'1f850283'), (x'2874a9d6'),\n  -- values around 5e-08\n  (x'3356bf94'), (x'3356bf95'), (x'3356bf96'),\n  -- around 1e-07\n  (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'),\n  -- around 3e-07 .. 1e-04\n  (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'),\n  (x'350637bc'), (x'350637bd'), (x'350637be'),\n  (x'35719786'), (x'35719787'), (x'35719788'),\n  (x'358637bc'), (x'358637bd'), (x'358637be'),\n  (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'),\n  (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'),\n  -- format crossover at 1e-04\n  (x'38d1b714'), (x'38d1b715'), (x'38d1b716'),\n  (x'38d1b717'), (x'38d1b718'), (x'38d1b719'),\n  (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'),\n  (x'38d1b71d'),\n  --\n  (x'38dffffe'), (x'38dfffff'), (x'38e00000'),\n  (x'38efffff'), (x'38f00000'), (x'38f00001'),\n  (x'3a83126e'), (x'3a83126f'), (x'3a831270'),\n  (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'),\n  (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'),\n  -- chosen to need 9 digits for 3dcccd70\n  (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'),\n  --\n  (x'3effffff'), (x'3f000000'), (x'3f000001'),\n  (x'3f333332'), (x'3f333333'), (x'3f333334'),\n  -- approach 1.0 with increasing numbers of 9s\n  (x'3f666665'), (x'3f666666'), (x'3f666667'),\n  (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'),\n  (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'),\n  (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'),\n  (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'),\n  (x'3f7fffee'), (x'3f7fffef'),\n  -- values very close to 1\n  (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'),\n  (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'),\n  (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'),\n  (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'),\n  (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'),\n  (x'3f7fffff'),\n  (x'3f800000'),\n  (x'3f800001'), (x'3f800002'), (x'3f800003'),\n  (x'3f800004'), (x'3f800005'), (x'3f800006'),\n  (x'3f800007'), (x'3f800008'), (x'3f800009'),\n  -- values 1 to 1.1\n  (x'3f80000f'), (x'3f800010'), (x'3f800011'),\n  (x'3f800012'), (x'3f800013'), (x'3f800014'),\n  (x'3f800017'), (x'3f800018'), (x'3f800019'),\n  (x'3f80001a'), (x'3f80001b'), (x'3f80001c'),\n  (x'3f800029'), (x'3f80002a'), (x'3f80002b'),\n  (x'3f800053'), (x'3f800054'), (x'3f800055'),\n  (x'3f800346'), (x'3f800347'), (x'3f800348'),\n  (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'),\n  (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'),\n  (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'),\n  --\n  (x'3fc90fdb'), -- pi/2\n  (x'402df854'), -- e\n  (x'40490fdb'), -- pi\n  --\n  (x'409fffff'), (x'40a00000'), (x'40a00001'),\n  (x'40afffff'), (x'40b00000'), (x'40b00001'),\n  (x'411fffff'), (x'41200000'), (x'41200001'),\n  (x'42c7ffff'), (x'42c80000'), (x'42c80001'),\n  (x'4479ffff'), (x'447a0000'), (x'447a0001'),\n  (x'461c3fff'), (x'461c4000'), (x'461c4001'),\n  (x'47c34fff'), (x'47c35000'), (x'47c35001'),\n  (x'497423ff'), (x'49742400'), (x'49742401'),\n  (x'4b18967f'), (x'4b189680'), (x'4b189681'),\n  (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'),\n  (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'),\n  (x'501502f8'), (x'501502f9'), (x'501502fa'),\n  (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'),\n  -- stress values\n  (x'1f6c1e4a'),  -- 5e-20\n  (x'59be6cea'),  -- 67e14\n  (x'5d5ab6c4'),  -- 985e15\n  (x'2cc4a9bd'),  -- 55895e-16\n  (x'15ae43fd'),  -- 7038531e-32\n  (x'2cf757ca'),  -- 702990899e-20\n  (x'665ba998'),  -- 25933168707e13\n  (x'743c3324'),  -- 596428896559e20\n  -- exercise fixed-point memmoves\n  (x'47f1205a'),\n  (x'4640e6ae'),\n  (x'449a5225'),\n  (x'42f6e9d5'),\n  (x'414587dd'),\n  (x'3f9e064b'),\n  -- these cases come from the upstream's testsuite\n  -- BoundaryRoundEven\n  (x'4c000004'),\n  (x'50061c46'),\n  (x'510006a8'),\n  -- ExactValueRoundEven\n  (x'48951f84'),\n  (x'45fd1840'),\n  -- LotsOfTrailingZeros\n  (x'39800000'),\n  (x'3b200000'),\n  (x'3b900000'),\n  (x'3bd00000'),\n  -- Regression\n  (x'63800000'),\n  (x'4b000000'),\n  (x'4b800000'),\n  (x'4c000001'),\n  (x'4c800b0d'),\n  (x'00d24584'),\n  (x'00d90b88'),\n  (x'45803f34'),\n  (x'4f9f24f7'),\n  (x'3a8722c3'),\n  (x'5c800041'),\n  (x'15ae43fd'),\n  (x'5d4cccfb'),\n  (x'4c800001'),\n  (x'57800ed8'),\n  (x'5f000000'),\n  (x'700000f0'),\n  (x'5f23e9ac'),\n  (x'5e9502f9'),\n  (x'5e8012b1'),\n  (x'3c000028'),\n  (x'60cde861'),\n  (x'03aa2a50'),\n  (x'43480000'),\n  (x'4c000000'),\n  -- LooksLikePow5\n  (x'5D1502F9'),\n  (x'5D9502F9'),\n  (x'5E1502F9'),\n  -- OutputLength\n  (x'3f99999a'),\n  (x'3f9d70a4'),\n  (x'3f9df3b6'),\n  (x'3f9e0419'),\n  (x'3f9e0610'),\n  (x'3f9e064b'),\n  (x'3f9e0651'),\n  (x'03d20cfe');\n\n--Testcase 181:\nselect float4send(flt) as ibits,\n       flt,\n       flt::text::float4 as r_flt,\n       float4send(flt::text::float4) as obits,\n       float4send(flt::text::float4) = float4send(flt) as correct\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\n-- clean up, lest opr_sanity complain\n--Testcase 182:\ndrop type xfloat4 cascade;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/float8.sql",
    "content": "--\n-- FLOAT8\n--\n--Testcase 113:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 114:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 115:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 116:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 2:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 3:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 4:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 5:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- test for underflow and overflow handling\n--Testcase 6:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e400'::float8);\n--Testcase 7:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e400'::float8);\n--Testcase 8:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e-400'::float8);\n--Testcase 9:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e-400'::float8);\n\n-- test smallest normalized input\n--Testcase 117:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('2.2250738585072014E-308'::float8);\n--Testcase 118:\nSELECT float8send(f1) FROM FLOAT8_TMP;\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('     ');\n--Testcase 12:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');\n--Testcase 17:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');\n\n-- special inputs\n--Testcase 19:\nDELETE FROM FLOAT8_TMP;\n--Testcase 119:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8);\n--Testcase 120:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 20:\nDELETE FROM FLOAT8_TMP;\n--Testcase 121:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8);\n--Testcase 122:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 21:\nDELETE FROM FLOAT8_TMP;\n--Testcase 123:\nINSERT INTO FLOAT8_TMP VALUES ('   NAN  '::float8);\n--Testcase 124:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 22:\nDELETE FROM FLOAT8_TMP;\n--Testcase 125:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8);\n--Testcase 126:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 23:\nDELETE FROM FLOAT8_TMP;\n--Testcase 127:\nINSERT INTO FLOAT8_TMP VALUES ('          -INFINiTY   '::float8);\n--Testcase 128:\nSELECT f1 FROM FLOAT8_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT8_TMP;\n--Testcase 129:\nINSERT INTO FLOAT8_TMP VALUES ('N A N'::float8);\n--Testcase 130:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 26:\nDELETE FROM FLOAT8_TMP;\n--Testcase 131:\nINSERT INTO FLOAT8_TMP VALUES ('NaN x'::float8);\n--Testcase 132:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 27:\nDELETE FROM FLOAT8_TMP;\n--Testcase 133:\nINSERT INTO FLOAT8_TMP VALUES (' INFINITY    x'::float8);\n--Testcase 134:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT8_TMP;\n--Testcase 135:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 + 100.0);\n--Testcase 136:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 30:\nDELETE FROM FLOAT8_TMP;\n--Testcase 137:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 / 'Infinity'::float8);\n--Testcase 138:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 272:\nDELETE FROM FLOAT8_TMP;\n--Testcase 273:\nINSERT INTO FLOAT8_TMP VALUES ('42'::float8 / 'Infinity'::float8);\n--Testcase 274:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 31:\nDELETE FROM FLOAT8_TMP;\n--Testcase 139:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / 'nan'::float8);\n--Testcase 140:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 275:\nDELETE FROM FLOAT8_TMP;\n--Testcase 276:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / '0'::float8);\n--Testcase 277:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 32:\nDELETE FROM FLOAT8_TMP;\n--Testcase 141:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::numeric::float8);\n--Testcase 142:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 35:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';\n\n--Testcase 36:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';\n\n--Testcase 37:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;\n\n--Testcase 38:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 39:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 40:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 41:\nSELECT f.f1, f.f1 * '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 42:\nSELECT f.f1, f.f1 + '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 43:\nSELECT f.f1, f.f1 / '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 44:\nSELECT f.f1, f.f1 - '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 45:\nSELECT f.f1 ^ '2.0' AS square_f1\n   FROM FLOAT8_TBL f where f.f1 = '1004.3';\n\n-- absolute value\n--Testcase 46:\nSELECT f.f1, @f.f1 AS abs_f1\n   FROM FLOAT8_TBL f;\n\n-- truncate\n--Testcase 47:\nSELECT f.f1, trunc(f.f1) AS trunc_f1\n   FROM FLOAT8_TBL f;\n\n-- round\n--Testcase 48:\nSELECT f.f1, round(f.f1) AS round_f1\n   FROM FLOAT8_TBL f;\n\n-- ceil / ceiling\n--Testcase 49:\nselect ceil(f1) as ceil_f1 from float8_tbl f;\n--Testcase 50:\nselect ceiling(f1) as ceiling_f1 from float8_tbl f;\n\n-- floor\n--Testcase 51:\nselect floor(f1) as floor_f1 from float8_tbl f;\n\n-- sign\n--Testcase 52:\nselect sign(f1) as sign_f1 from float8_tbl f;\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 278:\nSET extra_float_digits = 0;\n\n-- square root\nBEGIN;\n--Testcase 53:\nDELETE FROM FLOAT8_TBL;\n--Testcase 54:\nINSERT INTO FLOAT8_TBL VALUES ('64'::float8);\n--Testcase 55:\nSELECT sqrt(f1) as eight FROM FLOAT8_TBL;\n--Testcase 56:\nSELECT |/f1 as eight FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 57:\nSELECT f.f1, |/f.f1 AS sqrt_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- power\n--Testcase 58:\nDELETE FROM FLOAT8_TMP;\n--Testcase 143:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, '0.5'::float8);\n--Testcase 144:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 60:\nDELETE FROM FLOAT8_TMP;\n--Testcase 145:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, '0.5'::float8);\n--Testcase 146:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 61:\nDELETE FROM FLOAT8_TMP;\n--Testcase 147:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, 'NaN'::float8);\n--Testcase 148:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 62:\nDELETE FROM FLOAT8_TMP;\n--Testcase 149:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, 'NaN'::float8);\n--Testcase 150:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 63:\nDELETE FROM FLOAT8_TMP;\n--Testcase 151:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'NaN'::float8);\n--Testcase 152:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 64:\nDELETE FROM FLOAT8_TMP;\n--Testcase 153:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'NaN'::float8);\n--Testcase 154:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 65:\nDELETE FROM FLOAT8_TMP;\n--Testcase 155:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8 , '0'::float8);\n--Testcase 156:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 279:\nDELETE FROM FLOAT8_TMP;\n--Testcase 280:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '0'::float8);\n--Testcase 281:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 282:\nDELETE FROM FLOAT8_TMP;\n--Testcase 283:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '0'::float8);\n--Testcase 284:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 285:\nDELETE FROM FLOAT8_TMP;\n--Testcase 286:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, 'infinity'::float8);\n--Testcase 287:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 288:\nDELETE FROM FLOAT8_TMP;\n--Testcase 289:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, '-infinity'::float8);\n--Testcase 290:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 291:\nDELETE FROM FLOAT8_TMP;\n--Testcase 292:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'infinity'::float8);\n--Testcase 293:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 294:\nDELETE FROM FLOAT8_TMP;\n--Testcase 295:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, '-infinity'::float8);\n--Testcase 296:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 297:\nDELETE FROM FLOAT8_TMP;\n--Testcase 298:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'infinity'::float8);\n--Testcase 299:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 300:\nDELETE FROM FLOAT8_TMP;\n--Testcase 301:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, '-infinity'::float8);\n--Testcase 302:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 303:\nDELETE FROM FLOAT8_TMP;\n--Testcase 304:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, 'infinity'::float8);\n--Testcase 305:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 306:\nDELETE FROM FLOAT8_TMP;\n--Testcase 307:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, 'infinity'::float8);\n--Testcase 308:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 309:\nDELETE FROM FLOAT8_TMP;\n--Testcase 310:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, 'infinity'::float8);\n--Testcase 311:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 312:\nDELETE FROM FLOAT8_TMP;\n--Testcase 313:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, 'infinity'::float8);\n--Testcase 314:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 315:\nDELETE FROM FLOAT8_TMP;\n--Testcase 316:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, '-infinity'::float8);\n--Testcase 317:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 318:\nDELETE FROM FLOAT8_TMP;\n--Testcase 319:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, '-infinity'::float8);\n--Testcase 320:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 321:\nDELETE FROM FLOAT8_TMP;\n--Testcase 322:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, '-infinity'::float8);\n--Testcase 323:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 324:\nDELETE FROM FLOAT8_TMP;\n--Testcase 325:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, '-infinity'::float8);\n--Testcase 326:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 327:\nDELETE FROM FLOAT8_TMP;\n--Testcase 328:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-2'::float8);\n--Testcase 329:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 330:\nDELETE FROM FLOAT8_TMP;\n--Testcase 331:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '2'::float8);\n--Testcase 332:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 333:\nDELETE FROM FLOAT8_TMP;\n--Testcase 334:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, 'infinity'::float8);\n--Testcase 335:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 336:\nDELETE FROM FLOAT8_TMP;\n--Testcase 337:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-infinity'::float8);\n--Testcase 338:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- Intel's icc misoptimizes the code that controls the sign of this result,\n-- even with -mp1.  Pending a fix for that, only test for \"is it zero\".\n--Testcase 339:\nDELETE FROM FLOAT8_TMP;\n--Testcase 340:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-2'::float8);\n--Testcase 341:\nSELECT power(f1, f2) = '0' FROM FLOAT8_TMP;\n--Testcase 342:\nDELETE FROM FLOAT8_TMP;\n--Testcase 343:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3'::float8);\n--Testcase 344:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 345:\nDELETE FROM FLOAT8_TMP;\n--Testcase 346:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '2'::float8);\n--Testcase 347:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 348:\nDELETE FROM FLOAT8_TMP;\n--Testcase 349:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '3'::float8);\n--Testcase 350:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 351:\nDELETE FROM FLOAT8_TMP;\n--Testcase 352:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3.5'::float8);\n--Testcase 353:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 354:\nDELETE FROM FLOAT8_TMP;\n--Testcase 355:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, 'infinity'::float8);\n--Testcase 356:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 357:\nDELETE FROM FLOAT8_TMP;\n--Testcase 358:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-infinity'::float8);\n--Testcase 359:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- take exp of ln(f.f1)\n--Testcase 67:\nSELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- check edge cases for exp\n--Testcase 360:\nDELETE FROM FLOAT8_TMP;\n--Testcase 361:\nINSERT INTO FLOAT8_TMP VALUES ('inf'::float8), ('-inf'::float8), ('nan'::float8);\n--Testcase 362:\nSELECT exp(f1) FROM FLOAT8_TMP;\n\n-- cube root\nBEGIN;\n--Testcase 68:\nDELETE FROM FLOAT8_TBL;\n--Testcase 69:\nINSERT INTO FLOAT8_TBL VALUES ('27'::float8);\n--Testcase 70:\nSELECT ||/f1 as three FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 71:\nSELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;\n\n\n--Testcase 72:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 73:\nUPDATE FLOAT8_TBL\n   SET f1 = FLOAT8_TBL.f1 * '-1'\n   WHERE FLOAT8_TBL.f1 > '0.0';\n\n--Testcase 74:\nSELECT f.f1 * '1e200' from FLOAT8_TBL f;\n\n--Testcase 75:\nSELECT f.f1 ^ '1e200' from FLOAT8_TBL f;\n\nBEGIN;\n--Testcase 76:\nDELETE FROM FLOAT8_TBL;\n--Testcase 77:\nINSERT INTO FLOAT8_TBL VALUES (0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5);\n--Testcase 78:\nSELECT * FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 79:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;\n\n--Testcase 80:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;\n\n--Testcase 81:\nSELECT exp(f.f1) from FLOAT8_TBL f;\n\n--Testcase 82:\nSELECT f.f1 / '0.0' from FLOAT8_TBL f;\n\n--Testcase 83:\nSELECT * FROM FLOAT8_TBL;\n\n-- hyperbolic functions\n-- we run these with extra_float_digits = 0 too, since different platforms\n-- tend to produce results that vary in the last place.\n--Testcase 157:\nDELETE FROM FLOAT8_TMP;\n--Testcase 158:\nINSERT INTO FLOAT8_TMP(f1) VALUES (1);\n--Testcase 159:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n--Testcase 160:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n--Testcase 161:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n--Testcase 162:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 163:\nDELETE FROM FLOAT8_TMP;\n--Testcase 164:\nINSERT INTO FLOAT8_TMP(f1) VALUES (2);\n--Testcase 165:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n--Testcase 166:\nDELETE FROM FLOAT8_TMP;\n--Testcase 167:\nINSERT INTO FLOAT8_TMP(f1) VALUES (0.5);\n--Testcase 168:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- test Inf/NaN cases for hyperbolic functions\n--Testcase 169:\nDELETE FROM FLOAT8_TMP;\n--Testcase 170:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 171:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 172:\nDELETE FROM FLOAT8_TMP;\n--Testcase 173:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 174:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 175:\nDELETE FROM FLOAT8_TMP;\n--Testcase 176:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 177:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 178:\nDELETE FROM FLOAT8_TMP;\n--Testcase 179:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 180:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 181:\nDELETE FROM FLOAT8_TMP;\n--Testcase 182:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 183:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 184:\nDELETE FROM FLOAT8_TMP;\n--Testcase 185:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 186:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 187:\nDELETE FROM FLOAT8_TMP;\n--Testcase 188:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 189:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 190:\nDELETE FROM FLOAT8_TMP;\n--Testcase 191:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 192:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 193:\nDELETE FROM FLOAT8_TMP;\n--Testcase 194:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 195:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 196:\nDELETE FROM FLOAT8_TMP;\n--Testcase 197:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 198:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 199:\nDELETE FROM FLOAT8_TMP;\n--Testcase 200:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 201:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 202:\nDELETE FROM FLOAT8_TMP;\n--Testcase 203:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 204:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test\n-- SELECT acosh(float8 'infinity');\n--Testcase 205:\nDELETE FROM FLOAT8_TMP;\n--Testcase 206:\nINSERT INTO FLOAT8_TMP VALUES (float8 '-infinity');\n--Testcase 207:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 208:\nDELETE FROM FLOAT8_TMP;\n--Testcase 209:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 210:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 211:\nDELETE FROM FLOAT8_TMP;\n--Testcase 212:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'infinity'));\n--Testcase 213:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 214:\nDELETE FROM FLOAT8_TMP;\n--Testcase 215:\nINSERT INTO FLOAT8_TMP VALUES ((float8 '-infinity'));\n--Testcase 216:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 217:\nDELETE FROM FLOAT8_TMP;\n--Testcase 218:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 219:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 369:\nRESET extra_float_digits;\n\n-- test for over- and underflow\n--Testcase 84:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');\n\n--Testcase 85:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');\n\n--Testcase 86:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');\n\n--Testcase 87:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');\n\n-- maintain external table consistency across platforms\n-- delete all values and reinsert well-behaved ones\n\n--Testcase 88:\nDELETE FROM FLOAT8_TBL;\n\n--Testcase 89:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');\n\n--Testcase 90:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');\n\n--Testcase 91:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');\n\n--Testcase 92:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');\n\n--Testcase 93:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');\n\n--Testcase 94:\nSELECT * FROM FLOAT8_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 220:\nDELETE FROM FLOAT8_TMP;\n--Testcase 221:\nINSERT INTO FLOAT8_TMP VALUES ('32767.4'::float8);\n--Testcase 222:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 223:\nDELETE FROM FLOAT8_TMP;\n--Testcase 224:\nINSERT INTO FLOAT8_TMP VALUES ('32767.6'::float8);\n--Testcase 225:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 226:\nDELETE FROM FLOAT8_TMP;\n--Testcase 227:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.4'::float8);\n--Testcase 228:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 229:\nDELETE FROM FLOAT8_TMP;\n--Testcase 230:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.6'::float8);\n--Testcase 231:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 232:\nDELETE FROM FLOAT8_TMP;\n--Testcase 233:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.4'::float8);\n--Testcase 234:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 235:\nDELETE FROM FLOAT8_TMP;\n--Testcase 236:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.6'::float8);\n--Testcase 237:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 238:\nDELETE FROM FLOAT8_TMP;\n--Testcase 239:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.4'::float8);\n--Testcase 240:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 241:\nDELETE FROM FLOAT8_TMP;\n--Testcase 242:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.6'::float8);\n--Testcase 243:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 244:\nDELETE FROM FLOAT8_TMP;\n--Testcase 245:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854773760'::float8);\n--Testcase 246:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 247:\nDELETE FROM FLOAT8_TMP;\n--Testcase 248:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854775807'::float8);\n--Testcase 249:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 250:\nDELETE FROM FLOAT8_TMP;\n--Testcase 251:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854775808.5'::float8);\n--Testcase 252:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 253:\nDELETE FROM FLOAT8_TMP;\n--Testcase 254:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854780000'::float8);\n--Testcase 255:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n-- test exact cases for trigonometric functions in degrees\n\nBEGIN;\n--Testcase 95:\nDELETE FROM FLOAT8_TBL;\n--Testcase 96:\nINSERT INTO FLOAT8_TBL VALUES (0), (30), (90), (150), (180),\n      (210), (270), (330), (360);\n--Testcase 97:\nSELECT f1,\n       sind(f1),\n       sind(f1) IN (-1,-0.5,0,0.5,1) AS sind_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 98:\nDELETE FROM FLOAT8_TBL;\n--Testcase 99:\nINSERT INTO FLOAT8_TBL VALUES (0), (60), (90), (120), (180),\n      (240), (270), (300), (360);\n--Testcase 100:\nSELECT f1,\n       cosd(f1),\n       cosd(f1) IN (-1,-0.5,0,0.5,1) AS cosd_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 101:\nDELETE FROM FLOAT8_TBL;\n--Testcase 102:\nINSERT INTO FLOAT8_TBL VALUES (0), (45), (90), (135), (180),\n      (225), (270), (315), (360);\n--Testcase 103:\nSELECT f1,\n       tand(f1),\n       tand(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS tand_exact,\n       cotd(f1),\n       cotd(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS cotd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 104:\nDELETE FROM FLOAT8_TBL;\n--Testcase 105:\nINSERT INTO FLOAT8_TBL VALUES (-1), (-0.5), (0), (0.5), (1);\n--Testcase 106:\nSELECT f1,\n       asind(f1),\n       asind(f1) IN (-90,-30,0,30,90) AS asind_exact,\n       acosd(f1),\n       acosd(f1) IN (0,60,90,120,180) AS acosd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 107:\nDELETE FROM FLOAT8_TBL;\n--Testcase 108:\nINSERT INTO FLOAT8_TBL VALUES ('-Infinity'::float8), (-1), (0), (1),\n      ('Infinity'::float8);\n--Testcase 109:\nSELECT f1,\n       atand(f1),\n       atand(f1) IN (-90,-45,0,45,90) AS atand_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 110:\nDELETE FROM FLOAT8_TBL;\n--Testcase 111:\nINSERT INTO FLOAT8_TBL SELECT * FROM generate_series(0, 360, 90);\n--Testcase 112:\nSELECT x, y,\n       atan2d(y, x),\n       atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact\nFROM (SELECT 10*cosd(f1), 10*sind(f1)\n          FROM FLOAT8_TBL) AS t(x,y);\n\nROLLBACK;\n\n--\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 256:\ncreate type xfloat8;\n--Testcase 257:\ncreate function xfloat8in(cstring) returns xfloat8 immutable strict\n  language internal as 'int8in';\n--Testcase 258:\ncreate function xfloat8out(xfloat8) returns cstring immutable strict\n  language internal as 'int8out';\n--Testcase 259:\ncreate type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);\n--Testcase 260:\ncreate cast (xfloat8 as float8) without function;\n--Testcase 261:\ncreate cast (float8 as xfloat8) without function;\n--Testcase 262:\ncreate cast (xfloat8 as bigint) without function;\n--Testcase 263:\ncreate cast (bigint as xfloat8) without function;\n\n-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 264:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 265:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'0000000000000001'),\n  (x'0000000000000002'), (x'0000000000000003'),\n  (x'0000000000001000'), (x'0000000100000000'),\n  (x'0000010000000000'), (x'0000010100000000'),\n  (x'0000400000000000'), (x'0000400100000000'),\n  (x'0000800000000000'), (x'0000800000000001'),\n  -- these values taken from upstream testsuite\n  (x'00000000000f4240'),\n  (x'00000000016e3600'),\n  (x'0000008cdcdea440'),\n  -- borderline between subnormal and normal\n  (x'000ffffffffffff0'), (x'000ffffffffffff1'),\n  (x'000ffffffffffffe'), (x'000fffffffffffff');\n--Testcase 266:\nselect float8send(flt) as ibits,\n       flt\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- round-trip tests\n\nbegin;\n--Testcase 267:\ninsert into testdata(bits) values\n  (x'0000000000000000'),\n  -- smallest normal values\n  (x'0010000000000000'), (x'0010000000000001'),\n  (x'0010000000000002'), (x'0018000000000000'),\n  --\n  (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),\n  (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),\n  (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),\n  (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),\n  (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),\n  (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),\n  (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),\n  (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),\n  (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),\n  (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),\n  -- values very close to 1\n  (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),\n  (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),\n  (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),\n  (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),\n  (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),\n  (x'3fefffffffffffff'),\n  (x'3ff0000000000000'),\n  (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),\n  (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),\n  (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),\n  --\n  (x'3ff921fb54442d18'),\n  (x'4005bf0a8b14576a'),\n  (x'400921fb54442d18'),\n  --\n  (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),\n  (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),\n  (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),\n  (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),\n  (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),\n  (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),\n  (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),\n  (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),\n  (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),\n  (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),\n  (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),\n  (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),\n  (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),\n  (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),\n  (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),\n  (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),\n  (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),\n  (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),\n  (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),\n  (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),\n  (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),\n  (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),\n  (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),\n  (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),\n  (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),\n  --\n  (x'7feffffffffffffe'), (x'7fefffffffffffff'),\n  -- round to even tests (+ve)\n  (x'4350000000000002'),\n  (x'4350000000002e06'),\n  (x'4352000000000003'),\n  (x'4352000000000004'),\n  (x'4358000000000003'),\n  (x'4358000000000004'),\n  (x'435f000000000020'),\n  -- round to even tests (-ve)\n  (x'c350000000000002'),\n  (x'c350000000002e06'),\n  (x'c352000000000003'),\n  (x'c352000000000004'),\n  (x'c358000000000003'),\n  (x'c358000000000004'),\n  (x'c35f000000000020'),\n  -- exercise fixed-point memmoves\n  (x'42dc12218377de66'),\n  (x'42a674e79c5fe51f'),\n  (x'4271f71fb04cb74c'),\n  (x'423cbe991a145879'),\n  (x'4206fee0e1a9e061'),\n  (x'41d26580b487e6b4'),\n  (x'419d6f34540ca453'),\n  (x'41678c29dcd6e9dc'),\n  (x'4132d687e3df217d'),\n  (x'40fe240c9fcb68c8'),\n  (x'40c81cd6e63c53d3'),\n  (x'40934a4584fd0fdc'),\n  (x'405edd3c07fb4c93'),\n  (x'4028b0fcd32f7076'),\n  (x'3ff3c0ca428c59f8'),\n  -- these cases come from the upstream's testsuite\n  -- LotsOfTrailingZeros)\n  (x'3e60000000000000'),\n  -- Regression\n  (x'c352bd2668e077c4'),\n  (x'434018601510c000'),\n  (x'43d055dc36f24000'),\n  (x'43e052961c6f8000'),\n  (x'3ff3c0ca2a5b1d5d'),\n  -- LooksLikePow5\n  (x'4830f0cf064dd592'),\n  (x'4840f0cf064dd592'),\n  (x'4850f0cf064dd592'),\n  -- OutputLength\n  (x'3ff3333333333333'),\n  (x'3ff3ae147ae147ae'),\n  (x'3ff3be76c8b43958'),\n  (x'3ff3c083126e978d'),\n  (x'3ff3c0c1fc8f3238'),\n  (x'3ff3c0c9539b8887'),\n  (x'3ff3c0ca2a5b1d5d'),\n  (x'3ff3c0ca4283de1b'),\n  (x'3ff3c0ca43db770a'),\n  (x'3ff3c0ca428abd53'),\n  (x'3ff3c0ca428c1d2b'),\n  (x'3ff3c0ca428c51f2'),\n  (x'3ff3c0ca428c58fc'),\n  (x'3ff3c0ca428c59dd'),\n  (x'3ff3c0ca428c59f8'),\n  (x'3ff3c0ca428c59fb'),\n  -- 32-bit chunking\n  (x'40112e0be8047a7d'),\n  (x'40112e0be815a889'),\n  (x'40112e0be826d695'),\n  (x'40112e0be83804a1'),\n  (x'40112e0be84932ad'),\n  -- MinMaxShift\n  (x'0040000000000000'),\n  (x'007fffffffffffff'),\n  (x'0290000000000000'),\n  (x'029fffffffffffff'),\n  (x'4350000000000000'),\n  (x'435fffffffffffff'),\n  (x'1330000000000000'),\n  (x'133fffffffffffff'),\n  (x'3a6fa7161a4d6e0c');\n--Testcase 268:\nselect float8send(flt) as ibits,\n       flt,\n       flt::text::float8 as r_flt,\n       float8send(flt::text::float8) as obits,\n       float8send(flt::text::float8) = float8send(flt) as correct\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- clean up, lest opr_sanity complain\n--Testcase 269:\ndrop type xfloat8 cascade;\n\n--Testcase 363:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/int4.sql",
    "content": "--\n-- INT4 Based on PostgreSQL tests, please don't add additional tests here, use other test files\n--\n--Testcase 61:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 62:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 63:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 64:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n \n--Testcase 1:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n\n--Testcase 2:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n\n--Testcase 3:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n\n--Testcase 4:\nINSERT INTO INT4_TBL(f1) VALUES ('34.5');\n\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n\n--Testcase 6:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n-- bad input values -- should give errors\n--Testcase 7:\nINSERT INTO INT4_TBL(f1) VALUES ('1000000000000');\n--Testcase 8:\nINSERT INTO INT4_TBL(f1) VALUES ('asdf');\n--Testcase 9:\nINSERT INTO INT4_TBL(f1) VALUES ('     ');\n--Testcase 10:\nINSERT INTO INT4_TBL(f1) VALUES ('   asdf   ');\n--Testcase 11:\nINSERT INTO INT4_TBL(f1) VALUES ('- 1234');\n--Testcase 12:\nINSERT INTO INT4_TBL(f1) VALUES ('123       5');\n--Testcase 13:\nINSERT INTO INT4_TBL(f1) VALUES ('');\n\n\n--Testcase 14:\nSELECT * FROM INT4_TBL;\n\n--Testcase 15:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';\n\n--Testcase 16:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';\n\n--Testcase 17:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';\n\n--Testcase 18:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';\n\n--Testcase 19:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';\n\n--Testcase 20:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';\n\n--Testcase 21:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';\n\n--Testcase 22:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';\n\n--Testcase 23:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';\n\n--Testcase 24:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';\n\n--Testcase 25:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';\n\n--Testcase 26:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';\n\n-- positive odds\n--Testcase 27:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';\n\n-- any evens\n--Testcase 28:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';\n\n--Testcase 29:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 30:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 31:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 32:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 33:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 34:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 35:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 36:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 37:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 38:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 39:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 40:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 41:\nSELECT i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 42:\nSELECT i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;\n\n--\n-- more complex expressions\n--\n\n-- variations on unary minus parsing\n\n--Testcase 65:\nDELETE FROM INT4_TMP;\n--Testcase 66:\nINSERT INTO INT4_TMP VALUES (-2, 3);\n--Testcase 67:\nSELECT f1 + f2 as one FROM INT4_TMP;\n\n--Testcase 68:\nDELETE FROM INT4_TMP;\n--Testcase 69:\nINSERT INTO INT4_TMP VALUES (4, 2);\n--Testcase 70:\nSELECT f1 - f2 as two FROM INT4_TMP;\n\n--Testcase 46:\nDELETE FROM INT4_TMP;\n--Testcase 71:\nINSERT INTO INT4_TMP VALUES (2, 1);\n--Testcase 72:\nSELECT f1- -f2 as three FROM INT4_TMP;\n\n--Testcase 47:\nDELETE FROM INT4_TMP;\n--Testcase 73:\nINSERT INTO INT4_TMP VALUES (2, 2);\n--Testcase 74:\nSELECT f1 - -f2 as four FROM INT4_TMP;\n\n--Testcase 75:\nDELETE FROM INT4_TMP;\n--Testcase 76:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int2, '16'::int2 / '4'::int2);\n--Testcase 77:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 78:\nDELETE FROM INT4_TMP;\n--Testcase 79:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int4, '16'::int2 / '4'::int4);\n--Testcase 80:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 81:\nDELETE FROM INT4_TMP;\n--Testcase 82:\nINSERT INTO INT4_TMP VALUES ('2'::int4 * '2'::int2, '16'::int4 / '4'::int2);\n--Testcase 83:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 84:\nDELETE FROM INT4_TMP;\n--Testcase 85:\nINSERT INTO INT4_TMP VALUES ('1000'::int4, '999'::int4);\n--Testcase 86:\nSELECT f1 < f2 AS false FROM INT4_TMP;\n\n--Testcase 50:\nDELETE FROM INT4_TMP;\n--Testcase 91:\nINSERT INTO INT4_TMP VALUES (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1);\n--Testcase 92:\nSELECT f1 as ten FROM INT4_TMP;\n\n--Testcase 51:\nDELETE FROM INT4_TMP;\n--Testcase 93:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 94:\nSELECT f1 + f1/f2 as three FROM INT4_TMP;\n\n--Testcase 52:\nDELETE FROM INT4_TMP;\n--Testcase 95:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 96:\nSELECT (f1 + f2)/f2 as two FROM INT4_TMP;\n\n-- corner case\n--Testcase 54:\nDELETE FROM INT4_TMP;\n--Testcase 97:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 98:\nSELECT (f1<<31)::text FROM INT4_TMP;\n\n--Testcase 56:\nDELETE FROM INT4_TMP;\n--Testcase 99:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 100:\nSELECT ((f1<<31)+1)::text FROM INT4_TMP;\n\n-- check sane handling of INT_MIN overflow cases\n--Testcase 58:\nDELETE FROM INT4_TMP;\n--Testcase 101:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int4);\n--Testcase 102:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 103:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 104:\nSELECT f1 % f2 FROM INT4_TMP;\n\n--Testcase 60:\nDELETE FROM INT4_TMP;\n--Testcase 105:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int2);\n--Testcase 106:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 107:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 108:\nSELECT f1 % f2 FROM INT4_TMP;\n\n-- check rounding when casting from float\n--Testcase 109:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 110:\nDELETE FROM FLOAT8_TMP;\n--Testcase 111:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 112:\nSELECT f1 as x, f1::int4 as int4_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 113:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 114:\nDELETE FROM NUMERIC_TMP;\n--Testcase 115:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 116:\nSELECT f1 as x, f1::int4 as int4_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 117:\nDELETE FROM INT4_TMP;\n--Testcase 118:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 6410818::int4),\n             (61866666::int4, 6410818::int4),\n             (-61866666::int4, 6410818::int4),\n             ((-2147483648)::int4, 1::int4),\n             ((-2147483648)::int4, 2147483647::int4),\n             ((-2147483648)::int4, 1073741824::int4);\n--Testcase 119:\nSELECT f1, f2, gcd(f1, f2), gcd(f1, -f2), gcd(f2, f1), gcd(-f2, f1) FROM INT4_TMP;\n\n--Testcase 120:\nDELETE FROM INT4_TMP;\n--Testcase 121:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 0::int4);\n--Testcase 122:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 123:\nDELETE FROM INT4_TMP;\n--Testcase 124:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-2147483648)::int4);\n--Testcase 125:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n-- test lcm()\n--Testcase 126:\nDELETE FROM INT4_TMP;\n--Testcase 127:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 42::int4),\n             (42::int4, 42::int4),\n             (330::int4, 462::int4),\n             (-330::int4, 462::int4),\n             ((-2147483648)::int4, 0::int4);\n--Testcase 128:\nSELECT f1, f2, lcm(f1, f2), lcm(f1, -f2), lcm(f2, f1), lcm(-f2, f1) FROM INT4_TMP;\n\n--Testcase 129:\nDELETE FROM INT4_TMP;\n--Testcase 130:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 1::int4);\n--Testcase 131:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 132:\nDELETE FROM INT4_TMP;\n--Testcase 133:\nINSERT INTO INT4_TMP VALUES (2147483647::int4, 2147483646::int4);\n--Testcase 134:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 137:\nDELETE FROM INT4_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 135:\nDROP SERVER sqlite_svr;\n--Testcase 136:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/int8.sql",
    "content": "--\n-- INT8\n-- Test int8 64-bit integers.\n--\n--Testcase 140:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 141:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 142:\nCREATE FOREIGN TABLE INT8_TBL(\n\tq1 int8 OPTIONS (key 'true'),\n\tq2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 143:\nCREATE FOREIGN TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4, \n\tq4 int2,\n\tq5 text,\n\tid int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 2:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 3:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 4:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 5:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n-- bad inputs\n--Testcase 6:\nINSERT INTO INT8_TBL(q1) VALUES ('      ');\n--Testcase 7:\nINSERT INTO INT8_TBL(q1) VALUES ('xxx');\n--Testcase 8:\nINSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');\n--Testcase 9:\nINSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');\n--Testcase 10:\nINSERT INTO INT8_TBL(q1) VALUES ('- 123');\n--Testcase 11:\nINSERT INTO INT8_TBL(q1) VALUES ('  345     5');\n--Testcase 12:\nINSERT INTO INT8_TBL(q1) VALUES ('');\n\n--Testcase 13:\nSELECT * FROM INT8_TBL;\n\n-- int8/int8 cmp\n--Testcase 14:\nSELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;\n--Testcase 15:\nSELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;\n--Testcase 16:\nSELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;\n--Testcase 17:\nSELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;\n--Testcase 18:\nSELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;\n--Testcase 19:\nSELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;\n\n-- int8/int4 cmp\n--Testcase 20:\nSELECT * FROM INT8_TBL WHERE q2 = 456;\n--Testcase 21:\nSELECT * FROM INT8_TBL WHERE q2 <> 456;\n--Testcase 22:\nSELECT * FROM INT8_TBL WHERE q2 < 456;\n--Testcase 23:\nSELECT * FROM INT8_TBL WHERE q2 > 456;\n--Testcase 24:\nSELECT * FROM INT8_TBL WHERE q2 <= 456;\n--Testcase 25:\nSELECT * FROM INT8_TBL WHERE q2 >= 456;\n\n-- int4/int8 cmp\n--Testcase 26:\nSELECT * FROM INT8_TBL WHERE 123 = q1;\n--Testcase 27:\nSELECT * FROM INT8_TBL WHERE 123 <> q1;\n--Testcase 28:\nSELECT * FROM INT8_TBL WHERE 123 < q1;\n--Testcase 29:\nSELECT * FROM INT8_TBL WHERE 123 > q1;\n--Testcase 30:\nSELECT * FROM INT8_TBL WHERE 123 <= q1;\n--Testcase 31:\nSELECT * FROM INT8_TBL WHERE 123 >= q1;\n\n-- int8/int2 cmp\n--Testcase 32:\nSELECT * FROM INT8_TBL WHERE q2 = '456'::int2;\n--Testcase 33:\nSELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;\n--Testcase 34:\nSELECT * FROM INT8_TBL WHERE q2 < '456'::int2;\n--Testcase 35:\nSELECT * FROM INT8_TBL WHERE q2 > '456'::int2;\n--Testcase 36:\nSELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;\n--Testcase 37:\nSELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;\n\n-- int2/int8 cmp\n--Testcase 38:\nSELECT * FROM INT8_TBL WHERE '123'::int2 = q1;\n--Testcase 39:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;\n--Testcase 40:\nSELECT * FROM INT8_TBL WHERE '123'::int2 < q1;\n--Testcase 41:\nSELECT * FROM INT8_TBL WHERE '123'::int2 > q1;\n--Testcase 42:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;\n--Testcase 43:\nSELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;\n\n\n--Testcase 44:\nSELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;\n\n--Testcase 45:\nSELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;\n--Testcase 46:\nSELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;\n--Testcase 47:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;\n--Testcase 48:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL\n WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);\n--Testcase 49:\nSELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;\n\n--Testcase 50:\nSELECT q1, float8(q1) FROM INT8_TBL;\n--Testcase 51:\nSELECT q2, float8(q2) FROM INT8_TBL;\n\n--Testcase 52:\nSELECT 37 + q1 AS plus4 FROM INT8_TBL;\n--Testcase 53:\nSELECT 37 - q1 AS minus4 FROM INT8_TBL;\n--Testcase 54:\nSELECT 2 * q1 AS \"twice int4\" FROM INT8_TBL;\n--Testcase 55:\nSELECT q1 * 2 AS \"twice int4\" FROM INT8_TBL;\n\n-- int8 op int4\n--Testcase 56:\nSELECT q1 + 42::int4 AS \"8plus4\", q1 - 42::int4 AS \"8minus4\", q1 * 42::int4 AS \"8mul4\", q1 / 42::int4 AS \"8div4\" FROM INT8_TBL;\n-- int4 op int8\n--Testcase 57:\nSELECT 246::int4 + q1 AS \"4plus8\", 246::int4 - q1 AS \"4minus8\", 246::int4 * q1 AS \"4mul8\", 246::int4 / q1 AS \"4div8\" FROM INT8_TBL;\n\n-- int8 op int2\n--Testcase 58:\nSELECT q1 + 42::int2 AS \"8plus2\", q1 - 42::int2 AS \"8minus2\", q1 * 42::int2 AS \"8mul2\", q1 / 42::int2 AS \"8div2\" FROM INT8_TBL;\n-- int2 op int8\n--Testcase 59:\nSELECT 246::int2 + q1 AS \"2plus8\", 246::int2 - q1 AS \"2minus8\", 246::int2 * q1 AS \"2mul8\", 246::int2 / q1 AS \"2div8\" FROM INT8_TBL;\n\n--Testcase 60:\nSELECT q2, abs(q2) FROM INT8_TBL;\n--Testcase 61:\nSELECT min(q1), min(q2) FROM INT8_TBL;\n--Testcase 62:\nSELECT max(q1), max(q2) FROM INT8_TBL;\n\n\n-- TO_CHAR()\n--\n--Testcase 63:\nSELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')\n\tFROM INT8_TBL;\n\n--Testcase 64:\nSELECT to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')\n\tFROM INT8_TBL;\n\n--Testcase 65:\nSELECT to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')\n\tFROM INT8_TBL;\n\n--Testcase 66:\nSELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')\n\tFROM INT8_TBL;\n\n--Testcase 67:\nSELECT to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;\n--Testcase 68:\nSELECT to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;\n--Testcase 69:\nSELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;\n--Testcase 70:\nSELECT to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;\n--Testcase 71:\nSELECT to_char(q2, '0999999999999999')       FROM INT8_TBL;\n--Testcase 72:\nSELECT to_char(q2, 'S0999999999999999')      FROM INT8_TBL;\n--Testcase 73:\nSELECT to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;\n--Testcase 74:\nSELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;\n--Testcase 75:\nSELECT to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;\n--Testcase 76:\nSELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;\n--Testcase 77:\nSELECT to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;\n--Testcase 78:\nSELECT to_char(q2, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM INT8_TBL;\n--Testcase 79:\nSELECT to_char(q2, '999999SG9999999999')     FROM INT8_TBL;\n\n-- check min/max values and overflow behavior\n--Testcase 80:\nDELETE FROM INT8_TMP;\n--Testcase 144:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 145:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 81:\nDELETE FROM INT8_TMP;\n--Testcase 146:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775809'::int8);\n--Testcase 147:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 82:\nDELETE FROM INT8_TMP;\n--Testcase 148:\nINSERT INTO INT8_TMP VALUES ('9223372036854775807'::int8);\n--Testcase 149:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 83:\nDELETE FROM INT8_TMP;\n--Testcase 150:\nINSERT INTO INT8_TMP VALUES ('9223372036854775808'::int8);\n--Testcase 151:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 84:\nDELETE FROM INT8_TMP;\n--Testcase 152:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775807'::int8));\n--Testcase 153:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 86:\nDELETE FROM INT8_TMP;\n--Testcase 154:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775808'::int8));\n--Testcase 155:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 87:\nDELETE FROM INT8_TMP;\n--Testcase 156:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 157:\nSELECT q1 + q2 FROM INT8_TMP;\n--Testcase 88:\nDELETE FROM INT8_TMP;\n--Testcase 158:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 159:\nSELECT q1 + q2 FROM INT8_TMP;\n\n--Testcase 89:\nDELETE FROM INT8_TMP;\n--Testcase 160:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 161:\nSELECT q1-q2 FROM INT8_TMP;\n--Testcase 90:\nDELETE FROM INT8_TMP;\n--Testcase 162:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 163:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 91:\nDELETE FROM INT8_TMP;\n--Testcase 164:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 165:\nSELECT q1 * q2 FROM INT8_TMP;\n\n--Testcase 92:\nDELETE FROM INT8_TMP;\n--Testcase 166:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 167:\nSELECT q1 / q2 FROM INT8_TMP;\n\n--Testcase 93:\nDELETE FROM INT8_TMP;\n--Testcase 168:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 169:\nSELECT q1 % q2 FROM INT8_TMP;\n\n--Testcase 94:\nDELETE FROM INT8_TMP;\n--Testcase 170:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 171:\nSELECT abs(q1) FROM INT8_TMP;\n\n--Testcase 95:\nDELETE FROM INT8_TMP;\n--Testcase 172:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 173:\nSELECT q1 + q3 FROM INT8_TMP;\n--Testcase 96:\nDELETE FROM INT8_TMP;\n--Testcase 174:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('-9223372036854775800'::int8 , '100'::int4);\n--Testcase 175:\nSELECT q1 - q3 FROM INT8_TMP;\n--Testcase 97:\nDELETE FROM INT8_TMP;\n--Testcase 176:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 177:\nSELECT q1 * q3 FROM INT8_TMP;\n\n--Testcase 98:\nDELETE FROM INT8_TMP;\n--Testcase 178:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 179:\nSELECT q3 + q1 FROM INT8_TMP;\n--Testcase 99:\nDELETE FROM INT8_TMP;\n--Testcase 180:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('-100'::int4 , '9223372036854775800'::int8);\n--Testcase 181:\nSELECT q3 - q1 FROM INT8_TMP;\n--Testcase 100:\nDELETE FROM INT8_TMP;\n--Testcase 182:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 183:\nSELECT q3 * q1 FROM INT8_TMP;\n\n--Testcase 101:\nDELETE FROM INT8_TMP;\n--Testcase 184:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 185:\nSELECT q1 + q4 FROM INT8_TMP;\n--Testcase 102:\nDELETE FROM INT8_TMP;\n--Testcase 186:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775800'::int8 , '100'::int2);\n--Testcase 187:\nSELECT q1 - q4 FROM INT8_TMP;\n--Testcase 103:\nDELETE FROM INT8_TMP;\n--Testcase 188:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 189:\nSELECT q1 * q4 FROM INT8_TMP;\n--Testcase 104:\nDELETE FROM INT8_TMP;\n--Testcase 190:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775808'::int8 , '0'::int2);\n--Testcase 191:\nSELECT q1 / q4 FROM INT8_TMP;\n\n--Testcase 105:\nDELETE FROM INT8_TMP;\n--Testcase 192:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 193:\nSELECT q4 + q1 FROM INT8_TMP;\n--Testcase 106:\nDELETE FROM INT8_TMP;\n--Testcase 194:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('-100'::int2 , '9223372036854775800'::int8);\n--Testcase 195:\nSELECT q4 - q1 FROM INT8_TMP;\n--Testcase 107:\nDELETE FROM INT8_TMP;\n--Testcase 196:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 197:\nSELECT q4 * q1 FROM INT8_TMP;\n--Testcase 108:\nDELETE FROM INT8_TMP;\n--Testcase 198:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '0'::int8);\n--Testcase 199:\nSELECT q4 / q1 FROM INT8_TMP;\n\n--Testcase 110:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;\n--Testcase 111:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 112:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;\n--Testcase 113:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 200:\nDELETE FROM INT8_TMP;\n--Testcase 201:\nINSERT INTO INT8_TMP(q5) VALUES ('42'), ('-37');\n--Testcase 202:\nSELECT CAST(q5::int2 as int8) FROM INT8_TMP;\n\n--Testcase 114:\nSELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;\n\n--Testcase 203:\nDELETE FROM INT8_TMP;\n--Testcase 204:\nINSERT INTO INT8_TMP(q5) VALUES ('36854775807.0');\n--Testcase 205:\nSELECT CAST(q5::float4 AS int8) FROM INT8_TMP;\n\n--Testcase 206:\nDELETE FROM INT8_TMP;\n--Testcase 207:\nINSERT INTO INT8_TMP(q5) VALUES ('922337203685477580700.0');\n--Testcase 208:\nSELECT CAST(q5::float8 AS int8) FROM INT8_TMP;\n\n--Testcase 115:\nSELECT CAST(q1 AS oid) FROM INT8_TBL;\n--Testcase 209:\nSELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';\n\n-- bit operations\n\n--Testcase 116:\nSELECT q1, q2, q1 & q2 AS \"and\", q1 | q2 AS \"or\", q1 # q2 AS \"xor\", ~q1 AS \"not\" FROM INT8_TBL;\n--Testcase 117:\nSELECT q1, q1 << 2 AS \"shl\", q1 >> 3 AS \"shr\" FROM INT8_TBL;\n\n\n-- generate_series\n\n--Testcase 118:\nDELETE FROM INT8_TMP;\n--Testcase 210:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8) q1;\n--Testcase 211:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 120:\nDELETE FROM INT8_TMP;\n--Testcase 212:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0) q1; -- should error\n--Testcase 213:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 122:\nDELETE FROM INT8_TMP;\n--Testcase 214:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2) q1;\n--Testcase 215:\nSELECT q1 FROM INT8_TMP;\n\n-- corner case\n--Testcase 216:\nDELETE FROM INT8_TMP;\n--Testcase 217:\nINSERT INTO INT8_TMP VALUES (-1::int8<<63);\n--Testcase 218:\nSELECT q1::text FROM INT8_TMP;\n\n--Testcase 219:\nDELETE FROM INT8_TMP;\n--Testcase 220:\nINSERT INTO INT8_TMP VALUES ((-1::int8<<63)+1);\n--Testcase 221:\nSELECT q1::text FROM INT8_TMP;\n\n-- check sane handling of INT64_MIN overflow cases\n--Testcase 125:\nDELETE FROM INT8_TMP;\n--Testcase 222:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int8, 888);\n--Testcase 126:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int8, 888);\n--Testcase 127:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int8, 888);\n--Testcase 128:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 129:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 130:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int4, 888);\n--Testcase 131:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int4, 888);\n--Testcase 132:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int4, 888);\n--Testcase 133:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 134:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 135:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int2, 888);\n--Testcase 136:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int2, 888);\n--Testcase 137:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int2, 888);\n--Testcase 138:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 139:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n\n-- check rounding when casting from float\n--Testcase 223:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 224:\nDELETE FROM FLOAT8_TMP;\n--Testcase 225:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 226:\nSELECT f1 as x, f1::int8 as int8_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 227:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 228:\nDELETE FROM NUMERIC_TMP;\n--Testcase 229:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 230:\nSELECT f1 as x, f1::int8 as int8_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 231:\nDELETE FROM INT8_TMP;\n--Testcase 232:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 1::int8),\n             ((-9223372036854775808)::int8, 9223372036854775807::int8),\n             ((-9223372036854775808)::int8, 4611686018427387904::int8);\n--Testcase 233:\nSELECT q1, q2, gcd(q1, q2), gcd(q1, -q2), gcd(q2, q1), gcd(-q2, q1) FROM INT8_TMP;\n\n--Testcase 234:\nDELETE FROM INT8_TMP;\n--Testcase 235:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 0::int8);\n--Testcase 236:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 237:\nDELETE FROM INT8_TMP;\n--Testcase 238:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, (-9223372036854775808)::int8);\n--Testcase 239:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n-- test lcm()\n--Testcase 240:\nDELETE FROM INT8_TMP;\n--Testcase 241:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (29893644334::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 0::int8);\n--Testcase 242:\nSELECT q1, q2, lcm(q1, q2), lcm(q1, -q2), lcm(q2, q1), lcm(-q2, q1) FROM INT8_TMP;\n\n--Testcase 243:\nDELETE FROM INT8_TMP;\n--Testcase 244:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 1::int8);\n--Testcase 245:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 246:\nDELETE FROM INT8_TMP;\n--Testcase 247:\nINSERT INTO INT8_TMP VALUES ((9223372036854775807)::int8, (9223372036854775806)::int8);\n--Testcase 248:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 251:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 249:\nDROP SERVER sqlite_svr;\n--Testcase 250:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/json.sql",
    "content": "-- SET log_min_messages TO DEBUG3;\n-- SET client_min_messages TO DEBUG3;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 010:\nCREATE FOREIGN TABLE \"type_JSON\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" json,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" json\n) SERVER sqlite_svr OPTIONS (table 'type_JSON');\n--Testcase 011:\nCREATE FOREIGN TABLE \"type_JSONB\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB');\n--Testcase 012:\nCREATE FOREIGN TABLE \"type_JSONB+\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tl int, t varchar(16), tx text,\t\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB+');\n\n--Testcase 013:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, ot1, oi, oi1) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}],\"a+u\":47,\"5\":true,\"cc3\":[\"a\", \"b\", \"c\"], \"c3\":[true, false]}',\n'c', 'c3', 2, 1),\n(2, '[11,22,33,44,55,66,77,88,99,10,11,12,13,14]',\n'1', '29', 3, 1),\n(3, '{\"a\":\"xyz\", \"π\":3.1415926535, \"aπ\":false }',\n'a', 'π', 1, NULL),\n(4, '{\"a\":null, \"a22\":22.0, \"a2\":2 }',\n'a', '22', 4, NULL),\n(5, '[9,null,7,6,5,4,3,2,1,0]',\n'1', '5', -4, 5),\n(6, '[0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,null,true]',\n'1', '21', -2, 5);\n\n--Testcase 014:\nINSERT INTO \"type_JSONB\" SELECT * FROM \"type_JSON\";\n--Testcase 015: check some SQLite JSONb initial bytes\nSELECT i, tx FROM \"type_JSONB+\";\n\n--Testcase 020:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 021: SQLite queries to type_JSON will be without normalization for j column\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\n--Testcase 022:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n\n--Testcase 023:\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 024:\nSELECT \"i\", \"j\", j.\"j\"->'a' res FROM \"type_JSON\" j;\n--Testcase 025:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 026:\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 027:\nSELECT \"i\", \"j\", j.\"j\"->'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 028:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 029:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 030:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res FROM \"type_JSON\" j;\n--Testcase 031:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 032:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 033:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 034:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 035:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 036:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'a' IS NOT NULL;\n--Testcase 037:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 038:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 039:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'a' IS NOT NULL;\n\n--Testcase 040:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 041:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 042:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 044:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 045:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n\n--Testcase 046:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 047:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 048:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSON\" j;\n--Testcase 049:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 050:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 051:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 052:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 053:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 054:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSON\" j;\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 056:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 057:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 058:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 059:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 060:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n--Testcase 061:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 062:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 063:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n\n--Testcase 064:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 065:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 066:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n--Testcase 067:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 068:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 069:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 071:\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 072:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 073:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 074:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n--Testcase 075:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 077:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 078:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 079:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 081:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 082:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 083:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 085:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 086:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n--Testcase 087:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n\n--Testcase 088:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 089:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 090:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n--Testcase 091:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 093:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 095:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n\n--Testcase 096:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 097:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 099:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n\n-- extraction with arithmetical an other expressions\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 101:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 103:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 105:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 107:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 109:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 111:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 113:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 115:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 117:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 119:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 120:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 121:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 123:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 125:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 127:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 129:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 131:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 133:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 135:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 137:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 139:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 141:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 143:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 144:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 145:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 146:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 147:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n\n--Testcase 148:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 149:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 151:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 153:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 155:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 157:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 159:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 161:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 163:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 165:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 167:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 169:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 171:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 172:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 173:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 174:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 175:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 176:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 177:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 178:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 179:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n\n\n--TCs for SQLite JSON -> format, no sense in PostgreSQL itself\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 201:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 203:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 204:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 205:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 206:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 207:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 208:\nDELETE FROM \"type_JSON\"; \n--Testcase 209:\nDELETE FROM \"type_JSONB\";\n--Testcase 210:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 211:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 212:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 213:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 214:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 215:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 216:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 217:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 218:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 219:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 220:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 221:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 222:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 223:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 224:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 225:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 226:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 227:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n-- end of SQLite right -> ->> operand test\n\n-- Operators -> ->> in SELECT context\n--Testcase 230:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n--Testcase 231:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 232:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 233:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 234:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n--Testcase 235:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 236:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 237:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 238:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n--Testcase 239:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n\n--Testcase 240:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n--Testcase 241:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 250:\nDELETE FROM \"type_JSON\"; \n--Testcase 251:\nDELETE FROM \"type_JSONB\";\n--Testcase 252:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 253:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 254:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 255:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 256:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 257:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 261:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 262:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 263:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 265\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 267:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 269:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 270:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 271:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 272:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 273\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 274:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 275:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 276:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n--Testcase 277: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n\n--Testcase 278:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n--Testcase 279:\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n\n--Testcase 280:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n--Testcase 281: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n\n--Testcase 282:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n--Testcase 283:\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n\n--Testcase 284:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n--Testcase 285: no such\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n\n--Testcase 286:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 287:\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 288:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n--Testcase 289: no such\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n\n--Testcase 290:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 291:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 292:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 293:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 294:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 295:\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 296:\nSELECT * FROM \"type_JSONB+\";\n\n--Testcase 297:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 298:\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 299:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n--Testcase 300: no such\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n\n--Multievel extraction chains\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 302:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 304:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 306:\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n--Testcase 308:\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n\n\n-- UPDATE tests\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 310:\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 311:\nSELECT * FROM \"type_JSON\" WHERE \"i\" = 1;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 313:\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 314:\nSELECT * FROM \"type_JSONB+\" WHERE \"i\" = 1;\n\n\n-- Real GIS data test, data from https://www.wikidata.org/wiki/Q118122043\n-- https://commons.wikimedia.org/wiki/Category:Private_Garden_(Pavlovsk)\n-- License of testing data in json_osm_test table: ODbL, © OpenStreetMap contributors\n--Testcase 400:\nCREATE FOREIGN TABLE json_osm_test (\n\twkt text NOT NULL,\n\tosm_type varchar(8) OPTIONS (key 'true') NOT NULL,\n\tosm_id int8 OPTIONS (key 'true') NOT NULL,\n\tt json OPTIONS (column_name 'tags') NULL,\n\tway_nodes text NULL\n) SERVER sqlite_svr;\n\n--Testcase 401:\nINSERT INTO json_osm_test VALUES ('SRID=4326;POINT(30.4536193 59.6847624)', 'node', 1198356775, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4522474 59.6851858)', 'node', 1198357028, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4532025 59.6850113)', 'node', 1738381537, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"description\": \"Ваза в дендрарии Собственного садика\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529584 59.6849417)', 'node', 3968068680, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526407 59.68497)', 'node', 4487385447, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"late C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4524943 59.6854502)', 'node', 4912270255, '{\"fee\": \"yes\", \"access\": \"customers\", \"barrier\": \"gate\", \"vehicle\": \"no\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"barrier:personnel\": \"additional\"}', NULL),\n ('SRID=4326;POINT(30.452977 59.6847621)', 'node', 7484858507, '{\"name\": \"Неизвестный мужчина\", \"ref:okn\": \"781610399040516\", \"tourism\": \"artwork\", \"alt_name\": \"Спутник Одиссея\", \"heritage\": \"2\", \"historic\": \"yes\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6522/\"}', NULL),\n ('SRID=4326;POINT(30.452909 59.6847573)', 'node', 7484858508, '{\"name\": \"Антиной\", \"ref:okn\": \"781610399040526\", \"tourism\": \"artwork\", \"alt_name\": \"Дионис\", \"heritage\": \"2\", \"historic\": \"yes\", \"material\": \"stone\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6521/\"}', NULL),\n ('SRID=4326;POINT(30.4529561 59.6848095)', 'node', 8114975053, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528946 59.6848042)', 'node', 8114975054, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528732 59.6848762)', 'node', 8114975055, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529364 59.6848802)', 'node', 8114975056, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528444 59.6851765)', 'node', 8289295956, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527798 59.6851726)', 'node', 8289295957, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528665 59.6850957)', 'node', 8289295958, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528046 59.685091)', 'node', 8289295959, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528947 59.6850172)', 'node', 8289295960, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528301 59.6850118)', 'node', 8289295961, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529101 59.6849636)', 'node', 8289295962, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528496 59.684959)', 'node', 8289295963, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528359 59.6852187)', 'node', 8331430659, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527605 59.685213)', 'node', 8331430660, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4523414 59.6851726)', 'node', 8331430663, '{\"name\": \"Сатир\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4523561 59.685141)', 'node', 8331430664, '{\"name\": \"Сатиресса\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4527994 59.6847007)', 'node', 8566916332, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4528945 59.6847497)', 'node', 8566916333, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529784 59.6853519)', 'node', 8895996426, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4529255 59.6853861)', 'node', 8895996427, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4525278 59.685471)', 'node', 8895996643, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4534153 59.6851412)', 'node', 8899249758, '{\"genus\": \"Elaeagnus\", \"taxon\": \"Elaeagnus commutata\", \"natural\": \"shrub\", \"genus:ru\": \"Лох\", \"taxon:ru\": \"Лох серебристый\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4535524 59.6848638)', 'node', 8899249764, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4535202 59.6849613)', 'node', 8899249765, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534934 59.6850486)', 'node', 8899249766, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534679 59.685136)', 'node', 8899249767, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4528899 59.6851725)', 'node', 8899249768, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530448 59.6850046)', 'node', 8899249769, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4533465 59.6850216)', 'node', 8899249770, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4532205 59.6849417)', 'node', 8899249771, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531776 59.6850839)', 'node', 8899249772, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6851265)', 'node', 8899249773, '{\"genus\": \"Malus\", \"taxon\": \"Malus niedzwetzkyana\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Яблоня\", \"taxon:ru\": \"Яблоня Недзвецкого\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533043 59.6851928)', 'node', 8899249779, '{\"height\": \"4\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.452916 59.6849894)', 'node', 8899249796, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4528248 59.684983)', 'node', 8899249797, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531527 59.685139)', 'node', 8899299127, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529549 59.6850382)', 'node', 8902082041, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530139 59.6850101)', 'node', 8902082042, '{\"genus\": \"Amelanchier\", \"taxon\": \"Amelanchier canadensis\", \"natural\": \"shrub\", \"genus:ru\": \"Ирга\", \"taxon:ru\": \"Ирга канадская\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530089 59.6850564)', 'node', 8902082048, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529982 59.685072)', 'node', 8902082055, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530213 59.6850872)', 'node', 8902082060, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529918 59.6851617)', 'node', 8902082061, '{\"genus\": \"Berberis\", \"taxon\": \"Berberis vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Барбарис\", \"taxon:ru\": \"Барбарис обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530615 59.685137)', 'node', 8902082071, '{\"genus\": \"Paeonia\", \"taxon\": \"Paeonia suffruticosa\", \"natural\": \"shrub\", \"genus:ru\": \"Пион\", \"taxon:ru\": \"Пион древовидный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531031 59.6851282)', 'node', 8902082072, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530991 59.6851451)', 'node', 8902082073, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531977 59.6851532)', 'node', 8902082074, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453207 59.6851336)', 'node', 8902082075, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532426 59.6850926)', 'node', 8902082171, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532694 59.6851157)', 'node', 8902082172, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533707 59.6851035)', 'node', 8902082173, '{\"genus\": \"Hydrangea\", \"taxon\": \"Hydrangea paniculata\", \"natural\": \"shrub\", \"genus:ru\": \"Гортензия\", \"taxon:ru\": \"Гортензия метельчатая\"}', NULL),\n ('SRID=4326;POINT(30.4528986 59.6851502)', 'node', 8902082174, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4530486 59.6848994)', 'node', 8904992674, '{\"genus\": \"Viburnum\", \"taxon\": \"Viburnum opulus\", \"natural\": \"shrub\", \"genus:ru\": \"Калина\", \"taxon:ru\": \"Калина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532396 59.6848373)', 'node', 8905335421, '{\"genus\": \"Corylus\", \"taxon\": \"Corylus avellana\", \"natural\": \"shrub\", \"genus:ru\": \"Лещина\", \"taxon:ru\": \"Лещина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532946 59.684841)', 'node', 8905335422, '{\"genus\": \"Spiraea\", \"taxon\": \"Spiraea chamaedryfolia\", \"natural\": \"shrub\", \"genus:ru\": \"Спирея\", \"taxon:ru\": \"Спирея дубравколистная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533857 59.6849271)', 'node', 8905335423, '{\"genus\": \"Euonymus\", \"taxon\": \"Euonymus europaeus\", \"natural\": \"shrub\", \"genus:ru\": \"Бересклет\", \"taxon:ru\": \"Бересклет европейский\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6849004)', 'node', 8905335424, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus sachalinensis\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Вишня\", \"taxon:ru\": \"Вишня сахалинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533998 59.6848611)', 'node', 8905335425, '{\"genus\": \"Buxus\", \"taxon\": \"Buxus sempervirens\", \"height\": \"1\", \"natural\": \"shrub\", \"genus:ru\": \"Самшит\", \"taxon:ru\": \"Самшит вечнозелёный\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4534776 59.6848679)', 'node', 8905335426, '{\"genus\": \"Rhamnus\", \"taxon\": \"Rhamnus cathartica\", \"height\": \"4\", \"natural\": \"tree\", \"genus:ru\": \"Жостер\", \"taxon:ru\": \"Жостер слабительный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534324 59.6849515)', 'node', 8905335427, '{\"genus\": \"Lonicera\", \"taxon\": \"Lonicera caerulea\", \"natural\": \"shrub\", \"genus:ru\": \"Жимолость\", \"taxon:ru\": \"Жимолость синяя\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453365 59.684981)', 'node', 8905335428, '{\"genus\": \"Philadelphus\", \"taxon\": \"Philadelphus coronarius\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник венечный\"}', NULL),\n ('SRID=4326;POINT(30.4533874 59.6849671)', 'node', 8905335429, '{\"genus\": \"Juniperus\", \"taxon\": \"Juniperus sabina\", \"height\": \"0.5\", \"natural\": \"shrub\", \"genus:ru\": \"Можжевельник\", \"taxon:ru\": \"Можжевельник казацкий\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4531319 59.6849356)', 'node', 8905335430, '{\"genus\": \"Picea\", \"taxon\": \"Picea abies\", \"height\": \"0.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель европейская\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532466 59.6848527)', 'node', 8905335431, '{\"genus\": \"Ginkgo\", \"taxon\": \"Ginkgo biloba\", \"height\": \"2.5\", \"natural\": \"tree\", \"genus:ru\": \"Гингко\", \"taxon:ru\": \"Гинкго двулопастный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"label\"}', NULL),\n ('SRID=4326;POINT(30.4532184 59.6848635)', 'node', 8905335468, '{\"genus\": \"Daphne\", \"taxon\": \"Daphne mezereum\", \"natural\": \"shrub\", \"genus:ru\": \"Волчеягодник\", \"taxon:ru\": \"Волчеягодник обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532392 59.6848902)', 'node', 8905335469, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526679 59.6846912)', 'node', 8905558225, '{\"height\": \"3\", \"highway\": \"street_lamp\", \"man_made\": \"surveillance\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530347 59.6849253)', 'node', 8906857477, '{\"genus\": \"Philadelphus lemoinei\", \"taxon\": \"Philadelphus lemoinei\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник Лемуана\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530224 59.6849455)', 'node', 8906857478, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530015 59.6847554)', 'node', 8906857479, '{\"natural\": \"tree_stump\"}', NULL),\n ('SRID=4326;LINESTRING(30.4522584 59.6851734,30.4522474 59.6851858)', 'way', 103807093, '{\"highway\": \"footway\", \"surface\": \"compacted\"}', '{3968068679,1198357028}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525041 59.6846527,30.4522364 59.6845601,30.4516531 59.6843525,30.4513385 59.6842533,30.4513511 59.6841667)', 'way', 103807103, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{8566824024,12023699867,8114975022,1195141497,4014269128,3186425168}'),\n ('SRID=4326;LINESTRING(30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456)', 'way', 103807114, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{1198357004,303515662,8566916345,1198356771,8566916346,1198356889,1198357009,8906857470}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529382 59.6847803,30.4528051 59.6851927,30.4527793 59.6852746,30.4527609 59.6853349,30.4527422 59.6853961,30.4527263 59.6854482,30.4527224 59.6854618)', 'way', 153761053, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068681,8114975050,8114975107,8895975844,8895975845,8895975847,4912270253,1664064412}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4532459 59.6852254,30.45322 59.6852491)', 'way', 153761054, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975105,3968068669}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4528762 59.6851274,30.4530118 59.6851874)', 'way', 153947121, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381541,1665582246}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4529574 59.6848702,30.4531238 59.6848204)', 'way', 153947122, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1738381532,1665582234}'),\n ('SRID=4326;LINESTRING(30.4533888 59.6848413,30.4535109 59.6849058,30.4534919 59.684967)', 'way', 153947123, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582235,1738381534,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533267 59.6852228,30.4533391 59.6851996,30.4533483 59.6851876,30.4533556 59.6851828,30.4533653 59.6851769,30.4533784 59.6851717,30.4533901 59.6851678,30.4534147 59.6851629,30.4534315 59.6851615,30.4534524 59.6850941)', 'way', 153947124, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975034,8899249793,8114975035,8902027910,8899249794,8902027909,8899249795,1738381544,8114975036,1665582244}'),\n ('SRID=4326;LINESTRING(30.4531795 59.685129,30.4533062 59.6850846,30.4534722 59.6850303,30.4534919 59.684967)', 'way', 153947125, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975075,1665582243,1738381539,1665582240}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4530483 59.6850678,30.4529356 59.6849912)', 'way', 153947126, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,1665582242,8902082170}'),\n ('SRID=4326;LINESTRING(30.4529356 59.6849912,30.4530873 59.6849398,30.453213 59.6848988)', 'way', 153947127, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8902082170,1665582238,8904992643}'),\n ('SRID=4326;LINESTRING(30.4532598 59.6849025,30.4533508 59.6849575,30.4534722 59.6850303,30.4534524 59.6850941)', 'way', 153947128, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992648,1665582239,1738381539,1665582244}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4531238 59.6848204,30.4533888 59.6848413,30.4535282 59.6848524)', 'way', 153947130, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1665582234,1665582235,1665582236}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4530873 59.6849398,30.4532201 59.6849487,30.4533508 59.6849575,30.4534919 59.684967)', 'way', 153947131, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1665582238,8902082149,1665582239,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533062 59.6850846,30.4533306 59.6850189,30.4533508 59.6849575,30.4533888 59.6848413)', 'way', 153947132, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,1665582243,8902082150,1665582239,1665582235}'),\n ('SRID=4326;LINESTRING(30.4534524 59.6850941,30.4533062 59.6850846,30.4531801 59.6850762,30.4530483 59.6850678,30.452898 59.6850578)', 'way', 153947133, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582244,1665582243,8902082168,1665582242,1665582241}'),\n ('SRID=4326;LINESTRING(30.4532234 59.6850226,30.4533062 59.6850846,30.4534147 59.6851629)', 'way', 153947134, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975088,1665582243,1738381544}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4530483 59.6850678,30.4530675 59.6850048,30.4530873 59.6849398,30.4531238 59.6848204)', 'way', 153947135, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,1665582242,8902082151,1665582238,1665582234}'),\n ('SRID=4326;LINESTRING(30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858)', 'way', 312745383, '{\"barrier\": \"fence\"}', '{1439053672,4912270255,4438910482,8895996664,4438910480,3234125031,4438910477,8893386635,4438910475,8895996665,4438910473,8114975112,8114975111,1198357028}'),\n ('SRID=4326;LINESTRING(30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554)', 'way', 315626926, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053649,8895996432,8895996430,1439053648,1439053645,8895996431,1439053641,1439053639}'),\n ('SRID=4326;LINESTRING(30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577)', 'way', 317173782, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{1653641713,8114975028,8114975027,8566824024}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.4526304 59.6847065,30.4529536 59.6847313,30.453482 59.6847765,30.4535921 59.6847856,30.4535778 59.6848316,30.4534654 59.685163)', 'way', 393601662, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774427,8905543616,3968068681,7927774426,3968068674,8114975049,3968068687}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4530118 59.6851874,30.4532501 59.6852048,30.4532657 59.6852057)', 'way', 393601664, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1665582246,8899299159,1665582248}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4528762 59.6851274,30.4530483 59.6850678,30.4531752 59.6850205)', 'way', 393601667, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1738381541,1665582242,8114975100}'),\n ('SRID=4326;LINESTRING(30.452545 59.6854429,30.4525305 59.6854105,30.4525224 59.6853929,30.4525133 59.6853758,30.4525036 59.6853597,30.4524909 59.6853438,30.4524775 59.6853279,30.4524583 59.6853083,30.4524437 59.6852938,30.4524165 59.6852717,30.4523957 59.6852568,30.452375 59.6852427,30.4523461 59.6852243,30.4523179 59.6852068)', 'way', 393620818, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975116,8895996660,8895996640,4438927787,8895996641,8895996659,8895996642,4438927782,8114975115,8895996661,8895996639,4438927777,8895996638,8114975114}'),\n ('SRID=4326;LINESTRING(30.45322 59.6852491,30.4530263 59.6852336,30.4529402 59.6852275,30.4528645 59.6852217)', 'way', 393620820, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068669,8895975857,8895975877,8895975841}'),\n ('SRID=4326;LINESTRING(30.4527686 59.6854977,30.4528746 59.6855048)', 'way', 446650486, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053671,1439053674}'),\n ('SRID=4326;LINESTRING(30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905)', 'way', 446650506, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053619,8914843795,8895996424,8914843796,1439053616,8914843797,8895996423,8914843798,1439053613,8914843799,8895996422,8895996441,8914843802,8895996421,8914843801,1439053611,8914843800,8895996420,1439053614}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522278 59.6851794)', 'way', 446651403, '{\"barrier\": \"fence\"}', '{1198357028,1653641713}'),\n ('SRID=4326;LINESTRING(30.4524943 59.6854502,30.452545 59.6854429,30.4525879 59.6854383,30.4527263 59.6854482,30.4528729 59.6854587)', 'way', 500077282, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{4912270255,8114975116,4438928092,4912270253,4438928093}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522167 59.6853009)', 'way', 758868053, '{\"highway\": \"footway\"}', '{1198357028,1406921754}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529562 59.6847243)', 'way', 849729200, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068681,8905543615}'),\n ('SRID=4326;LINESTRING(30.453482 59.6847765,30.4534851 59.684767)', 'way', 849729201, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774426,8905543614}'),\n ('SRID=4326;LINESTRING(30.452599 59.6846895,30.4525675 59.6846756,30.45256 59.6846723,30.452568 59.6846486,30.4535014 59.6847265,30.4534976 59.6847368)', 'way', 849729202, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068677,12023732269,8566916344,8566916343,8566916342,7927774425}'),\n ('SRID=4326;LINESTRING(30.4528543 59.6851747,30.4529071 59.6850026,30.4529249 59.685004,30.4529333 59.6849769,30.452917 59.6849756,30.4529721 59.6847963)', 'way', 871154683, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8114975041,8899249805,8899249804,8899249803,8899249802,8114975042}'),\n ('SRID=4326;LINESTRING(30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274,30.4526587 59.6847165)', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8114975046,8114975047,8906857474,8906857473,8114975046}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4531264 59.6851489)', 'way', 871154687, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,8114975076}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257)', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,8114975073,8114975074,8114975057,8114975058,8114975059,8114975075,8114975060,8114975061,8114975067,8114975068,8114975069,8114975077,8114975070,8114975062,8114975063,8114975064,8114975076,8114975065,8114975066,8114975071,8114975072,8114975078}'),\n ('SRID=4326;LINESTRING(30.4532501 59.6852048,30.4531713 59.6851525)', 'way', 871154689, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8899299159,8114975077}'),\n ('SRID=4326;LINESTRING(30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998)', 'way', 871154691, '{\"highway\": \"footway\"}', '{8114975097,8114975079,8114975080,8114975081,8114975082,8114975083,8114975099,8114975084,8114975085,8114975086,8114975087,8114975088,8114975089,8114975090,8114975091,8114975092,8114975100,8114975093,8114975094,8114975095,8114975096,8114975097}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4529574 59.6848702,30.4530873 59.6849398,30.4531787 59.684998)', 'way', 871154694, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1738381532,1665582238,8114975097}'),\n ('SRID=4326;LINESTRING(30.4532281 59.6850005,30.4533508 59.6849575,30.4535109 59.6849058,30.4535282 59.6848524)', 'way', 871154695, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975099,1665582239,1738381534,1665582236}'),\n ('SRID=4326;LINESTRING(30.4532459 59.6852254,30.4528051 59.6851927,30.4522785 59.6851511)', 'way', 871154698, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8114975105,8114975107,8114975109}'),\n ('SRID=4326;LINESTRING(30.4526095 59.6853751,30.4526201 59.6853832,30.4527025 59.6853899,30.4527175 59.6853841,30.4527302 59.6853414,30.4527195 59.685334,30.4526348 59.6853281,30.4526225 59.6853328,30.4526095 59.6853751)', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', '{8114975123,8114975124,8114975125,8895996607,8895996606,8114975126,8114975127,8114975181,8114975123}'),\n ('SRID=4326;LINESTRING(30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686)', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', '{8114975136,8114975137,8114975138,8114975139,8114975140,8114975141,8114975142,8114975143,8114975136}'),\n ('SRID=4326;LINESTRING(30.4525419 59.6853075,30.4525505 59.6853142,30.4526031 59.6853185,30.4526157 59.6853129,30.4526268 59.6852724,30.4526177 59.6852659,30.4525671 59.6852621,30.452555 59.6852672,30.4525419 59.6853075)', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', '{8114975144,8114975145,8114975146,8114975147,8114975148,8114975149,8114975150,8114975151,8114975144}'),\n ('SRID=4326;LINESTRING(30.4526478 59.6852554,30.4526557 59.6852612,30.452739 59.6852678,30.4527533 59.685262,30.452765 59.685222,30.4527443 59.68522,30.4527459 59.685216,30.452673 59.6852102,30.4526587 59.6852148,30.4526478 59.6852554)', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', '{8114975172,8114975173,8114975174,8114975175,8114975176,8114975177,8114975178,8114975179,8114975180,8114975172}'),\n ('SRID=4326;LINESTRING(30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', '{8129422266,8129422267,8129422268,8129422269,8129422270,8129422271,8129422272,8895996472,8129422273,8895996471,8129422266}'),\n ('SRID=4326;LINESTRING(30.4536402 59.684764,30.4536193 59.6847624,30.4536067 59.6847614)', 'way', 891865282, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{1635198216,1198356775,8289295975}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232)', 'way', 922841960, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824024,1653641402,8566824025,8566824026}'),\n ('SRID=4326;LINESTRING(30.453531 59.6847593,30.4531199 59.6847256)', 'way', 922854851, '{\"height\": \"8\", \"natural\": \"tree_row\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{5002059748,5002059751}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.452599 59.6846895)', 'way', 922854852, '{\"highway\": \"steps\"}', '{7927774427,3968068677}'),\n ('SRID=4326;LINESTRING(30.4536067 59.6847614,30.4535894 59.6847601)', 'way', 922854853, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{8289295975,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4526552 59.6847274,30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274)))', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398)))', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102)))', 'way', 871154691, '{\"highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526095 59.6853751,30.4526225 59.6853328,30.4526348 59.6853281,30.4527195 59.685334,30.4527302 59.6853414,30.4527175 59.6853841,30.4527025 59.6853899,30.4526201 59.6853832,30.4526095 59.6853751)))', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139)))', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525419 59.6853075,30.452555 59.6852672,30.4525671 59.6852621,30.4526177 59.6852659,30.4526268 59.6852724,30.4526157 59.6853129,30.4526031 59.6853185,30.4525505 59.6853142,30.4525419 59.6853075)))', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526478 59.6852554,30.4526587 59.6852148,30.452673 59.6852102,30.4527459 59.685216,30.4527443 59.68522,30.452765 59.685222,30.4527533 59.685262,30.452739 59.6852678,30.4526557 59.6852612,30.4526478 59.6852554)))', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)))', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;LINESTRING(30.4521596 59.6854203,30.4524943 59.6854502)', 'way', 961421780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8893386627,4912270255}'),\n ('SRID=4326;LINESTRING(30.4533818 59.6852214,30.4533763 59.68521)', 'way', 961717566, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053598,1439053596}'),\n ('SRID=4326;LINESTRING(30.4534979 59.6851951,30.4535038 59.6852069)', 'way', 961717567, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053589,1439053591}'),\n ('SRID=4326;LINESTRING(30.4533763 59.68521,30.4534979 59.6851951)', 'way', 961717568, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053596,1439053589}'),\n ('SRID=4326;LINESTRING(30.4527378 59.6852117,30.4526559 59.6852052,30.4525684 59.6851982,30.4524641 59.6851898,30.4522584 59.6851734)', 'way', 961717569, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975842,8895975876,8895975873,8895975858,3968068679}'),\n ('SRID=4326;LINESTRING(30.4530032 59.685292,30.453022 59.6852839,30.4530407 59.6852758,30.4530635 59.68527,30.4530877 59.685267,30.4531091 59.6852663,30.4531333 59.6852683,30.4531547 59.6852744,30.45322 59.6852491)', 'way', 961717570, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975875,8895975856,8895975855,8895975850,8895975854,8895975853,8895975852,8895975851,3968068669}'),\n ('SRID=4326;LINESTRING(30.4524419 59.6852441,30.452456 59.6851977,30.4524483 59.6851915,30.4523702 59.6851856,30.4523568 59.6851898,30.4523826 59.6852055,30.4524088 59.6852218,30.4524248 59.6852328,30.4524419 59.6852441)', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', '{8895975865,8895975864,8895975863,8895975862,8895975859,8895975861,8895975860,8895975838,8895975865}'),\n ('SRID=4326;LINESTRING(30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946)', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', '{8895975872,8895975871,8895975870,8895975869,8895975868,8895975867,8895975866,8895975872}'),\n ('SRID=4326;LINESTRING(30.4530263 59.6852336,30.4530032 59.685292,30.4529231 59.6852858,30.4527793 59.6852746,30.452638 59.6852636,30.4525513 59.6852568,30.4524466 59.6852487,30.4524641 59.6851898)', 'way', 961717573, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975857,8895975875,8895975843,8895975844,8895975848,8895975846,8895975874,8895975858}'),\n ('SRID=4326;LINESTRING(30.4529402 59.6852275,30.4529231 59.6852858,30.4529053 59.6853463,30.4528865 59.6854078)', 'way', 961717574, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975877,8895975843,8895975880,8895975878}'),\n ('SRID=4326;LINESTRING(30.4526559 59.6852052,30.452638 59.6852636,30.4526195 59.6853238,30.4526009 59.6853847,30.4527422 59.6853961,30.4528865 59.6854078)', 'way', 961717575, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975876,8895975848,8895975849,8895975879,8895975847,8895975878}'),\n ('SRID=4326;LINESTRING(30.4525684 59.6851982,30.4525513 59.6852568,30.4525338 59.685317,30.4526195 59.6853238,30.4527609 59.6853349,30.4529053 59.6853463)', 'way', 961717576, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975873,8895975846,8895975881,8895975849,8895975845,8895975880}'),\n ('SRID=4326;LINESTRING(30.4527487 59.6852082,30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082)', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', '{8895975885,8895975884,8895975883,8895975882,8895975885}'),\n ('SRID=4326;LINESTRING(30.4532064 59.6852443,30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443)', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', '{8895975889,8895975888,8895975887,8895975886,8895975889}'),\n ('SRID=4326;LINESTRING(30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696)', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', '{8895975901,8895975902,8895975900,8895975903,8895975891,8895975890,8895975901}'),\n ('SRID=4326;LINESTRING(30.4530554 59.6852658,30.4530414 59.6852392,30.453028 59.6852429,30.4530143 59.6852802,30.4530288 59.6852733,30.453041 59.6852693,30.4530554 59.6852658)', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', '{8895975898,8895975895,8895975896,8895975907,8895975897,8895975906,8895975898}'),\n ('SRID=4326;LINESTRING(30.4530632 59.6852641,30.4530782 59.6852621,30.4530921 59.6852616,30.4531031 59.6852618,30.4531172 59.6852446,30.4530501 59.6852392,30.4530632 59.6852641)', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', '{8895975905,8895975899,8895975904,8895975892,8895975893,8895975894,8895975905}'),\n ('SRID=4326;LINESTRING(30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204)', 'way', 961717582, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053627,8914843793,8895996425,8914843794,1439053619}'),\n ('SRID=4326;LINESTRING(30.4525812 59.6854845,30.4526564 59.6854895)', 'way', 961717593, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{8895996555,1439053669}'),\n ('SRID=4326;LINESTRING(30.4527747 59.6854387,30.4528506 59.685445,30.4528681 59.6854402,30.4528755 59.6854172,30.4528654 59.6854091,30.4527852 59.6854026,30.4527687 59.6854078,30.4527618 59.6854305,30.4527747 59.6854387)', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', '{8895996465,8895996464,8895996463,8895996462,8895996461,8895996460,8895996459,8895996458,8895996465}'),\n ('SRID=4326;LINESTRING(30.4525201 59.6853123,30.4525328 59.6853069,30.4525442 59.6852666,30.4525351 59.6852597,30.4524557 59.6852538,30.4524775 59.6852724,30.4524969 59.6852906,30.4525201 59.6853123)', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', '{8895996470,8895996469,8895996468,8895996467,8895996466,8895996428,8895996429,8895996470}'),\n ('SRID=4326;LINESTRING(30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969,30.4523418 59.6851889)', 'way', 961717596, '{\"landuse\": \"grass\"}', '{8895996495,8895975839,8895996483,8895996484,8895996485,8895996486,8895996487,8895996488,8895996489,8895996490,8895996491,8895996492,8895996493,8895996494,8895996496,8895996473,8895996479,8895996480,8895996474,8895996509,8895996508,8895996507,8895996506,8895996505,8895996504,8895996503,8895996502,8895996501,8895996500,8895996499,8895996498,8895996497,8895996478,8895996495}'),\n ('SRID=4326;LINESTRING(30.4523081 59.6852118,30.4522803 59.6851945,30.4522795 59.6852157,30.4523143 59.6852356,30.4523427 59.6852536,30.4523628 59.6852673,30.4523827 59.6852816,30.4524087 59.6853027,30.4524225 59.6853163,30.4524411 59.6853354,30.452454 59.6853507,30.452466 59.6853657,30.4524751 59.6853808,30.4524839 59.6853973,30.4524918 59.6854125,30.4524982 59.6854272,30.452501 59.6854325,30.4525097 59.6854362,30.4525224 59.6854348,30.4525257 59.6854303,30.4525231 59.6854242,30.4525171 59.6854097,30.4525091 59.6853943,30.4525002 59.6853776,30.4524909 59.685362,30.4524785 59.6853465,30.4524653 59.6853309,30.4524465 59.6853116,30.4524322 59.6852976,30.4524056 59.685276,30.4523853 59.6852614,30.4523649 59.6852475,30.4523362 59.6852293,30.4523081 59.6852118)', 'way', 961717597, '{\"landuse\": \"grass\"}', '{8895996522,8895996477,8895996536,8895996524,8895996525,8895996526,8895996527,8895996528,8895996529,8895996530,8895996531,8895996532,8895996533,8895996534,8895996535,8895996537,8895996482,8895996476,8895996481,8895996523,8895996475,8895996521,8895996520,8895996519,8895996518,8895996517,8895996516,8895996515,8895996514,8895996513,8895996512,8895996511,8895996510,8895996522}'),\n ('SRID=4326;LINESTRING(30.4526076 59.685425,30.4526842 59.6854313,30.4527032 59.6854269,30.4527112 59.6854034,30.4527003 59.6853955,30.4526196 59.6853891,30.4526042 59.6853942,30.4525975 59.6854176,30.4526076 59.685425)', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', '{8895996545,8895996544,8895996543,8895996542,8895996541,8895996540,8895996539,8895996538,8895996545}'),\n ('SRID=4326;LINESTRING(30.4528639 59.685494,30.4528702 59.6854731,30.4527911 59.6854671,30.4527849 59.685488,30.4528639 59.685494)', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996549,8895996548,8895996547,8895996546,8895996549}'),\n ('SRID=4326;LINESTRING(30.4526433 59.6854773,30.4526495 59.6854564,30.4525705 59.6854504,30.4525642 59.6854713,30.4526433 59.6854773)', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996553,8895996552,8895996551,8895996550,8895996553}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528709 59.6855164)', 'way', 961717601, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,8895996554}'),\n ('SRID=4326;LINESTRING(30.4529138 59.6853368,30.4529235 59.6853445,30.4529678 59.6853472,30.4529853 59.6853413,30.4529963 59.6853005,30.4529866 59.6852936,30.4529427 59.6852903,30.4529263 59.6852951,30.4529138 59.6853368)', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', '{8895996564,8895996563,8895996562,8895996561,8895996560,8895996559,8895996558,8895996557,8895996564}'),\n ('SRID=4326;LINESTRING(30.452933 59.6852753,30.4529441 59.6852838,30.4529886 59.6852873,30.453002 59.6852821,30.4530171 59.6852433,30.4530088 59.6852371,30.4529582 59.685233,30.4529444 59.6852374,30.452933 59.6852753)', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', '{8895996572,8895996571,8895996570,8895996569,8895996568,8895996567,8895996566,8895996565,8895996572}'),\n ('SRID=4326;LINESTRING(30.4525595 59.6852465,30.4525692 59.6852544,30.4526207 59.6852585,30.4526333 59.6852538,30.452645 59.6852146,30.4526353 59.6852076,30.4525847 59.6852036,30.4525709 59.685208,30.4525595 59.6852465)', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', '{8895996580,8895996579,8895996578,8895996577,8895996576,8895996575,8895996574,8895996573,8895996580}'),\n ('SRID=4326;LINESTRING(30.452817 59.6852667,30.4528288 59.6852748,30.4529066 59.6852809,30.45292 59.6852751,30.4529319 59.6852358,30.4529216 59.6852291,30.452851 59.685224,30.4528493 59.6852281,30.452831 59.6852267,30.452817 59.6852667)', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', '{8895996589,8895996588,8895996587,8895996586,8895996585,8895996584,8895996581,8895996583,8895996582,8895996589}'),\n ('SRID=4326;LINESTRING(30.4527946 59.6853272,30.4528053 59.6853349,30.4528878 59.6853416,30.4529031 59.6853359,30.4529154 59.6852941,30.4529042 59.6852874,30.4528247 59.6852816,30.4528087 59.6852864,30.4527946 59.6853272)', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', '{8895996597,8895996596,8895996595,8895996594,8895996593,8895996592,8895996591,8895996590,8895996597}'),\n ('SRID=4326;LINESTRING(30.4527745 59.6853889,30.4527865 59.6853969,30.4528677 59.6854032,30.4528839 59.6853982,30.4528953 59.6853552,30.4528845 59.6853477,30.4528052 59.6853419,30.4527899 59.6853454,30.4527745 59.6853889)', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', '{8895996605,8895996604,8895996603,8895996602,8895996601,8895996600,8895996599,8895996598,8895996605}'),\n ('SRID=4326;LINESTRING(30.452565 59.6854206,30.4525598 59.6854071,30.4525516 59.6853892,30.4525422 59.6853716,30.4525319 59.6853544,30.4525184 59.6853376,30.4525045 59.6853211,30.4524848 59.6853009,30.4524693 59.6852857,30.4524408 59.6852624,30.4524192 59.685247,30.4523979 59.6852324,30.4523685 59.6852137,30.4523402 59.6851962)', 'way', 961717608, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996623,8895996621,8895996620,8895996619,8895996618,8895996617,8895996616,8895996615,8895996614,8895996613,8895996612,8895996611,8895996610,8895996622}'),\n ('SRID=4326;LINESTRING(30.4525109 59.6854262,30.4525044 59.6854114,30.4524965 59.6853961,30.4524877 59.6853796,30.4524784 59.6853642,30.4524662 59.6853489,30.4524532 59.6853335,30.4524345 59.6853143,30.4524204 59.6853005,30.4523942 59.6852791,30.452374 59.6852647,30.4523538 59.6852509,30.4523252 59.6852327,30.4522972 59.6852153)', 'way', 961717609, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996637,8895996635,8895996634,8895996633,8895996632,8895996631,8895996630,8895996629,8895996628,8895996627,8895996626,8895996625,8895996624,8895996636}'),\n ('SRID=4326;LINESTRING(30.4523179 59.6852068,30.4522881 59.6851891,30.4522584 59.6851734,30.4522785 59.6851511,30.4525958 59.6847532,30.4529382 59.6847803,30.4535778 59.6848316)', 'way', 961717610, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975114,8895996608,3968068679,8114975109,8114975051,8114975050,8114975049}'),\n ('SRID=4326;LINESTRING(30.4527224 59.6854618,30.4527166 59.6854798)', 'way', 961717612, '{\"highway\": \"steps\", \"incline\": \"up\", \"surface\": \"paving_stones\"}', '{1664064412,8895996662}'),\n ('SRID=4326;LINESTRING(30.4534116 59.6851536,30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536)', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249763,8899249762,8899249761,8899249760,8899249759,8899249763}'),\n ('SRID=4326;LINESTRING(30.4535137 59.6851734,30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437)', 'way', 962062988, '{\"source:taxon\": \"board\"}', '{8899249777,8899249776,8899249775,8899249774}'),\n ('SRID=4326;LINESTRING(30.4534505 59.6851512,30.4535484 59.6848425)', 'way', 962062989, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8899249781,8899249780}'),\n ('SRID=4326;LINESTRING(30.4532761 59.6852013,30.4533137 59.6852128,30.453319 59.6851999,30.4533257 59.6851898,30.4533338 59.6851796,30.4533458 59.6851715,30.4533606 59.6851647,30.453378 59.6851586,30.4533941 59.6851559,30.4533211 59.6851024,30.4533083 59.6851038,30.4532761 59.6852013)', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249792,8899249791,8899249790,8899249789,8899249788,8899249787,8899249786,8899249785,8899249784,8899249783,8899249782,8899249792}'),\n ('SRID=4326;LINESTRING(30.4534315 59.6851615,30.4534654 59.685163)', 'way', 962062991, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975036,3968068687}'),\n ('SRID=4326;LINESTRING(30.45277 59.6851675,30.4528221 59.6849965,30.4528061 59.6849952,30.4528148 59.6849678,30.4528309 59.6849691,30.4528877 59.684789)', 'way', 962062992, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8899249807,8899249801,8899249800,8899249799,8899249798,8899249806}'),\n ('SRID=4326;LINESTRING(30.4530825 59.6850727,30.4530768 59.6850789,30.4531357 59.6851196,30.4531475 59.6851179,30.4531599 59.6851179,30.4531731 59.6851201,30.4531813 59.685123,30.4532721 59.6850914,30.45327 59.6850856,30.4530825 59.6850727)', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249816,8899249815,8899249814,8899249813,8899249812,8899249811,8899249810,8899249809,8899249808,8899249816}'),\n ('SRID=4326;LINESTRING(30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148)', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299126,8899299125,8899299124,8899299123,8899299122,8899299121,8899299120,8899299119,8899299118,8899299117,8899299126}'),\n ('SRID=4326;LINESTRING(30.4531566 59.6851458,30.4531627 59.6851441,30.4531665 59.6851411,30.4531672 59.6851376,30.4531645 59.6851343,30.4531591 59.685132,30.4531523 59.6851313,30.4531455 59.6851322,30.4531404 59.6851346,30.4531381 59.685138,30.4531391 59.6851415,30.4531433 59.6851444,30.4531496 59.6851459,30.4531566 59.6851458)', 'way', 962062995, '{\"landuse\": \"grass\"}', '{8899299139,8899299138,8899299137,8899299136,8899299135,8899299134,8899299133,8899299132,8899299131,8899299130,8899299129,8899299128,8899299140,8899299139}'),\n ('SRID=4326;LINESTRING(30.4531836 59.6851532,30.45325 59.6851972,30.4532587 59.6851977,30.4532923 59.6851023,30.4532804 59.6850981,30.4531914 59.68513,30.4531946 59.6851353,30.453195 59.6851401,30.4531936 59.6851444,30.45319 59.6851488,30.4531836 59.6851532)', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299150,8899299149,8899299141,8899299148,8899299142,8899299147,8899299146,8899299145,8899299144,8899299143,8899299150}'),\n ('SRID=4326;LINESTRING(30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299158,8899299157,8899299156,8899299155,8899299154,8899299153,8899299152,8899299151,8899249778,8899299158}'),\n ('SRID=4326;LINESTRING(30.4532162 59.6852145,30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145)', 'way', 962062998, '{\"landuse\": \"grass\"}', '{8899299165,8899299164,8899299163,8899299161,8899299160,8899299162,8899299165}'),\n ('SRID=4326;LINESTRING(30.4532627 59.6852077,30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077)', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', '{8902082028,8902082027,8902082026,8902082025,8902082024,8902082023,8902082022,8902082021,8902082020,8902027911,8902082019,8902082018,8902082017,8902027912,8902027916,8902027913,8902027915,8902027914,8902082028}'),\n ('SRID=4326;LINESTRING(30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082032,8902082031,8902082030,8902082029,8902082032}'),\n ('SRID=4326;LINESTRING(30.4529465 59.6849826,30.4530583 59.6849454,30.4530566 59.6849397,30.4529452 59.6849315,30.4529338 59.6849691,30.4529492 59.6849698,30.4529465 59.6849826)', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082038,8902082037,8902082036,8902082035,8902082034,8902082033,8902082038}'),\n ('SRID=4326;LINESTRING(30.4530344 59.685052,30.4530456 59.6850508,30.4530757 59.684955,30.4530662 59.6849507,30.4529465 59.6849918,30.4530344 59.685052)', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082047,8902082046,8902082045,8902082044,8902082043,8902082047}'),\n ('SRID=4326;LINESTRING(30.4529083 59.6850544,30.4530153 59.6850613,30.4530221 59.685056,30.4529398 59.6850009,30.4529378 59.6850121,30.4529184 59.6850114,30.4529083 59.6850544)', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082054,8902082053,8902082052,8902082051,8902082050,8902082049,8902082054}'),\n ('SRID=4326;LINESTRING(30.4528875 59.6851184,30.4530138 59.6850731,30.4530125 59.6850679,30.4529043 59.6850625,30.4528875 59.6851184)', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082059,8902082058,8902082057,8902082056,8902082059}'),\n ('SRID=4326;LINESTRING(30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789)', 'way', 962382766, '{\"landuse\": \"grass\"}', '{8902082065,8902082064,8902082063,8902082062,8902082065}'),\n ('SRID=4326;LINESTRING(30.4529896 59.6851748,30.4530072 59.6851719,30.4530311 59.6850841,30.4530206 59.6850798,30.4528885 59.6851275,30.4529896 59.6851748)', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082070,8902082069,8902082068,8902082067,8902082066,8902082070}'),\n ('SRID=4326;LINESTRING(30.4533332 59.6850719,30.4534612 59.68503,30.4533655 59.6849715,30.4533546 59.6849733,30.4533227 59.6850682,30.4533332 59.6850719)', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082080,8902082079,8902082078,8902082077,8902082076,8902082080}'),\n ('SRID=4326;LINESTRING(30.4533437 59.685083,30.4534444 59.6850899,30.4534619 59.6850382,30.4533411 59.685078,30.4533437 59.685083)', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082084,8902082083,8902082082,8902082081,8902082084}'),\n ('SRID=4326;LINESTRING(30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173)', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082090,8902082089,8902082088,8902082087,8902082086,8902082085,8902082090}'),\n ('SRID=4326;LINESTRING(30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113)', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082096,8902082095,8902082094,8902082093,8902082092,8902082091,8902082096}'),\n ('SRID=4326;LINESTRING(30.4532258 59.6849527,30.4532116 59.6849902,30.4532207 59.684992,30.4532298 59.6849953,30.4533219 59.6849634,30.4533191 59.6849588,30.4532258 59.6849527)', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082102,8902082101,8902082100,8902082099,8902082098,8902082097,8902082102}'),\n ('SRID=4326;LINESTRING(30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082108,8902082107,8902082106,8902082105,8902082104,8902082103,8902082108}'),\n ('SRID=4326;LINESTRING(30.4530763 59.6850024,30.4531619 59.6850065,30.4531647 59.6850018,30.4531695 59.6849976,30.4531032 59.6849548,30.453091 59.6849565,30.4530763 59.6850024)', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082109,8902082114,8902082113,8902082112,8902082111,8902082110,8902082109}'),\n ('SRID=4326;LINESTRING(30.4530716 59.6850547,30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547)', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082120,8902082119,8902082118,8902082117,8902082116,8902082115,8902082120}'),\n ('SRID=4326;LINESTRING(30.4531735 59.6850722,30.4531863 59.6850287,30.4531799 59.6850271,30.4531749 59.6850252,30.4530791 59.6850599,30.453083 59.685065,30.4531735 59.6850722)', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082126,8902082125,8902082124,8902082123,8902082122,8902082121,8902082126}'),\n ('SRID=4326;LINESTRING(30.4531903 59.6850727,30.4532727 59.6850781,30.4532816 59.6850715,30.4532223 59.6850274,30.453211 59.6850297,30.453201 59.6850303,30.4531903 59.6850727)', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082132,8902082131,8902082130,8902082129,8902082128,8902082127,8902082132}'),\n ('SRID=4326;LINESTRING(30.453206 59.6849937,30.4532201 59.6849487)', 'way', 962382778, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975081,8902082149}'),\n ('SRID=4326;LINESTRING(30.4532335 59.6850137,30.4533306 59.6850189)', 'way', 962382779, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975086,8902082150}'),\n ('SRID=4326;LINESTRING(30.4531682 59.6850102,30.4530675 59.6850048)', 'way', 962382780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975094,8902082151}'),\n ('SRID=4326;LINESTRING(30.4531253 59.6850083,30.4531256 59.6850158,30.4531288 59.6850232,30.4531349 59.6850302,30.4531434 59.6850364,30.4531543 59.6850416,30.4531669 59.6850457,30.4531809 59.6850485,30.4531957 59.6850498,30.4532107 59.6850496,30.4532253 59.685048,30.4532391 59.685045,30.4532514 59.6850406,30.4532618 59.6850352,30.4532699 59.6850288,30.4532753 59.6850217,30.4532779 59.6850143,30.4532776 59.6850067,30.4532744 59.6849993,30.4532684 59.6849924,30.4532598 59.6849862,30.453249 59.6849809,30.4532363 59.6849768,30.4532224 59.6849741,30.4532076 59.6849728,30.4531926 59.6849729,30.4531779 59.6849745,30.4531642 59.6849776,30.4531519 59.6849819,30.4531415 59.6849874,30.4531334 59.6849938,30.4531279 59.6850008,30.4531253 59.6850083)', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082167,8902082134,8902082166,8902082133,8902082165,8902082148,8902082164,8902082147,8902082163,8902082146,8902082162,8902082145,8902082161,8902082144,8902082160,8902082143,8902082159,8902082142,8902082158,8902082141,8902082157,8902082140,8902082156,8902082139,8902082155,8902082138,8902082154,8902082137,8902082153,8902082136,8902082152,8902082135,8902082167}'),\n ('SRID=4326;LINESTRING(30.4531956 59.6850267,30.4531801 59.6850762)', 'way', 962382782, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975091,8902082168}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4529124 59.6850066,30.4529307 59.6850078,30.4529356 59.6849912,30.4529412 59.6849735,30.4529245 59.6849722,30.4529389 59.6849276)', 'way', 962382783, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381535,8902082040,8902082170,8902082039,8902082169,1665582237}'),\n ('SRID=4326;LINESTRING(30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877)', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992660,8904992659,8904992658,8904992657,8904992656,8904992655,8904992654,8904992653,8904992652,8904992651,8904992650,8904992649,8904992648,8904992647,8904992646,8904992645,8904992644,8904992643,8904992642,8904992641,8904992640,8904992639,8904992660}'),\n ('SRID=4326;LINESTRING(30.4532432 59.6848971,30.4532493 59.6848954,30.4532531 59.6848924,30.4532538 59.6848889,30.4532511 59.6848856,30.4532457 59.6848833,30.4532389 59.6848826,30.4532321 59.6848835,30.453227 59.684886,30.4532247 59.6848893,30.4532257 59.6848928,30.4532299 59.6848957,30.4532362 59.6848972,30.4532432 59.6848971)', 'way', 962678726, '{\"landuse\": \"grass\"}', '{8904992673,8904992672,8904992671,8904992670,8904992669,8904992668,8904992667,8904992666,8904992665,8904992664,8904992663,8904992662,8904992661,8904992673}'),\n ('SRID=4326;LINESTRING(30.4530998 59.6849248,30.4531105 59.684928,30.4532056 59.6848974,30.4532029 59.6848932,30.4532023 59.6848877,30.4532043 59.6848829,30.4532098 59.6848776,30.4531384 59.6848341,30.4531253 59.6848349,30.4530998 59.6849248)', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992682,8904992681,8904992680,8904992679,8904992637,8904992678,8904992677,8904992676,8904992675,8904992682}'),\n ('SRID=4326;LINESTRING(30.4530724 59.6849262,30.4530868 59.6849239,30.4531127 59.6848333,30.4531034 59.6848301,30.4529683 59.6848711,30.4530724 59.6849262)', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992687,8904992686,8904992685,8904992684,8904992683,8904992687}'),\n ('SRID=4326;LINESTRING(30.4530589 59.6849341,30.4530633 59.6849302,30.452961 59.6848772,30.4529482 59.6849246,30.4530589 59.6849341)', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992691,8904992690,8904992689,8904992688,8904992691}'),\n ('SRID=4326;LINESTRING(30.4531212 59.684939,30.4533222 59.6849516,30.4533269 59.6849477,30.4532581 59.6849071,30.4532455 59.6849087,30.4532339 59.6849085,30.4532243 59.684907,30.4532133 59.6849034,30.4531185 59.6849335,30.4531212 59.684939)', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992699,8904992698,8904992697,8904992696,8904992692,8904992638,8904992695,8904992694,8904992693,8904992699}'),\n ('SRID=4326;LINESTRING(30.453536 59.6848401,30.4529797 59.6847958,30.452977 59.6848046,30.4535329 59.6848493,30.453536 59.6848401)', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', '{8905335420,8905335419,8905335418,8905335417,8905335420}'),\n ('SRID=4326;LINESTRING(30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335435,8905335434,8905335433,8905335432,8905335435}'),\n ('SRID=4326;LINESTRING(30.4533819 59.6849565,30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565)', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335439,8905335438,8905335437,8905335436,8905335439}'),\n ('SRID=4326;LINESTRING(30.4533623 59.6849431,30.4533739 59.6849464,30.4534994 59.6849065,30.4534038 59.6848537,30.4533921 59.6848545,30.4533623 59.6849431)', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335444,8905335443,8905335442,8905335441,8905335440,8905335444}'),\n ('SRID=4326;LINESTRING(30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335454,8905335453,8905335452,8905335451,8905335450,8905335449,8905335448,8905335447,8905335446,8905335454}'),\n ('SRID=4326;LINESTRING(30.4529663 59.6848632,30.4530962 59.6848253,30.4530928 59.6848201,30.4529831 59.6848107,30.4529663 59.6848632)', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335458,8905335457,8905335456,8905335455,8905335458}'),\n ('SRID=4326;LINESTRING(30.4532195 59.6848732,30.4532263 59.6848712,30.4532379 59.6848698,30.4532504 59.6848704,30.4532619 59.6848729,30.4532706 59.684876,30.4533642 59.6848467,30.4533614 59.6848416,30.453158 59.6848262,30.4531503 59.6848308,30.4532195 59.6848732)', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335467,8905335466,8905335465,8905335464,8905335463,8905335462,8905335461,8905335445,8905335460,8905335459,8905335467}'),\n ('SRID=4326;LINESTRING(30.4532684 59.6848807,30.4533888 59.6848413)', 'way', 962714221, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992654,1665582235}'),\n ('SRID=4326;LINESTRING(30.4531238 59.6848204,30.4532177 59.684877)', 'way', 962714222, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582234,8904992660}'),\n ('SRID=4326;LINESTRING(30.4527677 59.6846399,30.4528579 59.6846477)', 'way', 962735606, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8905543613,1198356896}'),\n ('SRID=4326;LINESTRING(30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399)', 'way', 962735608, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824026,1198356935,8566824027,8905543613}'),\n ('SRID=4326;LINESTRING(30.4534851 59.684767,30.4534913 59.6847521,30.4534976 59.6847368)', 'way', 962735609, '{\"highway\": \"steps\"}', '{8905543614,12023732271,7927774425}'),\n ('SRID=4326;LINESTRING(30.4529562 59.6847243,30.4529615 59.6847082,30.4529628 59.6847041)', 'way', 962735610, '{\"highway\": \"steps\"}', '{8905543615,12023732270,3968068678}'),\n ('SRID=4326;LINESTRING(30.4526304 59.6847065,30.4525958 59.6847532)', 'way', 962735611, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8905543616,8114975051}'),\n ('SRID=4326;LINESTRING(30.4528676 59.6847547,30.4526341 59.6847357,30.452631 59.6847454,30.4528645 59.6847644,30.4528676 59.6847547)', 'way', 962735612, '{\"landuse\": \"grass\"}', '{8905558220,8905558219,8905558218,8905558217,8905558220}'),\n ('SRID=4326;LINESTRING(30.4535589 59.6848104,30.4530176 59.6847681,30.4530149 59.6847769,30.4535559 59.6848195,30.4535589 59.6848104)', 'way', 962735613, '{\"landuse\": \"grass\"}', '{8905558224,8905558223,8905558222,8905558221,8905558224}'),\n ('SRID=4326;LINESTRING(30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573,30.4530182 59.6847465)', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8905558227,8905558226,8906857476,8906857475,8905558227}'),\n ('SRID=4326;LINESTRING(30.4523152 59.6851448,30.4526116 59.6847664)', 'way', 962869359, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.7\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857452,8906857451}'),\n ('SRID=4326;LINESTRING(30.4526277 59.6846803,30.4526365 59.6846782,30.4526406 59.6846738,30.4526381 59.684669,30.4526302 59.6846662,30.4526205 59.6846666,30.4526137 59.6846701,30.4526128 59.684675,30.4526184 59.684679,30.4526277 59.6846803)', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857461,8906857453,8906857460,8906857459,8906857458,8906857457,8906857456,8906857455,8906857454,8906857461}'),\n ('SRID=4326;LINESTRING(30.4535863 59.6847456,30.4535811 59.6847595)', 'way', 962869365, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8906857470,8289295976}'),\n ('SRID=4326;MULTIPOLYGON(((30.4513 59.6845239,30.4513105 59.6845148,30.4513253 59.6844972,30.4513336 59.6844848,30.4513473 59.6844699,30.4513568 59.6844555,30.4513653 59.6844381,30.4513738 59.6844262,30.4513936 59.6844093,30.4514013 59.6843976,30.4514225 59.6843888,30.4514444 59.6843812,30.4514614 59.6843629,30.4514704 59.6843445,30.4514736 59.6843262,30.4514828 59.6842988,30.4514912 59.6842865,30.4514975 59.6842799,30.4515117 59.6842705,30.4515428 59.6842625,30.4516031 59.6842549,30.4518408 59.6843394,30.4519523 59.6843794,30.4520216 59.6844035,30.4520874 59.6844268,30.4521402 59.684444,30.4521943 59.6844606,30.452244 59.6844736,30.4522939 59.6844865,30.4523452 59.6844991,30.4524113 59.6845149,30.4524654 59.6845284,30.4525244 59.6845406,30.4525539 59.6845467,30.452566 59.6845558,30.452571 59.6845656,30.4525675 59.6845745,30.4525615 59.68459,30.4525618 59.6845988,30.4525613 59.6846073,30.4525568 59.6846156,30.4525466 59.6846232,30.4525331 59.6846279,30.4525251 59.684634,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4521768 59.6852884,30.4521573 59.685297,30.4521207 59.6853099,30.4520859 59.6853167,30.4520483 59.6853214,30.4520121 59.6853235,30.4519679 59.6853228,30.4519209 59.685316,30.4518731 59.6853033,30.4518364 59.6852869,30.4518016 59.6852646,30.4517747 59.6852436,30.4517546 59.685224,30.4517399 59.685205,30.4517278 59.6851773,30.4517104 59.6851603,30.4516916 59.6851468,30.4516857 59.6851285,30.4516903 59.6851123,30.4517117 59.6851023,30.4517426 59.685094,30.4517784 59.6850892,30.4518103 59.6850908,30.4518403 59.6851005,30.4518731 59.6850949,30.4518771 59.6850809,30.4518692 59.685051,30.4518777 59.6850294,30.4519043 59.6850131,30.4519376 59.6850028,30.4519737 59.684999,30.4520079 59.6849997,30.4520477 59.685012,30.4520887 59.6850223,30.4521435 59.6850216,30.4521948 59.6850093,30.4522112 59.6849969,30.4522301 59.6849727,30.45222 59.6849586,30.4521979 59.6849496,30.4521524 59.6849328,30.452119 59.6849135,30.452105 59.6848849,30.4521099 59.684868,30.4520932 59.684849,30.4520658 59.6848372,30.4520255 59.6848223,30.4520099 59.6848104,30.4519866 59.6847939,30.4519651 59.6847718,30.4519517 59.6847501,30.4519518 59.6847258,30.4519545 59.6847041,30.4519786 59.6846635,30.4520121 59.6846479,30.452051 59.6846256,30.4520604 59.6846161,30.4520537 59.6846046,30.4520175 59.6845829,30.4519692 59.6845613,30.451933 59.684566,30.4519102 59.6845748,30.4518928 59.6845917,30.4518772 59.6846127,30.4518697 59.684638,30.4518561 59.6846587,30.4518347 59.6846794,30.4518136 59.6846859,30.451785 59.6846963,30.4517612 59.6847117,30.4517363 59.6847257,30.4517004 59.6847328,30.4516678 59.6847376,30.4516243 59.6847395,30.4515783 59.6847426,30.4515624 59.6847383,30.451536 59.6847319,30.4515265 59.6847207,30.4515128 59.6847092,30.4515012 59.6846991,30.4514963 59.6846932,30.4515039 59.6846846,30.4515091 59.6846707,30.4515006 59.6846638,30.4514837 59.6846584,30.4514488 59.6846536,30.4514298 59.6846424,30.4514235 59.6846339,30.451434 59.6846216,30.451452 59.6846104,30.4514721 59.684604,30.4514816 59.6845934,30.4514827 59.6845827,30.4514763 59.6845715,30.4514427 59.6845604,30.4514004 59.6845719,30.4513792 59.6845708,30.451356 59.684566,30.4513317 59.6845601,30.4513137 59.6845489,30.4513042 59.6845393,30.4513 59.6845239)))', 'relation', 12444790, '{\"natural\": \"wood\", \"leaf_type\": \"mixed\", \"leaf_cycle\": \"mixed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523568 59.6851898,30.4523702 59.6851856,30.4524483 59.6851915,30.452456 59.6851977,30.4524419 59.6852441,30.4524248 59.6852328,30.4524088 59.6852218,30.4523826 59.6852055,30.4523568 59.6851898)))', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459)))', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082,30.4523303 59.6851757)))', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443,30.4528543 59.6852169)))', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622)))', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6852802,30.453028 59.6852429,30.4530414 59.6852392,30.4530554 59.6852658,30.453041 59.6852693,30.4530288 59.6852733,30.4530143 59.6852802)))', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530501 59.6852392,30.4531172 59.6852446,30.4531031 59.6852618,30.4530921 59.6852616,30.4530782 59.6852621,30.4530632 59.6852641,30.4530501 59.6852392)))', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.4531138 59.6852988,30.4530897 59.6853096,30.4530682 59.6853211,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168)))', 'relation', 12935642, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530106 59.6853114,30.4530161 59.6853019,30.4530244 59.6852922,30.4530375 59.685285,30.4530534 59.685278,30.4530732 59.685274,30.4530931 59.6852723,30.4531124 59.685272,30.4531329 59.6852751,30.4531443 59.685278,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530111 59.6853217,30.4530106 59.6853114)))', 'relation', 12922491, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530012 59.685359,30.4529724 59.685378,30.4529542 59.6853912,30.4529312 59.685409,30.4529136 59.685403)))', 'relation', 12935641, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527618 59.6854305,30.4527687 59.6854078,30.4527852 59.6854026,30.4528654 59.6854091,30.4528755 59.6854172,30.4528681 59.6854402,30.4528506 59.685445,30.4527747 59.6854387,30.4527618 59.6854305)))', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524557 59.6852538,30.4525351 59.6852597,30.4525442 59.6852666,30.4525328 59.6853069,30.4525201 59.6853123,30.4524969 59.6852906,30.4524775 59.6852724,30.4524557 59.6852538)))', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523226 59.6851969,30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969)))', 'way', 961717596, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522795 59.6852157,30.4522803 59.6851945,30.4523081 59.6852118,30.4523362 59.6852293,30.4523649 59.6852475,30.4523853 59.6852614,30.4524056 59.685276,30.4524322 59.6852976,30.4524465 59.6853116,30.4524653 59.6853309,30.4524785 59.6853465,30.4524909 59.685362,30.4525002 59.6853776,30.4525091 59.6853943,30.4525171 59.6854097,30.4525231 59.6854242,30.4525257 59.6854303,30.4525224 59.6854348,30.4525097 59.6854362,30.452501 59.6854325,30.4524982 59.6854272,30.4524918 59.6854125,30.4524839 59.6853973,30.4524751 59.6853808,30.452466 59.6853657,30.452454 59.6853507,30.4524411 59.6853354,30.4524225 59.6853163,30.4524087 59.6853027,30.4523827 59.6852816,30.4523628 59.6852673,30.4523427 59.6852536,30.4523143 59.6852356,30.4522795 59.6852157)))', 'way', 961717597, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525975 59.6854176,30.4526042 59.6853942,30.4526196 59.6853891,30.4527003 59.6853955,30.4527112 59.6854034,30.4527032 59.6854269,30.4526842 59.6854313,30.4526076 59.685425,30.4525975 59.6854176)))', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527849 59.685488,30.4527911 59.6854671,30.4528702 59.6854731,30.4528639 59.685494,30.4527849 59.685488)))', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525642 59.6854713,30.4525705 59.6854504,30.4526495 59.6854564,30.4526433 59.6854773,30.4525642 59.6854713)))', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529138 59.6853368,30.4529263 59.6852951,30.4529427 59.6852903,30.4529866 59.6852936,30.4529963 59.6853005,30.4529853 59.6853413,30.4529678 59.6853472,30.4529235 59.6853445,30.4529138 59.6853368)))', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452933 59.6852753,30.4529444 59.6852374,30.4529582 59.685233,30.4530088 59.6852371,30.4530171 59.6852433,30.453002 59.6852821,30.4529886 59.6852873,30.4529441 59.6852838,30.452933 59.6852753)))', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525595 59.6852465,30.4525709 59.685208,30.4525847 59.6852036,30.4526353 59.6852076,30.452645 59.6852146,30.4526333 59.6852538,30.4526207 59.6852585,30.4525692 59.6852544,30.4525595 59.6852465)))', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452817 59.6852667,30.452831 59.6852267,30.4528493 59.6852281,30.452851 59.685224,30.4529216 59.6852291,30.4529319 59.6852358,30.45292 59.6852751,30.4529066 59.6852809,30.4528288 59.6852748,30.452817 59.6852667)))', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527946 59.6853272,30.4528087 59.6852864,30.4528247 59.6852816,30.4529042 59.6852874,30.4529154 59.6852941,30.4529031 59.6853359,30.4528878 59.6853416,30.4528053 59.6853349,30.4527946 59.6853272)))', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527745 59.6853889,30.4527899 59.6853454,30.4528052 59.6853419,30.4528845 59.6853477,30.4528953 59.6853552,30.4528839 59.6853982,30.4528677 59.6854032,30.4527865 59.6853969,30.4527745 59.6853889)))', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536,30.4533349 59.6850974)))', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437,30.4535137 59.6851734,30.4534909 59.6851715)))', 'relation', 12925809, '{\"crop\": \"grape\", \"genus\": \"Vitis\", \"taxon\": \"Vitis amurensis\", \"landuse\": \"vineyard\", \"genus:ru\": \"Виноград\", \"taxon:ru\": \"Виноград амурский\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532761 59.6852013,30.4533083 59.6851038,30.4533211 59.6851024,30.4533941 59.6851559,30.453378 59.6851586,30.4533606 59.6851647,30.4533458 59.6851715,30.4533338 59.6851796,30.4533257 59.6851898,30.453319 59.6851999,30.4533137 59.6852128,30.4532761 59.6852013)))', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530768 59.6850789,30.4530825 59.6850727,30.45327 59.6850856,30.4532721 59.6850914,30.4531813 59.685123,30.4531731 59.6851201,30.4531599 59.6851179,30.4531475 59.6851179,30.4531357 59.6851196,30.4530768 59.6850789)))', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728)))', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531381 59.685138,30.4531404 59.6851346,30.4531455 59.6851322,30.4531523 59.6851313,30.4531591 59.685132,30.4531645 59.6851343,30.4531672 59.6851376,30.4531665 59.6851411,30.4531627 59.6851441,30.4531566 59.6851458,30.4531496 59.6851459,30.4531433 59.6851444,30.4531391 59.6851415,30.4531381 59.685138)))', 'way', 962062995, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531836 59.6851532,30.45319 59.6851488,30.4531936 59.6851444,30.453195 59.6851401,30.4531946 59.6851353,30.4531914 59.68513,30.4532804 59.6850981,30.4532923 59.6851023,30.4532587 59.6851977,30.45325 59.6851972,30.4531836 59.6851532)))', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)))', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145,30.4528382 59.6851861)))', 'way', 962062998, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077,30.4528577 59.6851769)))', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)))', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529338 59.6849691,30.4529452 59.6849315,30.4530566 59.6849397,30.4530583 59.6849454,30.4529465 59.6849826,30.4529492 59.6849698,30.4529338 59.6849691)))', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529465 59.6849918,30.4530662 59.6849507,30.4530757 59.684955,30.4530456 59.6850508,30.4530344 59.685052,30.4529465 59.6849918)))', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529083 59.6850544,30.4529184 59.6850114,30.4529378 59.6850121,30.4529398 59.6850009,30.4530221 59.685056,30.4530153 59.6850613,30.4529083 59.6850544)))', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528875 59.6851184,30.4529043 59.6850625,30.4530125 59.6850679,30.4530138 59.6850731,30.4528875 59.6851184)))', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739)))', 'way', 962382766, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528885 59.6851275,30.4530206 59.6850798,30.4530311 59.6850841,30.4530072 59.6851719,30.4529896 59.6851748,30.4528885 59.6851275)))', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533227 59.6850682,30.4533546 59.6849733,30.4533655 59.6849715,30.4534612 59.68503,30.4533332 59.6850719,30.4533227 59.6850682)))', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533411 59.685078,30.4534619 59.6850382,30.4534444 59.6850899,30.4533437 59.685083,30.4533411 59.685078)))', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233)))', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005)))', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532116 59.6849902,30.4532258 59.6849527,30.4533191 59.6849588,30.4533219 59.6849634,30.4532298 59.6849953,30.4532207 59.684992,30.4532116 59.6849902)))', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)))', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530763 59.6850024,30.453091 59.6849565,30.4531032 59.6849548,30.4531695 59.6849976,30.4531647 59.6850018,30.4531619 59.6850065,30.4530763 59.6850024)))', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547,30.4530603 59.6850515)))', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530791 59.6850599,30.4531749 59.6850252,30.4531799 59.6850271,30.4531863 59.6850287,30.4531735 59.6850722,30.453083 59.685065,30.4530791 59.6850599)))', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531903 59.6850727,30.453201 59.6850303,30.453211 59.6850297,30.4532223 59.6850274,30.4532816 59.6850715,30.4532727 59.6850781,30.4531903 59.6850727)))', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531253 59.6850083,30.4531279 59.6850008,30.4531334 59.6849938,30.4531415 59.6849874,30.4531519 59.6849819,30.4531642 59.6849776,30.4531779 59.6849745,30.4531926 59.6849729,30.4532076 59.6849728,30.4532224 59.6849741,30.4532363 59.6849768,30.453249 59.6849809,30.4532598 59.6849862,30.4532684 59.6849924,30.4532744 59.6849993,30.4532776 59.6850067,30.4532779 59.6850143,30.4532753 59.6850217,30.4532699 59.6850288,30.4532618 59.6850352,30.4532514 59.6850406,30.4532391 59.685045,30.4532253 59.685048,30.4532107 59.6850496,30.4531957 59.6850498,30.4531809 59.6850485,30.4531669 59.6850457,30.4531543 59.6850416,30.4531434 59.6850364,30.4531349 59.6850302,30.4531288 59.6850232,30.4531256 59.6850158,30.4531253 59.6850083)))', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903)))', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532247 59.6848893,30.453227 59.684886,30.4532321 59.6848835,30.4532389 59.6848826,30.4532457 59.6848833,30.4532511 59.6848856,30.4532538 59.6848889,30.4532531 59.6848924,30.4532493 59.6848954,30.4532432 59.6848971,30.4532362 59.6848972,30.4532299 59.6848957,30.4532257 59.6848928,30.4532247 59.6848893)))', 'way', 962678726, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530998 59.6849248,30.4531253 59.6848349,30.4531384 59.6848341,30.4532098 59.6848776,30.4532043 59.6848829,30.4532023 59.6848877,30.4532029 59.6848932,30.4532056 59.6848974,30.4531105 59.684928,30.4530998 59.6849248)))', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529683 59.6848711,30.4531034 59.6848301,30.4531127 59.6848333,30.4530868 59.6849239,30.4530724 59.6849262,30.4529683 59.6848711)))', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529482 59.6849246,30.452961 59.6848772,30.4530633 59.6849302,30.4530589 59.6849341,30.4529482 59.6849246)))', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531185 59.6849335,30.4532133 59.6849034,30.4532243 59.684907,30.4532339 59.6849085,30.4532455 59.6849087,30.4532581 59.6849071,30.4533269 59.6849477,30.4533222 59.6849516,30.4531212 59.684939,30.4531185 59.6849335)))', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452977 59.6848046,30.4529797 59.6847958,30.453536 59.6848401,30.4535329 59.6848493,30.452977 59.6848046)))', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)))', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565,30.4533809 59.6849511)))', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533623 59.6849431,30.4533921 59.6848545,30.4534038 59.6848537,30.4534994 59.6849065,30.4533739 59.6849464,30.4533623 59.6849431)))', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)))', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529663 59.6848632,30.4529831 59.6848107,30.4530928 59.6848201,30.4530962 59.6848253,30.4529663 59.6848632)))', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531503 59.6848308,30.453158 59.6848262,30.4533614 59.6848416,30.4533642 59.6848467,30.4532706 59.684876,30.4532619 59.6848729,30.4532504 59.6848704,30.4532379 59.6848698,30.4532263 59.6848712,30.4532195 59.6848732,30.4531503 59.6848308)))', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452631 59.6847454,30.4526341 59.6847357,30.4528676 59.6847547,30.4528645 59.6847644,30.452631 59.6847454)))', 'way', 962735612, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530149 59.6847769,30.4530176 59.6847681,30.4535589 59.6848104,30.4535559 59.6848195,30.4530149 59.6847769)))', 'way', 962735613, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6847573,30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573)))', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523152 59.6851448,30.4526116 59.6847664,30.4528877 59.684789,30.4528309 59.6849691,30.4528148 59.6849678,30.4528061 59.6849952,30.4528221 59.6849965,30.45277 59.6851675,30.4527658 59.68518,30.4523152 59.6851448)))', 'relation', 12933782, '{\"ref\": \"5\", \"name\": \"Кенконс\", \"genus\": \"Tilia\", \"name:en\": \"The Quincunx\", \"natural\": \"wood\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526128 59.684675,30.4526137 59.6846701,30.4526205 59.6846666,30.4526302 59.6846662,30.4526381 59.684669,30.4526406 59.6846738,30.4526365 59.6846782,30.4526277 59.6846803,30.4526184 59.684679,30.4526128 59.684675)))', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526042 59.6846709,30.4526082 59.6846655,30.452617 59.6846635,30.4528469 59.6846817,30.452843 59.684694,30.4528376 59.6847122,30.4526498 59.6846973,30.4526123 59.6846817,30.4526042 59.6846709)))', 'relation', 12933783, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530629 59.6847308,30.4530706 59.6847131,30.4530752 59.684699,30.4535863 59.6847456,30.4535811 59.6847595,30.4535752 59.6847748,30.4530629 59.6847308)))', 'relation', 12933784, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4534977 59.6852035,30.4534967 59.6852111,30.453492 59.6852191,30.4534813 59.6852261,30.4534692 59.6852309,30.4534524 59.6852342,30.453435 59.6852355,30.4534193 59.6852337,30.4534045 59.6852307,30.4533914 59.6852248,30.4533831 59.6852182,30.4533763 59.68521,30.4533752 59.6852006)))', 'relation', 12935640, '{\"height\": \"5.5\", \"roof:shape\": \"pyramidal\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"0.5\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526773 59.6854805,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.4527511 59.6854859,30.4526773 59.6854805)))', 'relation', 12987950, '{\"height\": \"1\", \"roof:shape\": \"skillion\", \"roof:colour\": \"grey\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"roof:direction\": \"170\", \"building:colour\": \"#E4C78F\", \"roof:orientation\": \"along\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4526773 59.6854805,30.4527511 59.6854859,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528709 59.6855164,30.4527091 59.6855042,30.4525787 59.6854944)))', 'relation', 12935639, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4522474 59.6851858,30.4522167 59.6853009,30.4522119 59.6853269,30.4521905 59.6853763,30.4521596 59.6854203,30.4521293 59.6854701,30.4520946 59.6855262,30.4520624 59.6855804,30.4520524 59.6856064,30.452047 59.6856386,30.452047 59.6856666,30.4520551 59.685713,30.4520778 59.685798,30.4520997 59.6858613,30.4521127 59.6859046,30.4521047 59.6859432,30.4520825 59.6859825,30.4520478 59.686026,30.4520492 59.6860479,30.4520658 59.6860755,30.4520819 59.6860924,30.4521387 59.6861383,30.4521581 59.6861556,30.4521822 59.6861782,30.45222 59.6862149,30.4522535 59.6862461,30.4522676 59.6862668,30.4522828 59.6862897,30.4522911 59.6863104,30.4522992 59.6863312,30.4523018 59.6863618,30.4522989 59.6863961,30.4522911 59.6864255,30.452286 59.6864496,30.4522787 59.6864747,30.4522743 59.6864925,30.452274 59.6865148,30.4522776 59.6865312,30.4522888 59.6865538,30.4523045 59.686573,30.4523226 59.6865862,30.4523413 59.6865954,30.4523836 59.686613,30.4524214 59.6866244,30.4524614 59.686634,30.4524912 59.6866392,30.4525264 59.6866438,30.4525641 59.6866457,30.4526585 59.6866455,30.4527524 59.6866414,30.4528825 59.6866353,30.4530173 59.6866255,30.4531259 59.6866181,30.4531936 59.6866133,30.453271 59.6866114,30.4533083 59.686614,30.4534028 59.6866228,30.4535229 59.6866363,30.4536201 59.6866455,30.453691 59.6866508,30.4536976 59.6866508,30.4539823 59.6866673,30.4539778 59.6866919,30.4544217 59.6867427,30.4544227 59.6867377,30.4544646 59.686742,30.4544638 59.6867472,30.4545508 59.6867576,30.4545534 59.6867525,30.4545963 59.6867573,30.4546214 59.6867604,30.4546788 59.6867553,30.4548168 59.686752,30.4551163 59.6867835,30.4552388 59.6868093,30.4553945 59.6868602,30.455491 59.6869022,30.4555769 59.68694,30.4556466 59.6869672,30.4557807 59.6870023,30.4558987 59.6870186,30.4559816 59.68702,30.4560875 59.6870601,30.4561508 59.6871091,30.4561831 59.6871675,30.456183 59.687235,30.4561616 59.6872894,30.4561159 59.6873352,30.4560824 59.6873697,30.4560436 59.6874139,30.4560113 59.687453,30.4559765 59.6875127,30.4559804 59.6875356,30.4559953 59.6875601,30.4560395 59.6875816,30.4560838 59.6875938,30.4561467 59.6876019,30.4561991 59.6876021,30.4563573 59.6875979,30.4565289 59.6875961,30.4566782 59.6875933,30.4567611 59.687592,30.4568899 59.687586,30.4570005 59.6875828,30.4570995 59.6875755,30.4572099 59.6875697,30.4573214 59.6875781,30.4574243 59.6875895,30.4575564 59.6876086,30.4576489 59.6876236,30.4577906 59.6876357,30.4578929 59.687656,30.4579737 59.6876911,30.4580413 59.6877282,30.4581225 59.6877678,30.4581817 59.6878027,30.4582341 59.6878291,30.4583152 59.6878863,30.4583478 59.6879193,30.4583877 59.6879673,30.458411 59.6880122,30.4584387 59.6880452,30.4584657 59.6880811,30.4585427 59.6881373,30.4585748 59.6881735,30.4586375 59.6882236,30.4586938 59.6882576,30.4587833 59.6883125,30.45884 59.6883434,30.4588959 59.6883741,30.4589723 59.6884163,30.4590175 59.6884495,30.4590717 59.6884887,30.4591366 59.6885238,30.4591908 59.6885653,30.4592104 59.6886013,30.4592312 59.6886474,30.4592494 59.6886943,30.4592859 59.6887303,30.4593172 59.688773,30.4593556 59.6888131,30.459429 59.6888677,30.459467 59.6889042,30.4594979 59.688929,30.4595172 59.6889694,30.4595266 59.6890044,30.4595285 59.689042,30.4595248 59.6890919,30.4595255 59.6891719,30.4595317 59.6892178,30.4595442 59.6893129,30.4595387 59.689363,30.4595118 59.6894235,30.4594761 59.689469,30.4594014 59.6895068,30.4593069 59.6895588,30.4592476 59.6895966,30.4591945 59.6896312,30.4591511 59.6896562,30.4591092 59.6896944,30.4590843 59.6897378,30.4590826 59.689771,30.4590853 59.6898069,30.4591078 59.6898435,30.4592007 59.6898882,30.4592339 59.6899293,30.4592628 59.6899874,30.4592762 59.6900429,30.45928 59.6901025,30.4592809 59.6901575,30.4592798 59.6902243,30.4593042 59.6902777,30.4593662 59.6903178,30.4594544 59.6903409,30.4595249 59.6903674,30.4595807 59.6903944,30.4596268 59.6904316,30.4596583 59.6904756,30.4596087 59.690551,30.4596006 59.6905905,30.4595977 59.6906403,30.4595904 59.6906903,30.4595826 59.6907418,30.4595821 59.6908019,30.459583 59.6908375,30.459529 59.6908703,30.4594074 59.6909353,30.4592831 59.6909939,30.459213 59.6910431,30.4591817 59.691066,30.4591361 59.6911201,30.4591012 59.6911675,30.4591012 59.691223,30.4591406 59.6912486,30.4592295 59.6912875,30.4592895 59.6913173,30.4593728 59.6913444,30.4594455 59.6913593,30.459517 59.6913682,30.4596037 59.6913935,30.4596491 59.6914211,30.4596908 59.6914522,30.4597319 59.6914924,30.4597559 59.6915361,30.4597745 59.6915821,30.459787 59.6916313,30.4597852 59.6916643,30.4597718 59.6917238,30.4597396 59.6917861,30.4596859 59.6918429,30.4596685 59.6918693,30.4596383 59.6919054,30.4596009 59.6919405,30.4595315 59.6919991,30.4594652 59.6920502,30.4594082 59.6920946,30.4593773 59.6921151,30.4593545 59.6921348,30.4593366 59.6921529,30.4593399 59.6921734,30.4593659 59.6921939,30.4596045 59.6923272,30.4596496 59.6923362,30.4596901 59.6923377,30.4597398 59.6923315,30.4597933 59.6923156,30.4598526 59.6922792,30.4599141 59.692234,30.4600168 59.6921771,30.4600862 59.6921317,30.4601606 59.6921103,30.4602526 59.6920827,30.460323 59.6920633,30.4603814 59.6920333,30.4604812 59.6919715,30.4605362 59.6919506,30.4606073 59.6919499,30.4606743 59.6919675,30.4607467 59.6920081,30.4608017 59.6920284,30.4608728 59.6920473,30.4609935 59.6920595,30.4610726 59.692067,30.4611517 59.6920866,30.4612403 59.6921299,30.4612939 59.6921759,30.4613569 59.6922104,30.4614227 59.6922341,30.4614964 59.6922659,30.4615568 59.6923059,30.4616211 59.6923729,30.4616748 59.6924466,30.4617579 59.6925197,30.4618368 59.6925614,30.461948 59.6926074,30.4620442 59.6926525,30.4621643 59.6927115,30.4622732 59.6927583,30.4623906 59.6927971,30.4625398 59.6928238,30.4626554 59.6928355,30.4627278 59.6928346,30.4627807 59.6928331,30.4629009 59.6928193,30.4629797 59.6928093,30.4630314 59.6928086,30.4630815 59.6928162,30.4631241 59.6928309,30.4631433 59.692849,30.4631354 59.6928782,30.4630918 59.6929178,30.4629933 59.692982,30.4628509 59.6930395,30.4627989 59.693076,30.4627775 59.6931068,30.4627715 59.6931374,30.4627782 59.6931678,30.4628 59.6931938,30.462816 59.6932161,30.4628201 59.6932352,30.4628276 59.6932642,30.4628055 59.6932947,30.462749 59.6933555,30.4627356 59.6934076,30.4627544 59.6934638,30.4627866 59.6935491,30.4628348 59.6936025,30.4628814 59.6936516,30.4629464 59.6936976,30.4630181 59.6937555,30.4631033 59.6938351,30.463194 59.693908,30.4632997 59.6939707,30.4633997 59.6940315,30.4634563 59.6940722,30.4634978 59.6941112,30.4635448 59.6941433,30.4635995 59.6941633,30.4636618 59.6941785,30.4637065 59.6941778,30.4637604 59.694169,30.4638165 59.6941725,30.4638941 59.6941882,30.463945 59.6941973,30.4639826 59.6942136,30.4640155 59.6942304,30.4640341 59.6942422,30.4640539 59.694259,30.4640781 59.6942943,30.4641097 59.6943536,30.4641054 59.6943849,30.4640955 59.6944214,30.4640677 59.6944543,30.4640278 59.694509,30.4639684 59.6945921,30.4639761 59.694632,30.4640196 59.6946691,30.4640928 59.6947215,30.4641504 59.6947644,30.4642414 59.694848,30.4643013 59.6949614,30.4643265 59.6950347,30.4643629 59.6950927,30.464383 59.6951471,30.4644155 59.6951914,30.4644503 59.6952616,30.464467 59.6953187,30.4644779 59.6953885,30.4644493 59.6954307,30.4644137 59.6954645,30.4643477 59.6955048,30.4642827 59.6955528,30.4641331 59.6956106,30.4640324 59.6956546,30.4639589 59.6956973,30.4639054 59.6957548,30.4638826 59.6958068,30.4638917 59.6958626,30.4638959 59.695908,30.4638913 59.6959452,30.4638761 59.6959807,30.4638581 59.6960266,30.4638387 59.6960774,30.4638353 59.6961315,30.4638514 59.6962235,30.4639031 59.6963079,30.4639806 59.6963837,30.4640641 59.696435,30.4641563 59.6964993,30.4642492 59.6965314,30.464353 59.6965624,30.4645112 59.6966079,30.4646909 59.6966431,30.4648519 59.6966796,30.4649082 59.6966992,30.4649645 59.6967256,30.4650316 59.6967635,30.465104 59.6968014,30.4651737 59.6968352,30.4652724 59.696889,30.4653398 59.6969338,30.4653714 59.6969637,30.4653977 59.6970024,30.4654124 59.6970396,30.4654285 59.6970924,30.4654299 59.6971357,30.4654285 59.6971912,30.4654178 59.6972534,30.4654178 59.6973103,30.4654268 59.6973472,30.465443 59.6973849,30.4654739 59.6974306,30.465535 59.6974889,30.4655776 59.6975263,30.4655998 59.6975497,30.4656249 59.6975948,30.4656281 59.6976305,30.4656291 59.6976586,30.465636 59.697698,30.4656478 59.6977439,30.4656559 59.6977839,30.4656639 59.6978247,30.4656741 59.697865,30.4656808 59.6978977,30.4656931 59.6979479,30.4657242 59.6979888,30.4657651 59.6980369,30.4658049 59.6980618,30.4658569 59.6980859,30.4659085 59.6981101,30.4659691 59.6981356,30.4659934 59.6981619,30.4660187 59.6982125,30.4660434 59.6982506,30.4660765 59.6982913,30.46612 59.6983229,30.46618 59.6983645,30.4662324 59.6983954,30.466279 59.6984245,30.4663222 59.6984585,30.4663422 59.6984839,30.4663508 59.6985161,30.466347 59.6985389,30.4663297 59.6985658,30.4662984 59.6986043,30.4662667 59.6986353,30.4662287 59.6986639,30.4662098 59.6986996,30.4662023 59.698738,30.4662177 59.6987814,30.4662476 59.6988217,30.4662941 59.6988595,30.4663218 59.6988897,30.4663703 59.6989336,30.4664066 59.698983,30.4664342 59.6990318,30.46626 59.699006,30.4662245 59.6990009,30.4661986 59.6989985,30.465736 59.6989731,30.465674 59.6989864,30.4656438 59.6989955,30.4656194 59.6990058,30.4655995 59.6990178,30.4655881 59.6990296,30.4655669 59.6990522,30.4655425 59.6990838,30.4655077 59.6991223,30.4654429 59.6991855,30.4653481 59.6992218,30.4652461 59.6992516,30.4651852 59.6992621,30.4651339 59.6992648,30.4650235 59.6992651,30.4649339 59.6992741,30.4648662 59.6992863,30.4647744 59.6993078,30.4647108 59.6993347,30.4646409 59.6993755,30.4645943 59.6994397,30.4645313 59.6994729,30.464447 59.6994976,30.4643342 59.6995189,30.4641272 59.6995513,30.4601 59.6956121,30.4590933 59.6945995,30.4585195 59.6940453,30.4565283 59.6920253,30.4559963 59.6915691,30.455779 59.6913562,30.4555191 59.6911016,30.4536132 59.6892318,30.4533114 59.6893232,30.4532486 59.6892981,30.453085 59.689221,30.4529871 59.689177,30.4528879 59.6891357,30.4528128 59.6891072,30.4524488 59.6889751,30.4524008 59.688958,30.4523038 59.6889045,30.4522723 59.6888961,30.4522552 59.6888858,30.4522361 59.6888724,30.452216 59.68885,30.4521838 59.6888324,30.4521207 59.6887986,30.4520511 59.6887644,30.4518909 59.6886967,30.4517882 59.6886551,30.4516822 59.6886098,30.4515358 59.6885556,30.4514019 59.6885123,30.4513037 59.6884778,30.4512571 59.6884636,30.4512056 59.6884428,30.4511404 59.6884196,30.4510778 59.6883871,30.4510264 59.6883553,30.4509783 59.6883239,30.4508749 59.6882578,30.4508266 59.688226,30.4507678 59.6881981,30.4505943 59.6881208,30.4501869 59.6879433,30.4499736 59.6878632,30.4499334 59.6878503,30.4498881 59.687841,30.4497871 59.6878092,30.4494924 59.6876814,30.4490926 59.6875099,30.4490362 59.6874936,30.4489854 59.6874759,30.4489383 59.6874638,30.448876 59.687449,30.4487626 59.6874338,30.4486346 59.6874221,30.4485214 59.6874142,30.4483648 59.6874032,30.4474691 59.687337,30.4468361 59.6872873,30.4467403 59.6872722,30.446684 59.6872669,30.4463496 59.6872017,30.4463085 59.6871943,30.4462561 59.6871833,30.4462179 59.6871721,30.446187 59.6871613,30.4461557 59.68715,30.4461253 59.6871366,30.4461066 59.6871274,30.4460918 59.6871135,30.4460273 59.6870454,30.4459552 59.6870078,30.4459436 59.6870073,30.4459073 59.6869902,30.4458766 59.6869748,30.445846 59.6869616,30.4458216 59.6869518,30.4457961 59.6869433,30.4457578 59.6869309,30.4457123 59.6869183,30.4456647 59.6869057,30.4455949 59.6868892,30.4455514 59.68688,30.4455232 59.6868726,30.4455129 59.6868665,30.4453868 59.6868434,30.44531 59.6868381,30.4452457 59.6868322,30.44506 59.686812,30.4450028 59.6868076,30.4449557 59.6868041,30.4449237 59.6868029,30.4448943 59.6868019,30.4448734 59.6868039,30.4448512 59.6868054,30.4448212 59.6868026,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017)))', 'relation', 4187886, '{\"ref\": \"II\", \"name\": \"Долина реки Славянки\", \"place\": \"quarter\", \"name:az\": \"Slavyanka çayının vadisi\", \"name:fr\": \"Vallée de la rivière Slavianka\", \"name:hy\": \"Սլավյանկա գետի հովիտ\", \"name:uk\": \"Долина річки Слов''янки\", \"name:zh\": \"谷斯拉维亚卡河\", \"boundary\": \"protected_area\", \"int_name\": \"Vallée de la rivière Slavianka\", \"wikidata\": \"Q121809341\", \"wikipedia\": \"ru:Павловский парк#Долина реки Славянки\", \"description\": \"Район Павловского парка\"}', NULL),\n ('SRID=4326;LINESTRING(30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392)', 'way', 1297781094, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{8289295976,12023732271,12023732270,12023732269,8114975027,12023699867,12023732331,12023732330,12023732337,12023732336}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528788 59.6854915)', 'way', 1093902027, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,1439053668}'),\n ('SRID=4326;LINESTRING(30.4535894 59.6847601,30.4535811 59.6847595)', 'way', 1297781085, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{12023732332,8289295976}'),\n ('SRID=4326;LINESTRING(30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601)', 'way', 1297781086, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{12023732335,12023732334,12023732333,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4519927 59.6856654,30.451993 59.6856352,30.4519974 59.6856085,30.4520057 59.6855861,30.452033 59.685533,30.4520717 59.6854725,30.4521073 59.6854196,30.4521538 59.6853554,30.4521646 59.6853419,30.4521729 59.6853289,30.4521751 59.685321,30.4521778 59.6853033,30.4521768 59.6852884,30.4522278 59.6851794,30.4522474 59.6851858,30.4522695 59.6851929,30.4522692 59.6852184,30.452307 59.6852409,30.4523333 59.6852571,30.4523534 59.6852701,30.4523836 59.685295,30.4524088 59.6853175,30.4524395 59.6853504,30.4524616 59.6853789,30.4524735 59.685401,30.4524845 59.6854195,30.4524943 59.6854502,30.452497 59.6854882,30.452346 59.6854768,30.4523217 59.6855588,30.4522802 59.6855556,30.4522258 59.6855515,30.4522191 59.6855742,30.4522002 59.685638,30.4521808 59.6857036,30.4521745 59.6857248,30.4522289 59.6857289,30.4522705 59.6857319,30.4522477 59.6858088,30.4522804 59.6858113,30.4525803 59.6858339,30.4526091 59.6858361,30.4526832 59.6858416,30.4528205 59.685852,30.4528174 59.6858982,30.4527279 59.6859036,30.4527314 59.6859191,30.4527383 59.6859422,30.4527472 59.6859643,30.4527643 59.6859927,30.4527791 59.6860133,30.4527956 59.6860336,30.4528174 59.6860572,30.4528406 59.6860793,30.4528659 59.6861008,30.4528879 59.6861175,30.4529175 59.6861373,30.4529497 59.6861561,30.4529804 59.6861727,30.4530167 59.6861897,30.4530418 59.6861992,30.4530963 59.6861616,30.4531534 59.686184,30.4531278 59.6862023,30.453137 59.6862056,30.4531608 59.6862141,30.4531704 59.6862175,30.453196 59.6861992,30.4531795 59.686249,30.4531642 59.6862975,30.453138 59.686381,30.4531363 59.6863866,30.4532826 59.6863983,30.4532725 59.6864305,30.4532916 59.686432,30.4532869 59.6864462,30.4532998 59.6864473,30.4533248 59.6864494,30.4533485 59.6864515,30.4533611 59.6864525,30.4533659 59.6864383,30.4534768 59.6864467,30.453575 59.6864544,30.4535812 59.6864636,30.4536188 59.68646,30.4536556 59.6864553,30.4536952 59.6864492,30.4537376 59.6864434,30.4537814 59.6864354,30.4538212 59.6864281,30.453863 59.6864194,30.4538817 59.6864353,30.4539287 59.6864214,30.4539454 59.6864356,30.4539576 59.686432,30.4540057 59.6864176,30.4540172 59.6864141,30.4540005 59.6863999,30.4540399 59.6863883,30.4540219 59.6863729,30.4540549 59.6863624,30.4540887 59.6863495,30.4541297 59.6863344,30.4541407 59.6863296,30.4541607 59.6863411,30.4541696 59.6863371,30.4542 59.6863235,30.4542091 59.6863195,30.4541887 59.6863078,30.4541965 59.6863041,30.4542363 59.6862844,30.4542705 59.6862654,30.4542999 59.6862773,30.4544137 59.6862059,30.4543849 59.6861942,30.4544059 59.686181,30.4544395 59.686154,30.4544728 59.6861239,30.4544964 59.6860973,30.4545494 59.6861117,30.4546053 59.6861282,30.4545922 59.6861427,30.4545784 59.6861572,30.4545449 59.6861862,30.4545138 59.6862131,30.4544576 59.6862495,30.4543906 59.6862854,30.4543294 59.6863147,30.4542746 59.6863415,30.454221 59.6863683,30.454115 59.6864133,30.454039 59.6864407,30.4539464 59.6864693,30.4539252 59.6864763,30.4538233 59.6865047,30.4536724 59.6865094,30.4536724 59.6865223,30.4536503 59.6865223,30.4535973 59.686521,30.4535465 59.6865208,30.4535021 59.6865209,30.4534712 59.6865222,30.4534473 59.6865255,30.453429 59.6865331,30.4534215 59.6865438,30.4534132 59.686574,30.4534136 59.6865866,30.453423 59.6865971,30.4534445 59.6866075,30.4534686 59.686613,30.4534579 59.6866461,30.4534073 59.6866421,30.4533332 59.6866345,30.4532837 59.6866305,30.453254 59.6866292,30.4532071 59.6866305,30.4531615 59.686632,30.4531191 59.6866347,30.4531041 59.6865988,30.4531448 59.6865925,30.4531695 59.6865869,30.4531966 59.6865772,30.4532138 59.6865676,30.4532231 59.6865589,30.453199 59.6865568,30.4531811 59.6865532,30.4531596 59.6865468,30.4531373 59.6865396,30.4531219 59.6865326,30.4530964 59.6865196,30.4530733 59.6865042,30.4530555 59.6864887,30.4530367 59.6864681,30.4530227 59.6864499,30.4530105 59.6864274,30.4530012 59.6864103,30.4529945 59.6863933,30.4529919 59.6863759,30.4529905 59.686347,30.4529907 59.6863231,30.4529911 59.6862911,30.4529891 59.686281,30.4529827 59.6862715,30.4529634 59.6862545,30.4529402 59.6862373,30.4529067 59.6862141,30.4528563 59.6861801,30.4528201 59.6861533,30.4527906 59.6861317,30.4527578 59.6861047,30.452731 59.6860823,30.4527092 59.6860609,30.4526947 59.6860457,30.4526816 59.6860278,30.4526652 59.6860011,30.4526541 59.6859782,30.4526337 59.6859283,30.4526256 59.6859159,30.4526103 59.685908,30.4525905 59.6859034,30.4525603 59.6859009,30.452391 59.6858965,30.4523675 59.6858999,30.4523504 59.685904,30.4523333 59.6859114,30.452312 59.685923,30.4522313 59.6859637,30.4521811 59.6859882,30.452085 59.686032,30.4520765 59.6860386,30.4520753 59.6860476,30.4520797 59.6860577,30.4520264 59.6860652,30.4520201 59.6860504,30.4520162 59.6860346,30.4520143 59.6860207,30.4520168 59.6860051,30.4520203 59.685989,30.4520274 59.6859769,30.4520341 59.6859612,30.4520405 59.6859506,30.452047 59.6859415,30.4520537 59.6859259,30.4520544 59.6859134,30.4520523 59.6858956,30.4520465 59.6858708,30.4520254 59.6858069,30.4519995 59.68571,30.4519927 59.6856654),(30.4521704 59.6857398,30.4521704 59.6857513,30.4521744 59.6857635,30.4521811 59.6857763,30.4521945 59.6857899,30.4522187 59.6858021,30.4522414 59.6858088,30.4522629 59.685735,30.4521731 59.6857289,30.4521704 59.6857398),(30.452226 59.6855475,30.4523159 59.6855543,30.4523387 59.6854798,30.4523212 59.6854826,30.4523011 59.6854866,30.452277 59.6854941,30.4522596 59.6855015,30.4522448 59.6855117,30.4522354 59.6855225,30.4522301 59.6855347,30.452226 59.6855475),(30.4522508 59.6858359,30.4525647 59.6858582,30.4525714 59.6858373,30.4522575 59.6858142,30.4522508 59.6858359),(30.4523249 59.685462,30.4523727 59.6854667,30.4523804 59.6854465,30.4523327 59.6854418,30.4523249 59.685462)))', 'relation', 6636677, '{\"surface\": \"fine_gravel\", \"area:highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533763 59.68521,30.4534979 59.6851951,30.4535038 59.6852069,30.4534995 59.6852209,30.4533878 59.6852355,30.4533818 59.6852214,30.4533763 59.68521)))', 'relation', 12947389, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523253 59.6851768,30.4523286 59.6851637,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4525881 59.6854311,30.452574 59.6853959,30.4525486 59.6853522,30.4525291 59.6853286,30.4525137 59.6853106,30.452501 59.6852981,30.4524755 59.6852751,30.452455 59.6852592,30.4524366 59.6852453,30.4524178 59.6852321,30.4523994 59.6852201,30.4523706 59.6852014,30.452339 59.6851839,30.4523253 59.6851768)))', 'relation', 5906400, '{\"ref\": \"2\", \"name\": \"Цветочный партер\", \"leisure\": \"garden\", \"name:en\": \"The Flower Parterre\", \"ref:okn\": \"781620399040956\", \"alt_name\": \"Цветники Марии Фёдоровны\", \"wikidata\": \"Q118122045\", \"garden:type\": \"flowerbed\", \"garden:style\": \"french\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.4533268 59.6853074,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532343 59.6853363,30.453156 59.6852825)))', 'relation', 17755883, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4531158 59.6853933,30.4531719 59.6854212,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530216 59.6854636,30.4529242 59.6854401,30.4529045 59.6854337)))', 'relation', 17755885, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4532343 59.6853363,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.453238 59.6853862,30.453207 59.6854026,30.4531719 59.6854212,30.4531158 59.6853933,30.4530217 59.6853466)))', 'relation', 17755884, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527677 59.6846399,30.4527719 59.6846286,30.4527799 59.6846212,30.4527933 59.6846157,30.4528134 59.6846137,30.4528403 59.6846144,30.4528537 59.6846178,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399)))', 'relation', 12932608, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 1721132, '{\"ref\": \"3\", \"name\": \"Павильон Трёх граций\", \"note\": \"Геометрические теги крыши павильона размещены отдельно\", \"name:es\": \"Pabellón de las tres gracias\", \"name:fr\": \"Pavillon des Trois Grâces\", \"name:pt\": \"Pavilhão das Três Graças\", \"name:zh\": \"三美人亭\", \"ref:okn\": \"781610399040356\", \"tourism\": \"attraction\", \"building\": \"yes\", \"heritage\": \"2\", \"historic\": \"yes\", \"wikidata\": \"Q112716431\", \"addr:city\": \"Павловск\", \"architect\": \"Чарльз Камерон\", \"start_date\": \"1800\", \"addr:street\": \"Садовая улица\", \"architect:en\": \"Charles Cameron\", \"addr:housenumber\": \"20 литЧ\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6514/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12202573, '{\"height\": \"7\", \"min_height\": \"5.5\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12497925, '{\"height\": \"1.5\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525466 59.6846232,30.4525568 59.6846156,30.4525613 59.6846073,30.4525618 59.6845988,30.4525615 59.68459,30.4525675 59.6845745,30.452571 59.6845656,30.452566 59.6845558,30.4525539 59.6845467,30.4526659 59.6845694,30.4527826 59.6845897,30.4528946 59.6846069,30.4530012 59.6846212,30.4535732 59.6846878,30.4535916 59.6846905,30.453606 59.6846946,30.4536164 59.684701,30.4536208 59.6847085,30.4536214 59.684718,30.4536181 59.6847274,30.4536067 59.6847614,30.4535894 59.6847601,30.4535811 59.6847595,30.4535863 59.6847456,30.4535923 59.6847296,30.4535925 59.6847224,30.4535886 59.6847164,30.4535807 59.6847121,30.4535698 59.6847103,30.4535555 59.6847085,30.4530859 59.6846667,30.4530887 59.6846582,30.4530942 59.6846416,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399,30.4525841 59.6846239,30.4525626 59.6846222,30.4525466 59.6846232)))', 'relation', 12131779, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452047 59.6856386,30.4520524 59.6856064,30.4520624 59.6855804,30.4520946 59.6855262,30.4521293 59.6854701,30.4521596 59.6854203,30.4521905 59.6853763,30.4522119 59.6853269,30.4522167 59.6853009,30.4522474 59.6851858,30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4601554 59.6854805,30.4601767 59.6856005,30.4601793 59.6857568,30.4601468 59.6858374,30.4600081 59.6860973,30.459853 59.68614,30.459704 59.6863415,30.4596832 59.6864086,30.4596712 59.686482,30.4596638 59.6865545,30.459666 59.6866369,30.4596929 59.6867933,30.4597047 59.6868418,30.4597409 59.6869365,30.4598403 59.6871335,30.4599111 59.6872432,30.4599552 59.6873116,30.4600453 59.6874469,30.460134 59.687572,30.4600858 59.6875668,30.4600427 59.6875593,30.4599863 59.6875559,30.4598958 59.6875545,30.4597744 59.6875619,30.4597289 59.6875627,30.4596698 59.687583,30.4596323 59.6876026,30.4595974 59.6876371,30.4595625 59.6876658,30.4595236 59.6876852,30.459478 59.6876967,30.459407 59.6877062,30.4593453 59.6877028,30.4592849 59.6876838,30.4592367 59.6876553,30.4591509 59.6875883,30.4590905 59.6875599,30.4590355 59.6875424,30.4589524 59.6875261,30.4588343 59.6875105,30.4586868 59.6875038,30.4585474 59.6875038,30.4584333 59.6875086,30.4583274 59.6875126,30.4582348 59.6875193,30.4581437 59.6875301,30.4580095 59.6875505,30.4579371 59.6875654,30.4579009 59.6875782,30.4578312 59.6876019,30.4577386 59.6876249,30.4576489 59.6876236,30.4575564 59.6876086,30.4574243 59.6875895,30.4573214 59.6875781,30.4572099 59.6875697,30.4570995 59.6875755,30.4570005 59.6875828,30.4568899 59.687586,30.4567611 59.687592,30.4566782 59.6875933,30.4565289 59.6875961,30.4563573 59.6875979,30.4561991 59.6876021,30.4561467 59.6876019,30.4560838 59.6875938,30.4560395 59.6875816,30.4559953 59.6875601,30.4559804 59.6875356,30.4559765 59.6875127,30.4560113 59.687453,30.4560436 59.6874139,30.4560824 59.6873697,30.4561159 59.6873352,30.4561616 59.6872894,30.456183 59.687235,30.4561831 59.6871675,30.4561508 59.6871091,30.4560875 59.6870601,30.4559816 59.68702,30.4558987 59.6870186,30.4557807 59.6870023,30.4556466 59.6869672,30.4555769 59.68694,30.455491 59.6869022,30.4553945 59.6868602,30.4552388 59.6868093,30.4551163 59.6867835,30.4548168 59.686752,30.4546788 59.6867553,30.4546214 59.6867604,30.4545963 59.6867573,30.4545534 59.6867525,30.4545508 59.6867576,30.4544638 59.6867472,30.4544646 59.686742,30.4544227 59.6867377,30.4544217 59.6867427,30.4539778 59.6866919,30.4539823 59.6866673,30.4536976 59.6866508,30.453691 59.6866508,30.4536201 59.6866455,30.4535229 59.6866363,30.4534028 59.6866228,30.4533083 59.686614,30.453271 59.6866114,30.4531936 59.6866133,30.4531259 59.6866181,30.4530173 59.6866255,30.4528825 59.6866353,30.4527524 59.6866414,30.4526585 59.6866455,30.4525641 59.6866457,30.4525264 59.6866438,30.4524912 59.6866392,30.4524614 59.686634,30.4524214 59.6866244,30.4523836 59.686613,30.4523413 59.6865954,30.4523226 59.6865862,30.4523045 59.686573,30.4522888 59.6865538,30.4522776 59.6865312,30.452274 59.6865148,30.4522743 59.6864925,30.4522787 59.6864747,30.452286 59.6864496,30.4522911 59.6864255,30.4522989 59.6863961,30.4523018 59.6863618,30.4522992 59.6863312,30.4522911 59.6863104,30.4522828 59.6862897,30.4522676 59.6862668,30.4522535 59.6862461,30.45222 59.6862149,30.4521822 59.6861782,30.4521581 59.6861556,30.4521387 59.6861383,30.4520819 59.6860924,30.4520658 59.6860755,30.4520492 59.6860479,30.4520478 59.686026,30.4520825 59.6859825,30.4521047 59.6859432,30.4521127 59.6859046,30.4520997 59.6858613,30.4520778 59.685798,30.4520551 59.685713,30.452047 59.6856666,30.452047 59.6856386)))', 'relation', 4194432, '{\"ref\": \"III\", \"name\": \"Придворцовый район\", \"place\": \"quarter\", \"name:fr\": \"Secteur central\", \"website\": \"https://pavlovskmuseum.ru/about/park/layout/36/\", \"boundary\": \"protected_area\", \"wikidata\": \"Q121809724\", \"wikipedia\": \"ru:Павловский парк#Центральный (Придворцовый) район\", \"description\": \"Район исторического Павловского парка\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4366882 59.6889898,30.4370373 59.6889668,30.4370736 59.6889644,30.4371138 59.6889367,30.4374634 59.6889115,30.4375002 59.6889088,30.4375427 59.6889059,30.4380171 59.6888738,30.438182 59.6888616,30.4383254 59.6888487,30.4384589 59.6888338,30.4385849 59.6888182,30.4388652 59.6887778,30.4389016 59.6887728,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346802 59.6935317,30.4346817 59.6935045,30.4346729 59.6934955,30.4346017 59.6934439,30.4344133 59.6933106,30.4344523 59.6932882,30.4344971 59.6932601,30.4345233 59.6932407,30.4345424 59.6932254,30.4345634 59.6932027,30.4345863 59.693171,30.4345979 59.6931498,30.4346066 59.6931248,30.4346128 59.6930889,30.434612 59.693054,30.4346077 59.6930245,30.4346019 59.6930124,30.4345969 59.693,30.4345757 59.6929702,30.4345621 59.6929518,30.434542 59.6929299,30.4345091 59.6928998,30.4344756 59.6928775,30.4344413 59.6928581,30.4343883 59.6928337,30.4343603 59.6928224,30.4343198 59.692809,30.4342705 59.6927958,30.4342429 59.6927909,30.4341796 59.6927811,30.4341217 59.6927737,30.4340777 59.6927708,30.4340075 59.6927673,30.4339293 59.6927692,30.4338474 59.6927768,30.433767 59.6927902,30.4337225 59.6928016,30.4335043 59.6926756,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)))', 'relation', 1721131, '{\"name\": \"Павловский парк\", \"note\": \"https://wiki.openstreetmap.org/wiki/RU:Павловск/Павловский_парк\", \"leisure\": \"park\", \"name:be\": \"Паўлаўскі парк\", \"name:bg\": \"Павловски парк\", \"name:ca\": \"Parc Pàvlovsk\", \"name:en\": \"Pavlovsk Park\", \"name:es\": \"Parque Pávlovsk\", \"name:fr\": \"Parc de Pavlovsk\", \"name:he\": \"פארק פבלובסק\", \"name:hy\": \"Պավլովսկ պարկը\", \"name:nl\": \"Pavlovskpark\", \"name:ru\": \"Павловский парк\", \"name:zh\": \"巴甫洛夫斯克公园\", \"ref:okn\": \"781720399040986\", \"website\": \"https://pavlovskmuseum.ru/about/park/\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"historic\": \"yes\", \"int_name\": \"Parc de Pavlovsk\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q2506336\", \"wikipedia\": \"ru:Павловский парк\", \"fee:amount\": \"100\", \"start_date\": \"1777\", \"opening_hours\": \"07:00-19:00\", \"protect_class\": \"22\", \"operator:phone\": \"+7 (812) 452-15-36\", \"fee:conditional\": \"yes @ 9:00-17:00\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6407/\", \"operator:tourism\": \"museum\", \"operator:website\": \"http://www.pavlovskmuseum.ru\", \"protection_title\": \"Государственный музей-заповедник\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4368674 59.6896812,30.4373083 59.6896203,30.4383622 59.6894747,30.4383925 59.6894699,30.4387768 59.6894091,30.4389533 59.6893793,30.4395631 59.6892765,30.4395975 59.6896826,30.43963 59.6897841,30.4411104 59.6895883,30.4411759 59.6892872,30.4412059 59.6891298,30.4412229 59.6890714,30.4402547 59.6891154,30.4398722 59.6891396,30.4395358 59.6891608,30.4394903 59.6891472,30.4392717 59.6889536,30.4391469 59.6889286,30.4391174 59.6889211,30.4390705 59.6889062,30.4390316 59.6888852,30.4390007 59.6888636,30.4389819 59.6888446,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346174 59.6935301,30.4346147 59.6935224,30.4346086 59.6935129,30.4345932 59.6935014,30.4344744 59.6934215,30.4344752 59.6934118,30.4344684 59.6934032,30.4343048 59.693294,30.4335858 59.6928433,30.4335672 59.6928378,30.4335491 59.692831,30.4335344 59.6928246,30.4335169 59.6928158,30.4334908 59.6928019,30.4334747 59.6927935,30.4334378 59.6927735,30.4334063 59.6927569,30.4333486 59.6927221,30.4332896 59.6926848,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)),((30.4459925 59.6840515,30.4465029 59.6838166,30.4469327 59.6836721,30.4472874 59.6834226,30.4479163 59.6832392,30.4483415 59.6832476,30.4484247 59.6832514,30.4484595 59.6832547,30.4484884 59.6832585,30.4485108 59.6832641,30.4489705 59.6834352,30.4489993 59.6834563,30.4490069 59.6834636,30.4492468 59.6836887,30.4491255 59.6840718,30.4490543 59.6840686,30.4483928 59.684035,30.4478277 59.6840459,30.4469355 59.6841321,30.4462744 59.6842068,30.4459925 59.6840515)))', 'relation', 17990902, '{\"name\": \"Государственный музей-заповедник «Павловск»\", \"note\": \"граница имущественного комплекса организации, не граница парка\", \"boundary\": \"protected_area\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q405637\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601,30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698)))', 'relation', 17786995, '{\"landuse\": \"construction\", \"start_date\": \"06.204\", \"description\": \"реставрация Павильона Трех граций\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522477 59.6858088,30.4522705 59.6857319,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4527091 59.6855042,30.4528709 59.6855164,30.4529043 59.6855189,30.4529835 59.685525,30.4530542 59.6855302,30.4530286 59.6856166,30.4529796 59.6857822,30.4529559 59.6858622,30.4528897 59.6858572,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088)))', 'relation', 6636658, '{\"height\": \"19.650\", \"architect\": \"Чарльз Камерон\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2.45\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"source:building:part\": \"http://pancer.ru/images/project/012/2.jpg\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4530216 59.6854636,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.453064 59.6855044,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 6636659, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528709 59.6855164,30.4528746 59.6855048,30.4528788 59.6854915,30.4529122 59.6854936,30.4529942 59.6854993,30.4529881 59.6855114,30.4529835 59.685525,30.4529043 59.6855189,30.4528709 59.6855164)))', 'relation', 14572596, '{\"height\": \"6.65\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533818 59.6852214,30.453417 59.6852162,30.4534578 59.6852115,30.4535038 59.6852069,30.4535289 59.6853164,30.4535075 59.6853177,30.4534847 59.6853198,30.4534688 59.6853212,30.4534368 59.6853262,30.453436 59.6853248,30.4534146 59.6852887,30.4533878 59.6852355,30.4533818 59.6852214)))', 'relation', 17755881, '{\"height\": \"13\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.453436 59.6853248,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533268 59.6853074,30.4532684 59.6852465)))', 'relation', 17755882, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.4533836 59.6852944,30.4533532 59.6853009,30.4533268 59.6853074,30.4532946 59.6853162,30.4532665 59.6853249,30.4532343 59.6853363,30.4532132 59.6853445,30.4531881 59.6853553,30.453164 59.6853668,30.4531411 59.6853788,30.4531158 59.6853933,30.4530954 59.6854062,30.4530746 59.6854199,30.4530552 59.6854344,30.4530382 59.6854491,30.4530216 59.6854636,30.4530079 59.6854761,30.4530004 59.6854886,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 17904735, '{\"height\": \"10\", \"roof:shape\": \"flat\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.4528469 59.6846817,30.452843 59.684694,30.4529628 59.6847041,30.4530706 59.6847131,30.4530752 59.684699,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4535302 59.6851198,30.4535229 59.6851437,30.4535137 59.6851734,30.4535124 59.6851786,30.4535038 59.6852069,30.4534979 59.6851951,30.4534914 59.6851874,30.4534811 59.6851808,30.4534678 59.6851758,30.4534524 59.6851728,30.453436 59.6851719,30.4534196 59.6851732,30.4534028 59.6851772,30.4533891 59.6851835,30.4533796 59.6851915,30.4533752 59.6852006,30.4533763 59.68521,30.4533818 59.6852214,30.4533524 59.685227,30.4533302 59.6852316,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4528993 59.6854656,30.4528865 59.6854815,30.4528788 59.6854915,30.4528746 59.6855048,30.4527686 59.6854977,30.452777 59.6854654,30.4527565 59.685464,30.4527224 59.6854618,30.4526841 59.6854592,30.4526646 59.6854579,30.4526564 59.6854895,30.4525812 59.6854845,30.4525787 59.6854944,30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858,30.4522278 59.6851794)))', 'relation', 4274530, '{\"fee\": \"yes\", \"ref\": \"IIIа\", \"name\": \"Собственный сад\", \"leisure\": \"garden\", \"name:fr\": \"Jardin privé\", \"ref:okn\": \"781620399040366\", \"tourism\": \"attraction\", \"alt_name\": \"Собственный садик\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"wikidata\": \"Q118122043\", \"start_date\": \"1803\", \"garden:style\": \"french\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6518/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4521745 59.6857248,30.4521808 59.6857036,30.4522002 59.685638,30.4522191 59.6855742,30.4522258 59.6855515,30.4522802 59.6855556,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533763 59.68521,30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540229 59.6848667,30.4540358 59.6848708,30.454047 59.6848759,30.4540561 59.6848821,30.454063 59.6848889,30.4540674 59.6848962,30.4540691 59.6849039,30.454068 59.6849115,30.4540643 59.6849189,30.454058 59.6849259,30.4540493 59.6849322,30.4540386 59.6849376,30.4540261 59.684942,30.4540122 59.6849452,30.4539975 59.684947,30.4539823 59.6849475,30.4539763 59.6849646,30.453965 59.6849637,30.4539277 59.6849606,30.4538688 59.6849558,30.4538059 59.6849506,30.4537818 59.6849487,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537483 59.6850789,30.4538612 59.6850876,30.4539247 59.6850925,30.4539406 59.6850424,30.4539786 59.6850519,30.4540221 59.685063,30.4540417 59.6850686,30.4540646 59.6850751,30.4541059 59.6850881,30.4541472 59.6851025,30.4541871 59.685118,30.4542254 59.6851343,30.4542622 59.6851516,30.4542942 59.6851377,30.4544115 59.6852076,30.4543838 59.6852203,30.4544141 59.6852392,30.4544426 59.6852588,30.4544691 59.6852791,30.4544972 59.6853031,30.4545225 59.6853279,30.4545451 59.6853534,30.4545829 59.6853462,30.4546442 59.6854282,30.4546081 59.6854351,30.4546263 59.6854611,30.4546407 59.6854917,30.4546513 59.6855211,30.4546577 59.6855509,30.4545667 59.6855569,30.4545695 59.6855677,30.4545502 59.6855689,30.4545521 59.6855762,30.454475 59.6855814,30.454473 59.685574,30.4544524 59.6855754,30.4544496 59.6855646,30.4544349 59.6855656,30.4543687 59.68557,30.4543619 59.6855441,30.4543522 59.6855184,30.4543439 59.6854971,30.4543247 59.685468,30.454307 59.6854434,30.4542866 59.6854194,30.4542636 59.6853959,30.4542381 59.6853732,30.4542062 59.685347,30.4541753 59.6853248,30.4541426 59.6853062,30.4541083 59.6852876,30.4540689 59.6852681,30.4540273 59.6852498,30.4539837 59.6852328,30.4539382 59.685217,30.4538908 59.6852026,30.4538877 59.6852126,30.4539316 59.6852158,30.4539299 59.6852218,30.4539248 59.68524,30.453923 59.6852463,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536921 59.6853643,30.4536766 59.6853631,30.453626 59.6853592,30.4536111 59.6853581,30.4536187 59.6853329,30.4534688 59.6853212,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.4532824 59.685393,30.4532679 59.6854007,30.4532019 59.6854356,30.4531881 59.6854429,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.45306 59.6855156,30.4530542 59.6855302,30.4530286 59.6856166,30.4530752 59.6856201,30.4531272 59.685624,30.4531226 59.6856395,30.4531 59.6857159,30.4530826 59.6857747,30.4530781 59.6857896,30.4530261 59.6857857,30.4529796 59.6857822,30.4529559 59.6858622,30.4529512 59.6858765,30.4529486 59.6858896,30.4529478 59.6859011,30.4529482 59.6859112,30.452952 59.685926,30.4529569 59.6859385,30.4529638 59.6859523,30.4529718 59.6859649,30.4529791 59.6859757,30.4529856 59.6859841,30.4530246 59.6859742,30.4530338 59.6859834,30.4530767 59.6860278,30.4530861 59.6860371,30.4530482 59.6860471,30.4530568 59.6860536,30.4530663 59.6860602,30.4530779 59.6860674,30.4530898 59.6860742,30.4531018 59.6860809,30.4531136 59.6860871,30.4531293 59.6860946,30.453148 59.6861029,30.4531695 59.6861116,30.4532167 59.6861306,30.4533686 59.6861421,30.453376 59.6861189,30.4533898 59.68612,30.4534436 59.6861244,30.453457 59.6861255,30.4534496 59.6861487,30.4536027 59.6861615,30.4535556 59.6863114,30.4535958 59.6863065,30.4536563 59.6862959,30.4537014 59.6862868,30.4537731 59.6862682,30.4538342 59.6862493,30.453879 59.6862345,30.4539364 59.686214,30.4539768 59.686198,30.45402 59.6861768,30.4540703 59.686148,30.4541119 59.6861223,30.4541469 59.6860952,30.4541742 59.6860729,30.4541995 59.6860505,30.4542215 59.6860272,30.4542918 59.6860451,30.4543031 59.6860479,30.4543127 59.6860386,30.45433 59.6860429,30.4543365 59.6860363,30.4544062 59.6860538,30.4543997 59.6860604,30.4544185 59.6860651,30.4544086 59.6860746,30.4544964 59.6860973,30.4544728 59.6861239,30.4544395 59.686154,30.4544059 59.686181,30.4543849 59.6861942,30.4544137 59.6862059,30.4542999 59.6862773,30.4542705 59.6862654,30.4542363 59.6862844,30.4541965 59.6863041,30.4541887 59.6863078,30.4542091 59.6863195,30.4542 59.6863235,30.4541696 59.6863371,30.4541607 59.6863411,30.4541407 59.6863296,30.4541297 59.6863344,30.4540887 59.6863495,30.4540549 59.6863624,30.4540219 59.6863729,30.4540399 59.6863883,30.4540005 59.6863999,30.4540172 59.6864141,30.4540057 59.6864176,30.4539576 59.686432,30.4539454 59.6864356,30.4539287 59.6864214,30.4538817 59.6864353,30.453863 59.6864194,30.4538212 59.6864281,30.4537814 59.6864354,30.4537376 59.6864434,30.4536952 59.6864492,30.4536556 59.6864553,30.4536188 59.68646,30.4535812 59.6864636,30.453575 59.6864544,30.4534768 59.6864467,30.4533659 59.6864383,30.4533611 59.6864525,30.4533485 59.6864515,30.4533248 59.6864494,30.4532998 59.6864473,30.4532869 59.6864462,30.4532916 59.686432,30.4532725 59.6864305,30.4532826 59.6863983,30.4531363 59.6863866,30.453138 59.686381,30.4531642 59.6862975,30.4531215 59.686294,30.4531372 59.6862455,30.4531795 59.686249,30.453196 59.6861992,30.4531704 59.6862175,30.4531608 59.6862141,30.453137 59.6862056,30.4531278 59.6862023,30.4531534 59.686184,30.4530963 59.6861616,30.4530418 59.6861992,30.4530167 59.6861897,30.4529804 59.6861727,30.4529497 59.6861561,30.4529175 59.6861373,30.4528879 59.6861175,30.4528659 59.6861008,30.4528406 59.6860793,30.4528174 59.6860572,30.4527956 59.6860336,30.4527791 59.6860133,30.4527643 59.6859927,30.4527472 59.6859643,30.4527383 59.6859422,30.4527314 59.6859191,30.4527279 59.6859036,30.4528174 59.6858982,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088,30.4522705 59.6857319,30.4522289 59.6857289,30.4521745 59.6857248)))', 'relation', 1759666, '{\"name\": \"Павловский дворец\", \"name:ca\": \"Palau Pàvlovsk\", \"name:en\": \"Pavlovsk Palace\", \"name:fi\": \"Pavlovskin_palatsi\", \"name:fr\": \"Palais de Pavlovsk\", \"name:pt\": \"Palácio de Pavlovsk\", \"name:uz\": \"Pavlovsk saroyi\", \"name:zh\": \"巴甫洛夫斯克的宫殿\", \"ref:okn\": \"781610399040316\", \"tourism\": \"museum\", \"building\": \"palace\", \"historic\": \"yes\", \"int_name\": \"Palais de Pavlovsk\", \"wikidata\": \"Q118121947\", \"wikipedia\": \"ru:Павловский дворец\", \"start_date\": \"1782\", \"addr:street\": \"Садовая улица\", \"roof:colour\": \"#DADDE2\", \"building:colour\": \"#FFE19C\", \"addr:housenumber\": \"20 литА\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534688 59.6853212,30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536666 59.6853366,30.4536187 59.6853329,30.4534688 59.6853212)))', 'relation', 6636665, '{\"name\": \"Южный корпус\", \"height\": \"15\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4534995 59.6852209)))', 'relation', 14572597, '{\"height\": \"15\", \"roof:shape\": \"gabled\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540054 59.6848752,30.4537854 59.6848579,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537003 59.685133,30.453682 59.6851921,30.4535124 59.6851786)))', 'relation', 18019154, '{\"height\": \"13\", \"roof:shape\": \"hipped\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL);\n--Testcase 402:\nSELECT count(*) FROM json_osm_test;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 404: オーク / Sồi\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 406:\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 407:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 408: 落葉性 / Cây rụng lá\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 409:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n--Testcase 410: 常緑植物 / Cây thường xanh\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n\n--Testcase 411:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n--Testcase 412: XVIII cent.\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n\n--Testcase 413:\nDELETE FROM json_osm_test;\n\n--Testcase 500:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/macaddr.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr) SERVER sqlite_svr OPTIONS (table 'type_MACADDR');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03');\n--Testcase 012:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03');\n--Testcase 013:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (3, '08002b:010203');\n--Testcase 014:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (4, '08002b-010203');\n--Testcase 015:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203');\n--Testcase 016:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203');\n--Testcase 017:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (7, '08002b010203');\n--Testcase 018:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03');\n--Testcase 019:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03');\n--Testcase 020:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (10, '08002F:010203');\n--Testcase 021:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (11, '08002F-010203');\n--Testcase 022:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203');\n--Testcase 023:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203');\n--Testcase 024:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (14, '08002F010203');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (15, decode('08002F010203', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (16, decode('08002b010203', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE macaddr;\n--Testcase 029:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03');\n--Testcase 030:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03');\n--Testcase 031:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (19, '08002b:010203');\n--Testcase 032:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (20, '08002b-010203');\n--Testcase 033:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203');\n--Testcase 034:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203');\n--Testcase 035:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (23, '08002b010203');\n--Testcase 036:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03');\n--Testcase 037:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03');\n--Testcase 038:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (26, '08002F:010203');\n--Testcase 039:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (27, '08002F-010203');\n--Testcase 040:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203');\n--Testcase 041:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203');\n--Testcase 042:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03');\n--Testcase 046:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03');\n--Testcase 047:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (33, '08002b:010203');\n--Testcase 048:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (34, '08002b-010203');\n--Testcase 049:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203');\n--Testcase 050:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203');\n--Testcase 051:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (37, '08002b010203');\n--Testcase 052:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03');\n--Testcase 053:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03');\n--Testcase 054:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (40, '08002F:010203');\n--Testcase 055:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (41, '08002F-010203');\n--Testcase 056:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203');\n--Testcase 057:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203');\n--Testcase 058:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03');\n--Testcase 062:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03');\n--Testcase 063:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (47, '08002b:010203');\n--Testcase 064:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (48, '08002b-010203');\n--Testcase 065:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203');\n--Testcase 066:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203');\n--Testcase 067:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (51, '08002b010203');\n--Testcase 068:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03');\n--Testcase 069:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03');\n--Testcase 070:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (54, '08002F:010203');\n--Testcase 071:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (55, '08002F-010203');\n--Testcase 072:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203');\n--Testcase 073:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203');\n--Testcase 074:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 091:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17; -- 9527026057731\n--Testcase 098:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (66, '00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (67, '00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (68, '00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" DESC;\n\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDRpk\" (col macaddr OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDRpk\" VALUES ('01-02-03-04-05-06');\n--Testcase 159:\nSELECT * FROM \"type_MACADDRpk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDRpk\";\n\n--no macaddr operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06' FROM \"type_MACADDR\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/macaddr8.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR8\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03:04:05');\n--Testcase 012:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03-04-05');\n--Testcase 013:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (3, '08002b01:02030405');\n--Testcase 014:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (4, '08002b01-02030405');\n--Testcase 015:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203.0405');\n--Testcase 016:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203-0405');\n--Testcase 017:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (7, '08002b0102030405');\n--Testcase 018:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03:04:05');\n--Testcase 019:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03-04-05');\n--Testcase 020:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (10, '08002F01:02030405');\n--Testcase 021:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (11, '08002F01-02030405');\n--Testcase 022:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203.0405');\n--Testcase 023:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203-0405');\n--Testcase 024:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (14, '08002F0102030405');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (15, decode('08002F0102030405', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (16, decode('08002b0102030405', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE macaddr8;\n--Testcase 029:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03:04:05');\n--Testcase 030:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03-04-05');\n--Testcase 031:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (19, '08002b01:02030405');\n--Testcase 032:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (20, '08002b01-02030405');\n--Testcase 033:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203.0405');\n--Testcase 034:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203-0405');\n--Testcase 035:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (23, '08002b0102030405');\n--Testcase 036:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03:04:05');\n--Testcase 037:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03-04-05');\n--Testcase 038:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (26, '08002F01:02030405');\n--Testcase 039:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (27, '08002F01-02030405');\n--Testcase 040:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203.0405');\n--Testcase 041:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203-0405');\n--Testcase 042:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03:04:05');\n--Testcase 046:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03-04-05');\n--Testcase 047:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (33, '08002b01:02030405');\n--Testcase 048:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (34, '08002b01-02030405');\n--Testcase 049:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203.0405');\n--Testcase 050:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203-0405');\n--Testcase 051:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (37, '08002b0102030405');\n--Testcase 052:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03:04:05');\n--Testcase 053:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03-04-05');\n--Testcase 054:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (40, '08002F01:02030405');\n--Testcase 055:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (41, '08002F01-02030405');\n--Testcase 056:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203.0405');\n--Testcase 057:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203-0405');\n--Testcase 058:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03:04:05');\n--Testcase 062:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03-04-05');\n--Testcase 063:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (47, '08002b01:02030405');\n--Testcase 064:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (48, '08002b01-02030405');\n--Testcase 065:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203.0405');\n--Testcase 066:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203-0405');\n--Testcase 067:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (51, '08002b0102030405');\n--Testcase 068:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03:04:05');\n--Testcase 069:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03-04-05');\n--Testcase 070:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (54, '08002F01:02030405');\n--Testcase 071:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (55, '08002F01-02030405');\n--Testcase 072:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203.0405');\n--Testcase 073:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203-0405');\n--Testcase 074:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR8+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 091:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 098:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04:04:05');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR8+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR8+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR8\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (66, '00:00:00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (67, '00:00:00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (68, '00:00:00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" DESC;\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDR8pk\" (col macaddr8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01-02-03-04-05-06-07-08');\n--Testcase 159:\nSELECT * FROM \"type_MACADDR8pk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDR8pk\";\n\n--no macaddr8 operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR8\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/numeric.sql",
    "content": "--\n-- NUMERIC\n--\n--Testcase 567:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 568:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 569:\nCREATE FOREIGN TABLE num_data (id int4 OPTIONS (key 'true'), val numeric(210,10)) SERVER sqlite_svr;\n--Testcase 570:\nCREATE FOREIGN TABLE num_exp_add (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 571:\nCREATE FOREIGN TABLE num_exp_sub (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 572:\nCREATE FOREIGN TABLE num_exp_div (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 573:\nCREATE FOREIGN TABLE num_exp_mul (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 574:\nCREATE FOREIGN TABLE num_exp_sqrt (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 575:\nCREATE FOREIGN TABLE num_exp_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 576:\nCREATE FOREIGN TABLE num_exp_log10 (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 577:\nCREATE FOREIGN TABLE num_exp_power_10_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n\n--Testcase 1556:\nCREATE FOREIGN TABLE num_variance (a numeric) SERVER sqlite_svr;\n\n--Testcase 578:\nCREATE FOREIGN TABLE num_result (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), result numeric(210,10)) SERVER sqlite_svr;\n\n\n-- ******************************\n-- * The following EXPECTED results are computed by bc(1)\n-- * with a scale of 200\n-- ******************************\n\nBEGIN TRANSACTION;\n--Testcase 1:\nINSERT INTO num_exp_add VALUES (0,0,'0');\n--Testcase 2:\nINSERT INTO num_exp_sub VALUES (0,0,'0');\n--Testcase 3:\nINSERT INTO num_exp_mul VALUES (0,0,'0');\n--Testcase 4:\nINSERT INTO num_exp_div VALUES (0,0,'NaN');\n--Testcase 5:\nINSERT INTO num_exp_add VALUES (0,1,'0');\n--Testcase 6:\nINSERT INTO num_exp_sub VALUES (0,1,'0');\n--Testcase 7:\nINSERT INTO num_exp_mul VALUES (0,1,'0');\n--Testcase 8:\nINSERT INTO num_exp_div VALUES (0,1,'NaN');\n--Testcase 9:\nINSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');\n--Testcase 10:\nINSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');\n--Testcase 11:\nINSERT INTO num_exp_mul VALUES (0,2,'0');\n--Testcase 12:\nINSERT INTO num_exp_div VALUES (0,2,'0');\n--Testcase 13:\nINSERT INTO num_exp_add VALUES (0,3,'4.31');\n--Testcase 14:\nINSERT INTO num_exp_sub VALUES (0,3,'-4.31');\n--Testcase 15:\nINSERT INTO num_exp_mul VALUES (0,3,'0');\n--Testcase 16:\nINSERT INTO num_exp_div VALUES (0,3,'0');\n--Testcase 17:\nINSERT INTO num_exp_add VALUES (0,4,'7799461.4119');\n--Testcase 18:\nINSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');\n--Testcase 19:\nINSERT INTO num_exp_mul VALUES (0,4,'0');\n--Testcase 20:\nINSERT INTO num_exp_div VALUES (0,4,'0');\n--Testcase 21:\nINSERT INTO num_exp_add VALUES (0,5,'16397.038491');\n--Testcase 22:\nINSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');\n--Testcase 23:\nINSERT INTO num_exp_mul VALUES (0,5,'0');\n--Testcase 24:\nINSERT INTO num_exp_div VALUES (0,5,'0');\n--Testcase 25:\nINSERT INTO num_exp_add VALUES (0,6,'93901.57763026');\n--Testcase 26:\nINSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');\n--Testcase 27:\nINSERT INTO num_exp_mul VALUES (0,6,'0');\n--Testcase 28:\nINSERT INTO num_exp_div VALUES (0,6,'0');\n--Testcase 29:\nINSERT INTO num_exp_add VALUES (0,7,'-83028485');\n--Testcase 30:\nINSERT INTO num_exp_sub VALUES (0,7,'83028485');\n--Testcase 31:\nINSERT INTO num_exp_mul VALUES (0,7,'0');\n--Testcase 32:\nINSERT INTO num_exp_div VALUES (0,7,'0');\n--Testcase 33:\nINSERT INTO num_exp_add VALUES (0,8,'74881');\n--Testcase 34:\nINSERT INTO num_exp_sub VALUES (0,8,'-74881');\n--Testcase 35:\nINSERT INTO num_exp_mul VALUES (0,8,'0');\n--Testcase 36:\nINSERT INTO num_exp_div VALUES (0,8,'0');\n--Testcase 37:\nINSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');\n--Testcase 38:\nINSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');\n--Testcase 39:\nINSERT INTO num_exp_mul VALUES (0,9,'0');\n--Testcase 40:\nINSERT INTO num_exp_div VALUES (0,9,'0');\n--Testcase 41:\nINSERT INTO num_exp_add VALUES (1,0,'0');\n--Testcase 42:\nINSERT INTO num_exp_sub VALUES (1,0,'0');\n--Testcase 43:\nINSERT INTO num_exp_mul VALUES (1,0,'0');\n--Testcase 44:\nINSERT INTO num_exp_div VALUES (1,0,'NaN');\n--Testcase 45:\nINSERT INTO num_exp_add VALUES (1,1,'0');\n--Testcase 46:\nINSERT INTO num_exp_sub VALUES (1,1,'0');\n--Testcase 47:\nINSERT INTO num_exp_mul VALUES (1,1,'0');\n--Testcase 48:\nINSERT INTO num_exp_div VALUES (1,1,'NaN');\n--Testcase 49:\nINSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');\n--Testcase 50:\nINSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');\n--Testcase 51:\nINSERT INTO num_exp_mul VALUES (1,2,'0');\n--Testcase 52:\nINSERT INTO num_exp_div VALUES (1,2,'0');\n--Testcase 53:\nINSERT INTO num_exp_add VALUES (1,3,'4.31');\n--Testcase 54:\nINSERT INTO num_exp_sub VALUES (1,3,'-4.31');\n--Testcase 55:\nINSERT INTO num_exp_mul VALUES (1,3,'0');\n--Testcase 56:\nINSERT INTO num_exp_div VALUES (1,3,'0');\n--Testcase 57:\nINSERT INTO num_exp_add VALUES (1,4,'7799461.4119');\n--Testcase 58:\nINSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');\n--Testcase 59:\nINSERT INTO num_exp_mul VALUES (1,4,'0');\n--Testcase 60:\nINSERT INTO num_exp_div VALUES (1,4,'0');\n--Testcase 61:\nINSERT INTO num_exp_add VALUES (1,5,'16397.038491');\n--Testcase 62:\nINSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');\n--Testcase 63:\nINSERT INTO num_exp_mul VALUES (1,5,'0');\n--Testcase 64:\nINSERT INTO num_exp_div VALUES (1,5,'0');\n--Testcase 65:\nINSERT INTO num_exp_add VALUES (1,6,'93901.57763026');\n--Testcase 66:\nINSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');\n--Testcase 67:\nINSERT INTO num_exp_mul VALUES (1,6,'0');\n--Testcase 68:\nINSERT INTO num_exp_div VALUES (1,6,'0');\n--Testcase 69:\nINSERT INTO num_exp_add VALUES (1,7,'-83028485');\n--Testcase 70:\nINSERT INTO num_exp_sub VALUES (1,7,'83028485');\n--Testcase 71:\nINSERT INTO num_exp_mul VALUES (1,7,'0');\n--Testcase 72:\nINSERT INTO num_exp_div VALUES (1,7,'0');\n--Testcase 73:\nINSERT INTO num_exp_add VALUES (1,8,'74881');\n--Testcase 74:\nINSERT INTO num_exp_sub VALUES (1,8,'-74881');\n--Testcase 75:\nINSERT INTO num_exp_mul VALUES (1,8,'0');\n--Testcase 76:\nINSERT INTO num_exp_div VALUES (1,8,'0');\n--Testcase 77:\nINSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');\n--Testcase 78:\nINSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');\n--Testcase 79:\nINSERT INTO num_exp_mul VALUES (1,9,'0');\n--Testcase 80:\nINSERT INTO num_exp_div VALUES (1,9,'0');\n--Testcase 81:\nINSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');\n--Testcase 82:\nINSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');\n--Testcase 83:\nINSERT INTO num_exp_mul VALUES (2,0,'0');\n--Testcase 84:\nINSERT INTO num_exp_div VALUES (2,0,'NaN');\n--Testcase 85:\nINSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');\n--Testcase 86:\nINSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');\n--Testcase 87:\nINSERT INTO num_exp_mul VALUES (2,1,'0');\n--Testcase 88:\nINSERT INTO num_exp_div VALUES (2,1,'NaN');\n--Testcase 89:\nINSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');\n--Testcase 90:\nINSERT INTO num_exp_sub VALUES (2,2,'0');\n--Testcase 91:\nINSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');\n--Testcase 92:\nINSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');\n--Testcase 93:\nINSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');\n--Testcase 94:\nINSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');\n--Testcase 95:\nINSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');\n--Testcase 96:\nINSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');\n--Testcase 97:\nINSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');\n--Testcase 98:\nINSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');\n--Testcase 99:\nINSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');\n--Testcase 100:\nINSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');\n--Testcase 101:\nINSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');\n--Testcase 102:\nINSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');\n--Testcase 103:\nINSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');\n--Testcase 104:\nINSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');\n--Testcase 105:\nINSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');\n--Testcase 106:\nINSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');\n--Testcase 107:\nINSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');\n--Testcase 108:\nINSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');\n--Testcase 109:\nINSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');\n--Testcase 110:\nINSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');\n--Testcase 111:\nINSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');\n--Testcase 112:\nINSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');\n--Testcase 113:\nINSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');\n--Testcase 114:\nINSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');\n--Testcase 115:\nINSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');\n--Testcase 116:\nINSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');\n--Testcase 117:\nINSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');\n--Testcase 118:\nINSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');\n--Testcase 119:\nINSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');\n--Testcase 120:\nINSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');\n--Testcase 121:\nINSERT INTO num_exp_add VALUES (3,0,'4.31');\n--Testcase 122:\nINSERT INTO num_exp_sub VALUES (3,0,'4.31');\n--Testcase 123:\nINSERT INTO num_exp_mul VALUES (3,0,'0');\n--Testcase 124:\nINSERT INTO num_exp_div VALUES (3,0,'NaN');\n--Testcase 125:\nINSERT INTO num_exp_add VALUES (3,1,'4.31');\n--Testcase 126:\nINSERT INTO num_exp_sub VALUES (3,1,'4.31');\n--Testcase 127:\nINSERT INTO num_exp_mul VALUES (3,1,'0');\n--Testcase 128:\nINSERT INTO num_exp_div VALUES (3,1,'NaN');\n--Testcase 129:\nINSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');\n--Testcase 130:\nINSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');\n--Testcase 131:\nINSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');\n--Testcase 132:\nINSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');\n--Testcase 133:\nINSERT INTO num_exp_add VALUES (3,3,'8.62');\n--Testcase 134:\nINSERT INTO num_exp_sub VALUES (3,3,'0');\n--Testcase 135:\nINSERT INTO num_exp_mul VALUES (3,3,'18.5761');\n--Testcase 136:\nINSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');\n--Testcase 137:\nINSERT INTO num_exp_add VALUES (3,4,'7799465.7219');\n--Testcase 138:\nINSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');\n--Testcase 139:\nINSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');\n--Testcase 140:\nINSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');\n--Testcase 141:\nINSERT INTO num_exp_add VALUES (3,5,'16401.348491');\n--Testcase 142:\nINSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');\n--Testcase 143:\nINSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');\n--Testcase 144:\nINSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');\n--Testcase 145:\nINSERT INTO num_exp_add VALUES (3,6,'93905.88763026');\n--Testcase 146:\nINSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');\n--Testcase 147:\nINSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');\n--Testcase 148:\nINSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');\n--Testcase 149:\nINSERT INTO num_exp_add VALUES (3,7,'-83028480.69');\n--Testcase 150:\nINSERT INTO num_exp_sub VALUES (3,7,'83028489.31');\n--Testcase 151:\nINSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');\n--Testcase 152:\nINSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');\n--Testcase 153:\nINSERT INTO num_exp_add VALUES (3,8,'74885.31');\n--Testcase 154:\nINSERT INTO num_exp_sub VALUES (3,8,'-74876.69');\n--Testcase 155:\nINSERT INTO num_exp_mul VALUES (3,8,'322737.11');\n--Testcase 156:\nINSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');\n--Testcase 157:\nINSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');\n--Testcase 158:\nINSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');\n--Testcase 159:\nINSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');\n--Testcase 160:\nINSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');\n--Testcase 161:\nINSERT INTO num_exp_add VALUES (4,0,'7799461.4119');\n--Testcase 162:\nINSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');\n--Testcase 163:\nINSERT INTO num_exp_mul VALUES (4,0,'0');\n--Testcase 164:\nINSERT INTO num_exp_div VALUES (4,0,'NaN');\n--Testcase 165:\nINSERT INTO num_exp_add VALUES (4,1,'7799461.4119');\n--Testcase 166:\nINSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');\n--Testcase 167:\nINSERT INTO num_exp_mul VALUES (4,1,'0');\n--Testcase 168:\nINSERT INTO num_exp_div VALUES (4,1,'NaN');\n--Testcase 169:\nINSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');\n--Testcase 170:\nINSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');\n--Testcase 171:\nINSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');\n--Testcase 172:\nINSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');\n--Testcase 173:\nINSERT INTO num_exp_add VALUES (4,3,'7799465.7219');\n--Testcase 174:\nINSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');\n--Testcase 175:\nINSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');\n--Testcase 176:\nINSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');\n--Testcase 177:\nINSERT INTO num_exp_add VALUES (4,4,'15598922.8238');\n--Testcase 178:\nINSERT INTO num_exp_sub VALUES (4,4,'0');\n--Testcase 179:\nINSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');\n--Testcase 180:\nINSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');\n--Testcase 181:\nINSERT INTO num_exp_add VALUES (4,5,'7815858.450391');\n--Testcase 182:\nINSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');\n--Testcase 183:\nINSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');\n--Testcase 184:\nINSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');\n--Testcase 185:\nINSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');\n--Testcase 186:\nINSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');\n--Testcase 187:\nINSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');\n--Testcase 188:\nINSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');\n--Testcase 189:\nINSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');\n--Testcase 190:\nINSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');\n--Testcase 191:\nINSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');\n--Testcase 192:\nINSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');\n--Testcase 193:\nINSERT INTO num_exp_add VALUES (4,8,'7874342.4119');\n--Testcase 194:\nINSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');\n--Testcase 195:\nINSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');\n--Testcase 196:\nINSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');\n--Testcase 197:\nINSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');\n--Testcase 198:\nINSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');\n--Testcase 199:\nINSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');\n--Testcase 200:\nINSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');\n--Testcase 201:\nINSERT INTO num_exp_add VALUES (5,0,'16397.038491');\n--Testcase 202:\nINSERT INTO num_exp_sub VALUES (5,0,'16397.038491');\n--Testcase 203:\nINSERT INTO num_exp_mul VALUES (5,0,'0');\n--Testcase 204:\nINSERT INTO num_exp_div VALUES (5,0,'NaN');\n--Testcase 205:\nINSERT INTO num_exp_add VALUES (5,1,'16397.038491');\n--Testcase 206:\nINSERT INTO num_exp_sub VALUES (5,1,'16397.038491');\n--Testcase 207:\nINSERT INTO num_exp_mul VALUES (5,1,'0');\n--Testcase 208:\nINSERT INTO num_exp_div VALUES (5,1,'NaN');\n--Testcase 209:\nINSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');\n--Testcase 210:\nINSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');\n--Testcase 211:\nINSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');\n--Testcase 212:\nINSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');\n--Testcase 213:\nINSERT INTO num_exp_add VALUES (5,3,'16401.348491');\n--Testcase 214:\nINSERT INTO num_exp_sub VALUES (5,3,'16392.728491');\n--Testcase 215:\nINSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');\n--Testcase 216:\nINSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');\n--Testcase 217:\nINSERT INTO num_exp_add VALUES (5,4,'7815858.450391');\n--Testcase 218:\nINSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');\n--Testcase 219:\nINSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');\n--Testcase 220:\nINSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');\n--Testcase 221:\nINSERT INTO num_exp_add VALUES (5,5,'32794.076982');\n--Testcase 222:\nINSERT INTO num_exp_sub VALUES (5,5,'0');\n--Testcase 223:\nINSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');\n--Testcase 224:\nINSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');\n--Testcase 225:\nINSERT INTO num_exp_add VALUES (5,6,'110298.61612126');\n--Testcase 226:\nINSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');\n--Testcase 227:\nINSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');\n--Testcase 228:\nINSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');\n--Testcase 229:\nINSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');\n--Testcase 230:\nINSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');\n--Testcase 231:\nINSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');\n--Testcase 232:\nINSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');\n--Testcase 233:\nINSERT INTO num_exp_add VALUES (5,8,'91278.038491');\n--Testcase 234:\nINSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');\n--Testcase 235:\nINSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');\n--Testcase 236:\nINSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');\n--Testcase 237:\nINSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');\n--Testcase 238:\nINSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');\n--Testcase 239:\nINSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');\n--Testcase 240:\nINSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');\n--Testcase 241:\nINSERT INTO num_exp_add VALUES (6,0,'93901.57763026');\n--Testcase 242:\nINSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');\n--Testcase 243:\nINSERT INTO num_exp_mul VALUES (6,0,'0');\n--Testcase 244:\nINSERT INTO num_exp_div VALUES (6,0,'NaN');\n--Testcase 245:\nINSERT INTO num_exp_add VALUES (6,1,'93901.57763026');\n--Testcase 246:\nINSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');\n--Testcase 247:\nINSERT INTO num_exp_mul VALUES (6,1,'0');\n--Testcase 248:\nINSERT INTO num_exp_div VALUES (6,1,'NaN');\n--Testcase 249:\nINSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');\n--Testcase 250:\nINSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');\n--Testcase 251:\nINSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');\n--Testcase 252:\nINSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');\n--Testcase 253:\nINSERT INTO num_exp_add VALUES (6,3,'93905.88763026');\n--Testcase 254:\nINSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');\n--Testcase 255:\nINSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');\n--Testcase 256:\nINSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');\n--Testcase 257:\nINSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');\n--Testcase 258:\nINSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');\n--Testcase 259:\nINSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');\n--Testcase 260:\nINSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');\n--Testcase 261:\nINSERT INTO num_exp_add VALUES (6,5,'110298.61612126');\n--Testcase 262:\nINSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');\n--Testcase 263:\nINSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');\n--Testcase 264:\nINSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');\n--Testcase 265:\nINSERT INTO num_exp_add VALUES (6,6,'187803.15526052');\n--Testcase 266:\nINSERT INTO num_exp_sub VALUES (6,6,'0');\n--Testcase 267:\nINSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');\n--Testcase 268:\nINSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');\n--Testcase 269:\nINSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');\n--Testcase 270:\nINSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');\n--Testcase 271:\nINSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');\n--Testcase 272:\nINSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');\n--Testcase 273:\nINSERT INTO num_exp_add VALUES (6,8,'168782.57763026');\n--Testcase 274:\nINSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');\n--Testcase 275:\nINSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');\n--Testcase 276:\nINSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');\n--Testcase 277:\nINSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');\n--Testcase 278:\nINSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');\n--Testcase 279:\nINSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');\n--Testcase 280:\nINSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');\n--Testcase 281:\nINSERT INTO num_exp_add VALUES (7,0,'-83028485');\n--Testcase 282:\nINSERT INTO num_exp_sub VALUES (7,0,'-83028485');\n--Testcase 283:\nINSERT INTO num_exp_mul VALUES (7,0,'0');\n--Testcase 284:\nINSERT INTO num_exp_div VALUES (7,0,'NaN');\n--Testcase 285:\nINSERT INTO num_exp_add VALUES (7,1,'-83028485');\n--Testcase 286:\nINSERT INTO num_exp_sub VALUES (7,1,'-83028485');\n--Testcase 287:\nINSERT INTO num_exp_mul VALUES (7,1,'0');\n--Testcase 288:\nINSERT INTO num_exp_div VALUES (7,1,'NaN');\n--Testcase 289:\nINSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');\n--Testcase 290:\nINSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');\n--Testcase 291:\nINSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');\n--Testcase 292:\nINSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');\n--Testcase 293:\nINSERT INTO num_exp_add VALUES (7,3,'-83028480.69');\n--Testcase 294:\nINSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');\n--Testcase 295:\nINSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');\n--Testcase 296:\nINSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');\n--Testcase 297:\nINSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');\n--Testcase 298:\nINSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');\n--Testcase 299:\nINSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');\n--Testcase 300:\nINSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');\n--Testcase 301:\nINSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');\n--Testcase 302:\nINSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');\n--Testcase 303:\nINSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');\n--Testcase 304:\nINSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');\n--Testcase 305:\nINSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');\n--Testcase 306:\nINSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');\n--Testcase 307:\nINSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');\n--Testcase 308:\nINSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');\n--Testcase 309:\nINSERT INTO num_exp_add VALUES (7,7,'-166056970');\n--Testcase 310:\nINSERT INTO num_exp_sub VALUES (7,7,'0');\n--Testcase 311:\nINSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');\n--Testcase 312:\nINSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');\n--Testcase 313:\nINSERT INTO num_exp_add VALUES (7,8,'-82953604');\n--Testcase 314:\nINSERT INTO num_exp_sub VALUES (7,8,'-83103366');\n--Testcase 315:\nINSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');\n--Testcase 316:\nINSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');\n--Testcase 317:\nINSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');\n--Testcase 318:\nINSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');\n--Testcase 319:\nINSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');\n--Testcase 320:\nINSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');\n--Testcase 321:\nINSERT INTO num_exp_add VALUES (8,0,'74881');\n--Testcase 322:\nINSERT INTO num_exp_sub VALUES (8,0,'74881');\n--Testcase 323:\nINSERT INTO num_exp_mul VALUES (8,0,'0');\n--Testcase 324:\nINSERT INTO num_exp_div VALUES (8,0,'NaN');\n--Testcase 325:\nINSERT INTO num_exp_add VALUES (8,1,'74881');\n--Testcase 326:\nINSERT INTO num_exp_sub VALUES (8,1,'74881');\n--Testcase 327:\nINSERT INTO num_exp_mul VALUES (8,1,'0');\n--Testcase 328:\nINSERT INTO num_exp_div VALUES (8,1,'NaN');\n--Testcase 329:\nINSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');\n--Testcase 330:\nINSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');\n--Testcase 331:\nINSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');\n--Testcase 332:\nINSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');\n--Testcase 333:\nINSERT INTO num_exp_add VALUES (8,3,'74885.31');\n--Testcase 334:\nINSERT INTO num_exp_sub VALUES (8,3,'74876.69');\n--Testcase 335:\nINSERT INTO num_exp_mul VALUES (8,3,'322737.11');\n--Testcase 336:\nINSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');\n--Testcase 337:\nINSERT INTO num_exp_add VALUES (8,4,'7874342.4119');\n--Testcase 338:\nINSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');\n--Testcase 339:\nINSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');\n--Testcase 340:\nINSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');\n--Testcase 341:\nINSERT INTO num_exp_add VALUES (8,5,'91278.038491');\n--Testcase 342:\nINSERT INTO num_exp_sub VALUES (8,5,'58483.961509');\n--Testcase 343:\nINSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');\n--Testcase 344:\nINSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');\n--Testcase 345:\nINSERT INTO num_exp_add VALUES (8,6,'168782.57763026');\n--Testcase 346:\nINSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');\n--Testcase 347:\nINSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');\n--Testcase 348:\nINSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');\n--Testcase 349:\nINSERT INTO num_exp_add VALUES (8,7,'-82953604');\n--Testcase 350:\nINSERT INTO num_exp_sub VALUES (8,7,'83103366');\n--Testcase 351:\nINSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');\n--Testcase 352:\nINSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');\n--Testcase 353:\nINSERT INTO num_exp_add VALUES (8,8,'149762');\n--Testcase 354:\nINSERT INTO num_exp_sub VALUES (8,8,'0');\n--Testcase 355:\nINSERT INTO num_exp_mul VALUES (8,8,'5607164161');\n--Testcase 356:\nINSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');\n--Testcase 357:\nINSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');\n--Testcase 358:\nINSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');\n--Testcase 359:\nINSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');\n--Testcase 360:\nINSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');\n--Testcase 361:\nINSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');\n--Testcase 362:\nINSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');\n--Testcase 363:\nINSERT INTO num_exp_mul VALUES (9,0,'0');\n--Testcase 364:\nINSERT INTO num_exp_div VALUES (9,0,'NaN');\n--Testcase 365:\nINSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');\n--Testcase 366:\nINSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');\n--Testcase 367:\nINSERT INTO num_exp_mul VALUES (9,1,'0');\n--Testcase 368:\nINSERT INTO num_exp_div VALUES (9,1,'NaN');\n--Testcase 369:\nINSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');\n--Testcase 370:\nINSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');\n--Testcase 371:\nINSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');\n--Testcase 372:\nINSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');\n--Testcase 373:\nINSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');\n--Testcase 374:\nINSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');\n--Testcase 375:\nINSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');\n--Testcase 376:\nINSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');\n--Testcase 377:\nINSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');\n--Testcase 378:\nINSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');\n--Testcase 379:\nINSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');\n--Testcase 380:\nINSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');\n--Testcase 381:\nINSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');\n--Testcase 382:\nINSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');\n--Testcase 383:\nINSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');\n--Testcase 384:\nINSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');\n--Testcase 385:\nINSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');\n--Testcase 386:\nINSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');\n--Testcase 387:\nINSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');\n--Testcase 388:\nINSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');\n--Testcase 389:\nINSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');\n--Testcase 390:\nINSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');\n--Testcase 391:\nINSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');\n--Testcase 392:\nINSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');\n--Testcase 393:\nINSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');\n--Testcase 394:\nINSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');\n--Testcase 395:\nINSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');\n--Testcase 396:\nINSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');\n--Testcase 397:\nINSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');\n--Testcase 398:\nINSERT INTO num_exp_sub VALUES (9,9,'0');\n--Testcase 399:\nINSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');\n--Testcase 400:\nINSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 401:\nINSERT INTO num_exp_sqrt VALUES (0,'0');\n--Testcase 402:\nINSERT INTO num_exp_sqrt VALUES (1,'0');\n--Testcase 403:\nINSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');\n--Testcase 404:\nINSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');\n--Testcase 405:\nINSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');\n--Testcase 406:\nINSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');\n--Testcase 407:\nINSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');\n--Testcase 408:\nINSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');\n--Testcase 409:\nINSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');\n--Testcase 410:\nINSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 411:\nINSERT INTO num_exp_ln VALUES (0,'NaN');\n--Testcase 412:\nINSERT INTO num_exp_ln VALUES (1,'NaN');\n--Testcase 413:\nINSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');\n--Testcase 414:\nINSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');\n--Testcase 415:\nINSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');\n--Testcase 416:\nINSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');\n--Testcase 417:\nINSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');\n--Testcase 418:\nINSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');\n--Testcase 419:\nINSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');\n--Testcase 420:\nINSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 421:\nINSERT INTO num_exp_log10 VALUES (0,'NaN');\n--Testcase 422:\nINSERT INTO num_exp_log10 VALUES (1,'NaN');\n--Testcase 423:\nINSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');\n--Testcase 424:\nINSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');\n--Testcase 425:\nINSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');\n--Testcase 426:\nINSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');\n--Testcase 427:\nINSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');\n--Testcase 428:\nINSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');\n--Testcase 429:\nINSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');\n--Testcase 430:\nINSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 431:\nINSERT INTO num_exp_power_10_ln VALUES (0,'NaN');\n--Testcase 432:\nINSERT INTO num_exp_power_10_ln VALUES (1,'NaN');\n--Testcase 433:\nINSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');\n--Testcase 434:\nINSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');\n--Testcase 435:\nINSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');\n--Testcase 436:\nINSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');\n--Testcase 437:\nINSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');\n--Testcase 438:\nINSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');\n--Testcase 439:\nINSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');\n--Testcase 440:\nINSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 441:\nINSERT INTO num_data VALUES (0, '0');\n--Testcase 442:\nINSERT INTO num_data VALUES (1, '0');\n--Testcase 443:\nINSERT INTO num_data VALUES (2, '-34338492.215397047');\n--Testcase 444:\nINSERT INTO num_data VALUES (3, '4.31');\n--Testcase 445:\nINSERT INTO num_data VALUES (4, '7799461.4119');\n--Testcase 446:\nINSERT INTO num_data VALUES (5, '16397.038491');\n--Testcase 447:\nINSERT INTO num_data VALUES (6, '93901.57763026');\n--Testcase 448:\nINSERT INTO num_data VALUES (7, '-83028485');\n--Testcase 449:\nINSERT INTO num_data VALUES (8, '74881');\n--Testcase 450:\nINSERT INTO num_data VALUES (9, '-24926804.045047420');\n\nCOMMIT TRANSACTION;\n\n-- ******************************\n-- * Create indices for faster checks\n-- ******************************\n-- Skip these setting, creating foreign table with primary key already covered.\n--CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);\n--CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);\n--CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);\n--CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);\n--CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);\n--CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);\n--VACUUM ANALYZE num_exp_add;\n--VACUUM ANALYZE num_exp_sub;\n--VACUUM ANALYZE num_exp_div;\n--VACUUM ANALYZE num_exp_mul;\n--VACUUM ANALYZE num_exp_sqrt;\n--VACUUM ANALYZE num_exp_ln;\n--VACUUM ANALYZE num_exp_log10;\n--VACUUM ANALYZE num_exp_power_10_ln;\n\n-- ******************************\n-- * Now check the behaviour of the NUMERIC type\n-- ******************************\n\n-- ******************************\n-- * Addition check\n-- ******************************\n\n--Testcase 451:\nDELETE FROM num_result;\n--Testcase 452:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 453:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 454:\nDELETE FROM num_result;\n--Testcase 455:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)\n    FROM num_data t1, num_data t2;\n--Testcase 456:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 10);\n\n-- ******************************\n-- * Subtraction check\n-- ******************************\n--Testcase 457:\nDELETE FROM num_result;\n--Testcase 458:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 459:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 460:\nDELETE FROM num_result;\n--Testcase 461:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)\n    FROM num_data t1, num_data t2;\n--Testcase 462:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 40);\n\n-- ******************************\n-- * Multiply check\n-- ******************************\n--Testcase 463:\nDELETE FROM num_result;\n--Testcase 464:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 465:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 466:\nDELETE FROM num_result;\n--Testcase 467:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)\n    FROM num_data t1, num_data t2;\n--Testcase 468:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 30);\n\n-- ******************************\n-- * Division check\n-- ******************************\n--Testcase 469:\nDELETE FROM num_result;\n--Testcase 470:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 471:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 472:\nDELETE FROM num_result;\n--Testcase 473:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 474:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 80);\n\n-- ******************************\n-- * Square root check\n-- ******************************\n--Testcase 475:\nDELETE FROM num_result;\n--Testcase 476:\nINSERT INTO num_result SELECT id, 0, SQRT(ABS(val))\n    FROM num_data;\n--Testcase 477:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_sqrt t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Natural logarithm check\n-- ******************************\n--Testcase 478:\nDELETE FROM num_result;\n--Testcase 479:\nINSERT INTO num_result SELECT id, 0, LN(ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 480:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Logarithm base 10 check\n-- ******************************\n--Testcase 481:\nDELETE FROM num_result;\n--Testcase 482:\nINSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 483:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_log10 t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * POWER(10, LN(value)) check\n-- ******************************\n--Testcase 484:\nDELETE FROM num_result;\n--Testcase 485:\nINSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 486:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_power_10_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Check behavior with Inf and NaN inputs.  It's easiest to handle these\n-- * separately from the num_data framework used above, because some input\n-- * combinations will throw errors.\n-- ******************************\n--Testcase 1451:\nCREATE FOREIGN TABLE v (id int4 OPTIONS (key 'true'), x numeric, val float8) SERVER sqlite_svr;\n\nBEGIN;\n--Testcase 1452:\nDELETE FROM v;\n--Testcase 1453:\nINSERT INTO v(x) VALUES ('0'::float8),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan');\n--Testcase 1454:\nSELECT x1, x2,\n  x1::numeric + x2::numeric AS sum,\n  x1::numeric - x2::numeric AS diff,\n  x1::numeric * x2::numeric AS prod\nFROM v AS v1(id, x1), v AS v2(id, x2);\n\n--Testcase 1455:\nSELECT x1, x2,\n  x1::numeric / x2::numeric AS quot,\n  x1::numeric % x2::numeric AS mod,\n  div(x1::numeric, x2::numeric) AS div\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x2 != 0;\nROLLBACK;\n\nBEGIN;\n--Testcase 1286:\nDELETE FROM v;\n--Testcase 1287:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1288:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1289:\nDELETE FROM v;\n--Testcase 1290:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1291:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1292:\nDELETE FROM v;\n--Testcase 1293:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1294:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1295:\nDELETE FROM v;\n--Testcase 1296:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1297:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1298:\nDELETE FROM v;\n--Testcase 1299:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1300:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1301:\nDELETE FROM v;\n--Testcase 1302:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1303:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1304:\nDELETE FROM v;\n--Testcase 1305:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1306:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1307:\nDELETE FROM v;\n--Testcase 1308:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1309:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1310:\nDELETE FROM v;\n--Testcase 1311:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1312:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1313:\nDELETE FROM v;\n--Testcase 1314:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1315:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1316:\nDELETE FROM v;\n--Testcase 1317:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1318:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1319:\nDELETE FROM v;\n--Testcase 1320:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1321:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1456:\nDELETE FROM v;\n--Testcase 1457:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1458:\nSELECT x, -x as minusx, abs(x::numeric), floor(x::numeric), ceil(x::numeric), sign(x::numeric), numeric_inc(x::numeric) as inc\nFROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1459:\nDELETE FROM v;\n--Testcase 1460:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1461:\nSELECT x, round(x::numeric), round(x::numeric,1) as round1, trunc(x::numeric), trunc(x::numeric,1) as trunc1\nFROM v;\nROLLBACK;\n\n-- the large values fall into the numeric abbreviation code's maximal classes\nBEGIN;\n--Testcase 1462:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),\n                        ('inf'),('-inf'),('nan'),\n                        ('inf'),('-inf'),('nan');\n--Testcase 1463:\nSELECT substring(x::text, 1, 32) FROM v ORDER BY x;\nROLLBACK;\n\n--Testcase 1464:\nDELETE FROM v;\n--Testcase 1465:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('4.2'),('inf'),('nan');\n--Testcase 1466:\nSELECT x, sqrt(x) FROM v;\n\n--Testcase 1333:\nDELETE FROM v;\n--Testcase 1334:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1335:\nSELECT sqrt(x::numeric) FROM v;\n--Testcase 1336:\nDELETE FROM v;\n--Testcase 1337:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1338:\nSELECT sqrt(x::numeric) FROM v;\n\n--Testcase 1467:\nDELETE FROM v;\n--Testcase 1468:\nINSERT INTO v(x) VALUES ('1'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1469:\nSELECT x,\n  log(x::numeric),\n  log10(x::numeric),\n  ln(x::numeric)\nFROM v;\n\n--Testcase 1342:\nDELETE FROM v;\n--Testcase 1343:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1344:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1345:\nDELETE FROM v;\n--Testcase 1346:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1347:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1348:\nDELETE FROM v;\n--Testcase 1349:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1350:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1470:\nDELETE FROM v;\n--Testcase 1471:\nINSERT INTO v(x) VALUES ('2'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1472:\nSELECT x1, x2,\n  log(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2);\n--Testcase 1354:\nDELETE FROM v;\n--Testcase 1355:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1356:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1357:\nDELETE FROM v;\n--Testcase 1358:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1359:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1360:\nDELETE FROM v;\n--Testcase 1361:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1362:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1363:\nDELETE FROM v;\n--Testcase 1364:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1365:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1366:\nDELETE FROM v;\n--Testcase 1367:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1368:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1369:\nDELETE FROM v;\n--Testcase 1370:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1371:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1372:\nDELETE FROM v;\n--Testcase 1373:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1374:\nSELECT log(x::numeric, 'inf') FROM v;\n\n--Testcase 1473:\nDELETE FROM v;\n--Testcase 1474:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('2'),('4.2'),('inf'),('nan');\n--Testcase 1475:\nSELECT x1, x2,\n  power(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x1 != 0 OR x2 >= 0;\n\n--Testcase 1378:\nDELETE FROM v;\n--Testcase 1379:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1380:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1381:\nDELETE FROM v;\n--Testcase 1382:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1383:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1384:\nDELETE FROM v;\n--Testcase 1385:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1386:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1387:\nDELETE FROM v;\n--Testcase 1388:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1389:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1390:\nDELETE FROM v;\n--Testcase 1391:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1392:\nSELECT power(x::numeric, '3.3') FROM v;\n--Testcase 1393:\nDELETE FROM v;\n--Testcase 1394:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1395:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1396:\nDELETE FROM v;\n--Testcase 1397:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1398:\nSELECT power(x::numeric, '-1.5') FROM v;\n--Testcase 1399:\nDELETE FROM v;\n--Testcase 1400:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1401:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1402:\nDELETE FROM v;\n--Testcase 1403:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1404:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1405:\nDELETE FROM v;\n--Testcase 1406:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1407:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1408:\nDELETE FROM v;\n--Testcase 1409:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1410:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1411:\nDELETE FROM v;\n--Testcase 1412:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1413:\nSELECT power(x::numeric, '2') FROM v;\n--Testcase 1414:\nDELETE FROM v;\n--Testcase 1415:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1416:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1417:\nDELETE FROM v;\n--Testcase 1418:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1419:\nSELECT power(x::numeric, '4.5') FROM v;\n--Testcase 1420:\nDELETE FROM v;\n--Testcase 1421:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1422:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1423:\nDELETE FROM v;\n--Testcase 1424:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1425:\nSELECT power(x::numeric, '-3') FROM v;\n--Testcase 1426:\nDELETE FROM v;\n--Testcase 1427:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1428:\nSELECT power(x::numeric, '0') FROM v;\n--Testcase 1429:\nDELETE FROM v;\n--Testcase 1430:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1431:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1432:\nDELETE FROM v;\n--Testcase 1433:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1434:\nSELECT power(x::numeric, '-inf') FROM v;\n\n-- ******************************\n-- * miscellaneous checks for things that have been broken in the past...\n-- ******************************\n-- numeric AVG used to fail on some platforms\n--Testcase 487:\nSELECT AVG(val) FROM num_data;\n--Testcase 1137:\nSELECT MAX(val) FROM num_data;\n--Testcase 1138:\nSELECT MIN(val) FROM num_data;\n--Testcase 488:\nSELECT STDDEV(val) FROM num_data;\n--Testcase 489:\nSELECT VARIANCE(val) FROM num_data;\n\n-- Check for appropriate rounding and overflow\n--Testcase 579:\nCREATE FOREIGN TABLE fract_only (id int, val numeric(4,4)) SERVER sqlite_svr;\n--Testcase 490:\nINSERT INTO fract_only VALUES (1, '0.0');\n--Testcase 491:\nINSERT INTO fract_only VALUES (2, '0.1');\n--Testcase 492:\nINSERT INTO fract_only VALUES (3, '1.0');\t-- should fail\n--Testcase 493:\nINSERT INTO fract_only VALUES (4, '-0.9999');\n--Testcase 494:\nINSERT INTO fract_only VALUES (5, '0.99994');\n--Testcase 495:\nINSERT INTO fract_only VALUES (6, '0.99995');  -- should fail\n--Testcase 496:\nINSERT INTO fract_only VALUES (7, '0.00001');\n--Testcase 497:\nINSERT INTO fract_only VALUES (8, '0.00017');\n--Testcase 1139:\nINSERT INTO fract_only VALUES (9, 'NaN');\n--Testcase 1140:\nINSERT INTO fract_only VALUES (10, 'Inf');\t-- should fail\n--Testcase 1141:\nINSERT INTO fract_only VALUES (11, '-Inf');\t-- should fail\n--Testcase 498:\nSELECT * FROM fract_only;\n--Testcase 580:\nDROP FOREIGN TABLE fract_only;\n\n-- Check conversion to integers\n-- SQLite promises to preserve the first 15 significant decimal digits of the floating point value.\n-- However, it makes no guarantees about the accuracy of computations on floating point values, as no such guarantees are possible.\n-- A floating-point value as written in an SQL statement may not be the same as the value represented internally.\n-- Actual result is different from expected result.\n--Testcase 1485:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1486:\nDELETE FROM num_tmp;\n--Testcase 1487:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.5);\n--Testcase 1488:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1489:\nDELETE FROM num_tmp;\n--Testcase 1490:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.4);\n--Testcase 1491:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1492:\nDELETE FROM num_tmp;\n--Testcase 1493:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.4);\n--Testcase 1494:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1495:\nDELETE FROM num_tmp;\n--Testcase 1496:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.5);\n--Testcase 1497:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1498:\nDELETE FROM num_tmp;\n--Testcase 1499:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.5);\n--Testcase 1500:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1501:\nDELETE FROM num_tmp;\n--Testcase 1502:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.4);\n--Testcase 1503:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1504:\nDELETE FROM num_tmp;\n--Testcase 1505:\nINSERT INTO num_tmp(n1) VALUES (2147483647.4);\n--Testcase 1506:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1507:\nDELETE FROM num_tmp;\n--Testcase 1508:\nINSERT INTO num_tmp(n1) VALUES (2147483647.5);\n--Testcase 1509:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1510:\nDELETE FROM num_tmp;\n--Testcase 1511:\nINSERT INTO num_tmp(n1) VALUES (-32768.5);\n--Testcase 1512:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1513:\nDELETE FROM num_tmp;\n--Testcase 1514:\nINSERT INTO num_tmp(n1) VALUES (-32768.4);\n--Testcase 1515:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1516:\nDELETE FROM num_tmp;\n--Testcase 1517:\nINSERT INTO num_tmp(n1) VALUES (32767.4);\n--Testcase 1518:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1519:\nDELETE FROM num_tmp;\n--Testcase 1520:\nINSERT INTO num_tmp(n1) VALUES (32767.5);\n--Testcase 1521:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1555:\nDELETE FROM num_tmp;\n--Testcase 1555:\nDROP FOREIGN TABLE num_tmp;\n\n-- Check inf/nan conversion behavior\n--Testcase 581:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 582:\nDELETE FROM FLOAT8_TMP;\n--Testcase 583:\nINSERT INTO FLOAT8_TMP VALUES ('NaN');\n--Testcase 584:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 585:\nDELETE FROM FLOAT8_TMP;\n--Testcase 586:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity');\n--Testcase 587:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 588:\nDELETE FROM FLOAT8_TMP;\n--Testcase 589:\nINSERT INTO FLOAT8_TMP VALUES ('-Infinity');\n--Testcase 590:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 1142:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, f2 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 1143:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1144:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1145:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1146:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1147:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1148:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1149:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1150:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1151:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 591:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 592:\nDELETE FROM FLOAT4_TMP;\n--Testcase 593:\nINSERT INTO FLOAT4_TMP VALUES ('NaN');\n--Testcase 594:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 595:\nDELETE FROM FLOAT4_TMP;\n--Testcase 596:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity');\n--Testcase 597:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 598:\nDELETE FROM FLOAT4_TMP;\n--Testcase 599:\nINSERT INTO FLOAT4_TMP VALUES ('-Infinity');\n--Testcase 600:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 1152:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1153:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1154:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1155:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1156:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1157:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1158:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1159:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1160:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1161:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1162:\nINSERT INTO NUMERIC_TMP VALUES ('42'::int2);\n--Testcase 1163:\nSELECT f1::numeric FROM NUMERIC_TMP;\n\n--Testcase 1164:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1165:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1166:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1167:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1168:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1169:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1170:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1171:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1172:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1173:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1174:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1175:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1176:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1177:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1178:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1179:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1180:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1181:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1182:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1183:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1184:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1185:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1186:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1187:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1188:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1189:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1190:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n-- Simple check that ceil(), floor(), and round() work correctly\n--Testcase 601:\nCREATE FOREIGN TABLE ceil_floor_round (a numeric OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO ceil_floor_round VALUES ('-5.5');\n--Testcase 500:\nINSERT INTO ceil_floor_round VALUES ('-5.499999');\n--Testcase 501:\nINSERT INTO ceil_floor_round VALUES ('9.5');\n--Testcase 502:\nINSERT INTO ceil_floor_round VALUES ('9.4999999');\n--Testcase 503:\nINSERT INTO ceil_floor_round VALUES ('0.0');\n--Testcase 504:\nINSERT INTO ceil_floor_round VALUES ('0.0000001');\n--Testcase 505:\nINSERT INTO ceil_floor_round VALUES ('-0.000001');\n--Testcase 506:\nSELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round ORDER BY a;\n\n-- Check rounding, it should round ties away from zero.\n--Testcase 602:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 603:\nDELETE FROM INT4_TMP;\n--Testcase 604:\nINSERT INTO INT4_TMP SELECT a FROM generate_series(-5,5) a;\n--Testcase 605:\nSELECT f1 as pow,\n\tround((-2.5 * 10 ^ f1)::numeric, -f1),\n\tround((-1.5 * 10 ^ f1)::numeric, -f1),\n\tround((-0.5 * 10 ^ f1)::numeric, -f1),\n\tround((0.5 * 10 ^ f1)::numeric, -f1),\n\tround((1.5 * 10 ^ f1)::numeric, -f1),\n\tround((2.5 * 10 ^ f1)::numeric, -f1)\nFROM INT4_TMP;\n\n-- Testing for width_bucket(). For convenience, we test both the\n-- numeric and float8 versions of the function in this file.\n-- errors\n--Testcase 606:\nCREATE FOREIGN TABLE width_bucket_tbl (\n\tid1 numeric,\n\tid2 numeric,\n\tid3 numeric,\n\tid4 int,\n\tid int OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 607:\nDELETE FROM width_bucket_tbl;\n--Testcase 608:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 609:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 610:\nDELETE FROM width_bucket_tbl;\n--Testcase 611:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 612:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 613:\nDELETE FROM width_bucket_tbl;\n--Testcase 614:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 615:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 616:\nDELETE FROM width_bucket_tbl;\n--Testcase 617:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 618:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 619:\nDELETE FROM width_bucket_tbl;\n--Testcase 620:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 621:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 622:\nDELETE FROM width_bucket_tbl;\n--Testcase 623:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 624:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 625:\nDELETE FROM width_bucket_tbl;\n--Testcase 626:\nINSERT INTO width_bucket_tbl VALUES ('NaN'::numeric, 3.0, 4.0, 888);\n--Testcase 627:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 628:\nDELETE FROM width_bucket_tbl;\n--Testcase 629:\nINSERT INTO width_bucket_tbl VALUES (0, 'NaN'::numeric, 4.0, 888);\n--Testcase 630:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 1191:\nDELETE FROM width_bucket_tbl;\n--Testcase 1192:\nINSERT INTO width_bucket_tbl VALUES (2.0, 3.0, '-inf'::numeric, 888);\n--Testcase 1193:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 1194:\nDELETE FROM width_bucket_tbl;\n--Testcase 1195:\nINSERT INTO width_bucket_tbl VALUES (0, '-inf'::numeric, 4.0 , 888);\n--Testcase 1196:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n-- normal operation\n--Testcase 631:\nCREATE FOREIGN TABLE width_bucket_test (\n\toperand_num numeric OPTIONS (key 'true'),\n\toperand_f8 float8\n) SERVER sqlite_svr;\n\n--COPY width_bucket_test (operand_num) FROM stdin;\n--Testcase 507:\nINSERT INTO width_bucket_test (operand_num) VALUES\n(-5.2),\n(-0.0000000001),\n(0.000000000001),\n(1),\n(1.99999999999999),\n(2),\n(2.00000000000001),\n(3),\n(4),\n(4.5),\n(5),\n(5.5),\n(6),\n(7),\n(8),\n(9),\n(9.99999999999999),\n(10),\n(10.0000000000001);\n\n--Testcase 508:\nUPDATE width_bucket_test SET operand_f8 = operand_num::float8;\n\n--Testcase 509:\nSELECT\n    operand_num,\n    width_bucket(operand_num, 0, 10, 5) AS wb_1,\n    width_bucket(operand_f8, 0, 10, 5) AS wb_1f,\n    width_bucket(operand_num, 10, 0, 5) AS wb_2,\n    width_bucket(operand_f8, 10, 0, 5) AS wb_2f,\n    width_bucket(operand_num, 2, 8, 4) AS wb_3,\n    width_bucket(operand_f8, 2, 8, 4) AS wb_3f,\n    width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,\n    width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,\n    width_bucket(operand_num, -25, 25, 10) AS wb_5,\n    width_bucket(operand_f8, -25, 25, 10) AS wb_5f\n    FROM width_bucket_test;\n\n-- Check positive and negative infinity: we require\n-- finite bucket bounds, but allow an infinite operand\n--Testcase 1197:\nDELETE FROM width_bucket_tbl;\n--Testcase 1198:\nINSERT INTO width_bucket_tbl VALUES (0.0, 'Infinity'::numeric , 5, 10);\n--Testcase 1199:\nSELECT width_bucket(id1::numeric, 'Infinity'::numeric, id3, id4) FROM width_bucket_tbl; -- error\n--Testcase 1200:\nDELETE FROM width_bucket_tbl;\n--Testcase 1201:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, '-Infinity'::numeric, 20);\n--Testcase 1202:\nSELECT width_bucket(id1::numeric, id2, '-Infinity'::numeric, id4) FROM width_bucket_tbl; -- error\n--Testcase 1203:\nDELETE FROM width_bucket_tbl;\n--Testcase 1204:\nINSERT INTO width_bucket_tbl VALUES ('Infinity'::numeric, 1, 10, 10), ('-Infinity'::numeric, 1, 10, 10);\n--Testcase 1205:\nSELECT width_bucket(id1::numeric, id2, id3, id4) FROM width_bucket_tbl;\n--Testcase 510:\nDELETE FROM width_bucket_tbl;\n-- postgres does not support insert 'Infinity' and '-Infinity' as numeric.\n--Testcase 632:\nINSERT INTO width_bucket_tbl VALUES (0.0, 0.0, 5, 10);\n--Testcase 633:\nSELECT width_bucket(id1::float8, 'Infinity'::float8, id3, id4) FROM width_bucket_tbl;  -- error\n\n--Testcase 511:\nDELETE FROM width_bucket_tbl;\n--Testcase 634:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, 0.0, 20);\n--Testcase 635:\nSELECT width_bucket(id1::float8, id2, 'Infinity'::float8, id4) FROM width_bucket_tbl; -- error\n--Testcase 512:\nDELETE FROM width_bucket_tbl;\n--Testcase 636:\nINSERT INTO width_bucket_tbl VALUES (0.0, 1, 10, 10);\n--Testcase 637:\nSELECT width_bucket('Infinity'::float8, id2, id3, id4), width_bucket('-Infinity'::float8, id2, id3, id4) FROM width_bucket_tbl;\n\n-- Simple test for roundoff error when results should be exact\n--Testcase 1445:\nDELETE FROM width_bucket_tbl;\n--Testcase 1446:\nINSERT INTO width_bucket_tbl SELECT x, 10, 100, 9 FROM generate_series(0, 110, 10) x;\n--Testcase 1447:\nSELECT id1, width_bucket(id1::float8, id2, id3, id4) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 1448:\nDELETE FROM width_bucket_tbl;\n--Testcase 1449:\nINSERT INTO width_bucket_tbl SELECT x, 100, 10, 9 FROM generate_series(0, 110, 10) x;       \n--Testcase 1450:\nSELECT id1, width_bucket(id1::float8, 100, 10, 9) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 638:\nDROP FOREIGN TABLE width_bucket_test;\n\n-- TO_CHAR()\n--\n--Testcase 513:\nSELECT to_char(val, '9G999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 514:\nSELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 515:\nSELECT to_char(val, '9999999999999999.999999999999999PR')\n\tFROM num_data;\n\n--Testcase 516:\nSELECT to_char(val, '9999999999999999.999999999999999S')\n\tFROM num_data;\n\n--Testcase 517:\nSELECT to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;\n--Testcase 518:\nSELECT to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;\n--Testcase 519:\nSELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;\n--Testcase 520:\nSELECT to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;\n--Testcase 521:\nSELECT to_char(val, '0999999999999999.999999999999999')       FROM num_data;\n--Testcase 522:\nSELECT to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;\n--Testcase 523:\nSELECT to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;\n--Testcase 524:\nSELECT to_char(val, 'FM9999999999999999.099999999999999') \tFROM num_data;\n--Testcase 525:\nSELECT to_char(val, 'FM9999999999990999.990999999999999') \tFROM num_data;\n--Testcase 526:\nSELECT to_char(val, 'FM0999999999999999.999909999999999') \tFROM num_data;\n--Testcase 527:\nSELECT to_char(val, 'FM9999999990999999.099999999999999') \tFROM num_data;\n--Testcase 528:\nSELECT to_char(val, 'L9999999999999999.099999999999999')\tFROM num_data;\n--Testcase 529:\nSELECT to_char(val, 'FM9999999999999999.99999999999999')\tFROM num_data;\n--Testcase 530:\nSELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 531:\nSELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 532:\nSELECT to_char(val, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM num_data;\n--Testcase 533:\nSELECT to_char(val, '999999SG9999999999')\t\t\tFROM num_data;\n--Testcase 534:\nSELECT to_char(val, 'FM9999999999999999.999999999999999')\tFROM num_data;\n--Testcase 535:\nSELECT to_char(val, '9.999EEEE')\t\t\t\tFROM num_data;\n\n--Testcase 1476:\nDELETE FROM v;\n--Testcase 1477:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1478:\nSELECT x,\n  to_char(x, '9.999EEEE') as numeric,\n  to_char(x::float8, '9.999EEEE') as float8,\n  to_char(x::float4, '9.999EEEE') as float4\nFROM v;\n\n--Testcase 1522:\nDELETE FROM v;\n--Testcase 1523:\nINSERT INTO v(x) VALUES (-16379),(-16378),(-1234),(-789),(-45),(-5),(-4),(-3),(-2),(-1),(0),\n                        (1),(2),(3),(4),(5),(38),(275),(2345),(45678),(131070),(131071);\n--Testcase 1524:\nSELECT x,\n  to_char(('1.2345e'||x)::numeric, '9.999EEEE') as numeric\nFROM v;\n\n--Testcase 1479:\nDELETE FROM v;\n--Testcase 1480:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1481:\nSELECT x,\n  to_char(x, 'MI9999999999.99') as numeric,\n  to_char(x::float8, 'MI9999999999.99') as float8,\n  to_char(x::float4, 'MI9999999999.99') as float4\nFROM v;\n\n--Testcase 1482:\nDELETE FROM v;\n--Testcase 1483:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1484:\nSELECT x,\n  to_char(x, 'MI99.99') as numeric,\n  to_char(x::float8, 'MI99.99') as float8,\n  to_char(x::float4, 'MI99.99') as float4\nFROM v;\n\n--Testcase 536:\nDELETE FROM ceil_floor_round;\n--Testcase 537:\nINSERT INTO ceil_floor_round VALUES ('100'::numeric);\n--Testcase 538:\nSELECT to_char(a, 'FM999.9') FROM ceil_floor_round;\n--Testcase 539:\nSELECT to_char(a, 'FM999.') FROM ceil_floor_round;\n--Testcase 540:\nSELECT to_char(a, 'FM999') FROM ceil_floor_round;\n\n-- Check parsing of literal text in a format string\n--Testcase 541:\nSELECT to_char(a, 'foo999') FROM ceil_floor_round;\n--Testcase 542:\nSELECT to_char(a, 'f\\oo999') FROM ceil_floor_round;\n--Testcase 543:\nSELECT to_char(a, 'f\\\\oo999') FROM ceil_floor_round;\n--Testcase 544:\nSELECT to_char(a, 'f\\\"oo999') FROM ceil_floor_round;\n--Testcase 545:\nSELECT to_char(a, 'f\\\\\"oo999') FROM ceil_floor_round;\n--Testcase 546:\nSELECT to_char(a, 'f\"ool\"999') FROM ceil_floor_round;\n--Testcase 547:\nSELECT to_char(a, 'f\"\\ool\"999') FROM ceil_floor_round;\n--Testcase 548:\nSELECT to_char(a, 'f\"\\\\ool\"999') FROM ceil_floor_round;\n--Testcase 549:\nSELECT to_char(a, 'f\"ool\\\"999') FROM ceil_floor_round;\n--Testcase 550:\nSELECT to_char(a, 'f\"ool\\\\\"999') FROM ceil_floor_round;\n\n-- TO_NUMBER()\n--\n--Testcase 639:\ncreate foreign table to_number_tbl (a text, id int options (key 'true')) server sqlite_svr;\n--Testcase 1211:\nSET lc_numeric = 'C';\n--Testcase 640:\nDELETE FROM to_number_tbl;\n--Testcase 641:\nINSERT INTO to_number_tbl VALUES ('-34,338,492');\n--Testcase 642:\nSELECT to_number(a, '99G999G999') FROM to_number_tbl;\n\n--Testcase 643:\nDELETE FROM to_number_tbl;\n--Testcase 644:\nINSERT INTO to_number_tbl VALUES ('-34,338,492.654,878');\n--Testcase 645:\nSELECT to_number(a, '99G999G999D999G999') FROM to_number_tbl;\n\n--Testcase 646:\nDELETE FROM to_number_tbl;\n--Testcase 647:\nINSERT INTO to_number_tbl VALUES ('<564646.654564>');\n--Testcase 648:\nSELECT to_number(a, '999999.999999PR') FROM to_number_tbl;\n\n--Testcase 649:\nDELETE FROM to_number_tbl;\n--Testcase 650:\nINSERT INTO to_number_tbl VALUES ('0.00001-');\n--Testcase 651:\nSELECT to_number(a, '9.999999S') FROM to_number_tbl;\n\n--Testcase 652:\nDELETE FROM to_number_tbl;\n--Testcase 653:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 654:\nSELECT to_number(a, 'FM9.999999S') FROM to_number_tbl;\n\n--Testcase 655:\nDELETE FROM to_number_tbl;\n--Testcase 656:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 657:\nSELECT to_number(a, 'FM9.999999MI') FROM to_number_tbl;\n\n--Testcase 658:\nDELETE FROM to_number_tbl;\n--Testcase 659:\nINSERT INTO to_number_tbl VALUES ('5 4 4 4 4 8 . 7 8');\n--Testcase 660:\nSELECT to_number(a, '9 9 9 9 9 9 . 9 9') FROM to_number_tbl;\n\n--Testcase 661:\nDELETE FROM to_number_tbl;\n--Testcase 662:\nINSERT INTO to_number_tbl VALUES ('.01');\n--Testcase 663:\nSELECT to_number(a, 'FM9.99') FROM to_number_tbl;\n\n--Testcase 664:\nDELETE FROM to_number_tbl;\n--Testcase 665:\nINSERT INTO to_number_tbl VALUES ('.0');\n--Testcase 666:\nSELECT to_number(a, '99999999.99999999') FROM to_number_tbl;\n\n--Testcase 667:\nDELETE FROM to_number_tbl;\n--Testcase 668:\nINSERT INTO to_number_tbl VALUES ('0');\n--Testcase 669:\nSELECT to_number(a, '99.99') FROM to_number_tbl;\n\n--Testcase 670:\nDELETE FROM to_number_tbl;\n--Testcase 671:\nINSERT INTO to_number_tbl VALUES ('.-01');\n--Testcase 672:\nSELECT to_number(a, 'S99.99') FROM to_number_tbl;\n\n--Testcase 673:\nDELETE FROM to_number_tbl;\n--Testcase 674:\nINSERT INTO to_number_tbl VALUES ('.01-');\n--Testcase 675:\nSELECT to_number(a, '99.99S') FROM to_number_tbl;\n\n--Testcase 676:\nDELETE FROM to_number_tbl;\n--Testcase 677:\nINSERT INTO to_number_tbl VALUES (' . 0 1-');\n--Testcase 678:\nSELECT to_number(a, ' 9 9 . 9 9 S') FROM to_number_tbl;\n\n--Testcase 679:\nDELETE FROM to_number_tbl;\n--Testcase 680:\nINSERT INTO to_number_tbl VALUES ('34,50');\n--Testcase 681:\nSELECT to_number(a,'999,99') FROM to_number_tbl;\n\n--Testcase 682:\nDELETE FROM to_number_tbl;\n--Testcase 683:\nINSERT INTO to_number_tbl VALUES ('123,000');\n--Testcase 684:\nSELECT to_number(a,'999G') FROM to_number_tbl;\n\n--Testcase 685:\nDELETE FROM to_number_tbl;\n--Testcase 686:\nINSERT INTO to_number_tbl VALUES ('123456');\n--Testcase 687:\nSELECT to_number(a,'999G999') FROM to_number_tbl;\n\n--Testcase 688:\nDELETE FROM to_number_tbl;\n--Testcase 689:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 690:\nSELECT to_number(a,'L9,999.99') FROM to_number_tbl;\n\n--Testcase 691:\nDELETE FROM to_number_tbl;\n--Testcase 692:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 693:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 694:\nDELETE FROM to_number_tbl;\n--Testcase 695:\nINSERT INTO to_number_tbl VALUES ('$1,234.56');\n--Testcase 696:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 697:\nDELETE FROM to_number_tbl;\n--Testcase 698:\nINSERT INTO to_number_tbl VALUES ('1234.56');\n--Testcase 699:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 700:\nDELETE FROM to_number_tbl;\n--Testcase 701:\nINSERT INTO to_number_tbl VALUES ('1,234.56');\n--Testcase 702:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 703:\nDELETE FROM to_number_tbl;\n--Testcase 704:\nINSERT INTO to_number_tbl VALUES ('42nd');\n--Testcase 705:\nSELECT to_number(a, '99th') FROM to_number_tbl;\n\n--Testcase 1212:\nRESET lc_numeric;\n--\n-- Input syntax\n--\n\n--Testcase 706:\nCREATE FOREIGN TABLE num_input_test (n1 numeric) SERVER sqlite_svr;\n\n-- good inputs\n--Testcase 551:\nINSERT INTO num_input_test(n1) VALUES (' 123');\n--Testcase 552:\nINSERT INTO num_input_test(n1) VALUES ('   3245874    ');\n--Testcase 553:\nINSERT INTO num_input_test(n1) VALUES ('  -93853');\n--Testcase 554:\nINSERT INTO num_input_test(n1) VALUES ('555.50');\n--Testcase 555:\nINSERT INTO num_input_test(n1) VALUES ('-555.50');\n--Testcase 556:\nINSERT INTO num_input_test(n1) VALUES ('NaN ');\n--Testcase 557:\nINSERT INTO num_input_test(n1) VALUES ('        nan');\n--Testcase 1213:\nINSERT INTO num_input_test(n1) VALUES (' inf ');\n--Testcase 1214:\nINSERT INTO num_input_test(n1) VALUES (' +inf ');\n--Testcase 1215:\nINSERT INTO num_input_test(n1) VALUES (' -inf ');\n--Testcase 1216:\nINSERT INTO num_input_test(n1) VALUES (' Infinity ');\n--Testcase 1217:\nINSERT INTO num_input_test(n1) VALUES (' +inFinity ');\n--Testcase 1218:\nINSERT INTO num_input_test(n1) VALUES (' -INFINITY ');\n\n-- bad inputs\n--Testcase 558:\nINSERT INTO num_input_test(n1) VALUES ('     ');\n--Testcase 559:\nINSERT INTO num_input_test(n1) VALUES ('   1234   %');\n--Testcase 560:\nINSERT INTO num_input_test(n1) VALUES ('xyz');\n--Testcase 561:\nINSERT INTO num_input_test(n1) VALUES ('- 1234');\n--Testcase 562:\nINSERT INTO num_input_test(n1) VALUES ('5 . 0');\n--Testcase 563:\nINSERT INTO num_input_test(n1) VALUES ('5. 0   ');\n--Testcase 564:\nINSERT INTO num_input_test(n1) VALUES ('');\n--Testcase 565:\nINSERT INTO num_input_test(n1) VALUES (' N aN ');\n--Testcase 1219:\nINSERT INTO num_input_test(n1) VALUES ('+ infinity');\n\n--Testcase 566:\nSELECT * FROM num_input_test;\n\n--\n-- Test precision and scale typemods\n--\n\n--Testcase 1557:\nCREATE FOREIGN TABLE num_typemod_test (\n  millions numeric(3, -6),\n  thousands numeric(3, -3),\n  units numeric(3, 0),\n  thousandths numeric(3, 3),\n  millionths numeric(3, 6)\n) SERVER sqlite_svr;\n--Testcase 1558:\n\\d num_typemod_test\n\n-- rounding of valid inputs\n--Testcase 1559:\nINSERT INTO num_typemod_test VALUES (123456, 123, 0.123, 0.000123, 0.000000123);\n--Testcase 1560:\nINSERT INTO num_typemod_test VALUES (654321, 654, 0.654, 0.000654, 0.000000654);\n--Testcase 1561:\nINSERT INTO num_typemod_test VALUES (2345678, 2345, 2.345, 0.002345, 0.000002345);\n--Testcase 1562:\nINSERT INTO num_typemod_test VALUES (7654321, 7654, 7.654, 0.007654, 0.000007654);\n--Testcase 1563:\nINSERT INTO num_typemod_test VALUES (12345678, 12345, 12.345, 0.012345, 0.000012345);\n--Testcase 1564:\nINSERT INTO num_typemod_test VALUES (87654321, 87654, 87.654, 0.087654, 0.000087654);\n--Testcase 1565:\nINSERT INTO num_typemod_test VALUES (123456789, 123456, 123.456, 0.123456, 0.000123456);\n--Testcase 1566:\nINSERT INTO num_typemod_test VALUES (987654321, 987654, 987.654, 0.987654, 0.000987654);\n--Testcase 1567:\nINSERT INTO num_typemod_test VALUES ('NaN', 'NaN', 'NaN', 'NaN', 'NaN');\n\n--Testcase 1568:\nSELECT scale(millions), * FROM num_typemod_test ORDER BY millions;\n\n-- invalid inputs\n--Testcase 1569:\nINSERT INTO num_typemod_test (millions) VALUES ('inf');\n--Testcase 1570:\nINSERT INTO num_typemod_test (millions) VALUES (999500000);\n--Testcase 1571:\nINSERT INTO num_typemod_test (thousands) VALUES (999500);\n--Testcase 1572:\nINSERT INTO num_typemod_test (units) VALUES (999.5);\n--Testcase 1573:\nINSERT INTO num_typemod_test (thousandths) VALUES (0.9995);\n--Testcase 1574:\nINSERT INTO num_typemod_test (millionths) VALUES (0.0009995);\n\n--\n-- Test some corner cases for multiplication\n--\n--Testcase 707:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO num_tmp VALUES (4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 709:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 710:\nDELETE FROM num_tmp;\n--Testcase 711:\nINSERT INTO num_tmp VALUES (4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 712:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 713:\nDELETE FROM num_tmp;\n--Testcase 714:\nINSERT INTO num_tmp VALUES (4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 715:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 716:\nDELETE FROM num_tmp;\n--Testcase 717:\nINSERT INTO num_tmp VALUES (4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 718:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 1525:\nDELETE FROM num_tmp;\n--Testcase 1526:\nINSERT INTO num_tmp VALUES ((0.1 - 2e-16383), (0.1 - 3e-16383));\n--Testcase 1527:\nSELECT trim_scale(n1 * n2) FROM num_tmp;\n\n--\n-- Test some corner cases for division\n--\n--Testcase 719:\nDELETE FROM num_tmp;\n--Testcase 720:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 721:\nSELECT n1::numeric / n2 FROM num_tmp;\n\n--Testcase 722:\nDELETE FROM num_tmp;\n--Testcase 723:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 724:\nSELECT div(n1::numeric, n2) FROM num_tmp;\n--Testcase 725:\nSELECT mod(n1::numeric, n2) FROM num_tmp;\n--Testcase 726:\nSELECT div(-n1::numeric, n2) FROM num_tmp;\n--Testcase 727:\nSELECT mod(-n1::numeric, n2) FROM num_tmp;\n--Testcase 728:\nselect div(-n1::numeric,n2)*n2 + mod(-n1::numeric,n2) FROM num_tmp;\n\n--Testcase 729:\nDELETE FROM num_tmp;\n--Testcase 730:\nINSERT INTO num_tmp VALUES (70.0,70);\n--Testcase 731:\nselect mod (n1, n2) FROM num_tmp;\n--Testcase 732:\nselect div (n1, n2) FROM num_tmp;\n--Testcase 733:\nselect n1 / n2 FROM num_tmp;\n\n--Testcase 734:\nDELETE FROM num_tmp;\n--Testcase 735:\nINSERT INTO num_tmp VALUES (12345678901234567890, 123);\n--Testcase 736:\nselect n1 % n2 FROM num_tmp;\n--Testcase 737:\nselect n1 / n2 FROM num_tmp;\n--Testcase 738:\nselect div(n1, n2) FROM num_tmp;\n--Testcase 739:\nselect div(n1, n2) * n2 + n1 % n2 FROM num_tmp;\n\n--\n-- Test some corner cases for square root\n--\n--Testcase 740:\nDELETE FROM num_tmp;\n--Testcase 741:\nINSERT INTO num_tmp VALUES (1.000000000000003::numeric);\n--Testcase 742:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 743:\nDELETE FROM num_tmp;\n--Testcase 744:\nINSERT INTO num_tmp VALUES (1.000000000000004::numeric);\n--Testcase 745:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 746:\nDELETE FROM num_tmp;\n--Testcase 747:\nINSERT INTO num_tmp VALUES (96627521408608.56340355805::numeric);\n--Testcase 748:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 749:\nDELETE FROM num_tmp;\n--Testcase 750:\nINSERT INTO num_tmp VALUES (96627521408608.56340355806::numeric);\n--Testcase 751:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 752:\nDELETE FROM num_tmp;\n--Testcase 753:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290367::numeric);\n--Testcase 754:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 755:\nDELETE FROM num_tmp;\n--Testcase 756:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290368::numeric);\n--Testcase 757:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 758:\nDELETE FROM num_tmp;\n--Testcase 759:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900306::numeric);\n--Testcase 760:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 761:\nDELETE FROM num_tmp;\n--Testcase 762:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900307::numeric);\n--Testcase 763:\nSELECT sqrt(n1) FROM num_tmp;\n\n--\n-- Test code path for raising to integer powers\n--\n--Testcase 764:\nDELETE FROM num_tmp;\n--Testcase 765:\nINSERT INTO num_tmp VALUES (10.0, -2147483648);\n--Testcase 766:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 767:\nDELETE FROM num_tmp;\n--Testcase 768:\nINSERT INTO num_tmp VALUES (10.0, -2147483647);\n--Testcase 769:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 770:\nDELETE FROM num_tmp;\n--Testcase 771:\nINSERT INTO num_tmp VALUES (10.0, 2147483647);\n--Testcase 772:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n--Testcase 773:\nDELETE FROM num_tmp;\n--Testcase 774:\nINSERT INTO num_tmp VALUES (117743296169.0, -1000000000);\n--Testcase 775:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n-- cases that used to return inaccurate results\n\n--Testcase 776:\nDELETE FROM num_tmp;\n--Testcase 777:\nINSERT INTO num_tmp VALUES (3.789, 21);\n--Testcase 778:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 779:\nDELETE FROM num_tmp;\n--Testcase 780:\nINSERT INTO num_tmp VALUES (3.789, 35);\n--Testcase 781:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 782:\nDELETE FROM num_tmp;\n--Testcase 783:\nINSERT INTO num_tmp VALUES (1.2, 345);\n--Testcase 784:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 785:\nDELETE FROM num_tmp;\n--Testcase 786:\nINSERT INTO num_tmp VALUES (0.12, (-20));\n--Testcase 787:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1220:\nDELETE FROM num_tmp;\n--Testcase 1221:\nINSERT INTO num_tmp VALUES (1.000000000123, (-2147483648));\n--Testcase 1222:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1528:\nDELETE FROM num_tmp;\n--Testcase 1529:\nINSERT INTO num_tmp VALUES (0.9999999999, 23300000000000);\n--Testcase 1530:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n--Testcase 1575:\nDELETE FROM num_tmp;\n--Testcase 1576:\nINSERT INTO num_tmp VALUES ((1 - 1.500012345678e-1000), 1.45e1003);\n--Testcase 1577:\nSELECT round(((1 - 1.500012345678e-1000) ^ 1.45e1003) * 1e1000) FROM num_tmp;\n\n-- cases that used to error out\n--Testcase 788:\nDELETE FROM num_tmp;\n--Testcase 789:\nINSERT INTO num_tmp VALUES (0.12, (-25));\n--Testcase 790:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 791:\nDELETE FROM num_tmp;\n--Testcase 792:\nINSERT INTO num_tmp VALUES (0.5678, (-85));\n--Testcase 793:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1531:\nDELETE FROM num_tmp;\n--Testcase 1532:\nINSERT INTO num_tmp VALUES (0.9999999999, 70000000000000);\n--Testcase 1533:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n-- negative base to integer powers\n--Testcase 1534:\nDELETE FROM num_tmp;\n--Testcase 1535:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483646);\n--Testcase 1536:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1537:\nDELETE FROM num_tmp;\n--Testcase 1538:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483647);\n--Testcase 1539:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1540:\nDELETE FROM num_tmp;\n--Testcase 1541:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483648);\n--Testcase 1542:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1543:\nDELETE FROM num_tmp;\n--Testcase 1544:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000000);\n--Testcase 1545:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1546:\nDELETE FROM num_tmp;\n--Testcase 1547:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000001);\n--Testcase 1548:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for raising to non-integer powers\n--\n\n-- special cases\n--Testcase 794:\nDELETE FROM num_tmp;\n--Testcase 795:\nINSERT INTO num_tmp VALUES (0.0, 0.0);\n--Testcase 796:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 797:\nDELETE FROM num_tmp;\n--Testcase 798:\nINSERT INTO num_tmp VALUES ((-12.34), 0.0);\n--Testcase 799:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 800:\nDELETE FROM num_tmp;\n--Testcase 801:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 802:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 803:\nDELETE FROM num_tmp;\n--Testcase 804:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 805:\nselect n1 ^ n2 FROM num_tmp;\n\n-- NaNs\n--Testcase 806:\nDELETE FROM num_tmp;\n--Testcase 807:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 'NaN'::numeric);\n--Testcase 808:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 809:\nDELETE FROM num_tmp;\n--Testcase 810:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 0);\n--Testcase 811:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 812:\nDELETE FROM num_tmp;\n--Testcase 813:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 1);\n--Testcase 814:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 815:\nDELETE FROM num_tmp;\n--Testcase 816:\nINSERT INTO num_tmp VALUES (0, 'NaN'::numeric);\n--Testcase 817:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 818:\nDELETE FROM num_tmp;\n--Testcase 819:\nINSERT INTO num_tmp VALUES (1, 'NaN'::numeric);\n--Testcase 820:\nselect n1 ^ n2 FROM num_tmp;\n\n-- invalid inputs\n--Testcase 821:\nDELETE FROM num_tmp;\n--Testcase 822:\nINSERT INTO num_tmp VALUES (0.0, (-12.34));\n--Testcase 823:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 824:\nDELETE FROM num_tmp;\n--Testcase 825:\nINSERT INTO num_tmp VALUES ((-12.34), 1.2);\n--Testcase 826:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 827:\nDELETE FROM num_tmp;\n--Testcase 828:\nINSERT INTO num_tmp VALUES (32.1, 9.8);\n--Testcase 829:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 830:\nDELETE FROM num_tmp;\n--Testcase 831:\nINSERT INTO num_tmp VALUES (32.1, (-9.8));\n--Testcase 832:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 833:\nDELETE FROM num_tmp;\n--Testcase 834:\nINSERT INTO num_tmp VALUES (12.3, 45.6);\n--Testcase 835:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 836:\nDELETE FROM num_tmp;\n--Testcase 837:\nINSERT INTO num_tmp VALUES (12.3, (-45.6));\n--Testcase 838:\nselect n1 ^ n2 FROM num_tmp;\n\n-- big test\n--Testcase 839:\nDELETE FROM num_tmp;\n--Testcase 840:\nINSERT INTO num_tmp VALUES (1.234, 5678);\n--Testcase 841:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for EXP()\n--\n\n-- special cases\n--Testcase 842:\nDELETE FROM num_tmp;\n--Testcase 843:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 844:\nselect exp(n1) from num_tmp;\n\n--Testcase 845:\nDELETE FROM num_tmp;\n--Testcase 846:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 847:\nselect exp(n1) from num_tmp;\n\n--Testcase 848:\nDELETE FROM num_tmp;\n--Testcase 849:\nINSERT INTO num_tmp VALUES (1.0::numeric(71,70));\n--Testcase 850:\nselect exp(n1) from num_tmp;\n\n--Testcase 1223:\nDELETE FROM num_tmp;\n--Testcase 1224:\nINSERT INTO num_tmp VALUES ('nan'::numeric);\n--Testcase 1225:\nselect exp(n1) from num_tmp;\n\n--Testcase 1226:\nDELETE FROM num_tmp;\n--Testcase 1227:\nINSERT INTO num_tmp VALUES ('inf'::numeric);\n--Testcase 1228:\nselect exp(n1) from num_tmp;\n\n--Testcase 1229:\nDELETE FROM num_tmp;\n--Testcase 1230:\nINSERT INTO num_tmp VALUES ('-inf'::numeric);\n--Testcase 1231:\nselect exp(n1) from num_tmp;\n\n--Testcase 1549:\nDELETE FROM num_tmp;\n--Testcase 1550:\nINSERT INTO num_tmp VALUES ('-5000'::numeric);\n--Testcase 1551:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n--Testcase 1552:\nDELETE FROM num_tmp;\n--Testcase 1553:\nINSERT INTO num_tmp VALUES ('-10000'::numeric);\n--Testcase 1554:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 851:\nDELETE FROM num_tmp;\n--Testcase 852:\nINSERT INTO num_tmp VALUES (32.999);\n--Testcase 853:\nselect exp(n1) from num_tmp;\n\n--Testcase 854:\nDELETE FROM num_tmp;\n--Testcase 855:\nINSERT INTO num_tmp VALUES (-32.999);\n--Testcase 856:\nselect exp(n1) from num_tmp;\n\n--Testcase 857:\nDELETE FROM num_tmp;\n--Testcase 858:\nINSERT INTO num_tmp VALUES (123.456);\n--Testcase 859:\nselect exp(n1) from num_tmp;\n\n--Testcase 860:\nDELETE FROM num_tmp;\n--Testcase 861:\nINSERT INTO num_tmp VALUES (-123.456);\n--Testcase 862:\nselect exp(n1) from num_tmp;\n\n-- big test\n--Testcase 863:\nDELETE FROM num_tmp;\n--Testcase 864:\nINSERT INTO num_tmp VALUES (1234.5678);\n--Testcase 865:\nselect exp(n1) from num_tmp;\n\n--\n-- Tests for generate_series\n--\n--Testcase 866:\nDELETE FROM num_tmp;\n--Testcase 867:\nINSERT INTO num_tmp select * from generate_series(0.0::numeric, 4.0::numeric);\n--Testcase 868:\nSELECT n1 FROM num_tmp;\n\n--Testcase 869:\nDELETE FROM num_tmp;\n--Testcase 870:\nINSERT INTO num_tmp select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);\n--Testcase 871:\nSELECT n1 FROM num_tmp;\n\n--Testcase 872:\nDELETE FROM num_tmp;\n--Testcase 873:\nINSERT INTO num_tmp select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);\n--Testcase 874:\nSELECT n1 FROM num_tmp;\n\n-- Trigger errors\n--Testcase 875:\nDELETE FROM num_tmp;\n--Testcase 876:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 0::numeric);\n--Testcase 877:\nSELECT n1 FROM num_tmp;\n\n--Testcase 878:\nDELETE FROM num_tmp;\n--Testcase 879:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);\n--Testcase 880:\nSELECT n1 FROM num_tmp;\n\n--Testcase 881:\nDELETE FROM num_tmp;\n--Testcase 882:\nINSERT INTO num_tmp select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);\n--Testcase 883:\nSELECT n1 FROM num_tmp;\n\n--Testcase 884:\nDELETE FROM num_tmp;\n--Testcase 885:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);\n--Testcase 886:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1232:\nDELETE FROM num_tmp;\n--Testcase 1233:\nINSERT INTO num_tmp select * from generate_series('inf'::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1234:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1235:\nDELETE FROM num_tmp;\n--Testcase 1236:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1237:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1238:\nDELETE FROM num_tmp;\n--Testcase 1239:\nINSERT INTO num_tmp select * from generate_series(0::numeric, '42'::numeric, '-inf'::numeric);\n--Testcase 1240:\nSELECT n2 FROM num_tmp;\n\n-- Checks maximum, output is truncated\n--Testcase 887:\nDELETE FROM num_tmp;\n--Testcase 888:\nINSERT INTO num_tmp select (i / (10::numeric ^ 131071))::numeric(1,0)\n        from generate_series(6 * (10::numeric ^ 131071),\n                             9 * (10::numeric ^ 131071),\n                             10::numeric ^ 131071) i;\n--Testcase 889:\nSELECT n1 FROM num_tmp;\n                            \n-- Check usage with variables\n--Testcase 890:\nDELETE FROM num_tmp;\n--Testcase 891:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;\n--Testcase 892:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 893:\nDELETE FROM num_tmp;\n--Testcase 894:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;\n--Testcase 895:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 896:\nDELETE FROM num_tmp;\n--Testcase 897:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;\n--Testcase 898:\nSELECT n1, n2 FROM num_tmp;\n\n--\n-- Tests for LN()\n--\n\n-- Invalid inputs\n--Testcase 899:\nDELETE FROM num_tmp;\n--Testcase 900:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 901:\nselect ln(n1) from num_tmp;\n\n--Testcase 902:\nDELETE FROM num_tmp;\n--Testcase 903:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 904:\nselect ln(n1) from num_tmp;\n\n-- Some random tests\n--Testcase 905:\nDELETE FROM num_tmp;\n--Testcase 906:\nINSERT INTO num_tmp VALUES (1.2345678e-28);\n--Testcase 907:\nselect ln(n1) from num_tmp;\n\n--Testcase 908:\nDELETE FROM num_tmp;\n--Testcase 909:\nINSERT INTO num_tmp VALUES (0.0456789);\n--Testcase 910:\nselect ln(n1) from num_tmp;\n\n--Testcase 911:\nDELETE FROM num_tmp;\n--Testcase 912:\nINSERT INTO num_tmp VALUES (0.349873948359354029493948309745709580730482050975);\n--Testcase 913:\nselect ln(n1) from num_tmp;\n\n--Testcase 914:\nDELETE FROM num_tmp;\n--Testcase 915:\nINSERT INTO num_tmp VALUES (0.99949452);\n--Testcase 916:\nselect ln(n1) from num_tmp;\n\n--Testcase 917:\nDELETE FROM num_tmp;\n--Testcase 918:\nINSERT INTO num_tmp VALUES (1.00049687395);\n--Testcase 919:\nselect ln(n1) from num_tmp;\n\n--Testcase 920:\nDELETE FROM num_tmp;\n--Testcase 921:\nINSERT INTO num_tmp VALUES (1234.567890123456789);\n--Testcase 922:\nselect ln(n1) from num_tmp;\n\n--Testcase 923:\nDELETE FROM num_tmp;\n--Testcase 924:\nINSERT INTO num_tmp VALUES (5.80397490724e5);\n--Testcase 925:\nselect ln(n1) from num_tmp;\n\n--Testcase 926:\nDELETE FROM num_tmp;\n--Testcase 927:\nINSERT INTO num_tmp VALUES (9.342536355e34);\n--Testcase 928:\nselect ln(n1) from num_tmp;\n\n--\n-- Tests for LOG() (base 10)\n--\n\n-- invalid inputs\n--Testcase 929:\nDELETE FROM num_tmp;\n--Testcase 930:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 931:\nselect log(n1) from num_tmp;\n\n--Testcase 932:\nDELETE FROM num_tmp;\n--Testcase 933:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 934:\nselect log(n1) from num_tmp;\n\n-- some random tests\n--Testcase 935:\nDELETE FROM num_tmp;\n--Testcase 936:\nINSERT INTO num_tmp VALUES (1.234567e-89);\n--Testcase 937:\nselect log(n1) from num_tmp;\n\n--Testcase 938:\nDELETE FROM num_tmp;\n--Testcase 939:\nINSERT INTO num_tmp VALUES (3.4634998359873254962349856073435545);\n--Testcase 940:\nselect log(n1) from num_tmp;\n\n--Testcase 941:\nDELETE FROM num_tmp;\n--Testcase 942:\nINSERT INTO num_tmp VALUES (9.999999999999999999);\n--Testcase 943:\nselect log(n1) from num_tmp;\n\n--Testcase 944:\nDELETE FROM num_tmp;\n--Testcase 945:\nINSERT INTO num_tmp VALUES (10.00000000000000000);\n--Testcase 946:\nselect log(n1) from num_tmp;\n\n--Testcase 947:\nDELETE FROM num_tmp;\n--Testcase 948:\nINSERT INTO num_tmp VALUES (10.00000000000000001);\n--Testcase 949:\nselect log(n1) from num_tmp;\n\n--Testcase 950:\nDELETE FROM num_tmp;\n--Testcase 951:\nINSERT INTO num_tmp VALUES (590489.45235237);\n--Testcase 952:\nselect log(n1) from num_tmp;\n\n--\n-- Tests for LOG() (arbitrary base)\n--\n\n-- invalid inputs\n--Testcase 953:\nDELETE FROM num_tmp;\n--Testcase 954:\nINSERT INTO num_tmp VALUES (-12.34, 56.78);\n--Testcase 955:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 956:\nDELETE FROM num_tmp;\n--Testcase 957:\nINSERT INTO num_tmp VALUES (-12.34, -56.78);\n--Testcase 958:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 959:\nDELETE FROM num_tmp;\n--Testcase 960:\nINSERT INTO num_tmp VALUES (12.34, -56.78);\n--Testcase 961:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 962:\nDELETE FROM num_tmp;\n--Testcase 963:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 964:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 965:\nDELETE FROM num_tmp;\n--Testcase 966:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 967:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 968:\nDELETE FROM num_tmp;\n--Testcase 969:\nINSERT INTO num_tmp VALUES (.0, 12.34);\n--Testcase 970:\nselect log(n1, n2) from num_tmp;\n\n-- some random tests\n--Testcase 971:\nDELETE FROM num_tmp;\n--Testcase 972:\nINSERT INTO num_tmp VALUES (1.23e-89, 6.4689e45);\n--Testcase 973:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 974:\nDELETE FROM num_tmp;\n--Testcase 975:\nINSERT INTO num_tmp VALUES (0.99923, 4.58934e34);\n--Testcase 976:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 977:\nDELETE FROM num_tmp;\n--Testcase 978:\nINSERT INTO num_tmp VALUES (1.000016, 8.452010e18);\n--Testcase 979:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 980:\nDELETE FROM num_tmp;\n--Testcase 981:\nINSERT INTO num_tmp VALUES (3.1954752e47, 9.4792021e-73);\n--Testcase 982:\nselect log(n1, n2) from num_tmp;\n\n--\n-- Tests for scale()\n--\n--Testcase 983:\nDELETE FROM num_tmp;\n--Testcase 984:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 985:\nselect scale(n1) from num_tmp;\n\n--Testcase 1241:\nDELETE FROM num_tmp;\n--Testcase 1242:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1243:\nselect scale(n1) from num_tmp;\n\n--Testcase 986:\nDELETE FROM num_tmp;\n--Testcase 987:\nINSERT INTO num_tmp VALUES (NULL::numeric);\n--Testcase 988:\nselect scale(n1) from num_tmp;\n\n--Testcase 989:\nDELETE FROM num_tmp;\n--Testcase 990:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 991:\nselect scale(n1) from num_tmp;\n\n--Testcase 992:\nDELETE FROM num_tmp;\n--Testcase 993:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 994:\nselect scale(n1) from num_tmp;\n\n--Testcase 995:\nDELETE FROM num_tmp;\n--Testcase 996:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 997:\nselect scale(n1) from num_tmp;\n\n--Testcase 998:\nDELETE FROM num_tmp;\n--Testcase 999:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1000:\nselect scale(n1) from num_tmp;\n\n--Testcase 1001:\nDELETE FROM num_tmp;\n--Testcase 1002:\nINSERT INTO num_tmp VALUES (110123.12475871856128);\n--Testcase 1003:\nselect scale(n1) from num_tmp;\n\n--Testcase 1004:\nDELETE FROM num_tmp;\n--Testcase 1005:\nINSERT INTO num_tmp VALUES (-1123.12471856128);\n--Testcase 1006:\nselect scale(n1) from num_tmp;\n\n--Testcase 1007:\nDELETE FROM num_tmp;\n--Testcase 1008:\nINSERT INTO num_tmp VALUES (-13.000000000000000);\n--Testcase 1009:\nselect scale(n1) from num_tmp;\n\n--\n-- Tests for min_scale()\n--\n--Testcase 1010:\nDELETE FROM num_tmp;\n--Testcase 1011:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1012:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1244:\nDELETE FROM num_tmp;\n--Testcase 1245:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1246:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1013:\nDELETE FROM num_tmp;\n--Testcase 1014:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1015:\nselect min_scale(n1) from num_tmp;                     -- no digits\n\n--Testcase 1016:\nDELETE FROM num_tmp;\n--Testcase 1017:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1018:\nselect min_scale(n1) from num_tmp;                  -- no digits again\n\n--Testcase 1019:\nDELETE FROM num_tmp;\n--Testcase 1020:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 1021:\nselect min_scale(n1) from num_tmp;                   -- no scale\n\n--Testcase 1022:\nDELETE FROM num_tmp;\n--Testcase 1023:\nINSERT INTO num_tmp VALUES (1.1);\n--Testcase 1024:\nselect min_scale(n1) from num_tmp;                   -- scale 1\n\n--Testcase 1025:\nDELETE FROM num_tmp;\n--Testcase 1026:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 1027:\nselect min_scale(n1) from num_tmp;                  -- scale 2\n\n--Testcase 1028:\nDELETE FROM num_tmp;\n--Testcase 1029:\nINSERT INTO num_tmp VALUES (1.123);\n--Testcase 1030:\nselect min_scale(n1) from num_tmp;                 -- scale 3\n\n--Testcase 1031:\nDELETE FROM num_tmp;\n--Testcase 1032:\nINSERT INTO num_tmp VALUES (1.1234);\n--Testcase 1033:\nselect min_scale(n1) from num_tmp;                -- scale 4, filled digit\n\n--Testcase 1034:\nDELETE FROM num_tmp;\n--Testcase 1035:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1036:\nselect min_scale(n1) from num_tmp;               -- scale 5, 2 NDIGITS\n\n--Testcase 1037:\nDELETE FROM num_tmp;\n--Testcase 1038:\nINSERT INTO num_tmp VALUES (1.1000);\n--Testcase 1039:\nselect min_scale(n1) from num_tmp;                -- 1 pos in NDIGITS\n\n--Testcase 1040:\nDELETE FROM num_tmp;\n--Testcase 1041:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1042:\nselect min_scale(n1) from num_tmp;                 -- very big number\n\n--\n-- Tests for trim_scale()\n--\n--Testcase 1043:\nDELETE FROM num_tmp;\n--Testcase 1044:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1045:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1247:\nDELETE FROM num_tmp;\n--Testcase 1248:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1249:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1046:\nDELETE FROM num_tmp;\n--Testcase 1047:\nINSERT INTO num_tmp VALUES (1.120);\n--Testcase 1048:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1049:\nDELETE FROM num_tmp;\n--Testcase 1050:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1051:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1052:\nDELETE FROM num_tmp;\n--Testcase 1053:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1054:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1055:\nDELETE FROM num_tmp;\n--Testcase 1056:\nINSERT INTO num_tmp VALUES (1.1234500);\n--Testcase 1057:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1058:\nDELETE FROM num_tmp;\n--Testcase 1059:\nINSERT INTO num_tmp VALUES (110123.12475871856128000);\n--Testcase 1060:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1061:\nDELETE FROM num_tmp;\n--Testcase 1062:\nINSERT INTO num_tmp VALUES (-123.124718561280000000);\n--Testcase 1063:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1064:\nDELETE FROM num_tmp;\n--Testcase 1065:\nINSERT INTO num_tmp VALUES (-13.00000000000000000000);\n--Testcase 1066:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1067:\nDELETE FROM num_tmp;\n--Testcase 1068:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1069:\nselect trim_scale(n1) from num_tmp;\n\n--\n-- Tests for SUM()\n--\n\n-- cases that need carry propagation\n--Testcase 1070:\nDELETE FROM num_tmp;\n--Testcase 1071:\nINSERT INTO num_tmp SELECT * FROM generate_series(1, 100000);\n--Testcase 1072:\nSELECT SUM(9999::numeric) FROM num_tmp;\n--Testcase 1073:\nSELECT SUM((-9999)::numeric) FROM num_tmp;\n\n--\n-- Tests for VARIANCE()\n--\n--Testcase 1578:\nINSERT INTO num_variance VALUES (0);\n--Testcase 1579:\nINSERT INTO num_variance VALUES (3e-500);\n--Testcase 1580:\nINSERT INTO num_variance VALUES (-3e-500);\n--Testcase 1581:\nINSERT INTO num_variance VALUES (4e-500 - 1e-16383);\n--Testcase 1582:\nINSERT INTO num_variance VALUES (-4e-500 + 1e-16383);\n-- variance is just under 12.5e-1000 and so should round down to 12e-1000\n--Testcase 1583:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1584:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\nROLLBACK;\n\n-- case where sum of squares would overflow but variance does not\n--Testcase 1585:\nDELETE FROM num_variance;\n--Testcase 1586:\nINSERT INTO num_variance SELECT 9e131071 + x FROM generate_series(1, 5) x;\n--Testcase 1587:\nSELECT variance(a) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1588:\nSELECT variance(a) FROM num_variance;\nROLLBACK;\n\n--\n-- Tests for GCD()\n--\n--Testcase 1074:\nDELETE FROM num_tmp;\n--Testcase 1075:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 46375::numeric),\n             (433125::numeric, 46375::numeric),\n             (43312.5::numeric, 4637.5::numeric),\n             (4331.250::numeric, 463.75000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n\n--Testcase 1076:\nSELECT n1 as a, n2 as b, gcd(n1, n2), gcd(n1, -n2), gcd(-n2, n1), gcd(-n2, -n1) FROM num_tmp;\n--\n-- Tests for LCM()\n--\n--Testcase 1077:\nDELETE FROM num_tmp;\n--Testcase 1078:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 13272::numeric),\n             (13272::numeric, 13272::numeric),\n             (423282::numeric, 13272::numeric),\n             (42328.2::numeric, 1327.2::numeric),\n             (4232.820::numeric, 132.72000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n--Testcase 1079:\nSELECT n1 as a, n2 as b, lcm(n1, n2), lcm(n1, -n2), lcm(-n2, n1), lcm(-n2, -n1) FROM num_tmp;\n\n--Testcase 1080:\nDELETE FROM num_tmp;\n--Testcase 1081:\nINSERT INTO num_tmp VALUES (10::numeric, 131068); \n--Testcase 1082:\nSELECT lcm(9999 * (n1)^n2 + (n1^n2 - 1), 2) FROM num_tmp; -- overflow\n\n--\n-- Tests for factorial\n--\n--Testcase 1250:\nDELETE FROM num_tmp;\n--Testcase 1251:\nINSERT INTO num_tmp VALUES (4); \n--Testcase 1252:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1253:\nDELETE FROM num_tmp;\n--Testcase 1254:\nINSERT INTO num_tmp VALUES (15); \n--Testcase 1255:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1256:\nDELETE FROM num_tmp;\n--Testcase 1257:\nINSERT INTO num_tmp VALUES (100000); \n--Testcase 1258:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1259:\nDELETE FROM num_tmp;\n--Testcase 1260:\nINSERT INTO num_tmp VALUES (0); \n--Testcase 1261:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1262:\nDELETE FROM num_tmp;\n--Testcase 1263:\nINSERT INTO num_tmp VALUES (-4); \n--Testcase 1264:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--\n-- Tests for pg_lsn()\n--\n--Testcase 1265:\nDELETE FROM num_tmp;\n--Testcase 1266:\nINSERT INTO num_tmp VALUES (23783416::numeric); \n--Testcase 1267:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1268:\nDELETE FROM num_tmp;\n--Testcase 1269:\nINSERT INTO num_tmp VALUES (0::numeric); \n--Testcase 1270:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1271:\nDELETE FROM num_tmp;\n--Testcase 1272:\nINSERT INTO num_tmp VALUES (18446744073709551615::numeric); \n--Testcase 1273:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1274:\nDELETE FROM num_tmp;\n--Testcase 1275:\nINSERT INTO num_tmp VALUES (-1::numeric); \n--Testcase 1276:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1277:\nDELETE FROM num_tmp;\n--Testcase 1278:\nINSERT INTO num_tmp VALUES (18446744073709551616::numeric); \n--Testcase 1279:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1280:\nDELETE FROM num_tmp;\n--Testcase 1281:\nINSERT INTO num_tmp VALUES ('NaN'::numeric); \n--Testcase 1282:\nSELECT pg_lsn(n1) FROM num_tmp; \n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 1083:\nDROP SERVER sqlite_svr;\n--Testcase 1084:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/out_of_range.sql",
    "content": "--\n-- INT4 + INT2\n--\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 02:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n\n--Testcase 03:\nDELETE FROM INT4_TMP;\n--Testcase 04:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 05:\nINSERT INTO INT4_TMP VALUES (x'7FFFFFFF'::int8 + 1, 0);\n--Testcase 06:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 07:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 08:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 09:\nDELETE FROM INT4_TMP;\n--Testcase 10:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 11:\nINSERT INTO INT4_TMP VALUES (-(x'7FFFFFFF'::int8) - 2, 0);\n--Testcase 12:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 13:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 14:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 15:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 16:\nCREATE FOREIGN TABLE INT2_TMP(f1 int2, f2 int2, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 17:\nDELETE FROM INT2_TMP;\n--Testcase 18:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 19:\nINSERT INTO INT2_TMP VALUES (x'7FFF'::int8 + 1, 0);\n--Testcase 20:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 21:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 22:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 23:\nDELETE FROM INT2_TMP;\n--Testcase 24:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 25:\nINSERT INTO INT2_TMP VALUES (-(x'7FFF'::int8) - 2, 0);\n--Testcase 26:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 27:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 28:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 29:\nCREATE FOREIGN TABLE INT8_TBL(q1 int8 OPTIONS (key 'true'), q2 int8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 31:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 32:\nINSERT INTO INT8_TBL VALUES (-9223372036854775810, 0);\n--Testcase 33:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 34:\nSELECT * FROM INT8_TBL; -- NO overflow\n--Testcase 35:\nSELECT q1 FROM INT8_TBL; -- NO overflow\n--Testcase 36:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 37:\nDELETE FROM INT8_TBL WHERE q1 = -9223372036854775810;\n--Testcase 38:\nINSERT INTO INT8_TBL VALUES (9223372036854775809, 0);\n--Testcase 39:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 40:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 41:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 42:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 43:\nDELETE FROM INT8_TBL WHERE q1 = 9223372036854775809;\n--Testcase 44:\nINSERT INTO INT8_TBL VALUES (10 * -9223372036854775810, 0);\n--Testcase 45:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 46:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 47:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 48:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 49:\nDELETE FROM INT8_TBL WHERE q1 = 10 * -9223372036854775810;\n--Testcase 50:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n\n--Testcase 003:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 004:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/timestamp.sql",
    "content": "--\n-- TIMESTAMP\n--\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 3:\nCREATE FOREIGN TABLE dates1 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number timestamp without time zone OPTIONS (column_type 'INT'))\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n--Testcase 4:\nCREATE FOREIGN TABLE dates2 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number double precision)\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n-- Showing timestamp column from SQLite value as TEXT and as INTEGER/FLOAT has same value\n--Testcase 5:\nSELECT name,\n\tto_char(date_as_text, \t'YYYY-MM-DD HH24:MI:SS.MS') as date_as_text, \n\tto_char(date_as_number, 'YYYY-MM-DD HH24:MI:SS.MS') as date_as_number\nFROM dates1;\n--Testcase 6:\nSELECT * FROM dates2;\n\n-- Comparing exact values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 7:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 8:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 9:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 10:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n-- Comparing greater values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 11:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 12:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 13:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 14:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 15:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 16:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 17:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 18:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--- Comparing without using to_timestamp\n--Testcase 19:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 20:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 21:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 22:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 23:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 24:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 25:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 26:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n-- Comparing greater values  without using to_timestamp\n\n\n--Testcase 27:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 28:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 29:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 30:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 31:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 32:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 33:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 34:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 35:\nDROP FOREIGN TABLE dates1;\n--Testcase 36:\nDROP FOREIGN TABLE dates2;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/types/uuid.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_UUID\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 012:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 013:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 014:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 015:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 016:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 017:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 018:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 019:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 020:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 021:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 022:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 023:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 024:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 025:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 026:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 029:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 030:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 031:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 032:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 033:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 034:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 035:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 036:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 037:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 038:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 039:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 040:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 041:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 042:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 043:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 044:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 045:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 046:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 047:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 048:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 049:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 050:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 051:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 052:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 053:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 054:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 056:\nCREATE FOREIGN TABLE \"type_UUID+\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');\n--Testcase 057:\nSELECT * FROM \"type_UUID+\";\n--Testcase 058:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 059:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 060:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 061:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 062:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 063:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 064:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 065:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 066:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 067:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 068:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 069:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 071:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 072:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 073:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 074:\nSELECT * FROM \"type_UUID+\";\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';\n--Testcase 076:\nSELECT * FROM \"type_UUID+\";\n--Testcase 077:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 077:\nSELECT * FROM \"type_UUID+\";\n--Testcase 078:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');\n--Testcase 079:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 41;\n--Testcase 080:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 081:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 082:\nSELECT * FROM \"type_UUID+\";\n--Testcase 083:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 086:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));\n--Testcase 087:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));\n--Testcase 088:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 089:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 42;\n--Testcase 090:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 43;\n--Testcase 091:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 092:\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 093:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (44, NULL);\n--Testcase 094:\nSELECT * FROM \"type_UUID+\";\n--Testcase 095:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 096:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n\n--Testcase 100:\nCREATE FOREIGN TABLE \"type_UUIDpk\" (col uuid OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 101:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (ADD column_type 'TEXT');\n--Testcase 102:\nINSERT INTO \"type_UUIDpk\" VALUES ('{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 103:\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 104:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 105: ERR - primary key\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 106:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 107: NO ERR, but the same semantics!\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 108:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 109:\nDELETE FROM \"type_UUIDpk\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/with_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/with_gis_support/postgis.sql",
    "content": "--Testcase 2:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 3:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 4:\nCREATE EXTENSION IF NOT EXISTS postgis;\n--Testcase 5:\nCREATE EXTENSION postgis_raster;\n--Testcase 6:\nCREATE EXTENSION postgis_topology;\n\n-- TEST GIS DATA FROM UNION ASTRONOMIQUE INTERNATIONAL (国際天文学連合): MARS, Olympus mons\n--Testcase 11:\nCREATE SCHEMA \"♂\";\n--Testcase 12:\nCREATE TABLE \"♂\".\"テスト\" (\n\tid int4 NULL,\n\t\"UAI\" varchar(254) NULL,\n\t\"⌖\" public.geometry(point, 104904) NULL,\n\tgeom public.geometry(geometry, 104904) NULL,\n\t\"t₀\" date NULL,\n\t\"class\" text NULL,\n\t\"URL\" varchar(80) NULL\n);\n--Testcase 13: ETC...\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(991, 'Olympus Mons', 'SRID=104904;POINT (226.19749330952843 18.652758890345698)'::geometry, 'SRID=104904;MULTIPOLYGON (((223.78717231750488 23.3314151763916, 224.22803688049316 23.324007034301758, 224.32436180114746 23.5648136138916, 224.7186985015869 23.593564987182617, 224.79486274719238 23.45737648010254, 225.06530570983887 23.238798141479492, 225.67255210876465 23.437196731567383, 226.2211856842041 23.6611385345459, 226.5472011566162 23.65372657775879, 227.6215763092041 23.435148239135742, 228.19009590148926 23.390283584594727, 228.753023147583 23.24955177307129, 228.90711784362793 23.1943416595459, 229.23219108581543 23.004926681518555, 229.5288143157959 22.75514030456543, 229.87227058410645 22.442903518676758, 230.2469539642334 22.14628028869629, 230.7309169769287 21.927717208862305, 231.30854988098145 21.64670753479004, 231.85495948791504 21.084684371948242, 232.19841957092285 19.88258171081543, 231.88618278503418 18.47752571105957, 231.30854988098145 17.743772506713867, 231.21887397766113 17.218599319458008, 231.17812156677246 16.751802444458008, 230.97346687316895 16.353670120239258, 230.8327350616455 15.947111129760742, 230.62945365905762 15.478002548217773, 230.4574489593506 15.352907180786133, 230.20748329162598 15.29954719543457, 229.99631309509277 15.036508560180664, 229.72586631774902 14.640104293823242, 229.41096305847168 14.377065658569336, 228.98862266540527 14.10291862487793, 228.74040412902832 13.854700088500977, 228.5107135772705 13.83247184753418, 228.31806755065918 13.962137222290039, 227.93990516662598 13.929948806762695, 227.36133766174316 13.883039474487305, 227.04734230041504 13.813947677612305, 226.68895149230957 13.851762771606445, 226.4101276397705 13.839879989624023, 226.06347465515137 13.632848739624023, 225.7766170501709 13.617597579956055, 225.32925987243652 13.481771469116211, 224.76723670959473 13.591054916381836, 224.15838050842285 13.731557846069336, 223.12800407409668 14.106241226196289, 222.39425468444824 14.402864456176758, 221.67611503601074 14.918050765991211, 221.434663772583 15.403280258178711, 221.30129432678223 16.051607131958008, 221.0864200592041 16.410966873168945, 221.09012413024902 16.6591854095459, 221.1975612640381 17.09263801574707, 220.9971103668213 17.32316017150879, 220.75670051574707 17.422361373901367, 220.82338523864746 17.844701766967773, 221.18475532531738 18.073732376098633, 221.3567600250244 18.5584774017334, 221.40367317199707 19.10576820373535, 221.3567600250244 19.90325355529785, 221.42725563049316 20.59361457824707, 221.778959274292 21.40439796447754, 222.34188652038574 22.201879501342773, 223.01658821105957 23.272138595581055, 223.3759479522705 23.668546676635742, 223.3722438812256 23.675954818725586, 223.57600212097168 23.675954818725586, 223.70566749572754 23.542585372924805, 223.78717231750488 23.3314151763916)))'::geometry, '1973-01-01', 'mo', 'http://planetarynames.wr.usgs.gov/Feature/4453');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(248, 'Karzok', 'SRID=104904;POINT (228.262902951161 18.4035270924109)'::geometry, 'SRID=104904;MULTIPOLYGON (((228.269330978394 18.2748584747314, 228.266962051392 18.2748394012451, 228.264589309692 18.2748584747314, 228.26222038269 18.2749156951904, 228.259851455688 18.2750148773193, 228.257482528687 18.2751522064209, 228.255121231079 18.2753276824951, 228.252759933472 18.2755451202393, 228.250402450562 18.2757968902588, 228.248052597046 18.2760906219482, 228.245706558228 18.2764263153076, 228.243368148804 18.2767963409424, 228.241037368774 18.2772083282471, 228.23871421814 18.2776546478271, 228.236398696899 18.2781429290771, 228.234094619751 18.2786655426025, 228.231798171997 18.2792301177979, 228.229513168335 18.2798328399658, 228.227239608765 18.2804698944092, 228.224977493286 18.2811489105225, 228.222726821899 18.2818622589111, 228.220491409302 18.2826137542725, 228.218271255493 18.2833995819092, 228.216066360474 18.2842235565186, 228.213872909546 18.2850856781006, 228.211698532104 18.285982131958, 228.209539413452 18.2869167327881, 228.207399368286 18.2878856658936, 228.205278396606 18.2888889312744, 228.203172683716 18.2899265289307, 228.201089859009 18.2910022735596, 228.199026107788 18.2921085357666, 228.196981430054 18.2932529449463, 228.194959640503 18.2944278717041, 228.192956924438 18.2956371307373, 228.190980911255 18.2968769073486, 228.189023971558 18.2981548309326, 228.187093734741 18.2994594573975, 228.185186386108 18.3007984161377, 228.183305740356 18.3021678924561, 228.181447982788 18.3035678863525, 228.179616928101 18.3050022125244, 228.177812576294 18.3064632415771, 228.176038742065 18.307954788208, 228.174287796021 18.3094730377197, 228.172567367554 18.3110218048096, 228.170873641968 18.3126010894775, 228.16921043396 18.3142032623291, 228.16757774353 18.3158359527588, 228.165975570679 18.3174953460693, 228.164403915405 18.3191814422607, 228.162858963013 18.320894241333, 228.161352157593 18.3226299285889, 228.159872055054 18.3243923187256, 228.158430099487 18.3261775970459, 228.157014846802 18.3279857635498, 228.155637741089 18.3298168182373, 228.154294967651 18.3316707611084, 228.152982711792 18.3335475921631, 228.151708602905 18.3354473114014, 228.150468826294 18.337366104126, 228.149263381958 18.3393039703369, 228.148092269897 18.3412647247314, 228.14695930481 18.343240737915, 228.145864486694 18.3452396392822, 228.144804000854 18.3472537994385, 228.143781661987 18.3492832183838, 228.142793655396 18.3513317108154, 228.141847610474 18.3533954620361, 228.140939712524 18.3554744720459, 228.140066146851 18.3575687408447, 228.139234542847 18.3596782684326, 228.138441085815 18.3617992401123, 228.137685775757 18.3639354705811, 228.136972427368 18.3660831451416, 228.136297225952 18.3682422637939, 228.135660171509 18.3704090118408, 228.135065078735 18.3725872039795, 228.134511947632 18.37477684021, 228.133996963501 18.376974105835, 228.133520126343 18.3791828155518, 228.133085250854 18.3813953399658, 228.132692337036 18.3836154937744, 228.132341384888 18.3858432769775, 228.132028579712 18.3880748748779, 228.131757736206 18.3903102874756, 228.13152885437 18.3925533294678, 228.131341934204 18.39479637146, 228.131196975708 18.3970432281494, 228.131090164185 18.3992938995361, 228.131025314331 18.4015445709229, 228.131002426147 18.4037952423096, 228.131021499634 18.4060459136963, 228.13108253479 18.408296585083, 228.131185531616 18.4105472564697, 228.131326675415 18.4127941131592, 228.131513595581 18.4150371551514, 228.13173866272 18.4172801971436, 228.132005691528 18.4195156097412, 228.132314682007 18.4217510223389, 228.132661819458 18.4239749908447, 228.133054733276 18.4261989593506, 228.13348197937 18.4284114837646, 228.133955001831 18.4306163787842, 228.134466171265 18.4328174591064, 228.135019302368 18.4350070953369, 228.135610580444 18.4371852874756, 228.13624382019 18.4393558502197, 228.136919021606 18.4415149688721, 228.137628555298 18.4436626434326, 228.138380050659 18.4457988739014, 228.13917350769 18.4479236602783, 228.140001296997 18.4500331878662, 228.140871047974 18.452127456665, 228.141775131226 18.4542064666748, 228.142721176147 18.4562740325928, 228.143705368042 18.4583225250244, 228.144723892212 18.460355758667, 228.145784378052 18.4623699188232, 228.146879196167 18.4643688201904, 228.148008346558 18.4663486480713, 228.149175643921 18.4683094024658, 228.150381088257 18.4702472686768, 228.151620864868 18.4721698760986, 228.152894973755 18.4740695953369, 228.154203414917 18.4759464263916, 228.155546188354 18.47780418396, 228.156923294067 18.4796352386475, 228.158334732056 18.4814472198486, 228.159776687622 18.4832363128662, 228.161256790161 18.4849987030029, 228.162763595581 18.4867343902588, 228.164304733276 18.4884471893311, 228.16587638855 18.4901371002197, 228.167478561401 18.4917964935303, 228.169115066528 18.49342918396, 228.170778274536 18.4950351715088, 228.172468185425 18.4966144561768, 228.174192428589 18.4981670379639, 228.175939559937 18.4996891021729, 228.177717208862 18.5011806488037, 228.179521560669 18.5026454925537, 228.181352615356 18.5040760040283, 228.183210372925 18.5054798126221, 228.185094833374 18.5068492889404, 228.187002182007 18.5081920623779, 228.188936233521 18.50950050354, 228.190893173218 18.5107746124268, 228.192869186401 18.5120182037354, 228.194871902466 18.5132274627686, 228.196897506714 18.5144062042236, 228.198942184448 18.5155506134033, 228.201009750366 18.5166568756104, 228.203096389771 18.5177326202393, 228.205202102661 18.5187740325928, 228.207326889038 18.5197811126709, 228.209466934204 18.5207500457764, 228.211629867554 18.5216846466064, 228.213804244995 18.5225811004639, 228.21600151062 18.5234432220459, 228.218210220337 18.5242710113525, 228.220434188843 18.5250568389893, 228.22266960144 18.5258121490479, 228.224924087524 18.5265254974365, 228.227186203003 18.5272045135498, 228.229463577271 18.5278415679932, 228.23175239563 18.5284442901611, 228.234052658081 18.5290088653564, 228.236360549927 18.5295352935791, 228.238679885864 18.5300235748291, 228.241006851196 18.5304698944092, 228.243341445923 18.5308818817139, 228.245683670044 18.5312557220459, 228.248029708862 18.531587600708, 228.250383377075 18.5318813323975, 228.252744674683 18.5321369171143, 228.255109786987 18.5323505401611, 228.257474899292 18.5325298309326, 228.259847640991 18.5326671600342, 228.262216567993 18.5327663421631, 228.26459312439 18.5328235626221, 228.266965866089 18.5328426361084, 228.269342422485 18.5328235626221, 228.271715164185 18.5327625274658, 228.274087905884 18.5326671600342, 228.276456832886 18.5325298309326, 228.278825759888 18.5323505401611, 228.281187057495 18.5321369171143, 228.283548355103 18.5318813323975, 228.285902023315 18.531587600708, 228.288251876831 18.5312519073486, 228.290594100952 18.5308818817139, 228.292928695679 18.5304698944092, 228.295255661011 18.5300197601318, 228.297574996948 18.5295352935791, 228.299882888794 18.5290088653564, 228.302179336548 18.5284442901611, 228.304468154907 18.5278415679932, 228.306745529175 18.5272006988525, 228.309011459351 18.5265254974365, 228.311262130737 18.5258083343506, 228.313501358032 18.5250568389893, 228.315725326538 18.5242671966553, 228.317934036255 18.5234432220459, 228.320127487183 18.5225811004639, 228.322305679321 18.5216808319092, 228.324464797974 18.5207462310791, 228.326608657837 18.5197772979736, 228.328733444214 18.5187702178955, 228.330839157104 18.5177326202393, 228.332925796509 18.5166568756104, 228.334989547729 18.5155467987061, 228.337034225464 18.5144023895264, 228.339059829712 18.5132274627686, 228.341062545776 18.5120143890381, 228.343042373657 18.5107707977295, 228.344995498657 18.5094966888428, 228.346929550171 18.5081882476807, 228.348836898804 18.5068454742432, 228.350721359253 18.5054759979248, 228.352579116821 18.5040721893311, 228.354410171509 18.5026416778564, 228.356214523315 18.5011768341064, 228.357992172241 18.4996852874756, 228.359739303589 18.4981632232666, 228.361463546753 18.4966106414795, 228.363153457642 18.4950313568115, 228.364816665649 18.4934253692627, 228.366449356079 18.491792678833, 228.368055343628 18.4901294708252, 228.369626998901 18.4884433746338, 228.371168136597 18.4867305755615, 228.372674942017 18.4849910736084, 228.374151229858 18.4832286834717, 228.375597000122 18.4814434051514, 228.37700843811 18.4796314239502, 228.378385543823 18.4778003692627, 228.379728317261 18.4759426116943, 228.381036758423 18.4740619659424, 228.38231086731 18.4721660614014, 228.383550643921 18.4702434539795, 228.38475227356 18.4683017730713, 228.385919570923 18.4663410186768, 228.387052536011 18.4643650054932, 228.388147354126 18.462366104126, 228.389204025269 18.4603481292725, 228.390226364136 18.4583187103271, 228.391206741333 18.4562664031982, 228.392152786255 18.4542026519775, 228.393060684204 18.4521198272705, 228.393926620483 18.4500255584717, 228.394758224487 18.4479160308838, 228.395547866821 18.4457950592041, 228.396299362183 18.4436588287354, 228.397012710571 18.4415111541748, 228.39768409729 18.4393520355225, 228.398317337036 18.4371814727783, 228.398908615112 18.4349994659424, 228.399461746216 18.4328098297119, 228.399972915649 18.4306125640869, 228.40044593811 18.4284076690674, 228.400876998901 18.4261913299561, 228.401266098022 18.4239711761475, 228.401613235474 18.4217433929443, 228.401922225952 18.4195117950439, 228.402189254761 18.417272567749, 228.402414321899 18.4150333404541, 228.402597427368 18.4127864837646, 228.402742385864 18.4105396270752, 228.40284538269 18.4082927703857, 228.402902603149 18.406042098999, 228.402921676636 18.403787612915, 228.402898788452 18.4015369415283, 228.402837753296 18.3992862701416, 228.402730941772 18.3970394134521, 228.402585983276 18.3947887420654, 228.402395248413 18.3925457000732, 228.402166366577 18.3903064727783, 228.401895523071 18.3880672454834, 228.401586532593 18.385835647583, 228.401231765747 18.3836116790771, 228.400838851929 18.3813877105713, 228.40040397644 18.3791751861572, 228.399930953979 18.3769702911377, 228.399415969849 18.3747730255127, 228.398859024048 18.3725833892822, 228.398263931274 18.3704051971436, 228.397626876831 18.3682346343994, 228.396951675415 18.3660755157471, 228.396238327026 18.3639316558838, 228.395483016968 18.361795425415, 228.394689559937 18.3596744537354, 228.393857955933 18.3575649261475, 228.392988204956 18.3554706573486, 228.39207649231 18.3533916473389, 228.391130447388 18.3513278961182, 228.390146255493 18.3492794036865, 228.389120101929 18.3472461700439, 228.388063430786 18.3452320098877, 228.386964797974 18.3432369232178, 228.385831832886 18.3412609100342, 228.384660720825 18.3393001556396, 228.383455276489 18.3373622894287, 228.382215499878 18.3354434967041, 228.380941390991 18.3335437774658, 228.379629135132 18.3316669464111, 228.378286361694 18.32981300354, 228.376905441284 18.3279819488525, 228.375494003296 18.3261699676514, 228.374048233032 18.3243846893311, 228.37257194519 18.3226261138916, 228.371061325073 18.3208866119385, 228.369520187378 18.3191776275635, 228.367948532104 18.3174915313721, 228.366346359253 18.3158321380615, 228.364709854126 18.3141994476318, 228.363046646118 18.3125972747803, 228.361356735229 18.3110179901123, 228.359636306763 18.3094692230225, 228.357885360718 18.3079509735107, 228.356107711792 18.3064594268799, 228.354303359985 18.3049983978271, 228.352472305298 18.3035640716553, 228.350618362427 18.3021640777588, 228.348733901978 18.3007946014404, 228.346826553345 18.2994556427002, 228.344896316528 18.2981510162354, 228.342943191528 18.2968769073486, 228.340963363647 18.29563331604, 228.33896446228 18.2944240570068, 228.336938858032 18.293249130249, 228.334897994995 18.2921085357666, 228.332830429077 18.2909984588623, 228.33074760437 18.2899265289307, 228.328645706177 18.2888851165771, 228.3265209198 18.2878818511963, 228.324380874634 18.2869129180908, 228.322221755981 18.285982131958, 228.32004737854 18.2850856781006, 228.31785774231 18.2842235565186, 228.315649032593 18.2833995819092, 228.313428878784 18.2826099395752, 228.311193466187 18.2818584442139, 228.3089427948 18.2811450958252, 228.306684494019 18.2804698944092, 228.304410934448 18.2798290252686, 228.302125930786 18.2792301177979, 228.299829483032 18.2786655426025, 228.297521591187 18.2781391143799, 228.295206069946 18.2776546478271, 228.292882919312 18.2772045135498, 228.290552139282 18.2767963409424, 228.288213729858 18.2764225006104, 228.28586769104 18.2760906219482, 228.283517837524 18.2757968902588, 228.281160354614 18.2755451202393, 228.278802871704 18.2753276824951, 228.276437759399 18.2751522064209, 228.274072647095 18.2750148773193, 228.271703720093 18.2749156951904, 228.269330978394 18.2748584747314)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14144');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(249, 'Pangboche', 'SRID=104904;POINT (226.595873773026 17.2783598670807)'::geometry, 'SRID=104904;MULTIPOLYGON (((226.601442337036 17.1929302215576, 226.599878311157 17.1929187774658, 226.598310470581 17.1929302215576, 226.596746444702 17.1929721832275, 226.595178604126 17.1930370330811, 226.593618392944 17.1931285858154, 226.592054367065 17.1932430267334, 226.590497970581 17.1933879852295, 226.588941574097 17.1935558319092, 226.587385177612 17.193754196167, 226.585836410522 17.1939754486084, 226.58429145813 17.1942195892334, 226.582754135132 17.1944942474365, 226.581216812134 17.1947917938232, 226.57968711853 17.1951160430908, 226.578165054321 17.195463180542, 226.576650619507 17.195837020874, 226.57513999939 17.1962375640869, 226.573637008667 17.1966648101807, 226.572145462036 17.197114944458, 226.570657730103 17.1975879669189, 226.569181442261 17.1980876922607, 226.567712783813 17.1986103057861, 226.566255569458 17.1991596221924, 226.564809799194 17.1997318267822, 226.563371658325 17.2003269195557, 226.561948776245 17.20094871521, 226.56053352356 17.2015933990479, 226.559129714966 17.2022609710693, 226.557741165161 17.2029514312744, 226.556364059448 17.2036647796631, 226.555002212524 17.2044010162354, 226.553651809692 17.2051601409912, 226.552316665649 17.2059421539307, 226.550992965698 17.2067432403564, 226.549688339233 17.2075710296631, 226.54839515686 17.2084178924561, 226.547121047974 17.2092876434326, 226.545862197876 17.2101764678955, 226.544618606567 17.211088180542, 226.543394088745 17.2120189666748, 226.542184829712 17.2129688262939, 226.540990829468 17.2139415740967, 226.539819717407 17.2149333953857, 226.538663864136 17.2159404754639, 226.537527084351 17.2169704437256, 226.536409378052 17.2180194854736, 226.535310745239 17.219087600708, 226.534231185913 17.2201709747314, 226.533174514771 17.2212734222412, 226.532133102417 17.2223949432373, 226.531118392944 17.2235317230225, 226.530118942261 17.2246875762939, 226.529146194458 17.2258586883545, 226.528188705444 17.2270450592041, 226.527257919312 17.2282466888428, 226.526346206665 17.2294635772705, 226.525461196899 17.2306995391846, 226.52459526062 17.2319469451904, 226.523752212524 17.2332057952881, 226.522932052612 17.2344837188721, 226.522138595581 17.2357730865479, 226.521364212036 17.2370738983154, 226.520616531372 17.2383899688721, 226.519891738892 17.2397136688232, 226.519193649292 17.2410526275635, 226.518518447876 17.2424030303955, 226.517869949341 17.2437648773193, 226.517244338989 17.245138168335, 226.516641616821 17.2465190887451, 226.516069412231 17.2479114532471, 226.515520095825 17.2493152618408, 226.514993667603 17.2507228851318, 226.514497756958 17.2521419525146, 226.514024734497 17.253568649292, 226.513578414917 17.2550029754639, 226.513158798218 17.2564449310303, 226.512765884399 17.2578945159912, 226.512399673462 17.2593479156494, 226.512060165405 17.2608089447021, 226.511747360229 17.2622776031494, 226.511461257935 17.2637462615967, 226.511201858521 17.2652225494385, 226.510969161987 17.2667026519775, 226.510766983032 17.2681865692139, 226.510587692261 17.2696743011475, 226.51043510437 17.2711620330811, 226.510313034058 17.2726535797119, 226.510217666626 17.27414894104, 226.510149002075 17.2756404876709, 226.510107040405 17.277135848999, 226.510091781616 17.2786350250244, 226.510103225708 17.2801303863525, 226.510145187378 17.2816257476807, 226.510213851929 17.2831211090088, 226.510305404663 17.2846164703369, 226.510431289673 17.2861080169678, 226.510580062866 17.2875957489014, 226.51075553894 17.289083480835, 226.510957717896 17.2905673980713, 226.511190414429 17.2920475006104, 226.511449813843 17.2935237884521, 226.51173210144 17.2949924468994, 226.512044906616 17.2964611053467, 226.512384414673 17.2979221343994, 226.51275062561 17.2993755340576, 226.513139724731 17.3008251190186, 226.513559341431 17.302267074585, 226.514001846313 17.3037014007568, 226.514474868774 17.3051280975342, 226.514970779419 17.306547164917, 226.515493392944 17.3079586029053, 226.516042709351 17.309362411499, 226.51661491394 17.310754776001, 226.517213821411 17.3121356964111, 226.517839431763 17.3135089874268, 226.518487930298 17.3148708343506, 226.519163131714 17.3162212371826, 226.519861221313 17.3175601959229, 226.520586013794 17.3188877105713, 226.521333694458 17.3202037811279, 226.522104263306 17.3215045928955, 226.522897720337 17.3227939605713, 226.523717880249 17.3240718841553, 226.524557113647 17.3253345489502, 226.525423049927 17.3265819549561, 226.52631187439 17.3278141021729, 226.527219772339 17.3290348052979, 226.528150558472 17.3302364349365, 226.529108047485 17.3314228057861, 226.530080795288 17.3325939178467, 226.531076431274 17.3337497711182, 226.532094955444 17.3348903656006, 226.533132553101 17.3360080718994, 226.53419303894 17.3371143341064, 226.535272598267 17.3381977081299, 226.536371231079 17.3392658233643, 226.537488937378 17.3403148651123, 226.538625717163 17.341344833374, 226.539781570435 17.3423557281494, 226.540952682495 17.3433475494385, 226.542146682739 17.3443202972412, 226.543355941772 17.3452739715576, 226.544580459595 17.3462047576904, 226.545824050903 17.3471164703369, 226.547082901001 17.3480052947998, 226.548360824585 17.3488750457764, 226.549654006958 17.3497219085693, 226.550958633423 17.350549697876, 226.552282333374 17.351354598999, 226.553617477417 17.3521366119385, 226.554967880249 17.3528957366943, 226.55633354187 17.3536319732666, 226.557710647583 17.3543453216553, 226.559099197388 17.3550395965576, 226.560503005981 17.3557071685791, 226.561918258667 17.356351852417, 226.563344955444 17.356969833374, 226.564783096313 17.3575687408447, 226.566232681274 17.3581409454346, 226.56768989563 17.3586902618408, 226.569158554077 17.3592128753662, 226.570634841919 17.359712600708, 226.572122573853 17.3601894378662, 226.573617935181 17.3606395721436, 226.575120925903 17.36106300354, 226.576631546021 17.3614635467529, 226.578149795532 17.361837387085, 226.579675674438 17.3621883392334, 226.581205368042 17.362512588501, 226.58274269104 17.3628101348877, 226.584283828735 17.3630847930908, 226.585828781128 17.3633289337158, 226.587377548218 17.3635501861572, 226.588933944702 17.363748550415, 226.590490341187 17.3639163970947, 226.592050552368 17.3640613555908, 226.593614578247 17.3641757965088, 226.595178604126 17.3642673492432, 226.596746444702 17.3643321990967, 226.598314285278 17.3643741607666, 226.599882125854 17.3643856048584, 226.601449966431 17.3643741607666, 226.603017807007 17.3643321990967, 226.604581832886 17.3642673492432, 226.606145858765 17.3641757965088, 226.607709884644 17.3640613555908, 226.609270095825 17.3639163970947, 226.610830307007 17.3637447357178, 226.612382888794 17.3635501861572, 226.613931655884 17.3633289337158, 226.615480422974 17.3630809783936, 226.617021560669 17.3628101348877, 226.618558883667 17.362512588501, 226.620088577271 17.3621883392334, 226.621610641479 17.361837387085, 226.623128890991 17.3614635467529, 226.624639511108 17.36106300354, 226.626142501831 17.3606395721436, 226.627637863159 17.3601856231689, 226.629125595093 17.359712600708, 226.630601882935 17.3592128753662, 226.632070541382 17.3586902618408, 226.633531570435 17.3581409454346, 226.634977340698 17.3575687408447, 226.636415481567 17.356969833374, 226.637842178345 17.3563480377197, 226.63925743103 17.3557033538818, 226.640661239624 17.3550357818604, 226.642049789429 17.3543453216553, 226.643426895142 17.3536319732666, 226.644792556763 17.3528957366943, 226.646142959595 17.3521327972412, 226.647478103638 17.3513507843018, 226.648801803589 17.3505458831787, 226.650110244751 17.3497219085693, 226.651399612427 17.3488750457764, 226.652677536011 17.3480052947998, 226.653936386108 17.3471126556396, 226.655179977417 17.3462009429932, 226.656408309937 17.3452701568604, 226.65761756897 17.3443202972412, 226.658807754517 17.3433475494385, 226.659982681274 17.3423557281494, 226.661138534546 17.341344833374, 226.662275314331 17.3403148651123, 226.66339302063 17.3392658233643, 226.664487838745 17.3381977081299, 226.665567398071 17.3371105194092, 226.666627883911 17.3360080718994, 226.667665481567 17.3348865509033, 226.668684005737 17.3337459564209, 226.669679641724 17.3325939178467, 226.670656204224 17.3314228057861, 226.67160987854 17.3302326202393, 226.672540664673 17.3290309906006, 226.673448562622 17.3278141021729, 226.674337387085 17.3265781402588, 226.675203323364 17.3253307342529, 226.676042556763 17.324068069458, 226.676862716675 17.3227939605713, 226.677656173706 17.3215007781982, 226.678426742554 17.3201999664307, 226.679174423218 17.318883895874, 226.679899215698 17.3175563812256, 226.680597305298 17.3162174224854, 226.681272506714 17.3148670196533, 226.681921005249 17.3135051727295, 226.682546615601 17.3121318817139, 226.683145523071 17.3107509613037, 226.683717727661 17.3093585968018, 226.684267044067 17.307954788208, 226.684789657593 17.3065433502197, 226.685285568237 17.3051242828369, 226.685754776001 17.3036975860596, 226.686201095581 17.3022632598877, 226.686616897583 17.3008213043213, 226.687009811401 17.2993717193604, 226.687376022339 17.2979183197021, 226.687715530396 17.2964572906494, 226.688024520874 17.2949886322021, 226.688310623169 17.2935199737549, 226.688570022583 17.2920436859131, 226.688798904419 17.290563583374, 226.689004898071 17.2890796661377, 226.689180374146 17.2875919342041, 226.689329147339 17.2861042022705, 226.689451217651 17.2846126556396, 226.689546585083 17.2831172943115, 226.689615249634 17.2816219329834, 226.689653396606 17.2801265716553, 226.689668655396 17.2786312103271, 226.689653396606 17.277135848999, 226.689611434937 17.2756366729736, 226.689542770386 17.2741451263428, 226.689443588257 17.2726497650146, 226.689321517944 17.2711582183838, 226.689168930054 17.2696704864502, 226.688993453979 17.2681827545166, 226.688787460327 17.2666988372803, 226.688554763794 17.2652187347412, 226.68829536438 17.2637424468994, 226.688009262085 17.2622737884521, 226.687696456909 17.2608051300049, 226.687356948853 17.2593441009521, 226.686990737915 17.2578907012939, 226.686597824097 17.256441116333, 226.686178207397 17.2549991607666, 226.685731887817 17.2535648345947, 226.685258865356 17.2521381378174, 226.684762954712 17.2507190704346, 226.684236526489 17.2493114471436, 226.683687210083 17.2479076385498, 226.683115005493 17.2465152740479, 226.682512283325 17.2451343536377, 226.681886672974 17.2437610626221, 226.681238174438 17.2424030303955, 226.680562973022 17.2410526275635, 226.679864883423 17.2397136688232, 226.679140090942 17.2383861541748, 226.678392410278 17.2370700836182, 226.677618026733 17.2357692718506, 226.676824569702 17.2344799041748, 226.67600440979 17.2332057952881, 226.675161361694 17.2319431304932, 226.674295425415 17.2306957244873, 226.673410415649 17.2294635772705, 226.672498703003 17.2282428741455, 226.671564102173 17.2270412445068, 226.670610427856 17.2258548736572, 226.669637680054 17.2246837615967, 226.66863822937 17.2235317230225, 226.6676197052 17.22239112854, 226.666582107544 17.2212734222412, 226.665525436401 17.2201709747314, 226.664445877075 17.2190837860107, 226.663347244263 17.2180194854736, 226.662229537964 17.2169704437256, 226.661092758179 17.2159404754639, 226.659936904907 17.2149295806885, 226.658761978149 17.2139377593994, 226.657571792603 17.2129650115967, 226.656362533569 17.2120151519775, 226.655138015747 17.2110843658447, 226.653894424438 17.2101726531982, 226.652635574341 17.2092838287354, 226.651357650757 17.2084140777588, 226.650068283081 17.2075672149658, 226.648759841919 17.2067432403564, 226.647439956665 17.2059383392334, 226.646104812622 17.2051563262939, 226.64475440979 17.2043972015381, 226.643388748169 17.2036609649658, 226.642011642456 17.2029476165771, 226.640623092651 17.2022571563721, 226.639223098755 17.2015895843506, 226.637807846069 17.2009449005127, 226.636381149292 17.2003269195557, 226.63494682312 17.1997318267822, 226.633497238159 17.1991558074951, 226.632040023804 17.1986103057861, 226.630575180054 17.1980838775635, 226.629095077515 17.1975879669189, 226.627611160278 17.1971111297607, 226.62611579895 17.1966609954834, 226.624616622925 17.1962375640869, 226.623106002808 17.195837020874, 226.621587753296 17.195463180542, 226.620065689087 17.1951160430908, 226.618535995483 17.1947917938232, 226.617002487183 17.1944942474365, 226.615461349487 17.1942195892334, 226.613916397095 17.1939716339111, 226.612367630005 17.1937503814697, 226.610815048218 17.1935558319092, 226.609258651733 17.1933879852295, 226.607698440552 17.1932430267334, 226.60613822937 17.1931285858154, 226.604574203491 17.1930370330811, 226.603010177612 17.1929721832275, 226.601442337036 17.1929302215576)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14145');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1849, 'Hermes Patera', 'SRID=104904;POINT (226.57 18.33)'::geometry, 'SRID=104904;POLYGON ((226.27743530274 18.067016601562, 226.25820922852 18.135681152343, 226.255462646485 18.216705322265124, 226.26507568359813 18.293609619139627, 226.25614929199594 18.331375122069314, 226.26095581055 18.369140624999, 226.28842163086 18.465270996093, 226.35159301758 18.528442382812, 226.44772338867 18.577880859374, 226.48480224609438 18.594360351561626, 226.52462768555 18.6026000976555, 226.57955932617 18.608093261718, 226.68118286133 18.586120605468, 226.70590209961 18.569641113281, 226.74435424805 18.539428710937, 226.78555297852 18.514709472656, 226.83224487305 18.498229980468, 226.86932373046687 18.488616943359126, 226.89404296875 18.4721374511715, 226.90090942383 18.451538085937, 226.90640258789 18.410339355468, 226.91189575195 18.380126953124, 226.92013549805 18.322448730468, 226.90640258789 18.251037597656, 226.87344360352 18.187866210937, 226.82949829102 18.146667480468, 226.79379272461 18.113708496093, 226.77456665039 18.102722167968, 226.72787475586 18.119201660156, 226.68392944336 18.141174316406, 226.63723754883125 18.15490722656175, 226.58779907226562 18.14254760742125, 226.56033325195 18.121948242187, 226.52188110352 18.088989257812, 226.48617553711 18.067016601562, 226.45321655274 18.083496093749, 226.38729858399 18.086242675781, 226.32412719727 18.078002929687, 226.27743530274 18.067016601562))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15690');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1688, 'Olympus Rupes', 'SRID=104904;POINT (226.43548539543502 18.401964175317982)'::geometry, 'SRID=104904;MULTILINESTRING ((227.42951774597168 22.934080123901367, 227.93671226501465 22.65593910217285, 228.34573936462402 22.4268856048584, 228.52571296691895 22.295995712280273, 228.67296028137207 22.099660873413086, 228.96746253967285 22.099660873413086, 229.62190437316895 21.739717483520508, 230.1290988922119 21.477941513061523, 230.35815620422363 21.26524543762207, 230.38258171081543 21.086992263793945, 230.2117748260498 20.55558967590332, 230.71787071228027 19.182798385620117, 230.8653507232666 18.500219345092773, 230.8653507232666 18.058469772338867, 230.8653507232666 17.96030616760254, 230.88171195983887 16.978639602661133, 230.9144344329834 16.635053634643555, 230.73446083068848 16.389638900756836, 230.6690158843994 16.242387771606445, 230.55448722839355 15.980611801147461, 230.45632362365723 15.816999435424805, 230.35815620422363 15.506139755249023, 230.0472927093506 15.457056045532227, 229.83220100402832 15.140348434448242, 229.54010200500488 14.73716926574707, 229.22923851013184 14.442667007446289, 228.86929512023926 14.213613510131836, 228.5420742034912 14.05000114440918, 228.2148494720459 14.148168563842773, 227.8221836090088 14.148168563842773, 227.2168254852295 13.984556198120117, 226.85687828063965 13.968194961547852, 226.49693489074707 14.05000114440918, 226.0879077911377 13.77186393737793, 225.80977058410645 13.755502700805664, 225.55567741394043 13.881429672241211, 225.3911952972412 14.058565139770508, 224.9426326751709 14.73716926574707, 224.76265907287598 14.73716926574707, 224.36999320983887 14.573556900024414, 223.97732734680176 14.802610397338867, 223.29015922546387 15.12983512878418, 222.70116233825684 15.391611099243164, 222.4393825531006 15.40797233581543, 221.93218803405762 15.40797233581543, 221.57224464416504 15.66975212097168, 221.4413547515869 16.09514045715332, 221.3431911468506 16.700498580932617, 221.39227104187012 17.07680320739746, 221.16321754455566 17.404027938842773, 220.89009284973145 17.53165626525879, 220.90144157409668 17.84577751159668, 221.14274787902832 17.76296043395996, 221.52316093444824 17.61672019958496, 221.86674308776855 18.074831008911133, 222.06307792663574 18.614748001098633, 221.8994655609131 18.860166549682617, 221.6376895904541 19.252832412719727, 221.62132835388184 19.59641456604004, 221.7358570098877 20.185415267944336, 221.94854927062988 20.774412155151367, 222.079439163208 21.26524543762207, 222.48846626281738 21.854246139526367, 222.99566078186035 22.508691787719727, 223.43741035461426 22.934080123901367, 223.78099250793457 23.13041114807129, 224.04277229309082 23.064966201782227, 224.3045482635498 22.999521255493164, 224.72993659973145 22.934080123901367, 224.9917163848877 22.88499641418457, 225.2862148284912 22.934080123901367, 225.72796440124512 23.01588249206543, 226.2351589202881 23.146772384643555, 226.61146354675293 23.27766227722168, 227.05321311950684 23.097688674926758, 227.42951774597168 22.934080123901367))'::geometry, '1976-01-01', 'ru', 'http://planetarynames.wr.usgs.gov/Feature/4454');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1847, 'Zeus Patera', 'SRID=104904;POINT (227.07 18.39)'::geometry, 'SRID=104904;POLYGON ((226.50457763673 18.675384521485, 226.51556396485 18.70834350586, 226.55401611329 18.766021728516, 226.6254272461 18.820953369141, 226.71881103516 18.853912353516, 226.82043457032 18.886871337891, 226.91107177735 18.886871337891, 226.99621582032 18.875885009766, 227.03741455079 18.873138427735, 226.99346923829 18.831939697266, 226.97973632813 18.77426147461, 226.99896240235 18.702850341797, 227.06213378907 18.631439208985, 227.15002441407 18.584747314454, 227.23516845704 18.568267822266, 227.30383300781875 18.59024047851625, 227.33404541016 18.628692626954, 227.34503173829 18.658905029297, 227.39721679688 18.587493896485, 227.42742919923 18.494110107422, 227.42193603516 18.408966064454, 227.39996337891 18.315582275391, 227.39172363282 18.227691650391, 227.34228515626 18.123321533204, 227.29559326173 18.018951416016, 227.21319580079 17.942047119141, 227.15551757813 17.903594970704, 227.09783935548 17.876129150391, 227.00170898438 17.845916748047, 226.9330444336 17.840423583985, 226.88635253907 17.840423583985, 226.90832519532 17.876129150391, 226.91381835938 17.925567626954, 226.90283203126 17.972259521485, 226.87536621094 18.021697998047, 226.82318115235 18.062896728516, 226.77923583985 18.098602294922, 226.83691406251 18.156280517579, 226.88360595704 18.233184814454, 226.91107177735 18.315582275391, 226.8890991211 18.40072631836, 226.88085937501 18.474884033204, 226.83142089844 18.507843017579, 226.72430419923 18.546295166016, 226.67761230469 18.584747314454, 226.6254272461 18.614959716797, 226.58972167969 18.617706298829, 226.62817382813 18.645172119141, 226.67761230469 18.650665283204, 226.61993408204 18.661651611329, 226.56500244141 18.64242553711, 226.4935913086 18.653411865235, 226.50457763673 18.675384521485))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15689');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1848, 'Athena Patera', 'SRID=104904;POINT (227.18 18.74)'::geometry, 'SRID=104904;POLYGON ((227.0290374756 18.766021728515, 227.04002380372 18.807220458984, 227.06062316896 18.840179443359, 227.08259582521 18.867645263671, 227.12928771974 18.880004882812, 227.17597961427 18.877258300781, 227.22541809083 18.866271972656, 227.28172302247 18.825073242187, 227.31605529786 18.775634765624, 227.328414917 18.731689453124, 227.33116149903 18.691864013671, 227.30369567872 18.656158447265, 227.2844696045 18.619079589843, 227.23915100099 18.599853515624, 227.18147277833 18.599853515624, 227.10594177247 18.624572753906, 227.05513000489 18.665771484374, 227.02491760255 18.705596923828, 227.0207977295 18.744049072265, 227.0290374756 18.766021728515))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15693');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1850, 'Apollo Patera', 'SRID=104904;POINT (226.45 17.94)'::geometry, 'SRID=104904;POLYGON ((226.28540039064 17.909774780272, 226.27441406252 17.938613891601, 226.26754760744 17.981185913085, 226.27716064455 18.027877807616, 226.30325317385 18.074569702147, 226.35818481447 18.091049194335, 226.40075683596 18.091049194335, 226.46804809572 18.073196411132, 226.52572631838 18.045730590819, 226.56967163088 18.023757934569, 226.63146972658 17.946853637694, 226.63558959963 17.878189086913, 226.62185668947 17.83836364746, 226.61911010744 17.806777954101, 226.59439086916 17.788925170897, 226.52847290041 17.780685424804, 226.45980834963 17.808151245116, 226.40899658205 17.832870483397, 226.37878417971 17.841110229491, 226.33758544924 17.864456176757, 226.30462646486 17.887802124022, 226.28540039064 17.909774780272))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15694');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1851, 'Olympus Paterae', 'SRID=104904;POINT (226.81 18.32)'::geometry, 'SRID=104904;POLYGON ((226.14367675781 18.452911376953, 226.16564941406 18.513336181641, 226.2041015625 18.554534912109, 226.23431396484 18.592987060547, 226.30572509766 18.625946044922, 226.36889648438 18.650665283203, 226.42108154297 18.653411865234, 226.45678710938 18.642425537109, 226.49249267578 18.700103759766, 226.54193115234 18.755035400391, 226.58312988281 18.809967041016, 226.65454101563 18.845672607422, 226.72320556641 18.870391845703, 226.82757568359 18.895111083984, 226.88525390625 18.911590576172, 226.96545410157 18.900604248046, 227.0121459961 18.900604248046, 227.04785156251 18.889617919921, 227.08355712891 18.906097412109, 227.13299560548 18.917083740234, 227.21813964844 18.911590576171, 227.28405761719 18.875885009765, 227.33349609376 18.829193115234, 227.37194824219 18.771514892578, 227.37744140626 18.735809326171, 227.38156127930375 18.711776733397812, 227.3808746337928 18.69255065917931, 227.37469482423 18.675384521484, 227.40216064454 18.620452880859, 227.43237304688 18.571014404296, 227.4515991211 18.496856689453, 227.45709228516 18.441925048828, 227.44885253907 18.38150024414, 227.44061279298 18.323822021484, 227.43237304688 18.277130126953, 227.41589355469 18.202972412109, 227.38018798829 18.120574951171, 227.34448242188 18.05191040039, 227.31701660157 17.999725341796, 227.26757812501 17.950286865234, 227.22088623048 17.911834716796, 227.17419433594 17.870635986328, 227.12475585938 17.848663330078, 227.03686523438 17.821197509765, 226.97918701173 17.801971435546, 226.88580322266 17.815704345703, 226.85009765626 17.790985107421, 226.81439208985 17.769012451171, 226.7484741211 17.741546630859, 226.68530273438 17.733306884765, 226.62762451173 17.738800048828, 226.57543945313 17.736053466796, 226.50128173829 17.72232055664, 226.39416503907 17.758026123046, 226.32550048829 17.78823852539, 226.29803466798 17.823944091796, 226.27056884766 17.843170166015, 226.21289062501 17.89810180664, 226.20465087891 17.966766357421, 226.22937011719 18.035430908203, 226.20465087891 18.084869384765, 226.18267822266 18.13980102539, 226.17169189454 18.18374633789, 226.17993164063 18.20571899414, 226.15795898438 18.252410888671, 226.13873291016 18.318328857421, 226.13049316407 18.389739990234, 226.14367675781 18.452911376953))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15695');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1870, 'Dionysus Patera', 'SRID=104904;POINT (226.77 17.96)'::geometry, 'SRID=104904;POLYGON ((226.53973388672 18.046417236328, 226.564453125 18.082122802735, 226.60015869141 18.11508178711, 226.64410400391 18.134307861328, 226.71826171875 18.117828369141, 226.77868652344 18.09310913086, 226.83361816406 18.043670654297, 226.87756347656 17.988739013672, 226.89129638672 17.936553955078, 226.8720703125 17.870635986328, 226.828125 17.82943725586, 226.7484741211 17.799224853516, 226.68530273438 17.793731689453, 226.64959716797 17.78549194336, 226.61389160156 17.782745361328, 226.63037109375 17.848663330078, 226.63037109375 17.914581298828, 226.62213134766 17.972259521485, 226.58093261719 18.021697998047, 226.53973388672 18.046417236328))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15692');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1871, 'Hera Patera', 'SRID=104904;POINT (226.23 18.45)'::geometry, 'SRID=104904;POLYGON ((226.21000671387 18.244171142578, 226.18116760254063 18.30047607421875, 226.17567443848188 18.347167968749623, 226.17155456543125 18.41445922851525, 226.19902038575 18.489990234375377, 226.24021911621563 18.549041748046875, 226.32124328613438 18.602600097655873, 226.37892150879125 18.616333007812376, 226.44209289551 18.61083984375, 226.396774292 18.582000732422, 226.3610687255875 18.55316162109375, 226.31986999512 18.511962890625, 226.2827911377 18.474884033203, 226.27043151856 18.428192138672, 226.24845886231 18.367767333984, 226.24021911621 18.21533203125, 226.21000671387 18.244171142578))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15691');\n\n-- TEST GIS DATA FROM OPENSTREETMAP: EARTH, Ancienne Sylvie\n--Testcase 14:\nCREATE TABLE \"♁\" (\n\tgeom public.geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int8 NOT NULL,\n\tver int2 NOT NULL,\n\tarr _int8 NULL,\n\tt json NULL\n);\n--Testcase 15: ETC...\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4596087 59.6907755)'::geometry, 'node', 1621246531, 4, NULL, '{\"drain\":\"disperse\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601391 59.6904673)'::geometry, 'node', 1621246620, 24, NULL, '{\"access\":\"yes\",\"addr:housenumber\":\"20 литВЕ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Ж.-Ф. Тома де Томон\",\"barrier\":\"gate\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6458/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Ворота памятника Любезным родителям\",\"ref:okn\":\"781610399040286\",\"start_date\":\"1807\",\"tourism\":\"attraction\",\"wikidata\":\"Q118122048\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617098 59.6910199)'::geometry, 'node', 1632220259, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617672 59.6909141)'::geometry, 'node', 1632220283, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461757 59.6909696)'::geometry, 'node', 1632220292, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614802 59.6907676)'::geometry, 'node', 1632220315, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615866 59.6907823)'::geometry, 'node', 1632220319, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611444 59.6908848)'::geometry, 'node', 1632220350, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611916 59.6908345)'::geometry, 'node', 1632220355, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.46127 59.6907954)'::geometry, 'node', 1632220358, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611342 59.6909402)'::geometry, 'node', 1632220359, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614212 59.6910868)'::geometry, 'node', 1632220364, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611621 59.6909941)'::geometry, 'node', 1632220366, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616766 59.6908145)'::geometry, 'node', 1632220378, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616314 59.691059)'::geometry, 'node', 1632220590, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613148 59.6910721)'::geometry, 'node', 1632220686, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613385 59.6907988)'::geometry, 'node', 1632497609, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6476/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Euterpe\",\"material\":\"metal\",\"name\":\"Эвтерпа\",\"name:el\":\"Εὐτέρπη\",\"name:la\":\"Euterpē\",\"name:uk\":\"Евтерпа\",\"name:zh\":\"欧忒耳佩\",\"note\":\"Ошибочно подписано «Clio»\",\"ref\":\"П-61/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614438 59.6907856)'::geometry, 'node', 1632497610, 30, NULL, '{\"alt_name:el\":\"Χλωρίς\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1796\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6475/\",\"historic\":\"yes\",\"historic:start_date\":\"1796\",\"int_name\":\"Flore\",\"material\":\"metal\",\"name\":\"Флора\",\"name:el\":\"Φλόρα\",\"name:en\":\"Flora\",\"ref\":\"П-62/1\",\"ref:okn\":\"781610399040456\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461244 59.690833)'::geometry, 'node', 1632497611, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6470/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Melpomene\",\"material\":\"metal\",\"name\":\"Мельпомена\",\"name:el\":\"Μελπομένη\",\"name:en\":\"Melpomene\",\"name:la\":\"Melpomenē\",\"name:uk\":\"Мельпомена\",\"name:zh\":\"墨爾波墨涅\",\"ref\":\"П-60/1\",\"ref:okn\":\"781610399040376\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617227 59.6909514)'::geometry, 'node', 1632497612, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6468/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Caliope\",\"material\":\"metal\",\"name\":\"Калиопа\",\"name:el\":\"Καλλιόπη\",\"name:la\":\"Calliopē\",\"name:uk\":\"Калліопа\",\"name:zh\":\"卡利俄佩\",\"ref\":\"П-65/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q120979306\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615805 59.6907985)'::geometry, 'node', 1632497613, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6474/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Uranie\",\"material\":\"metal\",\"name\":\"Урания\",\"name:el\":\"Οὐρανία\",\"name:la\":\"Ūrania\",\"ref\":\"П-63/1\",\"ref:okn\":\"78161039904044\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616825 59.6908428)'::geometry, 'node', 1632497614, 29, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6469/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"material\":\"metal\",\"name\":\"Клио\",\"name:el\":\"Κλειώ\",\"name:la\":\"Clīō\",\"note\":\"Подписано «Euterpe»\",\"ref\":\"П-64/1\",\"ref:okn\":\"781610399040466\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614541 59.6909278)'::geometry, 'node', 1632497615, 34, NULL, '{\"alt_name\":\"Аполлон Бельведерский\",\"artist_name\":\"Леохар;модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1782\",\"artwork_type\":\"statue\",\"description\":\"Иконография Бельведерского типа. В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6466/\",\"historic\":\"yes\",\"historic:start_date\":\"1782\",\"material\":\"metal\",\"name\":\"Аполлон\",\"name:en\":\"Apollo\",\"name:zh\":\"阿波罗神像\",\"ref\":\"П-71/1\",\"ref:okn\":\"781610399040386\",\"start_date\":\"1817\",\"tourism\":\"artwork\",\"wikidata\":\"Q118122062\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616021 59.6910564)'::geometry, 'node', 1632497616, 26, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1780\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"historic\":\"yes\",\"historic:start_date\":\"1780\",\"material\":\"metal\",\"name\":\"Венера Каллипиги\",\"ref\":\"П-67/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616651 59.6910293)'::geometry, 'node', 1632497617, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6471/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Polymnia\",\"material\":\"metal\",\"name\":\"Полигимния\",\"name:el\":\"Πολύμνια\",\"name:la\":\"Polyhymnia\",\"name:uk\":\"Полігімнія\",\"name:zh\":\"波吕许谟尼亚\",\"ref\":\"П-66/1\",\"ref:okn\":\"781610399040726\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395079\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614666 59.6910732)'::geometry, 'node', 1632497618, 30, NULL, '{\"alt_name\":\"Гермес Флорентийский\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6467/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Hermes\",\"material\":\"metal\",\"name\":\"Меркурий\",\"name:en\":\"Mercury\",\"ref\":\"П-68/1\",\"ref:okn\":\"781610399040396\",\"start_date\":\"1810\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395060\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613231 59.6910597)'::geometry, 'node', 1632497619, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_subject:wikidata\":\"Q104413\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6477/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Erato\",\"material\":\"metal\",\"name\":\"Эрато\",\"name:el\":\"Ἐρατώ\",\"name:ka\":\"ერატო\",\"name:ko\":\"에라토\",\"name:la\":\"Eratō\",\"name:uk\":\"Ерато\",\"name:zh\":\"厄剌托\",\"ref\":\"П-69/1\",\"ref:okn\":\"781610399040476\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395110\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612077 59.691005)'::geometry, 'node', 1632497620, 31, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6473/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Terpsichore\",\"material\":\"metal\",\"name\":\"Терпсихора\",\"name:el\":\"Τερψιχόρη\",\"name:en\":\"Terpsichore\",\"name:la\":\"Terpsichore\",\"ref\":\"П-70/1\",\"ref:okn\":\"781610399040436\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395096\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611782 59.690902)'::geometry, 'node', 1632497621, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1792\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6472/\",\"historic\":\"yes\",\"historic:start_date\":\"1792\",\"int_name\":\"Thalie\",\"material\":\"metal\",\"name\":\"Талия\",\"name:el\":\"Θαλία\",\"name:la\":\"Thalīa\",\"name:uk\":\"Талія\",\"name:zh\":\"塔利亚\",\"ref\":\"П-59/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612041 59.6907321)'::geometry, 'node', 1632503254, 6, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.462536 59.6908707)'::geometry, 'node', 1652587953, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4619277 59.6908578)'::geometry, 'node', 1652587958, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617256 59.6909215)'::geometry, 'node', 3177639362, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612018 59.6909805)'::geometry, 'node', 3188928044, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613001 59.6906759)'::geometry, 'node', 3218618266, 4, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614144 59.6907882)'::geometry, 'node', 4912277772, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Флора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615482 59.6907937)'::geometry, 'node', 4912277773, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Урания\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613145 59.6908057)'::geometry, 'node', 4912277774, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эвтерпа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616653 59.6908341)'::geometry, 'node', 4912277775, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Клио\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612216 59.6908451)'::geometry, 'node', 4912277776, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Мельпомена\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611751 59.690919)'::geometry, 'node', 4912277777, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Талия\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617272 59.6909351)'::geometry, 'node', 4912277778, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Калиопа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612298 59.691015)'::geometry, 'node', 4912277779, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Терпсихора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616819 59.6910157)'::geometry, 'node', 4912277780, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Полигимния\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461621 59.6910498)'::geometry, 'node', 4912277781, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Венера Каллипиги\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613548 59.6910624)'::geometry, 'node', 4912277782, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эрато\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615016 59.6910712)'::geometry, 'node', 4912277783, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Меркурий\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608954 59.6897746)'::geometry, 'node', 5251698420, 25, NULL, '{\"access\":\"permissive\",\"addr:housenumber\":\"20 литББ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Винченцо Бренна\",\"barrier\":\"gate\",\"description:access\":\"Ворота можно закрывать и открывать руками\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6459/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Большие Старосильвийские ворота\",\"ref\":\"1\",\"ref:okn\":\"781620399040626\",\"start_date\":\"1786..1793\",\"tourism\":\"attraction\",\"website\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"wheelchair\":\"yes\",\"wikidata\":\"Q118122050\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460198 59.6905729)'::geometry, 'node', 6758903438, 6, NULL, '{\"artist_name\":\"И.П. Мартос\",\"artwork_type\":\"sculpture\",\"height\":\"4\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4625734 59.6908311)'::geometry, 'node', 8331430683, 3, NULL, '{\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614743 59.690923)'::geometry, 'node', 8530936200, 1, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Аполлон\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4597619 59.6907527)'::geometry, 'node', 9140565043, 1, NULL, '{\"ford\":\"yes\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4606891 59.6906687)'::geometry, 'node', 9140576937, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608515 59.6907117)'::geometry, 'node', 9140576938, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613945 59.6911519)'::geometry, 'node', 9143069530, 5, NULL, '{\"drain\":\"no\",\"source:direction\":\"survey\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('POINT (30.4615903 59.6911716)'::geometry, 'node', 9143069534, 1, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460339 59.6906064)'::geometry, 'node', 9143093777, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601191 59.6906349)'::geometry, 'node', 9143093778, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610445 59.6908345)'::geometry, 'node', 9143093802, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610243 59.6909861)'::geometry, 'node', 9143093804, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612126 59.691117)'::geometry, 'node', 9143093806, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460445 59.6910504)'::geometry, 'node', 9656736571, 2, NULL, '{\"colour\":\"#4e3a39\",\"description\":\"Веломаршрут №4\",\"height\":\"4\",\"information\":\"guidepost\",\"material\":\"metal\",\"start_date\":\"2021-03..2021-10\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4608056 59.6895935, 30.4608954 59.6897746, 30.4609447 59.6898691, 30.4614541 59.6909278)'::geometry, 'way', 30995960, 42, '{9140727117,5251698420,1518870630,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Центральная аллея\",\"ref\":\"VII\",\"source:name\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605616 59.6906319, 30.4597619 59.6907527, 30.4596087 59.6907755)'::geometry, 'way', 149099000, 6, '{1621246509,9140565043,1621246531}', '{\"intermittent\":\"yes\",\"source:direction\":\"isoline\",\"start_date\":\"1786\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604741 59.6903357, 30.4604598 59.6904575, 30.4604646 59.6905099, 30.4604784 59.6905443, 30.4604933 59.6905665, 30.4605321 59.6905996, 30.4605616 59.6906319)'::geometry, 'way', 149099004, 8, '{1621246503,9140576877,1621246482,1621246465,1621246454,9140576939,1621246509}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601177 59.6905796, 30.4600903 59.6905709, 30.4600721 59.6905605, 30.4600579 59.6905458, 30.4600519 59.6905296, 30.4600545 59.6905133, 30.4600656 59.6904979, 30.4600844 59.6904845, 30.4601095 59.690474, 30.4601391 59.6904673, 30.460169 59.6904648, 30.4601991 59.6904661, 30.4602277 59.6904711, 30.4602498 59.6904787, 30.4602686 59.6904892, 30.4602829 59.6905018, 30.4602918 59.6905174, 30.4602917 59.6905327, 30.4602881 59.6905462, 30.4602793 59.6905579)'::geometry, 'way', 149099028, 5, '{9140576951,9140576902,9140576952,1621246602,1621246607,1621246668,1621246614,1621246615,1621246618,1621246620,1621246630,1621246244,1621246631,1621246224,1621246250,1621246635,1621246647,9140576950,9140576903,9140576949}', '{\"barrier\":\"fence\",\"colour\":\"green\",\"fence_type\":\"wood\",\"height\":\"2\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4603352 59.6911039, 30.460353 59.6910638, 30.4603719 59.6910414, 30.4603979 59.691021, 30.4604807 59.6909761, 30.460577 59.6909284, 30.4606406 59.6908886, 30.460669 59.6908562, 30.460673 59.6908234, 30.4606633 59.6907504, 30.4606582 59.6907286, 30.4606491 59.6907025, 30.4606314 59.690668, 30.460609 59.690636, 30.4605858 59.6906064, 30.4605578 59.6905735, 30.4605362 59.6905385, 30.4605214 59.6905022, 30.4605119 59.6904644, 30.4605095 59.6904098, 30.460512 59.6903499, 30.4605096 59.6903011)'::geometry, 'way', 149099029, 36, '{9140727237,4260007753,9140727241,8650331583,1621246592,1621246588,1621246578,1652603857,9140727240,8650331584,1621246577,9143093738,1621246419,9140576875,1652603906,9140576876,1621246542,8650331586,9140576874,8650331585,1621246403,9140576873,1239612684}', '{\"alt_name\":\"Окружная дорожка\",\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Круговая дорожка\",\"start_date\":\"1789.1793\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610979 59.6907799, 30.4608515 59.6907117)'::geometry, 'way', 149099034, 9, '{1632503255,9140576938}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4629005 59.6913411, 30.4614541 59.6909278)'::geometry, 'way', 150294524, 8, '{1239612692,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"III\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613148 59.6910721, 30.4613667 59.6910818, 30.4614212 59.6910868, 30.4614766 59.6910869, 30.4615311 59.6910822, 30.4615833 59.6910728, 30.4616314 59.691059, 30.461674 59.6910412, 30.4617098 59.6910199, 30.4617378 59.6909958, 30.461757 59.6909696, 30.4617669 59.6909421, 30.4617672 59.6909141, 30.4617579 59.6908866, 30.4617393 59.6908603, 30.4617119 59.690836, 30.4616766 59.6908145, 30.4616343 59.6907964, 30.4615866 59.6907823, 30.4615347 59.6907726, 30.4614802 59.6907676, 30.4614248 59.6907674, 30.4613703 59.6907721, 30.4613181 59.6907815, 30.46127 59.6907954, 30.4612274 59.6908132, 30.4611916 59.6908345, 30.4611636 59.6908586, 30.4611444 59.6908848, 30.4611345 59.6909123, 30.4611342 59.6909402, 30.4611435 59.6909678, 30.4611621 59.6909941, 30.4611895 59.6910184, 30.4612248 59.6910399, 30.461267 59.6910579, 30.4613148 59.6910721)'::geometry, 'way', 150294525, 6, '{1632220686,9143093824,1632220364,9143093807,1632220588,9143093808,1632220590,9143093809,1632220259,9143093810,1632220292,9143093811,1632220283,9143093812,1632220296,9143093813,1632220378,9143093814,1632220319,9143093815,1632220315,9143093816,1632220323,9143093817,1632220358,9143093818,1632220355,9143093819,1632220350,9143093820,1632220359,9143093821,1632220366,9143093822,1632220374,9143093823,1632220686}', '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.460726 59.6910052, 30.460614 59.6910145, 30.4605241 59.69102, 30.4604597 59.691022, 30.4603979 59.691021)'::geometry, 'way', 150294532, 30, '{1632497615,1632220252,9140727238,9140727242,9140727239,1621246592}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"ref\":\"X\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605096 59.6903011, 30.4614541 59.6909278)'::geometry, 'way', 150294541, 8, '{1239612684,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VIII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4617339 59.6901702)'::geometry, 'way', 150294547, 9, '{1632497615,1518870645}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461819 59.6910085, 30.4618473 59.6909863, 30.4618928 59.6909647, 30.461951 59.6909401, 30.4620356 59.6909251, 30.462536 59.6908707)'::geometry, 'way', 152440395, 6, '{1652587944,1652587948,1652587950,9143093800,1652587952,1652587953}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613063 59.6907075, 30.4612631 59.6907161, 30.4612041 59.6907321)'::geometry, 'way', 152442436, 10, '{1652605207,9143204222,1632503254}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4617627 59.6907689, 30.4618218 59.6907946, 30.4618794 59.6908253, 30.4619277 59.6908578)'::geometry, 'way', 152442438, 8, '{1652605205,1652605201,1652605200,1652587958}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4612018 59.6909805, 30.4617256 59.6909215, 30.4625734 59.6908311, 30.4628306 59.6908088)'::geometry, 'way', 311975108, 20, '{3188928044,3177639362,8331430683,7911801321}', '{\"layer\":\"-1\",\"name\":\"Старосильвийская дождевая канализация\",\"source:direction\":\"survey\",\"tunnel\":\"yes\",\"waterway\":\"drain\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611708 59.6911018, 30.4611289 59.6910829, 30.4610793 59.6910531, 30.4610552 59.6910294, 30.4610432 59.6910153, 30.4610243 59.6909861)'::geometry, 'way', 313051687, 8, '{1632503180,9143069533,9143093805,9143069532,1632503185,9143093804}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061)'::geometry, 'way', 426269715, 5, '{4255746051,4255746033,9140576943,9140576942,9140576941,9140576940,4255746057,4255746007,9140576945,9140576946,9140576944,4255746054,4255745992,4255746051}', '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603979 59.691021, 30.4603224 59.6910067, 30.4602382 59.6909843, 30.4601137 59.6909482, 30.4600256 59.6909178, 30.4599203 59.6908773, 30.4597958 59.6908259, 30.4597422 59.6908088, 30.4596966 59.6907997, 30.4596501 59.6907961, 30.4596189 59.6907966, 30.4595885 59.6908005, 30.4595518 59.6908091, 30.4595101 59.6908241)'::geometry, 'way', 438780267, 20, '{1621246592,1621246561,1622496989,8850590008,1621246248,1621246252,8650331580,8849369897,9140576840,8650331579,9140576841,8650331578,9140576842,1622496957}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"loc_name\":\"Спуск у места домика Крик\",\"name\":\"Криковская дорога\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4625498 59.6908065, 30.4614541 59.6909278)'::geometry, 'way', 750779153, 4, '{1632220250,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IV\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4631938 59.6918756)'::geometry, 'way', 750779155, 5, '{1632497615,1195120146}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"II\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4606491 59.6907025)'::geometry, 'way', 750779156, 5, '{1632497615,1621246419}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IX\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4625914 59.6924527)'::geometry, 'way', 750779157, 4, '{1632497615,1652587960}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"I\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611165 59.6918779, 30.46118 59.6916919, 30.4614541 59.6909278)'::geometry, 'way', 750779158, 4, '{9159459639,1239612686,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"XII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4596189 59.6907966, 30.4596712 59.6907865, 30.4597275 59.6907729, 30.459757 59.6907607, 30.4597619 59.6907527, 30.4597677 59.6907431, 30.4597919 59.6907269, 30.4598455 59.6907093, 30.459934 59.6906931, 30.4600118 59.6906782, 30.4600467 59.690666, 30.4600681 59.6906484, 30.4600725 59.6906275, 30.4600655 59.6906044, 30.4600295 59.6905552, 30.4600066 59.6905268, 30.4600031 59.690512, 30.4600111 59.6904995, 30.460044 59.6904799, 30.4600789 59.6904629, 30.4601241 59.6904473)'::geometry, 'way', 988944864, 2, '{9140576841,9140565053,9140565052,9140565051,9140565043,9140565050,9140565049,9140565048,9140565047,9140565046,9140565045,9140565044,1621246253,9140565042,1621246302,1621246323,9140576899,9140576892,9143093786,9143093785,1621246340}', '{\"highway\":\"path\",\"surface\":\"ground\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4607784 59.690696, 30.4606891 59.6906687)'::geometry, 'way', 988944880, 3, '{9140576936,9140576937}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601316 59.6905738, 30.4601383 59.6905745, 30.460144 59.6905725, 30.4601453 59.6905691, 30.4601415 59.6905663, 30.4601348 59.6905656, 30.4601291 59.6905676, 30.4601278 59.6905709, 30.4601316 59.6905738)'::geometry, 'way', 989184163, 1, '{9142788307,9142788306,9142788305,9142788304,9142788303,9142788302,9142788301,9142788300,9142788307}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601637 59.6905695, 30.4601704 59.6905701, 30.4601761 59.6905682, 30.4601774 59.6905648, 30.4601736 59.6905619, 30.4601668 59.6905613, 30.4601612 59.6905632, 30.4601599 59.6905666, 30.4601637 59.6905695)'::geometry, 'way', 989184166, 1, '{9142819031,9142819030,9142819029,9142819028,9142819027,9142819026,9142819025,9142819024,9142819031}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4615026 59.6911479, 30.4614481 59.6911519, 30.4613945 59.6911519)'::geometry, 'way', 989211851, 4, '{1652605211,9143069529,9143069530}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603719 59.6910414, 30.4597387 59.6911122)'::geometry, 'way', 989211857, 12, '{8650331583,4260007752}', '{\"highway\":\"path\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"start_date\":\"1780.1785\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603446 59.6911727, 30.4603806 59.6910714, 30.4603967 59.691047, 30.4604235 59.6910376, 30.4604664 59.6910348, 30.4605415 59.6910308)'::geometry, 'way', 989211858, 1, '{9143069609,9143069608,9143069607,9143069606,9143069605,9143069604}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613583 59.6906799, 30.4614025 59.6907746, 30.461428 59.6907726, 30.4614548 59.6907726, 30.4614763 59.6907739)'::geometry, 'way', 989211859, 1, '{9143093728,9143093727,9143093726,9143093725,9143093724}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461314 59.6906832, 30.461361 59.6907794, 30.4613301 59.6907854, 30.4613033 59.6907929, 30.4612845 59.690799, 30.4609841 59.6905973)'::geometry, 'way', 989211860, 1, '{9143093729,9143093730,9143093731,9143093732,9143093734,9143093733}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611484 59.6909364, 30.4611471 59.6909174, 30.4611497 59.6909005, 30.4611578 59.6908836, 30.4611645 59.6908714, 30.4611739 59.6908606, 30.4606917 59.6907283, 30.460681 59.6907283, 30.460677 59.6907337, 30.460685 59.6907601, 30.4606891 59.6907817, 30.4606917 59.6908129, 30.4606944 59.6908426, 30.4606837 59.6908656, 30.4606596 59.6908927, 30.4606247 59.6909184, 30.460563 59.6909523, 30.460453 59.6910064)'::geometry, 'way', 989211861, 1, '{9143093739,9143093740,9143093741,9143093742,9143093743,9143093744,9143093755,9143093737,9143093736,9143093754,9143093753,9143093722,9143093721,9143093720,9143093719,9143093718,9143093717,9143069616}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605335 59.6903364, 30.4605335 59.6903946, 30.4605308 59.6904501, 30.4605348 59.6904813, 30.4605442 59.6905137, 30.4605576 59.6905394, 30.4605818 59.6905773, 30.4606193 59.6906247, 30.4606408 59.6906545, 30.4606596 59.6906856, 30.4606716 59.6906958, 30.4606958 59.6907039, 30.4611947 59.6908433, 30.4612155 59.6908301, 30.4612369 59.6908166, 30.461253 59.6908098, 30.4609492 59.6906112)'::geometry, 'way', 989211862, 1, '{9143093764,9143093763,9143093762,9143093748,9143093761,9143093760,9143093759,9143093758,9143093757,9143093756,9143093752,9143093751,9143093750,9143093747,9143093746,9143093745,9143093735}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604919 59.6903357, 30.4604919 59.690398, 30.4604892 59.6904494, 30.4604946 59.690486, 30.4605053 59.6905157, 30.4605161 59.6905387, 30.4605402 59.6905766, 30.4605778 59.690624, 30.4605992 59.6906538, 30.460626 59.6906931, 30.4606368 59.6907255, 30.4606448 59.6907574, 30.4606502 59.6907871, 30.4606542 59.6908196, 30.4606502 59.6908494, 30.4606327 59.6908751, 30.4606059 59.6908927, 30.4605496 59.6909266, 30.4604128 59.6909942)'::geometry, 'way', 989211863, 1, '{9143093776,9143093775,9143093774,9143093773,9143093749,9143093772,9143093771,9143093770,9143093769,9143093768,9143093767,9143093765,9143093766,9143069615,9143069610,9143069614,9143069613,9143069612,9143069611}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619893 59.6908956, 30.4620356 59.6909251)'::geometry, 'way', 989211867, 2, '{1652587955,1652587952}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610753 59.6908007, 30.4610979 59.6907799)'::geometry, 'way', 989211868, 4, '{9143093801,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611491 59.6907553, 30.4610979 59.6907799)'::geometry, 'way', 989211869, 4, '{1632503177,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461012 59.6909572, 30.4610056 59.6909157, 30.4610163 59.6908698, 30.4610445 59.6908345)'::geometry, 'way', 989211870, 4, '{1632503179,9143093803,1632503181,9143093802}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613456 59.6911475, 30.46131 59.6911438, 30.4612696 59.6911343, 30.4612126 59.691117)'::geometry, 'way', 989211871, 4, '{1652605209,9143069531,1632503237,9143093806}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4622826 59.6903796)'::geometry, 'way', 991343632, 2, '{1632497615,1518870652}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"V\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4620021 59.690877, 30.4617551 59.6909043, 30.4617579 59.690914, 30.4617593 59.6909255, 30.4617606 59.6909377)'::geometry, 'way', 991343633, 1, '{9159456550,9159456549,9159456545,9159456544,9159456543}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619941 59.6908547, 30.4617471 59.690882, 30.4617392 59.6908714, 30.4617298 59.6908606, 30.4617164 59.6908491)'::geometry, 'way', 991343634, 1, '{9159456552,9159456551,9159456548,9159456547,9159456546}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4602794 59.6911745, 30.4603083 59.6910871)'::geometry, 'way', 991343661, 1, '{9159459675,9159459674}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4614541 59.6909278)'::geometry, 'way', 1042527594, 11, '{9140727237,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч Амфитеатра\",\"ref\":\"XI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4611342 59.6909402, 30.4611345 59.6909123, 30.4611444 59.6908848, 30.4611636 59.6908586, 30.4611916 59.6908345, 30.4612274 59.6908132, 30.46127 59.6907954, 30.4613181 59.6907815, 30.4613703 59.6907721, 30.4614248 59.6907674, 30.4614802 59.6907676, 30.4615347 59.6907726, 30.4615866 59.6907823, 30.4616343 59.6907964, 30.4616766 59.6908145, 30.4617119 59.690836, 30.4617393 59.6908603, 30.4617579 59.6908866, 30.4617672 59.6909141, 30.4617669 59.6909421, 30.461757 59.6909696, 30.4617378 59.6909958, 30.4617098 59.6910199, 30.461674 59.6910412, 30.4616314 59.691059, 30.4615833 59.6910728, 30.4615311 59.6910822, 30.4614766 59.6910869, 30.4614212 59.6910868, 30.4613667 59.6910818, 30.4613148 59.6910721, 30.461267 59.6910579, 30.4612248 59.6910399, 30.4611895 59.6910184, 30.4611621 59.6909941, 30.4611435 59.6909678, 30.4611342 59.6909402)))'::geometry, 'way', 150294525, 6, NULL, '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034)))'::geometry, 'way', 426269715, 5, NULL, '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601599 59.6905666, 30.4601612 59.6905632, 30.4601668 59.6905613, 30.4601736 59.6905619, 30.4601774 59.6905648, 30.4601761 59.6905682, 30.4601704 59.6905701, 30.4601637 59.6905695, 30.4601599 59.6905666)))'::geometry, 'way', 989184166, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography) SERVER sqlite_svr;\n\n--Testcase 41: ERR - raster\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, read PostGOS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49: ERR, no SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 50: ERR, no SRID\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 52:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 53: ERR damaged, but there is SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = (decode('0101000020e6100000bf72ce99fe76', 'hex')::geometry);\n\n-- Insert PostGIS/GEOS BLOB, read SpatiaLite BLOB\n--Testcase 54: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 55:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 56:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 57: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 58:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 59:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 60:  ERR damaged geometry, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (3, decode('0101000020e6100000bf72ce99fe76', 'hex'),  NULL, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 61:  ERR damaged geography, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (4, NULL, decode('0101000020e6100000bf72ce99fe76', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n\n--Testcase 62:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 63:\nINSERT INTO \"♂\" SELECT * FROM \"♂\".\"テスト\";\n--Testcase 64:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 65:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 66:\nSELECT * FROM \"♂\";\n--Testcase 67:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 69:\nSELECT * FROM \"♂\";\n\n--Testcase 70:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL ,\n\tosm_id bigint OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt text\n) SERVER sqlite_svr OPTIONS (table '♁');\n\n--Testcase 71: ERR - No SRID\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\";\n--Testcase 72: OK\nSELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 73:\nUPDATE \"♁\" SET geom = ST_SetSRID(geom, 4326);\n--Testcase 74:\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 75:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 76:\nSELECT * FROM \"♁ FDW\";\n--Testcase 77:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 78:\nSELECT * FROM \"♁ FDW\";\n\n--Testcase 79:\nDROP FOREIGN TABLE \"♂\";\n--Testcase 80:\nDROP FOREIGN TABLE \"♁ FDW\";\n--Testcase 81:\nDROP TABLE \"♁\";\n--Testcase 82:\nDROP TABLE \"♂\".\"テスト\";\n--Testcase 83:\nDROP SCHEMA \"♂\";\n\n-- Test operators implemented in PostGIS 3.4.2, other are not tested\n-- SELECT testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 100   -> TC 150                 -> TC200     -> TC250\n-- WHERE testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 300   -> TC 350                 -> TC400     -> TC450\n\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ gm1 g FROM \"types_PostGIS\";\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && gm1 g FROM \"types_PostGIS\";\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << gm1 g FROM \"types_PostGIS\";\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> gm1 g FROM \"types_PostGIS\";\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< gm1 g FROM \"types_PostGIS\";\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> gm1 g FROM \"types_PostGIS\";\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| gm1 g FROM \"types_PostGIS\";\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> gm1 g FROM \"types_PostGIS\";\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| gm1 g FROM \"types_PostGIS\";\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> gm1 g FROM \"types_PostGIS\";\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= gm1 g FROM \"types_PostGIS\";\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm = gm1 g FROM \"types_PostGIS\";\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| gm1 g FROM \"types_PostGIS\";\n--Testcase 115\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> gm1 g FROM \"types_PostGIS\";\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> gm1 g FROM \"types_PostGIS\";\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ gm1 g FROM \"types_PostGIS\";\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ gm1 g FROM \"types_PostGIS\";\n\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 157:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 159:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> gg1 g FROM \"types_PostGIS\";\n--Testcase 201:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && gg1 g FROM \"types_PostGIS\";\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> gg1 g FROM \"types_PostGIS\";\n--Testcase 203:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg = gg1 g FROM \"types_PostGIS\";\n--Testcase 204\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != gg1 g FROM \"types_PostGIS\";\n\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 300:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ gm1 IS NOT NULL;\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && gm1 IS NOT NULL;\n--Testcase 302:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << gm1 IS NOT NULL;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> gm1 IS NOT NULL;\n--Testcase 304:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< gm1 IS NOT NULL;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> gm1 IS NOT NULL;\n--Testcase 306:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| gm1 IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> gm1 IS NOT NULL;\n--Testcase 308:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| gm1 IS NOT NULL;\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> gm1 IS NOT NULL;\n--Testcase 310:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= gm1 IS NOT NULL;\n--Testcase 311:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm = gm1 IS NOT NULL;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& gm1 IS NOT NULL;\n--Testcase 313:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| gm1 IS NOT NULL;\n--Testcase 314:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> gm1 IS NOT NULL;\n--Testcase 315:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> gm1 IS NOT NULL;\n--Testcase 316:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ gm1 IS NOT NULL;\n--Testcase 317:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ gm1 IS NOT NULL;\n\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 351:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 352:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 353:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 354:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 355:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 356:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 357:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 358:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 359:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 360:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 361:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 362:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 363:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 364:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 365:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 366:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 367:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 368:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 369:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 370:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 400:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> gg1 IS NOT NULL;\n--Testcase 401:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && gg1 IS NOT NULL;\n--Testcase 402:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 404:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg = gg1 IS NOT NULL;\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != gg1 IS NOT NULL;\n\n--Testcase 450:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 451:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 452:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 453:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 454:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 500:\nDROP FOREIGN TABLE \"types_PostGIS\";\n--Testcase 501:\nDROP EXTENSION sqlite_fdw CASCADE;\n--Testcase 502:\nDROP EXTENSION postgis CASCADE;\n"
  },
  {
    "path": "sql/15.7/with_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 47:\nCREATE EXTENSION postgis;\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/without_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/without_gis_support/nogis.sql",
    "content": "--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 10:\nCREATE DOMAIN geometry AS bytea;\n--Testcase 11:\nCREATE DOMAIN geography AS bytea;\n--Testcase 12:\nCREATE DOMAIN addbandarg AS bytea;\n--Testcase 13:\nCREATE DOMAIN box2d AS bytea;\n--Testcase 14:\nCREATE DOMAIN box3d AS bytea;\n--Testcase 15:\nCREATE DOMAIN geometry_dump AS bytea;\n--Testcase 16:\nCREATE DOMAIN geomval AS bytea;\n--Testcase 17:\nCREATE DOMAIN getfaceedges_returntype AS bytea;\n--Testcase 18:\nCREATE DOMAIN rastbandarg AS bytea;\n--Testcase 19:\nCREATE DOMAIN raster AS bytea;\n--Testcase 20:\nCREATE DOMAIN reclassarg AS bytea;\n--Testcase 21:\nCREATE DOMAIN summarystats AS bytea;\n--Testcase 22:\nCREATE DOMAIN topoelement AS bytea;\n--Testcase 23:\nCREATE DOMAIN topoelementarray AS bytea;\n--Testcase 24:\nCREATE DOMAIN topogeometry AS bytea;\n--Testcase 25:\nCREATE DOMAIN unionarg AS bytea;\n--Testcase 26:\nCREATE DOMAIN validatetopology_returntype AS bytea;\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text) SERVER sqlite_svr;\n\n--Testcase 41: ERR unable to convert to unsupported PostGIS specific data type\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, but CANNOT read PostGIS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: read the same BLOBs\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n--Testcase 50:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n\n-- Insert a BLOB, read SpatiaLite BLOB without any transformations\n--Testcase 51: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 52:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 53:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 54: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n\n--Testcase 55:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 56:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 57:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 58:\nSELECT * FROM \"♂\";\n--Testcase 59:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 60:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 61:\nINSERT INTO \"♂\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\n--Testcase 62:\nSELECT * FROM \"♂\";\n\n--Testcase 63:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL,\n\tosm_id int OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt json\n) SERVER sqlite_svr\nOPTIONS (table '♁');\n\n--Testcase 55:\nINSERT INTO \"♁ FDW\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 67:\nSELECT * FROM \"♁ FDW\";\n\n-- PostGIS specific data types, but SpatiaLite or sqlite_fdw unsupported \n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box2d;\n--Testcase 69: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 70:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box3d;\n--Testcase 71: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 72:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry_dump;\n--Testcase 73: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 74:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geomval;\n--Testcase 75: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 76:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE getfaceedges_returntype;\n--Testcase 77: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 78:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE rastbandarg;\n--Testcase 79: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 80:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE raster;\n--Testcase 81: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 82:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE reclassarg;\n--Testcase 83: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 84:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE summarystats;\n--Testcase 85: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 86:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelement;\n--Testcase 87: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 88:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelementarray;\n--Testcase 89: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 90:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topogeometry;\n--Testcase 91: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 92:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE unionarg;\n--Testcase 93: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 94:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE validatetopology_returntype;\n--Testcase 95: -- ERR\nSELECT * FROM \"♂\";\n\n-- PostGIS specific data types, not bytea mode, hence error\n--Testcase 96:\nALTER DOMAIN geometry RENAME TO geom0;\n--Testcase 97:\nALTER DOMAIN geography RENAME TO geog0;\n--Testcase 98:\nCREATE DOMAIN geometry AS text;\n--Testcase 99:\nCREATE DOMAIN geography AS text;\n\n--Testcase 100:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 101: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 102:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geography;\n--Testcase 102: -- ERR\nSELECT * FROM \"♂\";\n\n--Testcase 103:\nDROP DOMAIN geometry CASCADE;\n--Testcase 104:\nDROP DOMAIN geography CASCADE;\n--Testcase 105:\nDROP DOMAIN addbandarg;\n--Testcase 106:\nDROP DOMAIN box2d;\n--Testcase 107:\nDROP DOMAIN box3d;\n--Testcase 108:\nDROP DOMAIN geometry_dump;\n--Testcase 109:\nDROP DOMAIN geomval;\n--Testcase 110:\nDROP DOMAIN getfaceedges_returntype;\n--Testcase 111:\nDROP DOMAIN rastbandarg;\n--Testcase 112:\nDROP DOMAIN raster CASCADE;\n--Testcase 113:\nDROP DOMAIN reclassarg;\n--Testcase 114:\nDROP DOMAIN summarystats;\n--Testcase 115:\nDROP DOMAIN topoelement;\n--Testcase 116:\nDROP DOMAIN topoelementarray;\n--Testcase 117:\nDROP DOMAIN topogeometry;\n--Testcase 118:\nDROP DOMAIN unionarg;\n--Testcase 119:\nDROP DOMAIN validatetopology_returntype;\n--Testcase 120:\nDROP DOMAIN geom0 CASCADE;\n--Testcase 121:\nDROP DOMAIN geog0 CASCADE;\n\n--Testcase 122:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 123:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/15.7/without_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/aggregate.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 18:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n-- test for aggregate pushdown\n--Testcase 8:\nDROP SERVER IF EXISTS sqlite_svr CASCADE;\n--Testcase 9:\nDROP EXTENSION IF EXISTS sqlite_fdw CASCADE;\n\n--Testcase 10:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 11:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 12:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nexplain (costs off, verbose) select count(distinct a) from multiprimary;\n\n--Testcase 2:\nexplain (costs off, verbose) select sum(b),max(b), min(b), avg(b) from multiprimary;\n\n--Testcase 3:\nexplain (costs off, verbose) select sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n\n--Testcase 4:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having sum(a) > 0;\n\n--Testcase 5:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having avg(a^2) > 0 and sum(a) > 0;\n\n-- stddev and variance are not pushed down\n--Testcase 6:\nexplain (costs off, verbose) select stddev(a) from multiprimary;\n--Testcase 7:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having variance(a) > 0;\n\n--Testcase 13:\nDROP FOREIGN TABLE multiprimary;\n\n--Testcase 16:\nCREATE FOREIGN TABLE limittest(id serial OPTIONS (key 'true'), x int, y text) SERVER sqlite_svr;\n\n--Testcase 17:\nINSERT INTO limittest(x, y) VALUES (1, 'x'), (2, 'x'), (3, 'x'), (4, 'x');\n--Testcase 18:\nINSERT INTO limittest(x, y) VALUES (1, 'y'), (2, 'y'), (3, 'y'), (4, 'y');\n--Testcase 19:\nINSERT INTO limittest(x, y) VALUES (1, 'z'), (2, 'z'), (3, 'z'), (4, 'z');\n\n--Testcase 20:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 21:\nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 22:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 23:\nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 24:\nEXPLAIN VERBOSE \nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 25:\nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 26:\nEXPLAIN VERBOSE \nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n--Testcase 27:\nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n\n--Testcase 28:\nDROP FOREIGN TABLE limittest;\n\n--Testcase 14:\nDROP SERVER sqlite_svr;\n--Testcase 15:\nDROP EXTENSION sqlite_fdw CASCADE;\n\n"
  },
  {
    "path": "sql/16.3/extra/aggregates.sql",
    "content": "--\n-- AGGREGATES\n--\n--Testcase 266:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 267:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 268:\nCREATE FOREIGN TABLE onek(\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 269:\nCREATE FOREIGN TABLE aggtest (\n  a       int2,\n  b     float4\n) SERVER sqlite_svr;\n\n--Testcase 270:\nCREATE FOREIGN TABLE student (\n  name    text,\n  age     int4,\n  location  point,\n  gpa     float8\n) SERVER sqlite_svr;\n\n--Testcase 271:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 272:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 697:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 698:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 699:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 700:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 701:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 273:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 702:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 703:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 704:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 705:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 706:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 274:\nCREATE FOREIGN TABLE multi_arg_agg (a int OPTIONS (key 'true'), b int, c text) SERVER sqlite_svr;\n\n--Testcase 275:\nCREATE FOREIGN TABLE VARCHAR_TBL(f1 varchar(4) OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 276:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 588:\nSET extra_float_digits = 0;\n--Testcase 1:\nSELECT avg(four) AS avg_1 FROM onek;\n\n--Testcase 2:\nSELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;\n\n--Testcase 707:\nCREATE FOREIGN TABLE agg_tb(v int, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO agg_tb(v) VALUES(1), (2), (3);\n--Testcase 709: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 710:\nDELETE FROM agg_tb;\n--Testcase 711:\nINSERT INTO agg_tb(v) VALUES (NULL);\n--Testcase 712: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 713:\nDELETE FROM agg_tb;\n--Testcase 714:\nINSERT INTO agg_tb(v) VALUES (NULL), (1), (2);\n--Testcase 715: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 716:\nCREATE FOREIGN TABLE agg_tb2(v text) SERVER sqlite_svr;\n--Testcase 717:\nINSERT INTO agg_tb2(v) VALUES (array['hello', 'world']);\n--Testcase 718: -- Pg 16+\nSELECT any_value(v) FROM agg_tb2;\n\n-- In 7.1, avg(float4) is computed using float8 arithmetic.\n--Testcase 3:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 678:\nSELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;\n\n--Testcase 4:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 679:\nSELECT avg(gpa)::numeric(10,3) AS avg_3_4 FROM ONLY student;\n\n\n--Testcase 5:\nSELECT sum(four) AS sum_1500 FROM onek;\n--Testcase 6:\nSELECT sum(a) AS sum_198 FROM aggtest;\n--Testcase 7:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 680:\nSELECT sum(b)::numeric(10,3) AS avg_431_773 FROM aggtest;\n--Testcase 8:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 681:\nSELECT sum(gpa)::numeric(10,3) AS avg_6_8 FROM ONLY student;\n\n--Testcase 9:\nSELECT max(four) AS max_3 FROM onek;\n--Testcase 10:\nSELECT max(a) AS max_100 FROM aggtest;\n--Testcase 11:\nSELECT max(aggtest.b) AS max_324_78 FROM aggtest;\n--Testcase 12:\nSELECT max(student.gpa) AS max_3_7 FROM student;\n\n--Testcase 13:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 682:\nSELECT stddev_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 14:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 683:\nSELECT stddev_samp(b)::numeric(20,10) FROM aggtest;\n--Testcase 15:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 684:\nSELECT var_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 16:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 685:\nSELECT var_samp(b)::numeric(20,10) FROM aggtest;\n\n--Testcase 17:\nSELECT stddev_pop(b::numeric) FROM aggtest;\n--Testcase 18:\nSELECT stddev_samp(b::numeric) FROM aggtest;\n--Testcase 19:\nSELECT var_pop(b::numeric) FROM aggtest;\n--Testcase 20:\nSELECT var_samp(b::numeric) FROM aggtest;\n\n-- population variance is defined for a single tuple, sample variance\n-- is not\n--Testcase 277:\nCREATE FOREIGN TABLE agg_t3(a float8, b float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 278:\nDELETE FROM agg_t3;\n--Testcase 279:\nINSERT INTO agg_t3 values (1.0::float8, 2.0::float8);\n--Testcase 280:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n\n--Testcase 281:\nDELETE FROM agg_t3;\n--Testcase 282:\nINSERT INTO agg_t3 values (3.0::float8, 4.0::float8);\n--Testcase 283:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 284:\nDELETE FROM agg_t3;\n--Testcase 285:\nINSERT INTO agg_t3 values ('inf'::float8, 'inf'::float8);\n--Testcase 286:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 287:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 288:\nDELETE FROM agg_t3;\n--Testcase 289:\nINSERT INTO agg_t3 values ('nan'::float8, 'nan'::float8);\n--Testcase 290:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 291:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 292:\nCREATE FOREIGN TABLE agg_t4(a float4, b float4, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 293:\nDELETE FROM agg_t4;\n--Testcase 294:\nINSERT INTO agg_t4 values (1.0::float4, 2.0::float4);\n--Testcase 295:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n\n--Testcase 296:\nDELETE FROM agg_t4;\n--Testcase 297:\nINSERT INTO agg_t4 values (3.0::float4, 4.0::float4);\n--Testcase 298:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 299:\nDELETE FROM agg_t4;\n--Testcase 300:\nINSERT INTO agg_t4 values ('inf'::float4, 'inf'::float4);\n--Testcase 301:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 302:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 303:\nDELETE FROM agg_t4;\n--Testcase 304:\nINSERT INTO agg_t4 values ('nan'::float4, 'nan'::float4);\n--Testcase 305:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 306:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 307:\nCREATE FOREIGN TABLE agg_t5(a numeric, b numeric, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 308:\nDELETE FROM agg_t5;\n--Testcase 309:\nINSERT INTO agg_t5 values (1.0::numeric, 2.0::numeric);\n--Testcase 310:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 311:\nDELETE FROM agg_t5;\n--Testcase 312:\nINSERT INTO agg_t5 values (3.0::numeric, 4.0::numeric);\n--Testcase 313:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 597:\nDELETE FROM agg_t5;\n--Testcase 598:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 599:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 600:\nDELETE FROM agg_t5;\n--Testcase 601:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 602:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 314:\nDELETE FROM agg_t5;\n--Testcase 315:\nINSERT INTO agg_t5 values ('nan'::numeric, 'nan'::numeric);\n--Testcase 316:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n--Testcase 317:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n-- verify correct results for null and NaN inputs\n--Testcase 318:\nCREATE FOREIGN TABLE agg_t8(a text OPTIONS (key 'true'), b text) SERVER sqlite_svr;\n--Testcase 319:\nDELETE FROM agg_t8;\n--Testcase 320:\nINSERT INTO agg_t8 select * from generate_series(1,3);\n--Testcase 321:\nselect sum(null::int4) from agg_t8;\n--Testcase 322:\nselect sum(null::int8) from agg_t8;\n--Testcase 323:\nselect sum(null::numeric) from agg_t8;\n--Testcase 324:\nselect sum(null::float8) from agg_t8;\n--Testcase 325:\nselect avg(null::int4) from agg_t8;\n--Testcase 326:\nselect avg(null::int8) from agg_t8;\n--Testcase 327:\nselect avg(null::numeric) from agg_t8;\n--Testcase 328:\nselect avg(null::float8) from agg_t8;\n--Testcase 329:\nselect sum('NaN'::numeric) from agg_t8;\n--Testcase 330:\nselect avg('NaN'::numeric) from agg_t8;\n\n-- verify correct results for infinite inputs\n--Testcase 331:\nDELETE FROM agg_t3;\n--Testcase 332:\nINSERT INTO agg_t3 VALUES ('1'::float8), ('infinity'::float8);\n--Testcase 333:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 334:\nDELETE FROM agg_t3;\n--Testcase 335:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('1'::float8);\n--Testcase 336:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 337:\nDELETE FROM agg_t3;\n--Testcase 338:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('infinity'::float8);\n--Testcase 339:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 340:\nDELETE FROM agg_t3;\n--Testcase 341:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('infinity'::float8);\n--Testcase 342:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 603:\nDELETE FROM agg_t3;\n--Testcase 604:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('-infinity'::float8);\n--Testcase 605:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 606:\nDELETE FROM agg_t3;\n--Testcase 607:\nINSERT INTO agg_t3 VALUES ('1'::numeric), ('infinity'::numeric);\n--Testcase 608:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 609:\nDELETE FROM agg_t3;\n--Testcase 610:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('1'::numeric);\n--Testcase 611:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 612:\nDELETE FROM agg_t3;\n--Testcase 613:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('infinity'::numeric);\n--Testcase 614:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 615:\nDELETE FROM agg_t3;\n--Testcase 616:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('infinity'::numeric);\n--Testcase 617:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 618:\nDELETE FROM agg_t3;\n--Testcase 619:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('-infinity'::numeric);\n--Testcase 620:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n-- test accuracy with a large input offset\n--Testcase 343:\nCREATE FOREIGN TABLE agg_t6(a float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 344:\nDELETE FROM agg_t6;\n--Testcase 345:\nINSERT INTO agg_t6 VALUES (100000003), (100000004), (100000006), (100000007);\n--Testcase 346:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n--Testcase 347:\nDELETE FROM agg_t6;\n--Testcase 348:\nINSERT INTO agg_t6 VALUES (7000000000005), (7000000000007);\n--Testcase 349:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n-- SQL2003 binary aggregates\n--Testcase 21:\nSELECT regr_count(b, a) FROM aggtest;\n--Testcase 22:\nSELECT regr_sxx(b, a) FROM aggtest;\n--Testcase 23:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 686:\nSELECT regr_syy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 24:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 687:\nSELECT regr_sxy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 25:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 688:\nSELECT regr_avgx(b, a), regr_avgy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 26:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 689:\nSELECT regr_r2(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 27:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 690:\nSELECT regr_slope(b, a)::numeric(20,10), regr_intercept(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 28:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 691:\nSELECT covar_pop(b, a)::numeric(20,10), covar_samp(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 29:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 692:\nSELECT corr(b, a)::numeric(20,10) FROM aggtest;\n\n-- check single-tuple behavior\n--Testcase 350:\nCREATE FOREIGN TABLE agg_t7(a float8, b float8, c float8, d float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 351:\nDELETE FROM agg_t7;\n--Testcase 352:\nINSERT INTO agg_t7 VALUES (1, 2, 3, 4);\n--Testcase 353:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 354:\nDELETE FROM agg_t7;\n--Testcase 355:\nINSERT INTO agg_t7 VALUES (1, 'inf', 3, 'inf');\n--Testcase 356:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 357:\nDELETE FROM agg_t7;\n--Testcase 358:\nINSERT INTO agg_t7 VALUES (1, 'nan', 3, 'nan');\n--Testcase 359:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n-- test accum and combine functions directly\n--Testcase 360:\nCREATE FOREIGN TABLE regr_test (x float8, y float8, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 361:\nDELETE FROM regr_test;\n--Testcase 362:\nINSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);\n--Testcase 363:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 364:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 590:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 365:\nCREATE FOREIGN TABLE agg_t15 (a text, b int, c int, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 366:\ndelete from agg_t15;\n--Testcase 367:\ninsert into agg_t15 values ('{4,140,2900}', 100);\n--Testcase 368:\nSELECT float8_accum(a::float8[], b) from agg_t15;\n\n--Testcase 369:\ndelete from agg_t15;\n--Testcase 370:\ninsert into agg_t15 values ('{4,140,2900,1290,83075,15050}', 200, 100);\n--Testcase 371:\nSELECT float8_regr_accum(a::float8[], b, c) from agg_t15;\n\n--Testcase 372:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30);\n\n--Testcase 373:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (80,100);\n\n--Testcase 374:\nCREATE FOREIGN TABLE agg_t16 (a text, b text, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 375:\ndelete from agg_t16;\n--Testcase 376:\ninsert into agg_t16 values ('{3,60,200}', '{0,0,0}');\n--Testcase 377:\ninsert into agg_t16 values ('{0,0,0}', '{2,180,200}');\n--Testcase 378:\ninsert into agg_t16 values ('{3,60,200}', '{2,180,200}');\n--Testcase 379:\nSELECT float8_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 380:\ndelete from agg_t16;\n--Testcase 381:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{0,0,0,0,0,0}');\n--Testcase 382:\ninsert into agg_t16 values ('{0,0,0,0,0,0}', '{2,180,200,740,57800,-3400}');\n--Testcase 383:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{2,180,200,740,57800,-3400}');\n--Testcase 384:\nSELECT float8_regr_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 385:\nDROP FOREIGN TABLE regr_test;\n\n-- test count, distinct\n--Testcase 30:\nSELECT count(four) AS cnt_1000 FROM onek;\n--Testcase 31:\nSELECT count(DISTINCT four) AS cnt_4 FROM onek;\n\n--Testcase 32:\nselect ten, count(*), sum(four) from onek\ngroup by ten order by ten;\n\n--Testcase 33:\nselect ten, count(four), sum(DISTINCT four) from onek\ngroup by ten order by ten;\n\n-- user-defined aggregates\n--Testcase 386:\nCREATE AGGREGATE newavg (\n   sfunc = int4_avg_accum, basetype = int4, stype = _int8,\n   finalfunc = int8_avg,\n   initcond1 = '{0,0}'\n);\n\n--Testcase 387:\nCREATE AGGREGATE newsum (\n   sfunc1 = int4pl, basetype = int4, stype1 = int4,\n   initcond1 = '0'\n);\n\n--Testcase 388:\nCREATE AGGREGATE newcnt (*) (\n   sfunc = int8inc, stype = int8,\n   initcond = '0', parallel = safe\n);\n\n--Testcase 389:\nCREATE AGGREGATE newcnt (\"any\") (\n   sfunc = int8inc_any, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 390:\nCREATE AGGREGATE oldcnt (\n   sfunc = int8inc, basetype = 'ANY', stype = int8,\n   initcond = '0'\n);\n\n--Testcase 391:\ncreate function sum3(int8,int8,int8) returns int8 as\n'select $1 + $2 + $3' language sql strict immutable;\n\n--Testcase 392:\ncreate aggregate sum2(int8,int8) (\n   sfunc = sum3, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 34:\nSELECT newavg(four) AS avg_1 FROM onek;\n--Testcase 35:\nSELECT newsum(four) AS sum_1500 FROM onek;\n--Testcase 36:\nSELECT newcnt(four) AS cnt_1000 FROM onek;\n--Testcase 37:\nSELECT newcnt(*) AS cnt_1000 FROM onek;\n--Testcase 38:\nSELECT oldcnt(*) AS cnt_1000 FROM onek;\n--Testcase 39:\nSELECT sum2(q1,q2) FROM int8_tbl;\n\n-- test for outer-level aggregates\n\n-- this should work\n--Testcase 40:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n-- this should fail because subquery has an agg of its own in WHERE\n--Testcase 41:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b\n               where sum(distinct a.four + b.four) = b.four);\n\n-- Test handling of sublinks within outer-level aggregates.\n-- Per bug report from Daniel Grace.\n--Testcase 42:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))\nfrom tenk1 o;\n\n-- Test handling of Params within aggregate arguments in hashed aggregation.\n-- Per bug report from Jeevan Chalke.\n--Testcase 393:\nexplain (verbose, costs off)\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 394:\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 395:\nexplain (verbose, costs off)\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--Testcase 396:\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--\n-- test for bitwise integer aggregates\n--\n--Testcase 397:\nCREATE FOREIGN TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 43:\nSELECT\n  BIT_AND(i2) AS \"?\",\n  BIT_OR(i4)  AS \"?\",\n  BIT_XOR(i8) AS \"?\"\nFROM bitwise_test;\n\n--Testcase 44:\nINSERT INTO bitwise_test VALUES\n  (1, 1, 1, 1, 1),\n  (3, 3, 3, null, 2),\n  (7, 7, 7, 3, 4);\n\n--Testcase 45:\nSELECT\n  BIT_AND(i2) AS \"1\",\n  BIT_AND(i4) AS \"1\",\n  BIT_AND(i8) AS \"1\",\n  BIT_AND(i)  AS \"?\",\n  BIT_AND(x)  AS \"0\",\n\n  BIT_OR(i2)  AS \"7\",\n  BIT_OR(i4)  AS \"7\",\n  BIT_OR(i8)  AS \"7\",\n  BIT_OR(i)   AS \"?\",\n  BIT_OR(x)   AS \"7\",\n\n  BIT_XOR(i2) AS \"5\",\n  BIT_XOR(i4) AS \"5\",\n  BIT_XOR(i8) AS \"5\",\n  BIT_XOR(i)  AS \"?\",\n  BIT_XOR(x)  AS \"7\"\nFROM bitwise_test;\n\n--\n-- test boolean aggregates\n--\n-- first test all possible transition and final states\n\n--Testcase 398:\nCREATE FOREIGN TABLE bool_test_tmp(\n  b1 BOOL OPTIONS (key 'true'),\n  b2 BOOL OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n-- boolean and transitions\n-- null because strict\nBEGIN;\n--Testcase 399:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 400:\nSELECT booland_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- and actual computations\nBEGIN;\n--Testcase 401:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE);\n--Testcase 402:\nSELECT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 403:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, FALSE),\n  (FALSE, TRUE),\n  (FALSE, FALSE);\n--Testcase 404:\nSELECT NOT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- boolean or transitions\n-- null because strict\nBEGIN;\n--Testcase 405:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 406:\nSELECT boolor_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- actual computations\nBEGIN;\n--Testcase 407:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE),\n  (TRUE, FALSE),\n  (FALSE, TRUE);\n--Testcase 408:\nSELECT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 409:\nINSERT INTO bool_test_tmp VALUES\n  (FALSE, FALSE);\n--Testcase 410:\nSELECT NOT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n--Testcase 411:\nCREATE FOREIGN TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 46:\nSELECT\n  BOOL_AND(b1)   AS \"n\",\n  BOOL_OR(b3)    AS \"n\"\nFROM bool_test;\n\n--Testcase 47:\nINSERT INTO bool_test VALUES\n  (TRUE, null, FALSE, null),\n  (FALSE, TRUE, null, null),\n  (null, TRUE, FALSE, null);\n\n--Testcase 48:\nSELECT\n  BOOL_AND(b1)     AS \"f\",\n  BOOL_AND(b2)     AS \"t\",\n  BOOL_AND(b3)     AS \"f\",\n  BOOL_AND(b4)     AS \"n\",\n  BOOL_AND(NOT b2) AS \"f\",\n  BOOL_AND(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 49:\nSELECT\n  EVERY(b1)     AS \"f\",\n  EVERY(b2)     AS \"t\",\n  EVERY(b3)     AS \"f\",\n  EVERY(b4)     AS \"n\",\n  EVERY(NOT b2) AS \"f\",\n  EVERY(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 50:\nSELECT\n  BOOL_OR(b1)      AS \"t\",\n  BOOL_OR(b2)      AS \"t\",\n  BOOL_OR(b3)      AS \"f\",\n  BOOL_OR(b4)      AS \"n\",\n  BOOL_OR(NOT b2)  AS \"f\",\n  BOOL_OR(NOT b3)  AS \"t\"\nFROM bool_test;\n\n--\n-- Test cases that should be optimized into indexscans instead of\n-- the generic aggregate implementation.\n--\n\n-- Basic cases\n--Testcase 51:\nexplain (costs off)\n  select min(unique1) from tenk1;\n--Testcase 52:\nselect min(unique1) from tenk1;\n--Testcase 53:\nexplain (costs off)\n  select max(unique1) from tenk1;\n--Testcase 54:\nselect max(unique1) from tenk1;\n--Testcase 55:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 < 42;\n--Testcase 56:\nselect max(unique1) from tenk1 where unique1 < 42;\n--Testcase 57:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42;\n--Testcase 58:\nselect max(unique1) from tenk1 where unique1 > 42;\n\n-- the planner may choose a generic aggregate here if parallel query is\n-- enabled, since that plan will be parallel safe and the \"optimized\"\n-- plan, which has almost identical cost, will not be.  we want to test\n-- the optimized plan, so temporarily disable parallel query.\nbegin;\n--Testcase 628:\nset local max_parallel_workers_per_gather = 0;\n--Testcase 59:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42000;\n--Testcase 60:\nselect max(unique1) from tenk1 where unique1 > 42000;\nrollback;\n\n-- multi-column index (uses tenk1_thous_tenthous)\n--Testcase 61:\nexplain (costs off)\n  select max(tenthous) from tenk1 where thousand = 33;\n--Testcase 62:\nselect max(tenthous) from tenk1 where thousand = 33;\n--Testcase 63:\nexplain (costs off)\n  select min(tenthous) from tenk1 where thousand = 33;\n--Testcase 64:\nselect min(tenthous) from tenk1 where thousand = 33;\n\n-- check parameter propagation into an indexscan subquery\n--Testcase 65:\nexplain (costs off)\n  select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n    from int4_tbl;\n--Testcase 66:\nselect f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n  from int4_tbl;\n\n-- check some cases that were handled incorrectly in 8.3.0\n--Testcase 67:\nexplain (costs off)\n  select distinct max(unique2) from tenk1;\n--Testcase 68:\nselect distinct max(unique2) from tenk1;\n--Testcase 69:\nexplain (costs off)\n  select max(unique2) from tenk1 order by 1;\n--Testcase 70:\nselect max(unique2) from tenk1 order by 1;\n--Testcase 71:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2);\n--Testcase 72:\nselect max(unique2) from tenk1 order by max(unique2);\n--Testcase 73:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 74:\nselect max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 75:\nexplain (costs off)\n  select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n--Testcase 76:\nselect max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n\n-- interesting corner case: constant gets optimized into a seqscan\n--Testcase 77:\nexplain (costs off)\n  select max(100) from tenk1;\n--Testcase 78:\nselect max(100) from tenk1;\n\n-- try it on an inheritance tree\n--Testcase 412:\ncreate foreign table minmaxtest(f1 int) server sqlite_svr;\n--Testcase 413:\ncreate table minmaxtest1() inherits (minmaxtest);\n--Testcase 414:\ncreate table minmaxtest2() inherits (minmaxtest);\n--Testcase 415:\ncreate table minmaxtest3() inherits (minmaxtest);\n--Testcase 416:\ncreate index minmaxtest1i on minmaxtest1(f1);\n--Testcase 417:\ncreate index minmaxtest2i on minmaxtest2(f1 desc);\n--Testcase 418:\ncreate index minmaxtest3i on minmaxtest3(f1) where f1 is not null;\n\n--Testcase 79:\ninsert into minmaxtest values(11), (12);\n--Testcase 80:\ninsert into minmaxtest1 values(13), (14);\n--Testcase 81:\ninsert into minmaxtest2 values(15), (16);\n--Testcase 82:\ninsert into minmaxtest3 values(17), (18);\n\n--Testcase 83:\nexplain (costs off)\n  select min(f1), max(f1) from minmaxtest;\n--Testcase 84:\nselect min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT doesn't do anything useful here, but it shouldn't fail\n--Testcase 85:\nexplain (costs off)\n  select distinct min(f1), max(f1) from minmaxtest;\n--Testcase 86:\nselect distinct min(f1), max(f1) from minmaxtest;\n\n-- check for correct detection of nested-aggregate errors\n--Testcase 87:\nselect max(min(unique1)) from tenk1;\n--Testcase 88:\nselect (select max(min(unique1)) from int8_tbl) from tenk1;\n--Testcase 719:\nselect avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3))\n            from tenk1 a1(col1)))\nfrom tenk1 a2(col2);\n--\n-- Test removal of redundant GROUP BY columns\n--\n\n--Testcase 419:\ncreate foreign table agg_t1 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int, d int) server sqlite_svr;\n--Testcase 420:\ncreate foreign table agg_t2 (x int OPTIONS (key 'true'), y int OPTIONS (key 'true'), z int) server sqlite_svr;\n--Testcase 421:\ncreate foreign table agg_t9 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int) server sqlite_svr;\n\n-- Non-primary-key columns can be removed from GROUP BY\n--Testcase 89:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- No removal can happen if the complete PK is not present in GROUP BY\n--Testcase 90:\nexplain (costs off) select a,c from agg_t1 group by a,c,d;\n\n-- Test removal across multiple relations\n--Testcase 91:\nexplain (costs off) select *\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.y,agg_t2.z;\n\n-- Test case where agg_t1 can be optimized but not agg_t2\n--Testcase 92:\nexplain (costs off) select agg_t1.*,agg_t2.x,agg_t2.z\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.z;\n\n-- Cannot optimize when PK is deferrable\n--Testcase 422:\nexplain (costs off) select * from agg_t9 group by a,b,c;\n\n--Testcase 423:\ncreate temp table t1c () inherits (agg_t1);\n\n-- Ensure we don't remove any columns when t1 has a child table\n--Testcase 424:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- Okay to remove columns if we're only querying the parent.\n--Testcase 425:\nexplain (costs off) select * from only agg_t1 group by a,b,c,d;\n\n-- Skip this test, sqlite_fdw does not support partition table\n--create foreign table p_t1 (\n--  a int options (key 'true'),\n--  b int options (key 'true'),\n--  c int,\n--  d int,\n--) partition by list(a) server sqlite_svr;\n--create temp table p_t1_1 partition of p_t1 for values in(1);\n--create temp table p_t1_2 partition of p_t1 for values in(2);\n\n-- Ensure we can remove non-PK columns for partitioned tables.\n--explain (costs off) select * from p_t1 group by a,b,c,d;\n\n--drop table t1 cascade;\n--drop table t2;\n--drop table t3;\n--drop table p_t1;\n\n--\n-- Test GROUP BY matching of join columns that are type-coerced due to USING\n--\n\n--Testcase 426:\ncreate foreign table t1(f1 int, f2 int) server sqlite_svr;\n--Testcase 427:\ncreate foreign table t2(f1 bigint, f2 oid) server sqlite_svr;\n\n--Testcase 428:\nselect f1 from t1 left join t2 using (f1) group by f1;\n--Testcase 429:\nselect f1 from t1 left join t2 using (f1) group by t1.f1;\n--Testcase 430:\nselect t1.f1 from t1 left join t2 using (f1) group by t1.f1;\n-- only this one should fail:\n--Testcase 431:\nselect t1.f1 from t1 left join t2 using (f1) group by f1;\n\n-- check case where we have to inject nullingrels into coerced join alias\n--Testcase 720:\nselect f1, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0)\ngroup by f1;\n\n-- same, for a RelabelType coercion\n--Testcase 721:\nselect f2, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0)\ngroup by f2;\n\n--Testcase 432:\ndrop foreign table t1, t2;\n--\n-- Test planner's selection of pathkeys for ORDER BY aggregates\n--\n\n-- Ensure we order by four.  This suits the most aggregate functions.\n--Testcase 722:\nexplain (costs off)\nselect sum(two order by two),max(four order by four), min(four order by four)\nfrom tenk1;\n\n-- Ensure we order by two.  It's a tie between ordering by two and four but\n-- we tiebreak on the aggregate's position.\n--Testcase 723:\nexplain (costs off)\nselect\n  sum(two order by two), max(four order by four),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Similar to above, but tiebreak on ordering by four\n--Testcase 724:\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Ensure this one orders by ten since there are 3 aggregates that require ten\n-- vs two that suit two and four.\n--Testcase 725:\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two),\n  sum(ten order by ten), min(ten order by ten), max(ten order by ten)\nfrom tenk1;\n\n-- Try a case involving a GROUP BY clause where the GROUP BY column is also\n-- part of an aggregate's ORDER BY clause.  We want a sort order that works\n-- for the GROUP BY along with the first and the last aggregate.\n--Testcase 726:\nexplain (costs off)\nselect\n  sum(unique1 order by ten, two), sum(unique1 order by four),\n  sum(unique1 order by two, four)\nfrom tenk1\ngroup by ten;\n\n-- Ensure that we never choose to provide presorted input to an Aggref with\n-- a volatile function in the ORDER BY / DISTINCT clause.  We want to ensure\n-- these sorts are performed individually rather than at the query level.\n--Testcase 727:\nexplain (costs off)\nselect\n  sum(unique1 order by two), sum(unique1 order by four),\n  sum(unique1 order by four, two), sum(unique1 order by two, random()),\n  sum(unique1 order by two, random(), random() + 1)\nfrom tenk1\ngroup by ten;\n\n-- Ensure consecutive NULLs are properly treated as distinct from each other\n--Testcase 728:\nselect array_agg(distinct val)\nfrom (select null as val from generate_series(1, 2));\n\n-- Ensure no ordering is requested when enable_presorted_aggregate is off\nset enable_presorted_aggregate to off;\n--Testcase 729:\nexplain (costs off)\nselect sum(two order by two) from tenk1;\nreset enable_presorted_aggregate;\n\n--\n-- Test combinations of DISTINCT and/or ORDER BY\n--\nbegin;\n--Testcase 93:\ndelete from INT8_TBL;\n--Testcase 94:\ninsert into INT8_TBL values (1,4),(2,3),(3,1),(4,2);\n--Testcase 95:\nselect array_agg(q1 order by q2)\n  from INT8_TBL;\n--Testcase 96:\nselect array_agg(q1 order by q1)\n  from INT8_TBL;\n--Testcase 97:\nselect array_agg(q1 order by q1 desc)\n  from INT8_TBL;\n--Testcase 98:\nselect array_agg(q2 order by q1 desc)\n  from INT8_TBL;\n\n--Testcase 99:\ndelete from INT4_TBL;\n--Testcase 100:\ninsert into INT4_TBL values (1),(2),(1),(3),(null),(2);\n--Testcase 101:\nselect array_agg(distinct f1)\n  from INT4_TBL;\n--Testcase 102:\nselect array_agg(distinct f1 order by f1)\n  from INT4_TBL;\n--Testcase 103:\nselect array_agg(distinct f1 order by f1 desc)\n  from INT4_TBL;\n--Testcase 104:\nselect array_agg(distinct f1 order by f1 desc nulls last)\n  from INT4_TBL;\nrollback;\n\n-- multi-arg aggs, strict/nonstrict, distinct/order by\n--Testcase 433:\ncreate type aggtype as (a integer, b integer, c text);\n\n--Testcase 434:\ncreate function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql strict immutable;\n\n--Testcase 435:\ncreate function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql immutable;\n\n--Testcase 436:\ncreate aggregate aggfstr(integer,integer,text) (\n   sfunc = aggf_trans, stype = aggtype[],\n   initcond = '{}'\n);\n\n--Testcase 437:\ncreate aggregate aggfns(integer,integer,text) (\n   sfunc = aggfns_trans, stype = aggtype[], sspace = 10000,\n   initcond = '{}'\n);\n\nbegin;\n--Testcase 105:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 106:\nselect aggfstr(a,b,c) from multi_arg_agg;\n--Testcase 107:\nselect aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 108:\nselect aggfstr(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 109:\nselect aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 110:\nselect aggfstr(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 111:\nselect aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n-- test specific code paths\n\n--Testcase 112:\nselect aggfns(distinct a,a,c order by c using ~<~,a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 113:\nselect aggfns(distinct a,a,c order by c using ~<~) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 114:\nselect aggfns(distinct a,a,c order by a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 115:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- check node I/O via view creation and usage, also deparsing logic\n\n--Testcase 438:\ncreate view agg_view1 as\n  select aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 116:\nselect * from agg_view1;\n--Testcase 117:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 439:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 118:\nselect * from agg_view1;\n--Testcase 119:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 440:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 120:\nselect * from agg_view1;\n--Testcase 121:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 441:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by b+1) from multi_arg_agg;\n\n--Testcase 122:\nselect * from agg_view1;\n--Testcase 123:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 442:\ncreate or replace view agg_view1 as\n  select aggfns(a,a,c order by b) from multi_arg_agg;\n\n--Testcase 124:\nselect * from agg_view1;\n--Testcase 125:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 443:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by c using ~<~) from multi_arg_agg;\n\n--Testcase 126:\nselect * from agg_view1;\n--Testcase 127:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 444:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n--Testcase 128:\nselect * from agg_view1;\n--Testcase 129:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 445:\ndrop view agg_view1;\nrollback;\n\n-- incorrect DISTINCT usage errors\n--Testcase 130:\ninsert into multi_arg_agg values (1,1,'foo');\n--Testcase 131:\nselect aggfns(distinct a,b,c order by i) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 132:\nselect aggfns(distinct a,b,c order by a,b+1) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 133:\nselect aggfns(distinct a,b,c order by a,b,i,c) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 134:\nselect aggfns(distinct a,a,c order by a,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- string_agg tests\nbegin;\n--Testcase 135:\ndelete from varchar_tbl;\n--Testcase 136:\ninsert into varchar_tbl values ('aaaa'),('bbbb'),('cccc');\n--Testcase 137:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 138:\ndelete from varchar_tbl;\n--Testcase 139:\ninsert into varchar_tbl values ('aaaa'),(null),('bbbb'),('cccc');\n--Testcase 140:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 141:\ndelete from varchar_tbl;\n--Testcase 142:\ninsert into varchar_tbl values (null),(null),('bbbb'),('cccc');\n--Testcase 143:\nselect string_agg(f1,'AB') from varchar_tbl;\n\n--Testcase 144:\ndelete from varchar_tbl;\n--Testcase 145:\ninsert into varchar_tbl values (null),(null);\n--Testcase 146:\nselect string_agg(f1,',') from varchar_tbl;\nrollback;\n\n-- check some implicit casting cases, as per bug #5564\n\n--Testcase 147:\nselect string_agg(distinct f1, ',' order by f1) from varchar_tbl;  -- ok\n--Testcase 148:\nselect string_agg(distinct f1::text, ',' order by f1) from varchar_tbl;  -- not ok\n--Testcase 149:\nselect string_agg(distinct f1, ',' order by f1::text) from varchar_tbl;  -- not ok\n--Testcase 150:\nselect string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl;  -- ok\n\n-- string_agg bytea tests\n--Testcase 446:\ncreate foreign table bytea_test_table(v bytea) server sqlite_svr;\n\n--Testcase 151:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 152:\ninsert into bytea_test_table values(decode('ff','hex'));\n\n--Testcase 153:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 154:\ninsert into bytea_test_table values(decode('aa','hex'));\n\n--Testcase 155:\nselect string_agg(v, '') from bytea_test_table;\n--Testcase 156:\nselect string_agg(v, NULL) from bytea_test_table;\n--Testcase 157:\nselect string_agg(v, decode('ee', 'hex')) from bytea_test_table;\n\n--Testcase 447:\ndrop foreign table bytea_test_table;\n\n-- Test parallel string_agg and array_agg\n--Testcase 730:\ncreate foreign table pagg_test (x int, y int) server sqlite_svr;\n--Testcase 731:\ninsert into pagg_test\nselect (case x % 4 when 1 then null else x end), x % 10\nfrom generate_series(1,5000) x;\n\nset parallel_setup_cost TO 0;\nset parallel_tuple_cost TO 0;\nset parallel_leader_participation TO 0;\nset min_parallel_table_scan_size = 0;\nset bytea_output = 'escape';\nset max_parallel_workers_per_gather = 2;\n\n-- create a view as we otherwise have to repeat this query a few times.\n--Testcase 732:\ncreate view v_pagg_test AS\nselect\n\ty,\n\tmin(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct,\n\tmin(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct,\n\tmin(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct,\n\tmin(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct\nfrom (\n\tselect\n\t\ty,\n\t\tunnest(regexp_split_to_array(a1.t, ','))::int AS t,\n\t\tunnest(regexp_split_to_array(a1.b::text, ',')) AS b,\n\t\tunnest(a1.a) AS a,\n\t\tunnest(a1.aa) AS aa\n\tfrom (\n\t\tselect\n\t\t\ty,\n\t\t\tstring_agg(x::text, ',') AS t,\n\t\t\tstring_agg(x::text::bytea, ',') AS b,\n\t\t\tarray_agg(x) AS a,\n\t\t\tarray_agg(ARRAY[x]) AS aa\n\t\tfrom pagg_test\n\t\tgroup by y\n\t) a1\n) a2\ngroup by y;\n\n-- Ensure results are correct.\n--Testcase 733:\nselect * from v_pagg_test order by y;\n\n-- Ensure parallel aggregation is actually being used.\n--Testcase 734:\nexplain (costs off) select * from v_pagg_test order by y;\n\nset max_parallel_workers_per_gather = 0;\n\n-- Ensure results are the same without parallel aggregation.\n--Testcase 735:\nselect * from v_pagg_test order by y;\n\n-- Clean up\nreset max_parallel_workers_per_gather;\nreset bytea_output;\nreset min_parallel_table_scan_size;\nreset parallel_leader_participation;\nreset parallel_tuple_cost;\nreset parallel_setup_cost;\n\n--Testcase 736:\ndrop view v_pagg_test;\n--Testcase 737:\ndrop foreign table pagg_test;\n\n\n-- FILTER tests\n\n--Testcase 158:\nselect min(unique1) filter (where unique1 > 100) from tenk1;\n\n--Testcase 159:\nselect sum(1/ten) filter (where ten > 0) from tenk1;\n\n--Testcase 160:\nselect ten, sum(distinct four) filter (where four::text ~ '123') from onek a\ngroup by ten;\n\n--Testcase 161:\nselect ten, sum(distinct four) filter (where four > 10) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n--Testcase 448:\ncreate foreign table agg_t17(foo text, bar text) server sqlite_svr;\n--Testcase 449:\ninsert into agg_t17 values ('a', 'b');\n\n--Testcase 450:\nselect max(foo COLLATE \"C\") filter (where (bar collate \"POSIX\") > '0')\nfrom agg_t17;\n\n--Testcase 738:\ncreate foreign table agg_t170(v int) server sqlite_svr;\n--Testcase 739:\ninsert into agg_t170(v) values (1), (2), (3);\n--Testcase 740:\nselect any_value(v) filter (where v > 2) from agg_t170;\n\n-- outer reference in FILTER (PostgreSQL extension)\n--Testcase 451:\ncreate foreign table agg_t18 (inner_c int) server sqlite_svr;\n--Testcase 452:\ncreate foreign table agg_t19 (outer_c int) server sqlite_svr;\n--Testcase 453:\ninsert into agg_t18 values (1);\n--Testcase 454:\ninsert into agg_t19 values (2), (3);\n\n--Testcase 455:\nselect (select count(*)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n--Testcase 456:\nselect (select count(*) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- outer query is aggregation query\n--Testcase 457:\nselect (select count(inner_c) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n\n--Testcase 162:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1))\n     filter (where o.unique1 < 10))\nfrom tenk1 o;\t\t\t\t\t-- outer query is aggregation query\n\n-- subquery in FILTER clause (PostgreSQL extension)\n--Testcase 163:\nselect sum(unique1) FILTER (WHERE\n  unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1;\n\n-- exercise lots of aggregate parts with FILTER\nbegin;\n--Testcase 164:\ndelete from multi_arg_agg;\n--Testcase 165:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 166:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) from multi_arg_agg, generate_series(1,2) i;\nrollback;\n\n-- check handling of bare boolean Var in FILTER\n--Testcase 672:\nselect max(0) filter (where b1) from bool_test;\n--Testcase 673:\nselect (select max(0) filter (where b1)) from bool_test;\n\n-- check for correct detection of nested-aggregate errors in FILTER\n--Testcase 674:\nselect max(unique1) filter (where sum(ten) > 0) from tenk1;\n--Testcase 675:\nselect (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1;\n--Testcase 676:\nselect max(unique1) filter (where bool_or(ten > 0)) from tenk1;\n--Testcase 677:\nselect (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1;\n\n-- ordered-set aggregates\n\nbegin;\n--Testcase 167:\ndelete from FLOAT8_TBL;\n--Testcase 168:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 169:\nselect f1, percentile_cont(f1) within group (order by x::float8)\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 170:\ndelete from FLOAT8_TBL;\n--Testcase 171:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 172:\nselect f1, percentile_cont(f1 order by f1) within group (order by x)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 173:\ndelete from FLOAT8_TBL;\n--Testcase 174:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 175:\nselect f1, sum() within group (order by x::float8)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 176:\ndelete from FLOAT8_TBL;\n--Testcase 177:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 178:\nselect f1, percentile_cont(f1,f1)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\n--Testcase 179:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 693:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10) from aggtest;\n--Testcase 180:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 694:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10), sum(b)::numeric(10,3) from aggtest;\n--Testcase 181:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 695:\nselect percentile_cont(0.5) within group (order by thousand) from tenk1;\n--Testcase 182:\nselect percentile_disc(0.5) within group (order by thousand) from tenk1;\n\nbegin;\n--Testcase 183:\ndelete from INT4_TBL;\n--Testcase 184:\ninsert into INT4_TBL values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 185:\nselect rank(3) within group (order by f1) from INT4_TBL;\n--Testcase 186:\nselect cume_dist(3) within group (order by f1) from INT4_TBL;\n--Testcase 187:\ninsert into INT4_TBL values (5);\n--Testcase 458:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 696:\nselect (percent_rank(3) within group (order by f1))::numeric(20,10) from INT4_TBL;\n--Testcase 459:\ndelete from INT4_TBL where f1 = 5;\n--Testcase 188:\nselect dense_rank(3) within group (order by f1) from INT4_TBL;\nrollback;\n\n--Testcase 189:\nselect percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 190:\nselect percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 191:\nselect percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand)\nfrom tenk1;\n\n--Testcase 460:\ncreate foreign table agg_t21 (x int) server sqlite_svr;\nbegin;\n--Testcase 248:\ninsert into agg_t21 select * from generate_series(1,6);\n--Testcase 249:\nselect percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x)\nfrom agg_t21;\nrollback;\n\n--Testcase 192:\nselect ten, mode() within group (order by string4) from tenk1 group by ten;\n\n--Testcase 461:\ncreate foreign table agg_t20 (x text) server sqlite_svr;\nbegin;\n--Testcase 462:\ninsert into agg_t20 values (unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]));\n--Testcase 463:\nselect percentile_disc(array[0.25,0.5,0.75]) within group (order by x) from agg_t20;\nrollback;\n\n-- check collation propagates up in suitable cases:\nbegin;\n--Testcase 464:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 465:\nselect pg_collation_for(percentile_disc(1) within group (order by x collate \"POSIX\")) from agg_t20;\nrollback;\n\n-- ordered-set aggs created with CREATE AGGREGATE\n--Testcase 466:\ncreate aggregate my_percentile_disc(float8 ORDER BY anyelement) (\n  stype = internal,\n  sfunc = ordered_set_transition,\n  finalfunc = percentile_disc_final,\n  finalfunc_extra = true,\n  finalfunc_modify = read_write\n);\n\n--Testcase 467:\ncreate aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\") (\n  stype = internal,\n  sfunc = ordered_set_transition_multi,\n  finalfunc = rank_final,\n  finalfunc_extra = true,\n  hypothetical\n);\n\n--Testcase 633:\nalter aggregate my_percentile_disc(float8 ORDER BY anyelement)\n  rename to test_percentile_disc;\n  \n--Testcase 634:\nalter aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\")\n  rename to test_rank;\n\nbegin;\n--Testcase 468:\ninsert into agg_t21 values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 469:\nselect test_rank(3) within group (order by x) from agg_t21;\nrollback;\n \n--Testcase 193:\nselect test_percentile_disc(0.5) within group (order by thousand) from tenk1;\n\n-- ordered-set aggs can't use ungrouped vars in direct args:\nbegin;\n--Testcase 470:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 471:\nselect rank(x) within group (order by x) from agg_t21;\nrollback;\n\n-- outer-level agg can't use a grouped arg of a lower level, either:\nbegin;\n--Testcase 472:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 473:\nselect array(select percentile_disc(a) within group (order by x)\n               from (values (0.3),(0.7)) v(a) group by a)\n  from agg_t21;\nrollback;\n\n-- agg in the direct args is a grouping violation, too:\nbegin;\n--Testcase 474:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 475:\nselect rank(sum(x)) within group (order by x) from agg_t21;\nrollback;\n\n-- hypothetical-set type unification and argument-count failures:\nbegin;\n--Testcase 264:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 265:\nselect rank(3) within group (order by x) from agg_t20;\nrollback;\n\n--Testcase 194:\nselect rank(3) within group (order by stringu1,stringu2) from tenk1;\n\nbegin;\n--Testcase 476:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 477:\nselect rank('fred') within group (order by x) from agg_t21;\nrollback;\n\nbegin;\n--Testcase 478:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 479:\nselect rank('adam'::text collate \"C\") within group (order by x collate \"POSIX\")\n  from agg_t20;\nrollback;\n\n-- hypothetical-set type unification successes:\nbegin;\n--Testcase 480:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 481:\nselect rank('adam'::varchar) within group (order by x) from agg_t20;\nrollback;\n\nbegin;\n--Testcase 482:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 483:\nselect rank('3') within group (order by x) from agg_t21;\nrollback;\n\n-- divide by zero check\nbegin;\n--Testcase 484:\ninsert into agg_t21 select * from generate_series(1,0);\n--Testcase 485:\nselect percent_rank(0) within group (order by x) from agg_t21;\nrollback;\n\n-- deparse and multiple features:\n--Testcase 486:\ncreate view aggordview1 as\nselect ten,\n       percentile_disc(0.5) within group (order by thousand) as p50,\n       percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px,\n       rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred)\n  from tenk1\n group by ten order by ten;\n\n--Testcase 196:\nselect pg_get_viewdef('aggordview1');\n--Testcase 197:\nselect * from aggordview1 order by ten;\n--Testcase 487:\ndrop view aggordview1;\n\n-- variadic aggregates\n--Testcase 488:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 489:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n--Testcase 490:\ncreate function cleast_accum(anycompatible, variadic anycompatiblearray)\nreturns anycompatible language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 491:\ncreate aggregate cleast_agg(variadic items anycompatiblearray) (\n  stype = anycompatible, sfunc = cleast_accum);\n\n--Testcase 198:\nselect least_agg(q1,q2) from int8_tbl;\n--Testcase 199:\nselect least_agg(variadic array[q1,q2]) from int8_tbl;\n\n--Testcase 492:\nselect cleast_agg(q1,q2) from int8_tbl;\n--Testcase 493:\nselect cleast_agg(4.5,f1) from int4_tbl;\n--Testcase 494:\nselect cleast_agg(variadic array[4.5,f1]) from int4_tbl;\n--Testcase 495:\nselect pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl;\n\n-- test aggregates with common transition functions share the same states\n--Testcase 496:\ncreate foreign table agg_t10(one int, id int options (key 'true')) server sqlite_svr;\n--Testcase 497:\ncreate foreign table agg_t11(one int, two int, id int options (key 'true')) server sqlite_svr;\n--Testcase 498:\ncreate foreign table agg_t12(a int, id int options (key 'true')) server sqlite_svr;\nbegin work;\n\n--Testcase 499:\ncreate type avg_state as (total bigint, count bigint);\n\n--Testcase 500:\ncreate or replace function avg_transfn(state avg_state, n int) returns avg_state as\n$$\ndeclare new_state avg_state;\nbegin\n\traise notice 'avg_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state.total := n;\n\t\t\tnew_state.count := 1;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate.total := state.total + n;\n\t\tstate.count := state.count + 1;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 501:\ncreate function avg_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total / state.count;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 502:\ncreate function sum_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 503:\ncreate aggregate my_avg(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn\n);\n\n--Testcase 504:\ncreate aggregate my_sum(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn\n);\n\n-- aggregate state should be shared as aggs are the same.\n--Testcase 505:\ndelete from agg_t10;\n--Testcase 506:\ninsert into agg_t10 values (1), (3);\n--Testcase 507:\nselect my_avg(one),my_avg(one) from agg_t10;\n\n-- aggregate state should be shared as transfn is the same for both aggs.\n--Testcase 508:\nselect my_avg(one),my_sum(one) from agg_t10;\n\n-- same as previous one, but with DISTINCT, which requires sorting the input.\n--Testcase 509:\ndelete from agg_t10;\n--Testcase 510:\ninsert into agg_t10 values (1), (3), (1);\n--Testcase 511:\nselect my_avg(distinct one),my_sum(distinct one) from agg_t10;\n\n-- shouldn't share states due to the distinctness not matching.\n--Testcase 512:\ndelete from agg_t10;\n--Testcase 513:\ninsert into agg_t10 values (1), (3);\n--Testcase 514:\nselect my_avg(distinct one),my_sum(one) from agg_t10;\n\n-- shouldn't share states due to the filter clause not matching.\n--Testcase 515:\nselect my_avg(one) filter (where one > 1),my_sum(one) from agg_t10;\n\n-- this should not share the state due to different input columns.\n--Testcase 516:\ndelete from agg_t11;\n--Testcase 517:\ninsert into agg_t11 values (1,2),(3,4);\n--Testcase 518:\nselect my_avg(one),my_sum(two) from agg_t11;\n\n-- exercise cases where OSAs share state\n--Testcase 519:\ndelete from agg_t12;\n--Testcase 520:\ninsert into agg_t12 values (1), (3), (5), (7);\n--Testcase 521:\nselect\n  percentile_cont(0.5) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n--Testcase 522:\nselect\n  percentile_cont(0.25) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n-- these can't share state currently\n--Testcase 523:\nselect\n  rank(4) within group (order by a),\n  dense_rank(4) within group (order by a)\nfrom agg_t12;\n\n-- test that aggs with the same sfunc and initcond share the same agg state\n--Testcase 524:\ncreate aggregate my_sum_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 525:\ncreate aggregate my_avg_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 526:\ncreate aggregate my_avg_init2(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(4,0)'\n);\n\n-- state should be shared if INITCONDs are matching\n--Testcase 527:\ndelete from agg_t10;\n--Testcase 528:\ninsert into agg_t10 values (1), (3);\n--Testcase 529:\nselect my_sum_init(one),my_avg_init(one) from agg_t10;\n\n\n-- Varying INITCONDs should cause the states not to be shared.\n--Testcase 530:\nselect my_sum_init(one),my_avg_init2(one) from agg_t10;\n\nrollback;\n\n-- test aggregate state sharing to ensure it works if one aggregate has a\n-- finalfn and the other one has none.\nbegin work;\n\n--Testcase 531:\ncreate or replace function sum_transfn(state int4, n int4) returns int4 as\n$$\ndeclare new_state int4;\nbegin\n\traise notice 'sum_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state := n;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate := state + n;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 532:\ncreate function halfsum_finalfn(state int4) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state / 2;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 533:\ncreate aggregate my_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn\n);\n\n--Testcase 534:\ncreate aggregate my_half_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn,\n   finalfunc = halfsum_finalfn\n);\n\n-- Agg state should be shared even though my_sum has no finalfn\n--Testcase 535:\ndelete from agg_t10;\n--Testcase 536:\ninsert into agg_t10 values (1), (2), (3), (4);\n--Testcase 537:\nselect my_sum(one),my_half_sum(one) from agg_t10;\n\nrollback;\n\n\n-- test that the aggregate transition logic correctly handles\n-- transition / combine functions returning NULL\n\n-- First test the case of a normal transition function returning NULL\nBEGIN;\n--Testcase 538:\nCREATE FUNCTION balkifnull(int8, int4)\nRETURNS int8\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 539:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = balkifnull(int8, int4),\n    STYPE = int8,\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n--Testcase 200:\nSELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- Secondly test the case of a parallel aggregate combiner function\n-- returning NULL. For that use normal transition function, but a\n-- combiner function returning NULL.\nBEGIN;\n--Testcase 540:\nCREATE FUNCTION balkifnull(int8, int8)\nRETURNS int8\nPARALLEL SAFE\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 541:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = int4_sum(int8, int4),\n    STYPE = int8,\n    COMBINEFUNC = balkifnull(int8, int8),\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n-- force use of parallelism\n-- Skip this test, cannot alter foreign table tenk1\n-- ALTER FOREIGN TABLE tenk1 set (parallel_workers = 4);\n-- SET LOCAL parallel_setup_cost=0;\n-- SET LOCAL max_parallel_workers_per_gather=4;\n\n-- EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1;\n-- SELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- test multiple usage of an aggregate whose finalfn returns a R/W datum\nBEGIN;\n\n--Testcase 741:\nCREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray\nLANGUAGE plpgsql IMMUTABLE AS $$\nBEGIN\n    RETURN array_fill(y[1], ARRAY[4]);\nEND;\n$$;\n\n--Testcase 742:\nCREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nDECLARE\n    res x%TYPE;\nBEGIN\n    -- assignment is essential for this test, it expands the array to R/W\n    res := array_fill(x[1], ARRAY[4]);\n    RETURN res;\nEND;\n$$;\n\n--Testcase 743:\nCREATE AGGREGATE rwagg(anyarray) (\n    STYPE = anyarray,\n    SFUNC = rwagg_sfunc,\n    FINALFUNC = rwagg_finalfunc\n);\n\n--Testcase 744:\nCREATE FUNCTION eatarray(x real[]) RETURNS real[]\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nBEGIN\n    x[1] := x[1] + 1;\n    RETURN x;\nEND;\n$$;\n\n--Testcase 745:\nCREATE FOREIGN TABLE float_tb(f real) SERVER sqlite_svr;\n--Testcase 746:\nINSERT INTO float_tb(f)  VALUES (1.0);\n--Testcase 747:\nSELECT eatarray(rwagg(ARRAY[f::real])), eatarray(rwagg(ARRAY[f::real])) FROM float_tb;\n\nROLLBACK;\n\n\n-- test coverage for aggregate combine/serial/deserial functions\nBEGIN;\n\n--Testcase 635:\nSET parallel_setup_cost = 0;\n--Testcase 636:\nSET parallel_tuple_cost = 0;\n--Testcase 637:\nSET min_parallel_table_scan_size = 0;\n--Testcase 638:\nSET max_parallel_workers_per_gather = 4;\n--Testcase 639:\nSET parallel_leader_participation = off;\n--Testcase 640:\nSET enable_indexonlyscan = off;\n\n-- variance(int4) covers numeric_poly_combine\n-- sum(int8) covers int8_avg_combine\n-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg\n--Testcase 542:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 543:\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n-- variance(int8) covers numeric_combine\n-- avg(numeric) covers numeric_avg_combine\n--Testcase 544:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 545:\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\nROLLBACK;\n\n-- test coverage for dense_rank\n--Testcase 546:\ncreate foreign table agg_t13(x int, id int options (key 'true')) server sqlite_svr;\n--Testcase 547:\ninsert into agg_t13 values (1),(1),(2),(2),(3),(3);\n--Testcase 548:\nSELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM agg_t13 GROUP BY (x) ORDER BY 1;\n--Testcase 549:\ndelete from agg_t13;\n\n\n-- Ensure that the STRICT checks for aggregates does not take NULLness\n-- of ORDER BY columns into account. See bug report around\n-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz\n--Testcase 550:\ncreate foreign table agg_t14(x int, y int, id int options (key 'true')) server sqlite_svr;\n--Testcase 551:\ninsert into agg_t14 values (1, NULL), (1, 2);\n--Testcase 552:\nSELECT min(x ORDER BY y) FROM agg_t14;\n--Testcase 553:\nSELECT min(x ORDER BY y) FROM agg_t14;\n\n-- check collation-sensitive matching between grouping expressions\nbegin;\n--Testcase 554:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 555:\nselect x||'a', case x||'a' when 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\nbegin;\n--Testcase 556:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 557:\nselect x||'a', case when x||'a' = 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\n-- Make sure that generation of HashAggregate for uniqification purposes\n-- does not lead to array overflow due to unexpected duplicate hash keys\n-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com\n--Testcase 641:\nset enable_memoize to off;\n--Testcase 558:\nexplain (costs off)\n  select 1 from tenk1\n   where (hundred, thousand) in (select twothousand, twothousand from onek);\n--Testcase 642:\nreset enable_memoize;\n\n--\n-- Hash Aggregation Spill tests\n--\n\n--Testcase 643:\nset enable_sort=false;\n--Testcase 644:\nset work_mem='64kB';\n\n--Testcase 559:\nselect unique1, count(*), sum(twothousand) from tenk1\ngroup by unique1\nhaving sum(fivethous) > 4975\norder by sum(twothousand);\n\n--Testcase 645:\nset work_mem to default;\n--Testcase 646:\nset enable_sort to default;\n\n--\n-- Compare results between plans using sorting and plans using hash\n-- aggregation. Force spilling in both cases by setting work_mem low.\n--\n\n--Testcase 647:\nset work_mem='64kB';\n\n--Testcase 560:\ncreate foreign table agg_data_2k(g int, id int options (key 'true')) server sqlite_svr;\n--Testcase 561:\ncreate foreign table agg_data_20k(g int, id int options (key 'true')) server sqlite_svr;\n\n--Testcase 562:\ncreate foreign table agg_group_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 563:\ncreate foreign table agg_group_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 564:\ncreate foreign table agg_group_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 565:\ncreate foreign table agg_group_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n--Testcase 566:\ncreate foreign table agg_hash_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 567:\ncreate foreign table agg_hash_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 568:\ncreate foreign table agg_hash_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 569:\ncreate foreign table agg_hash_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n\n--Testcase 570:\ninsert into agg_data_2k select g from generate_series(0, 1999) g;\n--analyze agg_data_2k;\n\n--Testcase 571:\ninsert into agg_data_20k select g from generate_series(0, 19999) g;\n--analyze agg_data_20k;\n\n-- Produce results with sorting.\n\n--Testcase 648:\nset enable_hashagg = false;\n\n--Testcase 649:\nset jit_above_cost = 0;\n\n--Testcase 572:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 573:\ninsert into agg_group_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 574:\ninsert into agg_group_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 650:\nset jit_above_cost to default;\n\n--Testcase 575:\ninsert into agg_group_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 576:\ninsert into agg_group_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n-- Produce results with hash aggregation\n\n--Testcase 651:\nset enable_hashagg = true;\n--Testcase 652:\nset enable_sort = false;\n\n--Testcase 653:\nset jit_above_cost = 0;\n\n--Testcase 577:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 578:\ninsert into agg_hash_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 579:\ninsert into agg_hash_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 654:\nset jit_above_cost to default;\n\n--Testcase 580:\ninsert into agg_hash_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 581:\ninsert into agg_hash_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 655:\nset enable_sort = true;\n--Testcase 656:\nset work_mem to default;\n\n-- Compare group aggregation results to hash aggregation results\n\n--Testcase 582:\n(select * from agg_hash_1 except select * from agg_group_1)\n  union all\n(select * from agg_group_1 except select * from agg_hash_1);\n\n--Testcase 583:\n(select * from agg_hash_2 except select * from agg_group_2)\n  union all\n(select * from agg_group_2 except select * from agg_hash_2);\n\n--Testcase 584:\n(select * from agg_hash_3 except select * from agg_group_3)\n  union all\n(select * from agg_group_3 except select * from agg_hash_3);\n\n--Testcase 585:\n(select * from agg_hash_4 except select * from agg_group_4)\n  union all\n(select * from agg_group_4 except select * from agg_hash_4);\n\n--Testcase 748:\nDELETE FROM INT4_TBL;\n--Testcase 749:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 586:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 587:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/encodings.sql",
    "content": "-- tests for PR #76 github\n-- see https://www.postgresql.org/docs/current/multibyte.html\n-- EUC_CN, not tested\n-- EUC_JP\n-- EUC_JIS_2004, not tested\n-- EUC_KR\n-- EUC_TW, not tested\n-- ISO_8859_5\n-- ISO_8859_6\n-- ISO_8859_7\n-- ISO_8859_8\n-- KOI8R, not tested\n-- KOI8U, not tested\n-- LATIN1\n-- LATIN2\n-- LATIN3\n-- LATIN4\n-- LATIN5\n-- LATIN6\n-- LATIN7\n-- LATIN8\n-- LATIN9\n-- LATIN10\n-- MULE_INTERNAL, not tested\n-- SQL_ASCII\n-- WIN866, not tested\n-- WIN874, not tested\n-- WIN1250\n-- WIN1251\n-- WIN1252\n-- WIN1253\n-- WIN1254\n-- WIN1255\n-- WIN1256\n-- WIN1257\n-- WIN1258, not tested\n\n-- ================\n-- check all data in UTF8\n-- ================\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr;\nSELECT * FROM \"Unicode data\";\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\n-- euc_jp\nCREATE DATABASE \"contrib_regression_EUC_JP\" ENCODING EUC_JP LC_CTYPE='ja_JP.eucjp' LC_COLLATE='ja_JP.eucjp' template template0;\n\\connect \"contrib_regression_EUC_JP\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_JP\";\n\n-- ko_KR.euckr\nCREATE DATABASE \"contrib_regression_EUC_KR\" ENCODING EUC_KR LC_CTYPE='ko_KR.euckr' LC_COLLATE='ko_KR.euckr' template template0;\n\\connect \"contrib_regression_EUC_KR\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_KR\";\n\n-- ISO_8859_5\nCREATE DATABASE \"contrib_regression_ISO_8859_5\" ENCODING ISO_8859_5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_5\";\n\n-- ISO_8859_6\nCREATE DATABASE \"contrib_regression_ISO_8859_6\" ENCODING ISO_8859_6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_6\";\n\n-- ISO_8859_7\nCREATE DATABASE \"contrib_regression_ISO_8859_7\" ENCODING ISO_8859_7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_7\";\n\n-- ISO_8859_8\nCREATE DATABASE \"contrib_regression_ISO_8859_8\" ENCODING ISO_8859_8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_8\";\n\n-- ISO_8859_9\nCREATE DATABASE \"contrib_regression_ISO_8859_9\" ENCODING ISO_8859_9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_9\";\n\n-- LATIN1\nCREATE DATABASE \"contrib_regression_LATIN1\" ENCODING LATIN1 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN1\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN1\";\n\n-- LATIN2\nCREATE DATABASE \"contrib_regression_LATIN2\" ENCODING LATIN2 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN2\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN2\";\n\n-- LATIN3\nCREATE DATABASE \"contrib_regression_LATIN3\" ENCODING LATIN3 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN3\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN3\";\n\n-- LATIN4\nCREATE DATABASE \"contrib_regression_LATIN4\" ENCODING LATIN4 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN4\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN4\";\n\n-- LATIN5\nCREATE DATABASE \"contrib_regression_LATIN5\" ENCODING LATIN5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN5\";\n\n-- LATIN6\nCREATE DATABASE \"contrib_regression_LATIN6\" ENCODING LATIN6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN6\";\n\n-- LATIN7\nCREATE DATABASE \"contrib_regression_LATIN7\" ENCODING LATIN7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN7\";\n\n-- LATIN8\nCREATE DATABASE \"contrib_regression_LATIN8\" ENCODING LATIN8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN8\";\n\n-- LATIN9\nCREATE DATABASE \"contrib_regression_LATIN9\" ENCODING LATIN9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN9\";\n\n-- LATIN10\nCREATE DATABASE \"contrib_regression_LATIN10\" ENCODING LATIN10 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN10\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN10\";\n\n-- cp1250\nCREATE DATABASE \"contrib_regression_WIN1250\" ENCODING WIN1250 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1250\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1250\";\n\n-- cp1251\nCREATE DATABASE \"contrib_regression_WIN1251\" ENCODING WIN1251 LC_CTYPE='bg_BG' LC_COLLATE='bg_BG' template template0;\n\\connect \"contrib_regression_WIN1251\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1251\";\n\n-- cp1252\nCREATE DATABASE \"contrib_regression_WIN1252\" ENCODING WIN1252 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1252\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1252\";\n\n-- cp1253\nCREATE DATABASE \"contrib_regression_WIN1253\" ENCODING WIN1253 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1253\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1253\";\n\n-- cp1254\nCREATE DATABASE \"contrib_regression_WIN1254\" ENCODING WIN1254 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1254\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1254\";\n\n-- cp1255\nCREATE DATABASE \"contrib_regression_WIN1255\" ENCODING WIN1255 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1255\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1255\";\n\n-- cp1256\nCREATE DATABASE \"contrib_regression_WIN1256\" ENCODING WIN1256 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1256\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1256\";\n\n-- cp1257\nCREATE DATABASE \"contrib_regression_WIN1257\" ENCODING WIN1257 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1257\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1257\";\n\n-- SQL_ASCII\nCREATE DATABASE \"contrib_regression_SQL_ASCII\" ENCODING SQL_ASCII LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_SQL_ASCII\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_SQL_ASCII\";\n"
  },
  {
    "path": "sql/16.3/extra/insert.sql",
    "content": "--\n-- insert with DEFAULT in the target_list\n--\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 18:\nCREATE FOREIGN TABLE inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing') SERVER sqlite_svr;\n--Testcase 1:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);\n--Testcase 2:\ninsert into inserttest01 (col2, col3) values (3, DEFAULT);\n--Testcase 3:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, 5, DEFAULT);\n--Testcase 4:\ninsert into inserttest01 values (DEFAULT, 5, 'test');\n--Testcase 5:\ninsert into inserttest01 values (DEFAULT, 7);\n\n--Testcase 6:\nselect * from inserttest01;\n\n--\n-- insert with similar expression / target_list values (all fail)\n--\n--Testcase 7:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT);\n--Testcase 8:\ninsert into inserttest01 (col1, col2, col3) values (1, 2);\n--Testcase 9:\ninsert into inserttest01 (col1) values (1, 2);\n--Testcase 10:\ninsert into inserttest01 (col1) values (DEFAULT, DEFAULT);\n\n--Testcase 11:\nselect * from inserttest01;\n\n--\n-- VALUES test\n--\n--Testcase 12:\ninsert into inserttest01 values(10, 20, '40'), (-1, 2, DEFAULT),\n    ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');\n\n--Testcase 13:\nselect * from inserttest01;\n\n--\n-- TOASTed value test\n--\n--Testcase 14:\ninsert into inserttest01 values(30, 50, repeat('x', 10000));\n\n--Testcase 15:\nselect col1, col2, char_length(col3) from inserttest01;\n\n--\n-- tuple larger than fillfactor\n-- foreign table does not support fillfactor\n--\n-- CREATE TABLE large_tuple_test (a int, b text) WITH (fillfactor = 10);\n-- ALTER TABLE large_tuple_test ALTER COLUMN b SET STORAGE plain;\n\n-- -- create page w/ free space in range [nearlyEmptyFreeSpace, MaxHeapTupleSize)\n-- INSERT INTO large_tuple_test (select 1, NULL);\n\n-- -- should still fit on the page\n-- INSERT INTO large_tuple_test (select 2, repeat('a', 1000));\n-- SELECT pg_size_pretty(pg_relation_size('large_tuple_test'::regclass, 'main'));\n\n-- -- add small record to the second page\n-- INSERT INTO large_tuple_test (select 3, NULL);\n\n-- -- now this tuple won't fit on the second page, but the insert should\n-- -- still succeed by extending the relation\n-- INSERT INTO large_tuple_test (select 4, repeat('a', 8126));\n\n-- DROP TABLE large_tuple_test;\n\n-- skip, sqlite fdw does not support customized type\n/*\n-- check indirection (field/array assignment), cf bug #14265\n--\n-- these tests are aware that transformInsertStmt has 3 separate code paths\n--\n\ncreate type insert_test_type as (if1 int, if2 text[]);\n\ncreate table inserttest (f1 int, f2 int[],\n                         f3 insert_test_type, f4 insert_test_type[]);\n\ninsert into inserttest (f2[1], f2[2]) values (1,2);\ninsert into inserttest (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttest (f2[1], f2[2]) select 7,8;\ninsert into inserttest (f2[1], f2[2]) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttest (f3.if1, f3.if2) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer';\n\nselect * from inserttest;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttest (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttest;\ndrop type insert_test_type;\n\n-- direct partition inserts should check partition bound constraint\ncreate table range_parted (\n\ta text,\n\tb int\n) partition by range (a, (b+0));\n\n-- no partitions, so fail\ninsert into range_parted values ('a', 11);\n\ncreate table part1 partition of range_parted for values from ('a', 1) to ('a', 10);\ncreate table part2 partition of range_parted for values from ('a', 10) to ('a', 20);\ncreate table part3 partition of range_parted for values from ('b', 1) to ('b', 10);\ncreate table part4 partition of range_parted for values from ('b', 10) to ('b', 20);\n\n-- fail\ninsert into part1 values ('a', 11);\ninsert into part1 values ('b', 1);\n-- ok\ninsert into part1 values ('a', 1);\n-- fail\ninsert into part4 values ('b', 21);\ninsert into part4 values ('a', 10);\n-- ok\ninsert into part4 values ('b', 10);\n\n-- fail (partition key a has a NOT NULL constraint)\ninsert into part1 values (null);\n-- fail (expression key (b+0) cannot be null either)\ninsert into part1 values (1);\n\ncreate table list_parted (\n\ta text,\n\tb int\n) partition by list (lower(a));\ncreate table part_aa_bb partition of list_parted FOR VALUES IN ('aa', 'bb');\ncreate table part_cc_dd partition of list_parted FOR VALUES IN ('cc', 'dd');\ncreate table part_null partition of list_parted FOR VALUES IN (null);\n\n-- fail\ninsert into part_aa_bb values ('cc', 1);\ninsert into part_aa_bb values ('AAa', 1);\ninsert into part_aa_bb values (null);\n-- ok\ninsert into part_cc_dd values ('cC', 1);\ninsert into part_null values (null, 0);\n\n-- check in case of multi-level partitioned table\ncreate table part_ee_ff partition of list_parted for values in ('ee', 'ff') partition by range (b);\ncreate table part_ee_ff1 partition of part_ee_ff for values from (1) to (10);\ncreate table part_ee_ff2 partition of part_ee_ff for values from (10) to (20);\n\n-- test default partition\ncreate table part_default partition of list_parted default;\n-- Negative test: a row, which would fit in other partition, does not fit\n-- default partition, even when inserted directly\ninsert into part_default values ('aa', 2);\ninsert into part_default values (null, 2);\n-- ok\ninsert into part_default values ('Zz', 2);\n-- test if default partition works as expected for multi-level partitioned\n-- table as well as when default partition itself is further partitioned\ndrop table part_default;\ncreate table part_xx_yy partition of list_parted for values in ('xx', 'yy') partition by list (a);\ncreate table part_xx_yy_p1 partition of part_xx_yy for values in ('xx');\ncreate table part_xx_yy_defpart partition of part_xx_yy default;\ncreate table part_default partition of list_parted default partition by range(b);\ncreate table part_default_p1 partition of part_default for values from (20) to (30);\ncreate table part_default_p2 partition of part_default for values from (30) to (40);\n\n-- fail\ninsert into part_ee_ff1 values ('EE', 11);\ninsert into part_default_p2 values ('gg', 43);\n-- fail (even the parent's, ie, part_ee_ff's partition constraint applies)\ninsert into part_ee_ff1 values ('cc', 1);\ninsert into part_default values ('gg', 43);\n-- ok\ninsert into part_ee_ff1 values ('ff', 1);\ninsert into part_ee_ff2 values ('ff', 11);\ninsert into part_default_p1 values ('cd', 25);\ninsert into part_default_p2 values ('de', 35);\ninsert into list_parted values ('ab', 21);\ninsert into list_parted values ('xx', 1);\ninsert into list_parted values ('yy', 2);\nselect tableoid::regclass, * from list_parted;\n\n-- Check tuple routing for partitioned tables\n\n-- fail\ninsert into range_parted values ('a', 0);\n-- ok\ninsert into range_parted values ('a', 1);\ninsert into range_parted values ('a', 10);\n-- fail\ninsert into range_parted values ('a', 20);\n-- ok\ninsert into range_parted values ('b', 1);\ninsert into range_parted values ('b', 10);\n-- fail (partition key (b+0) is null)\ninsert into range_parted values ('a');\n\n-- Check default partition\ncreate table part_def partition of range_parted default;\n-- fail\ninsert into part_def values ('b', 10);\n-- ok\ninsert into part_def values ('c', 10);\ninsert into range_parted values (null, null);\ninsert into range_parted values ('a', null);\ninsert into range_parted values (null, 19);\ninsert into range_parted values ('b', 20);\n\nselect tableoid::regclass, * from range_parted;\n-- ok\ninsert into list_parted values (null, 1);\ninsert into list_parted (a) values ('aA');\n-- fail (partition of part_ee_ff not found in both cases)\ninsert into list_parted values ('EE', 0);\ninsert into part_ee_ff values ('EE', 0);\n-- ok\ninsert into list_parted values ('EE', 1);\ninsert into part_ee_ff values ('EE', 10);\nselect tableoid::regclass, * from list_parted;\n\n-- some more tests to exercise tuple-routing with multi-level partitioning\ncreate table part_gg partition of list_parted for values in ('gg') partition by range (b);\ncreate table part_gg1 partition of part_gg for values from (minvalue) to (1);\ncreate table part_gg2 partition of part_gg for values from (1) to (10) partition by range (b);\ncreate table part_gg2_1 partition of part_gg2 for values from (1) to (5);\ncreate table part_gg2_2 partition of part_gg2 for values from (5) to (10);\n\ncreate table part_ee_ff3 partition of part_ee_ff for values from (20) to (30) partition by range (b);\ncreate table part_ee_ff3_1 partition of part_ee_ff3 for values from (20) to (25);\ncreate table part_ee_ff3_2 partition of part_ee_ff3 for values from (25) to (30);\n\ntruncate list_parted;\ninsert into list_parted values ('aa'), ('cc');\ninsert into list_parted select 'Ff', s.a from generate_series(1, 29) s(a);\ninsert into list_parted select 'gg', s.a from generate_series(1, 9) s(a);\ninsert into list_parted (b) values (1);\nselect tableoid::regclass::text, a, min(b) as min_b, max(b) as max_b from list_parted group by 1, 2 order by 1;\n\n-- direct partition inserts should check hash partition bound constraint\n\ncreate table hash_parted (\n\ta int\n) partition by hash (a part_test_int4_ops);\ncreate table hpart0 partition of hash_parted for values with (modulus 4, remainder 0);\ncreate table hpart1 partition of hash_parted for values with (modulus 4, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 4, remainder 3);\n\ninsert into hash_parted values(generate_series(1,10));\n\n-- direct insert of values divisible by 4 - ok;\ninsert into hpart0 values(12),(16);\n-- fail;\ninsert into hpart0 values(11);\n-- 11 % 4 -> 3 remainder i.e. valid data for hpart3 partition\ninsert into hpart3 values(11);\n\n-- view data\nselect tableoid::regclass as part, a, a%4 as \"remainder = a % 4\"\nfrom hash_parted order by part;\n\n-- test \\d+ output on a table which has both partitioned and unpartitioned\n-- partitions\n\\d+ list_parted\n\n-- cleanup\ndrop table range_parted, list_parted;\ndrop table hash_parted;\n\n-- test that a default partition added as the first partition accepts any value\n-- including null\ncreate table list_parted (a int) partition by list (a);\ncreate table part_default partition of list_parted default;\n\\d+ part_default\ninsert into part_default values (null);\ninsert into part_default values (1);\ninsert into part_default values (-1);\nselect tableoid::regclass, a from list_parted;\n-- cleanup\ndrop table list_parted;\n\n-- more tests for certain multi-level partitioning scenarios\ncreate table mlparted (a int, b int) partition by range (a, b);\ncreate table mlparted1 (b int not null, a int not null) partition by range ((b+0));\ncreate table mlparted11 (like mlparted1);\nalter table mlparted11 drop a;\nalter table mlparted11 add a int;\nalter table mlparted11 drop a;\nalter table mlparted11 add a int not null;\n-- attnum for key attribute 'a' is different in mlparted, mlparted1, and mlparted11\nselect attrelid::regclass, attname, attnum\nfrom pg_attribute\nwhere attname = 'a'\n and (attrelid = 'mlparted'::regclass\n   or attrelid = 'mlparted1'::regclass\n   or attrelid = 'mlparted11'::regclass)\norder by attrelid::regclass::text;\n\nalter table mlparted1 attach partition mlparted11 for values from (2) to (5);\nalter table mlparted attach partition mlparted1 for values from (1, 2) to (1, 10);\n\n-- check that \"(1, 2)\" is correctly routed to mlparted11.\ninsert into mlparted values (1, 2);\nselect tableoid::regclass, * from mlparted;\n\n-- check that proper message is shown after failure to route through mlparted1\ninsert into mlparted (a, b) values (1, 5);\n\ntruncate mlparted;\nalter table mlparted add constraint check_b check (b = 3);\n\n-- have a BR trigger modify the row such that the check_b is violated\ncreate function mlparted11_trig_fn()\nreturns trigger AS\n$$\nbegin\n  NEW.b := 4;\n  return NEW;\nend;\n$$\nlanguage plpgsql;\ncreate trigger mlparted11_trig before insert ON mlparted11\n  for each row execute procedure mlparted11_trig_fn();\n\n-- check that the correct row is shown when constraint check_b fails after\n-- \"(1, 2)\" is routed to mlparted11 (actually \"(1, 4)\" would be shown due\n-- to the BR trigger mlparted11_trig_fn)\ninsert into mlparted values (1, 2);\ndrop trigger mlparted11_trig on mlparted11;\ndrop function mlparted11_trig_fn();\n\n-- check that inserting into an internal partition successfully results in\n-- checking its partition constraint before inserting into the leaf partition\n-- selected by tuple-routing\ninsert into mlparted1 (a, b) values (2, 3);\n\n-- check routing error through a list partitioned table when the key is null\ncreate table lparted_nonullpart (a int, b char) partition by list (b);\ncreate table lparted_nonullpart_a partition of lparted_nonullpart for values in ('a');\ninsert into lparted_nonullpart values (1);\ndrop table lparted_nonullpart;\n\n-- check that RETURNING works correctly with tuple-routing\nalter table mlparted drop constraint check_b;\ncreate table mlparted12 partition of mlparted1 for values from (5) to (10);\ncreate table mlparted2 (b int not null, a int not null);\nalter table mlparted attach partition mlparted2 for values from (1, 10) to (1, 20);\ncreate table mlparted3 partition of mlparted for values from (1, 20) to (1, 30);\ncreate table mlparted4 (like mlparted);\nalter table mlparted4 drop a;\nalter table mlparted4 add a int not null;\nalter table mlparted attach partition mlparted4 for values from (1, 30) to (1, 40);\nwith ins (a, b, c) as\n  (insert into mlparted (b, a) select s.a, 1 from generate_series(2, 39) s(a) returning tableoid::regclass, *)\n  select a, b, min(c), max(c) from ins group by a, b order by 1;\n\nalter table mlparted add c text;\ncreate table mlparted5 (c text, a int not null, b int not null) partition by list (c);\ncreate table mlparted5a (a int not null, c text, b int not null);\nalter table mlparted5 attach partition mlparted5a for values in ('a');\nalter table mlparted attach partition mlparted5 for values from (1, 40) to (1, 50);\nalter table mlparted add constraint check_b check (a = 1 and b < 45);\ninsert into mlparted values (1, 45, 'a');\ncreate function mlparted5abrtrig_func() returns trigger as $$ begin new.c = 'b'; return new; end; $$ language plpgsql;\ncreate trigger mlparted5abrtrig before insert on mlparted5a for each row execute procedure mlparted5abrtrig_func();\ninsert into mlparted5 (a, b, c) values (1, 40, 'a');\ndrop table mlparted5;\nalter table mlparted drop constraint check_b;\n\n-- Check multi-level default partition\ncreate table mlparted_def partition of mlparted default partition by range(a);\ncreate table mlparted_def1 partition of mlparted_def for values from (40) to (50);\ncreate table mlparted_def2 partition of mlparted_def for values from (50) to (60);\ninsert into mlparted values (40, 100);\ninsert into mlparted_def1 values (42, 100);\ninsert into mlparted_def2 values (54, 50);\n-- fail\ninsert into mlparted values (70, 100);\ninsert into mlparted_def1 values (52, 50);\ninsert into mlparted_def2 values (34, 50);\n-- ok\ncreate table mlparted_defd partition of mlparted_def default;\ninsert into mlparted values (70, 100);\n\nselect tableoid::regclass, * from mlparted_def;\n\n-- Check multi-level tuple routing with attributes dropped from the\n-- top-most parent.  First remove the last attribute.\nalter table mlparted add d int, add e int;\nalter table mlparted drop e;\ncreate table mlparted5 partition of mlparted\n  for values from (1, 40) to (1, 50) partition by range (c);\ncreate table mlparted5_ab partition of mlparted5\n  for values from ('a') to ('c') partition by list (c);\n-- This partitioned table should remain with no partitions.\ncreate table mlparted5_cd partition of mlparted5\n  for values from ('c') to ('e') partition by list (c);\ncreate table mlparted5_a partition of mlparted5_ab for values in ('a');\ncreate table mlparted5_b (d int, b int, c text, a int);\nalter table mlparted5_ab attach partition mlparted5_b for values in ('b');\ntruncate mlparted;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ntruncate mlparted;\n-- Remove the before last attribute.\nalter table mlparted add e int, add d int;\nalter table mlparted drop e;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ndrop table mlparted5;\n\n-- check that message shown after failure to find a partition shows the\n-- appropriate key description (or none) in various situations\ncreate table key_desc (a int, b int) partition by list ((a+0));\ncreate table key_desc_1 partition of key_desc for values in (1) partition by range (b);\n\ncreate user regress_insert_other_user;\ngrant select (a) on key_desc_1 to regress_insert_other_user;\ngrant insert on key_desc to regress_insert_other_user;\n\nset role regress_insert_other_user;\n-- no key description is shown\ninsert into key_desc values (1, 1);\n\nreset role;\ngrant select (b) on key_desc_1 to regress_insert_other_user;\nset role regress_insert_other_user;\n-- key description (b)=(1) is now shown\ninsert into key_desc values (1, 1);\n\n-- key description is not shown if key contains expression\ninsert into key_desc values (2, 1);\nreset role;\nrevoke all on key_desc from regress_insert_other_user;\nrevoke all on key_desc_1 from regress_insert_other_user;\ndrop role regress_insert_other_user;\ndrop table key_desc, key_desc_1;\n\n-- test minvalue/maxvalue restrictions\ncreate table mcrparted (a int, b int, c int) partition by range (a, abs(b), c);\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, 0, 0) to (1, maxvalue, maxvalue);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, minvalue);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, 0) to (30, 20, minvalue);\n\n-- check multi-column range partitioning expression enforces the same\n-- constraint as what tuple-routing would determine it to be\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, minvalue, minvalue) to (1, maxvalue, maxvalue);\ncreate table mcrparted1 partition of mcrparted for values from (2, 1, minvalue) to (10, 5, 10);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, maxvalue);\ncreate table mcrparted3 partition of mcrparted for values from (11, 1, 1) to (20, 10, 10);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, minvalue) to (30, 20, maxvalue);\ncreate table mcrparted5 partition of mcrparted for values from (30, 21, 20) to (maxvalue, maxvalue, maxvalue);\n\n-- null not allowed in range partition\ninsert into mcrparted values (null, null, null);\n\n-- routed to mcrparted0\ninsert into mcrparted values (0, 1, 1);\ninsert into mcrparted0 values (0, 1, 1);\n\n-- routed to mcparted1\ninsert into mcrparted values (9, 1000, 1);\ninsert into mcrparted1 values (9, 1000, 1);\ninsert into mcrparted values (10, 5, -1);\ninsert into mcrparted1 values (10, 5, -1);\ninsert into mcrparted values (2, 1, 0);\ninsert into mcrparted1 values (2, 1, 0);\n\n-- routed to mcparted2\ninsert into mcrparted values (10, 6, 1000);\ninsert into mcrparted2 values (10, 6, 1000);\ninsert into mcrparted values (10, 1000, 1000);\ninsert into mcrparted2 values (10, 1000, 1000);\n\n-- no partition exists, nor does mcrparted3 accept it\ninsert into mcrparted values (11, 1, -1);\ninsert into mcrparted3 values (11, 1, -1);\n\n-- routed to mcrparted5\ninsert into mcrparted values (30, 21, 20);\ninsert into mcrparted5 values (30, 21, 20);\ninsert into mcrparted4 values (30, 21, 20);\t-- error\n\n-- check rows\nselect tableoid::regclass::text, * from mcrparted order by 1;\n\n-- cleanup\ndrop table mcrparted;\n\n-- check that a BR constraint can't make partition contain violating rows\ncreate table brtrigpartcon (a int, b text) partition by list (a);\ncreate table brtrigpartcon1 partition of brtrigpartcon for values in (1);\ncreate or replace function brtrigpartcon1trigf() returns trigger as $$begin new.a := 2; return new; end$$ language plpgsql;\ncreate trigger brtrigpartcon1trig before insert on brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();\ninsert into brtrigpartcon values (1, 'hi there');\ninsert into brtrigpartcon1 values (1, 'hi there');\n\n-- check that the message shows the appropriate column description in a\n-- situation where the partitioned table is not the primary ModifyTable node\ncreate table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);\ncreate role regress_coldesc_role;\ngrant insert on inserttest3 to regress_coldesc_role;\ngrant insert on brtrigpartcon to regress_coldesc_role;\nrevoke select on brtrigpartcon from regress_coldesc_role;\nset role regress_coldesc_role;\nwith result as (insert into brtrigpartcon values (1, 'hi there') returning 1)\n  insert into inserttest3 (f3) select * from result;\nreset role;\n\n-- cleanup\nrevoke all on inserttest3 from regress_coldesc_role;\nrevoke all on brtrigpartcon from regress_coldesc_role;\ndrop role regress_coldesc_role;\ndrop table inserttest3;\ndrop table brtrigpartcon;\ndrop function brtrigpartcon1trigf();\n\n-- check that \"do nothing\" BR triggers work with tuple-routing\ncreate table donothingbrtrig_test (a int, b text) partition by list (a);\ncreate table donothingbrtrig_test1 (b text, a int);\ncreate table donothingbrtrig_test2 (c text, b text, a int);\nalter table donothingbrtrig_test2 drop column c;\ncreate or replace function donothingbrtrig_func() returns trigger as $$begin raise notice 'b: %', new.b; return NULL; end$$ language plpgsql;\ncreate trigger donothingbrtrig1 before insert on donothingbrtrig_test1 for each row execute procedure donothingbrtrig_func();\ncreate trigger donothingbrtrig2 before insert on donothingbrtrig_test2 for each row execute procedure donothingbrtrig_func();\nalter table donothingbrtrig_test attach partition donothingbrtrig_test1 for values in (1);\nalter table donothingbrtrig_test attach partition donothingbrtrig_test2 for values in (2);\ninsert into donothingbrtrig_test values (1, 'foo'), (2, 'bar');\ncopy donothingbrtrig_test from stdout;\n1\tbaz\n2\tqux\n\\.\nselect tableoid::regclass, * from donothingbrtrig_test;\n\n-- cleanup\ndrop table donothingbrtrig_test;\ndrop function donothingbrtrig_func();\n\n-- check multi-column range partitioning with minvalue/maxvalue constraints\ncreate table mcrparted (a text, b int) partition by range(a, b);\ncreate table mcrparted1_lt_b partition of mcrparted for values from (minvalue, minvalue) to ('b', minvalue);\ncreate table mcrparted2_b partition of mcrparted for values from ('b', minvalue) to ('c', minvalue);\ncreate table mcrparted3_c_to_common partition of mcrparted for values from ('c', minvalue) to ('common', minvalue);\ncreate table mcrparted4_common_lt_0 partition of mcrparted for values from ('common', minvalue) to ('common', 0);\ncreate table mcrparted5_common_0_to_10 partition of mcrparted for values from ('common', 0) to ('common', 10);\ncreate table mcrparted6_common_ge_10 partition of mcrparted for values from ('common', 10) to ('common', maxvalue);\ncreate table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);\ncreate table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);\n\n\\d+ mcrparted\n\\d+ mcrparted1_lt_b\n\\d+ mcrparted2_b\n\\d+ mcrparted3_c_to_common\n\\d+ mcrparted4_common_lt_0\n\\d+ mcrparted5_common_0_to_10\n\\d+ mcrparted6_common_ge_10\n\\d+ mcrparted7_gt_common_lt_d\n\\d+ mcrparted8_ge_d\n\ninsert into mcrparted values ('aaa', 0), ('b', 0), ('bz', 10), ('c', -10),\n    ('comm', -10), ('common', -10), ('common', 0), ('common', 10),\n    ('commons', 0), ('d', -10), ('e', 0);\nselect tableoid::regclass, * from mcrparted order by a, b;\ndrop table mcrparted;\n\n-- check that wholerow vars in the RETURNING list work with partitioned tables\ncreate table returningwrtest (a int) partition by list (a);\ncreate table returningwrtest1 partition of returningwrtest for values in (1);\ninsert into returningwrtest values (1) returning returningwrtest;\n\n-- check also that the wholerow vars in RETURNING list are converted as needed\nalter table returningwrtest add b text;\ncreate table returningwrtest2 (b text, c int, a int);\nalter table returningwrtest2 drop c;\nalter table returningwrtest attach partition returningwrtest2 for values in (2);\ninsert into returningwrtest values (2, 'foo') returning returningwrtest;\ndrop table returningwrtest;\n*/\n\n-- drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 19:\nDROP SERVER sqlite_svr;\n--Testcase 20:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/join.sql",
    "content": "--\n-- JOIN\n-- Test JOIN clauses\n--\n--Testcase 360:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 361:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 362:\nCREATE FOREIGN TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n) SERVER sqlite_svr; \n\n--Testcase 363:\nCREATE FOREIGN TABLE J2_TBL (\n  i integer,\n  k integer\n) SERVER sqlite_svr; \n\n--Testcase 364:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 365:\nCREATE FOREIGN TABLE tenk2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 366:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 632:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 633:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 634:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 635:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 636:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 367:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 637:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 638:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 639:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 640:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 641:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n--Testcase 368:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 642:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 643:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 644:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 645:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 646:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 369:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO J1_TBL VALUES (1, 4, 'one');\n--Testcase 2:\nINSERT INTO J1_TBL VALUES (2, 3, 'two');\n--Testcase 3:\nINSERT INTO J1_TBL VALUES (3, 2, 'three');\n--Testcase 4:\nINSERT INTO J1_TBL VALUES (4, 1, 'four');\n--Testcase 5:\nINSERT INTO J1_TBL VALUES (5, 0, 'five');\n--Testcase 6:\nINSERT INTO J1_TBL VALUES (6, 6, 'six');\n--Testcase 7:\nINSERT INTO J1_TBL VALUES (7, 7, 'seven');\n--Testcase 8:\nINSERT INTO J1_TBL VALUES (8, 8, 'eight');\n--Testcase 9:\nINSERT INTO J1_TBL VALUES (0, NULL, 'zero');\n--Testcase 10:\nINSERT INTO J1_TBL VALUES (NULL, NULL, 'null');\n--Testcase 11:\nINSERT INTO J1_TBL VALUES (NULL, 0, 'zero');\n\n--Testcase 12:\nINSERT INTO J2_TBL VALUES (1, -1);\n--Testcase 13:\nINSERT INTO J2_TBL VALUES (2, 2);\n--Testcase 14:\nINSERT INTO J2_TBL VALUES (3, -3);\n--Testcase 15:\nINSERT INTO J2_TBL VALUES (2, 4);\n--Testcase 16:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 17:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 18:\nINSERT INTO J2_TBL VALUES (0, NULL);\n--Testcase 19:\nINSERT INTO J2_TBL VALUES (NULL, NULL);\n--Testcase 20:\nINSERT INTO J2_TBL VALUES (NULL, 0);\n\n-- useful in some tests below\n--Testcase 370:\ncreate temp table onerow();\n--Testcase 371:\ninsert into onerow default values;\nanalyze onerow;\n\n\n--\n-- CORRELATION NAMES\n-- Make sure that table/column aliases are supported\n-- before diving into more complex join syntax.\n--\n\n--Testcase 21:\nSELECT *\n  FROM J1_TBL AS tx;\n\n--Testcase 22:\nSELECT *\n  FROM J1_TBL tx;\n\n--Testcase 23:\nSELECT *\n  FROM J1_TBL AS t1 (a, b, c);\n\n--Testcase 24:\nSELECT *\n  FROM J1_TBL t1 (a, b, c);\n\n--Testcase 25:\nSELECT *\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e);\n\n--Testcase 26:\nSELECT t1.a, t2.e\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e)\n  WHERE t1.a = t2.d;\n\n\n--\n-- CROSS JOIN\n-- Qualifications are not allowed on cross joins,\n-- which degenerate into a standard unqualified inner join.\n--\n\n--Testcase 27:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- ambiguous column\n--Testcase 28:\nSELECT i, k, t\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- resolve previous ambiguity by specifying the table name\n--Testcase 29:\nSELECT t1.i, k, t\n  FROM J1_TBL t1 CROSS JOIN J2_TBL t2;\n\n--Testcase 30:\nSELECT ii, tt, kk\n  FROM (J1_TBL CROSS JOIN J2_TBL)\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 31:\nSELECT tx.ii, tx.jj, tx.kk\n  FROM (J1_TBL t1 (a, b, c) CROSS JOIN J2_TBL t2 (d, e))\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 32:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL a CROSS JOIN J2_TBL b;\n\n\n--\n--\n-- Inner joins (equi-joins)\n--\n--\n\n--\n-- Inner joins (equi-joins) with USING clause\n-- The USING syntax changes the shape of the resulting table\n-- by including a column in the USING clause only once in the result.\n--\n\n-- Inner equi-join on specified column\n--Testcase 33:\nSELECT *\n  FROM J1_TBL INNER JOIN J2_TBL USING (i);\n\n-- Same as above, slightly different syntax\n--Testcase 34:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i);\n\n--Testcase 35:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, d) USING (a)\n  ORDER BY a, d;\n\n--Testcase 36:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, b) USING (b)\n  ORDER BY b, t1.a;\n\n-- test join using aliases\n--Testcase 489:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 490:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 491:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i)) AS x WHERE J1_TBL.t = 'one';  -- error\n--Testcase 492:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.i = 1;  -- ok\n--Testcase 493:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.t = 'one';  -- error\n--Testcase 494:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i) AS x) AS xx WHERE x.i = 1;  -- error (XXX could use better hint)\n--Testcase 495:\nSELECT *\n  FROM J1_TBL a1 JOIN J2_TBL a2 USING (i) AS a1;  -- error\n--Testcase 496:\nSELECT x.*\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 497:\nSELECT ROW(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 498:\nSELECT row_to_json(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n\n--\n-- NATURAL JOIN\n-- Inner equi-join on all columns with the same name\n--\n\n--Testcase 37:\nSELECT *\n  FROM J1_TBL NATURAL JOIN J2_TBL;\n\n--Testcase 38:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (a, d);\n\n--Testcase 39:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (d, a);\n\n-- mismatch number of columns\n-- currently, Postgres will fill in with underlying names\n--Testcase 40:\nSELECT *\n  FROM J1_TBL t1 (a, b) NATURAL JOIN J2_TBL t2 (a);\n\n\n--\n-- Inner joins (equi-joins)\n--\n\n--Testcase 41:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.i);\n\n--Testcase 42:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.k);\n\n\n--\n-- Non-equi-joins\n--\n\n--Testcase 43:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i <= J2_TBL.k);\n\n\n--\n-- Outer joins\n-- Note that OUTER is a noise word\n--\n\n--Testcase 44:\nSELECT *\n  FROM J1_TBL LEFT OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 45:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 46:\nSELECT *\n  FROM J1_TBL RIGHT OUTER JOIN J2_TBL USING (i);\n\n--Testcase 47:\nSELECT *\n  FROM J1_TBL RIGHT JOIN J2_TBL USING (i);\n\n--Testcase 48:\nSELECT *\n  FROM J1_TBL FULL OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 49:\nSELECT *\n  FROM J1_TBL FULL JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 50:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (k = 1);\n\n--Testcase 51:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (i = 1);\n\n--\n-- semijoin selectivity for <>\n--\n--Testcase 52:\nexplain (costs off)\nselect * from int4_tbl i4, tenk1 a\nwhere exists(select * from tenk1 b\n             where a.twothousand = b.twothousand and a.fivethous <> b.fivethous)\n      and i4.f1 = a.tenthous;\n\n\n--\n-- More complicated constructs\n--\n\n--\n-- Multiway full join\n--\n\n--Testcase 372:\nCREATE FOREIGN TABLE t11 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 373:\nCREATE FOREIGN TABLE t21 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 374:\nCREATE FOREIGN TABLE t31 (name TEXT, n INTEGER) SERVER sqlite_svr;\n\n--Testcase 483:\nCREATE FOREIGN TABLE onek (\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n\n--Testcase 53:\nINSERT INTO t11 VALUES ( 'bb', 11 );\n--Testcase 54:\nINSERT INTO t21 VALUES ( 'bb', 12 );\n--Testcase 55:\nINSERT INTO t21 VALUES ( 'cc', 22 );\n--Testcase 56:\nINSERT INTO t21 VALUES ( 'ee', 42 );\n--Testcase 57:\nINSERT INTO t31 VALUES ( 'bb', 13 );\n--Testcase 58:\nINSERT INTO t31 VALUES ( 'cc', 23 );\n--Testcase 59:\nINSERT INTO t31 VALUES ( 'dd', 33 );\n\n--Testcase 60:\nSELECT * FROM t11 FULL JOIN t21 USING (name) FULL JOIN t31 USING (name);\n\n--\n-- Test interactions of join syntax and subqueries\n--\n\n-- Basic cases (we expect planner to pull up the subquery here)\n--Testcase 61:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nINNER JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 62:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nLEFT JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 63:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nFULL JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n-- Cases with non-nullable expressions in subquery results;\n-- make sure these go to null as expected\n--Testcase 64:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 65:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL LEFT JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 66:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 67:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL INNER JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 68:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL FULL JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 69:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n--Testcase 70:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n-- Constants as join keys can also be problematic\n--Testcase 375:\nSELECT * FROM\n  (SELECT name, n as s1_n FROM t11) as s1\nFULL JOIN\n  (SELECT name, 2 as s2_n FROM t21) as s2\nON (s1_n = s2_n);\n\n-- Test for propagation of nullability constraints into sub-joins\n\n--Testcase 376:\ncreate foreign table x (x1 int, x2 int) server sqlite_svr;\n--Testcase 71:\ninsert into x values (1,11);\n--Testcase 72:\ninsert into x values (2,22);\n--Testcase 73:\ninsert into x values (3,null);\n--Testcase 74:\ninsert into x values (4,44);\n--Testcase 75:\ninsert into x values (5,null);\n\n--Testcase 377:\ncreate foreign table y (y1 int, y2 int) server sqlite_svr;\n--Testcase 76:\ninsert into y values (1,111);\n--Testcase 77:\ninsert into y values (2,222);\n--Testcase 78:\ninsert into y values (3,333);\n--Testcase 79:\ninsert into y values (4,null);\n\n--Testcase 80:\nselect * from x;\n--Testcase 81:\nselect * from y;\n\n--Testcase 82:\nselect * from x left join y on (x1 = y1 and x2 is not null);\n--Testcase 83:\nselect * from x left join y on (x1 = y1 and y2 is not null);\n\n--Testcase 84:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1);\n--Testcase 85:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and x2 is not null);\n--Testcase 86:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and y2 is not null);\n--Testcase 87:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and xx2 is not null);\n-- these should NOT give the same answers as above\n--Testcase 88:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (x2 is not null);\n--Testcase 89:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (y2 is not null);\n--Testcase 90:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (xx2 is not null);\n\n--\n-- regression test: check for bug with propagation of implied equality\n-- to outside an IN\n--\n--Testcase 91:\nselect count(*) from tenk1 a where unique1 in\n  (select unique1 from tenk1 b join tenk1 c using (unique1)\n   where b.unique2 = 42);\n\n--\n-- regression test: check for failure to generate a plan with multiple\n-- degenerate IN clauses\n--\n--Testcase 92:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\n\n-- try that with GEQO too\nbegin;\n--Testcase 499:\nset geqo = on;\n--Testcase 500:\nset geqo_threshold = 2;\n--Testcase 93:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\nrollback;\n\n--\n-- regression test: be sure we cope with proven-dummy append rels\n--\n--Testcase 378:\ncreate table b (aa int, bb int);\n--Testcase 379:\nexplain (costs off)\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--Testcase 380:\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--\n-- regression test: check handling of empty-FROM subquery underneath outer join\n--\n--Testcase 94:\nexplain (costs off)\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--Testcase 95:\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--\n-- regression test: check a case where join_clause_is_movable_into()\n-- used to give an imprecise result, causing an assertion failure\n--\n--Testcase 96:\nselect count(*)\nfrom\n  (select t31.tenthous as x1, coalesce(t11.stringu1, t21.stringu1) as x2\n   from tenk1 t11\n   left join tenk1 t21 on t11.unique1 = t21.unique1\n   join tenk1 t31 on t11.unique2 = t31.unique2) ss,\n  tenk1 t4,\n  tenk1 t5\nwhere t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1;\n\n--\n-- regression test: check a case where we formerly missed including an EC\n-- enforcement clause because it was expected to be handled at scan level\n--\n--Testcase 97:\nexplain (costs off)\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--Testcase 98:\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--\n-- checks for correct handling of quals in multiway outer joins\n--\n--Testcase 545:\nexplain (costs off)\nselect t1.f1\nfrom int4_tbl t1, int4_tbl t2\n  left join int4_tbl t3 on t3.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 1\nwhere t4.f1 is null;\n\n--Testcase 546:\nselect t1.f1\nfrom int4_tbl t1, int4_tbl t2\n  left join int4_tbl t3 on t3.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 1\nwhere t4.f1 is null;\n\n--Testcase 547:\nexplain (costs off)\nselect *\nfrom int4_tbl t1 left join int4_tbl t2 on true\n  left join int4_tbl t3 on t2.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 0;\n\n--Testcase 548:\nexplain (costs off)\nselect * from onek t1\n  left join onek t2 on t1.unique1 = t2.unique1\n  left join onek t3 on t2.unique1 != t3.unique1\n  left join onek t4 on t3.unique1 = t4.unique1;\n\n--Testcase 549:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join (select now() from int4_tbl t2\n             left join int4_tbl t3 on t2.f1 = t3.f1\n             left join int4_tbl t4 on t3.f1 = t4.f1) s on true\n  inner join int4_tbl t5 on true;\n\n--Testcase 550:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join int4_tbl t2 on true\n  left join int4_tbl t3 on true\n  left join int4_tbl t4 on t2.f1 = t3.f1;\n\n--Testcase 551:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join int4_tbl t2 on true\n  left join int4_tbl t3 on t2.f1 = t3.f1\n  left join int4_tbl t4 on t3.f1 != t4.f1;\n\n--Testcase 552:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join (int4_tbl t2 left join int4_tbl t3 on t2.f1 > 0) on t2.f1 > 1\n  left join int4_tbl t4 on t2.f1 > 2 and t3.f1 > 3\nwhere t1.f1 = coalesce(t2.f1, 1);\n\n--Testcase 553:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join ((select t2.f1 from int4_tbl t2\n                left join int4_tbl t3 on t2.f1 > 0\n                where t3.f1 is null) s\n             left join tenk1 t4 on s.f1 > 1)\n    on s.f1 = t1.f1;\n\n--Testcase 554:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join ((select t2.f1 from int4_tbl t2\n                left join int4_tbl t3 on t2.f1 > 0\n                where t2.f1 <> coalesce(t3.f1, -1)) s\n             left join tenk1 t4 on s.f1 > 1)\n    on s.f1 = t1.f1;\n\n--Testcase 555:\nexplain (costs off)\nselect * from onek t1\n    left join onek t2 on t1.unique1 = t2.unique1\n    left join onek t3 on t2.unique1 = t3.unique1\n    left join onek t4 on t3.unique1 = t4.unique1 and t2.unique2 = t4.unique2;\n\n--Testcase 556:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n    (int8_tbl t2 left join int8_tbl t3 full join int8_tbl t4 on false on false)\n    left join int8_tbl t5 on t2.q1 = t5.q1\non t2.q2 = 123;\n\n--Testcase 557:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select * from int8_tbl t3 where t3.q1 = t2.q1 offset 0) s\n      on t2.q1 = 1;\n\n--Testcase 558:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select * from generate_series(t2.q1, 100)) s\n      on t2.q1 = 1;\n\n--Testcase 559:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select t2.q1 from int8_tbl t3) s\n      on t2.q1 = 1;\n\n--Testcase 560:\nexplain (costs off)\nselect * from onek t1\n    left join onek t2 on true\n    left join lateral\n      (select * from onek t3 where t3.two = t2.two offset 0) s\n      on t2.unique1 = 1;\n\n--\n-- check a case where we formerly got confused by conflicting sort orders\n-- in redundant merge join path keys\n-- PS: Used ORDER BY to force SQLite and PG12 always order in the same way (NULLS FIRST/LAST default value for PG and Sqlite are different)\n--\n--Testcase 99:\nexplain (costs off)\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--Testcase 100:\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--\n-- a different check for handling of redundant sort keys in merge joins\n--\n--Testcase 101:\nexplain (costs off)\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n--Testcase 102:\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\nset enable_hashjoin = 0;\nset enable_nestloop = 0;\nset enable_hashagg = 0;\n\n--\n-- Check that we use the pathkeys from a prefix of the group by / order by\n-- clause for the join pathkeys when that prefix covers all join quals.  We\n-- expect this to lead to an incremental sort for the group by / order by.\n--\n--Testcase 561:\nexplain (costs off)\nselect x.thousand, x.twothousand, count(*)\nfrom tenk1 x inner join tenk1 y on x.thousand = y.thousand\ngroup by x.thousand, x.twothousand\norder by x.thousand desc, x.twothousand;\n\nreset enable_hashagg;\nreset enable_nestloop;\nreset enable_hashjoin;\n\n--\n-- Clean up\n--\n\n--Testcase 381:\nDROP FOREIGN TABLE t11;\n--Testcase 382:\nDROP FOREIGN TABLE t21;\n--Testcase 383:\nDROP FOREIGN TABLE t31;\n\n--Testcase 384:\nDROP FOREIGN TABLE J1_TBL;\n--Testcase 385:\nDROP FOREIGN TABLE J2_TBL;\n\n-- Both DELETE and UPDATE allow the specification of additional tables\n-- to \"join\" against to determine which rows should be modified.\n\n--Testcase 386:\nCREATE FOREIGN TABLE t12 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 387:\nCREATE FOREIGN TABLE t22 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 388:\nCREATE FOREIGN TABLE t32 (x int OPTIONS (key 'true'), y int) SERVER sqlite_svr;\n\n--Testcase 103:\nINSERT INTO t12 VALUES (5, 10);\n--Testcase 104:\nINSERT INTO t12 VALUES (15, 20);\n--Testcase 105:\nINSERT INTO t12 VALUES (100, 100);\n--Testcase 106:\nINSERT INTO t12 VALUES (200, 1000);\n--Testcase 107:\nINSERT INTO t22 VALUES (200, 2000);\n--Testcase 108:\nINSERT INTO t32 VALUES (5, 20);\n--Testcase 109:\nINSERT INTO t32 VALUES (6, 7);\n--Testcase 110:\nINSERT INTO t32 VALUES (7, 8);\n--Testcase 111:\nINSERT INTO t32 VALUES (500, 100);\n\n--Testcase 112:\nDELETE FROM t32 USING t12 table1 WHERE t32.x = table1.a;\n--Testcase 113:\nSELECT * FROM t32;\n--Testcase 114:\nDELETE FROM t32 USING t12 JOIN t22 USING (a) WHERE t32.x > t12.a;\n--Testcase 115:\nSELECT * FROM t32;\n--Testcase 116:\nDELETE FROM t32 USING t32 t3_other WHERE t32.x = t3_other.x AND t32.y = t3_other.y;\n--Testcase 117:\nSELECT * FROM t32;\n\n-- Test join against inheritance tree\n\n--Testcase 389:\ncreate temp table t2a () inherits (t22);\n\n--Testcase 118:\ninsert into t2a values (200, 2001);\n\n--Testcase 119:\nselect * from t12 left join t22 on (t12.a = t22.a);\n\n-- Test matching of column name with wrong alias\n\n--Testcase 120:\nselect t12.x from t12 join t32 on (t12.a = t32.x);\n\n-- Test matching of locking clause with wrong alias\n\n--Testcase 540:\nselect t12.*, t22.*, unnamed_join.* from\n  t12 join t22 on (t12.a = t22.a), t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 541:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 542:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 543:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 544:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of bar;\n\n--Testcase 536:\ndrop table t2a;\n\n--\n-- regression test for 8.1 merge right join bug\n--\n\n--Testcase 390:\nCREATE FOREIGN TABLE tt1 ( tt1_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO tt1 VALUES (1, 11);\n--Testcase 122:\nINSERT INTO tt1 VALUES (2, NULL);\n\n--Testcase 391:\nCREATE FOREIGN TABLE tt2 ( tt2_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 123:\nINSERT INTO tt2 VALUES (21, 11);\n--Testcase 124:\nINSERT INTO tt2 VALUES (22, 11);\n\n--Testcase 501:\nset enable_hashjoin to off;\n--Testcase 502:\nset enable_nestloop to off;\n\n-- these should give the same results\n\n--Testcase 125:\nselect tt1.*, tt2.* from tt1 left join tt2 on tt1.joincol = tt2.joincol;\n\n--Testcase 126:\nselect tt1.*, tt2.* from tt2 right join tt1 on tt1.joincol = tt2.joincol;\n\n--Testcase 503:\nreset enable_hashjoin;\n--Testcase 504:\nreset enable_nestloop;\n\n--\n-- regression test for bug #13908 (hash join with skew tuples & nbatch increase)\n--\n\n--Testcase 505:\nset work_mem to '64kB';\n--Testcase 506:\nset enable_mergejoin to off;\n--Testcase 507:\nset enable_memoize to off;\n\n--Testcase 127:\nexplain (costs off)\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n--Testcase 128:\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n\n--Testcase 508:\nreset work_mem;\n--Testcase 509:\nreset enable_mergejoin;\n--Testcase 510:\nreset enable_memoize;\n\n--\n-- regression test for 8.2 bug with improper re-ordering of left joins\n--\n\n--Testcase 392:\ncreate foreign table tt3(f1 int, f2 text) server sqlite_svr;\n--Testcase 129:\ninsert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x;\n\n--Testcase 393:\ncreate foreign table tt4(f1 int) server sqlite_svr;\n--Testcase 130:\ninsert into tt4 values (0),(1),(9999);\n\nset enable_nestloop to off;\n\n--Testcase 562:\nEXPLAIN (COSTS OFF)\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE COALESCE(c.f1, 0) = 0\n) AS d ON (a.f1 = d.f1)\nWHERE COALESCE(d.f1, 0) = 0\nORDER BY 1;\n\n--Testcase 563:\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE COALESCE(c.f1, 0) = 0\n) AS d ON (a.f1 = d.f1)\nWHERE COALESCE(d.f1, 0) = 0\nORDER BY 1;\n\nreset enable_nestloop;\n\n--\n-- basic semijoin and antijoin recognition tests\n--\n\n--Testcase 564:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere unique1 in (select unique2 from tenk1 b);\n\n-- sadly, this is not an antijoin\n--Testcase 565:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere unique1 not in (select unique2 from tenk1 b);\n\n--Testcase 566:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere exists (select 1 from tenk1 b where a.unique1 = b.unique2);\n\n--Testcase 567:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere not exists (select 1 from tenk1 b where a.unique1 = b.unique2);\n\n--Testcase 568:\nexplain (costs off)\nselect a.* from tenk1 a left join tenk1 b on a.unique1 = b.unique2\nwhere b.unique2 is null;\n\n\n--\n-- regression test for proper handling of outer joins within antijoins\n--\n\n--Testcase 394:\ncreate foreign table tt4x(c1 int, c2 int, c3 int) server sqlite_svr;\n\n--Testcase 132:\nexplain (costs off)\nselect * from tt4x t1\nwhere not exists (\n  select 1 from tt4x t2\n    left join tt4x t3 on t2.c3 = t3.c1\n    left join ( select t5.c1 as c1\n                from tt4x t4 left join tt4x t5 on t4.c2 = t5.c1\n              ) a1 on t3.c2 = a1.c1\n  where t1.c1 = t2.c2\n);\n\n--\n-- regression test for problems of the sort depicted in bug #3494\n--\n\n--Testcase 395:\ncreate foreign table tt5(f1 int, f2 int) server sqlite_svr;\n--Testcase 396:\ncreate foreign table tt6(f1 int, f2 int) server sqlite_svr;\n\n--Testcase 133:\ninsert into tt5 values(1, 10);\n--Testcase 134:\ninsert into tt5 values(1, 11);\n\n--Testcase 135:\ninsert into tt6 values(1, 9);\n--Testcase 136:\ninsert into tt6 values(1, 2);\n--Testcase 137:\ninsert into tt6 values(2, 9);\n\n--Testcase 138:\nselect * from tt5,tt6 where tt5.f1 = tt6.f1 and tt5.f1 = tt5.f2 - tt6.f2;\n\n--\n-- regression test for problems of the sort depicted in bug #3588\n--\n\n--Testcase 397:\ncreate foreign table xx (pkxx int) server sqlite_svr;\n--Testcase 398:\ncreate foreign table yy (pkyy int, pkxx int) server sqlite_svr;\n\n--Testcase 139:\ninsert into xx values (1);\n--Testcase 140:\ninsert into xx values (2);\n--Testcase 141:\ninsert into xx values (3);\n\n--Testcase 142:\ninsert into yy values (101, 1);\n--Testcase 143:\ninsert into yy values (201, 2);\n--Testcase 144:\ninsert into yy values (301, NULL);\n\n--Testcase 145:\nselect yy.pkyy as yy_pkyy, yy.pkxx as yy_pkxx, yya.pkyy as yya_pkyy,\n       xxa.pkxx as xxa_pkxx, xxb.pkxx as xxb_pkxx\nfrom yy\n     left join (SELECT * FROM yy where pkyy = 101) as yya ON yy.pkyy = yya.pkyy\n     left join xx xxa on yya.pkxx = xxa.pkxx\n     left join xx xxb on coalesce (xxa.pkxx, 1) = xxb.pkxx;\n\n--\n-- regression test for improper pushing of constants across outer-join clauses\n-- (as seen in early 8.2.x releases)\n--\n\n--Testcase 399:\ncreate foreign table zt1 (f1 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 400:\ncreate foreign table zt2 (f2 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 401:\ncreate foreign table zt3 (f3 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 146:\ninsert into zt1 values(53);\n--Testcase 147:\ninsert into zt2 values(53);\n\n--Testcase 148:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zt1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 402:\ncreate temp view zv1 as select *,'dummy'::text AS junk from zt1;\n\n--Testcase 149:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zv1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 537:\ndrop view zv1;\n\n--\n-- regression test for improper extraction of OR indexqual conditions\n-- (as seen in early 8.3.x releases)\n--\n\n--Testcase 150:\nselect a.unique2, a.ten, b.tenthous, b.unique2, b.hundred\nfrom tenk1 a left join tenk1 b on a.unique2 = b.tenthous\nwhere a.unique1 = 42 and\n      ((b.unique2 is null and a.ten = 2) or b.hundred = 3);\n\n--\n-- test proper positioning of one-time quals in EXISTS (8.4devel bug)\n--\n--Testcase 151:\nprepare foo(bool) as\n  select count(*) from tenk1 a left join tenk1 b\n    on (a.unique2 = b.unique1 and exists\n        (select 1 from tenk1 c where c.thousand = b.unique2 and $1));\n--Testcase 152:\nexecute foo(true);\n--Testcase 153:\nexecute foo(false);\n\n--\n-- test for sane behavior with noncanonical merge clauses, per bug #4926\n--\n\nbegin;\n\n--Testcase 511:\nset enable_mergejoin = 1;\n--Testcase 512:\nset enable_hashjoin = 0;\n--Testcase 513:\nset enable_nestloop = 0;\n\n--Testcase 403:\ncreate foreign table a1 (i integer) server sqlite_svr;\n--Testcase 404:\ncreate foreign table b1 (x integer, y integer) server sqlite_svr;\n\n--Testcase 154:\nselect * from a1 left join b1 on i = x and i = y and x = i;\n\nrollback;\n\n-- skip this test, sqlite fdw does not support customized type\n-- test handling of merge clauses using record_ops\n--\n--begin;\n\n--create type mycomptype as (id int, v bigint);\n\n--create foreign table tidv (idv mycomptype) server sqlite_svr;\n--create index on tidv (idv);\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--set enable_mergejoin = 0;\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--rollback;\n\n--\n-- test NULL behavior of whole-row Vars, per bug #5025\n--\n--Testcase 155:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join int8_tbl t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 156:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 157:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl offset 0) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 158:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join\n  (select q1, case when q2=1 then 1 else q2 end as q2 from int8_tbl) t2\n  on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--\n-- test incorrect failure to NULL pulled-up subexpressions\n--\nbegin;\n\n--Testcase 405:\ncreate foreign table a2 (\n     code char OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 406:\ncreate foreign table b2 (\n     a char OPTIONS (key 'true'),\n     num integer OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 407:\ncreate foreign table c2 (\n     name char OPTIONS (key 'true'),\n     a char\n) server sqlite_svr;\n\n--Testcase 159:\ninsert into a2 (code) values ('p');\n--Testcase 160:\ninsert into a2 (code) values ('q');\n--Testcase 161:\ninsert into b2 (a, num) values ('p', 1);\n--Testcase 162:\ninsert into b2 (a, num) values ('p', 2);\n--Testcase 163:\ninsert into c2 (name, a) values ('A', 'p');\n--Testcase 164:\ninsert into c2 (name, a) values ('B', 'q');\n--Testcase 165:\ninsert into c2 (name, a) values ('C', null);\n\n--Testcase 166:\nselect c2.name, ss.code, ss.b_cnt, ss.const\nfrom c2 left join\n  (select a2.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const\n   from a2 left join\n     (select count(1) as cnt, b2.a from b2 group by b2.a) as b_grp\n     on a2.code = b_grp.a\n  ) as ss\n  on (c2.a = ss.code)\norder by c2.name;\n\nrollback;\n\n--\n-- test incorrect handling of placeholders that only appear in targetlists,\n-- per bug #6154\n--\n--Testcase 408:\ncreate foreign table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id int options (key 'true')) server sqlite_svr;\n--Testcase 409:\ninsert into sub_tbl values (1, 1, 1, 2, 42);\n\n--Testcase 410:\nSELECT * FROM\n( SELECT key1 from sub_tbl) sub1\nLEFT JOIN\n( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl ) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n-- test the path using join aliases, too\n--Testcase 411:\nSELECT * FROM\n( SELECT key1 from sub_tbl ) sub1\nLEFT JOIN\n( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl ) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl ) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n--\n-- test case where a PlaceHolderVar is used as a nestloop parameter\n--\n\n--Testcase 167:\nEXPLAIN (COSTS OFF)\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--Testcase 168:\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--\n-- nested nestloops can require nested PlaceHolderVars\n--\n\n--Testcase 412:\ncreate foreign table nt1 (\n  id int OPTIONS (key 'true'),\n  a1 boolean,\n  a2 boolean\n) server sqlite_svr;\n--Testcase 413:\ncreate foreign table nt2 (\n  id int OPTIONS (key 'true'),\n  nt1_id int,\n  b1 boolean,\n  b2 boolean\n) server sqlite_svr;\n--Testcase 414:\ncreate foreign table nt3 (\n  id int OPTIONS (key 'true'),\n  nt2_id int,\n  c1 boolean\n) server sqlite_svr;\n\n--Testcase 169:\ninsert into nt1 values (1,true,true);\n--Testcase 170:\ninsert into nt1 values (2,true,false);\n--Testcase 171:\ninsert into nt1 values (3,false,false);\n--Testcase 172:\ninsert into nt2 values (1,1,true,true);\n--Testcase 173:\ninsert into nt2 values (2,2,true,false);\n--Testcase 174:\ninsert into nt2 values (3,3,false,false);\n--Testcase 175:\ninsert into nt3 values (1,1,true);\n--Testcase 176:\ninsert into nt3 values (2,2,false);\n--Testcase 177:\ninsert into nt3 values (3,3,true);\n\n--Testcase 178:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 179:\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--\n-- test case where a PlaceHolderVar is propagated into a subquery\n--\n\n--Testcase 180:\nexplain (costs off)\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--Testcase 181:\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--\n-- variant where a PlaceHolderVar is needed at a join, but not above the join\n--\n\n--Testcase 514:\nexplain (costs off)\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--Testcase 515:\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--\n-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE\n--\n--Testcase 182:\nselect * from int4_tbl a full join int4_tbl b on true;\n--Testcase 183:\nselect * from int4_tbl a full join int4_tbl b on false;\n\n--\n-- test for ability to use a cartesian join when necessary\n--\n--Testcase 415:\ncreate foreign table q1(i int) server sqlite_svr;\n--Testcase 416:\ninsert into q1 values (1);\n--Testcase 417:\ncreate foreign table q2(i int) server sqlite_svr;\n--Testcase 418:\ninsert into q2 values (0);\n--Testcase 184:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere q1.i = thousand or q2.i = thousand;\n\n--Testcase 185:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere thousand = (q1.i + q2.i);\n\n--\n-- test ability to generate a suitable plan for a star-schema query\n--\n\n--Testcase 186:\nexplain (costs off)\nselect * from\n  tenk1, int8_tbl a, int8_tbl b\nwhere thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2;\n\n--\n-- test a corner case in which we shouldn't apply the star-schema optimization\n--\n\n--Testcase 187:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 188:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- variant that isn't quite a star-schema case\n\n--Testcase 189:\nselect ss1.d1 from\n  tenk1 as t1\n  inner join tenk1 as t2\n  on t1.tenthous = t2.ten\n  inner join\n    int8_tbl as i8\n    left join int4_tbl as i4\n      inner join (select 64::information_schema.cardinal_number as d1\n                  from tenk1 t3,\n                       lateral (select abs(t3.unique1) + random()) ss0(x)\n                  where t3.fivethous < 0) as ss1\n      on i4.f1 = ss1.d1\n    on i8.q1 = i4.f1\n  on t1.tenthous = ss1.d1\nwhere t1.unique1 < i4.f1;\n\n-- this variant is foldable by the remove-useless-RESULT-RTEs code\n\n--Testcase 419:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 420:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- Here's a variant that we can't fold too aggressively, though,\n-- or we end up with noplace to evaluate the lateral PHV\n\n--Testcase 421:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x from sub_tbl) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n--Testcase 422:\nselect * from\n  (select key1 as x from sub_tbl as x) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n\n-- Test proper handling of appendrel PHVs during useless-RTE removal\n--Testcase 516:\nexplain (costs off)\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n--Testcase 517:\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n-- Test PHV in a semijoin qual, which confused useless-RTE removal (bug #17700)\n--Testcase 569:\nexplain (verbose, costs off)\nwith ctetable as not materialized ( select 1 as f1 )\nselect * from ctetable c1\nwhere f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true );\n\n--Testcase 570:\nwith ctetable as not materialized ( select 1 as f1 )\nselect * from ctetable c1\nwhere f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true );\n\n-- Test PHV that winds up in a Result node, despite having nonempty nullingrels\n--Testcase 571:\nexplain (verbose, costs off)\nselect table_catalog, table_name\nfrom int4_tbl t1\n  inner join (int8_tbl t2\n              left join information_schema.column_udt_usage on null)\n  on null;\n\n-- Test handling of qual pushdown to appendrel members with non-Var outputs\n--Testcase 572:\nexplain (verbose, costs off)\nselect * from int4_tbl left join (\n  select text 'foo' union all select text 'bar'\n) ss(x) on true\nwhere ss.x is null;\n\n--\n-- test inlining of immutable functions\n--\n--Testcase 423:\ncreate function f_immutable_int4(i integer) returns integer as\n$$ begin return i; end; $$ language plpgsql immutable;\n\n-- check optimization of function scan with join\n--Testcase 424:\nexplain (costs off)\nselect unique1 from tenk1, (select * from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 425:\nexplain (verbose, costs off)\nselect unique1, x.*\nfrom tenk1, (select *, random() from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 426:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = unique1;\n\n--Testcase 427:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1;\n\n--Testcase 538:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17);\n\n--Testcase 428:\nexplain (costs off)\nselect unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 429:\nexplain (costs off)\nselect unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 430:\nexplain (costs off)\nselect unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 431:\nexplain (costs off)\nselect unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x;\n\n-- check that pullup of a const function allows further const-folding\n--Testcase 432:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = 42;\n\n-- test inlining of immutable functions with PlaceHolderVars\n--Testcase 433:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 or i4 = 42) AS b3\n     from nt2 as nt2\n       left join\n         f_immutable_int4(0) i4\n         on i4 = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 434:\ndrop function f_immutable_int4(int);\n\n-- test inlining when function returns composite\n\n--Testcase 435:\ncreate function mki8(bigint, bigint) returns int8_tbl as\n$$select row($1,$2)::int8_tbl$$ language sql;\n\n--Testcase 436:\ncreate function mki4(int) returns int4_tbl as\n$$select row($1)::int4_tbl$$ language sql;\n\n--Testcase 437:\nexplain (verbose, costs off)\nselect * from mki8(1,2);\n--Testcase 438:\nselect * from mki8(1,2);\n\n--Testcase 439:\nexplain (verbose, costs off)\nselect * from mki4(42);\n--Testcase 440:\nselect * from mki4(42);\n\n--Testcase 441:\ndrop function mki8(bigint, bigint);\n--Testcase 442:\ndrop function mki4(int);\n\n--\n-- test extraction of restriction OR clauses from join OR clause\n-- (we used to only do this for indexable clauses)\n--\n\n--Testcase 190:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4);\n--Testcase 191:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4);\n--Testcase 192:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or\n  ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4);\n\n--\n-- test placement of movable quals in a parameterized join tree\n--\n\n--Testcase 193:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 194:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 195:\nexplain (costs off)\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 196:\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 197:\nexplain (costs off)\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 198:\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 199:\nexplain (costs off)\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 200:\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 201:\nexplain (costs off)\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--Testcase 202:\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--\n-- test handling of potential equivalence clauses above outer joins\n--\n\n--Testcase 203:\nexplain (costs off)\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 204:\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 205:\nexplain (costs off)\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--Testcase 206:\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--\n-- another case with equivalence clauses above outer joins (bug #8591)\n--\n\n--Testcase 207:\nexplain (costs off)\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--Testcase 208:\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n-- related case\n\n--Testcase 573:\nexplain (costs off)\nselect * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1,\n  lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss;\n\n--Testcase 574:\nselect * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1,\n  lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss;\n\n--\n-- check handling of join aliases when flattening multiple levels of subquery\n--\n\n--Testcase 209:\nexplain (verbose, costs off)\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--Testcase 210:\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--\n-- check handling of a variable-free join alias\n--\n--Testcase 575:\nexplain (verbose, costs off)\nselect * from\nint4_tbl i0 left join\n( (select *, 123 as x from int4_tbl i1) ss1\n  left join\n  (select *, q2 as x from int8_tbl i2) ss2\n  using (x)\n) ss0\non (i0.f1 = ss0.f1)\norder by i0.f1, x;\n\n--Testcase 576:\nselect * from\nint4_tbl i0 left join\n( (select *, 123 as x from int4_tbl i1) ss1\n  left join\n  (select *, q2 as x from int8_tbl i2) ss2\n  using (x)\n) ss0\non (i0.f1 = ss0.f1)\norder by i0.f1, x;\n\n--\n-- test successful handling of nested outer joins with degenerate join quals\n--\n--Testcase 443:\ncreate foreign table text_tbl(f1 text) server sqlite_svr;\n\n--Testcase 211:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 212:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 213:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 214:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 215:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 216:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 217:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--Testcase 218:\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n-- check handling of a variable-free qual for a non-commutable outer join\n--Testcase 577:\nexplain (costs off)\nselect nspname\nfrom (select 1 as x) ss1\nleft join\n( select n.nspname, c.relname\n  from pg_class c left join pg_namespace n on n.oid = c.relnamespace\n  where c.relkind = 'r'\n) ss2 on false;\n\n-- check handling of apparently-commutable outer joins with non-commutable\n-- joins between them\n--Testcase 578:\nexplain (costs off)\nselect 1 from\n  int4_tbl i4\n  left join int8_tbl i8 on i4.f1 is not null\n  left join (select 1 as a) ss1 on null\n  join int4_tbl i42 on ss1.a is null or i8.q1 <> i8.q2\n  right join (select 2 as b) ss2\n  on ss2.b < i4.f1;\n\n--\n-- test for appropriate join order in the presence of lateral references\n--\n\n--Testcase 219:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 220:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 221:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 222:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 223:\nexplain (verbose, costs off)\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 224:\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 579:\nexplain (verbose, costs off)\nselect 1 from\n  int4_tbl as i4\n  inner join\n    ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1\n     right join (select 1 as z) as ss2 on true)\n  on false,\n  lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;\n\n--Testcase 580:\nselect 1 from\n  int4_tbl as i4\n  inner join\n    ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1\n     right join (select 1 as z) as ss2 on true)\n  on false,\n  lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;\n\n--\n-- check a case where we formerly generated invalid parameterized paths\n--\n\nbegin;\n\n--Testcase 630:\nCREATE FOREIGN TABLE t (a int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 631:\nexplain (costs off)\nselect 1 from t t1\n  join lateral (select t1.a from (select 1) foo offset 0) as s1 on true\n  join\n    (select 1 from t t2\n       inner join (t t3\n                   left join (t t4 left join t t5 on t4.a = 1)\n                   on t3.a = t4.a)\n       on false\n     where t3.a = coalesce(t5.a,1)) as s2\n  on true;\n\nrollback;\n\n--\n-- check a case in which a PlaceHolderVar forces join order\n--\n\n--Testcase 225:\nexplain (verbose, costs off)\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--Testcase 226:\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--\n-- test successful handling of full join underneath left join (bug #14105)\n--\n\n--Testcase 227:\nexplain (costs off)\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--Testcase 228:\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--\n-- test ability to push constants through outer join clauses\n--\n\n--Testcase 229:\nexplain (costs off)\n  select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0;\n\n--Testcase 230:\nexplain (costs off)\n  select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42;\n\n--\n-- test that quals attached to an outer join have correct semantics,\n-- specifically that they don't re-use expressions computed below the join;\n-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input\n--\n\n--Testcase 518:\nset enable_hashjoin to off;\n--Testcase 519:\nset enable_nestloop to off;\n\n--Testcase 231:\nexplain (verbose, costs off)\n  select a.q2, b.q1\n    from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n    where coalesce(b.q1, 1) > 0;\n--Testcase 232:\nselect a.q2, b.q1\n  from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n  where coalesce(b.q1, 1) > 0;\n\n--Testcase 520:\nreset enable_hashjoin;\n--Testcase 521:\nreset enable_nestloop;\n\n--\n-- test join strength reduction with a SubPlan providing the proof\n--\n\n--Testcase 581:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a left join onek b on a.unique1 = b.unique2\n  where b.unique2 = any (select q1 from int8_tbl c where c.q1 < b.unique1);\n\n--Testcase 582:\nselect a.unique1, b.unique2\n  from onek a left join onek b on a.unique1 = b.unique2\n  where b.unique2 = any (select q1 from int8_tbl c where c.q1 < b.unique1);\n\n--\n-- test full-join strength reduction\n--\n\n--Testcase 583:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42;\n\n--Testcase 584:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42;\n\n--Testcase 585:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where b.unique2 = 43;\n\n--Testcase 586:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where b.unique2 = 43;\n\n--Testcase 587:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42 and b.unique2 = 42;\n\n--Testcase 588:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42 and b.unique2 = 42;\n\n--\n-- test result-RTE removal underneath a full join\n--\n\n--Testcase 589:\nexplain (costs off)\nselect * from\n  (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1\nfull join\n  (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2\non true;\n\n--Testcase 590:\nselect * from\n  (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1\nfull join\n  (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2\non true;\n\n--\n-- test join removal\n--\n\nbegin;\n\n--Testcase 444:\nCREATE FOREIGN TABLE a3 (id int OPTIONS (key 'true'), b_id int) SERVER sqlite_svr;\n--Testcase 445:\nCREATE FOREIGN TABLE b3 (id int OPTIONS (key 'true'), c_id int) SERVER sqlite_svr;\n--Testcase 446:\nCREATE FOREIGN TABLE c3 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 447:\nCREATE FOREIGN TABLE d3 (a int, b int) SERVER sqlite_svr;\n--Testcase 233:\nINSERT INTO a3 VALUES (0, 0), (1, NULL);\n--Testcase 234:\nINSERT INTO b3 VALUES (0, 0), (1, NULL);\n--Testcase 235:\nINSERT INTO c3 VALUES (0), (1);\n--Testcase 236:\nINSERT INTO d3 VALUES (1,3), (2,2), (3,1);\n\n-- all three cases should be optimizable into a3 simple seqscan\n--Testcase 237:\nexplain (costs off) SELECT a3.* FROM a3 LEFT JOIN b3 ON a3.b_id = b3.id;\n--Testcase 238:\nexplain (costs off) SELECT b3.* FROM b3 LEFT JOIN c3 ON b3.c_id = c3.id;\n--Testcase 239:\nexplain (costs off)\n  SELECT a3.* FROM a3 LEFT JOIN (b3 left join c3 on b3.c_id = c3.id)\n  ON (a3.b_id = b3.id);\n\n-- check optimization of outer join within another special join\n--Testcase 240:\nexplain (costs off)\nselect id from a3 where id in (\n\tselect b3.id from b3 left join c3 on b3.id = c3.id\n);\n\n-- check optimization with oddly-nested outer joins\n--Testcase 591:\nexplain (costs off)\nselect a31.id from\n  (a3 a31 left join a3 a32 on true)\n  left join\n  (a3 a33 left join a3 a34 on a33.id = a34.id)\n  on a32.id = a33.id;\n\n--Testcase 592:\nexplain (costs off)\nselect a31.id from\n  (a3 a31 left join a3 a32 on a31.id = a32.id)\n  left join\n  (a3 a33 left join a3 a34 on a33.id = a34.id)\n  on a32.id = a33.id;\n\n--Testcase 593:\nexplain (costs off)\nselect 1 from a3 t1\n    left join a3 t2 on true\n   inner join a3 t3 on true\n    left join a3 t4 on t2.id = t4.id and t2.id = t3.id;\n\n-- another example (bug #17781)\n--Testcase 594:\nexplain (costs off)\nselect ss1.f1\nfrom int4_tbl as t1\n  left join (int4_tbl as t2\n             right join int4_tbl as t3 on null\n             left join (int4_tbl as t4\n                        right join int8_tbl as t5 on null)\n               on t2.f1 = t4.f1\n             left join ((select null as f1 from int4_tbl as t6) as ss1\n                        inner join int8_tbl as t7 on null)\n               on t5.q1 = t7.q2)\n    on false;\n\n-- variant with Var rather than PHV coming from t6\n--Testcase 595:\nexplain (costs off)\nselect ss1.f1\nfrom int4_tbl as t1\n  left join (int4_tbl as t2\n             right join int4_tbl as t3 on null\n             left join (int4_tbl as t4\n                        right join int8_tbl as t5 on null)\n               on t2.f1 = t4.f1\n             left join ((select f1 from int4_tbl as t6) as ss1\n                        inner join int8_tbl as t7 on null)\n               on t5.q1 = t7.q2)\n    on false;\n\n-- per further discussion of bug #17781\n--Testcase 596:\nexplain (costs off)\nselect ss1.x\nfrom (select f1/2 as x from int4_tbl i4 left join a3 on a3.id = i4.f1) ss1\n     right join int8_tbl i8 on true\nwhere current_user is not null;  -- this is to add a Result node\n\n-- and further discussion of bug #17781\n--Testcase 597:\nexplain (costs off)\nselect *\nfrom int8_tbl t1\n  left join (int8_tbl t2 left join onek t3 on t2.q1 > t3.unique1)\n    on t1.q2 = t2.q2\n  left join onek t4\n    on t2.q2 < t3.unique2;\n\n-- More tests of correct placement of pseudoconstant quals\n\n-- simple constant-false condition\n--Testcase 598:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n  (int8_tbl t2 inner join int8_tbl t3 on false\n   left join int8_tbl t4 on t2.q2 = t4.q2)\non t1.q1 = t2.q1;\n\n-- deduce constant-false from an EquivalenceClass\n--Testcase 599:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n  (int8_tbl t2 inner join int8_tbl t3 on (t2.q1-t3.q2) = 0 and (t2.q1-t3.q2) = 1\n   left join int8_tbl t4 on t2.q2 = t4.q2)\non t1.q1 = t2.q1;\n\n-- pseudoconstant based on an outer-level Param\n--Testcase 600:\nexplain (costs off)\nselect exists(\n  select * from int8_tbl t1 left join\n    (int8_tbl t2 inner join int8_tbl t3 on x0.f1 = 1\n     left join int8_tbl t4 on t2.q2 = t4.q2)\n  on t1.q1 = t2.q1\n) from int4_tbl x0;\n\n\n-- check that join removal works for a left join when joining a subquery\n-- that is guaranteed to be unique by its GROUP BY clause\n--Testcase 241:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 242:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- join removal is not possible when the GROUP BY contains a column that is\n-- not in the join condition.  (Note: as of 9.6, we notice that b3.id is a\n-- primary key and so drop b3.c_id from the GROUP BY of the resulting plan;\n-- but this happens too late for join removal in the outer plan level.)\n--Testcase 243:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 244:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id;\n\n-- join removal is not possible here\n--Testcase 601:\nexplain (costs off)\nselect 1 from a3 t1\n  left join (a3 t2 left join a3 t3 on t2.id = 1) on t2.id = 1;\n\n-- check join removal works when uniqueness of the join condition is enforced\n-- by a UNION\n--Testcase 245:\nexplain (costs off)\nselect d3.* from d3 left join (select id from a3 union select id from b3) s\n  on d3.a = s.id;\n\n-- check join removal with a cross-type comparison operator\n--Testcase 246:\nexplain (costs off)\nselect i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4\n  on i8.q1 = i4.f1;\n\n-- check join removal with lateral references\n--Testcase 247:\nexplain (costs off)\nselect 1 from (select a3.id FROM a3 left join b3 on a3.b_id = b3.id) q,\n\t\t\t  lateral generate_series(1, q.id) gs(i) where q.id = gs.i;\n\n-- check join removal within RHS of an outer join\n--Testcase 602:\nexplain (costs off)\nselect c3.id, ss.a from c3\n  left join (select d3.a from onerow, d3 left join b3 on d3.a = b3.id) ss\n  on c3.id = ss.a;\n\n--Testcase 603:\nCREATE TEMP TABLE parted_b (id int PRIMARY KEY) partition by range(id);\n--Testcase 604:\nCREATE TEMP TABLE parted_b1 partition of parted_b for values from (0) to (10);\n\n-- test join removals on a partitioned table\n--Testcase 605:\nexplain (costs off)\nselect a3.* from a3 left join parted_b pb on a3.b_id = pb.id;\n\nrollback;\n\n--Testcase 448:\ncreate foreign table parent (k int options (key 'true'), pd int) server sqlite_svr;\n--Testcase 449:\ncreate foreign table child (k int options (key 'true'), cd int) server sqlite_svr;\n--Testcase 248:\ninsert into parent values (1, 10), (2, 20), (3, 30);\n--Testcase 249:\ninsert into child values (1, 100), (4, 400);\n\n-- this case is optimizable\n--Testcase 250:\nselect p.* from parent p left join child c on (p.k = c.k);\n--Testcase 251:\nexplain (costs off)\n  select p.* from parent p left join child c on (p.k = c.k);\n\n-- this case is not\n--Testcase 252:\nselect p.*, linked from parent p\n  left join (select c.*, true as linked from child c) as ss\n  on (p.k = ss.k);\n--Testcase 253:\nexplain (costs off)\n  select p.*, linked from parent p\n    left join (select c.*, true as linked from child c) as ss\n    on (p.k = ss.k);\n\n-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling\n--Testcase 254:\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n--Testcase 255:\nexplain (costs off)\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n\n--Testcase 256:\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n--Testcase 257:\nexplain (costs off)\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n\n-- bug 5255: this is not optimizable by join removal\nbegin;\n\n--Testcase 450:\nCREATE FOREIGN TABLE a4 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 451:\nCREATE FOREIGN TABLE b4 (id int OPTIONS (key 'true'), a_id int) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO a4 VALUES (0), (1);\n--Testcase 259:\nINSERT INTO b4 VALUES (0, 0), (1, NULL);\n\n--Testcase 260:\nSELECT * FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n--Testcase 261:\nSELECT b4.* FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n\nrollback;\n\n-- another join removal bug: this is not optimizable, either\nbegin;\n\n--Testcase 452:\ncreate foreign table innertab (id int8 options (key 'true'), dat1 int8) server sqlite_svr;\n--Testcase 262:\ninsert into innertab values(123, 42);\n\n--Testcase 263:\nSELECT * FROM\n    (SELECT 1 AS x) ss1\n  LEFT JOIN\n    (SELECT q1, q2, COALESCE(dat1, q1) AS y\n     FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2\n  ON true;\n\n-- join removal bug #17769: can't remove if there's a pushed-down reference\n--Testcase 606:\nEXPLAIN (COSTS OFF)\nSELECT q2 FROM\n  (SELECT *\n   FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss\n WHERE COALESCE(dat1, 0) = q1;\n\n-- join removal bug #17773: otherwise-removable PHV appears in a qual condition\n--Testcase 607:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q2 FROM\n  (SELECT q2, 'constant'::text AS x\n   FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss\n  RIGHT JOIN int4_tbl ON NULL\n WHERE x >= x;\n\n-- join removal bug #17786: check that OR conditions are cleaned up\n--Testcase 608:\nEXPLAIN (COSTS OFF)\nSELECT f1, x\nFROM int4_tbl\n     JOIN ((SELECT 42 AS x FROM int8_tbl LEFT JOIN innertab ON q1 = id) AS ss1\n           RIGHT JOIN tenk1 ON NULL)\n        ON tenk1.unique1 = ss1.x OR tenk1.unique2 = ss1.x;\n\nrollback;\n\n-- another join removal bug: we must clean up correctly when removing a PHV\nbegin;\n\n--Testcase 453:\ncreate foreign table uniquetbl (f1 text) server sqlite_svr;\n\n--Testcase 264:\nexplain (costs off)\nselect t1.* from\n  uniquetbl as t1\n  left join (select *, '***'::text as d1 from uniquetbl) t2\n  on t1.f1 = t2.f1\n  left join uniquetbl t3\n  on t2.d1 = t3.f1;\n\n--Testcase 265:\nexplain (costs off)\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\n--Testcase 266:\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\nrollback;\n\n-- another join removal bug: we must clean up EquivalenceClasses too\nbegin;\n\n--Testcase 609:\ncreate temp table t (a int unique);\n--Testcase 610:\ninsert into t values (1);\n\n--Testcase 611:\nexplain (costs off)\nselect 1\nfrom t t1\n  left join (select 2 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n    on true\nwhere t1.a = s.c;\n\n--Testcase 612:\nselect 1\nfrom t t1\n  left join (select 2 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n    on true\nwhere t1.a = s.c;\n\nrollback;\n\n-- test cases where we can remove a join, but not a PHV computed at it\nbegin;\n\n--Testcase 613:\ncreate temp table t (a int unique, b int);\n--Testcase 614:\ninsert into t values (1,1), (2,2);\n\n--Testcase 615:\nexplain (costs off)\nselect 1\nfrom t t1\n  left join (select t2.a, 1 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\n--Testcase 616:\nexplain (costs off)\nselect t1.a, s.*\nfrom t t1\n  left join lateral (select t2.a, coalesce(t1.a, 1) as c\n                     from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\n--Testcase 617:\nselect t1.a, s.*\nfrom t t1\n  left join lateral (select t2.a, coalesce(t1.a, 1) as c\n                     from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\nrollback;\n\n-- test case to expose miscomputation of required relid set for a PHV\n--Testcase 522:\nexplain (verbose, costs off)\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n--Testcase 523:\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n-- -- and check a related issue where we miscompute required relids for\n-- -- a PHV that's been translated to a child rel\n-- create temp table parttbl (a integer primary key) partition by range (a);\n-- create temp table parttbl1 partition of parttbl for values from (1) to (100);\n-- insert into parttbl values (11), (12);\n-- explain (costs off)\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n\n-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs\n\n--Testcase 267:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error\n--Testcase 268:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error\n--Testcase 269:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok\n\n--\n-- Test hints given on incorrect column references are useful\n--\n\n--Testcase 270:\nselect t1.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t1\" suggestion\n--Testcase 271:\nselect t2.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t2\" suggestion\n--Testcase 272:\nselect uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once\n--Testcase 618:\nselect ctid from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, need qualification\n\n--\n-- Take care to reference the correct RTE\n--\n\n--Testcase 454:\nselect atts.relid::regclass, s.* from pg_stats s join\n    pg_attribute a on s.attname = a.attname and s.tablename =\n    a.attrelid::regclass::text join (select unnest(indkey) attnum,\n    indexrelid from pg_index i) atts on atts.attnum = a.attnum where\n    schemaname != 'pg_catalog';\n\n-- Test bug in rangetable flattening\n--Testcase 619:\nexplain (verbose, costs off)\nselect 1 from\n  (select * from int8_tbl where q1 <> (select 42) offset 0) ss\nwhere false;\n\n--\n-- Test LATERAL\n--\n\n--Testcase 273:\nselect unique2, x.*\nfrom tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 274:\nexplain (costs off)\n  select unique2, x.*\n  from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 275:\nselect unique2, x.*\nfrom int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 276:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 277:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 278:\nselect unique2, x.*\nfrom int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n--Testcase 279:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n\n-- check scoping of lateral versus parent references\n-- the first of these should return int8_tbl.q2, the second int8_tbl.q1\n--Testcase 280:\nselect *, (select r from (select q1 as q2) x, (select q2 as r) y) from int8_tbl;\n--Testcase 281:\nselect *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl;\n\n-- lateral with function in FROM\n--Testcase 282:\nselect count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 283:\nexplain (costs off)\n  select count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 284:\nexplain (costs off)\n  select count(*) from tenk1 a cross join lateral generate_series(1,two) g;\n-- don't need the explicit LATERAL keyword for functions\n--Testcase 285:\nexplain (costs off)\n  select count(*) from tenk1 a, generate_series(1,two) g;\n\n-- lateral with UNION ALL subselect\n--Testcase 286:\nexplain (costs off)\n  select * from generate_series(100,200) g,\n    lateral (select * from int8_tbl a where g = q1 union all\n             select * from int8_tbl b where g = q2) ss;\n--Testcase 287:\nselect * from generate_series(100,200) g,\n  lateral (select * from int8_tbl a where g = q1 union all\n           select * from int8_tbl b where g = q2) ss;\n\n-- lateral with VALUES\n--Testcase 288:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n--Testcase 289:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral with VALUES, no flattening possible\n--Testcase 290:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n--Testcase 291:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral injecting a strange outer join condition\n--Testcase 292:\nexplain (costs off)\n  select * from int8_tbl a,\n    int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n      on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n--Testcase 293:\nselect * from int8_tbl a,\n  int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n    on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n\n-- lateral reference to a join alias variable\n--Testcase 294:\nselect * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (select x) ss2(y);\n--Testcase 295:\nselect * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (values(x)) ss2(y);\n--Testcase 296:\nselect * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j,\n  lateral (select x) ss2(y);\n\n-- lateral references requiring pullup\n--Testcase 297:\nselect * from (values(1)) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 298:\nselect * from (select f1/1000000000 from int4_tbl) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 299:\nselect * from (values(1)) x(lb),\n  lateral (values(lb)) y(lbcopy);\n--Testcase 300:\nselect * from (values(1)) x(lb),\n  lateral (select lb from int4_tbl) y(lbcopy);\n--Testcase 301:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2);\n--Testcase 302:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 303:\nselect x.* from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 304:\nselect v.* from\n  (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 305:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 307:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy);\n\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 455:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 456:\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 457:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 458:\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n\n-- lateral can result in join conditions appearing below their\n-- real semantic level\n--Testcase 308:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 309:\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 310:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 311:\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 312:\nexplain (verbose, costs off)\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n--Testcase 313:\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n\n-- lateral reference in a PlaceHolderVar evaluated at join level\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 459:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n--Testcase 460:\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n\n-- case requiring nested PlaceHolderVars\n--Testcase 461:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl c left join (\n    int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select ss2.y offset 0) ss3;\n\n-- case that breaks the old ph_may_need optimization\n--Testcase 462:\nexplain (verbose, costs off)\nselect c.*,a.*,ss1.q1,ss2.q1,ss3.* from\n  int8_tbl c left join (\n    int8_tbl a left join\n      (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2\n       where q1 < f1) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select * from int4_tbl i where ss2.y > f1) ss3;\n\n-- check processing of postponed quals (bug #9041)\n--Testcase 463:\ndelete from sub_tbl;\n--Testcase 464:\ninsert into sub_tbl values (1, 2, 3, 4, 5);\n--Testcase 465:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x  from sub_tbl offset 0) x cross join (select key3 as y from sub_tbl offset 0) y\n  left join lateral (\n    select * from (select key5 as z from sub_tbl offset 0) z where z.z = x.x\n  ) zz on zz.z = y.y;\n\n-- a new postponed-quals issue (bug #17768)\n--Testcase 620:\nexplain (costs off)\nselect * from int4_tbl t1,\n  lateral (select * from int4_tbl t2 inner join int4_tbl t3 on t1.f1 = 1\n           inner join (int4_tbl t4 left join int4_tbl t5 on true) on true) ss;\n\n-- check dummy rels with lateral references (bug #15694)\n--Testcase 466:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl where false) ss on true;\n--Testcase 467:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true;\n\n-- check handling of nested appendrels inside LATERAL\n--Testcase 468:\nselect * from\n  ((select key3 as v from sub_tbl) union all (select key5 as v from sub_tbl)) as q1\n  cross join lateral\n  ((select * from\n      ((select key6 as v from sub_tbl) union all (select value1 as v from sub_tbl)) as q3)\n   union all\n   (select q1.v)\n  ) as q2;\n\n-- check the number of columns specified\n--Testcase 539:\nSELECT * FROM (int8_tbl i cross join int4_tbl j) ss(a,b,c,d);\n\n-- check we don't try to do a unique-ified semijoin with LATERAL\n--Testcase 314:\nexplain (verbose, costs off)\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n--Testcase 315:\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n\n-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue,\n-- but we can make the test case much more compact with LATERAL)\n--Testcase 316:\nexplain (verbose, costs off)\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n--Testcase 317:\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where q1 = any (select q2 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n-- test some error cases where LATERAL should have been used but wasn't\n--Testcase 318:\nselect f1,g from int4_tbl a, (select f1 as g) ss;\n--Testcase 319:\nselect f1,g from int4_tbl a, (select a.f1 as g) ss;\n--Testcase 320:\nselect f1,g from int4_tbl a cross join (select f1 as g) ss;\n--Testcase 321:\nselect f1,g from int4_tbl a cross join (select a.f1 as g) ss;\n-- SQL:2008 says the left table is in scope but illegal to access here\n--Testcase 322:\nselect f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true;\n--Testcase 323:\nselect f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true;\n-- check we complain about ambiguous table references\n--Testcase 324:\nselect * from\n  int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss);\n-- LATERAL can be used to put an aggregate into the FROM clause of its query\n--Testcase 325:\nselect 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss;\n\n-- check behavior of LATERAL in UPDATE/DELETE\n\n--Testcase 469:\ncreate temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl;\n\n-- error, can't do this:\n--Testcase 326:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss;\n--Testcase 327:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss;\n-- can't do it even with LATERAL:\n--Testcase 328:\nupdate xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss;\n-- we might in future allow something like this, but for now it's an error:\n--Testcase 329:\nupdate xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- also errors:\n--Testcase 330:\ndelete from xx1 using (select * from int4_tbl where f1 = x1) ss;\n--Testcase 331:\ndelete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss;\n--Testcase 332:\ndelete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- Skip this test, sqlite fdw does not support to create partition table\n-- test LATERAL reference propagation down a multi-level inheritance hierarchy\n-- produced for a multi-level partitioned table hierarchy.\n--\n--create table join_pt1 (a int, b int, c varchar) partition by range(a);\n--create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b);\n--create table join_pt1p2 partition of join_pt1 for values from (100) to (200);\n--create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100);\n--insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y');\n--create table join_ut1 (a int, b int, c varchar);\n--insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z');\n--explain (verbose, costs off)\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n\n--drop table join_pt1;\n--drop table join_ut1;\n\n--\n-- test estimation behavior with multi-column foreign key and constant qual\n--\n\nbegin;\n\n--Testcase 524:\ncreate table fkest (x integer, x10 integer, x10b integer, x100 integer);\n--Testcase 525:\ninsert into fkest select x, x/10, x/10, x/100 from generate_series(1,1000) x;\n--Testcase 526:\ncreate unique index on fkest(x, x10, x100);\nanalyze fkest;\n\n--Testcase 527:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\n--Testcase 528:\nalter table fkest add constraint fk\n  foreign key (x, x10b, x100) references fkest (x, x10, x100);\n\n--Testcase 529:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\nrollback;\n\n--\n-- test that foreign key join estimation performs sanely for outer joins\n--\n\nbegin;\n\n--Testcase 470:\ncreate foreign table fkest (a int options (key 'true'), b int options (key 'true'), c int) server sqlite_svr;\n--Testcase 471:\ncreate foreign table fkest1 (a int options (key 'true'), b int options (key 'true')) server sqlite_svr;\n\n--Testcase 333:\ninsert into fkest select x/10, x%10, x from generate_series(1,1000) x;\n--Testcase 334:\ninsert into fkest1 select x/10, x%10 from generate_series(1,1000) x;\n\n--alter table fkest1\n--  add constraint fkest1_a_b_fkey foreign key (a,b) references fkest;\n\n--analyze fkest;\n--analyze fkest1;\n\n--Testcase 335:\nexplain (costs off)\nselect *\nfrom fkest f\n  left join fkest1 f1 on f.a = f1.a and f.b = f1.b\n  left join fkest1 f2 on f.a = f2.a and f.b = f2.b\n  left join fkest1 f3 on f.a = f3.a and f.b = f3.b\nwhere f.c = 1;\n\nrollback;\n\n--\n-- test planner's ability to mark joins as unique\n--\n\n--Testcase 472:\ncreate foreign table j11 (id int options (key 'true')) server sqlite_svr;\n--Testcase 473:\ncreate foreign table j21 (id int options (key 'true')) server sqlite_svr;\n--Testcase 474:\ncreate foreign table j31 (id int) server sqlite_svr;\n\n--Testcase 336:\ninsert into j11 values(1),(2),(3);\n--Testcase 337:\ninsert into j21 values(1),(2),(3);\n--Testcase 338:\ninsert into j31 values(1),(1);\n\n-- ensure join is properly marked as unique\n--Testcase 339:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id = j21.id;\n\n-- ensure join is not unique when not an equi-join\n--Testcase 340:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id > j21.id;\n\n-- ensure non-unique rel is not chosen as inner\n--Testcase 341:\nexplain (verbose, costs off)\nselect * from j11 inner join j31 on j11.id = j31.id;\n\n-- ensure left join is marked as unique\n--Testcase 342:\nexplain (verbose, costs off)\nselect * from j11 left join j21 on j11.id = j21.id;\n\n-- ensure right join is marked as unique\n--Testcase 343:\nexplain (verbose, costs off)\nselect * from j11 right join j21 on j11.id = j21.id;\n\n-- ensure full join is marked as unique\n--Testcase 344:\nexplain (verbose, costs off)\nselect * from j11 full join j21 on j11.id = j21.id;\n\n-- a clauseless (cross) join can't be unique\n--Testcase 345:\nexplain (verbose, costs off)\nselect * from j11 cross join j21;\n\n-- ensure a natural join is marked as unique\n--Testcase 346:\nexplain (verbose, costs off)\nselect * from j11 natural join j21;\n\n-- ensure a distinct clause allows the inner to become unique\n--Testcase 347:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select distinct id from j31) j31 on j11.id = j31.id;\n\n-- ensure group by clause allows the inner to become unique\n--Testcase 348:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select id from j31 group by id) j31 on j11.id = j31.id;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- test more complex permutations of unique joins\n\n--Testcase 475:\ncreate foreign table j12 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 476:\ncreate foreign table j22 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 477:\ncreate foreign table j32 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n\n--Testcase 349:\ninsert into j12 values(1,1),(1,2);\n--Testcase 350:\ninsert into j22 values(1,1);\n--Testcase 351:\ninsert into j32 values(1,1);\n\n--analyze j1;\n--analyze j2;\n--analyze j3;\n\n-- ensure there's no unique join when not all columns which are part of the\n-- unique index are seen in the join clause\n--Testcase 352:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1;\n\n-- ensure proper unique detection with multiple join quals\n--Testcase 353:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2;\n\n-- ensure we don't detect the join to be unique when quals are not part of the\n-- join condition\n--Testcase 354:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- as above, but for left joins.\n--Testcase 355:\nexplain (verbose, costs off)\nselect * from j12\nleft join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- create unique index command does not work with foreign table\n-- Add these normal tables for it.\n--Testcase 624:\ncreate table j1 (id1 int, id2 int, primary key(id1,id2));\n--Testcase 625:\ncreate table j2 (id1 int, id2 int, primary key(id1,id2));\n\n--Testcase 626:\ninsert into j1 values(1,1),(1,2);\n--Testcase 627:\ninsert into j2 values(1,1);\n\nanalyze j1;\nanalyze j2;\n\n--Testcase 621:\ncreate unique index j1_id2_idx on j1(id2) where id2 is not null;\n\n-- ensure we don't use a partial unique index as unique proofs\n--Testcase 622:\nexplain (verbose, costs off)\nselect * from j1\ninner join j2 on j1.id2 = j2.id2;\n\n--Testcase 623:\ndrop index j1_id2_idx;\n\n--Testcase 628:\ndrop table j1;\n--Testcase 629:\ndrop table j2;\n\n-- validate logic in merge joins which skips mark and restore.\n-- it should only do this if all quals which were used to detect the unique\n-- are present as join quals, and not plain quals.\n--Testcase 530:\nset enable_nestloop to 0;\n--Testcase 531:\nset enable_hashjoin to 0;\n--Testcase 532:\nset enable_sort to 0;\n-- skip, cannot create index on foreign table\n-- create indexes that will be preferred over the PKs to perform the join\n--create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;\n--create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;\n-- need an additional row in j2, if we want j2_id1_idx to be preferred\n--Testcase 478:\ninsert into j22 values(1,2);\n--analyze j2;\n\n--Testcase 356:\nexplain (costs off) select * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n--Testcase 357:\nselect * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n-- Exercise array keys mark/restore B-Tree code\n--Testcase 479:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n--Testcase 480:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n-- Exercise array keys \"find extreme element\" B-Tree code\n--Testcase 481:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 482:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 533:\nreset enable_nestloop;\n--Testcase 534:\nreset enable_hashjoin;\n--Testcase 535:\nreset enable_sort;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- check that semijoin inner is not seen as unique for a portion of the outerrel\n--Testcase 358:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from tenk1 t3\n              where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n-- ... unless it actually is unique\n--Testcase 484:\ncreate table j3 as select unique1, tenthous from onek;\nvacuum analyze j3;\n--Testcase 485:\ncreate unique index on j3(unique1, tenthous);\n\n--Testcase 359:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from j3\n              where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n--Testcase 486:\ndrop table j3;\n\n--Testcase 647:\nDELETE FROM INT4_TBL;\n--Testcase 648:\nDELETE FROM INT8_TBL;\n--Testcase 649:\nDELETE FROM FLOAT8_TBL;\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 487:\nDROP SERVER sqlite_svr;\n--Testcase 488:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/limit.sql",
    "content": "--\n-- LIMIT\n-- Check the LIMIT/OFFSET feature of SELECT\n--\n--Testcase 27:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 28:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 29:\nCREATE FOREIGN TABLE onek(\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 30:\nCREATE FOREIGN TABLE int8_tbl(q1 int8 OPTIONS (key 'true'), q2 int8) SERVER sqlite_svr;\n--Testcase 105:\nINSERT INTO int8_tbl VALUES('  123   ','  456');\n--Testcase 106:\nINSERT INTO int8_tbl VALUES('123   ','4567890123456789');\n--Testcase 107:\nINSERT INTO int8_tbl VALUES('4567890123456789','123');\n--Testcase 108:\nINSERT INTO int8_tbl VALUES(+4567890123456789,'4567890123456789');\n--Testcase 109:\nINSERT INTO int8_tbl VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 31:\nCREATE FOREIGN TABLE INT8_TMP(\n        q1 int8,\n        q2 int8,\n        q3 int4,\n        q4 int2,\n        q5 text,\n        id int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 32:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 88:\nCREATE TABLE parent_table (\n\tunique1\t\tint4 PRIMARY KEY,\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\n--Testcase 89:\nCREATE FOREIGN table inherited_table ()\nINHERITS (parent_table)\nSERVER sqlite_svr options (table 'tenk1');\n\n--Testcase 1:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tORDER BY unique1 LIMIT 2;\n--Testcase 2:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 3:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60 AND unique1 < 63\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 4:\nSELECT ''::text AS three, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 100\n\t\tORDER BY unique1 LIMIT 3 OFFSET 20;\n--Testcase 5:\nSELECT ''::text AS zero, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 8 OFFSET 99;\n--Testcase 6:\nSELECT ''::text AS eleven, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 20 OFFSET 39;\n--Testcase 7:\nSELECT ''::text AS ten, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990;\n--Testcase 8:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990 LIMIT 5;\n--Testcase 9:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 LIMIT 5 OFFSET 900;\n\n-- Test null limit and offset.  The planner would discard a simple null\n-- constant, so to ensure executor is exercised, do this:\n--Testcase 10:\nselect * from int8_tbl limit (case when random() < 0.5 then null::bigint end);\n--Testcase 11:\nselect * from int8_tbl offset (case when random() < 0.5 then null::bigint end);\n\n-- Test assorted cases involving backwards fetch from a LIMIT plan node\nbegin;\n\ndeclare c1 scroll cursor for select * from int8_tbl order by q1 limit 10;\n--Testcase 12:\nfetch all in c1;\n--Testcase 13:\nfetch 1 in c1;\n--Testcase 14:\nfetch backward 1 in c1;\n--Testcase 33:\nfetch backward all in c1;\n--Testcase 34:\nfetch backward 1 in c1;\n--Testcase 35:\nfetch all in c1;\n\ndeclare c2 scroll cursor for select * from int8_tbl limit 3;\n--Testcase 36:\nfetch all in c2;\n--Testcase 37:\nfetch 1 in c2;\n--Testcase 38:\nfetch backward 1 in c2;\n--Testcase 39:\nfetch backward all in c2;\n--Testcase 40:\nfetch backward 1 in c2;\n--Testcase 41:\nfetch all in c2;\n\ndeclare c3 scroll cursor for select * from int8_tbl offset 3;\n--Testcase 42:\nfetch all in c3;\n--Testcase 43:\nfetch 1 in c3;\n--Testcase 44:\nfetch backward 1 in c3;\n--Testcase 45:\nfetch backward all in c3;\n--Testcase 46:\nfetch backward 1 in c3;\n--Testcase 47:\nfetch all in c3;\n\ndeclare c4 scroll cursor for select * from int8_tbl offset 10;\n--Testcase 48:\nfetch all in c4;\n--Testcase 49:\nfetch 1 in c4;\n--Testcase 50:\nfetch backward 1 in c4;\n--Testcase 51:\nfetch backward all in c4;\n--Testcase 52:\nfetch backward 1 in c4;\n--Testcase 53:\nfetch all in c4;\n\ndeclare c5 scroll cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;\n--Testcase 54:\nfetch all in c5;\n--Testcase 55:\nfetch 1 in c5;\n--Testcase 56:\nfetch backward 1 in c5;\n--Testcase 57:\nfetch backward 1 in c5;\n--Testcase 58:\nfetch all in c5;\n--Testcase 59:\nfetch backward all in c5;\n--Testcase 60:\nfetch all in c5;\n--Testcase 61:\nfetch backward all in c5;\n\nrollback;\n\n-- Stress test for variable LIMIT in conjunction with bounded-heap sorting\n--Testcase 62:\nDELETE FROM INT8_TMP;\n--Testcase 63:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series(1,10) q1;\n\n--Testcase 64:\nSELECT\n  (SELECT s.q1 \n     FROM (VALUES (1)) AS x,\n          (SELECT q1 FROM INT8_TMP as n \n             ORDER BY q1 LIMIT 1 OFFSET s.q1-1) AS y) AS z\n  FROM INT8_TMP AS s;\n\n--\n-- Test behavior of volatile and set-returning functions in conjunction\n-- with ORDER BY and LIMIT.\n--\n\n--Testcase 65:\ncreate temp sequence testseq;\n\n--Testcase 15:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 16:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 90:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 91:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 17:\nselect currval('testseq');\n\n--Testcase 92:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n--Testcase 93:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n\n--Testcase 94:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 95:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 96:\nselect currval('testseq');\n\n--Testcase 18:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 19:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 97:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 98:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 20:\nselect currval('testseq');\n\n-- test for limit and offset when querying table and foreign table inherited\n--Testcase 99:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n--Testcase 100:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n-- when querying regular tables with inherited tables, only limit is pushed-down when no offset is specified\n--Testcase 101:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 102:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 103:\nselect currval('testseq');\n\n--Testcase 21:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 22:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 23:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n--Testcase 24:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n-- use of random() is to keep planner from folding the expressions together\n--Testcase 66:\nDELETE FROM INT8_TMP;\n--Testcase 67:\nINSERT INTO INT8_TMP VALUES (generate_series(0,2), generate_series((random()*.1)::int,2));\n--Testcase 68:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp;\n\n--Testcase 69:\nselect q1, q2 from int8_tmp;\n\n--Testcase 70:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp order by q2 desc;\n\n--Testcase 71:\nselect q1, q2 from int8_tmp order by q2 desc;\n\n-- test for failure to set all aggregates' aggtranstype\n--Testcase 25:\nexplain (verbose, costs off)\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--Testcase 26:\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--\n-- FETCH FIRST\n-- Check the WITH TIES clause\n--\n\n--Testcase 72:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW WITH TIES;\n\n--Testcase 73:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST ROWS WITH TIES;\n\n--Testcase 74:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES;\n\n--Testcase 75:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW ONLY;\n\n-- SKIP LOCKED and WITH TIES are incompatible\n--Testcase 104:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;\n\n-- should fail\n--Testcase 76:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tFETCH FIRST 2 ROW WITH TIES;\n\n-- test ruleutils\n--Testcase 77:\nCREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;\n--Testcase 78:\n\\d+ limit_thousand_v_1\n--Testcase 79:\nCREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;\n--Testcase 80:\n\\d+ limit_thousand_v_2\n--Testcase 81:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS WITH TIES;\t\t-- fails\n--Testcase 82:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;\n--Testcase 83:\n\\d+ limit_thousand_v_3\n--Testcase 84:\nCREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS ONLY;\n--Testcase 85:\n\\d+ limit_thousand_v_4\n-- leave these views\n\n--Testcase 110:\nDELETE FROM int8_tbl;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name\n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 86:\nDROP SERVER sqlite_svr;\n--Testcase 87:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/prepare.sql",
    "content": "-- Regression tests for prepareable statements. We query the content\n-- of the pg_prepared_statements view as prepared statements are\n-- created and removed.\n--Testcase 26:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 27:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 28:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 29:\nCREATE FOREIGN TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n) SERVER sqlite_svr;\n\n--Testcase 30:\ncreate foreign table road_tmp (a int, b int, id int options (key 'true')) server sqlite_svr;\n--Testcase 31:\ninsert into road_tmp values (1, 2);\n\n--Testcase 1:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n--Testcase 2:\nPREPARE q1 AS SELECT a FROM road_tmp;\n--Testcase 3:\nEXECUTE q1;\n\n--Testcase 4:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- should fail\n--Testcase 5:\nPREPARE q1 AS SELECT b FROM road_tmp;\n\n-- should succeed\nDEALLOCATE q1;\n--Testcase 6:\nPREPARE q1 AS SELECT b FROM road_tmp;\n--Testcase 7:\nEXECUTE q1;\n\n--Testcase 8:\nPREPARE q2 AS SELECT b FROM road_tmp;\n--Testcase 9:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- sql92 syntax\nDEALLOCATE PREPARE q1;\n\n--Testcase 10:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\nDEALLOCATE PREPARE q2;\n-- the view should return the empty set again\n--Testcase 11:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- parameterized queries\n--Testcase 12:\nPREPARE q2(text) AS\n\tSELECT datname, datistemplate, datallowconn\n\tFROM pg_database WHERE datname = $1;\n\n--Testcase 13:\nEXECUTE q2('postgres');\n\n--Testcase 14:\nPREPARE q3(text, int, float, boolean, smallint) AS\n\tSELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR\n\tten = $3::bigint OR true = $4 OR odd = $5::int)\n\tORDER BY unique1;\n\n--Testcase 15:\nEXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 4::bigint);\n\n-- too few params\n--Testcase 16:\nEXECUTE q3('bool');\n\n-- too many params\n--Testcase 17:\nEXECUTE q3('bytea', 5::smallint, 10.5::float, false, 4::bigint, true);\n\n-- wrong param types\n--Testcase 18:\nEXECUTE q3(5::smallint, 10.5::float, false, 4::bigint, 'bytea');\n\n-- invalid type\n--Testcase 19:\nPREPARE q4(nonexistenttype) AS SELECT * FROM road WHERE name = $1;\n\n-- create table as execute\n--Testcase 20:\nPREPARE q5(int, text) AS\n\tSELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2\n\tORDER BY unique1;\n--Testcase 32:\nCREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');\n--Testcase 21:\nSELECT * FROM q5_prep_results;\n--Testcase 33:\nCREATE TEMPORARY TABLE q5_prep_nodata AS EXECUTE q5(200, 'DTAAAA')\n    WITH NO DATA;\n--Testcase 34:\nSELECT * FROM q5_prep_nodata;\n\n-- unknown or unspecified parameter types: should succeed\n--Testcase 22:\nPREPARE q6 AS\n    SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;\n--Testcase 23:\nPREPARE q7(unknown) AS\n    SELECT * FROM road WHERE thepath = $1;\n\n-- DML statements\nPREPARE q8 AS\n    UPDATE tenk1 SET stringu1 = $2 WHERE unique1 = $1;\n--Testcase 24:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements\n    ORDER BY name;\n\n-- test DEALLOCATE ALL;\nDEALLOCATE ALL;\n--Testcase 25:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n--Testcase 35:\nDROP FOREIGN TABLE tenk1;\n--Testcase 36:\nDROP FOREIGN TABLE road;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/select.sql",
    "content": "--\n-- SELECT\n--\n--Testcase 43:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 44:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 45:\nCREATE FOREIGN TABLE onek (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 46:\nCREATE FOREIGN TABLE onek2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 47:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 73:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 74:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 75:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 76:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 77:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 48:\nCREATE FOREIGN TABLE person (\n  name    text,\n  age     int4,\n  location  point\n) SERVER sqlite_svr;\n\n-- btree index\n-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 1:\nSELECT * FROM onek\n   WHERE onek.unique1 < 10\n   ORDER BY onek.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 2:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 3:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY stringu1 using <;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1d -2 +0nr -1\n--\n--Testcase 4:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using <, unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1dr -2 +0n -1\n--\n--Testcase 5:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using >, unique1 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0nr -1 +1d -2\n--\n--Testcase 6:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >, string4 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0n -1 +1dr -2\n--\n--Testcase 7:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using <, string4 using >;\n\n--\n-- test partial btree indexes\n--\n-- As of 7.2, planner probably won't pick an indexscan without stats,\n-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan\n-- followed by sort, because that could hide index ordering problems.\n--\n--ANALYZE onek2;\n\nSET enable_seqscan TO off;\nSET enable_bitmapscan TO off;\nSET enable_sort TO off;\n\n--\n-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 8:\nSELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10 order by onek2.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 9:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n    WHERE onek2.unique1 < 20\n    ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 10:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n   WHERE onek2.unique1 > 980 ORDER BY onek2.unique1;\n\nRESET enable_seqscan;\nRESET enable_bitmapscan;\nRESET enable_sort;\n\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data\n--\n-- SELECT name, age FROM person*; ??? check if different\n--Testcase 12:\nSELECT p.name, p.age FROM person* p;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |\n-- sort +1nr -2\n--\n--Testcase 13:\nSELECT p.name, p.age FROM person* p ORDER BY age using >, name;\n\n--\n-- Test some cases involving whole-row Var referencing a subquery\n--\n--Testcase 49:\nselect foo from (select 1 offset 0) as foo;\n--Testcase 50:\nselect foo from (select null offset 0) as foo;\n--Testcase 51:\nselect foo from (select 'xyzzy',1,null offset 0) as foo;\n\n--\n-- Test VALUES lists\n--\n--Testcase 14:\nselect * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)\n    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;\n\n-- a more complex case\n-- looks like we're coding lisp :-)\n--Testcase 15:\nselect * from onek,\n  (values ((select i from\n    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)\n    order by i asc limit 1))) bar (i)\n  where onek.unique1 = bar.i;\n\n-- try VALUES in a subquery\n--Testcase 16:\nselect * from onek\n    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))\n    order by unique1;\n\n-- VALUES is also legal as a standalone query or a set-operation member\n--Testcase 17:\nVALUES (1,2), (3,4+4), (7,77.7);\n\n--Testcase 52:\nVALUES (1,2), (3,4+4), (7,77.7)\nUNION ALL\nSELECT 2+2, 57\nUNION ALL\nTABLE int8_tbl;\n\n-- corner case: VALUES with no columns\n-- CREATE TEMP TABLE nocols();\n-- INSERT INTO nocols DEFAULT VALUES;\n-- SELECT * FROM nocols n, LATERAL (VALUES(n.*)) v;\n\n--\n-- Test ORDER BY options\n--\n\n--Testcase 53:\nCREATE FOREIGN TABLE foo (f1 int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 18:\nINSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);\n\n--Testcase 19:\nSELECT * FROM foo ORDER BY f1;\n--Testcase 20:\nSELECT * FROM foo ORDER BY f1 ASC;\t-- same thing\n--Testcase 21:\nSELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--Testcase 22:\nSELECT * FROM foo ORDER BY f1 DESC;\n--Testcase 23:\nSELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n-- Skip, cannot create index on foreign table\n-- check if indexscans do the right things\n--CREATE INDEX fooi ON foo (f1);\n--SET enable_sort = false;\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--\n-- Test planning of some cases with partial indexes\n--\n\n-- partial index is usable\n--Testcase 24:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 25:\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- actually run the query with an analyze to use the partial index\n--Testcase 54:\nexplain (costs off, analyze on, timing off, summary off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 27:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 28:\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- partial index predicate implies clause, so no need for retest\n--Testcase 29:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 30:\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 31:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 32:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n-- but if it's an update target, must retest anyway\n--Testcase 33:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n--Testcase 34:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n-- partial index is not applicable\n--Testcase 35:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n--Testcase 36:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n-- partial index implies clause, but bitmap scan must recheck predicate anyway\nSET enable_indexscan TO off;\n--Testcase 37:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 38:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\nRESET enable_indexscan;\n-- check multi-index cases too\n--Testcase 39:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 40:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 41:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n--Testcase 42:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n\n--\n-- Test some corner cases that have been known to confuse the planner\n--\n\n-- ORDER BY on a constant doesn't really need any sorting\n--Testcase 55:\nSELECT 1 AS x ORDER BY x;\n\n-- But ORDER BY on a set-valued expression does\n--Testcase 56:\ncreate function sillysrf(int) returns setof int as\n  'values (1),(10),(2),($1)' language sql immutable;\n\n--Testcase 57:\nselect sillysrf(42);\n--Testcase 58:\nselect sillysrf(-1) order by 1;\n\n--Testcase 59:\ndrop function sillysrf(int);\n\n-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict\n-- (see bug #5084)\n--Testcase 60:\nselect * from (values (2),(null),(1)) v(k) where k = k order by k;\n--Testcase 61:\nselect * from (values (2),(null),(1)) v(k) where k = k;\n\n-- Test partitioned tables with no partitions, which should be handled the\n-- same as the non-inheritance case when expanding its RTE.\n--Testcase 62:\ncreate table list_parted_tbl (a int,b int) partition by list (a);\n--Testcase 63:\ncreate table list_parted_tbl1 partition of list_parted_tbl\n  for values in (1) partition by list(b);\n--Testcase 64:\nexplain (costs off) select * from list_parted_tbl;\n--Testcase 65:\ndrop table list_parted_tbl;\n\n--Testcase 78:\nDELETE FROM INT8_TBL;\n\n--Testcase 66:\nDROP FOREIGN TABLE onek;\n--Testcase 67:\nDROP FOREIGN TABLE onek2;\n--Testcase 68:\nDROP FOREIGN TABLE int8_tbl;\n--Testcase 69:\nDROP FOREIGN TABLE person;\n--Testcase 70:\nDROP FOREIGN TABLE foo;\n--Testcase 71:\nDROP SERVER sqlite_svr;\n--Testcase 72:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/select_having.sql",
    "content": "--\n-- SELECT_HAVING\n--\n\n--Testcase 22:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 23:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 24:\nCREATE FOREIGN TABLE test_having(a int OPTIONS (key 'true'), b int, c char(8), d char) SERVER sqlite_svr;\n\n-- load test data\n--Testcase 1:\nINSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');\n--Testcase 2:\nINSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');\n--Testcase 3:\nINSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');\n--Testcase 4:\nINSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');\n--Testcase 5:\nINSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');\n--Testcase 6:\nINSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');\n--Testcase 7:\nINSERT INTO test_having VALUES (6, 4, 'cccc', 'g');\n--Testcase 8:\nINSERT INTO test_having VALUES (7, 4, 'cccc', 'h');\n--Testcase 9:\nINSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');\n--Testcase 10:\nINSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');\n\n--Testcase 11:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;\n\n-- HAVING is effectively equivalent to WHERE in this case\n--Testcase 12:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING b = 3 ORDER BY b, c collate \"en_US.utf8\";\n\n--Testcase 13:\nSELECT lower(c), count(c) FROM test_having\n\tGROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY lower(c);\n\n--Testcase 14:\nSELECT c, max(a) FROM test_having\n\tGROUP BY c HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY c collate \"en_US.utf8\";\n\n-- test degenerate cases involving HAVING without GROUP BY\n-- Per SQL spec, these should generate 0 or 1 row, even without aggregates\n\n--Testcase 15:\nSELECT min(a), max(a) FROM test_having HAVING min(a) = max(a);\n--Testcase 16:\nSELECT min(a), max(a) FROM test_having HAVING min(a) < max(a);\n\n-- errors: ungrouped column references\n--Testcase 17:\nSELECT a FROM test_having HAVING min(a) < max(a);\n--Testcase 18:\nSELECT 1 AS one FROM test_having HAVING a > 1;\n\n-- the really degenerate case: need not scan table at all\n--Testcase 19:\nSELECT 1 AS one FROM test_having HAVING 1 > 2;\n--Testcase 20:\nSELECT 1 AS one FROM test_having HAVING 1 < 2;\n\n-- and just to prove that we aren't scanning the table:\n--Testcase 21:\nSELECT 1 AS one FROM test_having WHERE 1/a = 1 HAVING 1 < 2;\n\n--Testcase 25:\nDROP FOREIGN TABLE test_having;\n--Testcase 26:\nDROP SERVER sqlite_svr;\n--Testcase 27:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/sqlite_fdw_post.sql",
    "content": "-- ===================================================================\n-- create FDW objects\n-- ===================================================================\n\n--Testcase 483:\nCREATE EXTENSION sqlite_fdw;\n\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr2 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr3 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- SQLite FDW does not need User and User Mapping.\n--Testcase 484:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 485:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 756:\n-- CREATE USER MAPPING FOR public SERVER sqlite_svr3;\n-- ===================================================================\n-- create objects used through FDW sqlite server\n-- ===================================================================\n--Testcase 486:\nCREATE SCHEMA \"S 1\";\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO \"S 1\";\n\n--Testcase 1:\nINSERT INTO \"S 1\".\"T 1\"\n\tSELECT id,\n\t       id % 10,\n\t       to_char(id, 'FM00000'),\n\t       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,\n\t       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,\n\t       id % 10,\n\t       id % 10,\n\t       'foo'\n\tFROM generate_series(1, 1000) id;\n--Testcase 2:\nINSERT INTO \"S 1\".\"T 2\"\n\tSELECT id,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 3:\nINSERT INTO \"S 1\".\"T 3\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 487:\nDELETE FROM \"S 1\".\"T 3\" WHERE c1 % 2 != 0;\t-- delete for outer join tests\n--Testcase 4:\nINSERT INTO \"S 1\".\"T 4\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 488:\nDELETE FROM \"S 1\".\"T 4\" WHERE c1 % 3 != 0;\t-- delete for outer join tests\n\n/*ANALYZE \"S 1\".\"T 1\";\nANALYZE \"S 1\".\"T 2\";\nANALYZE \"S 1\".\"T 3\";\nANALYZE \"S 1\".\"T 4\";*/\n\n-- ===================================================================\n-- create foreign tables\n-- ===================================================================\n--Testcase 489:\nCREATE FOREIGN TABLE ft1 (\n\tc0 int,\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 757:\nALTER FOREIGN TABLE ft1 DROP COLUMN c0;\n\n--Testcase 490:\nCREATE FOREIGN TABLE ft2 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tcx int,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft2',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 758:\nALTER FOREIGN TABLE ft2 DROP COLUMN cx;\n\n--Testcase 491:\nCREATE FOREIGN TABLE ft4 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 3');\n\n--Testcase 492:\nCREATE FOREIGN TABLE ft5 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 4');\n\n--Testcase 493:\nCREATE FOREIGN TABLE ft6 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr2 OPTIONS (table 'T 4');\n\n--Testcase 759:\nCREATE FOREIGN TABLE ft7 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr3 OPTIONS (table 'T 4');\n\n--Testcase 760:\nALTER FOREIGN TABLE ft1 OPTIONS (table 'T 1');\n--Testcase 761:\nALTER FOREIGN TABLE ft2 OPTIONS (table 'T 1');\n--Testcase 762:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 763:\nALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 5:\n\\det+\n\n-- Test that alteration of server options causes reconnection\n-- Remote's errors might be non-English, so hide them to ensure stable results\n\\set VERBOSITY terse\n--Testcase 6:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work\n\n--Testcase 764:\nALTER SERVER sqlite_svr OPTIONS (SET database 'no such database');\n--Testcase 7:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should fail\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_svr\n            OPTIONS (SET database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n--Testcase 8:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work again\n\\set VERBOSITY default\n\n-- Now we should be able to run ANALYZE.\n-- To exercise multiple code paths, we use local stats on ft1\n-- and remote-estimate mode on ft2.\n--ANALYZE ft1;\n--ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');\n\n-- ===================================================================\n-- test error case for create publication on foreign table\n-- ===================================================================\n--Testcase 955:\nCREATE PUBLICATION testpub_ftbl FOR TABLE ft1;  -- should fail\n\n-- ===================================================================\n-- simple queries\n-- ===================================================================\n-- single table without alias\n--Testcase 9:\nEXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n--Testcase 10:\nSELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n-- single table with alias - also test that tableoid sort is not pushed to remote side\n--Testcase 11:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n--Testcase 12:\nSELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n-- whole-row reference\n--Testcase 13:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 14:\nSELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- empty result\n--Testcase 15:\nSELECT * FROM ft1 WHERE false;\n-- with WHERE clause\n--Testcase 16:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n--Testcase 17:\nSELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n-- with FOR UPDATE/SHARE\n--Testcase 18:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 19:\nSELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 20:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n--Testcase 21:\nSELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n-- aggregate\n--Testcase 22:\nSELECT COUNT(*) FROM ft1 t1;\n-- subquery\n--Testcase 23:\nSELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;\n-- subquery+MAX\n--Testcase 24:\nSELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;\n-- used in CTE\n--Testcase 25:\nWITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;\n-- fixed values\n--Testcase 26:\nSELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;\n-- Test forcing the remote server to produce sorted data for a merge join.\n--Testcase 765:\nSET enable_hashjoin TO false;\n--Testcase 766:\nSET enable_nestloop TO false;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 27:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 28:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 29:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 30:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- A join between local table and foreign join. ORDER BY clause is added to the\n-- foreign join so that the local table can be joined using merge join strategy.\n--Testcase 31:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 32:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above, except that the full join prevents any equivalence\n-- classes from being merged. This produces single relation equivalence classes\n-- included in join restrictions.\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 34:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above with all full outer joins\n--Testcase 35:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 36:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 767:\nRESET enable_hashjoin;\n--Testcase 768:\nRESET enable_nestloop;\n\n-- Test executing assertion in estimate_path_cost_size() that makes sure that\n-- retrieved_rows for foreign rel re-used to cost pre-sorted foreign paths is\n-- a sensible value even when the rel has tuples=0\n-- CREATE TABLE loct_empty (c1 int NOT NULL, c2 text);\n--Testcase 769:\nCREATE FOREIGN TABLE ft_empty (c1 int NOT NULL, c2 text)\n  SERVER sqlite_svr OPTIONS (table 'loct_empty');\n--Testcase 770:\nINSERT INTO \"S 1\".loct_empty\n  SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id;\n--Testcase 771:\nDELETE FROM \"S 1\".loct_empty;\n-- ANALYZE ft_empty;\n--Testcase 772:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft_empty ORDER BY c1;\n\n-- ===================================================================\n-- WHERE with remotely-executable conditions\n-- ===================================================================\n--Testcase 37:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr\n--Testcase 39:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NULL;        -- NullTest\n--Testcase 40:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL;    -- NullTest\n--Testcase 41:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr\n--Testcase 42:\n\n--Testcase 956:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)\n--Testcase 44:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr\n--Testcase 45:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr\n--Testcase 46:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef\n--Testcase 47:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\\\bar';  -- check special chars\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote\n-- parameterized remote path for foreign table\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n--Testcase 50:\nSELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n\n-- check both safe and unsafe join conditions\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft2 a, ft2 b\n  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n--Testcase 52:\nSELECT * FROM ft2 a, ft2 b\nWHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n-- bug before 9.3.5 due to sloppy handling of remote-estimate parameters\n--Testcase 53:\nSELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));\n--Testcase 54:\nSELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));\n-- we should not push order by clause with volatile expressions or unsafe\n-- collations\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, random();\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate \"C\";\n\n-- user-defined operator/function\n--Testcase 494:\nCREATE FUNCTION sqlite_fdw_abs(int) RETURNS int AS $$\nBEGIN\nRETURN abs($1);\nEND\n$$ LANGUAGE plpgsql IMMUTABLE;\n--Testcase 495:\nCREATE OPERATOR === (\n    LEFTARG = int,\n    RIGHTARG = int,\n    PROCEDURE = int4eq,\n    COMMUTATOR = ===\n);\n\n-- built-in operators and functions can be shipped for remote execution\n--Testcase 57:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 58:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 59:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 60:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n\n-- by default, user-defined ones cannot\n--Testcase 61:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 62:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 63:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 64:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- ORDER BY can be shipped, though\n--Testcase 496:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 497:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- but let's put them in an extension ...\n--Testcase 773:\nALTER EXTENSION sqlite_fdw ADD FUNCTION sqlite_fdw_abs(int);\n--Testcase 774:\nALTER EXTENSION sqlite_fdw ADD OPERATOR === (int, int);\n--ALTER SERVER sqlite_svr2 OPTIONS (ADD extensions 'sqlite_fdw');\n\n-- ... now they can be shipped\n--Testcase 498:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 499:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 500:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 501:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- and both ORDER BY and LIMIT can be shipped\n--Testcase 502:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 503:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- Test CASE pushdown\n--Testcase 957:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n--Testcase 958:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n\n-- Nested CASE\n--Testcase 959:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n--Testcase 960:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n-- CASE arg WHEN\n--Testcase 961:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- CASE cannot be pushed down because of unshippable arg clause\n--Testcase 962:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE random()::integer WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 963:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 964:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 965:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- a regconfig constant referring to this text search configuration\n-- is initially unshippable--Testcase 984:\nCREATE TEXT SEARCH CONFIGURATION public.custom_search\n  (COPY = pg_catalog.english);\n--Testcase 985:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n--Testcase 986:\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n\n-- but if it's in a shippable extension, it can be shipped\nALTER EXTENSION sqlite_fdw ADD TEXT SEARCH CONFIGURATION public.custom_search;\n-- however, that doesn't flush the shippability cache, so do a quick reconnect\n\\c -\n--Testcase 995:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n--Testcase 996:\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n\n-- ===================================================================\n-- JOIN queries\n-- ===================================================================\n-- Analyze ft4 and ft5 so that we have better statistics. These tables do not\n-- have use_remote_estimate set.\n--ANALYZE ft4;\n--ANALYZE ft5;\n\n-- join two tables\n--Testcase 65:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 66:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join three tables\n--Testcase 67:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 68:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join\n--Testcase 69:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 70:\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- left outer join three tables\n--Testcase 71:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 72:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + placement of clauses.\n-- clauses within the nullable side are not pulled up, but top level clause on\n-- non-nullable side is pushed into non-nullable side\n--Testcase 73:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n--Testcase 74:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n-- clauses within the nullable side are not pulled up, but the top level clause\n-- on nullable side is not pushed down into nullable side\n--Testcase 75:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n--Testcase 76:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n-- right outer join\n--Testcase 77:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 78:\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join three tables\n--Testcase 79:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 80:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- full outer join\n--Testcase 81:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n--Testcase 82:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n-- full outer join with restrictions on the joining relations\n-- a. the joining relations are both base relations\n--Testcase 83:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 84:\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 85:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n--Testcase 86:\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n-- b. one of the joining relations is a base relation and the other is a join\n-- relation\n--Testcase 87:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 88:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- c. test deparsing the remote query as nested subqueries\n--Testcase 89:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 90:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- d. test deparsing rowmarked relations as subqueries\n--Testcase 91:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n--Testcase 92:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n-- full outer join + inner join\n--Testcase 93:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n--Testcase 94:\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n-- full outer join three tables\n--Testcase 95:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 96:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + right outer join\n--Testcase 97:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 98:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- right outer join + full outer join\n--Testcase 99:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 100:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + left outer join\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 102:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join + full outer join\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 104:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 775:\nSET enable_memoize TO off;\n-- right outer join + left outer join\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 106:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 776:\nRESET enable_memoize;\n-- left outer join + right outer join\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 108:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause, only matched rows\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 110:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause with shippable extensions set\n--Testcase 504:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--ALTER SERVER sqlite_svr2 OPTIONS (DROP extensions);\n-- full outer join + WHERE clause with shippable extensions not set\n--Testcase 505:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--Testcase 777:\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- join two tables with FOR UPDATE clause\n-- tests whole-row reference for row marks\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 112:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n--Testcase 114:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n-- join two tables with FOR SHARE clause\n--Testcase 115:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 116:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n--Testcase 118:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n-- join in CTE\n--Testcase 119:\nEXPLAIN (VERBOSE, COSTS OFF)\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n--Testcase 120:\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n-- ctid with whole-row reference\n--Testcase 121:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- SEMI JOIN, not pushed down\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 123:\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- ANTI JOIN, not pushed down\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 125:\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- CROSS JOIN can be pushed down\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 127:\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- different server, not pushed down. No result expected.\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 129:\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe join conditions (c8 has a UDT), not pushed down. Practically a CROSS\n-- JOIN since c8 in both tables has same value.\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 131:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe conditions on one side (c8 has a UDT), not pushed down.\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 133:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join where unsafe to pushdown condition in WHERE clause has a column not\n-- in the SELECT clause. In this test unsafe clause needs to have column\n-- references from both joining sides so that the clause is not pushed down\n-- into one of the joining sides.\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 135:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- Aggregate after UNION, for testing setrefs\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n--Testcase 137:\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n-- join with lateral reference\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n--Testcase 139:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n-- join with pseudoconstant quals, not pushed down.\n--Testcase 997:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1 AND CURRENT_USER = SESSION_USER) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n\n-- non-Var items in targetlist of the nullable rel of a join preventing\n-- push-down in some cases\n-- unable to push {ft1, ft2}\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n--Testcase 141:\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n\n-- ok to push {ft1, ft2} but not {ft1, ft2, ft4}\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n--Testcase 143:\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n\n-- join with nullable side with some columns with null values\n--Testcase 144:\nUPDATE ft5 SET c3 = null where c1 % 9 = 0;\n--Testcase 145:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n--Testcase 146:\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n\n-- multi-way join involving multiple merge joins\n-- (this case used to have EPQ-related planning problems)\n--Testcase 506:\nCREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1));\n--Testcase 507:\nINSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\nANALYZE local_tbl;\n--Testcase 778:\nSET enable_nestloop TO false;\n--Testcase 779:\nSET enable_hashjoin TO false;\n--Testcase 147:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE;\n--Testcase 148:\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 ORDER BY ft1.c1 FOR UPDATE;\n--Testcase 780:\nRESET enable_nestloop;\n--Testcase 781:\nRESET enable_hashjoin;\n\n-- test that add_paths_with_pathkeys_for_rel() arranges for the epq_path to\n-- return columns needed by the parent ForeignScan node\n-- This does not work as SQLite FDW does not support use_remote_estimate\n--Testcase 987:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foobar') FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100)) ss ON (local_tbl.c1 = ss.c1) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0');\n\n--Testcase 988:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND (ft1.c1 - sqlite_fdw_abs(ft2.c2)) = 0)) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n-- ALTER SERVER loopback OPTIONS (DROP fdw_startup_cost);\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n--DROP TABLE local_tbl;\n-- check join pushdown in situations where multiple userids are involved\n-- Although SQLite FDW does not need User and User mapping to connect to\n-- the database file, however, JOIN pushdown is decided by the core code.\n-- If outer and inner relation are foreign tables (or joins) belonging to\n-- the same server and assigned to the same user, join will be pushed down.\n-- Otherwise, join cannot be pushed down.\n-- In addition to an exact match of userid, we allow the case where one side\n-- has zero userid (implying current user) and the other side has explicit\n-- userid that happens to equal the current user; but in that case, pushdown of\n-- the join is only valid for the current user.\n--Testcase 508:\nCREATE ROLE regress_view_owner SUPERUSER;\n--Testcase 509:\n-- CREATE USER MAPPING FOR regress_view_owner SERVER sqlite_svr;\nGRANT SELECT ON ft4 TO regress_view_owner;\nGRANT SELECT ON ft5 TO regress_view_owner;\n\n--Testcase 510:\nCREATE VIEW v4 AS SELECT * FROM ft4;\n--Testcase 511:\nCREATE VIEW v5 AS SELECT * FROM ft5;\n--Testcase 782:\nALTER VIEW v5 OWNER TO regress_view_owner;\n--Testcase 149:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, different view owners\n--Testcase 150:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 783:\nALTER VIEW v4 OWNER TO regress_view_owner;\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n\n--Testcase 152:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, view owner not current user\n--Testcase 154:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 784:\nALTER VIEW v4 OWNER TO CURRENT_USER;\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 156:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 785:\nALTER VIEW v4 OWNER TO regress_view_owner;\n\n-- Comment out these test cases.\n-- sqlite_fdw does not need to getUserMapping in planning phase,\n-- so it is unable to check userid to use when querying the remote table is correctly propagated into foreign rels.\n-- -- ====================================================================\n-- -- Check that userid to use when querying the remote table is correctly\n-- -- propagated into foreign rels present in subqueries under an UNION ALL\n-- -- ====================================================================\n-- CREATE ROLE regress_view_owner_another;\n-- ALTER VIEW v4 OWNER TO regress_view_owner_another;\n-- GRANT SELECT ON ft4 TO regress_view_owner_another;\n-- ALTER FOREIGN TABLE ft4 OPTIONS (ADD use_remote_estimate 'true');\n-- -- The following should query the remote backing table of ft4 as user\n-- -- regress_view_owner_another, the view owner, though it fails as expected\n-- -- due to the lack of a user mapping for that user.\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4;\n-- -- Likewise, but with the query under an UNION ALL\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4);\n-- -- Should not get that error once a user mapping is created\n-- CREATE USER MAPPING FOR regress_view_owner_another SERVER loopback OPTIONS (password_required 'false');\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4;\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4);\n-- DROP USER MAPPING FOR regress_view_owner_another SERVER loopback;\n-- DROP OWNED BY regress_view_owner_another;\n-- DROP ROLE regress_view_owner_another;\n-- ALTER FOREIGN TABLE ft4 OPTIONS (SET use_remote_estimate 'false');\n\n-- cleanup\n--Testcase 512:\nDROP OWNED BY regress_view_owner;\n--Testcase 513:\nDROP ROLE regress_view_owner;\n\n\n-- ===================================================================\n-- Aggregate and grouping queries\n-- ===================================================================\n\n-- Simple aggregates\n--Testcase 157:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n--Testcase 158:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n\n--Testcase 514:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n--Testcase 515:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n\n-- Aggregate is not pushed down as aggregation contains random()\n--Testcase 159:\nexplain (verbose, costs off)\nselect sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1;\n\n-- Aggregate over join query\n--Testcase 160:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n--Testcase 161:\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n\n-- Not pushed down due to local conditions present in underneath input rel\n--Testcase 162:\nexplain (verbose, costs off)\nselect sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1;\n\n-- GROUP BY clause having expressions\n--Testcase 163:\nexplain (verbose, costs off)\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n--Testcase 164:\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n\n-- Aggregates in subquery are pushed down.\nset enable_incremental_sort = off;\n--Testcase 165:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n--Testcase 166:\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\nreset enable_incremental_sort;\n\n-- Aggregate is still pushed down by taking unshippable expression out\n--Testcase 167:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n--Testcase 168:\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n\n-- Aggregate with unshippable GROUP BY clause are not pushed\n--Testcase 169:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1;\n\n-- GROUP BY clause in various forms, cardinal, alias and constant expression\n--Testcase 516:\nexplain (verbose, costs off)\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n--Testcase 517:\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n\n-- GROUP BY clause referring to same column multiple times\n-- Also, ORDER BY contains an aggregate function\n--Testcase 170:\n\n--Testcase 966:\nexplain (verbose, costs off)\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n--Testcase 171:\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n\n-- Testing HAVING clause shippability\n--Testcase 172:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n--Testcase 173:\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n\n-- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down\n--Testcase 174:\nexplain (verbose, costs off)\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n--Testcase 175:\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n\n-- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down\n--Testcase 176:\nexplain (verbose, costs off)\nselect sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1;\n\n-- Remote aggregate in combination with a local Param (for the output\n-- of an initplan) can be trouble, per bug #15781\n--Testcase 518:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n--Testcase 519:\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n\n--Testcase 520:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n--Testcase 521:\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n\n\n-- Testing ORDER BY, DISTINCT, FILTER, Ordered-sets and VARIADIC within aggregates\n\n-- ORDER BY within aggregate, same column used to order\n--Testcase 177:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n--Testcase 178:\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n\n-- ORDER BY within aggregate, different column used to order also using DESC\n--Testcase 179:\nexplain (verbose, costs off)\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n--Testcase 180:\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n-- DISTINCT within aggregate\n--Testcase 181:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 182:\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- DISTINCT combined with ORDER BY within aggregate\n--Testcase 183:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 184:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n--Testcase 185:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 186:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- FILTER within aggregate\n--Testcase 187:\nexplain (verbose, costs off)\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n--Testcase 188:\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n\n-- DISTINCT, ORDER BY and FILTER within aggregate\n--Testcase 189:\nexplain (verbose, costs off)\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n--Testcase 190:\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n\n-- Outer query is aggregation query\n--Testcase 191:\nexplain (verbose, costs off)\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 192:\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n-- Inner query is aggregation query\n--Testcase 193:\nexplain (verbose, costs off)\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 194:\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n\n-- Aggregate not pushed down as FILTER condition is not pushable\n--Testcase 195:\nexplain (verbose, costs off)\nselect sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1;\n--Testcase 196:\nexplain (verbose, costs off)\nselect sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1;\n\n-- Ordered-sets within aggregate\n--Testcase 197:\nexplain (verbose, costs off)\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n--Testcase 198:\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n\n-- Using multiple arguments within aggregates\n--Testcase 199:\nexplain (verbose, costs off)\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n--Testcase 200:\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n\n-- User defined function for user defined aggregate, VARIADIC\n--Testcase 522:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n--Testcase 523:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n-- Disable hash aggregation for plan stability.\n--Testcase 786:\nset enable_hashagg to false;\n\n-- Not pushed down due to user defined aggregate\n--Testcase 524:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Add function and aggregate into extension\n--alter extension postgres_fdw add function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw add aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now aggregate will be pushed.  Aggregate will display VARIADIC argument.\n--Testcase 525:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n--Testcase 526:\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n\n-- Remove function and aggregate from extension\n--alter extension postgres_fdw drop function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw drop aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Not pushed down as we have dropped objects from extension.\n--Testcase 527:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Cleanup\n--Testcase 787:\nreset enable_hashagg;\n--Testcase 528:\ndrop aggregate least_agg(variadic items anyarray);\n--Testcase 529:\ndrop function least_accum(anyelement, variadic anyarray);\n\n\n-- Testing USING OPERATOR() in ORDER BY within aggregate.\n-- For this, we need user defined operators along with operator family and\n-- operator class.  Create those and then add them in extension.  Note that\n-- user defined objects are considered unshippable unless they are part of\n-- the extension.\n--Testcase 530:\ncreate operator public.<^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4eq\n);\n\n--Testcase 531:\ncreate operator public.=^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4lt\n);\n\n--Testcase 532:\ncreate operator public.>^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4gt\n);\n\n--Testcase 533:\ncreate operator family my_op_family using btree;\n\n--Testcase 534:\ncreate function my_op_cmp(a int, b int) returns int as\n  $$begin return btint4cmp(a, b); end $$ language plpgsql;\n\n--Testcase 535:\ncreate operator class my_op_class for type int using btree family my_op_family as\n operator 1 public.<^,\n operator 3 public.=^,\n operator 5 public.>^,\n function 1 my_op_cmp(int, int);\n\n-- This will not be pushed as user defined sort operator is not part of the\n-- extension yet.\n--Testcase 536:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- This should not be pushed either.\n--Testcase 967:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Update local stats on ft2\n--ANALYZE ft2;\n\n-- Add into extension\n--Testcase 788:\nalter extension sqlite_fdw add operator class my_op_class using btree;\n--Testcase 789:\nalter extension sqlite_fdw add function my_op_cmp(a int, b int);\n--Testcase 790:\nalter extension sqlite_fdw add operator family my_op_family using btree;\n--Testcase 791:\nalter extension sqlite_fdw add operator public.<^(int, int);\n--Testcase 792:\nalter extension sqlite_fdw add operator public.=^(int, int);\n--Testcase 793:\nalter extension sqlite_fdw add operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n--alter server loopback options (add fdw_tuple_cost '0.5');\n-- Now this will be pushed as sort operator is part of the extension.\n--Testcase 537:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--Testcase 538:\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--alter server loopback options (drop fdw_tuple_cost);\n-- This should be pushed too.\n-- Sqlite not support pushdown user defined operators \n--Testcase 968:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Remove from extension\n--Testcase 794:\nalter extension sqlite_fdw drop operator class my_op_class using btree;\n--Testcase 795:\nalter extension sqlite_fdw drop function my_op_cmp(a int, b int);\n--Testcase 796:\nalter extension sqlite_fdw drop operator family my_op_family using btree;\n--Testcase 797:\nalter extension sqlite_fdw drop operator public.<^(int, int);\n--Testcase 798:\nalter extension sqlite_fdw drop operator public.=^(int, int);\n--Testcase 799:\nalter extension sqlite_fdw drop operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- This will not be pushed as sort operator is now removed from the extension.\n--Testcase 539:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Cleanup\n--Testcase 540:\ndrop operator class my_op_class using btree;\n--Testcase 541:\ndrop function my_op_cmp(a int, b int);\n--Testcase 542:\ndrop operator family my_op_family using btree;\n--Testcase 543:\ndrop operator public.>^(int, int);\n--Testcase 544:\ndrop operator public.=^(int, int);\n--Testcase 545:\ndrop operator public.<^(int, int);\n\n-- Input relation to aggregate push down hook is not safe to pushdown and thus\n-- the aggregate cannot be pushed down to foreign server.\n--Testcase 201:\nexplain (verbose, costs off)\nselect count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2);\n\n-- Subquery in FROM clause having aggregate\n--Testcase 202:\nexplain (verbose, costs off)\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n--Testcase 203:\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n\n-- FULL join with IS NULL check in HAVING\n--Testcase 204:\nexplain (verbose, costs off)\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n--Testcase 205:\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n\n-- Aggregate over FULL join needing to deparse the joining relations as\n-- subqueries.\n--Testcase 206:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n--Testcase 207:\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n\n-- ORDER BY expression is part of the target list but not pushed down to\n-- foreign server.\n--Testcase 208:\nexplain (verbose, costs off)\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n--Testcase 209:\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n\n-- LATERAL join, with parameterization\n--Testcase 800:\nset enable_hashagg to false;\n--Testcase 210:\nexplain (verbose, costs off)\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 211:\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 801:\nreset enable_hashagg;\n\n-- bug #15613: bad plan for foreign table scan with lateral reference\n--Testcase 546:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n--Testcase 547:\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n-- Check with placeHolderVars\n--Testcase 212:\nexplain (verbose, costs off)\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n--Testcase 213:\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n\n\n-- Not supported cases\n-- Grouping sets\n--Testcase 214:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 215:\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 216:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 217:\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 218:\nexplain (verbose, costs off)\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 219:\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 220:\nexplain (verbose, costs off)\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n--Testcase 221:\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n\n-- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed\n--Testcase 222:\nexplain (verbose, costs off)\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n--Testcase 223:\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n\n-- WindowAgg\n--Testcase 224:\nexplain (verbose, costs off)\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 225:\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 226:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 227:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 228:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 229:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n\n\n-- ===================================================================\n-- parameterized queries\n-- ===================================================================\n-- simple join\n--Testcase 230:\nPREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);\n--Testcase 232:\nEXECUTE st1(1, 1);\n--Testcase 233:\nEXECUTE st1(101, 101);\n-- subquery using stable function (can't be sent to remote)\n--Testcase 234:\nPREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 235:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);\n--Testcase 236:\nEXECUTE st2(10, 20);\n--Testcase 237:\nEXECUTE st2(101, 121);\n-- subquery using immutable function (can be sent to remote)\n--Testcase 238:\nPREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 239:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);\n--Testcase 240:\nEXECUTE st3(10, 20);\n--Testcase 241:\nEXECUTE st3(20, 30);\n-- custom plan should be chosen initially\n--Testcase 242:\nPREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;\n--Testcase 243:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 244:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 245:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 246:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 247:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- once we try it enough times, should switch to generic plan\n--Testcase 248:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- value of $1 should not be sent to remote\n--Testcase 249:\nPREPARE st5(text,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 254:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 255:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 256:\nEXECUTE st5('foo', 1);\n\n-- altering FDW options requires replanning\n--Testcase 257:\nPREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 258:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 259:\nPREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo');\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 548:\nINSERT INTO \"S 1\".\"T 0\" SELECT * FROM \"S 1\".\"T 1\";\n--Testcase 802:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 0');\n--Testcase 261:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 262:\nEXECUTE st6;\n--Testcase 263:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 803:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 1');\n\n--Testcase 549:\nPREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 550:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 551:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--Testcase 552:\nEXECUTE st8;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- cleanup\nDEALLOCATE st1;\nDEALLOCATE st2;\nDEALLOCATE st3;\nDEALLOCATE st4;\nDEALLOCATE st5;\nDEALLOCATE st6;\nDEALLOCATE st7;\nDEALLOCATE st8;\n\n-- System columns, except ctid and oid, should not be sent to remote\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;\n--Testcase 265:\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1;\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 267:\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 553:\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 554:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n--Testcase 271:\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n\n-- ===================================================================\n-- used in PL/pgSQL function\n-- ===================================================================\n--Testcase 555:\nCREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$\nDECLARE\n\tv_c1 int;\nBEGIN\n--Testcase 556:\n    SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;\n    PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;\n    RETURN v_c1;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 272:\nSELECT f_test(100);\n--Testcase 557:\nDROP FUNCTION f_test(int);\n\n-- ===================================================================\n-- REINDEX\n-- ===================================================================\n-- remote table is not created here\n--Testcase 804:\nCREATE FOREIGN TABLE reindex_foreign (c1 int, c2 int)\n  SERVER sqlite_svr2 OPTIONS (table 'reindex_local');\nREINDEX TABLE reindex_foreign; -- error\nREINDEX TABLE CONCURRENTLY reindex_foreign; -- error\n--Testcase 805:\nDROP FOREIGN TABLE reindex_foreign;\n-- partitions and foreign tables\n--Testcase 806:\nCREATE TABLE reind_fdw_parent (c1 int) PARTITION BY RANGE (c1);\n--Testcase 807:\nCREATE TABLE reind_fdw_0_10 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (0) TO (10);\n--Testcase 808:\nCREATE FOREIGN TABLE reind_fdw_10_20 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (10) TO (20)\n  SERVER sqlite_svr OPTIONS (table 'reind_local_10_20');\nREINDEX TABLE reind_fdw_parent; -- ok\nREINDEX TABLE CONCURRENTLY reind_fdw_parent; -- ok\n--Testcase 809:\nDROP TABLE reind_fdw_parent;\n\n-- ===================================================================\n-- conversion error\n-- ===================================================================\n--Testcase 810:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;\n--Testcase 273:\nSELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1;\n--Testcase 274:\nSELECT  ftx.x1,  ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 275:\nSELECT  ftx.x1,  ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 276:\nSELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8;\n-- ANALYZE ft1; -- ERROR\n\n-- ===================================================================\n-- local type can be different from remote type in some cases,\n-- in particular if similarly-named operators do equivalent things\n-- ===================================================================\n--Testcase 811:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text;\n--Testcase 969:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 970:\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 971:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n--Testcase 972:\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n-- we declared c8 to be text locally, but it's still the same type on\n-- the remote which will balk if we try to do anything incompatible\n-- with that remote type\n-- Can not create user define type in SqliteDB.\n-- Type c8 of foreign table ft1 and remote table T1 are \n-- match. These case below not error with sqlite_fdw. \n-- with that remote type\n--Testcase 973:\nSELECT * FROM ft1 WHERE c8 LIKE 'foo' LIMIT 1; -- ERROR\n--Testcase 974:\nSELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed down\n\n-- ===================================================================\n-- subtransaction\n--  + local/remote error doesn't break cursor\n-- ===================================================================\nBEGIN;\nDECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;\n--Testcase 277:\nFETCH c;\nSAVEPOINT s;\nERROR OUT;          -- ERROR\nROLLBACK TO s;\n--Testcase 278:\nFETCH c;\nSAVEPOINT s;\n--Testcase 279:\nSELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR\nROLLBACK TO s;\n--Testcase 280:\nFETCH c;\n--Testcase 281:\nSELECT * FROM ft1 ORDER BY c1 LIMIT 1;\nCOMMIT;\n\n-- ===================================================================\n-- test handling of collations\n-- ===================================================================\n--Testcase 558:\ncreate foreign table ft3 (f1 text collate \"C\", f2 text, f3 varchar(10)) server sqlite_svr;\n\n-- can be sent to remote\n--Testcase 559:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo';\n--Testcase 560:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"C\" = 'foo';\n--Testcase 561:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo';\n--Testcase 562:\nexplain (verbose, costs off) select * from ft3 where f3 = 'foo';\n--Testcase 563:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 and l.f1 = 'foo';\n-- can't be sent to remote\n--Testcase 564:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"POSIX\" = 'foo';\n--Testcase 565:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE \"C\";\n--Testcase 566:\nexplain (verbose, costs off) select * from ft3 where f2 COLLATE \"C\" = 'foo';\n--Testcase 567:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE \"C\";\n--Testcase 568:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 COLLATE \"POSIX\" and l.f1 = 'foo';\n\n-- ===================================================================\n-- test writable foreign table stuff\n-- ===================================================================\n--Testcase 282:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 283:\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 284:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc');\n--Testcase 285:\nSELECT * FROM ft2 WHERE c1 >= 1101;\n--Testcase 286:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');\n--Testcase 287:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;              -- can be pushed down\n--Testcase 288:\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;\n--Testcase 289:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;  -- can be pushed down\n--Testcase 290:\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;\n--Testcase 291:\nSELECT * FROM ft2 WHERE c1 % 10 = 7;\n--Testcase 292:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;                               -- can be pushed down\n--Testcase 293:\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;\n--Testcase 294:\nEXPLAIN (verbose, costs off)\n  DELETE FROM ft2 WHERE c1 % 10 = 5;                               -- can be pushed down\n--Testcase 295:\nSELECT c1, c4 FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 569:\nDELETE FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 297:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;                -- can be pushed down\n--Testcase 298:\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;\n--Testcase 299:\nSELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;\n--Testcase 300:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 301:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 302:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;             -- can be pushed down\n--Testcase 303:\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;\n--Testcase 304:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 WHERE c1 = 1200;                       -- can be pushed down\n--Testcase 305:\nDELETE FROM ft2 WHERE c1 = 1200;\n\n-- Test UPDATE/DELETE on a three-table join\n--Testcase 306:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id;\n--Testcase 307:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;       -- can be pushed down\n--Testcase 308:\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;\n--Testcase 309:\nSELECT ft2, ft2.*, ft4, ft4.*\n  FROM ft2 INNER JOIN ft4 ON (ft2.c1 > 1200 AND ft2.c2 = ft4.c1)\n  INNER JOIN ft5 ON (ft4.c1 = ft5.c1);\n--Testcase 310:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;                          -- can be pushed down\n--Testcase 311:\nSELECT 100 FROM ft2, ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n\n--Testcase 570:\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n--Testcase 312:\nDELETE FROM ft2 WHERE ft2.c1 > 1200;\n\n-- Test UPDATE with a MULTIEXPR sub-select\n-- (maybe someday this'll be remotely executable, but not today)\n--Testcase 571:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n--Testcase 572:\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n--Testcase 573:\nUPDATE ft2 AS target SET (c2) = (\n    SELECT c2 / 10\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n-- Test UPDATE involving a join that can be pushed down,\n-- but a SET clause that can't be\n--Testcase 812:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n--Testcase 813:\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n\n-- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing\n-- user-defined operators/functions\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 574:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;\n--Testcase 575:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;            -- can't be pushed down\n--Testcase 576:\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 577:\nSELECT * FROM ft2 WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 578:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;                                                    -- can't be pushed down\n--Testcase 579:\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n--Testcase 580:\nSELECT ft2.*, ft4.*, ft5.* \n  FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n\n--Testcase 581:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 582:\nSELECT ft2.c1, ft2.c2, ft2.c3 FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 583:\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;\n\n--Testcase 584:\nDELETE FROM ft2 WHERE ft2.c1 > 2000;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n-- Test that trigger on remote table works as expected\n--Testcase 585:\nCREATE OR REPLACE FUNCTION \"S 1\".F_BRTRIG() RETURNS trigger AS $$\nBEGIN\n    NEW.c3 = NEW.c3 || '_trig_update';\n    RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 586:\nCREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE\n    ON ft2 FOR EACH ROW EXECUTE PROCEDURE \"S 1\".F_BRTRIG();\n\n--Testcase 313:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff');\n--Testcase 314:\nSELECT * FROM ft2 WHERE c1 = 1208;\n--Testcase 315:\nINSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;');\n--Testcase 316:\nSELECT * FROM ft2 WHERE c1 = 1218;\n--Testcase 317:\nUPDATE ft2 SET c2 = c2 + 600, c3 = c3 WHERE c1 % 10 = 8 AND c1 < 1200;\n--Testcase 318:\nSELECT * FROM ft2 WHERE c1 % 10 = 8 AND c1 < 1200;\n\n-- Test errors thrown on remote side during update\n-- create table in the remote server with check contraint\n--Testcase 738:\nCREATE FOREIGN TABLE ft1_constraint (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr OPTIONS (table 't1_constraint');\n--Testcase 747:\nINSERT INTO ft1_constraint SELECT * FROM ft1 ON CONFLICT DO NOTHING;\n-- c2 must be greater than or equal to 0, so this case is ignored.\n--Testcase 754:\nINSERT INTO ft1_constraint(c1, c2) VALUES (2222, -2) ON CONFLICT DO NOTHING; -- ignore, do nothing\n--Testcase 755:\nSELECT c1, c2 FROM ft1_constraint WHERE c1 = 2222 or c2 = -2; -- empty result\n--Testcase 748:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 749:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n--Testcase 319:\nINSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key\n--Testcase 320:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported\n--Testcase 321:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported\n--Testcase 743:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 744:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 750:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_constraint;\n--Testcase 751:\nALTER FOREIGN TABLE ft1_org RENAME TO ft1;\n\n-- Test savepoint/rollback behavior\n--Testcase 322:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 323:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\nbegin;\n--Testcase 324:\nupdate ft2 set c2 = 42 where c2 = 0;\n--Testcase 325:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s1;\n--Testcase 326:\nupdate ft2 set c2 = 44 where c2 = 4;\n--Testcase 327:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s1;\n--Testcase 328:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s2;\n--Testcase 329:\nupdate ft2 set c2 = 46 where c2 = 6;\n--Testcase 330:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrollback to savepoint s2;\n--Testcase 331:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s2;\n--Testcase 332:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s3;\n--Testcase 333:\n--skip, does not support CHECK\n--update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side\nrollback to savepoint s3;\n--Testcase 334:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s3;\n--Testcase 335:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n-- none of the above is committed yet remotely\n--Testcase 336:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\ncommit;\n--Testcase 337:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 338:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\n\n--VACUUM ANALYZE \"S 1\".\"T 1\";\n\n-- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs\n-- FIRST behavior here.\n-- ORDER BY DESC NULLS LAST options\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10;\n--Testcase 340:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795  LIMIT 10;\n-- ORDER BY DESC NULLS FIRST options\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 342:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n-- ORDER BY ASC NULLS FIRST options\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 344:\nSELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n\n-- ===================================================================\n-- test check constraints\n-- ===================================================================\n--Testcase 752:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 753:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n-- Consistent check constraints provide consistent results\n--Testcase 814:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0);\n--Testcase 587:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 588:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 815:\nSET constraint_exclusion = 'on';\n--Testcase 589:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 590:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 816:\nRESET constraint_exclusion;\n-- check constraint is enforced on the remote side, not locally\n--Testcase 745:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 746:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 817:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2positive;\n\n-- But inconsistent check constraints provide inconsistent results\n--Testcase 818:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 592:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 819:\nSET constraint_exclusion = 'on';\n--Testcase 593:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 594:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 820:\nRESET constraint_exclusion;\n-- local check constraint is not actually enforced\n--Testcase 595:\nINSERT INTO ft1(c1, c2) VALUES(1111, 2);\n--Testcase 596:\nUPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1;\n--Testcase 821:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative;\n\n-- ===================================================================\n-- test WITH CHECK OPTION constraints\n-- ===================================================================\n--Testcase 597:\nCREATE FUNCTION row_before_insupd_trigfunc() RETURNS trigger AS $$BEGIN NEW.a := NEW.a + 10; RETURN NEW; END$$ LANGUAGE plpgsql;\n\n--Testcase 598:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 599:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n--Testcase 600:\nCREATE VIEW rw_view AS SELECT * FROM foreign_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 601:\n\\d+ rw_view\n\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 602:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 603:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 604:\nINSERT INTO rw_view VALUES (0, 15); -- error\n--Testcase 605:\nSELECT * FROM foreign_tbl;\n\n--Testcase 606:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 607:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 608:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 609:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 610:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 989:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 990:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 991:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 611:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 612:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n\n-- test WCO for partitions\n\n--Testcase 613:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 614:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n\n--Testcase 615:\nCREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);\n--Testcase 822:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n-- Detach and re-attach once, to stress the concurrent detach case.\n--Testcase 975:\nALTER TABLE parent_tbl DETACH PARTITION foreign_tbl CONCURRENTLY;\n--Testcase 976:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n\n--Testcase 616:\nCREATE VIEW rw_view AS SELECT * FROM parent_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 617:\n\\d+ rw_view\n\n--Testcase 618:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 619:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 620:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 621:\nINSERT INTO rw_view VALUES (0, 15); -- ok\n--Testcase 622:\nSELECT * FROM foreign_tbl;\n\n--Testcase 623:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 624:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 625:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 626:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 627:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 992:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 993:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 994:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 628:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n--Testcase 629:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 630:\nDROP TABLE parent_tbl CASCADE;\n\n--Testcase 631:\nDROP FUNCTION row_before_insupd_trigfunc;\n\n-- -- Try a more complex permutation of WCO where there are multiple levels of\n-- -- partitioned tables with columns not all in the same order\n-- CREATE TABLE parent_tbl (a int, b text, c numeric) PARTITION BY RANGE(a);\n-- CREATE TABLE sub_parent (c numeric, a int, b text) PARTITION BY RANGE(a);\n-- ALTER TABLE parent_tbl ATTACH PARTITION sub_parent FOR VALUES FROM (1) TO (10);\n-- CREATE TABLE child_local (b text, c numeric, a int);\n-- CREATE FOREIGN TABLE child_foreign (b text, c numeric, a int)\n--   SERVER loopback OPTIONS (table_name 'child_local');\n-- ALTER TABLE sub_parent ATTACH PARTITION child_foreign FOR VALUES FROM (1) TO (10);\n-- CREATE VIEW rw_view AS SELECT * FROM parent_tbl WHERE a < 5 WITH CHECK OPTION;\n\n-- INSERT INTO parent_tbl (a) VALUES(1),(5);\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE rw_view SET b = 'text', c = 123.456;\n-- UPDATE rw_view SET b = 'text', c = 123.456;\n-- SELECT * FROM parent_tbl ORDER BY a;\n\n-- DROP VIEW rw_view;\n-- DROP TABLE child_local;\n-- DROP FOREIGN TABLE child_foreign;\n-- DROP TABLE sub_parent;\n-- DROP TABLE parent_tbl;\n\n\n-- ===================================================================\n-- test serial columns (ie, sequence-based defaults)\n-- ===================================================================\n--Testcase 632:\ncreate foreign table loc1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr;\n--Testcase 633:\ncreate foreign table rem1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr options(table 'loc1');\n--Testcase 352:\nselect pg_catalog.setval('rem1_f1_seq', 10, false);\n--Testcase 353:\ninsert into loc1(f2) values('hi');\n--Testcase 634:\ninsert into rem1(f2) values('hi remote');\n--Testcase 354:\ninsert into loc1(f2) values('bye');\n--Testcase 635:\ninsert into rem1(f2) values('bye remote');\n--Testcase 355:\nselect f1, f2 from loc1;\n--Testcase 636:\nselect f1, f2 from rem1;\n\n-- ===================================================================\n-- test generated columns\n-- ===================================================================\n--Testcase 637:\ncreate foreign table grem1 (\n  a int options (key 'true'),\n  b int generated always as (a * 2) stored)\n  server sqlite_svr options(table 'grem1_post14');\n--Testcase 638:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 823:\ninsert into grem1 (a) values (1), (2);\n--Testcase 639:\nexplain (verbose, costs off)\nupdate grem1 set a = 22 where a = 2;\n--Testcase 824:\nupdate grem1 set a = 22 where a = 2;\n--Testcase 640:\nselect * from grem1;\n--Testcase 825:\ndelete from grem1;\n\n-- -- test copy from\n-- copy grem1 from stdin;\n-- 1\n-- 2\n-- \\.\n-- select * from grem1;\n-- delete from grem1;\n\n-- test batch insert\n--Testcase 826:\nalter server sqlite_svr options (add batch_size '10');\n--Testcase 827:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 828:\ninsert into grem1 (a) values (1), (2);\n--Testcase 829:\nselect * from grem1;\n--Testcase 830:\ndelete from grem1;\n\n-- -- batch insert with foreign partitions.\n-- -- This schema uses two partitions, one local and one remote with a modulo\n-- -- to loop across all of them in batches.\n-- create table tab_batch_local (id int, data text);\n-- insert into tab_batch_local select i, 'test'|| i from generate_series(1, 45) i;\n-- create table tab_batch_sharded (id int, data text) partition by hash(id);\n-- create table tab_batch_sharded_p0 partition of tab_batch_sharded\n--   for values with (modulus 2, remainder 0);\n-- create table tab_batch_sharded_p1_remote (id int, data text);\n-- create foreign table tab_batch_sharded_p1 partition of tab_batch_sharded\n--   for values with (modulus 2, remainder 1)\n--   server loopback options (table_name 'tab_batch_sharded_p1_remote');\n-- insert into tab_batch_sharded select * from tab_batch_local;\n-- select count(*) from tab_batch_sharded;\n-- drop table tab_batch_local;\n-- drop table tab_batch_sharded;\n-- drop table tab_batch_sharded_p1_remote;\n\n--Testcase 831:\nalter server sqlite_svr options (drop batch_size);\n\n-- ===================================================================\n-- test local triggers\n-- ===================================================================\n\n-- Trigger functions \"borrowed\" from triggers regress test.\n--Testcase 641:\nCREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$\nBEGIN\n\tRAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',\n\t\tTG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;\n\tRETURN NULL;\nEND;$$;\n\n--Testcase 642:\nCREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 1005:\nCREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n\n--Testcase 644:\nCREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger\nLANGUAGE plpgsql AS $$\n\ndeclare\n\toldnew text[];\n\trelid text;\n    argstr text;\nbegin\n\n\trelid := TG_relid::regclass;\n\targstr := '';\n\tfor i in 0 .. TG_nargs - 1 loop\n\t\tif i > 0 then\n\t\t\targstr := argstr || ', ';\n\t\tend if;\n\t\targstr := argstr || TG_argv[i];\n\tend loop;\n\n    RAISE NOTICE '%(%) % % % ON %',\n\t\ttg_name, argstr, TG_when, TG_level, TG_OP, relid;\n    oldnew := '{}'::text[];\n\tif TG_OP != 'INSERT' then\n\t\toldnew := array_append(oldnew, format('OLD: %s', OLD));\n\tend if;\n\n\tif TG_OP != 'DELETE' then\n\t\toldnew := array_append(oldnew, format('NEW: %s', NEW));\n\tend if;\n\n    RAISE NOTICE '%', array_to_string(oldnew, ',');\n\n\tif TG_OP = 'DELETE' then\n\t\treturn OLD;\n\telse\n\t\treturn NEW;\n\tend if;\nend;\n$$;\n\n-- Test basic functionality\n--Testcase 645:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 646:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 356:\ndelete from rem1;\n--Testcase 357:\ninsert into rem1 values(1,'insert');\n--Testcase 358:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 359:\nupdate rem1 set f2 = f2 || f2;\ntruncate rem1;\n\n\n-- cleanup\n--Testcase 647:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 648:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 649:\nDROP TRIGGER trig_stmt_before ON rem1;\n--Testcase 650:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n--Testcase 360:\nDELETE from rem1;\n\n-- Test multiple AFTER ROW triggers on a foreign table\n--Testcase 651:\nCREATE TRIGGER trig_row_after1\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 652:\nCREATE TRIGGER trig_row_after2\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 653:\ninsert into rem1 values(1,'insert');\n--Testcase 654:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 655:\nupdate rem1 set f2 = f2 || f2;\n--Testcase 656:\ndelete from rem1;\n\n-- cleanup\n--Testcase 657:\nDROP TRIGGER trig_row_after1 ON rem1;\n--Testcase 658:\nDROP TRIGGER trig_row_after2 ON rem1;\n\n-- Test WHEN conditions\n\n--Testcase 659:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 660:\nCREATE TRIGGER trig_row_after_insupd\nAFTER INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Insert or update not matching: nothing happens\n--Testcase 363:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 364:\nUPDATE rem1 set f2 = 'test';\n\n-- Insert or update matching: triggers are fired\n--Testcase 365:\nINSERT INTO rem1 values(2, 'update');\n--Testcase 366:\nUPDATE rem1 set f2 = 'update update' where f1 = '2';\n\n--Testcase 661:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 662:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Trigger is fired for f1=2, not for f1=1\n--Testcase 369:\nDELETE FROM rem1;\n\n-- cleanup\n--Testcase 663:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 664:\nDROP TRIGGER trig_row_after_insupd ON rem1;\n--Testcase 665:\nDROP TRIGGER trig_row_before_delete ON rem1;\n--Testcase 666:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n\n-- Test various RETURN statements in BEFORE triggers.\n\n--Testcase 667:\nCREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$\n  BEGIN\n    NEW.f2 := NEW.f2 || ' triggered !';\n    RETURN NEW;\n  END\n$$ language plpgsql;\n\n--Testcase 668:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n-- The new values should have 'triggered' appended\n--Testcase 370:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 371:\nSELECT f1, f2 from rem1;\n--Testcase 372:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 373:\nSELECT f1, f2 from rem1;\n--Testcase 374:\nUPDATE rem1 set f2 = '';\n--Testcase 375:\nSELECT f1, f2 from rem1;\n--Testcase 376:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 377:\nSELECT f1, f2 from rem1;\n\n--Testcase 669:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f1 = 10;          -- all columns should be transmitted\n--Testcase 670:\nUPDATE rem1 set f1 = 10;\n--Testcase 671:\nSELECT f1, f2 from rem1;\n\n--Testcase 378:\nDELETE FROM rem1;\n\n-- Add a second trigger, to check that the changes are propagated correctly\n-- from trigger to trigger\n--Testcase 672:\nCREATE TRIGGER trig_row_before_insupd2\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 379:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 380:\nSELECT f1, f2 from rem1;\n--Testcase 381:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 382:\nSELECT f1, f2 from rem1;\n--Testcase 383:\nUPDATE rem1 set f2 = '';\n--Testcase 384:\nSELECT f1, f2 from rem1;\n--Testcase 385:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 386:\nSELECT f1, f2 from rem1;\n\n--Testcase 673:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 674:\nDROP TRIGGER trig_row_before_insupd2 ON rem1;\n\n--Testcase 387:\nDELETE from rem1;\n\n--Testcase 388:\nINSERT INTO rem1 VALUES (1, 'test');\n\n-- Test with a trigger returning NULL\n--Testcase 675:\nCREATE FUNCTION trig_null() RETURNS TRIGGER AS $$\n  BEGIN\n    RETURN NULL;\n  END\n$$ language plpgsql;\n\n--Testcase 676:\nCREATE TRIGGER trig_null\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_null();\n\n-- Nothing should have changed.\n--Testcase 389:\nINSERT INTO rem1 VALUES (2, 'test2');\n\n--Testcase 390:\nSELECT f1, f2 from rem1;\n\n--Testcase 391:\nUPDATE rem1 SET f2 = 'test2';\n\n--Testcase 392:\nSELECT f1, f2 from rem1;\n\n--Testcase 393:\nDELETE from rem1;\n\n--Testcase 394:\nSELECT f1, f2 from rem1;\n\n--Testcase 677:\nDROP TRIGGER trig_null ON rem1;\n--Testcase 395:\nDELETE from rem1;\n\n-- Test a combination of local and remote triggers\n--Testcase 678:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 679:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 680:\nCREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 681:\nINSERT INTO rem1(f2) VALUES ('test');\n--Testcase 682:\nUPDATE rem1 SET f2 = 'testo';\n\n-- Test returning a system attribute\n--Testcase 683:\nINSERT INTO rem1(f2) VALUES ('test');\n\n-- cleanup\n--Testcase 684:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 685:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 686:\nDROP TRIGGER trig_local_before ON rem1;\n\n\n-- Test direct foreign table modification functionality\n--Testcase 832:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 833:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1 WHERE false;     -- currently can't be pushed down\n\n-- Test with statement-level triggers\n--Testcase 687:\nCREATE TRIGGER trig_stmt_before\n\tBEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 396:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 397:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 688:\nDROP TRIGGER trig_stmt_before ON rem1;\n\n--Testcase 689:\nCREATE TRIGGER trig_stmt_after\n\tAFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 398:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 399:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 690:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n-- Test with row-level ON INSERT triggers\n--Testcase 691:\nCREATE TRIGGER trig_row_before_insert\nBEFORE INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 400:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 401:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 692:\nDROP TRIGGER trig_row_before_insert ON rem1;\n\n--Testcase 693:\nCREATE TRIGGER trig_row_after_insert\nAFTER INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 402:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 403:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 694:\nDROP TRIGGER trig_row_after_insert ON rem1;\n\n-- Test with row-level ON UPDATE triggers\n--Testcase 695:\nCREATE TRIGGER trig_row_before_update\nBEFORE UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 404:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 405:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 696:\nDROP TRIGGER trig_row_before_update ON rem1;\n\n--Testcase 697:\nCREATE TRIGGER trig_row_after_update\nAFTER UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 406:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 407:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 698:\nDROP TRIGGER trig_row_after_update ON rem1;\n\n-- Test with row-level ON DELETE triggers\n--Testcase 699:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 408:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 409:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 700:\nDROP TRIGGER trig_row_before_delete ON rem1;\n\n--Testcase 701:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 410:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 411:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 702:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n-- ===================================================================\n-- test inheritance features\n-- ===================================================================\n\n--Testcase 703:\nCREATE TABLE a (aa TEXT);\n--Testcase 834:\nALTER TABLE a SET (autovacuum_enabled = 'false');\n--Testcase 704:\nCREATE FOREIGN TABLE b (aa TEXT OPTIONS (key 'true'), bb TEXT) INHERITS (a)\n  SERVER sqlite_svr OPTIONS (table 'loct');\n\n--Testcase 412:\nINSERT INTO a(aa) VALUES('aaa');\n--Testcase 413:\nINSERT INTO a(aa) VALUES('aaaa');\n--Testcase 414:\nINSERT INTO a(aa) VALUES('aaaaa');\n\n--Testcase 415:\nINSERT INTO b(aa) VALUES('bbb');\n--Testcase 416:\nINSERT INTO b(aa) VALUES('bbbb');\n--Testcase 417:\nINSERT INTO b(aa) VALUES('bbbbb');\n\n--Testcase 418:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 419:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 420:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 421:\nUPDATE a SET aa = 'zzzzzz' WHERE aa LIKE 'aaaa%';\n\n--Testcase 422:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 423:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 424:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 425:\nUPDATE b SET aa = 'new';\n\n--Testcase 426:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 427:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 428:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 429:\nUPDATE a SET aa = 'newtoo';\n\n--Testcase 430:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 431:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 432:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 433:\nDELETE FROM a;\n\n--Testcase 434:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 435:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 436:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 705:\nDROP TABLE a CASCADE;\n\n-- Check SELECT FOR UPDATE/SHARE with an inherited source table\n\n--Testcase 706:\ncreate table foo (f1 int, f2 int);\n--Testcase 707:\ncreate foreign table foo2 (f3 int OPTIONS (key 'true')) inherits (foo)\n  server sqlite_svr options (table 'loct1');\n--Testcase 708:\ncreate table bar (f1 int, f2 int);\n--Testcase 709:\ncreate foreign table bar2 (f3 int OPTIONS (key 'true')) inherits (bar)\n  server sqlite_svr options (table 'loct2');\n\n--Testcase 835:\nalter table foo set (autovacuum_enabled = 'false');\n--Testcase 836:\nalter table bar set (autovacuum_enabled = 'false');\n\n--Testcase 437:\ninsert into foo values(1,1);\n--Testcase 438:\ninsert into foo values(3,3);\n--Testcase 439:\ninsert into foo2 values(2,2,2);\n--Testcase 440:\ninsert into foo2 values(4,4,4);\n--Testcase 441:\ninsert into bar values(1,11);\n--Testcase 442:\ninsert into bar values(2,22);\n--Testcase 443:\ninsert into bar values(6,66);\n--Testcase 444:\ninsert into bar2 values(3,33,33);\n--Testcase 445:\ninsert into bar2 values(4,44,44);\n--Testcase 446:\ninsert into bar2 values(7,77,77);\n\n--Testcase 447:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for update;\n--Testcase 448:\nselect * from bar where f1 in (select f1 from foo) for update;\n\n--Testcase 449:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for share;\n--Testcase 450:\nselect * from bar where f1 in (select f1 from foo) for share;\n\n-- Now check SELECT FOR UPDATE/SHARE with an inherited source table,\n-- where the parent is itself a foreign table\n--Testcase 837:\ncreate foreign table foo2child (f3 int) inherits (foo2)\n  server sqlite_svr options (table 'loct4_2');\n\n--Testcase 838:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 839:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 840:\ndrop foreign table foo2child;\n\n-- And with a local child relation of the foreign table parent\n--Testcase 841:\ncreate table foo2child (f3 int) inherits (foo2);\n\n--Testcase 842:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 843:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 844:\ndrop table foo2child;\n\n-- Check UPDATE with inherited target and an inherited source table\n--Testcase 451:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n--Testcase 452:\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n\n--Testcase 453:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Check UPDATE with inherited target and an appendrel subquery\n--Testcase 454:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n--Testcase 455:\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n\n--Testcase 456:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Test forcing the remote server to produce sorted data for a merge join,\n-- but the foreign table is an inheritance child.\n--truncate table loct1;\n--Testcase 710:\ndelete from foo2;\ntruncate table only foo;\n\\set num_rows_foo 2000\n--Testcase 711:\ninsert into foo2 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2);\n--Testcase 712:\ninsert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2);\n--Testcase 845:\nSET enable_hashjoin to false;\n--Testcase 846:\nSET enable_nestloop to false;\n--alter foreign table foo2 options (use_remote_estimate 'true');\n--create index i_loct1_f1 on loct1(f1);\n--Testcase 713:\ncreate index i_foo_f1 on foo(f1);\nanalyze foo;\n--analyze loct1;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 714:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 715:\nselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 716:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 717:\nselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 847:\nRESET enable_hashjoin;\n--Testcase 848:\nRESET enable_nestloop;\n\n-- Test that WHERE CURRENT OF is not supported\nbegin;\ndeclare c cursor for select * from bar where f1 = 7;\n--Testcase 457:\nfetch from c;\n--Testcase 458:\nupdate bar set f2 = null where current of c;\nrollback;\n\n--Testcase 459:\nexplain (verbose, costs off)\ndelete from foo where f1 < 5;\n--Testcase 460:\ndelete from foo where f1 < 5;\n--Testcase 461:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 462:\nupdate bar set f2 = f2 + 100;\n--Testcase 463:\nselect * from bar;\n\n-- Test that UPDATE/DELETE with inherited target works with row-level triggers\n--Testcase 718:\nCREATE TRIGGER trig_row_before\nBEFORE UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 719:\nCREATE TRIGGER trig_row_after\nAFTER UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 464:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 465:\nupdate bar set f2 = f2 + 100;\n\n--Testcase 466:\nexplain (verbose, costs off)\ndelete from bar where f2 < 400;\n--Testcase 467:\ndelete from bar where f2 < 400;\n\n-- cleanup\n--Testcase 720:\ndrop table foo cascade;\n--Testcase 721:\ndrop table bar cascade;\n\n-- Test pushing down UPDATE/DELETE joins to the remote server\n--Testcase 722:\ncreate table parent (a int, b text);\n--Testcase 723:\ncreate foreign table remt1 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct3');\n--Testcase 724:\ncreate foreign table remt2 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct4');\n--Testcase 849:\nalter foreign table remt1 inherit parent;\n\n--Testcase 468:\ninsert into remt1 values (1, 'foo');\n--Testcase 469:\ninsert into remt1 values (2, 'bar');\n--Testcase 470:\ninsert into remt2 values (1, 'foo');\n--Testcase 471:\ninsert into remt2 values (2, 'bar');\n\n--Testcase 472:\nexplain (verbose, costs off)\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 473:\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 474:\nselect * from parent inner join remt2 on (parent.a = remt2.a);\n--Testcase 475:\nexplain (verbose, costs off)\ndelete from parent using remt2 where parent.a = remt2.a;\n--Testcase 476:\ndelete from parent using remt2 where parent.a = remt2.a;\n\n-- cleanup\n--Testcase 725:\ndrop foreign table remt1;\n--Testcase 726:\ndrop foreign table remt2;\n--Testcase 727:\ndrop table parent;\n\n/* \n-- Skip these tests, sqlite fdw does not support partition table, check constraint, copy from\n-- ===================================================================\n-- test tuple routing for foreign-table partitions\n-- ===================================================================\n\n-- Test insert tuple routing\ncreate table itrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table itrtest attach partition remp1 for values in (1);\nalter table itrtest attach partition remp2 for values in (2);\n\ninsert into itrtest values (1, 'foo');\ninsert into itrtest values (1, 'bar') returning *;\ninsert into itrtest values (2, 'baz');\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\n\nselect tableoid::regclass, * FROM itrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from itrtest;\n\n-- MERGE ought to fail cleanly\nmerge into itrtest using (select 1, 'foo') as source on (true)\n  when matched then do nothing;\n\ncreate unique index loct1_idx on loct1 (a);\n\n-- DO NOTHING without an inference specification is supported\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\n\n-- But other cases are not supported\ninsert into itrtest values (1, 'bar') on conflict (a) do nothing;\ninsert into itrtest values (1, 'bar') on conflict (a) do update set b = excluded.b;\n\nselect tableoid::regclass, * FROM itrtest;\n\ndelete from itrtest;\n\ndrop index loct1_idx;\n\n-- Test that remote triggers work with insert tuple routing\ncreate function br_insert_trigfunc() returns trigger as $$\nbegin\n\tnew.b := new.b || ' triggered !';\n\treturn new;\nend\n$$ language plpgsql;\ncreate trigger loct1_br_insert_trigger before insert on loct1\n\tfor each row execute procedure br_insert_trigfunc();\ncreate trigger loct2_br_insert_trigger before insert on loct2\n\tfor each row execute procedure br_insert_trigfunc();\n\n-- The new values are concatenated with ' triggered !'\ninsert into itrtest values (1, 'foo') returning *;\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\nwith result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result;\n\ndrop trigger loct1_br_insert_trigger on loct1;\ndrop trigger loct2_br_insert_trigger on loct2;\n\ndrop table itrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- Test update tuple routing\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table loct (a int check (a in (1)), b text);\ncreate foreign table remp (a int check (a in (1)), b text) server loopback options (table_name 'loct');\ncreate table locp (a int check (a in (2)), b text);\nalter table utrtest attach partition remp for values in (1);\nalter table utrtest attach partition locp for values in (2);\n\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- It's not allowed to move a row from a partition that is foreign to another\nupdate utrtest set a = 2 where b = 'foo' returning *;\n\n-- But the reverse is allowed\nupdate utrtest set a = 1 where b = 'qux' returning *;\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- The executor should not let unexercised FDWs shut down\nupdate utrtest set a = 1 where b = 'foo';\n\n-- Test that remote triggers work with update tuple routing\ncreate trigger loct_br_insert_trigger before insert on loct\n\tfor each row execute procedure br_insert_trigfunc();\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition is a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition isn't a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 2 returning *;\n\ndrop trigger loct_br_insert_trigger on loct;\n\n-- We can move rows to a foreign partition that has been updated already,\n-- but can't move rows to a foreign partition that hasn't been updated yet\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- Test the former case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 returning *;\nupdate utrtest set a = 1 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\n\n-- Change the definition of utrtest so that the foreign partition get updated\n-- after the local partition\ndelete from utrtest;\nalter table utrtest detach partition remp;\ndrop foreign table remp;\nalter table loct drop constraint loct_a_check;\nalter table loct add check (a in (3));\ncreate foreign table remp (a int check (a in (3)), b text) server loopback options (table_name 'loct');\nalter table utrtest attach partition remp for values in (3);\ninsert into utrtest values (2, 'qux');\ninsert into utrtest values (3, 'xyzzy');\n\n-- Test the latter case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 returning *;\nupdate utrtest set a = 3 returning *; -- ERROR\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *;\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR\n\ndrop table utrtest;\ndrop table loct;\n\n-- Test copy tuple routing\ncreate table ctrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table ctrtest attach partition remp1 for values in (1);\nalter table ctrtest attach partition remp2 for values in (2);\n\ncopy ctrtest from stdin;\n1\tfoo\n2\tqux\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\n-- Copying into foreign partitions directly should work as well\ncopy remp1 from stdin;\n1\tbar\n\\.\n\nselect tableoid::regclass, * FROM remp1;\n\ndelete from ctrtest;\n\n-- Test copy tuple routing with the batch_size option enabled\nalter server loopback options (add batch_size '2');\n\ncopy ctrtest from stdin;\n1\tfoo\n1\tbar\n2\tbaz\n2\tqux\n1\ttest1\n2\ttest2\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from ctrtest;\n\nalter server loopback options (drop batch_size);\n\n\ndrop table ctrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- ===================================================================\n-- test COPY FROM\n-- ===================================================================\n\ncreate table loc2 (f1 int, f2 text);\nalter table loc2 set (autovacuum_enabled = 'false');\ncreate foreign table rem2 (f1 int, f2 text) server loopback options(table_name 'loc2');\n\n-- Test basic functionality\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndelete from rem2;\n\n-- Test check constraints\nalter table loc2 add constraint loc2_f1positive check (f1 >= 0);\nalter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- check constraint is enforced on the remote side, not locally\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\ncopy rem2 from stdin; -- ERROR\n-1\txyzzy\n\\.\nselect * from rem2;\n\nalter foreign table rem2 drop constraint rem2_f1positive;\nalter table loc2 drop constraint loc2_f1positive;\n\ndelete from rem2;\n\n-- Test local triggers\ncreate trigger trig_stmt_before before insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_stmt_after after insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before on rem2;\ndrop trigger trig_row_after on rem2;\ndrop trigger trig_stmt_before on rem2;\ndrop trigger trig_stmt_after on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_row_before_insert before insert on rem2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on rem2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on rem2;\n\ndelete from rem2;\n\n-- Test remote triggers\ncreate trigger trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on loc2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on loc2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on loc2;\n\ndelete from rem2;\n\n-- Test a combination of local and remote triggers\ncreate trigger rem2_trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger rem2_trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger loc2_trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger rem2_trig_row_before on rem2;\ndrop trigger rem2_trig_row_after on rem2;\ndrop trigger loc2_trig_row_before_insert on loc2;\n\ndelete from rem2;\n\n-- test COPY FROM with foreign table created in the same transaction\ncreate table loc3 (f1 int, f2 text);\nbegin;\ncreate foreign table rem3 (f1 int, f2 text)\n\tserver loopback options(table_name 'loc3');\ncopy rem3 from stdin;\n1\tfoo\n2\tbar\n\\.\ncommit;\nselect * from rem3;\ndrop foreign table rem3;\ndrop table loc3;\n*/\n-- Test COPY FROM with the batch_size option enabled\n-- alter server loopback options (add batch_size '2');\n\n-- -- Test basic functionality\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- delete from rem2;\n\n-- -- Test check constraints\n-- alter table loc2 add constraint loc2_f1positive check (f1 >= 0);\n-- alter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- -- check constraint is enforced on the remote side, not locally\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- copy rem2 from stdin; -- ERROR\n-- -1\txyzzy\n-- \\.\n-- select * from rem2;\n\n-- alter foreign table rem2 drop constraint rem2_f1positive;\n-- alter table loc2 drop constraint loc2_f1positive;\n\n-- delete from rem2;\n\n-- -- Test remote triggers\n-- create trigger trig_row_before_insert before insert on loc2\n-- \tfor each row execute procedure trig_row_before_insupdate();\n\n-- -- The new values are concatenated with ' triggered !'\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- drop trigger trig_row_before_insert on loc2;\n\n-- delete from rem2;\n\n-- create trigger trig_null before insert on loc2\n-- \tfor each row execute procedure trig_null();\n\n-- -- Nothing happens\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- drop trigger trig_null on loc2;\n\n-- delete from rem2;\n\n-- -- Check with zero-column foreign table; batch insert will be disabled\n-- alter table loc2 drop column f1;\n-- alter table loc2 drop column f2;\n-- alter table rem2 drop column f1;\n-- alter table rem2 drop column f2;\n-- copy rem2 from stdin;\n\n\n-- select * from rem2;\n\n-- delete from rem2;\n\n-- alter server loopback options (drop batch_size);\n\n-- ===================================================================\n-- test for TRUNCATE\n-- ===================================================================\n--Testcase 850:\nCREATE FOREIGN TABLE tru_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable0');\n--Testcase 851:\nINSERT INTO \"S 1\".tru_rtable0 (SELECT x FROM generate_series(1,10) x);\n\n-- CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id);\n-- CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable\n--                             FOR VALUES WITH (MODULUS 2, REMAINDER 0);\n-- CREATE TABLE tru_rtable1 (id int primary key);\n-- CREATE FOREIGN TABLE tru_ftable__p1 (id int)\n--        SERVER sqlite_svr OPTIONS (table 'tru_ptable');\n-- INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x);\n\n--Testcase 852:\nINSERT INTO \"S 1\".tru_pk_table (SELECT x FROM generate_series(1,10) x);\n--Testcase 853:\nINSERT INTO \"S 1\".tru_fk_table(fkey) (SELECT x % 10 + 1 FROM generate_series(5,25) x);\n--Testcase 854:\nCREATE FOREIGN TABLE tru_pk_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_pk_table');\n\n--Testcase 855:\nCREATE FOREIGN TABLE tru_ftable_parent (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_parent');\n--Testcase 856:\nCREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_child');\n--Testcase 857:\nINSERT INTO \"S 1\".tru_rtable_parent (SELECT x FROM generate_series(1,8) x);\n--Testcase 858:\nINSERT INTO \"S 1\".tru_rtable_child  (SELECT x FROM generate_series(10, 18) x);\n\n-- normal truncate\n--Testcase 859:\nSELECT sum(id) FROM tru_ftable;        -- 55\nTRUNCATE tru_ftable;\n--Testcase 860:\nSELECT count(*) FROM \"S 1\".tru_rtable0;\t\t-- 0\n--Testcase 861:\nSELECT count(*) FROM tru_ftable;\t\t-- 0\n\n-- 'truncatable' option\n--Testcase 862:\nALTER SERVER sqlite_svr OPTIONS (ADD truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 863:\nALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n--Testcase 864:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 865:\nALTER SERVER sqlite_svr OPTIONS (DROP truncatable);\n--Testcase 866:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 867:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n\n-- -- partitioned table with both local and foreign tables as partitions\n-- SELECT sum(id) FROM tru_ptable;        -- 155\n-- TRUNCATE tru_ptable;\n-- SELECT count(*) FROM tru_ptable;\t\t-- 0\n-- SELECT count(*) FROM tru_ptable__p0;\t-- 0\n-- SELECT count(*) FROM tru_ftable__p1;\t-- 0\n-- SELECT count(*) FROM tru_rtable1;\t\t-- 0\n\n-- 'CASCADE' option\n--Testcase 868:\nSELECT sum(id) FROM tru_pk_ftable;      -- 55\n-- SQLite FDW support TRUNCATE command by executing DELETE statement without WHERE clause.\n-- In order to delete records in parent and child table subsequently,\n-- SQLite FDW executes \"PRAGMA foreign_keys = ON\" before executing DELETE statement.\nTRUNCATE tru_pk_ftable; -- success\nTRUNCATE tru_pk_ftable CASCADE; -- success\n--Testcase 869:\nSELECT count(*) FROM tru_pk_ftable;    -- 0\n--Testcase 870:\nSELECT count(*) FROM \"S 1\".tru_fk_table;\t\t-- also truncated,0\n\n-- truncate two tables at a command\n--Testcase 871:\nINSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x);\n--Testcase 872:\nINSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x);\n--Testcase 873:\nSELECT count(*) from tru_ftable; -- 8\n--Testcase 874:\nSELECT count(*) from tru_pk_ftable; -- 8\nTRUNCATE tru_ftable, tru_pk_ftable;\n--Testcase 875:\nSELECT count(*) from tru_ftable; -- 0\n--Testcase 876:\nSELECT count(*) from tru_pk_ftable; -- 0\n\n-- truncate with ONLY clause\n-- Since ONLY is specified, the table tru_ftable_child that inherits\n-- tru_ftable_parent locally is not truncated.\nTRUNCATE ONLY tru_ftable_parent;\n--Testcase 877:\nSELECT sum(id) FROM tru_ftable_parent;  -- 126\nTRUNCATE tru_ftable_parent;\n--Testcase 878:\nSELECT count(*) FROM tru_ftable_parent; -- 0\n\n-- -- in case when remote table has inherited children\n-- CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0);\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x);\n-- INSERT INTO \"S 1\".tru_rtable0_child (SELECT x FROM generate_series(10,14) x);\n-- SELECT sum(id) FROM tru_ftable;   -- 95\n\n-- -- Both parent and child tables in the foreign server are truncated\n-- -- even though ONLY is specified because ONLY has no effect\n-- -- when truncating a foreign table.\n-- TRUNCATE ONLY tru_ftable;\n-- SELECT count(*) FROM tru_ftable;   -- 0\n\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x);\n-- INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x);\n-- SELECT sum(id) FROM tru_ftable;\t\t-- 255\n-- TRUNCATE tru_ftable;\t\t\t-- truncate both of parent and child\n-- SELECT count(*) FROM tru_ftable;    -- 0\n\n-- cleanup\n--Testcase 879:\nDROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable;\n-- DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table,\n-- tru_rtable_parent,tru_rtable_child, tru_rtable0_child;\n\n-- ===================================================================\n-- test IMPORT FOREIGN SCHEMA\n-- ===================================================================\n\n--Testcase 728:\nCREATE SCHEMA import_dest1;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest1;\n--Testcase 477:\n\\det+ import_dest1.*\n--Testcase 478:\n\\d import_dest1.*\n\n-- Options\n--Testcase 729:\nCREATE SCHEMA import_dest2;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest2\n  OPTIONS (import_default 'true');\n--Testcase 479:\n\\det+ import_dest2.*\n--Testcase 480:\n\\d import_dest2.*\n\n-- Check LIMIT TO and EXCEPT\n--Testcase 730:\nCREATE SCHEMA import_dest3;\nIMPORT FOREIGN SCHEMA public LIMIT TO (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 481:\n\\det+ import_dest3.*\nIMPORT FOREIGN SCHEMA public EXCEPT (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 482:\n\\det+ import_dest3.*\n\n-- Assorted error cases\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest3;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO notthere;\nIMPORT FOREIGN SCHEMA public FROM SERVER nowhere INTO notthere;\n\n/*\n-- Skip these test, sqlite fdw does not support fetch_size option, partition table\n-- Check case of a type present only on the remote server.\n-- We can fake this by dropping the type locally in our transaction.\nCREATE TYPE \"Colors\" AS ENUM ('red', 'green', 'blue');\nCREATE TABLE import_source.t5 (c1 int, c2 text collate \"C\", \"Col\" \"Colors\");\n\nCREATE SCHEMA import_dest5;\nBEGIN;\nDROP TYPE \"Colors\" CASCADE;\nIMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)\n  FROM SERVER loopback INTO import_dest5;  -- ERROR\n\nROLLBACK;\n\nBEGIN;\n\n\nCREATE SERVER fetch101 FOREIGN DATA WRAPPER postgres_fdw OPTIONS( fetch_size '101' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nALTER SERVER fetch101 OPTIONS( SET fetch_size '202' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=202'];\n\nCREATE FOREIGN TABLE table30000 ( x int ) SERVER fetch101 OPTIONS ( fetch_size '30000' );\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nALTER FOREIGN TABLE table30000 OPTIONS ( SET fetch_size '60000');\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=60000'];\n\nROLLBACK;\n\n-- ===================================================================\n-- test partitionwise joins\n-- ===================================================================\nSET enable_partitionwise_join=on;\n\nCREATE TABLE fprt1 (a int, b int, c varchar) PARTITION BY RANGE(a);\nCREATE TABLE fprt1_p1 (LIKE fprt1);\nCREATE TABLE fprt1_p2 (LIKE fprt1);\nALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i;\nINSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i;\nCREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250)\n\tSERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true');\nCREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (TABLE_NAME 'fprt1_p2');\nANALYZE fprt1;\nANALYZE fprt1_p1;\nANALYZE fprt1_p2;\n\nCREATE TABLE fprt2 (a int, b int, c varchar) PARTITION BY RANGE(b);\nCREATE TABLE fprt2_p1 (LIKE fprt2);\nCREATE TABLE fprt2_p2 (LIKE fprt2);\nALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i;\nINSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i;\nCREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true');\nALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250);\nCREATE FOREIGN TABLE ftprt2_p2 PARTITION OF fprt2 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p2', use_remote_estimate 'true');\nANALYZE fprt2;\nANALYZE fprt2_p1;\nANALYZE fprt2_p2;\n\n-- inner join three tables\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\n\n-- left outer join + nullable clause\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\n\n-- with whole-row reference; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\n\n-- join with lateral reference\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\n\n-- with PHVs, partitionwise join selected but no join pushdown\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\n\n-- test FOR UPDATE; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\n\nRESET enable_partitionwise_join;\n\n\n-- ===================================================================\n-- test partitionwise aggregates\n-- ===================================================================\n\nCREATE TABLE pagg_tab (a int, b int, c text) PARTITION BY RANGE(a);\n\nCREATE TABLE pagg_tab_p1 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p2 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p3 (LIKE pagg_tab);\n\nINSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10;\nINSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10;\nINSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20;\n\n-- Create foreign partitions\nCREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1');\nCREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2');\nCREATE FOREIGN TABLE fpagg_tab_p3 PARTITION OF pagg_tab FOR VALUES FROM (20) TO (30) SERVER loopback OPTIONS (table_name 'pagg_tab_p3');\n\nANALYZE pagg_tab;\nANALYZE fpagg_tab_p1;\nANALYZE fpagg_tab_p2;\nANALYZE fpagg_tab_p3;\n\n-- When GROUP BY clause matches with PARTITION KEY.\n-- Plan with partitionwise aggregates is disabled\nSET enable_partitionwise_aggregate TO false;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Plan with partitionwise aggregates is enabled\nSET enable_partitionwise_aggregate TO true;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Check with whole-row reference\n-- Should have all the columns in the target list for the given relation\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- When GROUP BY clause does not match with PARTITION KEY.\nEXPLAIN (COSTS OFF)\nSELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700 ORDER BY 1;\n*/\n\n/*\n-- Skip these tests, sqlite fdw does not support nosuper user.\n-- ===================================================================\n-- access rights and superuser\n-- ===================================================================\n\n-- Non-superuser cannot create a FDW without a password in the connstr\nCREATE ROLE regress_nosuper NOSUPERUSER;\n\nGRANT USAGE ON FOREIGN DATA WRAPPER sqlite_fdw TO regress_nosuper;\n\nSET ROLE regress_nosuper;\n\nSHOW is_superuser;\n\n-- This will be OK, we can create the FDW\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_nopw FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- But creation of user mappings for non-superusers should fail\nCREATE USER MAPPING FOR public SERVER sqlite_nopw;\nCREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\nCREATE FOREIGN TABLE ft1_nopw (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_nopw;\n\nALTER FOREIGN TABLE ft1_nopw OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1_nopw ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- If we add a password to the connstr it'll fail, because we don't allow passwords\n-- in connstrs only in user mappings.\n\nALTER SERVER loopback_nopw OPTIONS (ADD password 'dummypw');\n\n\n-- If we add a password for our user mapping instead, we should get a different\n-- error because the password wasn't actually *used* when we run with trust auth.\n--\n-- This won't work with installcheck, but neither will most of the FDW checks.\n\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- Unpriv user cannot make the mapping passwordless\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- But the superuser can\nALTER USER MAPPING FOR regress_nosuper SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\nSET ROLE regress_nosuper;\n\n-- Should finally work now\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- unpriv user also cannot set sslcert / sslkey on the user mapping\n-- first set password_required so we see the right error messages\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (SET password_required 'true');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslcert 'foo.crt');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslkey 'foo.key');\n\n-- We're done with the role named after a specific user and need to check the\n-- changes to the public mapping.\nDROP USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\n-- This will fail again as it'll resolve the user mapping for public, which\n-- lacks password_required=false\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- The user mapping for public is passwordless and lacks the password_required=false\n-- mapping option, but will work because the current user is a superuser.\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- cleanup\nDROP USER MAPPING FOR public SERVER sqlite_nopw;\nDROP OWNED BY regress_nosuper;\nDROP ROLE regress_nosuper;\n\n-- Clean-up\nRESET enable_partitionwise_aggregate;\n*/\n-- Two-phase transactions are not supported.\nBEGIN;\n--Testcase 731:\nSELECT count(*) FROM ft1;\n-- error here\n--Testcase 732:\nPREPARE TRANSACTION 'fdw_tpc';\nROLLBACK;\n\n-- ===================================================================\n-- reestablish new connection\n-- ===================================================================\n-- -- Test case relative with option application_name is not suitable for SQLite FDW.\n-- -- Because this option is in libpq of postgres.\n-- -- Change application_name of remote connection to special one\n-- -- so that we can easily terminate the connection later.\n-- ALTER SERVER sqlite_svr OPTIONS (application_name 'fdw_retry_check');\n-- -- Make sure we have a remote connection.\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- (If a cache flush happens, the remote connection might have already been\n-- dropped; so code this step in a way that doesn't fail if no connection.)\n-- DO $$ BEGIN\n-- PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- END $$;\n-- -- This query should detect the broken connection when starting new remote\n-- -- transaction, reestablish new connection, and then succeed.\n-- BEGIN;\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- If we detect the broken connection when starting a new remote\n-- -- subtransaction, we should fail instead of establishing a new connection.\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- DO $$ BEGIN\n-- PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- END $$;\n-- SAVEPOINT s;\n-- -- The text of the error might vary across platforms, so only show SQLSTATE.\n-- \\set VERBOSITY sqlstate\n-- SELECT 1 FROM ft1 LIMIT 1;    -- should fail\n-- \\set VERBOSITY default\n-- COMMIT;\n\n-- =============================================================================\n-- test connection invalidation cases and sqlite_fdw_get_connections function\n-- =============================================================================\n-- Let's ensure to close all the existing cached connections.\n--Testcase 880:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 881:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- This test case is for closing the connection in sqlitefdw_xact_callback\nBEGIN;\n-- Connection xact depth becomes 1 i.e. the connection is in midst of the xact.\n--Testcase 882:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 883:\nSELECT 1 FROM ft7 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3 should be\n-- output.\n--Testcase 884:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Connections are not closed at the end of the alter and drop statements.\n-- That's because the connections are in midst of this xact,\n-- they are just marked as invalid in sqlitefdw_inval_callback.\n--Testcase 885:\nALTER SERVER sqlite_svr OPTIONS (ADD keep_connections 'off');\n--Testcase 886:\nDROP SERVER sqlite_svr3 CASCADE;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3\n-- should be output as invalid connections. Also the server name for\n-- sqlite_svr3 should be NULL because the server was dropped.\n--Testcase 887:\nSELECT * FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- The invalid connections get closed in sqlitefdw_xact_callback during commit.\nCOMMIT;\n--Testcase 888:\nALTER SERVER sqlite_svr OPTIONS (DROP keep_connections);\n-- All cached connections were closed while committing above xact, so no\n-- records should be output.\n--Testcase 889:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =======================================================================\n-- test sqlite_fdw_disconnect and sqlite_fdw_disconnect_all functions\n-- =======================================================================\nBEGIN;\n-- Ensure to cache loopback connection.\n--Testcase 890:\nSELECT 1 FROM ft1 LIMIT 1;\n-- Ensure to cache loopback2 connection.\n--Testcase 891:\nSELECT 1 FROM ft6 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 892:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Issue a warning and return false as sqlite_svr connection is still in use and\n-- can not be closed.\n--Testcase 893:\nSELECT sqlite_fdw_disconnect('sqlite_svr');\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 894:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Return false as connections are still in use, warnings are issued.\n-- But disable warnings temporarily because the order of them is not stable.\n--Testcase 895:\nSET client_min_messages = 'ERROR';\n--Testcase 896:\nSELECT sqlite_fdw_disconnect_all();\n--Testcase 897:\nRESET client_min_messages;\nCOMMIT;\n-- Ensure that sqlite_svr2 connection is closed.\n--Testcase 898:\nSELECT 1 FROM sqlite_fdw_disconnect('sqlite_svr2');\n--Testcase 899:\nSELECT server_name FROM sqlite_fdw_get_connections() WHERE server_name = 'sqlite_svr2';\n-- Return false as sqlite_svr2 connection is closed already.\n--Testcase 900:\nSELECT sqlite_fdw_disconnect('sqlite_svr2');\n-- Return an error as there is no foreign server with given name.\n--Testcase 901:\nSELECT sqlite_fdw_disconnect('unknownserver');\n-- Let's ensure to close all the existing cached connections.\n--Testcase 902:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 903:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =============================================================================\n-- test case for having multiple cached connections for a foreign server\n-- SQLite FDW does not support User Mapping, so cached connection is identified\n-- by only serverid (not like other FDWs use key including serverid and userid),\n-- and there is only one server for all users, so there is only one cached connection.\n-- In case of using key including serverid and userid, if many users are used,\n-- there will be many cached connections.\n-- =============================================================================\n--Testcase 904:\nCREATE ROLE regress_multi_conn_user1 SUPERUSER;\n--Testcase 905:\nCREATE ROLE regress_multi_conn_user2 SUPERUSER;\n--Testcase 906:\n-- CREATE USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 907:\n-- CREATE USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n\nBEGIN;\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user1\n--Testcase 908:\nSET ROLE regress_multi_conn_user1;\n--Testcase 909:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 910:\nRESET ROLE;\n\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user2\n--Testcase 911:\nSET ROLE regress_multi_conn_user2;\n--Testcase 912:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 913:\nRESET ROLE;\n\n-- Should output one cached connection for sqlite_svr server\n--Testcase 914:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\nCOMMIT;\n-- Let's ensure to close all the existing cached connections.\n--Testcase 915:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 916:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- Clean up\n--Testcase 917:\n-- DROP USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 918:\n-- DROP USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n--Testcase 919:\nDROP ROLE regress_multi_conn_user1;\n--Testcase 920:\nDROP ROLE regress_multi_conn_user2;\n\n-- ===================================================================\n-- Test foreign server level option keep_connections\n-- ===================================================================\n-- By default, the connections associated with foreign server are cached i.e.\n-- keep_connections option is on. Set it to off.\n--Testcase 921:\nALTER SERVER sqlite_svr OPTIONS (keep_connections 'off');\n-- connection to sqlite_svr server is closed at the end of xact\n-- as keep_connections was set to off.\n--Testcase 922:\nSELECT 1 FROM ft1 LIMIT 1;\n-- No cached connections, so no records should be output.\n--Testcase 923:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n--Testcase 924:\nALTER SERVER sqlite_svr OPTIONS (SET keep_connections 'on');\n\n-- ===================================================================\n-- batch insert\n-- ===================================================================\n\nBEGIN;\n\n--Testcase 925:\nCREATE SERVER batch10 FOREIGN DATA WRAPPER sqlite_fdw OPTIONS( batch_size '10' );\n\n--Testcase 926:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 927:\nALTER SERVER batch10 OPTIONS( SET batch_size '20' );\n\n--Testcase 928:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 929:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=20'];\n\n--Testcase 930:\nCREATE FOREIGN TABLE table30 ( x int ) SERVER batch10 OPTIONS ( batch_size '30' );\n\n--Testcase 931:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 932:\nALTER FOREIGN TABLE table30 OPTIONS ( SET batch_size '40');\n\n--Testcase 933:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 934:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=40'];\n\nROLLBACK;\n\n--Testcase 935:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '10' );\n--Testcase 936:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 937:\nINSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 938:\nINSERT INTO ftable SELECT * FROM generate_series(11, 31) i;\n--Testcase 939:\nINSERT INTO ftable VALUES (32);\n--Testcase 940:\nINSERT INTO ftable VALUES (33), (34);\n--Testcase 946:\nSELECT COUNT(*) FROM ftable;\n--Testcase 947:\nDELETE FROM ftable;\n--Testcase 948:\nDROP FOREIGN TABLE ftable;\n\n-- Disable batch insert\n--Testcase 949:\nCREATE FOREIGN TABLE ftable ( x int ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '1' );\n--Testcase 950:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2);\n--Testcase 951:\nINSERT INTO ftable VALUES (1), (2);\n--Testcase 952:\nSELECT COUNT(*) FROM ftable;\n\n-- Disable batch inserting into foreign tables with BEFORE ROW INSERT triggers\n-- even if the batch_size option is enabled.\n--Testcase 977:\nALTER FOREIGN TABLE ftable OPTIONS ( SET batch_size '10' );\n--Testcase 978:\nCREATE TRIGGER trig_row_before BEFORE INSERT ON ftable\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 980:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (3), (4);\n--Testcase 981:\nINSERT INTO ftable VALUES (3), (4);\n--Testcase 982:\nSELECT COUNT(*) FROM ftable;\n\n-- Clean up\n--Testcase 983:\nDROP TRIGGER trig_row_before ON ftable;\n--Testcase 953:\nDROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n\n-- -- Use partitioning\n-- CREATE TABLE batch_table ( x int ) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p0f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 0)\n\t-- SERVER sqlite_svr\n\t-- OPTIONS (table 'batch_table_p0', batch_size '10');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p1f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table 'batch_table_p1', batch_size '1');\n\n-- CREATE TABLE batch_table_p2\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 3, REMAINDER 2);\n\n-- INSERT INTO \"S 1\".batch_table SELECT * FROM generate_series(1, 66) i;\n-- SELECT COUNT(*) FROM \"S 1\".batch_table;\n\n-- -- Clean up\n-- DROP TABLE batch_table;\n-- DROP TABLE batch_table_p0;\n-- DROP TABLE batch_table_p1;\n\n-- Check that batched mode also works for some inserts made during\n-- cross-partition updates\n-- CREATE TABLE batch_cp_upd_test (a int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_cp_upd_test1 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test1_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table_name 'batch_cp_upd_test1', batch_size '10');\n-- CREATE TABLE batch_cp_upd_test2 PARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (2);\n-- CREATE TABLE batch_cp_upd_test3 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test3_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (3)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_cp_upd_test3', batch_size '1');\n-- -- Create statement triggers on remote tables that \"log\" any INSERTs\n-- -- performed on them.\n-- CREATE TABLE cmdlog (cmd text);\n-- CREATE FUNCTION log_stmt() RETURNS TRIGGER LANGUAGE plpgsql AS $$\n-- \tBEGIN INSERT INTO public.cmdlog VALUES (TG_OP || ' on ' || TG_RELNAME); RETURN NULL; END;\n-- $$;\n-- CREATE TRIGGER stmt_trig AFTER INSERT ON batch_cp_upd_test1\n-- \tFOR EACH STATEMENT EXECUTE FUNCTION log_stmt();\n-- CREATE TRIGGER stmt_trig AFTER INSERT ON batch_cp_upd_test3\n-- \tFOR EACH STATEMENT EXECUTE FUNCTION log_stmt();\n-- -- This update moves rows from the local partition 'batch_cp_upd_test2' to the\n-- -- foreign partition 'batch_cp_upd_test1', one that has insert batching\n-- -- enabled, so a single INSERT for both rows.\n-- INSERT INTO batch_cp_upd_test VALUES (2), (2);\n-- UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2;\n-- -- This one moves rows from the local partition 'batch_cp_upd_test2' to the\n-- -- foreign partition 'batch_cp_upd_test2', one that has insert batching\n-- -- disabled, so separate INSERTs for the two rows.\n-- INSERT INTO batch_cp_upd_test VALUES (2), (2);\n-- UPDATE batch_cp_upd_test t SET a = 3 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2;\n-- SELECT tableoid::regclass, * FROM batch_cp_upd_test ORDER BY 1;\n-- -- Should see 1 INSERT on batch_cp_upd_test1 and 2 on batch_cp_upd_test3 as\n-- -- described above.\n-- SELECT * FROM cmdlog ORDER BY 1;\n\n-- -- Clean up\n-- DROP TABLE batch_cp_upd_test;\n-- DROP TABLE batch_cp_upd_test1;\n-- DROP TABLE batch_cp_upd_test3;\n-- DROP TABLE cmdlog;\n-- DROP FUNCTION log_stmt();\n\n-- -- Use partitioning\n-- ALTER SERVER loopback OPTIONS (ADD batch_size '10');\n\n-- CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p0f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 0)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p0');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p1f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 1)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p1');\n\n-- INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i;\n-- SELECT COUNT(*) FROM batch_table;\n-- SELECT * FROM batch_table ORDER BY x;\n\n-- -- Clean up\n-- DROP TABLE batch_table;\n-- DROP TABLE batch_table_p0;\n-- DROP TABLE batch_table_p1;\n\n-- ALTER SERVER loopback OPTIONS (DROP batch_size);\n\n-- Test that pending inserts are handled properly when needed\n-- CREATE TABLE batch_table (a text, b int);\n-- CREATE FOREIGN TABLE ftable (a text, b int)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table', batch_size '2');\n-- CREATE TABLE ltable (a text, b int);\n-- CREATE FUNCTION ftable_rowcount_trigf() RETURNS trigger LANGUAGE plpgsql AS\n-- $$\n-- begin\n-- \traise notice '%: there are % rows in ftable',\n-- \t\tTG_NAME, (SELECT count(*) FROM ftable);\n-- \tif TG_OP = 'DELETE' then\n-- \t\treturn OLD;\n-- \telse\n-- \t\treturn NEW;\n-- \tend if;\n-- end;\n-- $$;\n-- CREATE TRIGGER ftable_rowcount_trigger\n-- BEFORE INSERT OR UPDATE OR DELETE ON ltable\n-- FOR EACH ROW EXECUTE PROCEDURE ftable_rowcount_trigf();\n\n-- WITH t AS (\n-- \tINSERT INTO ltable VALUES ('AAA', 42), ('BBB', 42) RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- WITH t AS (\n-- \tUPDATE ltable SET b = b + 100 RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- WITH t AS (\n-- \tDELETE FROM ltable RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- -- Clean up\n-- DROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n-- DROP TRIGGER ftable_rowcount_trigger ON ltable;\n-- DROP TABLE ltable;\n\n-- CREATE TABLE parent (a text, b int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_table (a text, b int);\n-- CREATE FOREIGN TABLE ftable\n-- \tPARTITION OF parent\n-- \tFOR VALUES IN ('AAA')\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table', batch_size '2');\n-- CREATE TABLE ltable\n-- \tPARTITION OF parent\n-- \tFOR VALUES IN ('BBB');\n-- CREATE TRIGGER ftable_rowcount_trigger\n-- BEFORE INSERT ON ltable\n-- FOR EACH ROW EXECUTE PROCEDURE ftable_rowcount_trigf();\n\n-- INSERT INTO parent VALUES ('AAA', 42), ('BBB', 42), ('AAA', 42), ('BBB', 42);\n\n-- SELECT tableoid::regclass, * FROM parent;\n\n-- -- Clean up\n-- DROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n-- DROP TRIGGER ftable_rowcount_trigger ON ltable;\n-- DROP TABLE ltable;\n-- DROP TABLE parent;\n-- DROP FUNCTION ftable_rowcount_trigf;\n\n\n-- ===================================================================\n-- test asynchronous execution\n-- ===================================================================\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD async_capable 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');\n\n-- CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);\n-- CREATE TABLE base_tbl1 (a int, b int, c text);\n-- CREATE TABLE base_tbl2 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)\n--   SERVER loopback OPTIONS (table_name 'base_tbl1');\n-- CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl2');\n-- INSERT INTO async_p1 SELECT 1000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- INSERT INTO async_p2 SELECT 2000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- -- simple queries\n-- CREATE TABLE result_tbl (a int, b int, c text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Check case where multiple partitions use the same connection\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- DROP FOREIGN TABLE async_p3;\n-- DROP TABLE base_tbl3;\n\n-- -- Check case where the partitioned table has local/remote partitions\n-- CREATE TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000);\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- partitionwise joins\n-- SET enable_partitionwise_join TO true;\n\n-- CREATE TABLE join_tbl (a1 int, b1 int, c1 text, a2 int, b2 int, c2 text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_partitionwise_join;\n\n-- -- Test rescan of an async Append node with do_exec_prune=false\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_hashjoin;\n\n-- -- Test interaction of async execution with plan-time partition pruning\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 3000;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 2000;\n\n-- -- Test interaction of async execution with run-time partition pruning\n-- SET plan_cache_mode TO force_generic_plan;\n\n-- PREPARE async_pt_query (int, int) AS\n--   INSERT INTO result_tbl SELECT * FROM async_pt WHERE a < $1 AND b === $2;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (3000, 505);\n-- EXECUTE async_pt_query (3000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (2000, 505);\n-- EXECUTE async_pt_query (2000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- RESET plan_cache_mode;\n\n-- CREATE TABLE local_tbl(a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo'), (2505, 505, 'bar');\n-- ANALYZE local_tbl;\n\n-- CREATE INDEX base_tbl1_idx ON base_tbl1 (a);\n-- CREATE INDEX base_tbl2_idx ON base_tbl2 (a);\n-- CREATE INDEX async_p3_idx ON async_p3 (a);\n-- ANALYZE base_tbl1;\n-- ANALYZE base_tbl2;\n-- ANALYZE async_p3;\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (use_remote_estimate 'true');\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (use_remote_estimate 'true');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (DROP use_remote_estimate);\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (DROP use_remote_estimate);\n\n-- DROP TABLE local_tbl;\n-- DROP INDEX base_tbl1_idx;\n-- DROP INDEX base_tbl2_idx;\n-- DROP INDEX async_p3_idx;\n\n-- -- UNION queries\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Disable async execution if we use gating Result nodes for pseudoconstant\n-- -- quals\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE CURRENT_USER = SESSION_USER;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER)\n-- UNION ALL\n-- (SELECT * FROM async_p2 WHERE CURRENT_USER = SESSION_USER);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM async_p2 WHERE b < 10)) s WHERE CURRENT_USER = SESSION_USER;\n\n-- -- Test that pending requests are processed properly\n-- SET enable_mergejoin TO false;\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n\n-- CREATE TABLE local_tbl (a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo');\n-- ANALYZE local_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n\n-- -- Check with foreign modify\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO remote_tbl VALUES (2505, 505, 'bar');\n\n-- CREATE TABLE base_tbl4 (a int, b int, c text);\n-- CREATE FOREIGN TABLE insert_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl4');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n\n-- SELECT * FROM insert_tbl ORDER BY a;\n\n-- -- Check with direct modify\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- DROP TABLE local_tbl;\n-- DROP FOREIGN TABLE remote_tbl;\n-- DROP FOREIGN TABLE insert_tbl;\n-- DROP TABLE base_tbl3;\n-- DROP TABLE base_tbl4;\n\n-- RESET enable_mergejoin;\n-- RESET enable_hashjoin;\n\n-- -- Test that UPDATE/DELETE with inherited target works with async_capable enabled\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n\n-- -- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously\n-- DELETE FROM async_p1;\n-- DELETE FROM async_p2;\n-- DELETE FROM async_p3;\n\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt;\n\n-- -- Clean up\n-- DROP TABLE async_pt;\n-- DROP TABLE base_tbl1;\n-- DROP TABLE base_tbl2;\n-- DROP TABLE result_tbl;\n-- DROP TABLE join_tbl;\n\n-- -- Test that an asynchronous fetch is processed before restarting the scan in\n-- -- ReScanForeignScan\n-- CREATE TABLE base_tbl (a int, b int);\n-- INSERT INTO base_tbl VALUES (1, 11), (2, 22), (3, 33);\n-- CREATE FOREIGN TABLE foreign_tbl (b int)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n-- CREATE FOREIGN TABLE foreign_tbl2 () INHERITS (foreign_tbl)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);\n-- SELECT a FROM base_tbl WHERE a IN (SELECT a FROM foreign_tbl);\n\n-- -- Clean up\n-- DROP FOREIGN TABLE foreign_tbl CASCADE;\n-- DROP TABLE base_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP async_capable);\n-- ALTER SERVER loopback2 OPTIONS (DROP async_capable);\n\n-- ===================================================================\n-- test invalid server and foreign table options\n-- ===================================================================\n-- -- Invalid fdw_startup_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_startup_cost '100$%$#$#');\n-- -- Invalid fdw_tuple_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_tuple_cost '100$%$#$#');\n-- -- Invalid fetch_size option\n-- CREATE FOREIGN TABLE inv_fsz (c1 int )\n-- \tSERVER loopback OPTIONS (fetch_size '100$%$#$#');\n-- Invalid batch_size option\n--Testcase 954:\nCREATE FOREIGN TABLE inv_bsz (c1 int )\n\tSERVER sqlite_svr OPTIONS (batch_size '100$%$#$#');\n\n-- -- No option is allowed to be specified at foreign data wrapper level\n-- ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (nonexistent 'fdw');\n\n-- -- ===================================================================\n-- -- test postgres_fdw.application_name GUC\n-- -- ===================================================================\n-- To avoid race conditions in checking the remote session's application_name,\n-- use this view to make the remote session itself read its application_name.\n-- CREATE VIEW my_application_name AS\n--   SELECT application_name FROM pg_stat_activity WHERE pid = pg_backend_pid();\n\n-- CREATE FOREIGN TABLE remote_application_name (application_name text)\n--   SERVER loopback2\n--   OPTIONS (schema_name 'public', table_name 'my_application_name');\n\n-- SELECT count(*) FROM remote_application_name;\n\n-- Specify escape sequences in application_name option of a server\n-- object so as to test that they are replaced with status information\n-- expectedly.  Note that we are also relying on ALTER SERVER to force\n-- the remote session to be restarted with its new application name.\n-- -- Since pg_stat_activity.application_name may be truncated to less than\n-- -- NAMEDATALEN characters, note that substring() needs to be used\n-- -- at the condition of test query to make sure that the string consisting\n-- -- of database name and process ID is also less than that.\n-- ALTER SERVER loopback2 OPTIONS (application_name 'fdw_%d%p');\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_database() || pg_backend_pid() for\n--       current_setting('max_identifier_length')::int);\n\n-- -- postgres_fdw.application_name overrides application_name option\n-- -- of a server object if both settings are present.\n-- ALTER SERVER loopback2 OPTIONS (SET application_name 'fdw_wrong');\n-- SET postgres_fdw.application_name TO 'fdw_%a%u%%';\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('application_name') ||\n--       CURRENT_USER || '%' for current_setting('max_identifier_length')::int);\n-- RESET postgres_fdw.application_name;\n\n-- -- Test %c (session ID) and %C (cluster name) escape sequences.\n-- ALTER SERVER loopback2 OPTIONS (SET application_name 'fdw_%C%c');\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('cluster_name') ||\n--       to_hex(trunc(EXTRACT(EPOCH FROM (SELECT backend_start FROM\n--       pg_stat_get_activity(pg_backend_pid()))))::integer) || '.' ||\n--       to_hex(pg_backend_pid())\n--       for current_setting('max_identifier_length')::int);\n\n-- -- Clean up.\n-- DROP FOREIGN TABLE remote_application_name;\n-- DROP VIEW my_application_name;\n\n-- -- ===================================================================\n-- -- test parallel commit and parallel abort\n-- -- ===================================================================\n-- ALTER SERVER loopback OPTIONS (ADD parallel_commit 'true');\n-- ALTER SERVER loopback OPTIONS (ADD parallel_abort 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD parallel_commit 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD parallel_abort 'true');\n\n-- CREATE TABLE ploc1 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem1 (f1 int, f2 text)\n--   SERVER loopback OPTIONS (table_name 'ploc1');\n-- CREATE TABLE ploc2 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem2 (f1 int, f2 text)\n--   SERVER loopback2 OPTIONS (table_name 'ploc2');\n\n-- BEGIN;\n-- INSERT INTO prem1 VALUES (101, 'foo');\n-- INSERT INTO prem2 VALUES (201, 'bar');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (102, 'foofoo');\n-- INSERT INTO prem2 VALUES (202, 'barbar');\n-- RELEASE SAVEPOINT s;\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- -- This tests executing DEALLOCATE ALL against foreign servers in parallel\n-- -- during pre-commit\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (103, 'baz');\n-- INSERT INTO prem2 VALUES (203, 'qux');\n-- ROLLBACK TO SAVEPOINT s;\n-- RELEASE SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (104, 'bazbaz');\n-- INSERT INTO prem2 VALUES (204, 'quxqux');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- BEGIN;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ABORT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- -- This tests executing DEALLOCATE ALL against foreign servers in parallel\n-- -- during post-abort\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ROLLBACK TO SAVEPOINT s;\n-- RELEASE SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ABORT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- ALTER SERVER loopback OPTIONS (DROP parallel_commit);\n-- ALTER SERVER loopback OPTIONS (DROP parallel_abort);\n-- ALTER SERVER loopback2 OPTIONS (DROP parallel_commit);\n-- ALTER SERVER loopback2 OPTIONS (DROP parallel_abort);\n\n-- -- ===================================================================\n-- -- test for ANALYZE sampling\n-- -- ===================================================================\n\n-- CREATE TABLE analyze_table (id int, a text, b bigint);\n\n-- CREATE FOREIGN TABLE analyze_ftable (id int, a text, b bigint)\n--        SERVER loopback OPTIONS (table_name 'analyze_rtable1');\n\n-- INSERT INTO analyze_table (SELECT x FROM generate_series(1,1000) x);\n-- ANALYZE analyze_table;\n\n-- SET default_statistics_target = 10;\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (analyze_sampling 'invalid');\n\n-- ALTER SERVER loopback OPTIONS (analyze_sampling 'auto');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'system');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'bernoulli');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'random');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'off');\n-- ANALYZE analyze_table;\n-- cleanup\n-- DROP FOREIGN TABLE analyze_ftable;\n-- DROP TABLE analyze_table;\n\n-- Clean-up\n--Testcase 733:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 734:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 735:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 736:\nDROP SERVER sqlite_svr2 CASCADE;\n--Testcase 737:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/extra/update.sql",
    "content": "--\n-- UPDATE syntax tests\n--\n--Testcase 32:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 33:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 34:\nCREATE FOREIGN TABLE update_test (\n    i   INT OPTIONS (key 'true'),\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n) SERVER sqlite_svr;\n\n--Testcase 35:\nCREATE FOREIGN TABLE upsert_test (\n    a   INT OPTIONS (key 'true'),\n    b   TEXT\n) SERVER sqlite_svr;\n\n\n--Testcase 1:\nINSERT INTO update_test VALUES (1, 5, 10, 'foo');\n--Testcase 2:\nINSERT INTO update_test(i, b, a) VALUES (2, 15, 10);\n\n--Testcase 3:\nSELECT * FROM update_test;\n\n--Testcase 4:\nUPDATE update_test SET a = DEFAULT, b = DEFAULT;\n\n--Testcase 5:\nSELECT * FROM update_test;\n\n-- aliases for the UPDATE target table\n--Testcase 6:\nUPDATE update_test AS t SET b = 10 WHERE t.a = 10;\n\n--Testcase 7:\nSELECT * FROM update_test;\n\n--Testcase 8:\nUPDATE update_test t SET b = t.b + 10 WHERE t.a = 10;\n\n--Testcase 9:\nSELECT * FROM update_test;\n\n--\n-- Test VALUES in FROM\n--\n\n--Testcase 10:\nUPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--Testcase 11:\nSELECT * FROM update_test;\n\n-- fail, wrong data type:\n--Testcase 12:\nUPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--\n-- Test multiple-set-clause syntax\n--\n\n--Testcase 13:\nINSERT INTO update_test SELECT i+2,a,b+1,c FROM update_test;\n--Testcase 14:\nSELECT * FROM update_test;\n\n--Testcase 15:\nUPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';\n--Testcase 16:\nSELECT * FROM update_test;\n--Testcase 17:\nUPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;\n--Testcase 18:\nSELECT * FROM update_test;\n-- fail, multi assignment to same column:\n--Testcase 19:\nUPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;\n\n-- uncorrelated sub-select:\n--Testcase 20:\nUPDATE update_test\n  SET (b,a) = (select a,b from update_test where b = 41 and c = 'car')\n  WHERE a = 100 AND b = 20;\n--Testcase 21:\nSELECT * FROM update_test;\n-- correlated sub-select:\n--Testcase 22:\nUPDATE update_test o\n  SET (b,a) = (select a+1,b from update_test i\n               where i.a=o.a and i.b=o.b and i.c is not distinct from o.c);\n--Testcase 23:\nSELECT * FROM update_test;\n-- fail, multiple rows supplied:\n--Testcase 24:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test);\n-- set to null if no rows supplied:\n--Testcase 25:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000)\n  WHERE a = 11;\n--Testcase 26:\nSELECT * FROM update_test;\n-- *-expansion should work in this context:\n--Testcase 27:\nUPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 100)) AS v(i, j)\n  WHERE update_test.a = v.i;\n-- you might expect this to work, but syntactically it's not a RowExpr:\n--Testcase 28:\nUPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 101)) AS v(i, j)\n  WHERE update_test.a = v.i;\n\n-- if an alias for the target table is specified, don't allow references\n-- to the original table name\n--Testcase 29:\nUPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;\n\n-- Make sure that we can update to a TOASTed value.\n--Testcase 30:\nUPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';\n--Testcase 31:\nSELECT a, b, char_length(c) FROM update_test;\n\n-- Check multi-assignment with a Result node to handle a one-time filter.\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 37:\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 38:\nSELECT a, b, char_length(c) FROM update_test;\n\n/* Skip, sqlite fdw does not support ON CONFLICT DO UPDATE\n-- Test ON CONFLICT DO UPDATE\nINSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');\n-- uncorrelated  sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nINSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a)\n  RETURNING *;\n-- correlated sub-select (EXCLUDED.* alias):\nINSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING *;\n\n-- ON CONFLICT using system attributes in RETURNING, testing both the\n-- inserting and updating paths. See bug report at:\n-- https://www.postgresql.org/message-id/73436355-6432-49B1-92ED-1FE4F7E7E100%40finefun.com.au\nINSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = 0 AS xmax_correct;\n-- currently xmax is set after a conflict - that's probably not good,\n-- but it seems worthwhile to have to be explicit if that changes.\nINSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct;\n\n\nDROP FOREIGN TABLE update_test;\nDROP FOREIGN TABLE upsert_test;\n*/\n\n/*Skip, sqlite fdw does not support create partition table\n-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children\n\nCREATE TABLE upsert_test (\n    a   INT PRIMARY KEY,\n    b   TEXT\n) PARTITION BY LIST (a);\n\nCREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1);\nCREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);\nALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2);\n\nINSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo');\n-- uncorrelated sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nWITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test\n  VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *;\n\nDROP TABLE upsert_test;\n\n---------------------------\n-- UPDATE with row movement\n---------------------------\n\n-- When a partitioned table receives an UPDATE to the partitioned key and the\n-- new values no longer meet the partition's bound, the row must be moved to\n-- the correct partition for the new partition key (if one exists). We must\n-- also ensure that updatable views on partitioned tables properly enforce any\n-- WITH CHECK OPTION that is defined. The situation with triggers in this case\n-- also requires thorough testing as partition key updates causing row\n-- movement convert UPDATEs into DELETE+INSERT.\n\nCREATE TABLE range_parted (\n\ta text,\n\tb bigint,\n\tc numeric,\n\td int,\n\te varchar\n) PARTITION BY RANGE (a, b);\n\n-- Create partitions intentionally in descending bound order, so as to test\n-- that update-row-movement works with the leaf partitions not in bound order.\nCREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);\nALTER TABLE range_parted ATTACH PARTITION part_b_20_b_30 FOR VALUES FROM ('b', 20) TO ('b', 30);\nCREATE TABLE part_b_10_b_20 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY RANGE (c);\nCREATE TABLE part_b_1_b_10 PARTITION OF range_parted FOR VALUES FROM ('b', 1) TO ('b', 10);\nALTER TABLE range_parted ATTACH PARTITION part_b_10_b_20 FOR VALUES FROM ('b', 10) TO ('b', 20);\nCREATE TABLE part_a_10_a_20 PARTITION OF range_parted FOR VALUES FROM ('a', 10) TO ('a', 20);\nCREATE TABLE part_a_1_a_10 PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('a', 10);\n\n-- Check that partition-key UPDATE works sanely on a partitioned table that\n-- does not have any child partitions.\nUPDATE part_b_10_b_20 set b = b - 6;\n\n-- Create some more partitions following the above pattern of descending bound\n-- order, but let's make the situation a bit more complex by having the\n-- attribute numbers of the columns vary from their parent partition.\nCREATE TABLE part_c_100_200 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY range (abs(d));\nALTER TABLE part_c_100_200 DROP COLUMN e, DROP COLUMN c, DROP COLUMN a;\nALTER TABLE part_c_100_200 ADD COLUMN c numeric, ADD COLUMN e varchar, ADD COLUMN a text;\nALTER TABLE part_c_100_200 DROP COLUMN b;\nALTER TABLE part_c_100_200 ADD COLUMN b bigint;\nCREATE TABLE part_d_1_15 PARTITION OF part_c_100_200 FOR VALUES FROM (1) TO (15);\nCREATE TABLE part_d_15_20 PARTITION OF part_c_100_200 FOR VALUES FROM (15) TO (20);\n\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_100_200 FOR VALUES FROM (100) TO (200);\n\nCREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_1_100 FOR VALUES FROM (1) TO (100);\n\n\\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'\n\\set show_data 'select tableoid::regclass::text COLLATE \"C\" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'\n:init_range_parted;\n:show_data;\n\n-- The order of subplans should be in bound order\nEXPLAIN (costs off) UPDATE range_parted set c = c - 50 WHERE c > 97;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_c_100_200 set c = c - 20, d = c WHERE c = 105;\n-- fail, no partition key update, so no attempt to move tuple,\n-- but \"a = 'a'\" violates partition constraint enforced by root partition)\nUPDATE part_b_10_b_20 set a = 'a';\n-- ok, partition key update, no constraint violation\nUPDATE range_parted set d = d - 10 WHERE d > 10;\n-- ok, no partition key update, no constraint violation\nUPDATE range_parted set e = d;\n-- No row found\nUPDATE part_c_1_100 set c = c + 20 WHERE c = 98;\n-- ok, row movement\nUPDATE part_b_10_b_20 set c = c + 20 returning c, b, a;\n:show_data;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *;\n-- ok, row movement, with subset of rows moved into different partition.\nUPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c;\n\n:show_data;\n\n-- Common table needed for multiple test scenarios.\nCREATE TABLE mintab(c1 int);\nINSERT into mintab VALUES (120);\n\n-- update partition key using updatable view.\nCREATE VIEW upview AS SELECT * FROM range_parted WHERE (select c > c1 FROM mintab) WITH CHECK OPTION;\n-- ok\nUPDATE upview set c = 199 WHERE b = 4;\n-- fail, check option violation\nUPDATE upview set c = 120 WHERE b = 4;\n-- fail, row movement with check option violation\nUPDATE upview set a = 'b', b = 15, c = 120 WHERE b = 4;\n-- ok, row movement, check option passes\nUPDATE upview set a = 'b', b = 15 WHERE b = 4;\n\n:show_data;\n\n-- cleanup\nDROP VIEW upview;\n\n-- RETURNING having whole-row vars.\n:init_range_parted;\nUPDATE range_parted set c = 95 WHERE a = 'b' and b > 10 and c > 100 returning (range_parted), *;\n:show_data;\n\n\n-- Transition tables with update row movement\n:init_range_parted;\n\nCREATE FUNCTION trans_updatetrigfunc() RETURNS trigger LANGUAGE plpgsql AS\n$$\n  begin\n    raise notice 'trigger = %, old table = %, new table = %',\n                 TG_NAME,\n                 (select string_agg(old_table::text, ', ' ORDER BY a) FROM old_table),\n                 (select string_agg(new_table::text, ', ' ORDER BY a) FROM new_table);\n    return null;\n  end;\n$$;\n\nCREATE TRIGGER trans_updatetrig\n  AFTER UPDATE ON range_parted REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\n\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end ) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\n\n-- Enabling OLD TABLE capture for both DELETE as well as UPDATE stmt triggers\n-- should not cause DELETEd rows to be captured twice. Similar thing for\n-- INSERT triggers and inserted rows.\nCREATE TRIGGER trans_deletetrig\n  AFTER DELETE ON range_parted REFERENCING OLD TABLE AS old_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nCREATE TRIGGER trans_inserttrig\n  AFTER INSERT ON range_parted REFERENCING NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\nDROP TRIGGER trans_deletetrig ON range_parted;\nDROP TRIGGER trans_inserttrig ON range_parted;\n-- Don't drop trans_updatetrig yet. It is required below.\n\n-- Test with transition tuple conversion happening for rows moved into the\n-- new partition. This requires a trigger that references transition table\n-- (we already have trans_updatetrig). For inserted rows, the conversion\n-- is not usually needed, because the original tuple is already compatible with\n-- the desired transition tuple format. But conversion happens when there is a\n-- BR trigger because the trigger can change the inserted row. So install a\n-- BR triggers on those child partitions where the rows will be moved.\nCREATE FUNCTION func_parted_mod_b() RETURNS trigger AS $$\nBEGIN\n   NEW.b = NEW.b + 1;\n   return NEW;\nEND $$ language plpgsql;\nCREATE TRIGGER trig_c1_100 BEFORE UPDATE OR INSERT ON part_c_1_100\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d1_15 BEFORE UPDATE OR INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d15_20 BEFORE UPDATE OR INSERT ON part_d_15_20\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\n:init_range_parted;\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n\n-- Case where per-partition tuple conversion map array is allocated, but the\n-- map is not required for the particular tuple that is routed, thanks to\n-- matching table attributes of the partition and the target table.\n:init_range_parted;\nUPDATE range_parted set b = 15 WHERE b = 1;\n:show_data;\n\nDROP TRIGGER trans_updatetrig ON range_parted;\nDROP TRIGGER trig_c1_100 ON part_c_1_100;\nDROP TRIGGER trig_d1_15 ON part_d_1_15;\nDROP TRIGGER trig_d15_20 ON part_d_15_20;\nDROP FUNCTION func_parted_mod_b();\n\n-- RLS policies with update-row-movement\n-----------------------------------------\n\nALTER TABLE range_parted ENABLE ROW LEVEL SECURITY;\nCREATE USER regress_range_parted_user;\nGRANT ALL ON range_parted, mintab TO regress_range_parted_user;\nCREATE POLICY seeall ON range_parted AS PERMISSIVE FOR SELECT USING (true);\nCREATE POLICY policy_range_parted ON range_parted for UPDATE USING (true) WITH CHECK (c % 2 = 0);\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error while moving row from\n-- part_a_10_a_20 to part_d_1_15, because we are setting 'c' to an odd number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n-- Create a trigger on part_d_1_15\nCREATE FUNCTION func_d_1_15() RETURNS trigger AS $$\nBEGIN\n   NEW.c = NEW.c + 1; -- Make even numbers odd, or vice versa\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_d_1_15 BEFORE INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_d_1_15();\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n\n-- Here, RLS checks should succeed while moving row from part_a_10_a_20 to\n-- part_d_1_15. Even though the UPDATE is setting 'c' to an odd number, the\n-- trigger at the destination partition again makes it an even number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error. Even though the UPDATE is setting\n-- 'c' to an even number, the trigger at the destination partition again makes\n-- it an odd number.\nUPDATE range_parted set a = 'b', c = 150 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP TRIGGER trig_d_1_15 ON part_d_1_15;\nDROP FUNCTION func_d_1_15();\n\n-- Policy expression contains SubPlan\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_subplan on range_parted\n    AS RESTRICTIVE for UPDATE USING (true)\n    WITH CHECK ((SELECT range_parted.c <= c1 FROM mintab));\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, mintab has row with c1 = 120\nUPDATE range_parted set a = 'b', c = 122 WHERE a = 'a' and c = 200;\n-- ok\nUPDATE range_parted set a = 'b', c = 120 WHERE a = 'a' and c = 200;\n\n-- RLS policy expression contains whole row.\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_wholerow on range_parted AS RESTRICTIVE for UPDATE USING (true)\n   WITH CHECK (range_parted = row('b', 10, 112, 1, NULL)::range_parted);\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- ok, should pass the RLS check\nUPDATE range_parted set a = 'b', c = 112 WHERE a = 'a' and c = 200;\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, the whole row RLS check should fail\nUPDATE range_parted set a = 'b', c = 116 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP POLICY policy_range_parted ON range_parted;\nDROP POLICY policy_range_parted_subplan ON range_parted;\nDROP POLICY policy_range_parted_wholerow ON range_parted;\nREVOKE ALL ON range_parted, mintab FROM regress_range_parted_user;\nDROP USER regress_range_parted_user;\nDROP TABLE mintab;\n\n\n-- statement triggers with update row movement\n---------------------------------------------------\n\n:init_range_parted;\n\nCREATE FUNCTION trigfunc() returns trigger language plpgsql as\n$$\n  begin\n    raise notice 'trigger = % fired on table % during %',\n                 TG_NAME, TG_TABLE_NAME, TG_OP;\n    return null;\n  end;\n$$;\n-- Triggers on root partition\nCREATE TRIGGER parent_delete_trig\n  AFTER DELETE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_update_trig\n  AFTER UPDATE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_insert_trig\n  AFTER INSERT ON range_parted for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_c_1_100\nCREATE TRIGGER c1_delete_trig\n  AFTER DELETE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_update_trig\n  AFTER UPDATE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_insert_trig\n  AFTER INSERT ON part_c_1_100 for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_d_1_15\nCREATE TRIGGER d1_delete_trig\n  AFTER DELETE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_update_trig\n  AFTER UPDATE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_insert_trig\n  AFTER INSERT ON part_d_1_15 for each statement execute procedure trigfunc();\n-- Triggers on leaf partition part_d_15_20\nCREATE TRIGGER d15_delete_trig\n  AFTER DELETE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_update_trig\n  AFTER UPDATE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_insert_trig\n  AFTER INSERT ON part_d_15_20 for each statement execute procedure trigfunc();\n\n-- Move all rows from part_c_100_200 to part_c_1_100. None of the delete or\n-- insert statement triggers should be fired.\nUPDATE range_parted set c = c - 50 WHERE c > 97;\n:show_data;\n\nDROP TRIGGER parent_delete_trig ON range_parted;\nDROP TRIGGER parent_update_trig ON range_parted;\nDROP TRIGGER parent_insert_trig ON range_parted;\nDROP TRIGGER c1_delete_trig ON part_c_1_100;\nDROP TRIGGER c1_update_trig ON part_c_1_100;\nDROP TRIGGER c1_insert_trig ON part_c_1_100;\nDROP TRIGGER d1_delete_trig ON part_d_1_15;\nDROP TRIGGER d1_update_trig ON part_d_1_15;\nDROP TRIGGER d1_insert_trig ON part_d_1_15;\nDROP TRIGGER d15_delete_trig ON part_d_15_20;\nDROP TRIGGER d15_update_trig ON part_d_15_20;\nDROP TRIGGER d15_insert_trig ON part_d_15_20;\n\n\n-- Creating default partition for range\n:init_range_parted;\ncreate table part_def partition of range_parted default;\n\\d+ part_def\ninsert into range_parted values ('c', 9);\n-- ok\nupdate part_def set a = 'd' where a = 'c';\n-- fail\nupdate part_def set a = 'a' where a = 'd';\n\n:show_data;\n\n-- Update row movement from non-default to default partition.\n-- fail, default partition is not under part_a_10_a_20;\nUPDATE part_a_10_a_20 set a = 'ad' WHERE a = 'a';\n-- ok\nUPDATE range_parted set a = 'ad' WHERE a = 'a';\nUPDATE range_parted set a = 'bd' WHERE a = 'b';\n:show_data;\n-- Update row movement from default to non-default partitions.\n-- ok\nUPDATE range_parted set a = 'a' WHERE a = 'ad';\nUPDATE range_parted set a = 'b' WHERE a = 'bd';\n:show_data;\n\n-- Cleanup: range_parted no longer needed.\nDROP TABLE range_parted;\n\nCREATE TABLE list_parted (\n\ta text,\n\tb int\n) PARTITION BY list (a);\nCREATE TABLE list_part1  PARTITION OF list_parted for VALUES in ('a', 'b');\nCREATE TABLE list_default PARTITION OF list_parted default;\nINSERT into list_part1 VALUES ('a', 1);\nINSERT into list_default VALUES ('d', 10);\n\n-- fail\nUPDATE list_default set a = 'a' WHERE a = 'd';\n-- ok\nUPDATE list_default set a = 'x' WHERE a = 'd';\n\nDROP TABLE list_parted;\n\n-- Test retrieval of system columns with non-consistent partition row types.\n-- This is only partially supported, as seen in the results.\n\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table utr1 (a int check (a in (1)), q text, b text);\ncreate table utr2 (a int check (a in (2)), b text);\nalter table utr1 drop column q;\nalter table utrtest attach partition utr1 for values in (1);\nalter table utrtest attach partition utr2 for values in (2);\n\ninsert into utrtest values (1, 'foo')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass;\n\nupdate utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass;\n\ndelete from utrtest\n  returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok;\n\ndrop table utrtest;\n\n--------------\n-- Some more update-partition-key test scenarios below. This time use list\n-- partitions.\n--------------\n\n-- Setup for list partitions\nCREATE TABLE list_parted (a numeric, b int, c int8) PARTITION BY list (a);\nCREATE TABLE sub_parted PARTITION OF list_parted for VALUES in (1) PARTITION BY list (b);\n\nCREATE TABLE sub_part1(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part1 for VALUES in (1);\nCREATE TABLE sub_part2(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part2 for VALUES in (2);\n\nCREATE TABLE list_part1(a numeric, b int, c int8);\nALTER TABLE list_parted ATTACH PARTITION list_part1 for VALUES in (2,3);\n\nINSERT into list_parted VALUES (2,5,50);\nINSERT into list_parted VALUES (3,6,60);\nINSERT into sub_parted VALUES (1,1,60);\nINSERT into sub_parted VALUES (1,2,10);\n\n-- Test partition constraint violation when intermediate ancestor is used and\n-- constraint is inherited from upper root.\nUPDATE sub_parted set a = 2 WHERE c = 10;\n\n-- Test update-partition-key, where the unpruned partitions do not have their\n-- partition keys updated.\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\nUPDATE list_parted set b = c + a WHERE a = 2;\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\n\n\n-- Test the case where BR UPDATE triggers change the partition key.\nCREATE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   NEW.b = 2; -- This is changing partition key column.\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER parted_mod_b before update on sub_part1\n   for each row execute procedure func_parted_mod_b();\n\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\n-- This should do the tuple routing even though there is no explicit\n-- partition-key update, because there is a trigger on sub_part1.\nUPDATE list_parted set c = 70 WHERE b  = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\nDROP TRIGGER parted_mod_b ON sub_part1;\n\n-- If BR DELETE trigger prevented DELETE from happening, we should also skip\n-- the INSERT if that delete is part of UPDATE=>DELETE+INSERT.\nCREATE OR REPLACE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   raise notice 'Trigger: Got OLD row %, but returning NULL', OLD;\n   return NULL;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_skip_delete before delete on sub_part2\n   for each row execute procedure func_parted_mod_b();\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n-- Drop the trigger. Now the row should be moved.\nDROP TRIGGER trig_skip_delete ON sub_part2;\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP FUNCTION func_parted_mod_b();\n\n-- UPDATE partition-key with FROM clause. If join produces multiple output\n-- rows for the same row to be modified, we should tuple-route the row only\n-- once. There should not be any rows inserted.\nCREATE TABLE non_parted (id int);\nINSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);\nUPDATE list_parted t1 set a = 2 FROM non_parted t2 WHERE t1.a = t2.id and a = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP TABLE non_parted;\n\n-- Cleanup: list_parted no longer needed.\nDROP TABLE list_parted;\n\n-- create custom operator class and hash function, for the same reason\n-- explained in alter_table.sql\ncreate or replace function dummy_hashint4(a int4, seed int8) returns int8 as\n$$ begin return (a + seed); end; $$ language 'plpgsql' immutable;\ncreate operator class custom_opclass for type int4 using hash as\noperator 1 = , function 2 dummy_hashint4(int4, int8);\n\ncreate table hash_parted (\n\ta int,\n\tb int\n) partition by hash (a custom_opclass, b custom_opclass);\ncreate table hpart1 partition of hash_parted for values with (modulus 2, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 8, remainder 0);\ncreate table hpart4 partition of hash_parted for values with (modulus 8, remainder 4);\ninsert into hpart1 values (1, 1);\ninsert into hpart2 values (2, 5);\ninsert into hpart4 values (3, 4);\n\n-- fail\nupdate hpart1 set a = 3, b=4 where a = 1;\n-- ok, row movement\nupdate hash_parted set b = b - 1 where b = 1;\n-- ok\nupdate hash_parted set b = b + 8 where b = 1;\n\n-- cleanup\ndrop table hash_parted;\ndrop operator class custom_opclass using hash;\ndrop function dummy_hashint4(a int4, seed int8);\n*/\n\n--drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 39:\nDROP SERVER sqlite_svr;\n--Testcase 40:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/libsqlite.sql",
    "content": "-- Test for SQLite library code source and defaults\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nSELECT sqlite_fdw_sqlite_version();\n--Testcase 3:\nSELECT length(sqlite_fdw_sqlite_code_source());\n--Testcase 4:\nSELECT sqlite_fdw_sqlite_code_source();\n\n--Testcase 7:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/selectfunc.sql",
    "content": "SET datestyle=ISO;\nSET timezone='Japan';\n\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER server1 FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/selectfunc.db');\n--CREATE USER MAPPING FOR CURRENT_USER SERVER server1 OPTIONS(user 'user', password 'pass');\n\n--IMPORT FOREIGN SCHEMA public FROM SERVER server1 INTO public OPTIONS(import_time_text 'false');\n--Testcase 3:\nCREATE FOREIGN TABLE s3(id text OPTIONS (key 'true'), time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text) SERVER server1;\n\n-- s3 (value1 as float8, value2 as bigint)\n--Testcase 4:\n\\d s3;\n--Testcase 5:\nSELECT * FROM s3;\n\n-- select float8() (not pushdown, remove float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select float8() (not pushdown, remove float8, result)\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select sqrt (builtin function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (buitin function, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function,, not pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, not pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select abs (builtin function, explain)\n--Testcase 6:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (buitin function, result)\n--Testcase 7:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (builtin function, not pushdown constraints, explain)\n--Testcase 8:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, not pushdown constraints, result)\n--Testcase 9:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, pushdown constraints, explain)\n--Testcase 10:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select abs (builtin function, pushdown constraints, result)\n--Testcase 11:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select log (builtin function, need to swap arguments, numeric cast, explain)\n-- log_<base>(v) : postgresql (base, v), sqlite (v, base)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (builtin function, need to swap arguments, numeric cast, result)\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, result)\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, result)\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, result)\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log2 (stub function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select log2 (stub function, result)\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select spread (stub agg function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, result)\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, raise exception if not expected type)\n-- SELECT spread(value1::numeric),spread(value2::numeric),spread(value3::numeric),spread(value4::numeric) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs as nest function with agg (pushdown, explain)\n--Testcase 12:\nEXPLAIN VERBOSE\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest function with agg (pushdown, result)\n--Testcase 13:\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest with log2 (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs as nest with log2 (pushdown, result)\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs with non pushdown func and explicit constant (explain)\n--Testcase 14:\nEXPLAIN VERBOSE\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select abs with non pushdown func and explicit constant (result)\n--Testcase 15:\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, result)\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant and tag (error, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1, tag1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select spread (stub agg function and group by influx_time() and tag) (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by influx_time() and tag) (result)\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by tag only) (result)\n-- SELECT tag1,spread(\"value1\") FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY tag1;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function and other aggs) (result)\n-- SELECT sum(\"value1\"),spread(\"value1\"),count(\"value1\") FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs with order by (explain)\n--Testcase 16:\nEXPLAIN VERBOSE\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by (result)\n--Testcase 17:\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by index (result)\n--Testcase 18:\nSELECT value1, abs(1-value1) FROM s3 order by 2,1;\n\n-- select abs with order by index (result)\n--Testcase 19:\nSELECT value1, abs(1-value1) FROM s3 order by 1,2;\n\n-- select abs and as\n--Testcase 20:\nSELECT abs(value3) as abs1 FROM s3;\n\n-- select spread over join query (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread over join query (result, stub call error)\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain, cannot pushdown, stub call error)\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select abs with arithmetic and tag in the middle (explain)\n--Testcase 21:\nEXPLAIN VERBOSE\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select abs with arithmetic and tag in the middle (result)\n--Testcase 22:\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select with order by limit (explain)\n--Testcase 23:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select with order by limit (explain)\n--Testcase 24:\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select mixing with non pushdown func (all not pushdown, explain)\n--Testcase 25:\nEXPLAIN VERBOSE\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- select mixing with non pushdown func (result)\n--Testcase 26:\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- sqlite data prep\n\n-- sqlite pushdown supported functions (explain)\n--Testcase 27:\nEXPLAIN VERBOSE\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown supported functions (result)\n--Testcase 28:\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown nest functions (explain)\n--Testcase 32:\nEXPLAIN VERBOSE\nSELECT round(abs(value2), 0) FROM s3;\n\n-- sqlite pushdown nest functions (result)\n--Testcase 33:\nSELECT round(abs(value2), 0) FROM s3;\n\n-- select mod (builtin function, explain)\n--Testcase 34:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, result)\n--Testcase 35:\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, not pushdown constraints, explain)\n--Testcase 36:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, not pushdown constraints, result)\n--Testcase 37:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, pushdown constraints, explain)\n--Testcase 38:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, pushdown constraints, result)\n--Testcase 39:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 40:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 41:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 42:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 43:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod as nest function with agg (pushdown, explain)\n--Testcase 44:\nEXPLAIN VERBOSE\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest function with agg (pushdown, result)\n--Testcase 45:\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, explain)\n--Testcase 46:\nEXPLAIN VERBOSE\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, result)\n--Testcase 47:\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod with non pushdown func and explicit constant (explain)\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with non pushdown func and explicit constant (result)\n--Testcase 49:\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with order by (explain)\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by (result)\n--Testcase 51:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by index (result)\n--Testcase 52:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 2,1;\n\n-- select mod with order by index (result)\n--Testcase 53:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 1,2;\n\n-- select mod with group by (explain)\n--Testcase 54:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by (result)\n--Testcase 55:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by index (result)\n--Testcase 56:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 2,1;\n\n-- select mod with group by index (result)\n--Testcase 57:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2;\n\n-- select mod with group by having (explain)\n--Testcase 58:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by having (result)\n--Testcase 59:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by index having (result)\n--Testcase 60:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2 HAVING value1 > 1;\n\n-- select mod and as\n--Testcase 61:\nSELECT value1, mod(value2, 2) as mod1 FROM s3;\n\n--Testcase 29:\nDROP FOREIGN TABLE s3;\n--Testcase 30:\nDROP SERVER server1;\n--Testcase 31:\nDROP EXTENSION sqlite_fdw;\n"
  },
  {
    "path": "sql/16.3/sqlite_fdw.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 129:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 130:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 131:\nCREATE FOREIGN TABLE department(department_id int OPTIONS (key 'true'), department_name text) SERVER sqlite_svr; \n--Testcase 132:\nCREATE FOREIGN TABLE employee(emp_id int OPTIONS (key 'true'), emp_name text, emp_dept_id int) SERVER sqlite_svr;\n--Testcase 133:\nCREATE FOREIGN TABLE empdata(emp_id int OPTIONS (key 'true'), emp_dat bytea) SERVER sqlite_svr;\n--Testcase 134:\nCREATE FOREIGN TABLE numbers(a int OPTIONS (key 'true'), b varchar(255)) SERVER sqlite_svr;\n--Testcase 135:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n--Testcase 136:\nCREATE FOREIGN TABLE noprimary(a int, b text) SERVER sqlite_svr;\n--Testcase 137:\nCREATE FOREIGN TABLE RO_RW_test(i int OPTIONS (key 'true'), a text, b float, c int) SERVER sqlite_svr;\n\n--Testcase 1:\nSELECT * FROM department LIMIT 10;\n--Testcase 2:\nSELECT * FROM employee LIMIT 10;\n--Testcase 3:\nSELECT * FROM empdata LIMIT 10;\n\n--Testcase 4:\nINSERT INTO department VALUES(generate_series(1,100), 'dept - ' || generate_series(1,100));\n--Testcase 5:\nINSERT INTO employee VALUES(generate_series(1,100), 'emp - ' || generate_series(1,100), generate_series(1,100));\n--Testcase 6:\nINSERT INTO empdata  VALUES(1, decode ('01234567', 'hex'));\n\n--Testcase 7:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 8:\nINSERT INTO numbers VALUES(2, 'Two');\n--Testcase 9:\nINSERT INTO numbers VALUES(3, 'Three');\n--Testcase 10:\nINSERT INTO numbers VALUES(4, 'Four');\n--Testcase 11:\nINSERT INTO numbers VALUES(5, 'Five');\n--Testcase 12:\nINSERT INTO numbers VALUES(6, 'Six');\n--Testcase 13:\nINSERT INTO numbers VALUES(7, 'Seven');\n--Testcase 14:\nINSERT INTO numbers VALUES(8, 'Eight');\n--Testcase 15:\nINSERT INTO numbers VALUES(9, 'Nine');\n\n--Testcase 16:\nSELECT count(*) FROM department;\n--Testcase 17:\nSELECT count(*) FROM employee;\n--Testcase 18:\nSELECT count(*) FROM empdata;\n\n--Testcase 19:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n\n--Testcase 20:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) LIMIT 10;\n\n--Testcase 21:\nSELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n--Testcase 22:\nSELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) ORDER BY d.department_id LIMIT 10;\n--Testcase 23:\nSELECT * FROM empdata;\n\n--Testcase 24:\nDELETE FROM employee WHERE emp_id = 10;\n\n--Testcase 25:\nSELECT COUNT(*) FROM department LIMIT 10;\n--Testcase 26:\nSELECT COUNT(*) FROM employee WHERE emp_id = 10;\n\n--Testcase 27:\nUPDATE employee SET emp_name = 'UPDATEd emp' WHERE emp_id = 20;\n--Testcase 28:\nSELECT emp_id, emp_name FROM employee WHERE emp_name like 'UPDATEd emp';\n\n--Testcase 29:\nUPDATE empdata SET emp_dat = decode ('0123', 'hex');\n--Testcase 30:\nSELECT * FROM empdata;\n\n--Testcase 31:\nSELECT * FROM employee LIMIT 10;\n--Testcase 32:\nSELECT * FROM employee WHERE emp_id IN (1);\n--Testcase 33:\nSELECT * FROM employee WHERE emp_id IN (1,3,4,5);\n--Testcase 34:\nSELECT * FROM employee WHERE emp_id IN (10000,1000);\n\n--Testcase 35:\nSELECT * FROM employee WHERE emp_id NOT IN (1) LIMIT 5;\n--Testcase 36:\nSELECT * FROM employee WHERE emp_id NOT IN (1,3,4,5) LIMIT 5;\n--Testcase 37:\nSELECT * FROM employee WHERE emp_id NOT IN (10000,1000) LIMIT 5;\n\n--Testcase 38:\nSELECT * FROM employee WHERE emp_id NOT IN (SELECT emp_id FROM employee WHERE emp_id IN (1,10));\n--Testcase 39:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 1', 'emp - 2') LIMIT 5;\n--Testcase 40:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 10') LIMIT 5;\n\n--Testcase 41:\nSELECT * FROM numbers WHERE (CASE WHEN a % 2 = 0 THEN 1 WHEN a % 5 = 0 THEN 1 ELSE 0 END) = 1;\n--Testcase 42:\nSELECT * FROM numbers WHERE (CASE b WHEN 'Two' THEN 1 WHEN 'Six' THEN 1 ELSE 0 END) = 1;\n\n--Testcase 152:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE (round(abs(a)) = 1);\n--Testcase 153:\nSELECT * FROM numbers WHERE (round(abs(a)) = 1);\n\n--Testcase 137:\ncreate or replace function test_param_WHERE() returns void as $$\nDECLARE\n  n varchar;\nBEGIN\n  FOR x IN 1..9 LOOP\n--Testcase 138:\n    SELECT b INTO n from numbers WHERE a=x;\n    raise notice 'Found number %', n;\n  end loop;\n  return;\nEND\n$$ LANGUAGE plpgsql;\n--Testcase 43:\nSELECT test_param_WHERE();\n\n--Testcase 44:\nSELECT b from numbers WHERE a=1;\n--Testcase 45:\nEXPLAIN(COSTS OFF) SELECT b from numbers WHERE a=1;\n\n--Testcase 46:\nSELECT a FROM numbers WHERE b = (SELECT NULL::text);\n\n\n--Testcase 47:\nPREPARE stmt1 (int, int) AS\n  SELECT * FROM numbers WHERE a=$1 or a=$2;\n--Testcase 48:\nEXECUTE stmt1(1,2);\n--Testcase 49:\nEXECUTE stmt1(2,2); \n--Testcase 50:\nEXECUTE stmt1(3,2); \n--Testcase 51:\nEXECUTE stmt1(4,2);\n-- generic plan\n--Testcase 52:\nEXECUTE stmt1(5,2); \n--Testcase 53:\nEXECUTE stmt1(6,2); \n--Testcase 54:\nEXECUTE stmt1(7,2); \n\n--Testcase 55:\nDELETE FROM employee;\n--Testcase 56:\nDELETE FROM department;\n--Testcase 57:\nDELETE FROM empdata;\n--Testcase 58:\nDELETE FROM numbers;\n\nBEGIN;\n--Testcase 59:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 60:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n\n--Testcase 61:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 62:\nINSERT INTO numbers VALUES(3, 'Three');\nROLLBACK;\n--Testcase 63:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 64:\nINSERT INTO numbers VALUES(4, 'Four');\nSAVEPOINT my_savepoint;\n--Testcase 65:\nINSERT INTO numbers VALUES(5, 'Five');\nROLLBACK TO SAVEPOINT my_savepoint;\n--Testcase 66:\nINSERT INTO numbers VALUES(6, 'Six');\nCOMMIT;\n\n--Testcase 67:\nSELECT * from numbers;\n\n-- duplicate key\n--Testcase 68:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 69:\nDELETE from numbers;\n\nBEGIN;\n--Testcase 70:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 71:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n-- violate unique constraint\n--Testcase 72:\nUPDATE numbers SET b='Two' WHERE a = 1; \n--Testcase 73:\nSELECT * from numbers;\n\n-- push down\n--Testcase 74:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n-- (1,2,3) is pushed down\n--Testcase 75:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (1,2,3) AND (1,2) < (a,5);\n\n--Testcase 76:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (a+2*a,5);\n\n--Testcase 77:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n--Testcase 78:\nSELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n--Testcase 79:\nSELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n-- ANY with ARRAY expression\n--Testcase 154:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n--Testcase 155:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n\n--Testcase 156:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n--Testcase 157:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n\n--Testcase 158:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n--Testcase 159:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n\n--Testcase 160:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n--Testcase 161:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n\n--Testcase 162:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n--Testcase 163:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n\n--Testcase 164:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n--Testcase 165:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n\n-- ANY with ARRAY const\n--Testcase 166:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n--Testcase 167:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n\n--Testcase 168:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n--Testcase 169:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n\n--Testcase 170:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n--Testcase 171:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n\n--Testcase 172:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n--Testcase 173:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n\n--Testcase 174:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n--Testcase 175:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n\n--Testcase 176:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n--Testcase 177:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n\n--Testcase 210:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n--Testcase 211:\nSELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n\n--Testcase 212:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n--Testcase 213:\nSELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n\n-- ALL with ARRAY expression\n--Testcase 178:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n--Testcase 179:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n\n--Testcase 180:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n--Testcase 181:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n\n--Testcase 182:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n--Testcase 183:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n\n--Testcase 184:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n--Testcase 185:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n\n--Testcase 186:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n--Testcase 187:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n\n--Testcase 188:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n--Testcase 189:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n\n-- ALL with ARRAY const\n--Testcase 190:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n--Testcase 191:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n\n--Testcase 192:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n--Testcase 193:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n\n--Testcase 194:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n--Testcase 195:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n\n--Testcase 196:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n--Testcase 197:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n\n--Testcase 198:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n--Testcase 199:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n\n--Testcase 200:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n--Testcase 201:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n\n-- ANY/ALL with TEXT ARRAY const\n--Testcase 202:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n--Testcase 203:\nSELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n\n--Testcase 204:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n--Testcase 205:\nSELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n\n--Testcase 206:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n--Testcase 207:\nSELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n\n--Testcase 208:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n--Testcase 209:\nSELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n\n--Testcase 80:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 81:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 82:\nUPDATE multiprimary SET b = 10 WHERE c = 3;\n--Testcase 83:\nSELECT * from multiprimary;\n--Testcase 84:\nUPDATE multiprimary SET a = 10 WHERE a = 1;\n--Testcase 85:\nSELECT * from multiprimary;\n--Testcase 86:\nUPDATE multiprimary SET a = 100, b=200, c=300 WHERE a=10 AND b=10;\n--Testcase 87:\nSELECT * from multiprimary;\n--Testcase 88:\nUPDATE multiprimary SET a = 1234;\n--Testcase 89:\nSELECT * from multiprimary;\n--Testcase 90:\nUPDATE multiprimary SET a = a+1, b=b+1 WHERE b=200 AND c=300;\n\n--Testcase 91:\nSELECT * from multiprimary;\n--Testcase 92:\nDELETE from multiprimary WHERE a = 1235;\n--Testcase 93:\nSELECT * from multiprimary;\n--Testcase 94:\nDELETE from multiprimary WHERE b = 2;\n--Testcase 95:\nSELECT * from multiprimary;\n\n--Testcase 96:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 97:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 98:\nINSERT INTO multiprimary VALUES(1,10,20);\n--Testcase 99:\nINSERT INTO multiprimary VALUES(2,20,40);\n\n\n\n--Testcase 100:\nSELECT count(distinct a) from multiprimary;\n--Testcase 101:\nSELECT sum(b),max(b), min(b) from multiprimary;\n--Testcase 102:\nSELECT sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n--Testcase 103:\nSELECT sum(a) from multiprimary group by b having sum(a) > 0 order by sum(a);\n--Testcase 104:\nSELECT sum(a) A from multiprimary group by b having avg(abs(a)) > 0 AND sum(a) > 0 order by A;\n--Testcase 105:\nSELECT count(nullif(a, 1)) FROM multiprimary;\n--Testcase 106:\nSELECT a,a FROM multiprimary group by 1,2;\n--Testcase 107:\nSELECT * from multiprimary, numbers WHERE multiprimary.a=numbers.a;\n\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n--Testcase 109:\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n\n--Testcase 110:\nINSERT INTO numbers VALUES(4, 'Four');\n\n-- All where clauses are pushed down\n--Testcase 111:\nSELECT * FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n--Testcase 112:\nEXPLAIN (verbose, costs off)  SELECT b, length(b) FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n\n-- Only \"length(b) = 4\" are pushed down\n--Testcase 113:\nSELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n--Testcase 114:\nEXPLAIN (verbose, costs off) SELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n\n--Testcase 115:\nINSERT INTO multiprimary (b,c) VALUES (99, 100);\n--Testcase 116:\nSELECT c FROM multiprimary WHERE COALESCE(a,b,c) = 99;\n\n\n--Testcase 139:\nCREATE FOREIGN TABLE multiprimary2(a int, b int, c int OPTIONS(column_name 'b')) SERVER sqlite_svr OPTIONS (table 'multiprimary');\n--Testcase 117:\nSELECT * FROM multiprimary2;\n--Testcase 214:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN a OPTIONS(ADD column_name 'b');\n--Testcase 118:\nSELECT * FROM multiprimary2;\n--Testcase 215:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN b OPTIONS (column_name 'nosuch column');\n--Testcase 119:\nSELECT * FROM multiprimary2;\n--Testcase 140:\nEXPLAIN (VERBOSE) SELECT * FROM multiprimary2;\n--Testcase 120:\nSELECT a FROM multiprimary2 WHERE b = 1;\n\n\n--Testcase 141:\nCREATE FOREIGN TABLE columntest(a int OPTIONS(column_name 'a a', key 'true'), \"b b\" int  OPTIONS(key 'true'), c int OPTIONS(column_name 'c c')) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO columntest VALUES(1,2,3);\n--Testcase 122:\nUPDATE columntest SET c=10 WHERE a = 1;\n--Testcase 123:\nSELECT * FROM columntest;\n--Testcase 124:\nUPDATE columntest SET a=100 WHERE c = 10;\n--Testcase 125:\nSELECT * FROM columntest;\n--Testcase 126:\nINSERT INTO noprimary VALUES(1,'2');\n--Testcase 127:\nINSERT INTO noprimary SELECT * FROM noprimary;\n--Testcase 128:\nSELECT * FROM noprimary;\n\n--get version\n--Testcase 153:\n\\df sqlite*\n--Testcase 154:\nSELECT * FROM public.sqlite_fdw_version();\n--Testcase 155:\nSELECT sqlite_fdw_version();\n\n-- issue #44 github\n--Testcase 156:\nCREATE FOREIGN TABLE fts_table (name text,  description text) SERVER sqlite_svr;\n\n--Testcase 157:\nINSERT INTO fts_table VALUES ('this is name', 'this is description');\n\n--Testcase 158:\nSELECT * FROM fts_table; -- should work\n\n--Testcase 159:\nALTER TABLE fts_table ALTER COLUMN name TYPE int;\n\n--Testcase 160:\nSELECT * FROM fts_table; -- should fail\n\n-- issue #62 github\n--Testcase 236:\nINSERT INTO noprimary VALUES (4, 'Test''s');\n--Testcase 237:\nINSERT INTO noprimary VALUES (5, 'Test');\n\n--Testcase 238:\nSELECT * FROM noprimary;\n--Testcase 239:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b = 'Test''s';\n--Testcase 240:\nSELECT * FROM noprimary where b = 'Test''s';\n\n--Testcase 241:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n--Testcase 242:\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n\n-- INSERT/UPDATE whole row with generated column\n--Testcase 216:\nCREATE FOREIGN TABLE grem1_1 (\n  a int generated always as (0) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_1');\n\n--Testcase 217:\nINSERT INTO grem1_1 DEFAULT VALUES;\n--Testcase 218:\nSELECT * FROM grem1_1;\n\n--Testcase 219:\nCREATE FOREIGN TABLE grem1_2 (\n  a int generated always as (0) stored,\n  b int generated always as (1) stored,\n  c int generated always as (2) stored,\n  d int generated always as (3) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_2');\n--Testcase 220:\nINSERT INTO grem1_2 DEFAULT VALUES;\n--Testcase 221:\nSELECT * FROM grem1_2;\n\n-- Executable test case for pushdown CASE expressions (results)\n--Testcase 224:\nCREATE FOREIGN TABLE case_exp(c1 int OPTIONS (key 'true'), c3 text, c6 varchar(10)) SERVER sqlite_svr;\n\n--Testcase 225:\nINSERT INTO case_exp\n  SELECT id,\n         to_char(id, 'FM00000'),\n         id % 10\n  FROM generate_series(1, 10) id;\n\n--Testcase 226:\nSELECT * FROM case_exp;\n\n-- CASE arg WHEN\n--Testcase 227:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n--Testcase 228:\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 229:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 230:\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n--Testcase 232:\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 233:\nSELECT * FROM case_exp WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n--Testcase 234:\nDELETE FROM case_exp;\n\n-- readonly/readwrite tests\n-- Full combinations\n-- force_RO default SERVER default TABLE default\n-- force_RO default SERVER true    TABLE default\n-- force_RO default SERVER false   TABLE default\n-- force_RO default SERVER default TABLE true\n-- force_RO default SERVER default TABLE false\n-- force_RO default SERVER true    TABLE true\n-- force_RO default SERVER false   TABLE true\n-- force_RO default SERVER false   TABLE false\n-- force_RO default SERVER true    TABLE false\n-- force_RO false   SERVER default TABLE default\n-- force_RO false   SERVER true    TABLE default\n-- force_RO false   SERVER false   TABLE default\n-- force_RO false   SERVER default TABLE true\n-- force_RO false   SERVER default TABLE false\n-- force_RO false   SERVER true    TABLE true\n-- force_RO false   SERVER false   TABLE true\n-- force_RO false   SERVER false   TABLE false\n-- force_RO false   SERVER true    TABLE false\n-- force_RO true    SERVER default TABLE default\n-- force_RO true    SERVER true    TABLE default\n-- force_RO true    SERVER false   TABLE default\n-- force_RO true    SERVER default TABLE true\n-- force_RO true    SERVER default TABLE false\n-- force_RO true    SERVER true    TABLE true\n-- force_RO true    SERVER false   TABLE true\n-- force_RO true    SERVER false   TABLE false\n-- force_RO true    SERVER true    TABLE false\n\n-- force_RO default SERVER default TABLE default\n--Testcase 235:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 236:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 237:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO default SERVER true TABLE default\n--Testcase 238:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 239:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 240:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 241:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 242:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n\n-- force_RO default SERVER false TABLE default\n--Testcase 243:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 244:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 245:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 246:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER default TABLE true\n--Testcase 247:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 248:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 249:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 250:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 251:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO default SERVER default TABLE false\n--Testcase 252:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 253:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 254:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 255:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER true TABLE true\n--Testcase 256:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 257:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 258:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 258:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 260:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 261:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO default SERVER false TABLE true\n--Testcase 262:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 263:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 264:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 265:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO default SERVER false TABLE false\n--Testcase 266:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 267:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 268:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 269:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO default SERVER true TABLE false\n--Testcase 270:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 271:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 272:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 273:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 274:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 275:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 276:\nSELECT * FROM RO_RW_test ORDER BY i;\n\n--Bind error message test for some unsupported data type\n--Testcase 277:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 278:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 279:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 277:\nDELETE FROM RO_RW_test;\n\n--Testcase 278:\nALTER SERVER sqlite_svr OPTIONS (ADD force_readonly 'false');\n\n-- force_RO false SERVER default TABLE default\n--Testcase 279:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 280:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 281:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO false SERVER true TABLE default\n--Testcase 282:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 283:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 284:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 285:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 286:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n-- force_RO false SERVER false TABLE default\n--Testcase 287:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 288:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 289:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 290:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER default TABLE true\n--Testcase 291:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 292:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 293:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 294:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 295:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO false SERVER default TABLE false\n--Testcase 296:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 297:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 298:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 299:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER true TABLE true\n--Testcase 300:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 301:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 302:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 303:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 304:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 305:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO false SERVER false TABLE true\n--Testcase 306:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 307:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 308:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 309:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO false SERVER false TABLE false\n--Testcase 310:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 311:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 312:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 313:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO false SERVER true TABLE false\n--Testcase 314:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 315:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 316:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 317:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 318:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 319:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 320:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 321:\nDELETE FROM RO_RW_test;\n\n--Testcase 322:\nALTER SERVER sqlite_svr OPTIONS (SET force_readonly 'true');\n\n-- force_RO true SERVER default TABLE default\n--Testcase 323:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- ERR\n--Testcase 324:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- ERR\n--Testcase 325:\nDELETE FROM RO_RW_test WHERE i=2; -- ERR\n\n-- force_RO true SERVER true TABLE default\n--Testcase 326:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 327:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- ERR\n--Testcase 328:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- ERR\n--Testcase 329:\nDELETE FROM RO_RW_test WHERE i=3; -- ERR\n--Testcase 330:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- ERR\n-- force_RO true SERVER false TABLE default\n--Testcase 331:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 332:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 333:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 334:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER default TABLE true\n--Testcase 335:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 336:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 337:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- ERR\n--Testcase 338:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- ERR\n--Testcase 339:\nDELETE FROM RO_RW_test WHERE i=6; -- ERR\n\n-- force_RO true SERVER default TABLE false\n--Testcase 340:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 341:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 342:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 343:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER true TABLE true\n--Testcase 344:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true'); -- ERR\n--Testcase 345:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true'); -- ERR\n--Testcase 346:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- ERR\n--Testcase 347:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 348:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 349:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- ERR\n\n-- force_RO true SERVER false TABLE true\n--Testcase 350:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 351:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- ERR\n--Testcase 352:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- ERR\n--Testcase 353:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER false TABLE false\n--Testcase 354:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 355:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 356:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 357:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER true TABLE false\n--Testcase 358:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 359:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 360:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 361:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 362:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 363:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 364:\nALTER SERVER sqlite_svr OPTIONS (DROP force_readonly);\n\n--Testcase 365:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 366:\nDROP FOREIGN TABLE RO_RW_test;\n-- End of RO/RW test\n\n--Bind error message test for some unsupported data type\n--Testcase 366:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 367:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 368:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 142:\nDROP FUNCTION test_param_WHERE();\n--Testcase 143:\nDROP FOREIGN TABLE numbers;\n--Testcase 144:\nDROP FOREIGN TABLE department;\n--Testcase 145:\nDROP FOREIGN TABLE employee;\n--Testcase 146:\nDROP FOREIGN TABLE empdata;\n--Testcase 147:\nDROP FOREIGN TABLE multiprimary;\n--Testcase 148:\nDROP FOREIGN TABLE multiprimary2;\n--Testcase 149:\nDROP FOREIGN TABLE columntest;\n--Testcase 150:\nDROP FOREIGN TABLE noprimary;\n--Testcase 161:\nDROP FOREIGN TABLE fts_table;\n--Testcase 222:\nDROP FOREIGN TABLE grem1_1;\n--Testcase 223:\nDROP FOREIGN TABLE grem1_2;\n--Testcase 235:\nDROP FOREIGN TABLE case_exp;\n\n--Testcase 151:\nDROP SERVER sqlite_svr;\n--Testcase 152:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/bitstring.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 02:\nCREATE FOREIGN TABLE \"type_BIT\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6)) SERVER sqlite_svr OPTIONS (table 'type_BIT');\n--Testcase 03:\nDROP FOREIGN TABLE IF EXISTS \"type_BIT+\";\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6), \"t\" text, \"l\" smallint, \"bi\" bigint OPTIONS (column_name 'b')) SERVER sqlite_svr OPTIONS (table 'type_BIT+');\n--Testcase 05: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (1, 1);\n--Testcase 06: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (2, 2);\n--Testcase 07: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (3, '1');\n--Testcase 08: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (4, '10');\n--Testcase 09: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 10:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 11:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 12:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 13:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 14: type mismatch with proper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (10, 53);\n--Testcase 15:\nSELECT * FROM \"type_BIT+\";\n--Testcase 16:\nSELECT * FROM \"type_BIT\" WHERE b < '110110';\n--Testcase 17:\nSELECT * FROM \"type_BIT\" WHERE b > '110110';\n--Testcase 18:\nSELECT * FROM \"type_BIT\" WHERE b = '110110';\n\n--Testcase 20:\nCREATE FOREIGN TABLE \"type_VARBIT\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70)) SERVER sqlite_svr OPTIONS (table 'type_VARBIT');\n--Testcase 21:\nDROP FOREIGN TABLE IF EXISTS \"type_VARBIT+\";\n--Testcase 22:\nCREATE FOREIGN TABLE \"type_VARBIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70), \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_VARBIT+');\n--Testcase 23:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (1, '1');\n--Testcase 24:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (2, '10');\n--Testcase 25:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (3, '11');\n--Testcase 26:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (4, '100');\n--Testcase 27:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 28:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 29:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 30:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 31:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 32:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (10, '0100100101011001010010101000111110110101101101111011000101010');\n--Testcase 33:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (11, '01001001010110010100101010001111101101011011011110110001010101');\n\n--Testcase 34:\nSELECT * FROM \"type_VARBIT+\";\n--Testcase 35:\nSELECT * FROM \"type_VARBIT+\" WHERE b < '110110';\n--Testcase 36:\nSELECT * FROM \"type_VARBIT+\" WHERE b > '110110';\n--Testcase 37:\nSELECT * FROM \"type_VARBIT+\" WHERE b = '110110';\n\n--Testcase 38:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (12, '010010010101100101001010100011111011010110110111101100010101010');\n--Testcase 39:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (13, '0100100101011001010010101000111110110101101101111011000101010101');\n--Testcase 40: very long bit string, expected ERROR, 65 bits\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (14, '01001001010110010100101010001111101101011011011110110001010101010');\n--Testcase 41:\nSELECT * FROM \"type_VARBIT+\" WHERE \"i\" > 10;\n\n--Testcase 42:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 43:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 44:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 45:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 46:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 47:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 49:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 51:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 52:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 53:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n\n--Testcase 54:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 55:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 56:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 57:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 58:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 59:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 61:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 62:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 63:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 64:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 65:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n\n--Testcase 66:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 67:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 68:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 69:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 70:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 71:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 72:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 73:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 74:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 75:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 76:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 77:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 78:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 79:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 80:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 81:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 82:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 83:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 84:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 85:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 86:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 87:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 88:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 89:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 90:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 91:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 92:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 93:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 94:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 95:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 005:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/bool.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 000:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 001:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;\n--Testcase 02:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (1, TRUE);\n--Testcase 03:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (2, FALSE);\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BOOLEAN+\"( \"i\" int, \"b\" bool, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');\n--Testcase 05:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE text;\n--Testcase 06:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (3, TRUE);\n--Testcase 07:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (4, FALSE);\n--Testcase 08:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (5, true);\n--Testcase 09:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (6, false);\n--Testcase 10:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (7, 'Yes');\n--Testcase 11:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (8, 'YeS');\n--Testcase 12:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (9, 'yes');\n--Testcase 13:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (10, 'no');\n--Testcase 14:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (11, 'No');\n--Testcase 15:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (12, 'nO');\n--Testcase 16:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (13, 'off');\n--Testcase 17:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (14, 'oFf');\n--Testcase 18:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (15, 'on');\n--Testcase 19:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (16, 'ON');\n--Testcase 20:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (17, 't');\n--Testcase 21:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (18, 'T');\n--Testcase 22:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (19, 'Y');\n--Testcase 23:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (20, 'y');\n--Testcase 24:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (21, 'F');\n--Testcase 25:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (22, 'f');\n--Testcase 26:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (23, 'x');\n--Testcase 27:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (24, '0');\n--Testcase 28:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (25, '1');\n--Testcase 29:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (26, NULL);\n--Testcase 30:\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 31:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 32:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 35\nDELETE FROM \"type_BOOLEAN\" WHERE i = 23;\n--Testcase 36:\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 37:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NULL;\n--Testcase 38:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NOT NULL;\n--Testcase 39:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b;\n--Testcase 40:\nSELECT * FROM \"type_BOOLEAN+\" WHERE NOT b;\n\n--Testcase 41:\nCREATE FOREIGN TABLE \"type_BOOLEANpk\" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 42:\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 43:\nINSERT INTO \"type_BOOLEANpk\" VALUES (FALSE);\n--Testcase 44: ERR - primary key\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 45:\nDELETE FROM \"type_BOOLEANpk\";\n\n--Testcase 46:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE float8;\n--Testcase 47:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (27, 3.14159265358979);\n--Testcase 48:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 49: ERR - invalid float for bool column\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 50\nDELETE FROM \"type_BOOLEAN\" WHERE i = 27;\n--Testcase 51:\nSELECT * FROM \"type_BOOLEAN+\";\n\n--Testcase 52:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE b;\n--Testcase 53:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE NOT b;\n--Testcase 54:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE b;\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE NOT b;\n\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n--Testcase 57:\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n\n--Testcase 58:\nCREATE FOREIGN TABLE \"type_BOOLEAN_oper\"( \"i\" int  OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');\n--Testcase 59: see INIT.SQL with mixed affinity boolean data\nSELECT * FROM \"type_BOOLEAN_oper\";\n--Testcase 60:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n--Testcase 61:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n\n--Testcase 62:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n--Testcase 63:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n\n--Testcase 64:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n--Testcase 65:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n\n--Testcase 66:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 67:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 68:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 69:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 70:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 71:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 72:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 73:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 74:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 75:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b2;\n--Testcase 76:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 77:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE b2;\n--Testcase 78:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n\n--Testcase 79:\nDELETE FROM \"type_BOOLEAN\";\n\n--Testcase 003:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/float4.sql",
    "content": "--\n-- FLOAT4\n--\n--Testcase 46:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 47:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 48:\nCREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 49:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('    0.0');\n--Testcase 2:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30   ');\n--Testcase 3:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     -34.84    ');\n--Testcase 4:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');\n--Testcase 5:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');\n\n-- test for over and under flow\n--Testcase 6:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');\n--Testcase 7:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');\n--Testcase 8:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');\n--Testcase 9:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');\n\n--Testcase 50:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);\n--Testcase 51:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);\n--Testcase 52:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);\n--Testcase 53:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);\n\n--Testcase 54:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');\n--Testcase 55:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');\n--Testcase 56:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');\n--Testcase 57:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('       ');\n--Testcase 12:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     - 3.0');\n--Testcase 17:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('123            5');\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_FLOAT4(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_FLOAT4 VALUES ('34.5', 1), ('xyz', 2), ('1e400', 3);\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3), 'float4');\n\n\n-- special inputs\n--Testcase 18:\nDELETE FROM FLOAT4_TMP;\n--Testcase 58:\nINSERT INTO FLOAT4_TMP VALUES ('NaN'::float4);\n--Testcase 59:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 20:\nDELETE FROM FLOAT4_TMP;\n--Testcase 60:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4);\n--Testcase 61:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 21:\nDELETE FROM FLOAT4_TMP;\n--Testcase 62:\nINSERT INTO FLOAT4_TMP VALUES ('   NAN  '::float4);\n--Testcase 63:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 22:\nDELETE FROM FLOAT4_TMP;\n--Testcase 64:\nINSERT INTO FLOAT4_TMP VALUES ('infinity'::float4);\n--Testcase 65:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 23:\nDELETE FROM FLOAT4_TMP;\n--Testcase 66:\nINSERT INTO FLOAT4_TMP VALUES ('          -INFINiTY   '::float4);\n--Testcase 67:\nSELECT f1 FROM FLOAT4_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT4_TMP;\n--Testcase 68:\nINSERT INTO FLOAT4_TMP VALUES ('N A N'::float4);\n--Testcase 69:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 26:\nDELETE FROM FLOAT4_TMP;\n--Testcase 70:\nINSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4);\n--Testcase 71:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 27:\nDELETE FROM FLOAT4_TMP;\n--Testcase 72:\nINSERT INTO FLOAT4_TMP VALUES (' INFINITY    x'::float4);\n--Testcase 73:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT4_TMP;\n--Testcase 74:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0);\n--Testcase 75:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 30:\nDELETE FROM FLOAT4_TMP;\n--Testcase 76:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4);\n--Testcase 77:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 185:\nDELETE FROM FLOAT4_TMP;\n--Testcase 186:\nINSERT INTO FLOAT4_TMP VALUES ('42'::float4 / 'Infinity'::float4);\n--Testcase 187:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 31:\nDELETE FROM FLOAT4_TMP;\n--Testcase 78:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4);\n--Testcase 79:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 188:\nDELETE FROM FLOAT4_TMP;\n--Testcase 189:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / '0'::float4);\n--Testcase 190:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 32:\nDELETE FROM FLOAT4_TMP;\n--Testcase 80:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4);\n--Testcase 81:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT4_TBL;\n\n--SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';\n\n--SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 35:\nSELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 36:\nSELECT f.* FROM FLOAT4_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 37:\nSELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 38:\nSELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 39:\nSELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 40:\nSELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n-- test divide by zero\n--Testcase 41:\nSELECT f.f1 / '0.0' from FLOAT4_TBL f;\n\n--Testcase 42:\nSELECT * FROM FLOAT4_TBL;\n\n-- test the unary float4abs operator\n--Testcase 43:\nSELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;\n\n--Testcase 44:\nUPDATE FLOAT4_TBL\n   SET f1 = FLOAT4_TBL.f1 * '-1'\n   WHERE FLOAT4_TBL.f1 > '0.0';\n\n--Testcase 45:\nSELECT * FROM FLOAT4_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 82:\nDELETE FROM FLOAT4_TMP;\n--Testcase 83:\nINSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4);\n--Testcase 84:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 85:\nDELETE FROM FLOAT4_TMP;\n--Testcase 86:\nINSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4);\n--Testcase 87:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 88:\nDELETE FROM FLOAT4_TMP;\n--Testcase 89:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4);\n--Testcase 90:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 91:\nDELETE FROM FLOAT4_TMP;\n--Testcase 92:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4);\n--Testcase 93:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 94:\nDELETE FROM FLOAT4_TMP;\n--Testcase 95:\nINSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4);\n--Testcase 96:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 97:\nDELETE FROM FLOAT4_TMP;\n--Testcase 98:\nINSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4);\n--Testcase 99:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 100:\nDELETE FROM FLOAT4_TMP;\n--Testcase 101:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4);\n--Testcase 102:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 103:\nDELETE FROM FLOAT4_TMP;\n--Testcase 104:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4);\n--Testcase 105:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 106:\nDELETE FROM FLOAT4_TMP;\n--Testcase 107:\nINSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4);\n--Testcase 108:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 109:\nDELETE FROM FLOAT4_TMP;\n--Testcase 110:\nINSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4);\n--Testcase 111:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 112:\nDELETE FROM FLOAT4_TMP;\n--Testcase 113:\nINSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4);\n--Testcase 114:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 115:\nDELETE FROM FLOAT4_TMP;\n--Testcase 116:\nINSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4);\n--Testcase 117:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n\n-- Test for correct input rounding in edge cases.\n-- These lists are from Paxson 1991, excluding subnormals and\n-- inputs of over 9 sig. digits.\n--Testcase 118:\nDELETE FROM FLOAT4_TMP;\n--Testcase 119:\nINSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4);\n--Testcase 120:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 121:\nDELETE FROM FLOAT4_TMP;\n--Testcase 122:\nINSERT INTO FLOAT4_TMP VALUES ('67e14'::float4);\n--Testcase 123:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 124:\nDELETE FROM FLOAT4_TMP;\n--Testcase 125:\nINSERT INTO FLOAT4_TMP VALUES ('985e15'::float4);\n--Testcase 126:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 127:\nDELETE FROM FLOAT4_TMP;\n--Testcase 128:\nINSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4);\n--Testcase 129:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 130:\nDELETE FROM FLOAT4_TMP;\n--Testcase 131:\nINSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4);\n--Testcase 132:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 133:\nDELETE FROM FLOAT4_TMP;\n--Testcase 134:\nINSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4);\n--Testcase 135:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 136:\nDELETE FROM FLOAT4_TMP;\n--Testcase 137:\nINSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4);\n--Testcase 138:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 139:\nDELETE FROM FLOAT4_TMP;\n--Testcase 140:\nINSERT INTO FLOAT4_TMP VALUES ('57e18'::float4);\n--Testcase 141:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 142:\nDELETE FROM FLOAT4_TMP;\n--Testcase 143:\nINSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4);\n--Testcase 144:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 145:\nDELETE FROM FLOAT4_TMP;\n--Testcase 146:\nINSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4);\n--Testcase 147:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 148:\nDELETE FROM FLOAT4_TMP;\n--Testcase 149:\nINSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4);\n--Testcase 150:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 151:\nDELETE FROM FLOAT4_TMP;\n--Testcase 152:\nINSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4);\n--Testcase 153:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 154:\nDELETE FROM FLOAT4_TMP;\n--Testcase 155:\nINSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4);\n--Testcase 156:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 157:\nDELETE FROM FLOAT4_TMP;\n--Testcase 158:\nINSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4);\n--Testcase 159:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 160:\nDELETE FROM FLOAT4_TMP;\n--Testcase 161:\nINSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4);\n--Testcase 162:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- Test that the smallest possible normalized input value inputs\n-- correctly, either in 9-significant-digit or shortest-decimal\n-- format.\n--\n-- exact val is             1.1754943508...\n-- shortest val is          1.1754944000\n-- midpoint to next val is  1.1754944208...\n\n--Testcase 163:\nDELETE FROM FLOAT4_TMP;\n--Testcase 164:\nINSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4);\n--Testcase 165:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 166:\nDELETE FROM FLOAT4_TMP;\n--Testcase 167:\nINSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4);\n--Testcase 168:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 169:\ncreate type xfloat4;\n--Testcase 170:\ncreate function xfloat4in(cstring) returns xfloat4 immutable strict\n  language internal as 'int4in';\n--Testcase 171:\ncreate function xfloat4out(xfloat4) returns cstring immutable strict\n  language internal as 'int4out';\n--Testcase 172:\ncreate type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4);\n--Testcase 173:\ncreate cast (xfloat4 as float4) without function;\n--Testcase 174:\ncreate cast (float4 as xfloat4) without function;\n--Testcase 175:\ncreate cast (xfloat4 as integer) without function;\n--Testcase 176:\ncreate cast (integer as xfloat4) without function;\n\n-- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 177:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 178:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'00000001'),\n  (x'00000002'), (x'00000003'),\n  (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'),\n  (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'),\n  -- stress values\n  (x'0053c4f4'),  -- 7693e-42\n  (x'006c85c4'),  -- 996622e-44\n  (x'0041ca76'),  -- 60419369e-46\n  (x'004b7678'),  -- 6930161142e-48\n  -- taken from upstream testsuite\n  (x'00000007'),\n  (x'00424fe2'),\n  -- borderline between subnormal and normal\n  (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff');\n--Testcase 179:\nselect float4send(flt) as ibits,\n       flt\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\nbegin;\n\n--Testcase 180:\ninsert into testdata(bits) values\n  (x'00000000'),\n  -- smallest normal values\n  (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'),\n  (x'00800006'),\n  -- small normal values chosen for short vs. long output\n  (x'008002f1'), (x'008002f2'), (x'008002f3'),\n  (x'00800e17'), (x'00800e18'), (x'00800e19'),\n  -- assorted values (random mantissae)\n  (x'01000001'), (x'01102843'), (x'01a52c98'),\n  (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'),\n  (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'),\n  (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'),\n  (x'1f850283'), (x'2874a9d6'),\n  -- values around 5e-08\n  (x'3356bf94'), (x'3356bf95'), (x'3356bf96'),\n  -- around 1e-07\n  (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'),\n  -- around 3e-07 .. 1e-04\n  (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'),\n  (x'350637bc'), (x'350637bd'), (x'350637be'),\n  (x'35719786'), (x'35719787'), (x'35719788'),\n  (x'358637bc'), (x'358637bd'), (x'358637be'),\n  (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'),\n  (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'),\n  -- format crossover at 1e-04\n  (x'38d1b714'), (x'38d1b715'), (x'38d1b716'),\n  (x'38d1b717'), (x'38d1b718'), (x'38d1b719'),\n  (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'),\n  (x'38d1b71d'),\n  --\n  (x'38dffffe'), (x'38dfffff'), (x'38e00000'),\n  (x'38efffff'), (x'38f00000'), (x'38f00001'),\n  (x'3a83126e'), (x'3a83126f'), (x'3a831270'),\n  (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'),\n  (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'),\n  -- chosen to need 9 digits for 3dcccd70\n  (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'),\n  --\n  (x'3effffff'), (x'3f000000'), (x'3f000001'),\n  (x'3f333332'), (x'3f333333'), (x'3f333334'),\n  -- approach 1.0 with increasing numbers of 9s\n  (x'3f666665'), (x'3f666666'), (x'3f666667'),\n  (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'),\n  (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'),\n  (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'),\n  (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'),\n  (x'3f7fffee'), (x'3f7fffef'),\n  -- values very close to 1\n  (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'),\n  (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'),\n  (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'),\n  (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'),\n  (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'),\n  (x'3f7fffff'),\n  (x'3f800000'),\n  (x'3f800001'), (x'3f800002'), (x'3f800003'),\n  (x'3f800004'), (x'3f800005'), (x'3f800006'),\n  (x'3f800007'), (x'3f800008'), (x'3f800009'),\n  -- values 1 to 1.1\n  (x'3f80000f'), (x'3f800010'), (x'3f800011'),\n  (x'3f800012'), (x'3f800013'), (x'3f800014'),\n  (x'3f800017'), (x'3f800018'), (x'3f800019'),\n  (x'3f80001a'), (x'3f80001b'), (x'3f80001c'),\n  (x'3f800029'), (x'3f80002a'), (x'3f80002b'),\n  (x'3f800053'), (x'3f800054'), (x'3f800055'),\n  (x'3f800346'), (x'3f800347'), (x'3f800348'),\n  (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'),\n  (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'),\n  (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'),\n  --\n  (x'3fc90fdb'), -- pi/2\n  (x'402df854'), -- e\n  (x'40490fdb'), -- pi\n  --\n  (x'409fffff'), (x'40a00000'), (x'40a00001'),\n  (x'40afffff'), (x'40b00000'), (x'40b00001'),\n  (x'411fffff'), (x'41200000'), (x'41200001'),\n  (x'42c7ffff'), (x'42c80000'), (x'42c80001'),\n  (x'4479ffff'), (x'447a0000'), (x'447a0001'),\n  (x'461c3fff'), (x'461c4000'), (x'461c4001'),\n  (x'47c34fff'), (x'47c35000'), (x'47c35001'),\n  (x'497423ff'), (x'49742400'), (x'49742401'),\n  (x'4b18967f'), (x'4b189680'), (x'4b189681'),\n  (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'),\n  (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'),\n  (x'501502f8'), (x'501502f9'), (x'501502fa'),\n  (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'),\n  -- stress values\n  (x'1f6c1e4a'),  -- 5e-20\n  (x'59be6cea'),  -- 67e14\n  (x'5d5ab6c4'),  -- 985e15\n  (x'2cc4a9bd'),  -- 55895e-16\n  (x'15ae43fd'),  -- 7038531e-32\n  (x'2cf757ca'),  -- 702990899e-20\n  (x'665ba998'),  -- 25933168707e13\n  (x'743c3324'),  -- 596428896559e20\n  -- exercise fixed-point memmoves\n  (x'47f1205a'),\n  (x'4640e6ae'),\n  (x'449a5225'),\n  (x'42f6e9d5'),\n  (x'414587dd'),\n  (x'3f9e064b'),\n  -- these cases come from the upstream's testsuite\n  -- BoundaryRoundEven\n  (x'4c000004'),\n  (x'50061c46'),\n  (x'510006a8'),\n  -- ExactValueRoundEven\n  (x'48951f84'),\n  (x'45fd1840'),\n  -- LotsOfTrailingZeros\n  (x'39800000'),\n  (x'3b200000'),\n  (x'3b900000'),\n  (x'3bd00000'),\n  -- Regression\n  (x'63800000'),\n  (x'4b000000'),\n  (x'4b800000'),\n  (x'4c000001'),\n  (x'4c800b0d'),\n  (x'00d24584'),\n  (x'00d90b88'),\n  (x'45803f34'),\n  (x'4f9f24f7'),\n  (x'3a8722c3'),\n  (x'5c800041'),\n  (x'15ae43fd'),\n  (x'5d4cccfb'),\n  (x'4c800001'),\n  (x'57800ed8'),\n  (x'5f000000'),\n  (x'700000f0'),\n  (x'5f23e9ac'),\n  (x'5e9502f9'),\n  (x'5e8012b1'),\n  (x'3c000028'),\n  (x'60cde861'),\n  (x'03aa2a50'),\n  (x'43480000'),\n  (x'4c000000'),\n  -- LooksLikePow5\n  (x'5D1502F9'),\n  (x'5D9502F9'),\n  (x'5E1502F9'),\n  -- OutputLength\n  (x'3f99999a'),\n  (x'3f9d70a4'),\n  (x'3f9df3b6'),\n  (x'3f9e0419'),\n  (x'3f9e0610'),\n  (x'3f9e064b'),\n  (x'3f9e0651'),\n  (x'03d20cfe');\n\n--Testcase 181:\nselect float4send(flt) as ibits,\n       flt,\n       flt::text::float4 as r_flt,\n       float4send(flt::text::float4) as obits,\n       float4send(flt::text::float4) = float4send(flt) as correct\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\n-- clean up, lest opr_sanity complain\n--Testcase 182:\ndrop type xfloat4 cascade;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/float8.sql",
    "content": "--\n-- FLOAT8\n--\n--Testcase 113:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 114:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 115:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 116:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 2:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 3:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 4:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 5:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- test for underflow and overflow handling\n--Testcase 6:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e400'::float8);\n--Testcase 7:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e400'::float8);\n--Testcase 8:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e-400'::float8);\n--Testcase 9:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e-400'::float8);\n\n-- test smallest normalized input\n--Testcase 117:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('2.2250738585072014E-308'::float8);\n--Testcase 118:\nSELECT float8send(f1) FROM FLOAT8_TMP;\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('     ');\n--Testcase 12:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');\n--Testcase 17:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_FLOAT8(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_FLOAT8 VALUES ('34.5', 1), ('xyz', 2), ('1e4000', 3);\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 3), 'float8');\n\n-- special inputs\n--Testcase 19:\nDELETE FROM FLOAT8_TMP;\n--Testcase 119:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8);\n--Testcase 120:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 20:\nDELETE FROM FLOAT8_TMP;\n--Testcase 121:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8);\n--Testcase 122:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 21:\nDELETE FROM FLOAT8_TMP;\n--Testcase 123:\nINSERT INTO FLOAT8_TMP VALUES ('   NAN  '::float8);\n--Testcase 124:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 22:\nDELETE FROM FLOAT8_TMP;\n--Testcase 125:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8);\n--Testcase 126:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 23:\nDELETE FROM FLOAT8_TMP;\n--Testcase 127:\nINSERT INTO FLOAT8_TMP VALUES ('          -INFINiTY   '::float8);\n--Testcase 128:\nSELECT f1 FROM FLOAT8_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT8_TMP;\n--Testcase 129:\nINSERT INTO FLOAT8_TMP VALUES ('N A N'::float8);\n--Testcase 130:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 26:\nDELETE FROM FLOAT8_TMP;\n--Testcase 131:\nINSERT INTO FLOAT8_TMP VALUES ('NaN x'::float8);\n--Testcase 132:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 27:\nDELETE FROM FLOAT8_TMP;\n--Testcase 133:\nINSERT INTO FLOAT8_TMP VALUES (' INFINITY    x'::float8);\n--Testcase 134:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT8_TMP;\n--Testcase 135:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 + 100.0);\n--Testcase 136:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 30:\nDELETE FROM FLOAT8_TMP;\n--Testcase 137:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 / 'Infinity'::float8);\n--Testcase 138:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 272:\nDELETE FROM FLOAT8_TMP;\n--Testcase 273:\nINSERT INTO FLOAT8_TMP VALUES ('42'::float8 / 'Infinity'::float8);\n--Testcase 274:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 31:\nDELETE FROM FLOAT8_TMP;\n--Testcase 139:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / 'nan'::float8);\n--Testcase 140:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 275:\nDELETE FROM FLOAT8_TMP;\n--Testcase 276:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / '0'::float8);\n--Testcase 277:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 32:\nDELETE FROM FLOAT8_TMP;\n--Testcase 141:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::numeric::float8);\n--Testcase 142:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 35:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';\n\n--Testcase 36:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';\n\n--Testcase 37:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;\n\n--Testcase 38:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 39:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 40:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 41:\nSELECT f.f1, f.f1 * '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 42:\nSELECT f.f1, f.f1 + '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 43:\nSELECT f.f1, f.f1 / '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 44:\nSELECT f.f1, f.f1 - '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 45:\nSELECT f.f1 ^ '2.0' AS square_f1\n   FROM FLOAT8_TBL f where f.f1 = '1004.3';\n\n-- absolute value\n--Testcase 46:\nSELECT f.f1, @f.f1 AS abs_f1\n   FROM FLOAT8_TBL f;\n\n-- truncate\n--Testcase 47:\nSELECT f.f1, trunc(f.f1) AS trunc_f1\n   FROM FLOAT8_TBL f;\n\n-- round\n--Testcase 48:\nSELECT f.f1, round(f.f1) AS round_f1\n   FROM FLOAT8_TBL f;\n\n-- ceil / ceiling\n--Testcase 49:\nselect ceil(f1) as ceil_f1 from float8_tbl f;\n--Testcase 50:\nselect ceiling(f1) as ceiling_f1 from float8_tbl f;\n\n-- floor\n--Testcase 51:\nselect floor(f1) as floor_f1 from float8_tbl f;\n\n-- sign\n--Testcase 52:\nselect sign(f1) as sign_f1 from float8_tbl f;\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 278:\nSET extra_float_digits = 0;\n\n-- square root\nBEGIN;\n--Testcase 53:\nDELETE FROM FLOAT8_TBL;\n--Testcase 54:\nINSERT INTO FLOAT8_TBL VALUES ('64'::float8);\n--Testcase 55:\nSELECT sqrt(f1) as eight FROM FLOAT8_TBL;\n--Testcase 56:\nSELECT |/f1 as eight FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 57:\nSELECT f.f1, |/f.f1 AS sqrt_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- power\n--Testcase 58:\nDELETE FROM FLOAT8_TMP;\n--Testcase 143:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, '0.5'::float8);\n--Testcase 144:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 60:\nDELETE FROM FLOAT8_TMP;\n--Testcase 145:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, '0.5'::float8);\n--Testcase 146:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 61:\nDELETE FROM FLOAT8_TMP;\n--Testcase 147:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, 'NaN'::float8);\n--Testcase 148:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 62:\nDELETE FROM FLOAT8_TMP;\n--Testcase 149:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, 'NaN'::float8);\n--Testcase 150:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 63:\nDELETE FROM FLOAT8_TMP;\n--Testcase 151:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'NaN'::float8);\n--Testcase 152:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 64:\nDELETE FROM FLOAT8_TMP;\n--Testcase 153:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'NaN'::float8);\n--Testcase 154:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 65:\nDELETE FROM FLOAT8_TMP;\n--Testcase 155:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8 , '0'::float8);\n--Testcase 156:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 279:\nDELETE FROM FLOAT8_TMP;\n--Testcase 280:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '0'::float8);\n--Testcase 281:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 282:\nDELETE FROM FLOAT8_TMP;\n--Testcase 283:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '0'::float8);\n--Testcase 284:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 285:\nDELETE FROM FLOAT8_TMP;\n--Testcase 286:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, 'infinity'::float8);\n--Testcase 287:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 288:\nDELETE FROM FLOAT8_TMP;\n--Testcase 289:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, '-infinity'::float8);\n--Testcase 290:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 291:\nDELETE FROM FLOAT8_TMP;\n--Testcase 292:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'infinity'::float8);\n--Testcase 293:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 294:\nDELETE FROM FLOAT8_TMP;\n--Testcase 295:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, '-infinity'::float8);\n--Testcase 296:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 297:\nDELETE FROM FLOAT8_TMP;\n--Testcase 298:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'infinity'::float8);\n--Testcase 299:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 300:\nDELETE FROM FLOAT8_TMP;\n--Testcase 301:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, '-infinity'::float8);\n--Testcase 302:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 303:\nDELETE FROM FLOAT8_TMP;\n--Testcase 304:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, 'infinity'::float8);\n--Testcase 305:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 306:\nDELETE FROM FLOAT8_TMP;\n--Testcase 307:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, 'infinity'::float8);\n--Testcase 308:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 309:\nDELETE FROM FLOAT8_TMP;\n--Testcase 310:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, 'infinity'::float8);\n--Testcase 311:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 312:\nDELETE FROM FLOAT8_TMP;\n--Testcase 313:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, 'infinity'::float8);\n--Testcase 314:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 315:\nDELETE FROM FLOAT8_TMP;\n--Testcase 316:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, '-infinity'::float8);\n--Testcase 317:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 318:\nDELETE FROM FLOAT8_TMP;\n--Testcase 319:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, '-infinity'::float8);\n--Testcase 320:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 321:\nDELETE FROM FLOAT8_TMP;\n--Testcase 322:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, '-infinity'::float8);\n--Testcase 323:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 324:\nDELETE FROM FLOAT8_TMP;\n--Testcase 325:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, '-infinity'::float8);\n--Testcase 326:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 327:\nDELETE FROM FLOAT8_TMP;\n--Testcase 328:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-2'::float8);\n--Testcase 329:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 330:\nDELETE FROM FLOAT8_TMP;\n--Testcase 331:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '2'::float8);\n--Testcase 332:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 333:\nDELETE FROM FLOAT8_TMP;\n--Testcase 334:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, 'infinity'::float8);\n--Testcase 335:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 336:\nDELETE FROM FLOAT8_TMP;\n--Testcase 337:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-infinity'::float8);\n--Testcase 338:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- Intel's icc misoptimizes the code that controls the sign of this result,\n-- even with -mp1.  Pending a fix for that, only test for \"is it zero\".\n--Testcase 339:\nDELETE FROM FLOAT8_TMP;\n--Testcase 340:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-2'::float8);\n--Testcase 341:\nSELECT power(f1, f2) = '0' FROM FLOAT8_TMP;\n--Testcase 342:\nDELETE FROM FLOAT8_TMP;\n--Testcase 343:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3'::float8);\n--Testcase 344:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 345:\nDELETE FROM FLOAT8_TMP;\n--Testcase 346:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '2'::float8);\n--Testcase 347:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 348:\nDELETE FROM FLOAT8_TMP;\n--Testcase 349:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '3'::float8);\n--Testcase 350:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 351:\nDELETE FROM FLOAT8_TMP;\n--Testcase 352:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3.5'::float8);\n--Testcase 353:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 354:\nDELETE FROM FLOAT8_TMP;\n--Testcase 355:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, 'infinity'::float8);\n--Testcase 356:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 357:\nDELETE FROM FLOAT8_TMP;\n--Testcase 358:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-infinity'::float8);\n--Testcase 359:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- take exp of ln(f.f1)\n--Testcase 67:\nSELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- check edge cases for exp\n--Testcase 360:\nDELETE FROM FLOAT8_TMP;\n--Testcase 361:\nINSERT INTO FLOAT8_TMP VALUES ('inf'::float8), ('-inf'::float8), ('nan'::float8);\n--Testcase 362:\nSELECT exp(f1) FROM FLOAT8_TMP;\n\n-- cube root\nBEGIN;\n--Testcase 68:\nDELETE FROM FLOAT8_TBL;\n--Testcase 69:\nINSERT INTO FLOAT8_TBL VALUES ('27'::float8);\n--Testcase 70:\nSELECT ||/f1 as three FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 71:\nSELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;\n\n\n--Testcase 72:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 73:\nUPDATE FLOAT8_TBL\n   SET f1 = FLOAT8_TBL.f1 * '-1'\n   WHERE FLOAT8_TBL.f1 > '0.0';\n\n--Testcase 74:\nSELECT f.f1 * '1e200' from FLOAT8_TBL f;\n\n--Testcase 75:\nSELECT f.f1 ^ '1e200' from FLOAT8_TBL f;\n\nBEGIN;\n--Testcase 76:\nDELETE FROM FLOAT8_TBL;\n--Testcase 77:\nINSERT INTO FLOAT8_TBL VALUES (0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5);\n--Testcase 78:\nSELECT * FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 79:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;\n\n--Testcase 80:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;\n\n--Testcase 81:\nSELECT exp(f.f1) from FLOAT8_TBL f;\n\n--Testcase 82:\nSELECT f.f1 / '0.0' from FLOAT8_TBL f;\n\n--Testcase 83:\nSELECT * FROM FLOAT8_TBL;\n\n-- hyperbolic functions\n-- we run these with extra_float_digits = 0 too, since different platforms\n-- tend to produce results that vary in the last place.\n--Testcase 157:\nDELETE FROM FLOAT8_TMP;\n--Testcase 158:\nINSERT INTO FLOAT8_TMP(f1) VALUES (1);\n--Testcase 159:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n--Testcase 160:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n--Testcase 161:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n--Testcase 162:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 163:\nDELETE FROM FLOAT8_TMP;\n--Testcase 164:\nINSERT INTO FLOAT8_TMP(f1) VALUES (2);\n--Testcase 165:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n--Testcase 166:\nDELETE FROM FLOAT8_TMP;\n--Testcase 167:\nINSERT INTO FLOAT8_TMP(f1) VALUES (0.5);\n--Testcase 168:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- test Inf/NaN cases for hyperbolic functions\n--Testcase 169:\nDELETE FROM FLOAT8_TMP;\n--Testcase 170:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 171:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 172:\nDELETE FROM FLOAT8_TMP;\n--Testcase 173:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 174:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 175:\nDELETE FROM FLOAT8_TMP;\n--Testcase 176:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 177:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 178:\nDELETE FROM FLOAT8_TMP;\n--Testcase 179:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 180:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 181:\nDELETE FROM FLOAT8_TMP;\n--Testcase 182:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 183:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 184:\nDELETE FROM FLOAT8_TMP;\n--Testcase 185:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 186:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 187:\nDELETE FROM FLOAT8_TMP;\n--Testcase 188:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 189:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 190:\nDELETE FROM FLOAT8_TMP;\n--Testcase 191:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 192:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 193:\nDELETE FROM FLOAT8_TMP;\n--Testcase 194:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 195:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 196:\nDELETE FROM FLOAT8_TMP;\n--Testcase 197:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 198:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 199:\nDELETE FROM FLOAT8_TMP;\n--Testcase 200:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 201:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 202:\nDELETE FROM FLOAT8_TMP;\n--Testcase 203:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 204:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test\n-- SELECT acosh(float8 'infinity');\n--Testcase 205:\nDELETE FROM FLOAT8_TMP;\n--Testcase 206:\nINSERT INTO FLOAT8_TMP VALUES (float8 '-infinity');\n--Testcase 207:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 208:\nDELETE FROM FLOAT8_TMP;\n--Testcase 209:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 210:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 211:\nDELETE FROM FLOAT8_TMP;\n--Testcase 212:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'infinity'));\n--Testcase 213:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 214:\nDELETE FROM FLOAT8_TMP;\n--Testcase 215:\nINSERT INTO FLOAT8_TMP VALUES ((float8 '-infinity'));\n--Testcase 216:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 217:\nDELETE FROM FLOAT8_TMP;\n--Testcase 218:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 219:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- error functions\n-- we run these with extra_float_digits = -1, to get consistently rounded\n-- results on all platforms.\nSET extra_float_digits = -1;\n\nDELETE FROM FLOAT8_TBL;\nINSERT INTO FLOAT8_TBL(f1) VALUES (float8 '-infinity'),\n      (-28), (-6), (-3.4), (-2.1), (-1.1), (-0.45),\n      (-1.2e-9), (-2.3e-13), (-1.2e-17), (0),\n      (1.2e-17), (2.3e-13), (1.2e-9),\n      (0.45), (1.1), (2.1), (3.4), (6), (28),\n      (float8 'infinity'), (float8 'nan');\nSELECT f1,\n       erf(f1),\n       erfc(f1)\nFROM FLOAT8_TBL;\n\n--Testcase 369:\nRESET extra_float_digits;\n\n-- test for over- and underflow\n--Testcase 84:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');\n\n--Testcase 85:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');\n\n--Testcase 86:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');\n\n--Testcase 87:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');\n\n-- maintain external table consistency across platforms\n-- delete all values and reinsert well-behaved ones\n\n--Testcase 88:\nDELETE FROM FLOAT8_TBL;\n\n--Testcase 89:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');\n\n--Testcase 90:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');\n\n--Testcase 91:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');\n\n--Testcase 92:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');\n\n--Testcase 93:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');\n\n--Testcase 94:\nSELECT * FROM FLOAT8_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 220:\nDELETE FROM FLOAT8_TMP;\n--Testcase 221:\nINSERT INTO FLOAT8_TMP VALUES ('32767.4'::float8);\n--Testcase 222:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 223:\nDELETE FROM FLOAT8_TMP;\n--Testcase 224:\nINSERT INTO FLOAT8_TMP VALUES ('32767.6'::float8);\n--Testcase 225:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 226:\nDELETE FROM FLOAT8_TMP;\n--Testcase 227:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.4'::float8);\n--Testcase 228:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 229:\nDELETE FROM FLOAT8_TMP;\n--Testcase 230:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.6'::float8);\n--Testcase 231:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 232:\nDELETE FROM FLOAT8_TMP;\n--Testcase 233:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.4'::float8);\n--Testcase 234:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 235:\nDELETE FROM FLOAT8_TMP;\n--Testcase 236:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.6'::float8);\n--Testcase 237:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 238:\nDELETE FROM FLOAT8_TMP;\n--Testcase 239:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.4'::float8);\n--Testcase 240:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 241:\nDELETE FROM FLOAT8_TMP;\n--Testcase 242:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.6'::float8);\n--Testcase 243:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 244:\nDELETE FROM FLOAT8_TMP;\n--Testcase 245:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854773760'::float8);\n--Testcase 246:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 247:\nDELETE FROM FLOAT8_TMP;\n--Testcase 248:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854775807'::float8);\n--Testcase 249:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 250:\nDELETE FROM FLOAT8_TMP;\n--Testcase 251:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854775808.5'::float8);\n--Testcase 252:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 253:\nDELETE FROM FLOAT8_TMP;\n--Testcase 254:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854780000'::float8);\n--Testcase 255:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n-- test exact cases for trigonometric functions in degrees\n\nBEGIN;\n--Testcase 95:\nDELETE FROM FLOAT8_TBL;\n--Testcase 96:\nINSERT INTO FLOAT8_TBL VALUES (0), (30), (90), (150), (180),\n      (210), (270), (330), (360);\n--Testcase 97:\nSELECT f1,\n       sind(f1),\n       sind(f1) IN (-1,-0.5,0,0.5,1) AS sind_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 98:\nDELETE FROM FLOAT8_TBL;\n--Testcase 99:\nINSERT INTO FLOAT8_TBL VALUES (0), (60), (90), (120), (180),\n      (240), (270), (300), (360);\n--Testcase 100:\nSELECT f1,\n       cosd(f1),\n       cosd(f1) IN (-1,-0.5,0,0.5,1) AS cosd_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 101:\nDELETE FROM FLOAT8_TBL;\n--Testcase 102:\nINSERT INTO FLOAT8_TBL VALUES (0), (45), (90), (135), (180),\n      (225), (270), (315), (360);\n--Testcase 103:\nSELECT f1,\n       tand(f1),\n       tand(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS tand_exact,\n       cotd(f1),\n       cotd(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS cotd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 104:\nDELETE FROM FLOAT8_TBL;\n--Testcase 105:\nINSERT INTO FLOAT8_TBL VALUES (-1), (-0.5), (0), (0.5), (1);\n--Testcase 106:\nSELECT f1,\n       asind(f1),\n       asind(f1) IN (-90,-30,0,30,90) AS asind_exact,\n       acosd(f1),\n       acosd(f1) IN (0,60,90,120,180) AS acosd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 107:\nDELETE FROM FLOAT8_TBL;\n--Testcase 108:\nINSERT INTO FLOAT8_TBL VALUES ('-Infinity'::float8), (-1), (0), (1),\n      ('Infinity'::float8);\n--Testcase 109:\nSELECT f1,\n       atand(f1),\n       atand(f1) IN (-90,-45,0,45,90) AS atand_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 110:\nDELETE FROM FLOAT8_TBL;\n--Testcase 111:\nINSERT INTO FLOAT8_TBL SELECT * FROM generate_series(0, 360, 90);\n--Testcase 112:\nSELECT x, y,\n       atan2d(y, x),\n       atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact\nFROM (SELECT 10*cosd(f1), 10*sind(f1)\n          FROM FLOAT8_TBL) AS t(x,y);\n\nROLLBACK;\n\n--\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 256:\ncreate type xfloat8;\n--Testcase 257:\ncreate function xfloat8in(cstring) returns xfloat8 immutable strict\n  language internal as 'int8in';\n--Testcase 258:\ncreate function xfloat8out(xfloat8) returns cstring immutable strict\n  language internal as 'int8out';\n--Testcase 259:\ncreate type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);\n--Testcase 260:\ncreate cast (xfloat8 as float8) without function;\n--Testcase 261:\ncreate cast (float8 as xfloat8) without function;\n--Testcase 262:\ncreate cast (xfloat8 as bigint) without function;\n--Testcase 263:\ncreate cast (bigint as xfloat8) without function;\n\n-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 264:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 265:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'0000000000000001'),\n  (x'0000000000000002'), (x'0000000000000003'),\n  (x'0000000000001000'), (x'0000000100000000'),\n  (x'0000010000000000'), (x'0000010100000000'),\n  (x'0000400000000000'), (x'0000400100000000'),\n  (x'0000800000000000'), (x'0000800000000001'),\n  -- these values taken from upstream testsuite\n  (x'00000000000f4240'),\n  (x'00000000016e3600'),\n  (x'0000008cdcdea440'),\n  -- borderline between subnormal and normal\n  (x'000ffffffffffff0'), (x'000ffffffffffff1'),\n  (x'000ffffffffffffe'), (x'000fffffffffffff');\n--Testcase 266:\nselect float8send(flt) as ibits,\n       flt\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- round-trip tests\n\nbegin;\n--Testcase 267:\ninsert into testdata(bits) values\n  (x'0000000000000000'),\n  -- smallest normal values\n  (x'0010000000000000'), (x'0010000000000001'),\n  (x'0010000000000002'), (x'0018000000000000'),\n  --\n  (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),\n  (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),\n  (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),\n  (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),\n  (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),\n  (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),\n  (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),\n  (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),\n  (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),\n  (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),\n  -- values very close to 1\n  (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),\n  (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),\n  (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),\n  (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),\n  (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),\n  (x'3fefffffffffffff'),\n  (x'3ff0000000000000'),\n  (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),\n  (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),\n  (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),\n  --\n  (x'3ff921fb54442d18'),\n  (x'4005bf0a8b14576a'),\n  (x'400921fb54442d18'),\n  --\n  (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),\n  (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),\n  (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),\n  (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),\n  (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),\n  (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),\n  (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),\n  (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),\n  (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),\n  (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),\n  (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),\n  (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),\n  (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),\n  (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),\n  (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),\n  (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),\n  (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),\n  (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),\n  (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),\n  (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),\n  (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),\n  (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),\n  (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),\n  (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),\n  (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),\n  --\n  (x'7feffffffffffffe'), (x'7fefffffffffffff'),\n  -- round to even tests (+ve)\n  (x'4350000000000002'),\n  (x'4350000000002e06'),\n  (x'4352000000000003'),\n  (x'4352000000000004'),\n  (x'4358000000000003'),\n  (x'4358000000000004'),\n  (x'435f000000000020'),\n  -- round to even tests (-ve)\n  (x'c350000000000002'),\n  (x'c350000000002e06'),\n  (x'c352000000000003'),\n  (x'c352000000000004'),\n  (x'c358000000000003'),\n  (x'c358000000000004'),\n  (x'c35f000000000020'),\n  -- exercise fixed-point memmoves\n  (x'42dc12218377de66'),\n  (x'42a674e79c5fe51f'),\n  (x'4271f71fb04cb74c'),\n  (x'423cbe991a145879'),\n  (x'4206fee0e1a9e061'),\n  (x'41d26580b487e6b4'),\n  (x'419d6f34540ca453'),\n  (x'41678c29dcd6e9dc'),\n  (x'4132d687e3df217d'),\n  (x'40fe240c9fcb68c8'),\n  (x'40c81cd6e63c53d3'),\n  (x'40934a4584fd0fdc'),\n  (x'405edd3c07fb4c93'),\n  (x'4028b0fcd32f7076'),\n  (x'3ff3c0ca428c59f8'),\n  -- these cases come from the upstream's testsuite\n  -- LotsOfTrailingZeros)\n  (x'3e60000000000000'),\n  -- Regression\n  (x'c352bd2668e077c4'),\n  (x'434018601510c000'),\n  (x'43d055dc36f24000'),\n  (x'43e052961c6f8000'),\n  (x'3ff3c0ca2a5b1d5d'),\n  -- LooksLikePow5\n  (x'4830f0cf064dd592'),\n  (x'4840f0cf064dd592'),\n  (x'4850f0cf064dd592'),\n  -- OutputLength\n  (x'3ff3333333333333'),\n  (x'3ff3ae147ae147ae'),\n  (x'3ff3be76c8b43958'),\n  (x'3ff3c083126e978d'),\n  (x'3ff3c0c1fc8f3238'),\n  (x'3ff3c0c9539b8887'),\n  (x'3ff3c0ca2a5b1d5d'),\n  (x'3ff3c0ca4283de1b'),\n  (x'3ff3c0ca43db770a'),\n  (x'3ff3c0ca428abd53'),\n  (x'3ff3c0ca428c1d2b'),\n  (x'3ff3c0ca428c51f2'),\n  (x'3ff3c0ca428c58fc'),\n  (x'3ff3c0ca428c59dd'),\n  (x'3ff3c0ca428c59f8'),\n  (x'3ff3c0ca428c59fb'),\n  -- 32-bit chunking\n  (x'40112e0be8047a7d'),\n  (x'40112e0be815a889'),\n  (x'40112e0be826d695'),\n  (x'40112e0be83804a1'),\n  (x'40112e0be84932ad'),\n  -- MinMaxShift\n  (x'0040000000000000'),\n  (x'007fffffffffffff'),\n  (x'0290000000000000'),\n  (x'029fffffffffffff'),\n  (x'4350000000000000'),\n  (x'435fffffffffffff'),\n  (x'1330000000000000'),\n  (x'133fffffffffffff'),\n  (x'3a6fa7161a4d6e0c');\n--Testcase 268:\nselect float8send(flt) as ibits,\n       flt,\n       flt::text::float8 as r_flt,\n       float8send(flt::text::float8) as obits,\n       float8send(flt::text::float8) = float8send(flt) as correct\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- clean up, lest opr_sanity complain\n--Testcase 269:\ndrop type xfloat8 cascade;\n\n--Testcase 363:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/int4.sql",
    "content": "--\n-- INT4 Based on PostgreSQL tests, please don't add additional tests here, use other test files\n--\n--Testcase 61:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 62:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 63:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 64:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n \n--Testcase 1:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n\n--Testcase 2:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n\n--Testcase 3:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n\n--Testcase 4:\nINSERT INTO INT4_TBL(f1) VALUES ('34.5');\n\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n\n--Testcase 6:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n-- bad input values -- should give errors\n--Testcase 7:\nINSERT INTO INT4_TBL(f1) VALUES ('1000000000000');\n--Testcase 8:\nINSERT INTO INT4_TBL(f1) VALUES ('asdf');\n--Testcase 9:\nINSERT INTO INT4_TBL(f1) VALUES ('     ');\n--Testcase 10:\nINSERT INTO INT4_TBL(f1) VALUES ('   asdf   ');\n--Testcase 11:\nINSERT INTO INT4_TBL(f1) VALUES ('- 1234');\n--Testcase 12:\nINSERT INTO INT4_TBL(f1) VALUES ('123       5');\n--Testcase 13:\nINSERT INTO INT4_TBL(f1) VALUES ('');\n\n\n--Testcase 14:\nSELECT * FROM INT4_TBL;\n\n-- Also try it with non-error-throwing API\n--Testcase 137:\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT4(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 138:\nINSERT INTO NON_ERROR_THROWING_API_INT4 VALUES ('34', 1), ('asdf', 2), ('1000000000000', 3);\n--Testcase 139:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 1;\n--Testcase 140:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 2;\n--Testcase 141:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 3;\n--Testcase 142:\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4 WHERE id = 3), 'int4');\n\n--Testcase 15:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';\n\n--Testcase 16:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';\n\n--Testcase 17:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';\n\n--Testcase 18:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';\n\n--Testcase 19:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';\n\n--Testcase 20:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';\n\n--Testcase 21:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';\n\n--Testcase 22:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';\n\n--Testcase 23:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';\n\n--Testcase 24:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';\n\n--Testcase 25:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';\n\n--Testcase 26:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';\n\n-- positive odds\n--Testcase 27:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';\n\n-- any evens\n--Testcase 28:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';\n\n--Testcase 29:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 30:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 31:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 32:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 33:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 34:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 35:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 36:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 37:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 38:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 39:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 40:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 41:\nSELECT i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 42:\nSELECT i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;\n\n--\n-- more complex expressions\n--\n\n-- variations on unary minus parsing\n\n--Testcase 65:\nDELETE FROM INT4_TMP;\n--Testcase 66:\nINSERT INTO INT4_TMP VALUES (-2, 3);\n--Testcase 67:\nSELECT f1 + f2 as one FROM INT4_TMP;\n\n--Testcase 68:\nDELETE FROM INT4_TMP;\n--Testcase 69:\nINSERT INTO INT4_TMP VALUES (4, 2);\n--Testcase 70:\nSELECT f1 - f2 as two FROM INT4_TMP;\n\n--Testcase 46:\nDELETE FROM INT4_TMP;\n--Testcase 71:\nINSERT INTO INT4_TMP VALUES (2, 1);\n--Testcase 72:\nSELECT f1- -f2 as three FROM INT4_TMP;\n\n--Testcase 47:\nDELETE FROM INT4_TMP;\n--Testcase 73:\nINSERT INTO INT4_TMP VALUES (2, 2);\n--Testcase 74:\nSELECT f1 - -f2 as four FROM INT4_TMP;\n\n--Testcase 75:\nDELETE FROM INT4_TMP;\n--Testcase 76:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int2, '16'::int2 / '4'::int2);\n--Testcase 77:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 78:\nDELETE FROM INT4_TMP;\n--Testcase 79:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int4, '16'::int2 / '4'::int4);\n--Testcase 80:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 81:\nDELETE FROM INT4_TMP;\n--Testcase 82:\nINSERT INTO INT4_TMP VALUES ('2'::int4 * '2'::int2, '16'::int4 / '4'::int2);\n--Testcase 83:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 84:\nDELETE FROM INT4_TMP;\n--Testcase 85:\nINSERT INTO INT4_TMP VALUES ('1000'::int4, '999'::int4);\n--Testcase 86:\nSELECT f1 < f2 AS false FROM INT4_TMP;\n\n--Testcase 50:\nDELETE FROM INT4_TMP;\n--Testcase 91:\nINSERT INTO INT4_TMP VALUES (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1);\n--Testcase 92:\nSELECT f1 as ten FROM INT4_TMP;\n\n--Testcase 51:\nDELETE FROM INT4_TMP;\n--Testcase 93:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 94:\nSELECT f1 + f1/f2 as three FROM INT4_TMP;\n\n--Testcase 52:\nDELETE FROM INT4_TMP;\n--Testcase 95:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 96:\nSELECT (f1 + f2)/f2 as two FROM INT4_TMP;\n\n-- corner case\n--Testcase 54:\nDELETE FROM INT4_TMP;\n--Testcase 97:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 98:\nSELECT (f1<<31)::text FROM INT4_TMP;\n\n--Testcase 56:\nDELETE FROM INT4_TMP;\n--Testcase 99:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 100:\nSELECT ((f1<<31)+1)::text FROM INT4_TMP;\n\n-- check sane handling of INT_MIN overflow cases\n--Testcase 58:\nDELETE FROM INT4_TMP;\n--Testcase 101:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int4);\n--Testcase 102:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 103:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 104:\nSELECT f1 % f2 FROM INT4_TMP;\n\n--Testcase 60:\nDELETE FROM INT4_TMP;\n--Testcase 105:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int2);\n--Testcase 106:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 107:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 108:\nSELECT f1 % f2 FROM INT4_TMP;\n\n-- check rounding when casting from float\n--Testcase 109:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 110:\nDELETE FROM FLOAT8_TMP;\n--Testcase 111:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 112:\nSELECT f1 as x, f1::int4 as int4_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 113:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 114:\nDELETE FROM NUMERIC_TMP;\n--Testcase 115:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 116:\nSELECT f1 as x, f1::int4 as int4_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 117:\nDELETE FROM INT4_TMP;\n--Testcase 118:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 6410818::int4),\n             (61866666::int4, 6410818::int4),\n             (-61866666::int4, 6410818::int4),\n             ((-2147483648)::int4, 1::int4),\n             ((-2147483648)::int4, 2147483647::int4),\n             ((-2147483648)::int4, 1073741824::int4);\n--Testcase 119:\nSELECT f1, f2, gcd(f1, f2), gcd(f1, -f2), gcd(f2, f1), gcd(-f2, f1) FROM INT4_TMP;\n\n--Testcase 120:\nDELETE FROM INT4_TMP;\n--Testcase 121:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 0::int4);\n--Testcase 122:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 123:\nDELETE FROM INT4_TMP;\n--Testcase 124:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-2147483648)::int4);\n--Testcase 125:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n-- test lcm()\n--Testcase 126:\nDELETE FROM INT4_TMP;\n--Testcase 127:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 42::int4),\n             (42::int4, 42::int4),\n             (330::int4, 462::int4),\n             (-330::int4, 462::int4),\n             ((-2147483648)::int4, 0::int4);\n--Testcase 128:\nSELECT f1, f2, lcm(f1, f2), lcm(f1, -f2), lcm(f2, f1), lcm(-f2, f1) FROM INT4_TMP;\n\n--Testcase 129:\nDELETE FROM INT4_TMP;\n--Testcase 130:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 1::int4);\n--Testcase 131:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 132:\nDELETE FROM INT4_TMP;\n--Testcase 133:\nINSERT INTO INT4_TMP VALUES (2147483647::int4, 2147483646::int4);\n--Testcase 134:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n-- non-decimal literals\n--Testcase 143:\nCREATE FOREIGN TABLE special_case_int4 (f1 text, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 144:\nINSERT INTO special_case_int4 VALUES ('0b100101'::int4);\n--Testcase 145:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 146:\nDELETE FROM special_case_int4;\n--Testcase 147:\nINSERT INTO special_case_int4 VALUES ('0o273'::int4);\n--Testcase 148:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 149:\nDELETE FROM special_case_int4;\n--Testcase 150:\nINSERT INTO special_case_int4 VALUES ('0x42F'::int4);\n--Testcase 151:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 152:\nDELETE FROM special_case_int4;\n--Testcase 153:\nINSERT INTO special_case_int4 VALUES ('0b'::int4);\n--Testcase 154:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 155:\nDELETE FROM special_case_int4;\n--Testcase 156:\nINSERT INTO special_case_int4 VALUES ('0x'::int4);\n--Testcase 157:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 158:\nDELETE FROM special_case_int4;\n--Testcase 159:\nINSERT INTO special_case_int4 VALUES ('0x'::int4);\n--Testcase 160:\nSELECT f1 FROM special_case_int4;\n\n-- cases near overflow\n--Testcase 161:\nDELETE FROM special_case_int4;\n--Testcase 162:\nINSERT INTO special_case_int4 VALUES ('0b1111111111111111111111111111111'::int4);\n--Testcase 163:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 164:\nDELETE FROM special_case_int4;\n--Testcase 165:\nINSERT INTO special_case_int4 VALUES ('0b10000000000000000000000000000000'::int4);\n--Testcase 166:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 167:\nDELETE FROM special_case_int4;\n--Testcase 168:\nINSERT INTO special_case_int4 VALUES ('0o17777777777'::int4);\n--Testcase 169:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 170:\nDELETE FROM special_case_int4;\n--Testcase 171:\nINSERT INTO special_case_int4 VALUES ('0o20000000000'::int4);\n--Testcase 172:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 173:\nDELETE FROM special_case_int4;\n--Testcase 174:\nINSERT INTO special_case_int4 VALUES ('0x7FFFFFFF'::int4);\n--Testcase 175:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 176:\nDELETE FROM special_case_int4;\n--Testcase 177:\nINSERT INTO special_case_int4 VALUES ('0x80000000'::int4);\n--Testcase 178:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 179:\nDELETE FROM special_case_int4;\n--Testcase 180:\nINSERT INTO special_case_int4 VALUES ('-0b10000000000000000000000000000000'::int4);\n--Testcase 181:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 182:\nDELETE FROM special_case_int4;\n--Testcase 183:\nINSERT INTO special_case_int4 VALUES ('-0b10000000000000000000000000000001'::int4);\n--Testcase 184:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 185:\nDELETE FROM special_case_int4;\n--Testcase 186:\nINSERT INTO special_case_int4 VALUES ('-0o20000000000'::int4);\n--Testcase 187:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 188:\nDELETE FROM special_case_int4;\n--Testcase 189:\nINSERT INTO special_case_int4 VALUES ('-0o20000000001'::int4);\n--Testcase 190:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 191:\nDELETE FROM special_case_int4;\n--Testcase 192:\nINSERT INTO special_case_int4 VALUES ('-0x80000000'::int4);\n--Testcase 193:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 194:\nDELETE FROM special_case_int4;\n--Testcase 195:\nINSERT INTO special_case_int4 VALUES ('-0x80000001'::int4);\n--Testcase 196:\nSELECT f1 FROM special_case_int4;\n\n\n-- underscores\n--Testcase 197:\nDELETE FROM special_case_int4;\n--Testcase 198:\nINSERT INTO special_case_int4 VALUES ('1_000_000'::int4);\n--Testcase 199:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 200:\nDELETE FROM special_case_int4;\n--Testcase 201:\nINSERT INTO special_case_int4 VALUES ('1_2_3'::int4);\n--Testcase 202:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 203:\nDELETE FROM special_case_int4;\n--Testcase 204:\nINSERT INTO special_case_int4 VALUES ('0x1EEE_FFFF'::int4);\n--Testcase 205:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 206:\nDELETE FROM special_case_int4;\n--Testcase 207:\nINSERT INTO special_case_int4 VALUES ('0o2_73'::int4);\n--Testcase 208:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 209:\nDELETE FROM special_case_int4;\n--Testcase 210:\nINSERT INTO special_case_int4 VALUES ('0b_10_0101'::int4);\n--Testcase 211:\nSELECT f1 FROM special_case_int4;\n\n-- error cases\n--Testcase 212:\nDELETE FROM special_case_int4;\n--Testcase 213:\nINSERT INTO special_case_int4 VALUES ('_100'::int4);\n--Testcase 214:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 215:\nDELETE FROM special_case_int4;\n--Testcase 216:\nINSERT INTO special_case_int4 VALUES ('100_'::int4);\n--Testcase 217:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 218:\nDELETE FROM special_case_int4;\n--Testcase 219:\nINSERT INTO special_case_int4 VALUES ('100__000'::int4);\n--Testcase 220:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 221:\nDELETE FROM INT4_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 135:\nDROP SERVER sqlite_svr;\n--Testcase 136:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/int8.sql",
    "content": "--\n-- INT8\n-- Test int8 64-bit integers.\n--\n--Testcase 140:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 141:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 142:\nCREATE FOREIGN TABLE INT8_TBL(\n\tq1 int8 OPTIONS (key 'true'),\n\tq2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 143:\nCREATE FOREIGN TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4, \n\tq4 int2,\n\tq5 text,\n\tid int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 2:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 3:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 4:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 5:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n-- bad inputs\n--Testcase 6:\nINSERT INTO INT8_TBL(q1) VALUES ('      ');\n--Testcase 7:\nINSERT INTO INT8_TBL(q1) VALUES ('xxx');\n--Testcase 8:\nINSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');\n--Testcase 9:\nINSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');\n--Testcase 10:\nINSERT INTO INT8_TBL(q1) VALUES ('- 123');\n--Testcase 11:\nINSERT INTO INT8_TBL(q1) VALUES ('  345     5');\n--Testcase 12:\nINSERT INTO INT8_TBL(q1) VALUES ('');\n\n--Testcase 13:\nSELECT * FROM INT8_TBL;\n\n-- Also try it with non-error-throwing API\n--Testcase 251:\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT8(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 252:\nINSERT INTO NON_ERROR_THROWING_API_INT8 VALUES ('34', 1), ('asdf', 2), ('10000000000000000000', 3);\n--Testcase 253:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 1;\n--Testcase 254:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 2;\n--Testcase 255:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 3;\n--Testcase 256:\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT8 WHERE id = 3), 'int8');\n\n\n-- int8/int8 cmp\n--Testcase 14:\nSELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;\n--Testcase 15:\nSELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;\n--Testcase 16:\nSELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;\n--Testcase 17:\nSELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;\n--Testcase 18:\nSELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;\n--Testcase 19:\nSELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;\n\n-- int8/int4 cmp\n--Testcase 20:\nSELECT * FROM INT8_TBL WHERE q2 = 456;\n--Testcase 21:\nSELECT * FROM INT8_TBL WHERE q2 <> 456;\n--Testcase 22:\nSELECT * FROM INT8_TBL WHERE q2 < 456;\n--Testcase 23:\nSELECT * FROM INT8_TBL WHERE q2 > 456;\n--Testcase 24:\nSELECT * FROM INT8_TBL WHERE q2 <= 456;\n--Testcase 25:\nSELECT * FROM INT8_TBL WHERE q2 >= 456;\n\n-- int4/int8 cmp\n--Testcase 26:\nSELECT * FROM INT8_TBL WHERE 123 = q1;\n--Testcase 27:\nSELECT * FROM INT8_TBL WHERE 123 <> q1;\n--Testcase 28:\nSELECT * FROM INT8_TBL WHERE 123 < q1;\n--Testcase 29:\nSELECT * FROM INT8_TBL WHERE 123 > q1;\n--Testcase 30:\nSELECT * FROM INT8_TBL WHERE 123 <= q1;\n--Testcase 31:\nSELECT * FROM INT8_TBL WHERE 123 >= q1;\n\n-- int8/int2 cmp\n--Testcase 32:\nSELECT * FROM INT8_TBL WHERE q2 = '456'::int2;\n--Testcase 33:\nSELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;\n--Testcase 34:\nSELECT * FROM INT8_TBL WHERE q2 < '456'::int2;\n--Testcase 35:\nSELECT * FROM INT8_TBL WHERE q2 > '456'::int2;\n--Testcase 36:\nSELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;\n--Testcase 37:\nSELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;\n\n-- int2/int8 cmp\n--Testcase 38:\nSELECT * FROM INT8_TBL WHERE '123'::int2 = q1;\n--Testcase 39:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;\n--Testcase 40:\nSELECT * FROM INT8_TBL WHERE '123'::int2 < q1;\n--Testcase 41:\nSELECT * FROM INT8_TBL WHERE '123'::int2 > q1;\n--Testcase 42:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;\n--Testcase 43:\nSELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;\n\n\n--Testcase 44:\nSELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;\n\n--Testcase 45:\nSELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;\n--Testcase 46:\nSELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;\n--Testcase 47:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;\n--Testcase 48:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL\n WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);\n--Testcase 49:\nSELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;\n\n--Testcase 50:\nSELECT q1, float8(q1) FROM INT8_TBL;\n--Testcase 51:\nSELECT q2, float8(q2) FROM INT8_TBL;\n\n--Testcase 52:\nSELECT 37 + q1 AS plus4 FROM INT8_TBL;\n--Testcase 53:\nSELECT 37 - q1 AS minus4 FROM INT8_TBL;\n--Testcase 54:\nSELECT 2 * q1 AS \"twice int4\" FROM INT8_TBL;\n--Testcase 55:\nSELECT q1 * 2 AS \"twice int4\" FROM INT8_TBL;\n\n-- int8 op int4\n--Testcase 56:\nSELECT q1 + 42::int4 AS \"8plus4\", q1 - 42::int4 AS \"8minus4\", q1 * 42::int4 AS \"8mul4\", q1 / 42::int4 AS \"8div4\" FROM INT8_TBL;\n-- int4 op int8\n--Testcase 57:\nSELECT 246::int4 + q1 AS \"4plus8\", 246::int4 - q1 AS \"4minus8\", 246::int4 * q1 AS \"4mul8\", 246::int4 / q1 AS \"4div8\" FROM INT8_TBL;\n\n-- int8 op int2\n--Testcase 58:\nSELECT q1 + 42::int2 AS \"8plus2\", q1 - 42::int2 AS \"8minus2\", q1 * 42::int2 AS \"8mul2\", q1 / 42::int2 AS \"8div2\" FROM INT8_TBL;\n-- int2 op int8\n--Testcase 59:\nSELECT 246::int2 + q1 AS \"2plus8\", 246::int2 - q1 AS \"2minus8\", 246::int2 * q1 AS \"2mul8\", 246::int2 / q1 AS \"2div8\" FROM INT8_TBL;\n\n--Testcase 60:\nSELECT q2, abs(q2) FROM INT8_TBL;\n--Testcase 61:\nSELECT min(q1), min(q2) FROM INT8_TBL;\n--Testcase 62:\nSELECT max(q1), max(q2) FROM INT8_TBL;\n\n\n-- TO_CHAR()\n--\n--Testcase 63:\nSELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')\n\tFROM INT8_TBL;\n\n--Testcase 64:\nSELECT to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')\n\tFROM INT8_TBL;\n\n--Testcase 65:\nSELECT to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')\n\tFROM INT8_TBL;\n\n--Testcase 66:\nSELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')\n\tFROM INT8_TBL;\n\n--Testcase 67:\nSELECT to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;\n--Testcase 68:\nSELECT to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;\n--Testcase 69:\nSELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;\n--Testcase 70:\nSELECT to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;\n--Testcase 71:\nSELECT to_char(q2, '0999999999999999')       FROM INT8_TBL;\n--Testcase 72:\nSELECT to_char(q2, 'S0999999999999999')      FROM INT8_TBL;\n--Testcase 73:\nSELECT to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;\n--Testcase 74:\nSELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;\n--Testcase 75:\nSELECT to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;\n--Testcase 76:\nSELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;\n--Testcase 77:\nSELECT to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;\n--Testcase 78:\nSELECT to_char(q2, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM INT8_TBL;\n--Testcase 79:\nSELECT to_char(q2, '999999SG9999999999')     FROM INT8_TBL;\n\n-- check min/max values and overflow behavior\n--Testcase 80:\nDELETE FROM INT8_TMP;\n--Testcase 144:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 145:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 81:\nDELETE FROM INT8_TMP;\n--Testcase 146:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775809'::int8);\n--Testcase 147:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 82:\nDELETE FROM INT8_TMP;\n--Testcase 148:\nINSERT INTO INT8_TMP VALUES ('9223372036854775807'::int8);\n--Testcase 149:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 83:\nDELETE FROM INT8_TMP;\n--Testcase 150:\nINSERT INTO INT8_TMP VALUES ('9223372036854775808'::int8);\n--Testcase 151:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 84:\nDELETE FROM INT8_TMP;\n--Testcase 152:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775807'::int8));\n--Testcase 153:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 86:\nDELETE FROM INT8_TMP;\n--Testcase 154:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775808'::int8));\n--Testcase 155:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 87:\nDELETE FROM INT8_TMP;\n--Testcase 156:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 157:\nSELECT q1 + q2 FROM INT8_TMP;\n--Testcase 88:\nDELETE FROM INT8_TMP;\n--Testcase 158:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 159:\nSELECT q1 + q2 FROM INT8_TMP;\n\n--Testcase 89:\nDELETE FROM INT8_TMP;\n--Testcase 160:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 161:\nSELECT q1-q2 FROM INT8_TMP;\n--Testcase 90:\nDELETE FROM INT8_TMP;\n--Testcase 162:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 163:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 91:\nDELETE FROM INT8_TMP;\n--Testcase 164:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 165:\nSELECT q1 * q2 FROM INT8_TMP;\n\n--Testcase 92:\nDELETE FROM INT8_TMP;\n--Testcase 166:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 167:\nSELECT q1 / q2 FROM INT8_TMP;\n\n--Testcase 93:\nDELETE FROM INT8_TMP;\n--Testcase 168:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 169:\nSELECT q1 % q2 FROM INT8_TMP;\n\n--Testcase 94:\nDELETE FROM INT8_TMP;\n--Testcase 170:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 171:\nSELECT abs(q1) FROM INT8_TMP;\n\n--Testcase 95:\nDELETE FROM INT8_TMP;\n--Testcase 172:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 173:\nSELECT q1 + q3 FROM INT8_TMP;\n--Testcase 96:\nDELETE FROM INT8_TMP;\n--Testcase 174:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('-9223372036854775800'::int8 , '100'::int4);\n--Testcase 175:\nSELECT q1 - q3 FROM INT8_TMP;\n--Testcase 97:\nDELETE FROM INT8_TMP;\n--Testcase 176:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 177:\nSELECT q1 * q3 FROM INT8_TMP;\n\n--Testcase 98:\nDELETE FROM INT8_TMP;\n--Testcase 178:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 179:\nSELECT q3 + q1 FROM INT8_TMP;\n--Testcase 99:\nDELETE FROM INT8_TMP;\n--Testcase 180:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('-100'::int4 , '9223372036854775800'::int8);\n--Testcase 181:\nSELECT q3 - q1 FROM INT8_TMP;\n--Testcase 100:\nDELETE FROM INT8_TMP;\n--Testcase 182:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 183:\nSELECT q3 * q1 FROM INT8_TMP;\n\n--Testcase 101:\nDELETE FROM INT8_TMP;\n--Testcase 184:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 185:\nSELECT q1 + q4 FROM INT8_TMP;\n--Testcase 102:\nDELETE FROM INT8_TMP;\n--Testcase 186:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775800'::int8 , '100'::int2);\n--Testcase 187:\nSELECT q1 - q4 FROM INT8_TMP;\n--Testcase 103:\nDELETE FROM INT8_TMP;\n--Testcase 188:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 189:\nSELECT q1 * q4 FROM INT8_TMP;\n--Testcase 104:\nDELETE FROM INT8_TMP;\n--Testcase 190:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775808'::int8 , '0'::int2);\n--Testcase 191:\nSELECT q1 / q4 FROM INT8_TMP;\n\n--Testcase 105:\nDELETE FROM INT8_TMP;\n--Testcase 192:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 193:\nSELECT q4 + q1 FROM INT8_TMP;\n--Testcase 106:\nDELETE FROM INT8_TMP;\n--Testcase 194:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('-100'::int2 , '9223372036854775800'::int8);\n--Testcase 195:\nSELECT q4 - q1 FROM INT8_TMP;\n--Testcase 107:\nDELETE FROM INT8_TMP;\n--Testcase 196:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 197:\nSELECT q4 * q1 FROM INT8_TMP;\n--Testcase 108:\nDELETE FROM INT8_TMP;\n--Testcase 198:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '0'::int8);\n--Testcase 199:\nSELECT q4 / q1 FROM INT8_TMP;\n\n--Testcase 110:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;\n--Testcase 111:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 112:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;\n--Testcase 113:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 200:\nDELETE FROM INT8_TMP;\n--Testcase 201:\nINSERT INTO INT8_TMP(q5) VALUES ('42'), ('-37');\n--Testcase 202:\nSELECT CAST(q5::int2 as int8) FROM INT8_TMP;\n\n--Testcase 114:\nSELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;\n\n--Testcase 203:\nDELETE FROM INT8_TMP;\n--Testcase 204:\nINSERT INTO INT8_TMP(q5) VALUES ('36854775807.0');\n--Testcase 205:\nSELECT CAST(q5::float4 AS int8) FROM INT8_TMP;\n\n--Testcase 206:\nDELETE FROM INT8_TMP;\n--Testcase 207:\nINSERT INTO INT8_TMP(q5) VALUES ('922337203685477580700.0');\n--Testcase 208:\nSELECT CAST(q5::float8 AS int8) FROM INT8_TMP;\n\n--Testcase 115:\nSELECT CAST(q1 AS oid) FROM INT8_TBL;\n--Testcase 209:\nSELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';\n\n-- bit operations\n\n--Testcase 116:\nSELECT q1, q2, q1 & q2 AS \"and\", q1 | q2 AS \"or\", q1 # q2 AS \"xor\", ~q1 AS \"not\" FROM INT8_TBL;\n--Testcase 117:\nSELECT q1, q1 << 2 AS \"shl\", q1 >> 3 AS \"shr\" FROM INT8_TBL;\n\n-- generate_series\n\n--Testcase 118:\nDELETE FROM INT8_TMP;\n--Testcase 210:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8) q1;\n--Testcase 211:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 120:\nDELETE FROM INT8_TMP;\n--Testcase 212:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0) q1; -- should error\n--Testcase 213:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 122:\nDELETE FROM INT8_TMP;\n--Testcase 214:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2) q1;\n--Testcase 215:\nSELECT q1 FROM INT8_TMP;\n\n-- corner case\n--Testcase 216:\nDELETE FROM INT8_TMP;\n--Testcase 217:\nINSERT INTO INT8_TMP VALUES (-1::int8<<63);\n--Testcase 218:\nSELECT q1::text FROM INT8_TMP;\n\n--Testcase 219:\nDELETE FROM INT8_TMP;\n--Testcase 220:\nINSERT INTO INT8_TMP VALUES ((-1::int8<<63)+1);\n--Testcase 221:\nSELECT q1::text FROM INT8_TMP;\n\n-- check sane handling of INT64_MIN overflow cases\n--Testcase 125:\nDELETE FROM INT8_TMP;\n--Testcase 222:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int8, 888);\n--Testcase 126:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int8, 888);\n--Testcase 127:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int8, 888);\n--Testcase 128:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 129:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 130:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int4, 888);\n--Testcase 131:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int4, 888);\n--Testcase 132:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int4, 888);\n--Testcase 133:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 134:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 135:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int2, 888);\n--Testcase 136:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int2, 888);\n--Testcase 137:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int2, 888);\n--Testcase 138:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 139:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n\n-- check rounding when casting from float\n--Testcase 223:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 224:\nDELETE FROM FLOAT8_TMP;\n--Testcase 225:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 226:\nSELECT f1 as x, f1::int8 as int8_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 227:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 228:\nDELETE FROM NUMERIC_TMP;\n--Testcase 229:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 230:\nSELECT f1 as x, f1::int8 as int8_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 231:\nDELETE FROM INT8_TMP;\n--Testcase 232:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 1::int8),\n             ((-9223372036854775808)::int8, 9223372036854775807::int8),\n             ((-9223372036854775808)::int8, 4611686018427387904::int8);\n--Testcase 233:\nSELECT q1, q2, gcd(q1, q2), gcd(q1, -q2), gcd(q2, q1), gcd(-q2, q1) FROM INT8_TMP;\n\n--Testcase 234:\nDELETE FROM INT8_TMP;\n--Testcase 235:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 0::int8);\n--Testcase 236:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 237:\nDELETE FROM INT8_TMP;\n--Testcase 238:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, (-9223372036854775808)::int8);\n--Testcase 239:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n-- test lcm()\n--Testcase 240:\nDELETE FROM INT8_TMP;\n--Testcase 241:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (29893644334::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 0::int8);\n--Testcase 242:\nSELECT q1, q2, lcm(q1, q2), lcm(q1, -q2), lcm(q2, q1), lcm(-q2, q1) FROM INT8_TMP;\n\n--Testcase 243:\nDELETE FROM INT8_TMP;\n--Testcase 244:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 1::int8);\n--Testcase 245:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 246:\nDELETE FROM INT8_TMP;\n--Testcase 247:\nINSERT INTO INT8_TMP VALUES ((9223372036854775807)::int8, (9223372036854775806)::int8);\n--Testcase 248:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n-- non-decimal literals\n\n--Testcase 257:\nCREATE FOREIGN TABLE special_case_int8 (f1 text, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO special_case_int8 VALUES ('0b100101'::int8);\n--Testcase 259:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 260:\nDELETE FROM special_case_int8;\n--Testcase 261:\nINSERT INTO special_case_int8 VALUES ('0o273'::int8);\n--Testcase 262:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 263:\nDELETE FROM special_case_int8;\n--Testcase 264:\nINSERT INTO special_case_int8 VALUES ('0x42F'::int8);\n--Testcase 265:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 266:\nDELETE FROM special_case_int8;\n--Testcase 267:\nINSERT INTO special_case_int8 VALUES ('0b'::int8);\n--Testcase 268:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 269:\nDELETE FROM special_case_int8;\n--Testcase 270:\nINSERT INTO special_case_int8 VALUES ('0o'::int8);\n--Testcase 271:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 272:\nDELETE FROM special_case_int8;\n--Testcase 273:\nINSERT INTO special_case_int8 VALUES ('0x'::int8);\n--Testcase 274:\nSELECT f1 FROM special_case_int8;\n\n-- cases near overflow\n--Testcase 275:\nDELETE FROM special_case_int8;\n--Testcase 276:\nINSERT INTO special_case_int8 VALUES ('0b111111111111111111111111111111111111111111111111111111111111111'::int8);\n--Testcase 277:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 278:\nDELETE FROM special_case_int8;\n--Testcase 279:\nINSERT INTO special_case_int8 VALUES ('0b1000000000000000000000000000000000000000000000000000000000000000'::int8);\n--Testcase 280:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 281:\nDELETE FROM special_case_int8;\n--Testcase 282:\nINSERT INTO special_case_int8 VALUES ('0o777777777777777777777'::int8);\n--Testcase 283:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 284:\nDELETE FROM special_case_int8;\n--Testcase 285:\nINSERT INTO special_case_int8 VALUES ('0o1000000000000000000000'::int8);\n--Testcase 286:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 287:\nDELETE FROM special_case_int8;\n--Testcase 288:\nINSERT INTO special_case_int8 VALUES ('0x7FFFFFFFFFFFFFFF'::int8);\n--Testcase 289:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 290:\nDELETE FROM special_case_int8;\n--Testcase 291:\nINSERT INTO special_case_int8 VALUES ('0x8000000000000000'::int8);\n--Testcase 292:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 293:\nDELETE FROM special_case_int8;\n--Testcase 294:\nINSERT INTO special_case_int8 VALUES ('-0b1000000000000000000000000000000000000000000000000000000000000000'::int8);\n--Testcase 295:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 296:\nDELETE FROM special_case_int8;\n--Testcase 297:\nINSERT INTO special_case_int8 VALUES ('-0b1000000000000000000000000000000000000000000000000000000000000001'::int8);\n--Testcase 298:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 299:\nDELETE FROM special_case_int8;\n--Testcase 300:\nINSERT INTO special_case_int8 VALUES ('-0o1000000000000000000000'::int8);\n--Testcase 301:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 302:\nDELETE FROM special_case_int8;\n--Testcase 303:\nINSERT INTO special_case_int8 VALUES ('-0o1000000000000000000001'::int8);\n--Testcase 304:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 305:\nDELETE FROM special_case_int8;\n--Testcase 306:\nINSERT INTO special_case_int8 VALUES ('-0x8000000000000000'::int8);\n--Testcase 307:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 308:\nDELETE FROM special_case_int8;\n--Testcase 309:\nINSERT INTO special_case_int8 VALUES ('-0x8000000000000001'::int8);\n--Testcase 310:\nSELECT f1 FROM special_case_int8;\n\n-- underscores\n--Testcase 311:\nDELETE FROM special_case_int8;\n--Testcase 312:\nINSERT INTO special_case_int8 VALUES ('1_000_000'::int8);\n--Testcase 313:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 314:\nDELETE FROM special_case_int8;\n--Testcase 315:\nINSERT INTO special_case_int8 VALUES ('1_2_3'::int8);\n--Testcase 316:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 317:\nDELETE FROM special_case_int8;\n--Testcase 318:\nINSERT INTO special_case_int8 VALUES ('0x1EEE_FFFF'::int8);\n--Testcase 319:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 320:\nDELETE FROM special_case_int8;\n--Testcase 321:\nINSERT INTO special_case_int8 VALUES ('0o2_73'::int8);\n--Testcase 322:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 323:\nDELETE FROM special_case_int8;\n--Testcase 324:\nINSERT INTO special_case_int8 VALUES ('0b_10_0101'::int8);\n--Testcase 325:\nSELECT f1 FROM special_case_int8;\n\n-- error cases\n--Testcase 326:\nDELETE FROM special_case_int8;\n--Testcase 327:\nINSERT INTO special_case_int8 VALUES ('_100'::int8);\n--Testcase 328:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 329:\nDELETE FROM special_case_int8;\n--Testcase 330:\nINSERT INTO special_case_int8 VALUES ('100_'::int8);\n--Testcase 331:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 332:\nDELETE FROM special_case_int8;\n--Testcase 333:\nINSERT INTO special_case_int8 VALUES ('100__000'::int8);\n--Testcase 334:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 335:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 249:\nDROP SERVER sqlite_svr;\n--Testcase 250:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/json.sql",
    "content": "-- SET log_min_messages TO DEBUG3;\n-- SET client_min_messages TO DEBUG3;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 010:\nCREATE FOREIGN TABLE \"type_JSON\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" json,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" json\n) SERVER sqlite_svr OPTIONS (table 'type_JSON');\n--Testcase 011:\nCREATE FOREIGN TABLE \"type_JSONB\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB');\n--Testcase 012:\nCREATE FOREIGN TABLE \"type_JSONB+\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tl int, t varchar(16), tx text,\t\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB+');\n\n--Testcase 013:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, ot1, oi, oi1) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}],\"a+u\":47,\"5\":true,\"cc3\":[\"a\", \"b\", \"c\"], \"c3\":[true, false]}',\n'c', 'c3', 2, 1),\n(2, '[11,22,33,44,55,66,77,88,99,10,11,12,13,14]',\n'1', '29', 3, 1),\n(3, '{\"a\":\"xyz\", \"π\":3.1415926535, \"aπ\":false }',\n'a', 'π', 1, NULL),\n(4, '{\"a\":null, \"a22\":22.0, \"a2\":2 }',\n'a', '22', 4, NULL),\n(5, '[9,null,7,6,5,4,3,2,1,0]',\n'1', '5', -4, 5),\n(6, '[0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,null,true]',\n'1', '21', -2, 5);\n\n--Testcase 014:\nINSERT INTO \"type_JSONB\" SELECT * FROM \"type_JSON\";\n--Testcase 015: check some SQLite JSONb initial bytes\nSELECT i, tx FROM \"type_JSONB+\";\n\n--Testcase 020:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 021: SQLite queries to type_JSON will be without normalization for j column\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\n--Testcase 022:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n\n--Testcase 023:\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 024:\nSELECT \"i\", \"j\", j.\"j\"->'a' res FROM \"type_JSON\" j;\n--Testcase 025:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 026:\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 027:\nSELECT \"i\", \"j\", j.\"j\"->'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 028:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 029:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 030:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res FROM \"type_JSON\" j;\n--Testcase 031:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 032:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 033:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 034:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 035:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 036:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'a' IS NOT NULL;\n--Testcase 037:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 038:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 039:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'a' IS NOT NULL;\n\n--Testcase 040:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 041:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 042:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 044:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 045:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n\n--Testcase 046:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 047:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 048:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSON\" j;\n--Testcase 049:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 050:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 051:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 052:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 053:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 054:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSON\" j;\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 056:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 057:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 058:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 059:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 060:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n--Testcase 061:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 062:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 063:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n\n--Testcase 064:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 065:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 066:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n--Testcase 067:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 068:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 069:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 071:\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 072:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 073:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 074:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n--Testcase 075:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 077:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 078:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 079:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 081:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 082:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 083:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 085:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 086:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n--Testcase 087:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n\n--Testcase 088:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 089:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 090:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n--Testcase 091:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 093:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 095:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n\n--Testcase 096:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 097:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 099:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n\n-- extraction with arithmetical an other expressions\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 101:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 103:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 105:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 107:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 109:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 111:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 113:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 115:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 117:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 119:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 120:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 121:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 123:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 125:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 127:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 129:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 131:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 133:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 135:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 137:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 139:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 141:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 143:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 144:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 145:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 146:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 147:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n\n--Testcase 148:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 149:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 151:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 153:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 155:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 157:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 159:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 161:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 163:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 165:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 167:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 169:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 171:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 172:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 173:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 174:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 175:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 176:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 177:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 178:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 179:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n\n\n--TCs for SQLite JSON -> format, no sense in PostgreSQL itself\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 201:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 203:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 204:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 205:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 206:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 207:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 208:\nDELETE FROM \"type_JSON\"; \n--Testcase 209:\nDELETE FROM \"type_JSONB\";\n--Testcase 210:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 211:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 212:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 213:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 214:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 215:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 216:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 217:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 218:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 219:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 220:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 221:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 222:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 223:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 224:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 225:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 226:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 227:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n-- end of SQLite right -> ->> operand test\n\n-- Operators -> ->> in SELECT context\n--Testcase 230:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n--Testcase 231:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 232:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 233:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 234:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n--Testcase 235:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 236:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 237:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 238:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n--Testcase 239:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n\n--Testcase 240:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n--Testcase 241:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 250:\nDELETE FROM \"type_JSON\"; \n--Testcase 251:\nDELETE FROM \"type_JSONB\";\n--Testcase 252:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 253:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 254:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 255:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 256:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 257:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 261:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 262:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 263:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 265\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 267:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 269:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 270:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 271:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 272:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 273\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 274:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 275:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 276:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n--Testcase 277: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n\n--Testcase 278:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n--Testcase 279:\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n\n--Testcase 280:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n--Testcase 281: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n\n--Testcase 282:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n--Testcase 283:\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n\n--Testcase 284:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n--Testcase 285: no such\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n\n--Testcase 286:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 287:\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 288:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n--Testcase 289: no such\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n\n--Testcase 290:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 291:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 292:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 293:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 294:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 295:\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 296:\nSELECT * FROM \"type_JSONB+\";\n\n--Testcase 297:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 298:\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 299:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n--Testcase 300: no such\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n\n--Multievel extraction chains\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 302:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 304:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 306:\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n--Testcase 308:\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n\n\n-- UPDATE tests\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 310:\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 311:\nSELECT * FROM \"type_JSON\" WHERE \"i\" = 1;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 313:\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 314:\nSELECT * FROM \"type_JSONB+\" WHERE \"i\" = 1;\n\n\n-- Real GIS data test, data from https://www.wikidata.org/wiki/Q118122043\n-- https://commons.wikimedia.org/wiki/Category:Private_Garden_(Pavlovsk)\n-- License of testing data in json_osm_test table: ODbL, © OpenStreetMap contributors\n--Testcase 400:\nCREATE FOREIGN TABLE json_osm_test (\n\twkt text NOT NULL,\n\tosm_type varchar(8) OPTIONS (key 'true') NOT NULL,\n\tosm_id int8 OPTIONS (key 'true') NOT NULL,\n\tt json OPTIONS (column_name 'tags') NULL,\n\tway_nodes text NULL\n) SERVER sqlite_svr;\n\n--Testcase 401:\nINSERT INTO json_osm_test VALUES ('SRID=4326;POINT(30.4536193 59.6847624)', 'node', 1198356775, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4522474 59.6851858)', 'node', 1198357028, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4532025 59.6850113)', 'node', 1738381537, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"description\": \"Ваза в дендрарии Собственного садика\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529584 59.6849417)', 'node', 3968068680, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526407 59.68497)', 'node', 4487385447, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"late C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4524943 59.6854502)', 'node', 4912270255, '{\"fee\": \"yes\", \"access\": \"customers\", \"barrier\": \"gate\", \"vehicle\": \"no\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"barrier:personnel\": \"additional\"}', NULL),\n ('SRID=4326;POINT(30.452977 59.6847621)', 'node', 7484858507, '{\"name\": \"Неизвестный мужчина\", \"ref:okn\": \"781610399040516\", \"tourism\": \"artwork\", \"alt_name\": \"Спутник Одиссея\", \"heritage\": \"2\", \"historic\": \"yes\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6522/\"}', NULL),\n ('SRID=4326;POINT(30.452909 59.6847573)', 'node', 7484858508, '{\"name\": \"Антиной\", \"ref:okn\": \"781610399040526\", \"tourism\": \"artwork\", \"alt_name\": \"Дионис\", \"heritage\": \"2\", \"historic\": \"yes\", \"material\": \"stone\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6521/\"}', NULL),\n ('SRID=4326;POINT(30.4529561 59.6848095)', 'node', 8114975053, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528946 59.6848042)', 'node', 8114975054, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528732 59.6848762)', 'node', 8114975055, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529364 59.6848802)', 'node', 8114975056, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528444 59.6851765)', 'node', 8289295956, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527798 59.6851726)', 'node', 8289295957, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528665 59.6850957)', 'node', 8289295958, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528046 59.685091)', 'node', 8289295959, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528947 59.6850172)', 'node', 8289295960, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528301 59.6850118)', 'node', 8289295961, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529101 59.6849636)', 'node', 8289295962, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528496 59.684959)', 'node', 8289295963, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528359 59.6852187)', 'node', 8331430659, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527605 59.685213)', 'node', 8331430660, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4523414 59.6851726)', 'node', 8331430663, '{\"name\": \"Сатир\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4523561 59.685141)', 'node', 8331430664, '{\"name\": \"Сатиресса\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4527994 59.6847007)', 'node', 8566916332, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4528945 59.6847497)', 'node', 8566916333, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529784 59.6853519)', 'node', 8895996426, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4529255 59.6853861)', 'node', 8895996427, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4525278 59.685471)', 'node', 8895996643, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4534153 59.6851412)', 'node', 8899249758, '{\"genus\": \"Elaeagnus\", \"taxon\": \"Elaeagnus commutata\", \"natural\": \"shrub\", \"genus:ru\": \"Лох\", \"taxon:ru\": \"Лох серебристый\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4535524 59.6848638)', 'node', 8899249764, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4535202 59.6849613)', 'node', 8899249765, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534934 59.6850486)', 'node', 8899249766, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534679 59.685136)', 'node', 8899249767, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4528899 59.6851725)', 'node', 8899249768, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530448 59.6850046)', 'node', 8899249769, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4533465 59.6850216)', 'node', 8899249770, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4532205 59.6849417)', 'node', 8899249771, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531776 59.6850839)', 'node', 8899249772, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6851265)', 'node', 8899249773, '{\"genus\": \"Malus\", \"taxon\": \"Malus niedzwetzkyana\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Яблоня\", \"taxon:ru\": \"Яблоня Недзвецкого\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533043 59.6851928)', 'node', 8899249779, '{\"height\": \"4\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.452916 59.6849894)', 'node', 8899249796, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4528248 59.684983)', 'node', 8899249797, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531527 59.685139)', 'node', 8899299127, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529549 59.6850382)', 'node', 8902082041, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530139 59.6850101)', 'node', 8902082042, '{\"genus\": \"Amelanchier\", \"taxon\": \"Amelanchier canadensis\", \"natural\": \"shrub\", \"genus:ru\": \"Ирга\", \"taxon:ru\": \"Ирга канадская\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530089 59.6850564)', 'node', 8902082048, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529982 59.685072)', 'node', 8902082055, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530213 59.6850872)', 'node', 8902082060, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529918 59.6851617)', 'node', 8902082061, '{\"genus\": \"Berberis\", \"taxon\": \"Berberis vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Барбарис\", \"taxon:ru\": \"Барбарис обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530615 59.685137)', 'node', 8902082071, '{\"genus\": \"Paeonia\", \"taxon\": \"Paeonia suffruticosa\", \"natural\": \"shrub\", \"genus:ru\": \"Пион\", \"taxon:ru\": \"Пион древовидный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531031 59.6851282)', 'node', 8902082072, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530991 59.6851451)', 'node', 8902082073, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531977 59.6851532)', 'node', 8902082074, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453207 59.6851336)', 'node', 8902082075, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532426 59.6850926)', 'node', 8902082171, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532694 59.6851157)', 'node', 8902082172, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533707 59.6851035)', 'node', 8902082173, '{\"genus\": \"Hydrangea\", \"taxon\": \"Hydrangea paniculata\", \"natural\": \"shrub\", \"genus:ru\": \"Гортензия\", \"taxon:ru\": \"Гортензия метельчатая\"}', NULL),\n ('SRID=4326;POINT(30.4528986 59.6851502)', 'node', 8902082174, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4530486 59.6848994)', 'node', 8904992674, '{\"genus\": \"Viburnum\", \"taxon\": \"Viburnum opulus\", \"natural\": \"shrub\", \"genus:ru\": \"Калина\", \"taxon:ru\": \"Калина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532396 59.6848373)', 'node', 8905335421, '{\"genus\": \"Corylus\", \"taxon\": \"Corylus avellana\", \"natural\": \"shrub\", \"genus:ru\": \"Лещина\", \"taxon:ru\": \"Лещина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532946 59.684841)', 'node', 8905335422, '{\"genus\": \"Spiraea\", \"taxon\": \"Spiraea chamaedryfolia\", \"natural\": \"shrub\", \"genus:ru\": \"Спирея\", \"taxon:ru\": \"Спирея дубравколистная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533857 59.6849271)', 'node', 8905335423, '{\"genus\": \"Euonymus\", \"taxon\": \"Euonymus europaeus\", \"natural\": \"shrub\", \"genus:ru\": \"Бересклет\", \"taxon:ru\": \"Бересклет европейский\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6849004)', 'node', 8905335424, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus sachalinensis\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Вишня\", \"taxon:ru\": \"Вишня сахалинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533998 59.6848611)', 'node', 8905335425, '{\"genus\": \"Buxus\", \"taxon\": \"Buxus sempervirens\", \"height\": \"1\", \"natural\": \"shrub\", \"genus:ru\": \"Самшит\", \"taxon:ru\": \"Самшит вечнозелёный\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4534776 59.6848679)', 'node', 8905335426, '{\"genus\": \"Rhamnus\", \"taxon\": \"Rhamnus cathartica\", \"height\": \"4\", \"natural\": \"tree\", \"genus:ru\": \"Жостер\", \"taxon:ru\": \"Жостер слабительный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534324 59.6849515)', 'node', 8905335427, '{\"genus\": \"Lonicera\", \"taxon\": \"Lonicera caerulea\", \"natural\": \"shrub\", \"genus:ru\": \"Жимолость\", \"taxon:ru\": \"Жимолость синяя\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453365 59.684981)', 'node', 8905335428, '{\"genus\": \"Philadelphus\", \"taxon\": \"Philadelphus coronarius\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник венечный\"}', NULL),\n ('SRID=4326;POINT(30.4533874 59.6849671)', 'node', 8905335429, '{\"genus\": \"Juniperus\", \"taxon\": \"Juniperus sabina\", \"height\": \"0.5\", \"natural\": \"shrub\", \"genus:ru\": \"Можжевельник\", \"taxon:ru\": \"Можжевельник казацкий\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4531319 59.6849356)', 'node', 8905335430, '{\"genus\": \"Picea\", \"taxon\": \"Picea abies\", \"height\": \"0.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель европейская\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532466 59.6848527)', 'node', 8905335431, '{\"genus\": \"Ginkgo\", \"taxon\": \"Ginkgo biloba\", \"height\": \"2.5\", \"natural\": \"tree\", \"genus:ru\": \"Гингко\", \"taxon:ru\": \"Гинкго двулопастный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"label\"}', NULL),\n ('SRID=4326;POINT(30.4532184 59.6848635)', 'node', 8905335468, '{\"genus\": \"Daphne\", \"taxon\": \"Daphne mezereum\", \"natural\": \"shrub\", \"genus:ru\": \"Волчеягодник\", \"taxon:ru\": \"Волчеягодник обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532392 59.6848902)', 'node', 8905335469, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526679 59.6846912)', 'node', 8905558225, '{\"height\": \"3\", \"highway\": \"street_lamp\", \"man_made\": \"surveillance\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530347 59.6849253)', 'node', 8906857477, '{\"genus\": \"Philadelphus lemoinei\", \"taxon\": \"Philadelphus lemoinei\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник Лемуана\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530224 59.6849455)', 'node', 8906857478, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530015 59.6847554)', 'node', 8906857479, '{\"natural\": \"tree_stump\"}', NULL),\n ('SRID=4326;LINESTRING(30.4522584 59.6851734,30.4522474 59.6851858)', 'way', 103807093, '{\"highway\": \"footway\", \"surface\": \"compacted\"}', '{3968068679,1198357028}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525041 59.6846527,30.4522364 59.6845601,30.4516531 59.6843525,30.4513385 59.6842533,30.4513511 59.6841667)', 'way', 103807103, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{8566824024,12023699867,8114975022,1195141497,4014269128,3186425168}'),\n ('SRID=4326;LINESTRING(30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456)', 'way', 103807114, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{1198357004,303515662,8566916345,1198356771,8566916346,1198356889,1198357009,8906857470}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529382 59.6847803,30.4528051 59.6851927,30.4527793 59.6852746,30.4527609 59.6853349,30.4527422 59.6853961,30.4527263 59.6854482,30.4527224 59.6854618)', 'way', 153761053, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068681,8114975050,8114975107,8895975844,8895975845,8895975847,4912270253,1664064412}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4532459 59.6852254,30.45322 59.6852491)', 'way', 153761054, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975105,3968068669}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4528762 59.6851274,30.4530118 59.6851874)', 'way', 153947121, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381541,1665582246}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4529574 59.6848702,30.4531238 59.6848204)', 'way', 153947122, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1738381532,1665582234}'),\n ('SRID=4326;LINESTRING(30.4533888 59.6848413,30.4535109 59.6849058,30.4534919 59.684967)', 'way', 153947123, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582235,1738381534,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533267 59.6852228,30.4533391 59.6851996,30.4533483 59.6851876,30.4533556 59.6851828,30.4533653 59.6851769,30.4533784 59.6851717,30.4533901 59.6851678,30.4534147 59.6851629,30.4534315 59.6851615,30.4534524 59.6850941)', 'way', 153947124, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975034,8899249793,8114975035,8902027910,8899249794,8902027909,8899249795,1738381544,8114975036,1665582244}'),\n ('SRID=4326;LINESTRING(30.4531795 59.685129,30.4533062 59.6850846,30.4534722 59.6850303,30.4534919 59.684967)', 'way', 153947125, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975075,1665582243,1738381539,1665582240}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4530483 59.6850678,30.4529356 59.6849912)', 'way', 153947126, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,1665582242,8902082170}'),\n ('SRID=4326;LINESTRING(30.4529356 59.6849912,30.4530873 59.6849398,30.453213 59.6848988)', 'way', 153947127, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8902082170,1665582238,8904992643}'),\n ('SRID=4326;LINESTRING(30.4532598 59.6849025,30.4533508 59.6849575,30.4534722 59.6850303,30.4534524 59.6850941)', 'way', 153947128, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992648,1665582239,1738381539,1665582244}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4531238 59.6848204,30.4533888 59.6848413,30.4535282 59.6848524)', 'way', 153947130, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1665582234,1665582235,1665582236}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4530873 59.6849398,30.4532201 59.6849487,30.4533508 59.6849575,30.4534919 59.684967)', 'way', 153947131, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1665582238,8902082149,1665582239,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533062 59.6850846,30.4533306 59.6850189,30.4533508 59.6849575,30.4533888 59.6848413)', 'way', 153947132, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,1665582243,8902082150,1665582239,1665582235}'),\n ('SRID=4326;LINESTRING(30.4534524 59.6850941,30.4533062 59.6850846,30.4531801 59.6850762,30.4530483 59.6850678,30.452898 59.6850578)', 'way', 153947133, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582244,1665582243,8902082168,1665582242,1665582241}'),\n ('SRID=4326;LINESTRING(30.4532234 59.6850226,30.4533062 59.6850846,30.4534147 59.6851629)', 'way', 153947134, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975088,1665582243,1738381544}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4530483 59.6850678,30.4530675 59.6850048,30.4530873 59.6849398,30.4531238 59.6848204)', 'way', 153947135, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,1665582242,8902082151,1665582238,1665582234}'),\n ('SRID=4326;LINESTRING(30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858)', 'way', 312745383, '{\"barrier\": \"fence\"}', '{1439053672,4912270255,4438910482,8895996664,4438910480,3234125031,4438910477,8893386635,4438910475,8895996665,4438910473,8114975112,8114975111,1198357028}'),\n ('SRID=4326;LINESTRING(30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554)', 'way', 315626926, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053649,8895996432,8895996430,1439053648,1439053645,8895996431,1439053641,1439053639}'),\n ('SRID=4326;LINESTRING(30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577)', 'way', 317173782, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{1653641713,8114975028,8114975027,8566824024}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.4526304 59.6847065,30.4529536 59.6847313,30.453482 59.6847765,30.4535921 59.6847856,30.4535778 59.6848316,30.4534654 59.685163)', 'way', 393601662, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774427,8905543616,3968068681,7927774426,3968068674,8114975049,3968068687}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4530118 59.6851874,30.4532501 59.6852048,30.4532657 59.6852057)', 'way', 393601664, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1665582246,8899299159,1665582248}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4528762 59.6851274,30.4530483 59.6850678,30.4531752 59.6850205)', 'way', 393601667, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1738381541,1665582242,8114975100}'),\n ('SRID=4326;LINESTRING(30.452545 59.6854429,30.4525305 59.6854105,30.4525224 59.6853929,30.4525133 59.6853758,30.4525036 59.6853597,30.4524909 59.6853438,30.4524775 59.6853279,30.4524583 59.6853083,30.4524437 59.6852938,30.4524165 59.6852717,30.4523957 59.6852568,30.452375 59.6852427,30.4523461 59.6852243,30.4523179 59.6852068)', 'way', 393620818, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975116,8895996660,8895996640,4438927787,8895996641,8895996659,8895996642,4438927782,8114975115,8895996661,8895996639,4438927777,8895996638,8114975114}'),\n ('SRID=4326;LINESTRING(30.45322 59.6852491,30.4530263 59.6852336,30.4529402 59.6852275,30.4528645 59.6852217)', 'way', 393620820, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068669,8895975857,8895975877,8895975841}'),\n ('SRID=4326;LINESTRING(30.4527686 59.6854977,30.4528746 59.6855048)', 'way', 446650486, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053671,1439053674}'),\n ('SRID=4326;LINESTRING(30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905)', 'way', 446650506, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053619,8914843795,8895996424,8914843796,1439053616,8914843797,8895996423,8914843798,1439053613,8914843799,8895996422,8895996441,8914843802,8895996421,8914843801,1439053611,8914843800,8895996420,1439053614}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522278 59.6851794)', 'way', 446651403, '{\"barrier\": \"fence\"}', '{1198357028,1653641713}'),\n ('SRID=4326;LINESTRING(30.4524943 59.6854502,30.452545 59.6854429,30.4525879 59.6854383,30.4527263 59.6854482,30.4528729 59.6854587)', 'way', 500077282, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{4912270255,8114975116,4438928092,4912270253,4438928093}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522167 59.6853009)', 'way', 758868053, '{\"highway\": \"footway\"}', '{1198357028,1406921754}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529562 59.6847243)', 'way', 849729200, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068681,8905543615}'),\n ('SRID=4326;LINESTRING(30.453482 59.6847765,30.4534851 59.684767)', 'way', 849729201, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774426,8905543614}'),\n ('SRID=4326;LINESTRING(30.452599 59.6846895,30.4525675 59.6846756,30.45256 59.6846723,30.452568 59.6846486,30.4535014 59.6847265,30.4534976 59.6847368)', 'way', 849729202, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068677,12023732269,8566916344,8566916343,8566916342,7927774425}'),\n ('SRID=4326;LINESTRING(30.4528543 59.6851747,30.4529071 59.6850026,30.4529249 59.685004,30.4529333 59.6849769,30.452917 59.6849756,30.4529721 59.6847963)', 'way', 871154683, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8114975041,8899249805,8899249804,8899249803,8899249802,8114975042}'),\n ('SRID=4326;LINESTRING(30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274,30.4526587 59.6847165)', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8114975046,8114975047,8906857474,8906857473,8114975046}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4531264 59.6851489)', 'way', 871154687, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,8114975076}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257)', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,8114975073,8114975074,8114975057,8114975058,8114975059,8114975075,8114975060,8114975061,8114975067,8114975068,8114975069,8114975077,8114975070,8114975062,8114975063,8114975064,8114975076,8114975065,8114975066,8114975071,8114975072,8114975078}'),\n ('SRID=4326;LINESTRING(30.4532501 59.6852048,30.4531713 59.6851525)', 'way', 871154689, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8899299159,8114975077}'),\n ('SRID=4326;LINESTRING(30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998)', 'way', 871154691, '{\"highway\": \"footway\"}', '{8114975097,8114975079,8114975080,8114975081,8114975082,8114975083,8114975099,8114975084,8114975085,8114975086,8114975087,8114975088,8114975089,8114975090,8114975091,8114975092,8114975100,8114975093,8114975094,8114975095,8114975096,8114975097}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4529574 59.6848702,30.4530873 59.6849398,30.4531787 59.684998)', 'way', 871154694, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1738381532,1665582238,8114975097}'),\n ('SRID=4326;LINESTRING(30.4532281 59.6850005,30.4533508 59.6849575,30.4535109 59.6849058,30.4535282 59.6848524)', 'way', 871154695, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975099,1665582239,1738381534,1665582236}'),\n ('SRID=4326;LINESTRING(30.4532459 59.6852254,30.4528051 59.6851927,30.4522785 59.6851511)', 'way', 871154698, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8114975105,8114975107,8114975109}'),\n ('SRID=4326;LINESTRING(30.4526095 59.6853751,30.4526201 59.6853832,30.4527025 59.6853899,30.4527175 59.6853841,30.4527302 59.6853414,30.4527195 59.685334,30.4526348 59.6853281,30.4526225 59.6853328,30.4526095 59.6853751)', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', '{8114975123,8114975124,8114975125,8895996607,8895996606,8114975126,8114975127,8114975181,8114975123}'),\n ('SRID=4326;LINESTRING(30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686)', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', '{8114975136,8114975137,8114975138,8114975139,8114975140,8114975141,8114975142,8114975143,8114975136}'),\n ('SRID=4326;LINESTRING(30.4525419 59.6853075,30.4525505 59.6853142,30.4526031 59.6853185,30.4526157 59.6853129,30.4526268 59.6852724,30.4526177 59.6852659,30.4525671 59.6852621,30.452555 59.6852672,30.4525419 59.6853075)', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', '{8114975144,8114975145,8114975146,8114975147,8114975148,8114975149,8114975150,8114975151,8114975144}'),\n ('SRID=4326;LINESTRING(30.4526478 59.6852554,30.4526557 59.6852612,30.452739 59.6852678,30.4527533 59.685262,30.452765 59.685222,30.4527443 59.68522,30.4527459 59.685216,30.452673 59.6852102,30.4526587 59.6852148,30.4526478 59.6852554)', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', '{8114975172,8114975173,8114975174,8114975175,8114975176,8114975177,8114975178,8114975179,8114975180,8114975172}'),\n ('SRID=4326;LINESTRING(30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', '{8129422266,8129422267,8129422268,8129422269,8129422270,8129422271,8129422272,8895996472,8129422273,8895996471,8129422266}'),\n ('SRID=4326;LINESTRING(30.4536402 59.684764,30.4536193 59.6847624,30.4536067 59.6847614)', 'way', 891865282, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{1635198216,1198356775,8289295975}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232)', 'way', 922841960, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824024,1653641402,8566824025,8566824026}'),\n ('SRID=4326;LINESTRING(30.453531 59.6847593,30.4531199 59.6847256)', 'way', 922854851, '{\"height\": \"8\", \"natural\": \"tree_row\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{5002059748,5002059751}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.452599 59.6846895)', 'way', 922854852, '{\"highway\": \"steps\"}', '{7927774427,3968068677}'),\n ('SRID=4326;LINESTRING(30.4536067 59.6847614,30.4535894 59.6847601)', 'way', 922854853, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{8289295975,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4526552 59.6847274,30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274)))', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398)))', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102)))', 'way', 871154691, '{\"highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526095 59.6853751,30.4526225 59.6853328,30.4526348 59.6853281,30.4527195 59.685334,30.4527302 59.6853414,30.4527175 59.6853841,30.4527025 59.6853899,30.4526201 59.6853832,30.4526095 59.6853751)))', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139)))', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525419 59.6853075,30.452555 59.6852672,30.4525671 59.6852621,30.4526177 59.6852659,30.4526268 59.6852724,30.4526157 59.6853129,30.4526031 59.6853185,30.4525505 59.6853142,30.4525419 59.6853075)))', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526478 59.6852554,30.4526587 59.6852148,30.452673 59.6852102,30.4527459 59.685216,30.4527443 59.68522,30.452765 59.685222,30.4527533 59.685262,30.452739 59.6852678,30.4526557 59.6852612,30.4526478 59.6852554)))', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)))', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;LINESTRING(30.4521596 59.6854203,30.4524943 59.6854502)', 'way', 961421780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8893386627,4912270255}'),\n ('SRID=4326;LINESTRING(30.4533818 59.6852214,30.4533763 59.68521)', 'way', 961717566, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053598,1439053596}'),\n ('SRID=4326;LINESTRING(30.4534979 59.6851951,30.4535038 59.6852069)', 'way', 961717567, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053589,1439053591}'),\n ('SRID=4326;LINESTRING(30.4533763 59.68521,30.4534979 59.6851951)', 'way', 961717568, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053596,1439053589}'),\n ('SRID=4326;LINESTRING(30.4527378 59.6852117,30.4526559 59.6852052,30.4525684 59.6851982,30.4524641 59.6851898,30.4522584 59.6851734)', 'way', 961717569, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975842,8895975876,8895975873,8895975858,3968068679}'),\n ('SRID=4326;LINESTRING(30.4530032 59.685292,30.453022 59.6852839,30.4530407 59.6852758,30.4530635 59.68527,30.4530877 59.685267,30.4531091 59.6852663,30.4531333 59.6852683,30.4531547 59.6852744,30.45322 59.6852491)', 'way', 961717570, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975875,8895975856,8895975855,8895975850,8895975854,8895975853,8895975852,8895975851,3968068669}'),\n ('SRID=4326;LINESTRING(30.4524419 59.6852441,30.452456 59.6851977,30.4524483 59.6851915,30.4523702 59.6851856,30.4523568 59.6851898,30.4523826 59.6852055,30.4524088 59.6852218,30.4524248 59.6852328,30.4524419 59.6852441)', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', '{8895975865,8895975864,8895975863,8895975862,8895975859,8895975861,8895975860,8895975838,8895975865}'),\n ('SRID=4326;LINESTRING(30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946)', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', '{8895975872,8895975871,8895975870,8895975869,8895975868,8895975867,8895975866,8895975872}'),\n ('SRID=4326;LINESTRING(30.4530263 59.6852336,30.4530032 59.685292,30.4529231 59.6852858,30.4527793 59.6852746,30.452638 59.6852636,30.4525513 59.6852568,30.4524466 59.6852487,30.4524641 59.6851898)', 'way', 961717573, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975857,8895975875,8895975843,8895975844,8895975848,8895975846,8895975874,8895975858}'),\n ('SRID=4326;LINESTRING(30.4529402 59.6852275,30.4529231 59.6852858,30.4529053 59.6853463,30.4528865 59.6854078)', 'way', 961717574, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975877,8895975843,8895975880,8895975878}'),\n ('SRID=4326;LINESTRING(30.4526559 59.6852052,30.452638 59.6852636,30.4526195 59.6853238,30.4526009 59.6853847,30.4527422 59.6853961,30.4528865 59.6854078)', 'way', 961717575, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975876,8895975848,8895975849,8895975879,8895975847,8895975878}'),\n ('SRID=4326;LINESTRING(30.4525684 59.6851982,30.4525513 59.6852568,30.4525338 59.685317,30.4526195 59.6853238,30.4527609 59.6853349,30.4529053 59.6853463)', 'way', 961717576, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975873,8895975846,8895975881,8895975849,8895975845,8895975880}'),\n ('SRID=4326;LINESTRING(30.4527487 59.6852082,30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082)', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', '{8895975885,8895975884,8895975883,8895975882,8895975885}'),\n ('SRID=4326;LINESTRING(30.4532064 59.6852443,30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443)', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', '{8895975889,8895975888,8895975887,8895975886,8895975889}'),\n ('SRID=4326;LINESTRING(30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696)', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', '{8895975901,8895975902,8895975900,8895975903,8895975891,8895975890,8895975901}'),\n ('SRID=4326;LINESTRING(30.4530554 59.6852658,30.4530414 59.6852392,30.453028 59.6852429,30.4530143 59.6852802,30.4530288 59.6852733,30.453041 59.6852693,30.4530554 59.6852658)', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', '{8895975898,8895975895,8895975896,8895975907,8895975897,8895975906,8895975898}'),\n ('SRID=4326;LINESTRING(30.4530632 59.6852641,30.4530782 59.6852621,30.4530921 59.6852616,30.4531031 59.6852618,30.4531172 59.6852446,30.4530501 59.6852392,30.4530632 59.6852641)', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', '{8895975905,8895975899,8895975904,8895975892,8895975893,8895975894,8895975905}'),\n ('SRID=4326;LINESTRING(30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204)', 'way', 961717582, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053627,8914843793,8895996425,8914843794,1439053619}'),\n ('SRID=4326;LINESTRING(30.4525812 59.6854845,30.4526564 59.6854895)', 'way', 961717593, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{8895996555,1439053669}'),\n ('SRID=4326;LINESTRING(30.4527747 59.6854387,30.4528506 59.685445,30.4528681 59.6854402,30.4528755 59.6854172,30.4528654 59.6854091,30.4527852 59.6854026,30.4527687 59.6854078,30.4527618 59.6854305,30.4527747 59.6854387)', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', '{8895996465,8895996464,8895996463,8895996462,8895996461,8895996460,8895996459,8895996458,8895996465}'),\n ('SRID=4326;LINESTRING(30.4525201 59.6853123,30.4525328 59.6853069,30.4525442 59.6852666,30.4525351 59.6852597,30.4524557 59.6852538,30.4524775 59.6852724,30.4524969 59.6852906,30.4525201 59.6853123)', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', '{8895996470,8895996469,8895996468,8895996467,8895996466,8895996428,8895996429,8895996470}'),\n ('SRID=4326;LINESTRING(30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969,30.4523418 59.6851889)', 'way', 961717596, '{\"landuse\": \"grass\"}', '{8895996495,8895975839,8895996483,8895996484,8895996485,8895996486,8895996487,8895996488,8895996489,8895996490,8895996491,8895996492,8895996493,8895996494,8895996496,8895996473,8895996479,8895996480,8895996474,8895996509,8895996508,8895996507,8895996506,8895996505,8895996504,8895996503,8895996502,8895996501,8895996500,8895996499,8895996498,8895996497,8895996478,8895996495}'),\n ('SRID=4326;LINESTRING(30.4523081 59.6852118,30.4522803 59.6851945,30.4522795 59.6852157,30.4523143 59.6852356,30.4523427 59.6852536,30.4523628 59.6852673,30.4523827 59.6852816,30.4524087 59.6853027,30.4524225 59.6853163,30.4524411 59.6853354,30.452454 59.6853507,30.452466 59.6853657,30.4524751 59.6853808,30.4524839 59.6853973,30.4524918 59.6854125,30.4524982 59.6854272,30.452501 59.6854325,30.4525097 59.6854362,30.4525224 59.6854348,30.4525257 59.6854303,30.4525231 59.6854242,30.4525171 59.6854097,30.4525091 59.6853943,30.4525002 59.6853776,30.4524909 59.685362,30.4524785 59.6853465,30.4524653 59.6853309,30.4524465 59.6853116,30.4524322 59.6852976,30.4524056 59.685276,30.4523853 59.6852614,30.4523649 59.6852475,30.4523362 59.6852293,30.4523081 59.6852118)', 'way', 961717597, '{\"landuse\": \"grass\"}', '{8895996522,8895996477,8895996536,8895996524,8895996525,8895996526,8895996527,8895996528,8895996529,8895996530,8895996531,8895996532,8895996533,8895996534,8895996535,8895996537,8895996482,8895996476,8895996481,8895996523,8895996475,8895996521,8895996520,8895996519,8895996518,8895996517,8895996516,8895996515,8895996514,8895996513,8895996512,8895996511,8895996510,8895996522}'),\n ('SRID=4326;LINESTRING(30.4526076 59.685425,30.4526842 59.6854313,30.4527032 59.6854269,30.4527112 59.6854034,30.4527003 59.6853955,30.4526196 59.6853891,30.4526042 59.6853942,30.4525975 59.6854176,30.4526076 59.685425)', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', '{8895996545,8895996544,8895996543,8895996542,8895996541,8895996540,8895996539,8895996538,8895996545}'),\n ('SRID=4326;LINESTRING(30.4528639 59.685494,30.4528702 59.6854731,30.4527911 59.6854671,30.4527849 59.685488,30.4528639 59.685494)', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996549,8895996548,8895996547,8895996546,8895996549}'),\n ('SRID=4326;LINESTRING(30.4526433 59.6854773,30.4526495 59.6854564,30.4525705 59.6854504,30.4525642 59.6854713,30.4526433 59.6854773)', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996553,8895996552,8895996551,8895996550,8895996553}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528709 59.6855164)', 'way', 961717601, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,8895996554}'),\n ('SRID=4326;LINESTRING(30.4529138 59.6853368,30.4529235 59.6853445,30.4529678 59.6853472,30.4529853 59.6853413,30.4529963 59.6853005,30.4529866 59.6852936,30.4529427 59.6852903,30.4529263 59.6852951,30.4529138 59.6853368)', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', '{8895996564,8895996563,8895996562,8895996561,8895996560,8895996559,8895996558,8895996557,8895996564}'),\n ('SRID=4326;LINESTRING(30.452933 59.6852753,30.4529441 59.6852838,30.4529886 59.6852873,30.453002 59.6852821,30.4530171 59.6852433,30.4530088 59.6852371,30.4529582 59.685233,30.4529444 59.6852374,30.452933 59.6852753)', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', '{8895996572,8895996571,8895996570,8895996569,8895996568,8895996567,8895996566,8895996565,8895996572}'),\n ('SRID=4326;LINESTRING(30.4525595 59.6852465,30.4525692 59.6852544,30.4526207 59.6852585,30.4526333 59.6852538,30.452645 59.6852146,30.4526353 59.6852076,30.4525847 59.6852036,30.4525709 59.685208,30.4525595 59.6852465)', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', '{8895996580,8895996579,8895996578,8895996577,8895996576,8895996575,8895996574,8895996573,8895996580}'),\n ('SRID=4326;LINESTRING(30.452817 59.6852667,30.4528288 59.6852748,30.4529066 59.6852809,30.45292 59.6852751,30.4529319 59.6852358,30.4529216 59.6852291,30.452851 59.685224,30.4528493 59.6852281,30.452831 59.6852267,30.452817 59.6852667)', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', '{8895996589,8895996588,8895996587,8895996586,8895996585,8895996584,8895996581,8895996583,8895996582,8895996589}'),\n ('SRID=4326;LINESTRING(30.4527946 59.6853272,30.4528053 59.6853349,30.4528878 59.6853416,30.4529031 59.6853359,30.4529154 59.6852941,30.4529042 59.6852874,30.4528247 59.6852816,30.4528087 59.6852864,30.4527946 59.6853272)', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', '{8895996597,8895996596,8895996595,8895996594,8895996593,8895996592,8895996591,8895996590,8895996597}'),\n ('SRID=4326;LINESTRING(30.4527745 59.6853889,30.4527865 59.6853969,30.4528677 59.6854032,30.4528839 59.6853982,30.4528953 59.6853552,30.4528845 59.6853477,30.4528052 59.6853419,30.4527899 59.6853454,30.4527745 59.6853889)', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', '{8895996605,8895996604,8895996603,8895996602,8895996601,8895996600,8895996599,8895996598,8895996605}'),\n ('SRID=4326;LINESTRING(30.452565 59.6854206,30.4525598 59.6854071,30.4525516 59.6853892,30.4525422 59.6853716,30.4525319 59.6853544,30.4525184 59.6853376,30.4525045 59.6853211,30.4524848 59.6853009,30.4524693 59.6852857,30.4524408 59.6852624,30.4524192 59.685247,30.4523979 59.6852324,30.4523685 59.6852137,30.4523402 59.6851962)', 'way', 961717608, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996623,8895996621,8895996620,8895996619,8895996618,8895996617,8895996616,8895996615,8895996614,8895996613,8895996612,8895996611,8895996610,8895996622}'),\n ('SRID=4326;LINESTRING(30.4525109 59.6854262,30.4525044 59.6854114,30.4524965 59.6853961,30.4524877 59.6853796,30.4524784 59.6853642,30.4524662 59.6853489,30.4524532 59.6853335,30.4524345 59.6853143,30.4524204 59.6853005,30.4523942 59.6852791,30.452374 59.6852647,30.4523538 59.6852509,30.4523252 59.6852327,30.4522972 59.6852153)', 'way', 961717609, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996637,8895996635,8895996634,8895996633,8895996632,8895996631,8895996630,8895996629,8895996628,8895996627,8895996626,8895996625,8895996624,8895996636}'),\n ('SRID=4326;LINESTRING(30.4523179 59.6852068,30.4522881 59.6851891,30.4522584 59.6851734,30.4522785 59.6851511,30.4525958 59.6847532,30.4529382 59.6847803,30.4535778 59.6848316)', 'way', 961717610, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975114,8895996608,3968068679,8114975109,8114975051,8114975050,8114975049}'),\n ('SRID=4326;LINESTRING(30.4527224 59.6854618,30.4527166 59.6854798)', 'way', 961717612, '{\"highway\": \"steps\", \"incline\": \"up\", \"surface\": \"paving_stones\"}', '{1664064412,8895996662}'),\n ('SRID=4326;LINESTRING(30.4534116 59.6851536,30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536)', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249763,8899249762,8899249761,8899249760,8899249759,8899249763}'),\n ('SRID=4326;LINESTRING(30.4535137 59.6851734,30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437)', 'way', 962062988, '{\"source:taxon\": \"board\"}', '{8899249777,8899249776,8899249775,8899249774}'),\n ('SRID=4326;LINESTRING(30.4534505 59.6851512,30.4535484 59.6848425)', 'way', 962062989, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8899249781,8899249780}'),\n ('SRID=4326;LINESTRING(30.4532761 59.6852013,30.4533137 59.6852128,30.453319 59.6851999,30.4533257 59.6851898,30.4533338 59.6851796,30.4533458 59.6851715,30.4533606 59.6851647,30.453378 59.6851586,30.4533941 59.6851559,30.4533211 59.6851024,30.4533083 59.6851038,30.4532761 59.6852013)', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249792,8899249791,8899249790,8899249789,8899249788,8899249787,8899249786,8899249785,8899249784,8899249783,8899249782,8899249792}'),\n ('SRID=4326;LINESTRING(30.4534315 59.6851615,30.4534654 59.685163)', 'way', 962062991, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975036,3968068687}'),\n ('SRID=4326;LINESTRING(30.45277 59.6851675,30.4528221 59.6849965,30.4528061 59.6849952,30.4528148 59.6849678,30.4528309 59.6849691,30.4528877 59.684789)', 'way', 962062992, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8899249807,8899249801,8899249800,8899249799,8899249798,8899249806}'),\n ('SRID=4326;LINESTRING(30.4530825 59.6850727,30.4530768 59.6850789,30.4531357 59.6851196,30.4531475 59.6851179,30.4531599 59.6851179,30.4531731 59.6851201,30.4531813 59.685123,30.4532721 59.6850914,30.45327 59.6850856,30.4530825 59.6850727)', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249816,8899249815,8899249814,8899249813,8899249812,8899249811,8899249810,8899249809,8899249808,8899249816}'),\n ('SRID=4326;LINESTRING(30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148)', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299126,8899299125,8899299124,8899299123,8899299122,8899299121,8899299120,8899299119,8899299118,8899299117,8899299126}'),\n ('SRID=4326;LINESTRING(30.4531566 59.6851458,30.4531627 59.6851441,30.4531665 59.6851411,30.4531672 59.6851376,30.4531645 59.6851343,30.4531591 59.685132,30.4531523 59.6851313,30.4531455 59.6851322,30.4531404 59.6851346,30.4531381 59.685138,30.4531391 59.6851415,30.4531433 59.6851444,30.4531496 59.6851459,30.4531566 59.6851458)', 'way', 962062995, '{\"landuse\": \"grass\"}', '{8899299139,8899299138,8899299137,8899299136,8899299135,8899299134,8899299133,8899299132,8899299131,8899299130,8899299129,8899299128,8899299140,8899299139}'),\n ('SRID=4326;LINESTRING(30.4531836 59.6851532,30.45325 59.6851972,30.4532587 59.6851977,30.4532923 59.6851023,30.4532804 59.6850981,30.4531914 59.68513,30.4531946 59.6851353,30.453195 59.6851401,30.4531936 59.6851444,30.45319 59.6851488,30.4531836 59.6851532)', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299150,8899299149,8899299141,8899299148,8899299142,8899299147,8899299146,8899299145,8899299144,8899299143,8899299150}'),\n ('SRID=4326;LINESTRING(30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299158,8899299157,8899299156,8899299155,8899299154,8899299153,8899299152,8899299151,8899249778,8899299158}'),\n ('SRID=4326;LINESTRING(30.4532162 59.6852145,30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145)', 'way', 962062998, '{\"landuse\": \"grass\"}', '{8899299165,8899299164,8899299163,8899299161,8899299160,8899299162,8899299165}'),\n ('SRID=4326;LINESTRING(30.4532627 59.6852077,30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077)', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', '{8902082028,8902082027,8902082026,8902082025,8902082024,8902082023,8902082022,8902082021,8902082020,8902027911,8902082019,8902082018,8902082017,8902027912,8902027916,8902027913,8902027915,8902027914,8902082028}'),\n ('SRID=4326;LINESTRING(30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082032,8902082031,8902082030,8902082029,8902082032}'),\n ('SRID=4326;LINESTRING(30.4529465 59.6849826,30.4530583 59.6849454,30.4530566 59.6849397,30.4529452 59.6849315,30.4529338 59.6849691,30.4529492 59.6849698,30.4529465 59.6849826)', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082038,8902082037,8902082036,8902082035,8902082034,8902082033,8902082038}'),\n ('SRID=4326;LINESTRING(30.4530344 59.685052,30.4530456 59.6850508,30.4530757 59.684955,30.4530662 59.6849507,30.4529465 59.6849918,30.4530344 59.685052)', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082047,8902082046,8902082045,8902082044,8902082043,8902082047}'),\n ('SRID=4326;LINESTRING(30.4529083 59.6850544,30.4530153 59.6850613,30.4530221 59.685056,30.4529398 59.6850009,30.4529378 59.6850121,30.4529184 59.6850114,30.4529083 59.6850544)', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082054,8902082053,8902082052,8902082051,8902082050,8902082049,8902082054}'),\n ('SRID=4326;LINESTRING(30.4528875 59.6851184,30.4530138 59.6850731,30.4530125 59.6850679,30.4529043 59.6850625,30.4528875 59.6851184)', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082059,8902082058,8902082057,8902082056,8902082059}'),\n ('SRID=4326;LINESTRING(30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789)', 'way', 962382766, '{\"landuse\": \"grass\"}', '{8902082065,8902082064,8902082063,8902082062,8902082065}'),\n ('SRID=4326;LINESTRING(30.4529896 59.6851748,30.4530072 59.6851719,30.4530311 59.6850841,30.4530206 59.6850798,30.4528885 59.6851275,30.4529896 59.6851748)', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082070,8902082069,8902082068,8902082067,8902082066,8902082070}'),\n ('SRID=4326;LINESTRING(30.4533332 59.6850719,30.4534612 59.68503,30.4533655 59.6849715,30.4533546 59.6849733,30.4533227 59.6850682,30.4533332 59.6850719)', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082080,8902082079,8902082078,8902082077,8902082076,8902082080}'),\n ('SRID=4326;LINESTRING(30.4533437 59.685083,30.4534444 59.6850899,30.4534619 59.6850382,30.4533411 59.685078,30.4533437 59.685083)', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082084,8902082083,8902082082,8902082081,8902082084}'),\n ('SRID=4326;LINESTRING(30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173)', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082090,8902082089,8902082088,8902082087,8902082086,8902082085,8902082090}'),\n ('SRID=4326;LINESTRING(30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113)', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082096,8902082095,8902082094,8902082093,8902082092,8902082091,8902082096}'),\n ('SRID=4326;LINESTRING(30.4532258 59.6849527,30.4532116 59.6849902,30.4532207 59.684992,30.4532298 59.6849953,30.4533219 59.6849634,30.4533191 59.6849588,30.4532258 59.6849527)', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082102,8902082101,8902082100,8902082099,8902082098,8902082097,8902082102}'),\n ('SRID=4326;LINESTRING(30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082108,8902082107,8902082106,8902082105,8902082104,8902082103,8902082108}'),\n ('SRID=4326;LINESTRING(30.4530763 59.6850024,30.4531619 59.6850065,30.4531647 59.6850018,30.4531695 59.6849976,30.4531032 59.6849548,30.453091 59.6849565,30.4530763 59.6850024)', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082109,8902082114,8902082113,8902082112,8902082111,8902082110,8902082109}'),\n ('SRID=4326;LINESTRING(30.4530716 59.6850547,30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547)', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082120,8902082119,8902082118,8902082117,8902082116,8902082115,8902082120}'),\n ('SRID=4326;LINESTRING(30.4531735 59.6850722,30.4531863 59.6850287,30.4531799 59.6850271,30.4531749 59.6850252,30.4530791 59.6850599,30.453083 59.685065,30.4531735 59.6850722)', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082126,8902082125,8902082124,8902082123,8902082122,8902082121,8902082126}'),\n ('SRID=4326;LINESTRING(30.4531903 59.6850727,30.4532727 59.6850781,30.4532816 59.6850715,30.4532223 59.6850274,30.453211 59.6850297,30.453201 59.6850303,30.4531903 59.6850727)', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082132,8902082131,8902082130,8902082129,8902082128,8902082127,8902082132}'),\n ('SRID=4326;LINESTRING(30.453206 59.6849937,30.4532201 59.6849487)', 'way', 962382778, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975081,8902082149}'),\n ('SRID=4326;LINESTRING(30.4532335 59.6850137,30.4533306 59.6850189)', 'way', 962382779, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975086,8902082150}'),\n ('SRID=4326;LINESTRING(30.4531682 59.6850102,30.4530675 59.6850048)', 'way', 962382780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975094,8902082151}'),\n ('SRID=4326;LINESTRING(30.4531253 59.6850083,30.4531256 59.6850158,30.4531288 59.6850232,30.4531349 59.6850302,30.4531434 59.6850364,30.4531543 59.6850416,30.4531669 59.6850457,30.4531809 59.6850485,30.4531957 59.6850498,30.4532107 59.6850496,30.4532253 59.685048,30.4532391 59.685045,30.4532514 59.6850406,30.4532618 59.6850352,30.4532699 59.6850288,30.4532753 59.6850217,30.4532779 59.6850143,30.4532776 59.6850067,30.4532744 59.6849993,30.4532684 59.6849924,30.4532598 59.6849862,30.453249 59.6849809,30.4532363 59.6849768,30.4532224 59.6849741,30.4532076 59.6849728,30.4531926 59.6849729,30.4531779 59.6849745,30.4531642 59.6849776,30.4531519 59.6849819,30.4531415 59.6849874,30.4531334 59.6849938,30.4531279 59.6850008,30.4531253 59.6850083)', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082167,8902082134,8902082166,8902082133,8902082165,8902082148,8902082164,8902082147,8902082163,8902082146,8902082162,8902082145,8902082161,8902082144,8902082160,8902082143,8902082159,8902082142,8902082158,8902082141,8902082157,8902082140,8902082156,8902082139,8902082155,8902082138,8902082154,8902082137,8902082153,8902082136,8902082152,8902082135,8902082167}'),\n ('SRID=4326;LINESTRING(30.4531956 59.6850267,30.4531801 59.6850762)', 'way', 962382782, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975091,8902082168}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4529124 59.6850066,30.4529307 59.6850078,30.4529356 59.6849912,30.4529412 59.6849735,30.4529245 59.6849722,30.4529389 59.6849276)', 'way', 962382783, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381535,8902082040,8902082170,8902082039,8902082169,1665582237}'),\n ('SRID=4326;LINESTRING(30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877)', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992660,8904992659,8904992658,8904992657,8904992656,8904992655,8904992654,8904992653,8904992652,8904992651,8904992650,8904992649,8904992648,8904992647,8904992646,8904992645,8904992644,8904992643,8904992642,8904992641,8904992640,8904992639,8904992660}'),\n ('SRID=4326;LINESTRING(30.4532432 59.6848971,30.4532493 59.6848954,30.4532531 59.6848924,30.4532538 59.6848889,30.4532511 59.6848856,30.4532457 59.6848833,30.4532389 59.6848826,30.4532321 59.6848835,30.453227 59.684886,30.4532247 59.6848893,30.4532257 59.6848928,30.4532299 59.6848957,30.4532362 59.6848972,30.4532432 59.6848971)', 'way', 962678726, '{\"landuse\": \"grass\"}', '{8904992673,8904992672,8904992671,8904992670,8904992669,8904992668,8904992667,8904992666,8904992665,8904992664,8904992663,8904992662,8904992661,8904992673}'),\n ('SRID=4326;LINESTRING(30.4530998 59.6849248,30.4531105 59.684928,30.4532056 59.6848974,30.4532029 59.6848932,30.4532023 59.6848877,30.4532043 59.6848829,30.4532098 59.6848776,30.4531384 59.6848341,30.4531253 59.6848349,30.4530998 59.6849248)', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992682,8904992681,8904992680,8904992679,8904992637,8904992678,8904992677,8904992676,8904992675,8904992682}'),\n ('SRID=4326;LINESTRING(30.4530724 59.6849262,30.4530868 59.6849239,30.4531127 59.6848333,30.4531034 59.6848301,30.4529683 59.6848711,30.4530724 59.6849262)', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992687,8904992686,8904992685,8904992684,8904992683,8904992687}'),\n ('SRID=4326;LINESTRING(30.4530589 59.6849341,30.4530633 59.6849302,30.452961 59.6848772,30.4529482 59.6849246,30.4530589 59.6849341)', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992691,8904992690,8904992689,8904992688,8904992691}'),\n ('SRID=4326;LINESTRING(30.4531212 59.684939,30.4533222 59.6849516,30.4533269 59.6849477,30.4532581 59.6849071,30.4532455 59.6849087,30.4532339 59.6849085,30.4532243 59.684907,30.4532133 59.6849034,30.4531185 59.6849335,30.4531212 59.684939)', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992699,8904992698,8904992697,8904992696,8904992692,8904992638,8904992695,8904992694,8904992693,8904992699}'),\n ('SRID=4326;LINESTRING(30.453536 59.6848401,30.4529797 59.6847958,30.452977 59.6848046,30.4535329 59.6848493,30.453536 59.6848401)', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', '{8905335420,8905335419,8905335418,8905335417,8905335420}'),\n ('SRID=4326;LINESTRING(30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335435,8905335434,8905335433,8905335432,8905335435}'),\n ('SRID=4326;LINESTRING(30.4533819 59.6849565,30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565)', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335439,8905335438,8905335437,8905335436,8905335439}'),\n ('SRID=4326;LINESTRING(30.4533623 59.6849431,30.4533739 59.6849464,30.4534994 59.6849065,30.4534038 59.6848537,30.4533921 59.6848545,30.4533623 59.6849431)', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335444,8905335443,8905335442,8905335441,8905335440,8905335444}'),\n ('SRID=4326;LINESTRING(30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335454,8905335453,8905335452,8905335451,8905335450,8905335449,8905335448,8905335447,8905335446,8905335454}'),\n ('SRID=4326;LINESTRING(30.4529663 59.6848632,30.4530962 59.6848253,30.4530928 59.6848201,30.4529831 59.6848107,30.4529663 59.6848632)', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335458,8905335457,8905335456,8905335455,8905335458}'),\n ('SRID=4326;LINESTRING(30.4532195 59.6848732,30.4532263 59.6848712,30.4532379 59.6848698,30.4532504 59.6848704,30.4532619 59.6848729,30.4532706 59.684876,30.4533642 59.6848467,30.4533614 59.6848416,30.453158 59.6848262,30.4531503 59.6848308,30.4532195 59.6848732)', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335467,8905335466,8905335465,8905335464,8905335463,8905335462,8905335461,8905335445,8905335460,8905335459,8905335467}'),\n ('SRID=4326;LINESTRING(30.4532684 59.6848807,30.4533888 59.6848413)', 'way', 962714221, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992654,1665582235}'),\n ('SRID=4326;LINESTRING(30.4531238 59.6848204,30.4532177 59.684877)', 'way', 962714222, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582234,8904992660}'),\n ('SRID=4326;LINESTRING(30.4527677 59.6846399,30.4528579 59.6846477)', 'way', 962735606, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8905543613,1198356896}'),\n ('SRID=4326;LINESTRING(30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399)', 'way', 962735608, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824026,1198356935,8566824027,8905543613}'),\n ('SRID=4326;LINESTRING(30.4534851 59.684767,30.4534913 59.6847521,30.4534976 59.6847368)', 'way', 962735609, '{\"highway\": \"steps\"}', '{8905543614,12023732271,7927774425}'),\n ('SRID=4326;LINESTRING(30.4529562 59.6847243,30.4529615 59.6847082,30.4529628 59.6847041)', 'way', 962735610, '{\"highway\": \"steps\"}', '{8905543615,12023732270,3968068678}'),\n ('SRID=4326;LINESTRING(30.4526304 59.6847065,30.4525958 59.6847532)', 'way', 962735611, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8905543616,8114975051}'),\n ('SRID=4326;LINESTRING(30.4528676 59.6847547,30.4526341 59.6847357,30.452631 59.6847454,30.4528645 59.6847644,30.4528676 59.6847547)', 'way', 962735612, '{\"landuse\": \"grass\"}', '{8905558220,8905558219,8905558218,8905558217,8905558220}'),\n ('SRID=4326;LINESTRING(30.4535589 59.6848104,30.4530176 59.6847681,30.4530149 59.6847769,30.4535559 59.6848195,30.4535589 59.6848104)', 'way', 962735613, '{\"landuse\": \"grass\"}', '{8905558224,8905558223,8905558222,8905558221,8905558224}'),\n ('SRID=4326;LINESTRING(30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573,30.4530182 59.6847465)', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8905558227,8905558226,8906857476,8906857475,8905558227}'),\n ('SRID=4326;LINESTRING(30.4523152 59.6851448,30.4526116 59.6847664)', 'way', 962869359, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.7\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857452,8906857451}'),\n ('SRID=4326;LINESTRING(30.4526277 59.6846803,30.4526365 59.6846782,30.4526406 59.6846738,30.4526381 59.684669,30.4526302 59.6846662,30.4526205 59.6846666,30.4526137 59.6846701,30.4526128 59.684675,30.4526184 59.684679,30.4526277 59.6846803)', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857461,8906857453,8906857460,8906857459,8906857458,8906857457,8906857456,8906857455,8906857454,8906857461}'),\n ('SRID=4326;LINESTRING(30.4535863 59.6847456,30.4535811 59.6847595)', 'way', 962869365, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8906857470,8289295976}'),\n ('SRID=4326;MULTIPOLYGON(((30.4513 59.6845239,30.4513105 59.6845148,30.4513253 59.6844972,30.4513336 59.6844848,30.4513473 59.6844699,30.4513568 59.6844555,30.4513653 59.6844381,30.4513738 59.6844262,30.4513936 59.6844093,30.4514013 59.6843976,30.4514225 59.6843888,30.4514444 59.6843812,30.4514614 59.6843629,30.4514704 59.6843445,30.4514736 59.6843262,30.4514828 59.6842988,30.4514912 59.6842865,30.4514975 59.6842799,30.4515117 59.6842705,30.4515428 59.6842625,30.4516031 59.6842549,30.4518408 59.6843394,30.4519523 59.6843794,30.4520216 59.6844035,30.4520874 59.6844268,30.4521402 59.684444,30.4521943 59.6844606,30.452244 59.6844736,30.4522939 59.6844865,30.4523452 59.6844991,30.4524113 59.6845149,30.4524654 59.6845284,30.4525244 59.6845406,30.4525539 59.6845467,30.452566 59.6845558,30.452571 59.6845656,30.4525675 59.6845745,30.4525615 59.68459,30.4525618 59.6845988,30.4525613 59.6846073,30.4525568 59.6846156,30.4525466 59.6846232,30.4525331 59.6846279,30.4525251 59.684634,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4521768 59.6852884,30.4521573 59.685297,30.4521207 59.6853099,30.4520859 59.6853167,30.4520483 59.6853214,30.4520121 59.6853235,30.4519679 59.6853228,30.4519209 59.685316,30.4518731 59.6853033,30.4518364 59.6852869,30.4518016 59.6852646,30.4517747 59.6852436,30.4517546 59.685224,30.4517399 59.685205,30.4517278 59.6851773,30.4517104 59.6851603,30.4516916 59.6851468,30.4516857 59.6851285,30.4516903 59.6851123,30.4517117 59.6851023,30.4517426 59.685094,30.4517784 59.6850892,30.4518103 59.6850908,30.4518403 59.6851005,30.4518731 59.6850949,30.4518771 59.6850809,30.4518692 59.685051,30.4518777 59.6850294,30.4519043 59.6850131,30.4519376 59.6850028,30.4519737 59.684999,30.4520079 59.6849997,30.4520477 59.685012,30.4520887 59.6850223,30.4521435 59.6850216,30.4521948 59.6850093,30.4522112 59.6849969,30.4522301 59.6849727,30.45222 59.6849586,30.4521979 59.6849496,30.4521524 59.6849328,30.452119 59.6849135,30.452105 59.6848849,30.4521099 59.684868,30.4520932 59.684849,30.4520658 59.6848372,30.4520255 59.6848223,30.4520099 59.6848104,30.4519866 59.6847939,30.4519651 59.6847718,30.4519517 59.6847501,30.4519518 59.6847258,30.4519545 59.6847041,30.4519786 59.6846635,30.4520121 59.6846479,30.452051 59.6846256,30.4520604 59.6846161,30.4520537 59.6846046,30.4520175 59.6845829,30.4519692 59.6845613,30.451933 59.684566,30.4519102 59.6845748,30.4518928 59.6845917,30.4518772 59.6846127,30.4518697 59.684638,30.4518561 59.6846587,30.4518347 59.6846794,30.4518136 59.6846859,30.451785 59.6846963,30.4517612 59.6847117,30.4517363 59.6847257,30.4517004 59.6847328,30.4516678 59.6847376,30.4516243 59.6847395,30.4515783 59.6847426,30.4515624 59.6847383,30.451536 59.6847319,30.4515265 59.6847207,30.4515128 59.6847092,30.4515012 59.6846991,30.4514963 59.6846932,30.4515039 59.6846846,30.4515091 59.6846707,30.4515006 59.6846638,30.4514837 59.6846584,30.4514488 59.6846536,30.4514298 59.6846424,30.4514235 59.6846339,30.451434 59.6846216,30.451452 59.6846104,30.4514721 59.684604,30.4514816 59.6845934,30.4514827 59.6845827,30.4514763 59.6845715,30.4514427 59.6845604,30.4514004 59.6845719,30.4513792 59.6845708,30.451356 59.684566,30.4513317 59.6845601,30.4513137 59.6845489,30.4513042 59.6845393,30.4513 59.6845239)))', 'relation', 12444790, '{\"natural\": \"wood\", \"leaf_type\": \"mixed\", \"leaf_cycle\": \"mixed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523568 59.6851898,30.4523702 59.6851856,30.4524483 59.6851915,30.452456 59.6851977,30.4524419 59.6852441,30.4524248 59.6852328,30.4524088 59.6852218,30.4523826 59.6852055,30.4523568 59.6851898)))', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459)))', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082,30.4523303 59.6851757)))', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443,30.4528543 59.6852169)))', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622)))', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6852802,30.453028 59.6852429,30.4530414 59.6852392,30.4530554 59.6852658,30.453041 59.6852693,30.4530288 59.6852733,30.4530143 59.6852802)))', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530501 59.6852392,30.4531172 59.6852446,30.4531031 59.6852618,30.4530921 59.6852616,30.4530782 59.6852621,30.4530632 59.6852641,30.4530501 59.6852392)))', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.4531138 59.6852988,30.4530897 59.6853096,30.4530682 59.6853211,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168)))', 'relation', 12935642, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530106 59.6853114,30.4530161 59.6853019,30.4530244 59.6852922,30.4530375 59.685285,30.4530534 59.685278,30.4530732 59.685274,30.4530931 59.6852723,30.4531124 59.685272,30.4531329 59.6852751,30.4531443 59.685278,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530111 59.6853217,30.4530106 59.6853114)))', 'relation', 12922491, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530012 59.685359,30.4529724 59.685378,30.4529542 59.6853912,30.4529312 59.685409,30.4529136 59.685403)))', 'relation', 12935641, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527618 59.6854305,30.4527687 59.6854078,30.4527852 59.6854026,30.4528654 59.6854091,30.4528755 59.6854172,30.4528681 59.6854402,30.4528506 59.685445,30.4527747 59.6854387,30.4527618 59.6854305)))', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524557 59.6852538,30.4525351 59.6852597,30.4525442 59.6852666,30.4525328 59.6853069,30.4525201 59.6853123,30.4524969 59.6852906,30.4524775 59.6852724,30.4524557 59.6852538)))', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523226 59.6851969,30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969)))', 'way', 961717596, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522795 59.6852157,30.4522803 59.6851945,30.4523081 59.6852118,30.4523362 59.6852293,30.4523649 59.6852475,30.4523853 59.6852614,30.4524056 59.685276,30.4524322 59.6852976,30.4524465 59.6853116,30.4524653 59.6853309,30.4524785 59.6853465,30.4524909 59.685362,30.4525002 59.6853776,30.4525091 59.6853943,30.4525171 59.6854097,30.4525231 59.6854242,30.4525257 59.6854303,30.4525224 59.6854348,30.4525097 59.6854362,30.452501 59.6854325,30.4524982 59.6854272,30.4524918 59.6854125,30.4524839 59.6853973,30.4524751 59.6853808,30.452466 59.6853657,30.452454 59.6853507,30.4524411 59.6853354,30.4524225 59.6853163,30.4524087 59.6853027,30.4523827 59.6852816,30.4523628 59.6852673,30.4523427 59.6852536,30.4523143 59.6852356,30.4522795 59.6852157)))', 'way', 961717597, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525975 59.6854176,30.4526042 59.6853942,30.4526196 59.6853891,30.4527003 59.6853955,30.4527112 59.6854034,30.4527032 59.6854269,30.4526842 59.6854313,30.4526076 59.685425,30.4525975 59.6854176)))', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527849 59.685488,30.4527911 59.6854671,30.4528702 59.6854731,30.4528639 59.685494,30.4527849 59.685488)))', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525642 59.6854713,30.4525705 59.6854504,30.4526495 59.6854564,30.4526433 59.6854773,30.4525642 59.6854713)))', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529138 59.6853368,30.4529263 59.6852951,30.4529427 59.6852903,30.4529866 59.6852936,30.4529963 59.6853005,30.4529853 59.6853413,30.4529678 59.6853472,30.4529235 59.6853445,30.4529138 59.6853368)))', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452933 59.6852753,30.4529444 59.6852374,30.4529582 59.685233,30.4530088 59.6852371,30.4530171 59.6852433,30.453002 59.6852821,30.4529886 59.6852873,30.4529441 59.6852838,30.452933 59.6852753)))', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525595 59.6852465,30.4525709 59.685208,30.4525847 59.6852036,30.4526353 59.6852076,30.452645 59.6852146,30.4526333 59.6852538,30.4526207 59.6852585,30.4525692 59.6852544,30.4525595 59.6852465)))', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452817 59.6852667,30.452831 59.6852267,30.4528493 59.6852281,30.452851 59.685224,30.4529216 59.6852291,30.4529319 59.6852358,30.45292 59.6852751,30.4529066 59.6852809,30.4528288 59.6852748,30.452817 59.6852667)))', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527946 59.6853272,30.4528087 59.6852864,30.4528247 59.6852816,30.4529042 59.6852874,30.4529154 59.6852941,30.4529031 59.6853359,30.4528878 59.6853416,30.4528053 59.6853349,30.4527946 59.6853272)))', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527745 59.6853889,30.4527899 59.6853454,30.4528052 59.6853419,30.4528845 59.6853477,30.4528953 59.6853552,30.4528839 59.6853982,30.4528677 59.6854032,30.4527865 59.6853969,30.4527745 59.6853889)))', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536,30.4533349 59.6850974)))', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437,30.4535137 59.6851734,30.4534909 59.6851715)))', 'relation', 12925809, '{\"crop\": \"grape\", \"genus\": \"Vitis\", \"taxon\": \"Vitis amurensis\", \"landuse\": \"vineyard\", \"genus:ru\": \"Виноград\", \"taxon:ru\": \"Виноград амурский\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532761 59.6852013,30.4533083 59.6851038,30.4533211 59.6851024,30.4533941 59.6851559,30.453378 59.6851586,30.4533606 59.6851647,30.4533458 59.6851715,30.4533338 59.6851796,30.4533257 59.6851898,30.453319 59.6851999,30.4533137 59.6852128,30.4532761 59.6852013)))', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530768 59.6850789,30.4530825 59.6850727,30.45327 59.6850856,30.4532721 59.6850914,30.4531813 59.685123,30.4531731 59.6851201,30.4531599 59.6851179,30.4531475 59.6851179,30.4531357 59.6851196,30.4530768 59.6850789)))', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728)))', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531381 59.685138,30.4531404 59.6851346,30.4531455 59.6851322,30.4531523 59.6851313,30.4531591 59.685132,30.4531645 59.6851343,30.4531672 59.6851376,30.4531665 59.6851411,30.4531627 59.6851441,30.4531566 59.6851458,30.4531496 59.6851459,30.4531433 59.6851444,30.4531391 59.6851415,30.4531381 59.685138)))', 'way', 962062995, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531836 59.6851532,30.45319 59.6851488,30.4531936 59.6851444,30.453195 59.6851401,30.4531946 59.6851353,30.4531914 59.68513,30.4532804 59.6850981,30.4532923 59.6851023,30.4532587 59.6851977,30.45325 59.6851972,30.4531836 59.6851532)))', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)))', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145,30.4528382 59.6851861)))', 'way', 962062998, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077,30.4528577 59.6851769)))', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)))', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529338 59.6849691,30.4529452 59.6849315,30.4530566 59.6849397,30.4530583 59.6849454,30.4529465 59.6849826,30.4529492 59.6849698,30.4529338 59.6849691)))', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529465 59.6849918,30.4530662 59.6849507,30.4530757 59.684955,30.4530456 59.6850508,30.4530344 59.685052,30.4529465 59.6849918)))', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529083 59.6850544,30.4529184 59.6850114,30.4529378 59.6850121,30.4529398 59.6850009,30.4530221 59.685056,30.4530153 59.6850613,30.4529083 59.6850544)))', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528875 59.6851184,30.4529043 59.6850625,30.4530125 59.6850679,30.4530138 59.6850731,30.4528875 59.6851184)))', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739)))', 'way', 962382766, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528885 59.6851275,30.4530206 59.6850798,30.4530311 59.6850841,30.4530072 59.6851719,30.4529896 59.6851748,30.4528885 59.6851275)))', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533227 59.6850682,30.4533546 59.6849733,30.4533655 59.6849715,30.4534612 59.68503,30.4533332 59.6850719,30.4533227 59.6850682)))', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533411 59.685078,30.4534619 59.6850382,30.4534444 59.6850899,30.4533437 59.685083,30.4533411 59.685078)))', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233)))', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005)))', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532116 59.6849902,30.4532258 59.6849527,30.4533191 59.6849588,30.4533219 59.6849634,30.4532298 59.6849953,30.4532207 59.684992,30.4532116 59.6849902)))', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)))', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530763 59.6850024,30.453091 59.6849565,30.4531032 59.6849548,30.4531695 59.6849976,30.4531647 59.6850018,30.4531619 59.6850065,30.4530763 59.6850024)))', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547,30.4530603 59.6850515)))', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530791 59.6850599,30.4531749 59.6850252,30.4531799 59.6850271,30.4531863 59.6850287,30.4531735 59.6850722,30.453083 59.685065,30.4530791 59.6850599)))', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531903 59.6850727,30.453201 59.6850303,30.453211 59.6850297,30.4532223 59.6850274,30.4532816 59.6850715,30.4532727 59.6850781,30.4531903 59.6850727)))', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531253 59.6850083,30.4531279 59.6850008,30.4531334 59.6849938,30.4531415 59.6849874,30.4531519 59.6849819,30.4531642 59.6849776,30.4531779 59.6849745,30.4531926 59.6849729,30.4532076 59.6849728,30.4532224 59.6849741,30.4532363 59.6849768,30.453249 59.6849809,30.4532598 59.6849862,30.4532684 59.6849924,30.4532744 59.6849993,30.4532776 59.6850067,30.4532779 59.6850143,30.4532753 59.6850217,30.4532699 59.6850288,30.4532618 59.6850352,30.4532514 59.6850406,30.4532391 59.685045,30.4532253 59.685048,30.4532107 59.6850496,30.4531957 59.6850498,30.4531809 59.6850485,30.4531669 59.6850457,30.4531543 59.6850416,30.4531434 59.6850364,30.4531349 59.6850302,30.4531288 59.6850232,30.4531256 59.6850158,30.4531253 59.6850083)))', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903)))', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532247 59.6848893,30.453227 59.684886,30.4532321 59.6848835,30.4532389 59.6848826,30.4532457 59.6848833,30.4532511 59.6848856,30.4532538 59.6848889,30.4532531 59.6848924,30.4532493 59.6848954,30.4532432 59.6848971,30.4532362 59.6848972,30.4532299 59.6848957,30.4532257 59.6848928,30.4532247 59.6848893)))', 'way', 962678726, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530998 59.6849248,30.4531253 59.6848349,30.4531384 59.6848341,30.4532098 59.6848776,30.4532043 59.6848829,30.4532023 59.6848877,30.4532029 59.6848932,30.4532056 59.6848974,30.4531105 59.684928,30.4530998 59.6849248)))', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529683 59.6848711,30.4531034 59.6848301,30.4531127 59.6848333,30.4530868 59.6849239,30.4530724 59.6849262,30.4529683 59.6848711)))', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529482 59.6849246,30.452961 59.6848772,30.4530633 59.6849302,30.4530589 59.6849341,30.4529482 59.6849246)))', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531185 59.6849335,30.4532133 59.6849034,30.4532243 59.684907,30.4532339 59.6849085,30.4532455 59.6849087,30.4532581 59.6849071,30.4533269 59.6849477,30.4533222 59.6849516,30.4531212 59.684939,30.4531185 59.6849335)))', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452977 59.6848046,30.4529797 59.6847958,30.453536 59.6848401,30.4535329 59.6848493,30.452977 59.6848046)))', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)))', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565,30.4533809 59.6849511)))', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533623 59.6849431,30.4533921 59.6848545,30.4534038 59.6848537,30.4534994 59.6849065,30.4533739 59.6849464,30.4533623 59.6849431)))', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)))', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529663 59.6848632,30.4529831 59.6848107,30.4530928 59.6848201,30.4530962 59.6848253,30.4529663 59.6848632)))', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531503 59.6848308,30.453158 59.6848262,30.4533614 59.6848416,30.4533642 59.6848467,30.4532706 59.684876,30.4532619 59.6848729,30.4532504 59.6848704,30.4532379 59.6848698,30.4532263 59.6848712,30.4532195 59.6848732,30.4531503 59.6848308)))', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452631 59.6847454,30.4526341 59.6847357,30.4528676 59.6847547,30.4528645 59.6847644,30.452631 59.6847454)))', 'way', 962735612, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530149 59.6847769,30.4530176 59.6847681,30.4535589 59.6848104,30.4535559 59.6848195,30.4530149 59.6847769)))', 'way', 962735613, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6847573,30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573)))', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523152 59.6851448,30.4526116 59.6847664,30.4528877 59.684789,30.4528309 59.6849691,30.4528148 59.6849678,30.4528061 59.6849952,30.4528221 59.6849965,30.45277 59.6851675,30.4527658 59.68518,30.4523152 59.6851448)))', 'relation', 12933782, '{\"ref\": \"5\", \"name\": \"Кенконс\", \"genus\": \"Tilia\", \"name:en\": \"The Quincunx\", \"natural\": \"wood\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526128 59.684675,30.4526137 59.6846701,30.4526205 59.6846666,30.4526302 59.6846662,30.4526381 59.684669,30.4526406 59.6846738,30.4526365 59.6846782,30.4526277 59.6846803,30.4526184 59.684679,30.4526128 59.684675)))', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526042 59.6846709,30.4526082 59.6846655,30.452617 59.6846635,30.4528469 59.6846817,30.452843 59.684694,30.4528376 59.6847122,30.4526498 59.6846973,30.4526123 59.6846817,30.4526042 59.6846709)))', 'relation', 12933783, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530629 59.6847308,30.4530706 59.6847131,30.4530752 59.684699,30.4535863 59.6847456,30.4535811 59.6847595,30.4535752 59.6847748,30.4530629 59.6847308)))', 'relation', 12933784, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4534977 59.6852035,30.4534967 59.6852111,30.453492 59.6852191,30.4534813 59.6852261,30.4534692 59.6852309,30.4534524 59.6852342,30.453435 59.6852355,30.4534193 59.6852337,30.4534045 59.6852307,30.4533914 59.6852248,30.4533831 59.6852182,30.4533763 59.68521,30.4533752 59.6852006)))', 'relation', 12935640, '{\"height\": \"5.5\", \"roof:shape\": \"pyramidal\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"0.5\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526773 59.6854805,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.4527511 59.6854859,30.4526773 59.6854805)))', 'relation', 12987950, '{\"height\": \"1\", \"roof:shape\": \"skillion\", \"roof:colour\": \"grey\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"roof:direction\": \"170\", \"building:colour\": \"#E4C78F\", \"roof:orientation\": \"along\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4526773 59.6854805,30.4527511 59.6854859,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528709 59.6855164,30.4527091 59.6855042,30.4525787 59.6854944)))', 'relation', 12935639, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4522474 59.6851858,30.4522167 59.6853009,30.4522119 59.6853269,30.4521905 59.6853763,30.4521596 59.6854203,30.4521293 59.6854701,30.4520946 59.6855262,30.4520624 59.6855804,30.4520524 59.6856064,30.452047 59.6856386,30.452047 59.6856666,30.4520551 59.685713,30.4520778 59.685798,30.4520997 59.6858613,30.4521127 59.6859046,30.4521047 59.6859432,30.4520825 59.6859825,30.4520478 59.686026,30.4520492 59.6860479,30.4520658 59.6860755,30.4520819 59.6860924,30.4521387 59.6861383,30.4521581 59.6861556,30.4521822 59.6861782,30.45222 59.6862149,30.4522535 59.6862461,30.4522676 59.6862668,30.4522828 59.6862897,30.4522911 59.6863104,30.4522992 59.6863312,30.4523018 59.6863618,30.4522989 59.6863961,30.4522911 59.6864255,30.452286 59.6864496,30.4522787 59.6864747,30.4522743 59.6864925,30.452274 59.6865148,30.4522776 59.6865312,30.4522888 59.6865538,30.4523045 59.686573,30.4523226 59.6865862,30.4523413 59.6865954,30.4523836 59.686613,30.4524214 59.6866244,30.4524614 59.686634,30.4524912 59.6866392,30.4525264 59.6866438,30.4525641 59.6866457,30.4526585 59.6866455,30.4527524 59.6866414,30.4528825 59.6866353,30.4530173 59.6866255,30.4531259 59.6866181,30.4531936 59.6866133,30.453271 59.6866114,30.4533083 59.686614,30.4534028 59.6866228,30.4535229 59.6866363,30.4536201 59.6866455,30.453691 59.6866508,30.4536976 59.6866508,30.4539823 59.6866673,30.4539778 59.6866919,30.4544217 59.6867427,30.4544227 59.6867377,30.4544646 59.686742,30.4544638 59.6867472,30.4545508 59.6867576,30.4545534 59.6867525,30.4545963 59.6867573,30.4546214 59.6867604,30.4546788 59.6867553,30.4548168 59.686752,30.4551163 59.6867835,30.4552388 59.6868093,30.4553945 59.6868602,30.455491 59.6869022,30.4555769 59.68694,30.4556466 59.6869672,30.4557807 59.6870023,30.4558987 59.6870186,30.4559816 59.68702,30.4560875 59.6870601,30.4561508 59.6871091,30.4561831 59.6871675,30.456183 59.687235,30.4561616 59.6872894,30.4561159 59.6873352,30.4560824 59.6873697,30.4560436 59.6874139,30.4560113 59.687453,30.4559765 59.6875127,30.4559804 59.6875356,30.4559953 59.6875601,30.4560395 59.6875816,30.4560838 59.6875938,30.4561467 59.6876019,30.4561991 59.6876021,30.4563573 59.6875979,30.4565289 59.6875961,30.4566782 59.6875933,30.4567611 59.687592,30.4568899 59.687586,30.4570005 59.6875828,30.4570995 59.6875755,30.4572099 59.6875697,30.4573214 59.6875781,30.4574243 59.6875895,30.4575564 59.6876086,30.4576489 59.6876236,30.4577906 59.6876357,30.4578929 59.687656,30.4579737 59.6876911,30.4580413 59.6877282,30.4581225 59.6877678,30.4581817 59.6878027,30.4582341 59.6878291,30.4583152 59.6878863,30.4583478 59.6879193,30.4583877 59.6879673,30.458411 59.6880122,30.4584387 59.6880452,30.4584657 59.6880811,30.4585427 59.6881373,30.4585748 59.6881735,30.4586375 59.6882236,30.4586938 59.6882576,30.4587833 59.6883125,30.45884 59.6883434,30.4588959 59.6883741,30.4589723 59.6884163,30.4590175 59.6884495,30.4590717 59.6884887,30.4591366 59.6885238,30.4591908 59.6885653,30.4592104 59.6886013,30.4592312 59.6886474,30.4592494 59.6886943,30.4592859 59.6887303,30.4593172 59.688773,30.4593556 59.6888131,30.459429 59.6888677,30.459467 59.6889042,30.4594979 59.688929,30.4595172 59.6889694,30.4595266 59.6890044,30.4595285 59.689042,30.4595248 59.6890919,30.4595255 59.6891719,30.4595317 59.6892178,30.4595442 59.6893129,30.4595387 59.689363,30.4595118 59.6894235,30.4594761 59.689469,30.4594014 59.6895068,30.4593069 59.6895588,30.4592476 59.6895966,30.4591945 59.6896312,30.4591511 59.6896562,30.4591092 59.6896944,30.4590843 59.6897378,30.4590826 59.689771,30.4590853 59.6898069,30.4591078 59.6898435,30.4592007 59.6898882,30.4592339 59.6899293,30.4592628 59.6899874,30.4592762 59.6900429,30.45928 59.6901025,30.4592809 59.6901575,30.4592798 59.6902243,30.4593042 59.6902777,30.4593662 59.6903178,30.4594544 59.6903409,30.4595249 59.6903674,30.4595807 59.6903944,30.4596268 59.6904316,30.4596583 59.6904756,30.4596087 59.690551,30.4596006 59.6905905,30.4595977 59.6906403,30.4595904 59.6906903,30.4595826 59.6907418,30.4595821 59.6908019,30.459583 59.6908375,30.459529 59.6908703,30.4594074 59.6909353,30.4592831 59.6909939,30.459213 59.6910431,30.4591817 59.691066,30.4591361 59.6911201,30.4591012 59.6911675,30.4591012 59.691223,30.4591406 59.6912486,30.4592295 59.6912875,30.4592895 59.6913173,30.4593728 59.6913444,30.4594455 59.6913593,30.459517 59.6913682,30.4596037 59.6913935,30.4596491 59.6914211,30.4596908 59.6914522,30.4597319 59.6914924,30.4597559 59.6915361,30.4597745 59.6915821,30.459787 59.6916313,30.4597852 59.6916643,30.4597718 59.6917238,30.4597396 59.6917861,30.4596859 59.6918429,30.4596685 59.6918693,30.4596383 59.6919054,30.4596009 59.6919405,30.4595315 59.6919991,30.4594652 59.6920502,30.4594082 59.6920946,30.4593773 59.6921151,30.4593545 59.6921348,30.4593366 59.6921529,30.4593399 59.6921734,30.4593659 59.6921939,30.4596045 59.6923272,30.4596496 59.6923362,30.4596901 59.6923377,30.4597398 59.6923315,30.4597933 59.6923156,30.4598526 59.6922792,30.4599141 59.692234,30.4600168 59.6921771,30.4600862 59.6921317,30.4601606 59.6921103,30.4602526 59.6920827,30.460323 59.6920633,30.4603814 59.6920333,30.4604812 59.6919715,30.4605362 59.6919506,30.4606073 59.6919499,30.4606743 59.6919675,30.4607467 59.6920081,30.4608017 59.6920284,30.4608728 59.6920473,30.4609935 59.6920595,30.4610726 59.692067,30.4611517 59.6920866,30.4612403 59.6921299,30.4612939 59.6921759,30.4613569 59.6922104,30.4614227 59.6922341,30.4614964 59.6922659,30.4615568 59.6923059,30.4616211 59.6923729,30.4616748 59.6924466,30.4617579 59.6925197,30.4618368 59.6925614,30.461948 59.6926074,30.4620442 59.6926525,30.4621643 59.6927115,30.4622732 59.6927583,30.4623906 59.6927971,30.4625398 59.6928238,30.4626554 59.6928355,30.4627278 59.6928346,30.4627807 59.6928331,30.4629009 59.6928193,30.4629797 59.6928093,30.4630314 59.6928086,30.4630815 59.6928162,30.4631241 59.6928309,30.4631433 59.692849,30.4631354 59.6928782,30.4630918 59.6929178,30.4629933 59.692982,30.4628509 59.6930395,30.4627989 59.693076,30.4627775 59.6931068,30.4627715 59.6931374,30.4627782 59.6931678,30.4628 59.6931938,30.462816 59.6932161,30.4628201 59.6932352,30.4628276 59.6932642,30.4628055 59.6932947,30.462749 59.6933555,30.4627356 59.6934076,30.4627544 59.6934638,30.4627866 59.6935491,30.4628348 59.6936025,30.4628814 59.6936516,30.4629464 59.6936976,30.4630181 59.6937555,30.4631033 59.6938351,30.463194 59.693908,30.4632997 59.6939707,30.4633997 59.6940315,30.4634563 59.6940722,30.4634978 59.6941112,30.4635448 59.6941433,30.4635995 59.6941633,30.4636618 59.6941785,30.4637065 59.6941778,30.4637604 59.694169,30.4638165 59.6941725,30.4638941 59.6941882,30.463945 59.6941973,30.4639826 59.6942136,30.4640155 59.6942304,30.4640341 59.6942422,30.4640539 59.694259,30.4640781 59.6942943,30.4641097 59.6943536,30.4641054 59.6943849,30.4640955 59.6944214,30.4640677 59.6944543,30.4640278 59.694509,30.4639684 59.6945921,30.4639761 59.694632,30.4640196 59.6946691,30.4640928 59.6947215,30.4641504 59.6947644,30.4642414 59.694848,30.4643013 59.6949614,30.4643265 59.6950347,30.4643629 59.6950927,30.464383 59.6951471,30.4644155 59.6951914,30.4644503 59.6952616,30.464467 59.6953187,30.4644779 59.6953885,30.4644493 59.6954307,30.4644137 59.6954645,30.4643477 59.6955048,30.4642827 59.6955528,30.4641331 59.6956106,30.4640324 59.6956546,30.4639589 59.6956973,30.4639054 59.6957548,30.4638826 59.6958068,30.4638917 59.6958626,30.4638959 59.695908,30.4638913 59.6959452,30.4638761 59.6959807,30.4638581 59.6960266,30.4638387 59.6960774,30.4638353 59.6961315,30.4638514 59.6962235,30.4639031 59.6963079,30.4639806 59.6963837,30.4640641 59.696435,30.4641563 59.6964993,30.4642492 59.6965314,30.464353 59.6965624,30.4645112 59.6966079,30.4646909 59.6966431,30.4648519 59.6966796,30.4649082 59.6966992,30.4649645 59.6967256,30.4650316 59.6967635,30.465104 59.6968014,30.4651737 59.6968352,30.4652724 59.696889,30.4653398 59.6969338,30.4653714 59.6969637,30.4653977 59.6970024,30.4654124 59.6970396,30.4654285 59.6970924,30.4654299 59.6971357,30.4654285 59.6971912,30.4654178 59.6972534,30.4654178 59.6973103,30.4654268 59.6973472,30.465443 59.6973849,30.4654739 59.6974306,30.465535 59.6974889,30.4655776 59.6975263,30.4655998 59.6975497,30.4656249 59.6975948,30.4656281 59.6976305,30.4656291 59.6976586,30.465636 59.697698,30.4656478 59.6977439,30.4656559 59.6977839,30.4656639 59.6978247,30.4656741 59.697865,30.4656808 59.6978977,30.4656931 59.6979479,30.4657242 59.6979888,30.4657651 59.6980369,30.4658049 59.6980618,30.4658569 59.6980859,30.4659085 59.6981101,30.4659691 59.6981356,30.4659934 59.6981619,30.4660187 59.6982125,30.4660434 59.6982506,30.4660765 59.6982913,30.46612 59.6983229,30.46618 59.6983645,30.4662324 59.6983954,30.466279 59.6984245,30.4663222 59.6984585,30.4663422 59.6984839,30.4663508 59.6985161,30.466347 59.6985389,30.4663297 59.6985658,30.4662984 59.6986043,30.4662667 59.6986353,30.4662287 59.6986639,30.4662098 59.6986996,30.4662023 59.698738,30.4662177 59.6987814,30.4662476 59.6988217,30.4662941 59.6988595,30.4663218 59.6988897,30.4663703 59.6989336,30.4664066 59.698983,30.4664342 59.6990318,30.46626 59.699006,30.4662245 59.6990009,30.4661986 59.6989985,30.465736 59.6989731,30.465674 59.6989864,30.4656438 59.6989955,30.4656194 59.6990058,30.4655995 59.6990178,30.4655881 59.6990296,30.4655669 59.6990522,30.4655425 59.6990838,30.4655077 59.6991223,30.4654429 59.6991855,30.4653481 59.6992218,30.4652461 59.6992516,30.4651852 59.6992621,30.4651339 59.6992648,30.4650235 59.6992651,30.4649339 59.6992741,30.4648662 59.6992863,30.4647744 59.6993078,30.4647108 59.6993347,30.4646409 59.6993755,30.4645943 59.6994397,30.4645313 59.6994729,30.464447 59.6994976,30.4643342 59.6995189,30.4641272 59.6995513,30.4601 59.6956121,30.4590933 59.6945995,30.4585195 59.6940453,30.4565283 59.6920253,30.4559963 59.6915691,30.455779 59.6913562,30.4555191 59.6911016,30.4536132 59.6892318,30.4533114 59.6893232,30.4532486 59.6892981,30.453085 59.689221,30.4529871 59.689177,30.4528879 59.6891357,30.4528128 59.6891072,30.4524488 59.6889751,30.4524008 59.688958,30.4523038 59.6889045,30.4522723 59.6888961,30.4522552 59.6888858,30.4522361 59.6888724,30.452216 59.68885,30.4521838 59.6888324,30.4521207 59.6887986,30.4520511 59.6887644,30.4518909 59.6886967,30.4517882 59.6886551,30.4516822 59.6886098,30.4515358 59.6885556,30.4514019 59.6885123,30.4513037 59.6884778,30.4512571 59.6884636,30.4512056 59.6884428,30.4511404 59.6884196,30.4510778 59.6883871,30.4510264 59.6883553,30.4509783 59.6883239,30.4508749 59.6882578,30.4508266 59.688226,30.4507678 59.6881981,30.4505943 59.6881208,30.4501869 59.6879433,30.4499736 59.6878632,30.4499334 59.6878503,30.4498881 59.687841,30.4497871 59.6878092,30.4494924 59.6876814,30.4490926 59.6875099,30.4490362 59.6874936,30.4489854 59.6874759,30.4489383 59.6874638,30.448876 59.687449,30.4487626 59.6874338,30.4486346 59.6874221,30.4485214 59.6874142,30.4483648 59.6874032,30.4474691 59.687337,30.4468361 59.6872873,30.4467403 59.6872722,30.446684 59.6872669,30.4463496 59.6872017,30.4463085 59.6871943,30.4462561 59.6871833,30.4462179 59.6871721,30.446187 59.6871613,30.4461557 59.68715,30.4461253 59.6871366,30.4461066 59.6871274,30.4460918 59.6871135,30.4460273 59.6870454,30.4459552 59.6870078,30.4459436 59.6870073,30.4459073 59.6869902,30.4458766 59.6869748,30.445846 59.6869616,30.4458216 59.6869518,30.4457961 59.6869433,30.4457578 59.6869309,30.4457123 59.6869183,30.4456647 59.6869057,30.4455949 59.6868892,30.4455514 59.68688,30.4455232 59.6868726,30.4455129 59.6868665,30.4453868 59.6868434,30.44531 59.6868381,30.4452457 59.6868322,30.44506 59.686812,30.4450028 59.6868076,30.4449557 59.6868041,30.4449237 59.6868029,30.4448943 59.6868019,30.4448734 59.6868039,30.4448512 59.6868054,30.4448212 59.6868026,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017)))', 'relation', 4187886, '{\"ref\": \"II\", \"name\": \"Долина реки Славянки\", \"place\": \"quarter\", \"name:az\": \"Slavyanka çayının vadisi\", \"name:fr\": \"Vallée de la rivière Slavianka\", \"name:hy\": \"Սլավյանկա գետի հովիտ\", \"name:uk\": \"Долина річки Слов''янки\", \"name:zh\": \"谷斯拉维亚卡河\", \"boundary\": \"protected_area\", \"int_name\": \"Vallée de la rivière Slavianka\", \"wikidata\": \"Q121809341\", \"wikipedia\": \"ru:Павловский парк#Долина реки Славянки\", \"description\": \"Район Павловского парка\"}', NULL),\n ('SRID=4326;LINESTRING(30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392)', 'way', 1297781094, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{8289295976,12023732271,12023732270,12023732269,8114975027,12023699867,12023732331,12023732330,12023732337,12023732336}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528788 59.6854915)', 'way', 1093902027, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,1439053668}'),\n ('SRID=4326;LINESTRING(30.4535894 59.6847601,30.4535811 59.6847595)', 'way', 1297781085, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{12023732332,8289295976}'),\n ('SRID=4326;LINESTRING(30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601)', 'way', 1297781086, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{12023732335,12023732334,12023732333,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4519927 59.6856654,30.451993 59.6856352,30.4519974 59.6856085,30.4520057 59.6855861,30.452033 59.685533,30.4520717 59.6854725,30.4521073 59.6854196,30.4521538 59.6853554,30.4521646 59.6853419,30.4521729 59.6853289,30.4521751 59.685321,30.4521778 59.6853033,30.4521768 59.6852884,30.4522278 59.6851794,30.4522474 59.6851858,30.4522695 59.6851929,30.4522692 59.6852184,30.452307 59.6852409,30.4523333 59.6852571,30.4523534 59.6852701,30.4523836 59.685295,30.4524088 59.6853175,30.4524395 59.6853504,30.4524616 59.6853789,30.4524735 59.685401,30.4524845 59.6854195,30.4524943 59.6854502,30.452497 59.6854882,30.452346 59.6854768,30.4523217 59.6855588,30.4522802 59.6855556,30.4522258 59.6855515,30.4522191 59.6855742,30.4522002 59.685638,30.4521808 59.6857036,30.4521745 59.6857248,30.4522289 59.6857289,30.4522705 59.6857319,30.4522477 59.6858088,30.4522804 59.6858113,30.4525803 59.6858339,30.4526091 59.6858361,30.4526832 59.6858416,30.4528205 59.685852,30.4528174 59.6858982,30.4527279 59.6859036,30.4527314 59.6859191,30.4527383 59.6859422,30.4527472 59.6859643,30.4527643 59.6859927,30.4527791 59.6860133,30.4527956 59.6860336,30.4528174 59.6860572,30.4528406 59.6860793,30.4528659 59.6861008,30.4528879 59.6861175,30.4529175 59.6861373,30.4529497 59.6861561,30.4529804 59.6861727,30.4530167 59.6861897,30.4530418 59.6861992,30.4530963 59.6861616,30.4531534 59.686184,30.4531278 59.6862023,30.453137 59.6862056,30.4531608 59.6862141,30.4531704 59.6862175,30.453196 59.6861992,30.4531795 59.686249,30.4531642 59.6862975,30.453138 59.686381,30.4531363 59.6863866,30.4532826 59.6863983,30.4532725 59.6864305,30.4532916 59.686432,30.4532869 59.6864462,30.4532998 59.6864473,30.4533248 59.6864494,30.4533485 59.6864515,30.4533611 59.6864525,30.4533659 59.6864383,30.4534768 59.6864467,30.453575 59.6864544,30.4535812 59.6864636,30.4536188 59.68646,30.4536556 59.6864553,30.4536952 59.6864492,30.4537376 59.6864434,30.4537814 59.6864354,30.4538212 59.6864281,30.453863 59.6864194,30.4538817 59.6864353,30.4539287 59.6864214,30.4539454 59.6864356,30.4539576 59.686432,30.4540057 59.6864176,30.4540172 59.6864141,30.4540005 59.6863999,30.4540399 59.6863883,30.4540219 59.6863729,30.4540549 59.6863624,30.4540887 59.6863495,30.4541297 59.6863344,30.4541407 59.6863296,30.4541607 59.6863411,30.4541696 59.6863371,30.4542 59.6863235,30.4542091 59.6863195,30.4541887 59.6863078,30.4541965 59.6863041,30.4542363 59.6862844,30.4542705 59.6862654,30.4542999 59.6862773,30.4544137 59.6862059,30.4543849 59.6861942,30.4544059 59.686181,30.4544395 59.686154,30.4544728 59.6861239,30.4544964 59.6860973,30.4545494 59.6861117,30.4546053 59.6861282,30.4545922 59.6861427,30.4545784 59.6861572,30.4545449 59.6861862,30.4545138 59.6862131,30.4544576 59.6862495,30.4543906 59.6862854,30.4543294 59.6863147,30.4542746 59.6863415,30.454221 59.6863683,30.454115 59.6864133,30.454039 59.6864407,30.4539464 59.6864693,30.4539252 59.6864763,30.4538233 59.6865047,30.4536724 59.6865094,30.4536724 59.6865223,30.4536503 59.6865223,30.4535973 59.686521,30.4535465 59.6865208,30.4535021 59.6865209,30.4534712 59.6865222,30.4534473 59.6865255,30.453429 59.6865331,30.4534215 59.6865438,30.4534132 59.686574,30.4534136 59.6865866,30.453423 59.6865971,30.4534445 59.6866075,30.4534686 59.686613,30.4534579 59.6866461,30.4534073 59.6866421,30.4533332 59.6866345,30.4532837 59.6866305,30.453254 59.6866292,30.4532071 59.6866305,30.4531615 59.686632,30.4531191 59.6866347,30.4531041 59.6865988,30.4531448 59.6865925,30.4531695 59.6865869,30.4531966 59.6865772,30.4532138 59.6865676,30.4532231 59.6865589,30.453199 59.6865568,30.4531811 59.6865532,30.4531596 59.6865468,30.4531373 59.6865396,30.4531219 59.6865326,30.4530964 59.6865196,30.4530733 59.6865042,30.4530555 59.6864887,30.4530367 59.6864681,30.4530227 59.6864499,30.4530105 59.6864274,30.4530012 59.6864103,30.4529945 59.6863933,30.4529919 59.6863759,30.4529905 59.686347,30.4529907 59.6863231,30.4529911 59.6862911,30.4529891 59.686281,30.4529827 59.6862715,30.4529634 59.6862545,30.4529402 59.6862373,30.4529067 59.6862141,30.4528563 59.6861801,30.4528201 59.6861533,30.4527906 59.6861317,30.4527578 59.6861047,30.452731 59.6860823,30.4527092 59.6860609,30.4526947 59.6860457,30.4526816 59.6860278,30.4526652 59.6860011,30.4526541 59.6859782,30.4526337 59.6859283,30.4526256 59.6859159,30.4526103 59.685908,30.4525905 59.6859034,30.4525603 59.6859009,30.452391 59.6858965,30.4523675 59.6858999,30.4523504 59.685904,30.4523333 59.6859114,30.452312 59.685923,30.4522313 59.6859637,30.4521811 59.6859882,30.452085 59.686032,30.4520765 59.6860386,30.4520753 59.6860476,30.4520797 59.6860577,30.4520264 59.6860652,30.4520201 59.6860504,30.4520162 59.6860346,30.4520143 59.6860207,30.4520168 59.6860051,30.4520203 59.685989,30.4520274 59.6859769,30.4520341 59.6859612,30.4520405 59.6859506,30.452047 59.6859415,30.4520537 59.6859259,30.4520544 59.6859134,30.4520523 59.6858956,30.4520465 59.6858708,30.4520254 59.6858069,30.4519995 59.68571,30.4519927 59.6856654),(30.4521704 59.6857398,30.4521704 59.6857513,30.4521744 59.6857635,30.4521811 59.6857763,30.4521945 59.6857899,30.4522187 59.6858021,30.4522414 59.6858088,30.4522629 59.685735,30.4521731 59.6857289,30.4521704 59.6857398),(30.452226 59.6855475,30.4523159 59.6855543,30.4523387 59.6854798,30.4523212 59.6854826,30.4523011 59.6854866,30.452277 59.6854941,30.4522596 59.6855015,30.4522448 59.6855117,30.4522354 59.6855225,30.4522301 59.6855347,30.452226 59.6855475),(30.4522508 59.6858359,30.4525647 59.6858582,30.4525714 59.6858373,30.4522575 59.6858142,30.4522508 59.6858359),(30.4523249 59.685462,30.4523727 59.6854667,30.4523804 59.6854465,30.4523327 59.6854418,30.4523249 59.685462)))', 'relation', 6636677, '{\"surface\": \"fine_gravel\", \"area:highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533763 59.68521,30.4534979 59.6851951,30.4535038 59.6852069,30.4534995 59.6852209,30.4533878 59.6852355,30.4533818 59.6852214,30.4533763 59.68521)))', 'relation', 12947389, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523253 59.6851768,30.4523286 59.6851637,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4525881 59.6854311,30.452574 59.6853959,30.4525486 59.6853522,30.4525291 59.6853286,30.4525137 59.6853106,30.452501 59.6852981,30.4524755 59.6852751,30.452455 59.6852592,30.4524366 59.6852453,30.4524178 59.6852321,30.4523994 59.6852201,30.4523706 59.6852014,30.452339 59.6851839,30.4523253 59.6851768)))', 'relation', 5906400, '{\"ref\": \"2\", \"name\": \"Цветочный партер\", \"leisure\": \"garden\", \"name:en\": \"The Flower Parterre\", \"ref:okn\": \"781620399040956\", \"alt_name\": \"Цветники Марии Фёдоровны\", \"wikidata\": \"Q118122045\", \"garden:type\": \"flowerbed\", \"garden:style\": \"french\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.4533268 59.6853074,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532343 59.6853363,30.453156 59.6852825)))', 'relation', 17755883, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4531158 59.6853933,30.4531719 59.6854212,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530216 59.6854636,30.4529242 59.6854401,30.4529045 59.6854337)))', 'relation', 17755885, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4532343 59.6853363,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.453238 59.6853862,30.453207 59.6854026,30.4531719 59.6854212,30.4531158 59.6853933,30.4530217 59.6853466)))', 'relation', 17755884, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527677 59.6846399,30.4527719 59.6846286,30.4527799 59.6846212,30.4527933 59.6846157,30.4528134 59.6846137,30.4528403 59.6846144,30.4528537 59.6846178,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399)))', 'relation', 12932608, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 1721132, '{\"ref\": \"3\", \"name\": \"Павильон Трёх граций\", \"note\": \"Геометрические теги крыши павильона размещены отдельно\", \"name:es\": \"Pabellón de las tres gracias\", \"name:fr\": \"Pavillon des Trois Grâces\", \"name:pt\": \"Pavilhão das Três Graças\", \"name:zh\": \"三美人亭\", \"ref:okn\": \"781610399040356\", \"tourism\": \"attraction\", \"building\": \"yes\", \"heritage\": \"2\", \"historic\": \"yes\", \"wikidata\": \"Q112716431\", \"addr:city\": \"Павловск\", \"architect\": \"Чарльз Камерон\", \"start_date\": \"1800\", \"addr:street\": \"Садовая улица\", \"architect:en\": \"Charles Cameron\", \"addr:housenumber\": \"20 литЧ\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6514/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12202573, '{\"height\": \"7\", \"min_height\": \"5.5\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12497925, '{\"height\": \"1.5\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525466 59.6846232,30.4525568 59.6846156,30.4525613 59.6846073,30.4525618 59.6845988,30.4525615 59.68459,30.4525675 59.6845745,30.452571 59.6845656,30.452566 59.6845558,30.4525539 59.6845467,30.4526659 59.6845694,30.4527826 59.6845897,30.4528946 59.6846069,30.4530012 59.6846212,30.4535732 59.6846878,30.4535916 59.6846905,30.453606 59.6846946,30.4536164 59.684701,30.4536208 59.6847085,30.4536214 59.684718,30.4536181 59.6847274,30.4536067 59.6847614,30.4535894 59.6847601,30.4535811 59.6847595,30.4535863 59.6847456,30.4535923 59.6847296,30.4535925 59.6847224,30.4535886 59.6847164,30.4535807 59.6847121,30.4535698 59.6847103,30.4535555 59.6847085,30.4530859 59.6846667,30.4530887 59.6846582,30.4530942 59.6846416,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399,30.4525841 59.6846239,30.4525626 59.6846222,30.4525466 59.6846232)))', 'relation', 12131779, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452047 59.6856386,30.4520524 59.6856064,30.4520624 59.6855804,30.4520946 59.6855262,30.4521293 59.6854701,30.4521596 59.6854203,30.4521905 59.6853763,30.4522119 59.6853269,30.4522167 59.6853009,30.4522474 59.6851858,30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4601554 59.6854805,30.4601767 59.6856005,30.4601793 59.6857568,30.4601468 59.6858374,30.4600081 59.6860973,30.459853 59.68614,30.459704 59.6863415,30.4596832 59.6864086,30.4596712 59.686482,30.4596638 59.6865545,30.459666 59.6866369,30.4596929 59.6867933,30.4597047 59.6868418,30.4597409 59.6869365,30.4598403 59.6871335,30.4599111 59.6872432,30.4599552 59.6873116,30.4600453 59.6874469,30.460134 59.687572,30.4600858 59.6875668,30.4600427 59.6875593,30.4599863 59.6875559,30.4598958 59.6875545,30.4597744 59.6875619,30.4597289 59.6875627,30.4596698 59.687583,30.4596323 59.6876026,30.4595974 59.6876371,30.4595625 59.6876658,30.4595236 59.6876852,30.459478 59.6876967,30.459407 59.6877062,30.4593453 59.6877028,30.4592849 59.6876838,30.4592367 59.6876553,30.4591509 59.6875883,30.4590905 59.6875599,30.4590355 59.6875424,30.4589524 59.6875261,30.4588343 59.6875105,30.4586868 59.6875038,30.4585474 59.6875038,30.4584333 59.6875086,30.4583274 59.6875126,30.4582348 59.6875193,30.4581437 59.6875301,30.4580095 59.6875505,30.4579371 59.6875654,30.4579009 59.6875782,30.4578312 59.6876019,30.4577386 59.6876249,30.4576489 59.6876236,30.4575564 59.6876086,30.4574243 59.6875895,30.4573214 59.6875781,30.4572099 59.6875697,30.4570995 59.6875755,30.4570005 59.6875828,30.4568899 59.687586,30.4567611 59.687592,30.4566782 59.6875933,30.4565289 59.6875961,30.4563573 59.6875979,30.4561991 59.6876021,30.4561467 59.6876019,30.4560838 59.6875938,30.4560395 59.6875816,30.4559953 59.6875601,30.4559804 59.6875356,30.4559765 59.6875127,30.4560113 59.687453,30.4560436 59.6874139,30.4560824 59.6873697,30.4561159 59.6873352,30.4561616 59.6872894,30.456183 59.687235,30.4561831 59.6871675,30.4561508 59.6871091,30.4560875 59.6870601,30.4559816 59.68702,30.4558987 59.6870186,30.4557807 59.6870023,30.4556466 59.6869672,30.4555769 59.68694,30.455491 59.6869022,30.4553945 59.6868602,30.4552388 59.6868093,30.4551163 59.6867835,30.4548168 59.686752,30.4546788 59.6867553,30.4546214 59.6867604,30.4545963 59.6867573,30.4545534 59.6867525,30.4545508 59.6867576,30.4544638 59.6867472,30.4544646 59.686742,30.4544227 59.6867377,30.4544217 59.6867427,30.4539778 59.6866919,30.4539823 59.6866673,30.4536976 59.6866508,30.453691 59.6866508,30.4536201 59.6866455,30.4535229 59.6866363,30.4534028 59.6866228,30.4533083 59.686614,30.453271 59.6866114,30.4531936 59.6866133,30.4531259 59.6866181,30.4530173 59.6866255,30.4528825 59.6866353,30.4527524 59.6866414,30.4526585 59.6866455,30.4525641 59.6866457,30.4525264 59.6866438,30.4524912 59.6866392,30.4524614 59.686634,30.4524214 59.6866244,30.4523836 59.686613,30.4523413 59.6865954,30.4523226 59.6865862,30.4523045 59.686573,30.4522888 59.6865538,30.4522776 59.6865312,30.452274 59.6865148,30.4522743 59.6864925,30.4522787 59.6864747,30.452286 59.6864496,30.4522911 59.6864255,30.4522989 59.6863961,30.4523018 59.6863618,30.4522992 59.6863312,30.4522911 59.6863104,30.4522828 59.6862897,30.4522676 59.6862668,30.4522535 59.6862461,30.45222 59.6862149,30.4521822 59.6861782,30.4521581 59.6861556,30.4521387 59.6861383,30.4520819 59.6860924,30.4520658 59.6860755,30.4520492 59.6860479,30.4520478 59.686026,30.4520825 59.6859825,30.4521047 59.6859432,30.4521127 59.6859046,30.4520997 59.6858613,30.4520778 59.685798,30.4520551 59.685713,30.452047 59.6856666,30.452047 59.6856386)))', 'relation', 4194432, '{\"ref\": \"III\", \"name\": \"Придворцовый район\", \"place\": \"quarter\", \"name:fr\": \"Secteur central\", \"website\": \"https://pavlovskmuseum.ru/about/park/layout/36/\", \"boundary\": \"protected_area\", \"wikidata\": \"Q121809724\", \"wikipedia\": \"ru:Павловский парк#Центральный (Придворцовый) район\", \"description\": \"Район исторического Павловского парка\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4366882 59.6889898,30.4370373 59.6889668,30.4370736 59.6889644,30.4371138 59.6889367,30.4374634 59.6889115,30.4375002 59.6889088,30.4375427 59.6889059,30.4380171 59.6888738,30.438182 59.6888616,30.4383254 59.6888487,30.4384589 59.6888338,30.4385849 59.6888182,30.4388652 59.6887778,30.4389016 59.6887728,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346802 59.6935317,30.4346817 59.6935045,30.4346729 59.6934955,30.4346017 59.6934439,30.4344133 59.6933106,30.4344523 59.6932882,30.4344971 59.6932601,30.4345233 59.6932407,30.4345424 59.6932254,30.4345634 59.6932027,30.4345863 59.693171,30.4345979 59.6931498,30.4346066 59.6931248,30.4346128 59.6930889,30.434612 59.693054,30.4346077 59.6930245,30.4346019 59.6930124,30.4345969 59.693,30.4345757 59.6929702,30.4345621 59.6929518,30.434542 59.6929299,30.4345091 59.6928998,30.4344756 59.6928775,30.4344413 59.6928581,30.4343883 59.6928337,30.4343603 59.6928224,30.4343198 59.692809,30.4342705 59.6927958,30.4342429 59.6927909,30.4341796 59.6927811,30.4341217 59.6927737,30.4340777 59.6927708,30.4340075 59.6927673,30.4339293 59.6927692,30.4338474 59.6927768,30.433767 59.6927902,30.4337225 59.6928016,30.4335043 59.6926756,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)))', 'relation', 1721131, '{\"name\": \"Павловский парк\", \"note\": \"https://wiki.openstreetmap.org/wiki/RU:Павловск/Павловский_парк\", \"leisure\": \"park\", \"name:be\": \"Паўлаўскі парк\", \"name:bg\": \"Павловски парк\", \"name:ca\": \"Parc Pàvlovsk\", \"name:en\": \"Pavlovsk Park\", \"name:es\": \"Parque Pávlovsk\", \"name:fr\": \"Parc de Pavlovsk\", \"name:he\": \"פארק פבלובסק\", \"name:hy\": \"Պավլովսկ պարկը\", \"name:nl\": \"Pavlovskpark\", \"name:ru\": \"Павловский парк\", \"name:zh\": \"巴甫洛夫斯克公园\", \"ref:okn\": \"781720399040986\", \"website\": \"https://pavlovskmuseum.ru/about/park/\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"historic\": \"yes\", \"int_name\": \"Parc de Pavlovsk\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q2506336\", \"wikipedia\": \"ru:Павловский парк\", \"fee:amount\": \"100\", \"start_date\": \"1777\", \"opening_hours\": \"07:00-19:00\", \"protect_class\": \"22\", \"operator:phone\": \"+7 (812) 452-15-36\", \"fee:conditional\": \"yes @ 9:00-17:00\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6407/\", \"operator:tourism\": \"museum\", \"operator:website\": \"http://www.pavlovskmuseum.ru\", \"protection_title\": \"Государственный музей-заповедник\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4368674 59.6896812,30.4373083 59.6896203,30.4383622 59.6894747,30.4383925 59.6894699,30.4387768 59.6894091,30.4389533 59.6893793,30.4395631 59.6892765,30.4395975 59.6896826,30.43963 59.6897841,30.4411104 59.6895883,30.4411759 59.6892872,30.4412059 59.6891298,30.4412229 59.6890714,30.4402547 59.6891154,30.4398722 59.6891396,30.4395358 59.6891608,30.4394903 59.6891472,30.4392717 59.6889536,30.4391469 59.6889286,30.4391174 59.6889211,30.4390705 59.6889062,30.4390316 59.6888852,30.4390007 59.6888636,30.4389819 59.6888446,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346174 59.6935301,30.4346147 59.6935224,30.4346086 59.6935129,30.4345932 59.6935014,30.4344744 59.6934215,30.4344752 59.6934118,30.4344684 59.6934032,30.4343048 59.693294,30.4335858 59.6928433,30.4335672 59.6928378,30.4335491 59.692831,30.4335344 59.6928246,30.4335169 59.6928158,30.4334908 59.6928019,30.4334747 59.6927935,30.4334378 59.6927735,30.4334063 59.6927569,30.4333486 59.6927221,30.4332896 59.6926848,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)),((30.4459925 59.6840515,30.4465029 59.6838166,30.4469327 59.6836721,30.4472874 59.6834226,30.4479163 59.6832392,30.4483415 59.6832476,30.4484247 59.6832514,30.4484595 59.6832547,30.4484884 59.6832585,30.4485108 59.6832641,30.4489705 59.6834352,30.4489993 59.6834563,30.4490069 59.6834636,30.4492468 59.6836887,30.4491255 59.6840718,30.4490543 59.6840686,30.4483928 59.684035,30.4478277 59.6840459,30.4469355 59.6841321,30.4462744 59.6842068,30.4459925 59.6840515)))', 'relation', 17990902, '{\"name\": \"Государственный музей-заповедник «Павловск»\", \"note\": \"граница имущественного комплекса организации, не граница парка\", \"boundary\": \"protected_area\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q405637\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601,30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698)))', 'relation', 17786995, '{\"landuse\": \"construction\", \"start_date\": \"06.204\", \"description\": \"реставрация Павильона Трех граций\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522477 59.6858088,30.4522705 59.6857319,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4527091 59.6855042,30.4528709 59.6855164,30.4529043 59.6855189,30.4529835 59.685525,30.4530542 59.6855302,30.4530286 59.6856166,30.4529796 59.6857822,30.4529559 59.6858622,30.4528897 59.6858572,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088)))', 'relation', 6636658, '{\"height\": \"19.650\", \"architect\": \"Чарльз Камерон\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2.45\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"source:building:part\": \"http://pancer.ru/images/project/012/2.jpg\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4530216 59.6854636,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.453064 59.6855044,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 6636659, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528709 59.6855164,30.4528746 59.6855048,30.4528788 59.6854915,30.4529122 59.6854936,30.4529942 59.6854993,30.4529881 59.6855114,30.4529835 59.685525,30.4529043 59.6855189,30.4528709 59.6855164)))', 'relation', 14572596, '{\"height\": \"6.65\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533818 59.6852214,30.453417 59.6852162,30.4534578 59.6852115,30.4535038 59.6852069,30.4535289 59.6853164,30.4535075 59.6853177,30.4534847 59.6853198,30.4534688 59.6853212,30.4534368 59.6853262,30.453436 59.6853248,30.4534146 59.6852887,30.4533878 59.6852355,30.4533818 59.6852214)))', 'relation', 17755881, '{\"height\": \"13\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.453436 59.6853248,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533268 59.6853074,30.4532684 59.6852465)))', 'relation', 17755882, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.4533836 59.6852944,30.4533532 59.6853009,30.4533268 59.6853074,30.4532946 59.6853162,30.4532665 59.6853249,30.4532343 59.6853363,30.4532132 59.6853445,30.4531881 59.6853553,30.453164 59.6853668,30.4531411 59.6853788,30.4531158 59.6853933,30.4530954 59.6854062,30.4530746 59.6854199,30.4530552 59.6854344,30.4530382 59.6854491,30.4530216 59.6854636,30.4530079 59.6854761,30.4530004 59.6854886,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 17904735, '{\"height\": \"10\", \"roof:shape\": \"flat\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.4528469 59.6846817,30.452843 59.684694,30.4529628 59.6847041,30.4530706 59.6847131,30.4530752 59.684699,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4535302 59.6851198,30.4535229 59.6851437,30.4535137 59.6851734,30.4535124 59.6851786,30.4535038 59.6852069,30.4534979 59.6851951,30.4534914 59.6851874,30.4534811 59.6851808,30.4534678 59.6851758,30.4534524 59.6851728,30.453436 59.6851719,30.4534196 59.6851732,30.4534028 59.6851772,30.4533891 59.6851835,30.4533796 59.6851915,30.4533752 59.6852006,30.4533763 59.68521,30.4533818 59.6852214,30.4533524 59.685227,30.4533302 59.6852316,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4528993 59.6854656,30.4528865 59.6854815,30.4528788 59.6854915,30.4528746 59.6855048,30.4527686 59.6854977,30.452777 59.6854654,30.4527565 59.685464,30.4527224 59.6854618,30.4526841 59.6854592,30.4526646 59.6854579,30.4526564 59.6854895,30.4525812 59.6854845,30.4525787 59.6854944,30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858,30.4522278 59.6851794)))', 'relation', 4274530, '{\"fee\": \"yes\", \"ref\": \"IIIа\", \"name\": \"Собственный сад\", \"leisure\": \"garden\", \"name:fr\": \"Jardin privé\", \"ref:okn\": \"781620399040366\", \"tourism\": \"attraction\", \"alt_name\": \"Собственный садик\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"wikidata\": \"Q118122043\", \"start_date\": \"1803\", \"garden:style\": \"french\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6518/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4521745 59.6857248,30.4521808 59.6857036,30.4522002 59.685638,30.4522191 59.6855742,30.4522258 59.6855515,30.4522802 59.6855556,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533763 59.68521,30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540229 59.6848667,30.4540358 59.6848708,30.454047 59.6848759,30.4540561 59.6848821,30.454063 59.6848889,30.4540674 59.6848962,30.4540691 59.6849039,30.454068 59.6849115,30.4540643 59.6849189,30.454058 59.6849259,30.4540493 59.6849322,30.4540386 59.6849376,30.4540261 59.684942,30.4540122 59.6849452,30.4539975 59.684947,30.4539823 59.6849475,30.4539763 59.6849646,30.453965 59.6849637,30.4539277 59.6849606,30.4538688 59.6849558,30.4538059 59.6849506,30.4537818 59.6849487,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537483 59.6850789,30.4538612 59.6850876,30.4539247 59.6850925,30.4539406 59.6850424,30.4539786 59.6850519,30.4540221 59.685063,30.4540417 59.6850686,30.4540646 59.6850751,30.4541059 59.6850881,30.4541472 59.6851025,30.4541871 59.685118,30.4542254 59.6851343,30.4542622 59.6851516,30.4542942 59.6851377,30.4544115 59.6852076,30.4543838 59.6852203,30.4544141 59.6852392,30.4544426 59.6852588,30.4544691 59.6852791,30.4544972 59.6853031,30.4545225 59.6853279,30.4545451 59.6853534,30.4545829 59.6853462,30.4546442 59.6854282,30.4546081 59.6854351,30.4546263 59.6854611,30.4546407 59.6854917,30.4546513 59.6855211,30.4546577 59.6855509,30.4545667 59.6855569,30.4545695 59.6855677,30.4545502 59.6855689,30.4545521 59.6855762,30.454475 59.6855814,30.454473 59.685574,30.4544524 59.6855754,30.4544496 59.6855646,30.4544349 59.6855656,30.4543687 59.68557,30.4543619 59.6855441,30.4543522 59.6855184,30.4543439 59.6854971,30.4543247 59.685468,30.454307 59.6854434,30.4542866 59.6854194,30.4542636 59.6853959,30.4542381 59.6853732,30.4542062 59.685347,30.4541753 59.6853248,30.4541426 59.6853062,30.4541083 59.6852876,30.4540689 59.6852681,30.4540273 59.6852498,30.4539837 59.6852328,30.4539382 59.685217,30.4538908 59.6852026,30.4538877 59.6852126,30.4539316 59.6852158,30.4539299 59.6852218,30.4539248 59.68524,30.453923 59.6852463,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536921 59.6853643,30.4536766 59.6853631,30.453626 59.6853592,30.4536111 59.6853581,30.4536187 59.6853329,30.4534688 59.6853212,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.4532824 59.685393,30.4532679 59.6854007,30.4532019 59.6854356,30.4531881 59.6854429,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.45306 59.6855156,30.4530542 59.6855302,30.4530286 59.6856166,30.4530752 59.6856201,30.4531272 59.685624,30.4531226 59.6856395,30.4531 59.6857159,30.4530826 59.6857747,30.4530781 59.6857896,30.4530261 59.6857857,30.4529796 59.6857822,30.4529559 59.6858622,30.4529512 59.6858765,30.4529486 59.6858896,30.4529478 59.6859011,30.4529482 59.6859112,30.452952 59.685926,30.4529569 59.6859385,30.4529638 59.6859523,30.4529718 59.6859649,30.4529791 59.6859757,30.4529856 59.6859841,30.4530246 59.6859742,30.4530338 59.6859834,30.4530767 59.6860278,30.4530861 59.6860371,30.4530482 59.6860471,30.4530568 59.6860536,30.4530663 59.6860602,30.4530779 59.6860674,30.4530898 59.6860742,30.4531018 59.6860809,30.4531136 59.6860871,30.4531293 59.6860946,30.453148 59.6861029,30.4531695 59.6861116,30.4532167 59.6861306,30.4533686 59.6861421,30.453376 59.6861189,30.4533898 59.68612,30.4534436 59.6861244,30.453457 59.6861255,30.4534496 59.6861487,30.4536027 59.6861615,30.4535556 59.6863114,30.4535958 59.6863065,30.4536563 59.6862959,30.4537014 59.6862868,30.4537731 59.6862682,30.4538342 59.6862493,30.453879 59.6862345,30.4539364 59.686214,30.4539768 59.686198,30.45402 59.6861768,30.4540703 59.686148,30.4541119 59.6861223,30.4541469 59.6860952,30.4541742 59.6860729,30.4541995 59.6860505,30.4542215 59.6860272,30.4542918 59.6860451,30.4543031 59.6860479,30.4543127 59.6860386,30.45433 59.6860429,30.4543365 59.6860363,30.4544062 59.6860538,30.4543997 59.6860604,30.4544185 59.6860651,30.4544086 59.6860746,30.4544964 59.6860973,30.4544728 59.6861239,30.4544395 59.686154,30.4544059 59.686181,30.4543849 59.6861942,30.4544137 59.6862059,30.4542999 59.6862773,30.4542705 59.6862654,30.4542363 59.6862844,30.4541965 59.6863041,30.4541887 59.6863078,30.4542091 59.6863195,30.4542 59.6863235,30.4541696 59.6863371,30.4541607 59.6863411,30.4541407 59.6863296,30.4541297 59.6863344,30.4540887 59.6863495,30.4540549 59.6863624,30.4540219 59.6863729,30.4540399 59.6863883,30.4540005 59.6863999,30.4540172 59.6864141,30.4540057 59.6864176,30.4539576 59.686432,30.4539454 59.6864356,30.4539287 59.6864214,30.4538817 59.6864353,30.453863 59.6864194,30.4538212 59.6864281,30.4537814 59.6864354,30.4537376 59.6864434,30.4536952 59.6864492,30.4536556 59.6864553,30.4536188 59.68646,30.4535812 59.6864636,30.453575 59.6864544,30.4534768 59.6864467,30.4533659 59.6864383,30.4533611 59.6864525,30.4533485 59.6864515,30.4533248 59.6864494,30.4532998 59.6864473,30.4532869 59.6864462,30.4532916 59.686432,30.4532725 59.6864305,30.4532826 59.6863983,30.4531363 59.6863866,30.453138 59.686381,30.4531642 59.6862975,30.4531215 59.686294,30.4531372 59.6862455,30.4531795 59.686249,30.453196 59.6861992,30.4531704 59.6862175,30.4531608 59.6862141,30.453137 59.6862056,30.4531278 59.6862023,30.4531534 59.686184,30.4530963 59.6861616,30.4530418 59.6861992,30.4530167 59.6861897,30.4529804 59.6861727,30.4529497 59.6861561,30.4529175 59.6861373,30.4528879 59.6861175,30.4528659 59.6861008,30.4528406 59.6860793,30.4528174 59.6860572,30.4527956 59.6860336,30.4527791 59.6860133,30.4527643 59.6859927,30.4527472 59.6859643,30.4527383 59.6859422,30.4527314 59.6859191,30.4527279 59.6859036,30.4528174 59.6858982,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088,30.4522705 59.6857319,30.4522289 59.6857289,30.4521745 59.6857248)))', 'relation', 1759666, '{\"name\": \"Павловский дворец\", \"name:ca\": \"Palau Pàvlovsk\", \"name:en\": \"Pavlovsk Palace\", \"name:fi\": \"Pavlovskin_palatsi\", \"name:fr\": \"Palais de Pavlovsk\", \"name:pt\": \"Palácio de Pavlovsk\", \"name:uz\": \"Pavlovsk saroyi\", \"name:zh\": \"巴甫洛夫斯克的宫殿\", \"ref:okn\": \"781610399040316\", \"tourism\": \"museum\", \"building\": \"palace\", \"historic\": \"yes\", \"int_name\": \"Palais de Pavlovsk\", \"wikidata\": \"Q118121947\", \"wikipedia\": \"ru:Павловский дворец\", \"start_date\": \"1782\", \"addr:street\": \"Садовая улица\", \"roof:colour\": \"#DADDE2\", \"building:colour\": \"#FFE19C\", \"addr:housenumber\": \"20 литА\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534688 59.6853212,30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536666 59.6853366,30.4536187 59.6853329,30.4534688 59.6853212)))', 'relation', 6636665, '{\"name\": \"Южный корпус\", \"height\": \"15\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4534995 59.6852209)))', 'relation', 14572597, '{\"height\": \"15\", \"roof:shape\": \"gabled\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540054 59.6848752,30.4537854 59.6848579,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537003 59.685133,30.453682 59.6851921,30.4535124 59.6851786)))', 'relation', 18019154, '{\"height\": \"13\", \"roof:shape\": \"hipped\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL);\n--Testcase 402:\nSELECT count(*) FROM json_osm_test;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 404: オーク / Sồi\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 406:\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 407:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 408: 落葉性 / Cây rụng lá\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 409:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n--Testcase 410: 常緑植物 / Cây thường xanh\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n\n--Testcase 411:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n--Testcase 412: XVIII cent.\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n\n--Testcase 413:\nDELETE FROM json_osm_test;\n\n--Testcase 500:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/macaddr.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr) SERVER sqlite_svr OPTIONS (table 'type_MACADDR');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03');\n--Testcase 012:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03');\n--Testcase 013:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (3, '08002b:010203');\n--Testcase 014:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (4, '08002b-010203');\n--Testcase 015:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203');\n--Testcase 016:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203');\n--Testcase 017:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (7, '08002b010203');\n--Testcase 018:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03');\n--Testcase 019:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03');\n--Testcase 020:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (10, '08002F:010203');\n--Testcase 021:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (11, '08002F-010203');\n--Testcase 022:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203');\n--Testcase 023:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203');\n--Testcase 024:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (14, '08002F010203');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (15, decode('08002F010203', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (16, decode('08002b010203', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE macaddr;\n--Testcase 029:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03');\n--Testcase 030:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03');\n--Testcase 031:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (19, '08002b:010203');\n--Testcase 032:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (20, '08002b-010203');\n--Testcase 033:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203');\n--Testcase 034:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203');\n--Testcase 035:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (23, '08002b010203');\n--Testcase 036:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03');\n--Testcase 037:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03');\n--Testcase 038:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (26, '08002F:010203');\n--Testcase 039:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (27, '08002F-010203');\n--Testcase 040:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203');\n--Testcase 041:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203');\n--Testcase 042:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03');\n--Testcase 046:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03');\n--Testcase 047:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (33, '08002b:010203');\n--Testcase 048:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (34, '08002b-010203');\n--Testcase 049:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203');\n--Testcase 050:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203');\n--Testcase 051:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (37, '08002b010203');\n--Testcase 052:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03');\n--Testcase 053:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03');\n--Testcase 054:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (40, '08002F:010203');\n--Testcase 055:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (41, '08002F-010203');\n--Testcase 056:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203');\n--Testcase 057:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203');\n--Testcase 058:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03');\n--Testcase 062:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03');\n--Testcase 063:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (47, '08002b:010203');\n--Testcase 064:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (48, '08002b-010203');\n--Testcase 065:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203');\n--Testcase 066:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203');\n--Testcase 067:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (51, '08002b010203');\n--Testcase 068:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03');\n--Testcase 069:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03');\n--Testcase 070:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (54, '08002F:010203');\n--Testcase 071:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (55, '08002F-010203');\n--Testcase 072:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203');\n--Testcase 073:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203');\n--Testcase 074:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 091:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17; -- 9527026057731\n--Testcase 098:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (66, '00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (67, '00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (68, '00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" DESC;\n\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDRpk\" (col macaddr OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDRpk\" VALUES ('01-02-03-04-05-06');\n--Testcase 159:\nSELECT * FROM \"type_MACADDRpk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDRpk\";\n\n--no macaddr operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06' FROM \"type_MACADDR\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/macaddr8.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR8\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03:04:05');\n--Testcase 012:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03-04-05');\n--Testcase 013:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (3, '08002b01:02030405');\n--Testcase 014:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (4, '08002b01-02030405');\n--Testcase 015:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203.0405');\n--Testcase 016:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203-0405');\n--Testcase 017:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (7, '08002b0102030405');\n--Testcase 018:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03:04:05');\n--Testcase 019:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03-04-05');\n--Testcase 020:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (10, '08002F01:02030405');\n--Testcase 021:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (11, '08002F01-02030405');\n--Testcase 022:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203.0405');\n--Testcase 023:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203-0405');\n--Testcase 024:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (14, '08002F0102030405');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (15, decode('08002F0102030405', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (16, decode('08002b0102030405', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE macaddr8;\n--Testcase 029:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03:04:05');\n--Testcase 030:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03-04-05');\n--Testcase 031:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (19, '08002b01:02030405');\n--Testcase 032:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (20, '08002b01-02030405');\n--Testcase 033:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203.0405');\n--Testcase 034:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203-0405');\n--Testcase 035:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (23, '08002b0102030405');\n--Testcase 036:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03:04:05');\n--Testcase 037:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03-04-05');\n--Testcase 038:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (26, '08002F01:02030405');\n--Testcase 039:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (27, '08002F01-02030405');\n--Testcase 040:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203.0405');\n--Testcase 041:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203-0405');\n--Testcase 042:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03:04:05');\n--Testcase 046:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03-04-05');\n--Testcase 047:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (33, '08002b01:02030405');\n--Testcase 048:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (34, '08002b01-02030405');\n--Testcase 049:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203.0405');\n--Testcase 050:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203-0405');\n--Testcase 051:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (37, '08002b0102030405');\n--Testcase 052:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03:04:05');\n--Testcase 053:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03-04-05');\n--Testcase 054:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (40, '08002F01:02030405');\n--Testcase 055:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (41, '08002F01-02030405');\n--Testcase 056:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203.0405');\n--Testcase 057:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203-0405');\n--Testcase 058:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03:04:05');\n--Testcase 062:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03-04-05');\n--Testcase 063:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (47, '08002b01:02030405');\n--Testcase 064:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (48, '08002b01-02030405');\n--Testcase 065:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203.0405');\n--Testcase 066:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203-0405');\n--Testcase 067:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (51, '08002b0102030405');\n--Testcase 068:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03:04:05');\n--Testcase 069:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03-04-05');\n--Testcase 070:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (54, '08002F01:02030405');\n--Testcase 071:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (55, '08002F01-02030405');\n--Testcase 072:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203.0405');\n--Testcase 073:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203-0405');\n--Testcase 074:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR8+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 091:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 098:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04:04:05');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR8+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR8+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR8\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (66, '00:00:00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (67, '00:00:00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (68, '00:00:00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" DESC;\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDR8pk\" (col macaddr8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01-02-03-04-05-06-07-08');\n--Testcase 159:\nSELECT * FROM \"type_MACADDR8pk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDR8pk\";\n\n--no macaddr8 operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR8\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/numeric.sql",
    "content": "--\n-- NUMERIC\n--\n--Testcase 567:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 568:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 569:\nCREATE FOREIGN TABLE num_data (id int4 OPTIONS (key 'true'), val numeric(210,10)) SERVER sqlite_svr;\n--Testcase 570:\nCREATE FOREIGN TABLE num_exp_add (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 571:\nCREATE FOREIGN TABLE num_exp_sub (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 572:\nCREATE FOREIGN TABLE num_exp_div (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 573:\nCREATE FOREIGN TABLE num_exp_mul (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 574:\nCREATE FOREIGN TABLE num_exp_sqrt (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 575:\nCREATE FOREIGN TABLE num_exp_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 576:\nCREATE FOREIGN TABLE num_exp_log10 (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 577:\nCREATE FOREIGN TABLE num_exp_power_10_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n\n--Testcase 1556:\nCREATE FOREIGN TABLE num_variance (a numeric) SERVER sqlite_svr;\n\n--Testcase 578:\nCREATE FOREIGN TABLE num_result (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), result numeric(210,10)) SERVER sqlite_svr;\n\n\n-- ******************************\n-- * The following EXPECTED results are computed by bc(1)\n-- * with a scale of 200\n-- ******************************\n\nBEGIN TRANSACTION;\n--Testcase 1:\nINSERT INTO num_exp_add VALUES (0,0,'0');\n--Testcase 2:\nINSERT INTO num_exp_sub VALUES (0,0,'0');\n--Testcase 3:\nINSERT INTO num_exp_mul VALUES (0,0,'0');\n--Testcase 4:\nINSERT INTO num_exp_div VALUES (0,0,'NaN');\n--Testcase 5:\nINSERT INTO num_exp_add VALUES (0,1,'0');\n--Testcase 6:\nINSERT INTO num_exp_sub VALUES (0,1,'0');\n--Testcase 7:\nINSERT INTO num_exp_mul VALUES (0,1,'0');\n--Testcase 8:\nINSERT INTO num_exp_div VALUES (0,1,'NaN');\n--Testcase 9:\nINSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');\n--Testcase 10:\nINSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');\n--Testcase 11:\nINSERT INTO num_exp_mul VALUES (0,2,'0');\n--Testcase 12:\nINSERT INTO num_exp_div VALUES (0,2,'0');\n--Testcase 13:\nINSERT INTO num_exp_add VALUES (0,3,'4.31');\n--Testcase 14:\nINSERT INTO num_exp_sub VALUES (0,3,'-4.31');\n--Testcase 15:\nINSERT INTO num_exp_mul VALUES (0,3,'0');\n--Testcase 16:\nINSERT INTO num_exp_div VALUES (0,3,'0');\n--Testcase 17:\nINSERT INTO num_exp_add VALUES (0,4,'7799461.4119');\n--Testcase 18:\nINSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');\n--Testcase 19:\nINSERT INTO num_exp_mul VALUES (0,4,'0');\n--Testcase 20:\nINSERT INTO num_exp_div VALUES (0,4,'0');\n--Testcase 21:\nINSERT INTO num_exp_add VALUES (0,5,'16397.038491');\n--Testcase 22:\nINSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');\n--Testcase 23:\nINSERT INTO num_exp_mul VALUES (0,5,'0');\n--Testcase 24:\nINSERT INTO num_exp_div VALUES (0,5,'0');\n--Testcase 25:\nINSERT INTO num_exp_add VALUES (0,6,'93901.57763026');\n--Testcase 26:\nINSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');\n--Testcase 27:\nINSERT INTO num_exp_mul VALUES (0,6,'0');\n--Testcase 28:\nINSERT INTO num_exp_div VALUES (0,6,'0');\n--Testcase 29:\nINSERT INTO num_exp_add VALUES (0,7,'-83028485');\n--Testcase 30:\nINSERT INTO num_exp_sub VALUES (0,7,'83028485');\n--Testcase 31:\nINSERT INTO num_exp_mul VALUES (0,7,'0');\n--Testcase 32:\nINSERT INTO num_exp_div VALUES (0,7,'0');\n--Testcase 33:\nINSERT INTO num_exp_add VALUES (0,8,'74881');\n--Testcase 34:\nINSERT INTO num_exp_sub VALUES (0,8,'-74881');\n--Testcase 35:\nINSERT INTO num_exp_mul VALUES (0,8,'0');\n--Testcase 36:\nINSERT INTO num_exp_div VALUES (0,8,'0');\n--Testcase 37:\nINSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');\n--Testcase 38:\nINSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');\n--Testcase 39:\nINSERT INTO num_exp_mul VALUES (0,9,'0');\n--Testcase 40:\nINSERT INTO num_exp_div VALUES (0,9,'0');\n--Testcase 41:\nINSERT INTO num_exp_add VALUES (1,0,'0');\n--Testcase 42:\nINSERT INTO num_exp_sub VALUES (1,0,'0');\n--Testcase 43:\nINSERT INTO num_exp_mul VALUES (1,0,'0');\n--Testcase 44:\nINSERT INTO num_exp_div VALUES (1,0,'NaN');\n--Testcase 45:\nINSERT INTO num_exp_add VALUES (1,1,'0');\n--Testcase 46:\nINSERT INTO num_exp_sub VALUES (1,1,'0');\n--Testcase 47:\nINSERT INTO num_exp_mul VALUES (1,1,'0');\n--Testcase 48:\nINSERT INTO num_exp_div VALUES (1,1,'NaN');\n--Testcase 49:\nINSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');\n--Testcase 50:\nINSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');\n--Testcase 51:\nINSERT INTO num_exp_mul VALUES (1,2,'0');\n--Testcase 52:\nINSERT INTO num_exp_div VALUES (1,2,'0');\n--Testcase 53:\nINSERT INTO num_exp_add VALUES (1,3,'4.31');\n--Testcase 54:\nINSERT INTO num_exp_sub VALUES (1,3,'-4.31');\n--Testcase 55:\nINSERT INTO num_exp_mul VALUES (1,3,'0');\n--Testcase 56:\nINSERT INTO num_exp_div VALUES (1,3,'0');\n--Testcase 57:\nINSERT INTO num_exp_add VALUES (1,4,'7799461.4119');\n--Testcase 58:\nINSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');\n--Testcase 59:\nINSERT INTO num_exp_mul VALUES (1,4,'0');\n--Testcase 60:\nINSERT INTO num_exp_div VALUES (1,4,'0');\n--Testcase 61:\nINSERT INTO num_exp_add VALUES (1,5,'16397.038491');\n--Testcase 62:\nINSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');\n--Testcase 63:\nINSERT INTO num_exp_mul VALUES (1,5,'0');\n--Testcase 64:\nINSERT INTO num_exp_div VALUES (1,5,'0');\n--Testcase 65:\nINSERT INTO num_exp_add VALUES (1,6,'93901.57763026');\n--Testcase 66:\nINSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');\n--Testcase 67:\nINSERT INTO num_exp_mul VALUES (1,6,'0');\n--Testcase 68:\nINSERT INTO num_exp_div VALUES (1,6,'0');\n--Testcase 69:\nINSERT INTO num_exp_add VALUES (1,7,'-83028485');\n--Testcase 70:\nINSERT INTO num_exp_sub VALUES (1,7,'83028485');\n--Testcase 71:\nINSERT INTO num_exp_mul VALUES (1,7,'0');\n--Testcase 72:\nINSERT INTO num_exp_div VALUES (1,7,'0');\n--Testcase 73:\nINSERT INTO num_exp_add VALUES (1,8,'74881');\n--Testcase 74:\nINSERT INTO num_exp_sub VALUES (1,8,'-74881');\n--Testcase 75:\nINSERT INTO num_exp_mul VALUES (1,8,'0');\n--Testcase 76:\nINSERT INTO num_exp_div VALUES (1,8,'0');\n--Testcase 77:\nINSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');\n--Testcase 78:\nINSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');\n--Testcase 79:\nINSERT INTO num_exp_mul VALUES (1,9,'0');\n--Testcase 80:\nINSERT INTO num_exp_div VALUES (1,9,'0');\n--Testcase 81:\nINSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');\n--Testcase 82:\nINSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');\n--Testcase 83:\nINSERT INTO num_exp_mul VALUES (2,0,'0');\n--Testcase 84:\nINSERT INTO num_exp_div VALUES (2,0,'NaN');\n--Testcase 85:\nINSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');\n--Testcase 86:\nINSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');\n--Testcase 87:\nINSERT INTO num_exp_mul VALUES (2,1,'0');\n--Testcase 88:\nINSERT INTO num_exp_div VALUES (2,1,'NaN');\n--Testcase 89:\nINSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');\n--Testcase 90:\nINSERT INTO num_exp_sub VALUES (2,2,'0');\n--Testcase 91:\nINSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');\n--Testcase 92:\nINSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');\n--Testcase 93:\nINSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');\n--Testcase 94:\nINSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');\n--Testcase 95:\nINSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');\n--Testcase 96:\nINSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');\n--Testcase 97:\nINSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');\n--Testcase 98:\nINSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');\n--Testcase 99:\nINSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');\n--Testcase 100:\nINSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');\n--Testcase 101:\nINSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');\n--Testcase 102:\nINSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');\n--Testcase 103:\nINSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');\n--Testcase 104:\nINSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');\n--Testcase 105:\nINSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');\n--Testcase 106:\nINSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');\n--Testcase 107:\nINSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');\n--Testcase 108:\nINSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');\n--Testcase 109:\nINSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');\n--Testcase 110:\nINSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');\n--Testcase 111:\nINSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');\n--Testcase 112:\nINSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');\n--Testcase 113:\nINSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');\n--Testcase 114:\nINSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');\n--Testcase 115:\nINSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');\n--Testcase 116:\nINSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');\n--Testcase 117:\nINSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');\n--Testcase 118:\nINSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');\n--Testcase 119:\nINSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');\n--Testcase 120:\nINSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');\n--Testcase 121:\nINSERT INTO num_exp_add VALUES (3,0,'4.31');\n--Testcase 122:\nINSERT INTO num_exp_sub VALUES (3,0,'4.31');\n--Testcase 123:\nINSERT INTO num_exp_mul VALUES (3,0,'0');\n--Testcase 124:\nINSERT INTO num_exp_div VALUES (3,0,'NaN');\n--Testcase 125:\nINSERT INTO num_exp_add VALUES (3,1,'4.31');\n--Testcase 126:\nINSERT INTO num_exp_sub VALUES (3,1,'4.31');\n--Testcase 127:\nINSERT INTO num_exp_mul VALUES (3,1,'0');\n--Testcase 128:\nINSERT INTO num_exp_div VALUES (3,1,'NaN');\n--Testcase 129:\nINSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');\n--Testcase 130:\nINSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');\n--Testcase 131:\nINSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');\n--Testcase 132:\nINSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');\n--Testcase 133:\nINSERT INTO num_exp_add VALUES (3,3,'8.62');\n--Testcase 134:\nINSERT INTO num_exp_sub VALUES (3,3,'0');\n--Testcase 135:\nINSERT INTO num_exp_mul VALUES (3,3,'18.5761');\n--Testcase 136:\nINSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');\n--Testcase 137:\nINSERT INTO num_exp_add VALUES (3,4,'7799465.7219');\n--Testcase 138:\nINSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');\n--Testcase 139:\nINSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');\n--Testcase 140:\nINSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');\n--Testcase 141:\nINSERT INTO num_exp_add VALUES (3,5,'16401.348491');\n--Testcase 142:\nINSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');\n--Testcase 143:\nINSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');\n--Testcase 144:\nINSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');\n--Testcase 145:\nINSERT INTO num_exp_add VALUES (3,6,'93905.88763026');\n--Testcase 146:\nINSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');\n--Testcase 147:\nINSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');\n--Testcase 148:\nINSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');\n--Testcase 149:\nINSERT INTO num_exp_add VALUES (3,7,'-83028480.69');\n--Testcase 150:\nINSERT INTO num_exp_sub VALUES (3,7,'83028489.31');\n--Testcase 151:\nINSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');\n--Testcase 152:\nINSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');\n--Testcase 153:\nINSERT INTO num_exp_add VALUES (3,8,'74885.31');\n--Testcase 154:\nINSERT INTO num_exp_sub VALUES (3,8,'-74876.69');\n--Testcase 155:\nINSERT INTO num_exp_mul VALUES (3,8,'322737.11');\n--Testcase 156:\nINSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');\n--Testcase 157:\nINSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');\n--Testcase 158:\nINSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');\n--Testcase 159:\nINSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');\n--Testcase 160:\nINSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');\n--Testcase 161:\nINSERT INTO num_exp_add VALUES (4,0,'7799461.4119');\n--Testcase 162:\nINSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');\n--Testcase 163:\nINSERT INTO num_exp_mul VALUES (4,0,'0');\n--Testcase 164:\nINSERT INTO num_exp_div VALUES (4,0,'NaN');\n--Testcase 165:\nINSERT INTO num_exp_add VALUES (4,1,'7799461.4119');\n--Testcase 166:\nINSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');\n--Testcase 167:\nINSERT INTO num_exp_mul VALUES (4,1,'0');\n--Testcase 168:\nINSERT INTO num_exp_div VALUES (4,1,'NaN');\n--Testcase 169:\nINSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');\n--Testcase 170:\nINSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');\n--Testcase 171:\nINSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');\n--Testcase 172:\nINSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');\n--Testcase 173:\nINSERT INTO num_exp_add VALUES (4,3,'7799465.7219');\n--Testcase 174:\nINSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');\n--Testcase 175:\nINSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');\n--Testcase 176:\nINSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');\n--Testcase 177:\nINSERT INTO num_exp_add VALUES (4,4,'15598922.8238');\n--Testcase 178:\nINSERT INTO num_exp_sub VALUES (4,4,'0');\n--Testcase 179:\nINSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');\n--Testcase 180:\nINSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');\n--Testcase 181:\nINSERT INTO num_exp_add VALUES (4,5,'7815858.450391');\n--Testcase 182:\nINSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');\n--Testcase 183:\nINSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');\n--Testcase 184:\nINSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');\n--Testcase 185:\nINSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');\n--Testcase 186:\nINSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');\n--Testcase 187:\nINSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');\n--Testcase 188:\nINSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');\n--Testcase 189:\nINSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');\n--Testcase 190:\nINSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');\n--Testcase 191:\nINSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');\n--Testcase 192:\nINSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');\n--Testcase 193:\nINSERT INTO num_exp_add VALUES (4,8,'7874342.4119');\n--Testcase 194:\nINSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');\n--Testcase 195:\nINSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');\n--Testcase 196:\nINSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');\n--Testcase 197:\nINSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');\n--Testcase 198:\nINSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');\n--Testcase 199:\nINSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');\n--Testcase 200:\nINSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');\n--Testcase 201:\nINSERT INTO num_exp_add VALUES (5,0,'16397.038491');\n--Testcase 202:\nINSERT INTO num_exp_sub VALUES (5,0,'16397.038491');\n--Testcase 203:\nINSERT INTO num_exp_mul VALUES (5,0,'0');\n--Testcase 204:\nINSERT INTO num_exp_div VALUES (5,0,'NaN');\n--Testcase 205:\nINSERT INTO num_exp_add VALUES (5,1,'16397.038491');\n--Testcase 206:\nINSERT INTO num_exp_sub VALUES (5,1,'16397.038491');\n--Testcase 207:\nINSERT INTO num_exp_mul VALUES (5,1,'0');\n--Testcase 208:\nINSERT INTO num_exp_div VALUES (5,1,'NaN');\n--Testcase 209:\nINSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');\n--Testcase 210:\nINSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');\n--Testcase 211:\nINSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');\n--Testcase 212:\nINSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');\n--Testcase 213:\nINSERT INTO num_exp_add VALUES (5,3,'16401.348491');\n--Testcase 214:\nINSERT INTO num_exp_sub VALUES (5,3,'16392.728491');\n--Testcase 215:\nINSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');\n--Testcase 216:\nINSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');\n--Testcase 217:\nINSERT INTO num_exp_add VALUES (5,4,'7815858.450391');\n--Testcase 218:\nINSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');\n--Testcase 219:\nINSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');\n--Testcase 220:\nINSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');\n--Testcase 221:\nINSERT INTO num_exp_add VALUES (5,5,'32794.076982');\n--Testcase 222:\nINSERT INTO num_exp_sub VALUES (5,5,'0');\n--Testcase 223:\nINSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');\n--Testcase 224:\nINSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');\n--Testcase 225:\nINSERT INTO num_exp_add VALUES (5,6,'110298.61612126');\n--Testcase 226:\nINSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');\n--Testcase 227:\nINSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');\n--Testcase 228:\nINSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');\n--Testcase 229:\nINSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');\n--Testcase 230:\nINSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');\n--Testcase 231:\nINSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');\n--Testcase 232:\nINSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');\n--Testcase 233:\nINSERT INTO num_exp_add VALUES (5,8,'91278.038491');\n--Testcase 234:\nINSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');\n--Testcase 235:\nINSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');\n--Testcase 236:\nINSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');\n--Testcase 237:\nINSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');\n--Testcase 238:\nINSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');\n--Testcase 239:\nINSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');\n--Testcase 240:\nINSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');\n--Testcase 241:\nINSERT INTO num_exp_add VALUES (6,0,'93901.57763026');\n--Testcase 242:\nINSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');\n--Testcase 243:\nINSERT INTO num_exp_mul VALUES (6,0,'0');\n--Testcase 244:\nINSERT INTO num_exp_div VALUES (6,0,'NaN');\n--Testcase 245:\nINSERT INTO num_exp_add VALUES (6,1,'93901.57763026');\n--Testcase 246:\nINSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');\n--Testcase 247:\nINSERT INTO num_exp_mul VALUES (6,1,'0');\n--Testcase 248:\nINSERT INTO num_exp_div VALUES (6,1,'NaN');\n--Testcase 249:\nINSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');\n--Testcase 250:\nINSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');\n--Testcase 251:\nINSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');\n--Testcase 252:\nINSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');\n--Testcase 253:\nINSERT INTO num_exp_add VALUES (6,3,'93905.88763026');\n--Testcase 254:\nINSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');\n--Testcase 255:\nINSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');\n--Testcase 256:\nINSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');\n--Testcase 257:\nINSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');\n--Testcase 258:\nINSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');\n--Testcase 259:\nINSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');\n--Testcase 260:\nINSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');\n--Testcase 261:\nINSERT INTO num_exp_add VALUES (6,5,'110298.61612126');\n--Testcase 262:\nINSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');\n--Testcase 263:\nINSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');\n--Testcase 264:\nINSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');\n--Testcase 265:\nINSERT INTO num_exp_add VALUES (6,6,'187803.15526052');\n--Testcase 266:\nINSERT INTO num_exp_sub VALUES (6,6,'0');\n--Testcase 267:\nINSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');\n--Testcase 268:\nINSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');\n--Testcase 269:\nINSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');\n--Testcase 270:\nINSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');\n--Testcase 271:\nINSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');\n--Testcase 272:\nINSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');\n--Testcase 273:\nINSERT INTO num_exp_add VALUES (6,8,'168782.57763026');\n--Testcase 274:\nINSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');\n--Testcase 275:\nINSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');\n--Testcase 276:\nINSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');\n--Testcase 277:\nINSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');\n--Testcase 278:\nINSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');\n--Testcase 279:\nINSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');\n--Testcase 280:\nINSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');\n--Testcase 281:\nINSERT INTO num_exp_add VALUES (7,0,'-83028485');\n--Testcase 282:\nINSERT INTO num_exp_sub VALUES (7,0,'-83028485');\n--Testcase 283:\nINSERT INTO num_exp_mul VALUES (7,0,'0');\n--Testcase 284:\nINSERT INTO num_exp_div VALUES (7,0,'NaN');\n--Testcase 285:\nINSERT INTO num_exp_add VALUES (7,1,'-83028485');\n--Testcase 286:\nINSERT INTO num_exp_sub VALUES (7,1,'-83028485');\n--Testcase 287:\nINSERT INTO num_exp_mul VALUES (7,1,'0');\n--Testcase 288:\nINSERT INTO num_exp_div VALUES (7,1,'NaN');\n--Testcase 289:\nINSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');\n--Testcase 290:\nINSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');\n--Testcase 291:\nINSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');\n--Testcase 292:\nINSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');\n--Testcase 293:\nINSERT INTO num_exp_add VALUES (7,3,'-83028480.69');\n--Testcase 294:\nINSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');\n--Testcase 295:\nINSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');\n--Testcase 296:\nINSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');\n--Testcase 297:\nINSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');\n--Testcase 298:\nINSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');\n--Testcase 299:\nINSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');\n--Testcase 300:\nINSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');\n--Testcase 301:\nINSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');\n--Testcase 302:\nINSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');\n--Testcase 303:\nINSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');\n--Testcase 304:\nINSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');\n--Testcase 305:\nINSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');\n--Testcase 306:\nINSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');\n--Testcase 307:\nINSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');\n--Testcase 308:\nINSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');\n--Testcase 309:\nINSERT INTO num_exp_add VALUES (7,7,'-166056970');\n--Testcase 310:\nINSERT INTO num_exp_sub VALUES (7,7,'0');\n--Testcase 311:\nINSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');\n--Testcase 312:\nINSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');\n--Testcase 313:\nINSERT INTO num_exp_add VALUES (7,8,'-82953604');\n--Testcase 314:\nINSERT INTO num_exp_sub VALUES (7,8,'-83103366');\n--Testcase 315:\nINSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');\n--Testcase 316:\nINSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');\n--Testcase 317:\nINSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');\n--Testcase 318:\nINSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');\n--Testcase 319:\nINSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');\n--Testcase 320:\nINSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');\n--Testcase 321:\nINSERT INTO num_exp_add VALUES (8,0,'74881');\n--Testcase 322:\nINSERT INTO num_exp_sub VALUES (8,0,'74881');\n--Testcase 323:\nINSERT INTO num_exp_mul VALUES (8,0,'0');\n--Testcase 324:\nINSERT INTO num_exp_div VALUES (8,0,'NaN');\n--Testcase 325:\nINSERT INTO num_exp_add VALUES (8,1,'74881');\n--Testcase 326:\nINSERT INTO num_exp_sub VALUES (8,1,'74881');\n--Testcase 327:\nINSERT INTO num_exp_mul VALUES (8,1,'0');\n--Testcase 328:\nINSERT INTO num_exp_div VALUES (8,1,'NaN');\n--Testcase 329:\nINSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');\n--Testcase 330:\nINSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');\n--Testcase 331:\nINSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');\n--Testcase 332:\nINSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');\n--Testcase 333:\nINSERT INTO num_exp_add VALUES (8,3,'74885.31');\n--Testcase 334:\nINSERT INTO num_exp_sub VALUES (8,3,'74876.69');\n--Testcase 335:\nINSERT INTO num_exp_mul VALUES (8,3,'322737.11');\n--Testcase 336:\nINSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');\n--Testcase 337:\nINSERT INTO num_exp_add VALUES (8,4,'7874342.4119');\n--Testcase 338:\nINSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');\n--Testcase 339:\nINSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');\n--Testcase 340:\nINSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');\n--Testcase 341:\nINSERT INTO num_exp_add VALUES (8,5,'91278.038491');\n--Testcase 342:\nINSERT INTO num_exp_sub VALUES (8,5,'58483.961509');\n--Testcase 343:\nINSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');\n--Testcase 344:\nINSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');\n--Testcase 345:\nINSERT INTO num_exp_add VALUES (8,6,'168782.57763026');\n--Testcase 346:\nINSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');\n--Testcase 347:\nINSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');\n--Testcase 348:\nINSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');\n--Testcase 349:\nINSERT INTO num_exp_add VALUES (8,7,'-82953604');\n--Testcase 350:\nINSERT INTO num_exp_sub VALUES (8,7,'83103366');\n--Testcase 351:\nINSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');\n--Testcase 352:\nINSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');\n--Testcase 353:\nINSERT INTO num_exp_add VALUES (8,8,'149762');\n--Testcase 354:\nINSERT INTO num_exp_sub VALUES (8,8,'0');\n--Testcase 355:\nINSERT INTO num_exp_mul VALUES (8,8,'5607164161');\n--Testcase 356:\nINSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');\n--Testcase 357:\nINSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');\n--Testcase 358:\nINSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');\n--Testcase 359:\nINSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');\n--Testcase 360:\nINSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');\n--Testcase 361:\nINSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');\n--Testcase 362:\nINSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');\n--Testcase 363:\nINSERT INTO num_exp_mul VALUES (9,0,'0');\n--Testcase 364:\nINSERT INTO num_exp_div VALUES (9,0,'NaN');\n--Testcase 365:\nINSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');\n--Testcase 366:\nINSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');\n--Testcase 367:\nINSERT INTO num_exp_mul VALUES (9,1,'0');\n--Testcase 368:\nINSERT INTO num_exp_div VALUES (9,1,'NaN');\n--Testcase 369:\nINSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');\n--Testcase 370:\nINSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');\n--Testcase 371:\nINSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');\n--Testcase 372:\nINSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');\n--Testcase 373:\nINSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');\n--Testcase 374:\nINSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');\n--Testcase 375:\nINSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');\n--Testcase 376:\nINSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');\n--Testcase 377:\nINSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');\n--Testcase 378:\nINSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');\n--Testcase 379:\nINSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');\n--Testcase 380:\nINSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');\n--Testcase 381:\nINSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');\n--Testcase 382:\nINSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');\n--Testcase 383:\nINSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');\n--Testcase 384:\nINSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');\n--Testcase 385:\nINSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');\n--Testcase 386:\nINSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');\n--Testcase 387:\nINSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');\n--Testcase 388:\nINSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');\n--Testcase 389:\nINSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');\n--Testcase 390:\nINSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');\n--Testcase 391:\nINSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');\n--Testcase 392:\nINSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');\n--Testcase 393:\nINSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');\n--Testcase 394:\nINSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');\n--Testcase 395:\nINSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');\n--Testcase 396:\nINSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');\n--Testcase 397:\nINSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');\n--Testcase 398:\nINSERT INTO num_exp_sub VALUES (9,9,'0');\n--Testcase 399:\nINSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');\n--Testcase 400:\nINSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 401:\nINSERT INTO num_exp_sqrt VALUES (0,'0');\n--Testcase 402:\nINSERT INTO num_exp_sqrt VALUES (1,'0');\n--Testcase 403:\nINSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');\n--Testcase 404:\nINSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');\n--Testcase 405:\nINSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');\n--Testcase 406:\nINSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');\n--Testcase 407:\nINSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');\n--Testcase 408:\nINSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');\n--Testcase 409:\nINSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');\n--Testcase 410:\nINSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 411:\nINSERT INTO num_exp_ln VALUES (0,'NaN');\n--Testcase 412:\nINSERT INTO num_exp_ln VALUES (1,'NaN');\n--Testcase 413:\nINSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');\n--Testcase 414:\nINSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');\n--Testcase 415:\nINSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');\n--Testcase 416:\nINSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');\n--Testcase 417:\nINSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');\n--Testcase 418:\nINSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');\n--Testcase 419:\nINSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');\n--Testcase 420:\nINSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 421:\nINSERT INTO num_exp_log10 VALUES (0,'NaN');\n--Testcase 422:\nINSERT INTO num_exp_log10 VALUES (1,'NaN');\n--Testcase 423:\nINSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');\n--Testcase 424:\nINSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');\n--Testcase 425:\nINSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');\n--Testcase 426:\nINSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');\n--Testcase 427:\nINSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');\n--Testcase 428:\nINSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');\n--Testcase 429:\nINSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');\n--Testcase 430:\nINSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 431:\nINSERT INTO num_exp_power_10_ln VALUES (0,'NaN');\n--Testcase 432:\nINSERT INTO num_exp_power_10_ln VALUES (1,'NaN');\n--Testcase 433:\nINSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');\n--Testcase 434:\nINSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');\n--Testcase 435:\nINSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');\n--Testcase 436:\nINSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');\n--Testcase 437:\nINSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');\n--Testcase 438:\nINSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');\n--Testcase 439:\nINSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');\n--Testcase 440:\nINSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 441:\nINSERT INTO num_data VALUES (0, '0');\n--Testcase 442:\nINSERT INTO num_data VALUES (1, '0');\n--Testcase 443:\nINSERT INTO num_data VALUES (2, '-34338492.215397047');\n--Testcase 444:\nINSERT INTO num_data VALUES (3, '4.31');\n--Testcase 445:\nINSERT INTO num_data VALUES (4, '7799461.4119');\n--Testcase 446:\nINSERT INTO num_data VALUES (5, '16397.038491');\n--Testcase 447:\nINSERT INTO num_data VALUES (6, '93901.57763026');\n--Testcase 448:\nINSERT INTO num_data VALUES (7, '-83028485');\n--Testcase 449:\nINSERT INTO num_data VALUES (8, '74881');\n--Testcase 450:\nINSERT INTO num_data VALUES (9, '-24926804.045047420');\n\nCOMMIT TRANSACTION;\n\n-- ******************************\n-- * Create indices for faster checks\n-- ******************************\n-- Skip these setting, creating foreign table with primary key already covered.\n--CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);\n--CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);\n--CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);\n--CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);\n--CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);\n--CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);\n--VACUUM ANALYZE num_exp_add;\n--VACUUM ANALYZE num_exp_sub;\n--VACUUM ANALYZE num_exp_div;\n--VACUUM ANALYZE num_exp_mul;\n--VACUUM ANALYZE num_exp_sqrt;\n--VACUUM ANALYZE num_exp_ln;\n--VACUUM ANALYZE num_exp_log10;\n--VACUUM ANALYZE num_exp_power_10_ln;\n\n-- ******************************\n-- * Now check the behaviour of the NUMERIC type\n-- ******************************\n\n-- ******************************\n-- * Addition check\n-- ******************************\n\n--Testcase 451:\nDELETE FROM num_result;\n--Testcase 452:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 453:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 454:\nDELETE FROM num_result;\n--Testcase 455:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)\n    FROM num_data t1, num_data t2;\n--Testcase 456:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 10);\n\n-- ******************************\n-- * Subtraction check\n-- ******************************\n--Testcase 457:\nDELETE FROM num_result;\n--Testcase 458:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 459:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 460:\nDELETE FROM num_result;\n--Testcase 461:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)\n    FROM num_data t1, num_data t2;\n--Testcase 462:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 40);\n\n-- ******************************\n-- * Multiply check\n-- ******************************\n--Testcase 463:\nDELETE FROM num_result;\n--Testcase 464:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 465:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 466:\nDELETE FROM num_result;\n--Testcase 467:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)\n    FROM num_data t1, num_data t2;\n--Testcase 468:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 30);\n\n-- ******************************\n-- * Division check\n-- ******************************\n--Testcase 469:\nDELETE FROM num_result;\n--Testcase 470:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 471:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 472:\nDELETE FROM num_result;\n--Testcase 473:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 474:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 80);\n\n-- ******************************\n-- * Square root check\n-- ******************************\n--Testcase 475:\nDELETE FROM num_result;\n--Testcase 476:\nINSERT INTO num_result SELECT id, 0, SQRT(ABS(val))\n    FROM num_data;\n--Testcase 477:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_sqrt t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Natural logarithm check\n-- ******************************\n--Testcase 478:\nDELETE FROM num_result;\n--Testcase 479:\nINSERT INTO num_result SELECT id, 0, LN(ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 480:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Logarithm base 10 check\n-- ******************************\n--Testcase 481:\nDELETE FROM num_result;\n--Testcase 482:\nINSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 483:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_log10 t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * POWER(10, LN(value)) check\n-- ******************************\n--Testcase 484:\nDELETE FROM num_result;\n--Testcase 485:\nINSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 486:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_power_10_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Check behavior with Inf and NaN inputs.  It's easiest to handle these\n-- * separately from the num_data framework used above, because some input\n-- * combinations will throw errors.\n-- ******************************\n--Testcase 1451:\nCREATE FOREIGN TABLE v (id int4 OPTIONS (key 'true'), x numeric, val float8) SERVER sqlite_svr;\n\nBEGIN;\n--Testcase 1452:\nDELETE FROM v;\n--Testcase 1453:\nINSERT INTO v(x) VALUES ('0'::float8),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan');\n--Testcase 1454:\nSELECT x1, x2,\n  x1::numeric + x2::numeric AS sum,\n  x1::numeric - x2::numeric AS diff,\n  x1::numeric * x2::numeric AS prod\nFROM v AS v1(id, x1), v AS v2(id, x2);\n\n--Testcase 1455:\nSELECT x1, x2,\n  x1::numeric / x2::numeric AS quot,\n  x1::numeric % x2::numeric AS mod,\n  div(x1::numeric, x2::numeric) AS div\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x2 != 0;\nROLLBACK;\n\nBEGIN;\n--Testcase 1286:\nDELETE FROM v;\n--Testcase 1287:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1288:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1289:\nDELETE FROM v;\n--Testcase 1290:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1291:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1292:\nDELETE FROM v;\n--Testcase 1293:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1294:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1295:\nDELETE FROM v;\n--Testcase 1296:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1297:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1298:\nDELETE FROM v;\n--Testcase 1299:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1300:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1301:\nDELETE FROM v;\n--Testcase 1302:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1303:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1304:\nDELETE FROM v;\n--Testcase 1305:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1306:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1307:\nDELETE FROM v;\n--Testcase 1308:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1309:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1310:\nDELETE FROM v;\n--Testcase 1311:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1312:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1313:\nDELETE FROM v;\n--Testcase 1314:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1315:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1316:\nDELETE FROM v;\n--Testcase 1317:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1318:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1319:\nDELETE FROM v;\n--Testcase 1320:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1321:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1456:\nDELETE FROM v;\n--Testcase 1457:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1458:\nSELECT x, -x as minusx, abs(x::numeric), floor(x::numeric), ceil(x::numeric), sign(x::numeric), numeric_inc(x::numeric) as inc\nFROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1459:\nDELETE FROM v;\n--Testcase 1460:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1461:\nSELECT x, round(x::numeric), round(x::numeric,1) as round1, trunc(x::numeric), trunc(x::numeric,1) as trunc1\nFROM v;\nROLLBACK;\n\n-- the large values fall into the numeric abbreviation code's maximal classes\nBEGIN;\n--Testcase 1462:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),\n                        ('inf'),('-inf'),('nan'),\n                        ('inf'),('-inf'),('nan');\n--Testcase 1463:\nSELECT substring(x::text, 1, 32) FROM v ORDER BY x;\nROLLBACK;\n\n--Testcase 1464:\nDELETE FROM v;\n--Testcase 1465:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('4.2'),('inf'),('nan');\n--Testcase 1466:\nSELECT x, sqrt(x) FROM v;\n\n--Testcase 1333:\nDELETE FROM v;\n--Testcase 1334:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1335:\nSELECT sqrt(x::numeric) FROM v;\n--Testcase 1336:\nDELETE FROM v;\n--Testcase 1337:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1338:\nSELECT sqrt(x::numeric) FROM v;\n\n--Testcase 1467:\nDELETE FROM v;\n--Testcase 1468:\nINSERT INTO v(x) VALUES ('1'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1469:\nSELECT x,\n  log(x::numeric),\n  log10(x::numeric),\n  ln(x::numeric)\nFROM v;\n\n--Testcase 1342:\nDELETE FROM v;\n--Testcase 1343:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1344:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1345:\nDELETE FROM v;\n--Testcase 1346:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1347:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1348:\nDELETE FROM v;\n--Testcase 1349:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1350:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1470:\nDELETE FROM v;\n--Testcase 1471:\nINSERT INTO v(x) VALUES ('2'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1472:\nSELECT x1, x2,\n  log(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2);\n--Testcase 1354:\nDELETE FROM v;\n--Testcase 1355:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1356:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1357:\nDELETE FROM v;\n--Testcase 1358:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1359:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1360:\nDELETE FROM v;\n--Testcase 1361:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1362:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1363:\nDELETE FROM v;\n--Testcase 1364:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1365:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1366:\nDELETE FROM v;\n--Testcase 1367:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1368:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1369:\nDELETE FROM v;\n--Testcase 1370:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1371:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1372:\nDELETE FROM v;\n--Testcase 1373:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1374:\nSELECT log(x::numeric, 'inf') FROM v;\n\n--Testcase 1473:\nDELETE FROM v;\n--Testcase 1474:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('2'),('4.2'),('inf'),('nan');\n--Testcase 1475:\nSELECT x1, x2,\n  power(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x1 != 0 OR x2 >= 0;\n\n--Testcase 1378:\nDELETE FROM v;\n--Testcase 1379:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1380:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1381:\nDELETE FROM v;\n--Testcase 1382:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1383:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1384:\nDELETE FROM v;\n--Testcase 1385:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1386:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1387:\nDELETE FROM v;\n--Testcase 1388:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1389:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1390:\nDELETE FROM v;\n--Testcase 1391:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1392:\nSELECT power(x::numeric, '3.3') FROM v;\n--Testcase 1393:\nDELETE FROM v;\n--Testcase 1394:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1395:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1396:\nDELETE FROM v;\n--Testcase 1397:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1398:\nSELECT power(x::numeric, '-1.5') FROM v;\n--Testcase 1399:\nDELETE FROM v;\n--Testcase 1400:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1401:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1402:\nDELETE FROM v;\n--Testcase 1403:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1404:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1405:\nDELETE FROM v;\n--Testcase 1406:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1407:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1408:\nDELETE FROM v;\n--Testcase 1409:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1410:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1411:\nDELETE FROM v;\n--Testcase 1412:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1413:\nSELECT power(x::numeric, '2') FROM v;\n--Testcase 1414:\nDELETE FROM v;\n--Testcase 1415:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1416:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1417:\nDELETE FROM v;\n--Testcase 1418:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1419:\nSELECT power(x::numeric, '4.5') FROM v;\n--Testcase 1420:\nDELETE FROM v;\n--Testcase 1421:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1422:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1423:\nDELETE FROM v;\n--Testcase 1424:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1425:\nSELECT power(x::numeric, '-3') FROM v;\n--Testcase 1426:\nDELETE FROM v;\n--Testcase 1427:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1428:\nSELECT power(x::numeric, '0') FROM v;\n--Testcase 1429:\nDELETE FROM v;\n--Testcase 1430:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1431:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1432:\nDELETE FROM v;\n--Testcase 1433:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1434:\nSELECT power(x::numeric, '-inf') FROM v;\n\n-- ******************************\n-- * miscellaneous checks for things that have been broken in the past...\n-- ******************************\n-- numeric AVG used to fail on some platforms\n--Testcase 487:\nSELECT AVG(val) FROM num_data;\n--Testcase 1137:\nSELECT MAX(val) FROM num_data;\n--Testcase 1138:\nSELECT MIN(val) FROM num_data;\n--Testcase 488:\nSELECT STDDEV(val) FROM num_data;\n--Testcase 489:\nSELECT VARIANCE(val) FROM num_data;\n\n-- Check for appropriate rounding and overflow\n--Testcase 579:\nCREATE FOREIGN TABLE fract_only (id int, val numeric(4,4)) SERVER sqlite_svr;\n--Testcase 490:\nINSERT INTO fract_only VALUES (1, '0.0');\n--Testcase 491:\nINSERT INTO fract_only VALUES (2, '0.1');\n--Testcase 492:\nINSERT INTO fract_only VALUES (3, '1.0');\t-- should fail\n--Testcase 493:\nINSERT INTO fract_only VALUES (4, '-0.9999');\n--Testcase 494:\nINSERT INTO fract_only VALUES (5, '0.99994');\n--Testcase 495:\nINSERT INTO fract_only VALUES (6, '0.99995');  -- should fail\n--Testcase 496:\nINSERT INTO fract_only VALUES (7, '0.00001');\n--Testcase 497:\nINSERT INTO fract_only VALUES (8, '0.00017');\n--Testcase 1139:\nINSERT INTO fract_only VALUES (9, 'NaN');\n--Testcase 1140:\nINSERT INTO fract_only VALUES (10, 'Inf');\t-- should fail\n--Testcase 1141:\nINSERT INTO fract_only VALUES (11, '-Inf');\t-- should fail\n--Testcase 498:\nSELECT * FROM fract_only;\n--Testcase 580:\nDROP FOREIGN TABLE fract_only;\n\n-- Check conversion to integers\n-- SQLite promises to preserve the first 15 significant decimal digits of the floating point value.\n-- However, it makes no guarantees about the accuracy of computations on floating point values, as no such guarantees are possible.\n-- A floating-point value as written in an SQL statement may not be the same as the value represented internally.\n-- Actual result is different from expected result.\n--Testcase 1485:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1486:\nDELETE FROM num_tmp;\n--Testcase 1487:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.5);\n--Testcase 1488:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1489:\nDELETE FROM num_tmp;\n--Testcase 1490:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.4);\n--Testcase 1491:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1492:\nDELETE FROM num_tmp;\n--Testcase 1493:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.4);\n--Testcase 1494:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1495:\nDELETE FROM num_tmp;\n--Testcase 1496:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.5);\n--Testcase 1497:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1498:\nDELETE FROM num_tmp;\n--Testcase 1499:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.5);\n--Testcase 1500:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1501:\nDELETE FROM num_tmp;\n--Testcase 1502:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.4);\n--Testcase 1503:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1504:\nDELETE FROM num_tmp;\n--Testcase 1505:\nINSERT INTO num_tmp(n1) VALUES (2147483647.4);\n--Testcase 1506:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1507:\nDELETE FROM num_tmp;\n--Testcase 1508:\nINSERT INTO num_tmp(n1) VALUES (2147483647.5);\n--Testcase 1509:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1510:\nDELETE FROM num_tmp;\n--Testcase 1511:\nINSERT INTO num_tmp(n1) VALUES (-32768.5);\n--Testcase 1512:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1513:\nDELETE FROM num_tmp;\n--Testcase 1514:\nINSERT INTO num_tmp(n1) VALUES (-32768.4);\n--Testcase 1515:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1516:\nDELETE FROM num_tmp;\n--Testcase 1517:\nINSERT INTO num_tmp(n1) VALUES (32767.4);\n--Testcase 1518:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1519:\nDELETE FROM num_tmp;\n--Testcase 1520:\nINSERT INTO num_tmp(n1) VALUES (32767.5);\n--Testcase 1521:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1555:\nDELETE FROM num_tmp;\n--Testcase 1555:\nDROP FOREIGN TABLE num_tmp;\n\n-- Check inf/nan conversion behavior\n--Testcase 581:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 582:\nDELETE FROM FLOAT8_TMP;\n--Testcase 583:\nINSERT INTO FLOAT8_TMP VALUES ('NaN');\n--Testcase 584:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 585:\nDELETE FROM FLOAT8_TMP;\n--Testcase 586:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity');\n--Testcase 587:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 588:\nDELETE FROM FLOAT8_TMP;\n--Testcase 589:\nINSERT INTO FLOAT8_TMP VALUES ('-Infinity');\n--Testcase 590:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 1142:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, f2 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 1143:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1144:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1145:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1146:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1147:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1148:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1149:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1150:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1151:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 591:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 592:\nDELETE FROM FLOAT4_TMP;\n--Testcase 593:\nINSERT INTO FLOAT4_TMP VALUES ('NaN');\n--Testcase 594:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 595:\nDELETE FROM FLOAT4_TMP;\n--Testcase 596:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity');\n--Testcase 597:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 598:\nDELETE FROM FLOAT4_TMP;\n--Testcase 599:\nINSERT INTO FLOAT4_TMP VALUES ('-Infinity');\n--Testcase 600:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 1152:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1153:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1154:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1155:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1156:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1157:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1158:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1159:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1160:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1161:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1162:\nINSERT INTO NUMERIC_TMP VALUES ('42'::int2);\n--Testcase 1163:\nSELECT f1::numeric FROM NUMERIC_TMP;\n\n--Testcase 1164:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1165:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1166:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1167:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1168:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1169:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1170:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1171:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1172:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1173:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1174:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1175:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1176:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1177:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1178:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1179:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1180:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1181:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1182:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1183:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1184:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1185:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1186:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1187:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1188:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1189:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1190:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n-- Simple check that ceil(), floor(), and round() work correctly\n--Testcase 601:\nCREATE FOREIGN TABLE ceil_floor_round (a numeric OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO ceil_floor_round VALUES ('-5.5');\n--Testcase 500:\nINSERT INTO ceil_floor_round VALUES ('-5.499999');\n--Testcase 501:\nINSERT INTO ceil_floor_round VALUES ('9.5');\n--Testcase 502:\nINSERT INTO ceil_floor_round VALUES ('9.4999999');\n--Testcase 503:\nINSERT INTO ceil_floor_round VALUES ('0.0');\n--Testcase 504:\nINSERT INTO ceil_floor_round VALUES ('0.0000001');\n--Testcase 505:\nINSERT INTO ceil_floor_round VALUES ('-0.000001');\n--Testcase 506:\nSELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round ORDER BY a;\n\n-- Check rounding, it should round ties away from zero.\n--Testcase 602:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 603:\nDELETE FROM INT4_TMP;\n--Testcase 604:\nINSERT INTO INT4_TMP SELECT a FROM generate_series(-5,5) a;\n--Testcase 605:\nSELECT f1 as pow,\n\tround((-2.5 * 10 ^ f1)::numeric, -f1),\n\tround((-1.5 * 10 ^ f1)::numeric, -f1),\n\tround((-0.5 * 10 ^ f1)::numeric, -f1),\n\tround((0.5 * 10 ^ f1)::numeric, -f1),\n\tround((1.5 * 10 ^ f1)::numeric, -f1),\n\tround((2.5 * 10 ^ f1)::numeric, -f1)\nFROM INT4_TMP;\n\n-- Testing for width_bucket(). For convenience, we test both the\n-- numeric and float8 versions of the function in this file.\n-- errors\n--Testcase 606:\nCREATE FOREIGN TABLE width_bucket_tbl (\n\tid1 numeric,\n\tid2 numeric,\n\tid3 numeric,\n\tid4 int,\n\tid int OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 607:\nDELETE FROM width_bucket_tbl;\n--Testcase 608:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 609:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 610:\nDELETE FROM width_bucket_tbl;\n--Testcase 611:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 612:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 613:\nDELETE FROM width_bucket_tbl;\n--Testcase 614:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 615:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 616:\nDELETE FROM width_bucket_tbl;\n--Testcase 617:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 618:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 619:\nDELETE FROM width_bucket_tbl;\n--Testcase 620:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 621:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 622:\nDELETE FROM width_bucket_tbl;\n--Testcase 623:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 624:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 625:\nDELETE FROM width_bucket_tbl;\n--Testcase 626:\nINSERT INTO width_bucket_tbl VALUES ('NaN'::numeric, 3.0, 4.0, 888);\n--Testcase 627:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 628:\nDELETE FROM width_bucket_tbl;\n--Testcase 629:\nINSERT INTO width_bucket_tbl VALUES (0, 'NaN'::numeric, 4.0, 888);\n--Testcase 630:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 1191:\nDELETE FROM width_bucket_tbl;\n--Testcase 1192:\nINSERT INTO width_bucket_tbl VALUES (2.0, 3.0, '-inf'::numeric, 888);\n--Testcase 1193:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 1194:\nDELETE FROM width_bucket_tbl;\n--Testcase 1195:\nINSERT INTO width_bucket_tbl VALUES (0, '-inf'::numeric, 4.0 , 888);\n--Testcase 1196:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n-- normal operation\n--Testcase 631:\nCREATE FOREIGN TABLE width_bucket_test (\n\toperand_num numeric OPTIONS (key 'true'),\n\toperand_f8 float8\n) SERVER sqlite_svr;\n\n--COPY width_bucket_test (operand_num) FROM stdin;\n--Testcase 507:\nINSERT INTO width_bucket_test (operand_num) VALUES\n(-5.2),\n(-0.0000000001),\n(0.000000000001),\n(1),\n(1.99999999999999),\n(2),\n(2.00000000000001),\n(3),\n(4),\n(4.5),\n(5),\n(5.5),\n(6),\n(7),\n(8),\n(9),\n(9.99999999999999),\n(10),\n(10.0000000000001);\n\n--Testcase 508:\nUPDATE width_bucket_test SET operand_f8 = operand_num::float8;\n\n--Testcase 509:\nSELECT\n    operand_num,\n    width_bucket(operand_num, 0, 10, 5) AS wb_1,\n    width_bucket(operand_f8, 0, 10, 5) AS wb_1f,\n    width_bucket(operand_num, 10, 0, 5) AS wb_2,\n    width_bucket(operand_f8, 10, 0, 5) AS wb_2f,\n    width_bucket(operand_num, 2, 8, 4) AS wb_3,\n    width_bucket(operand_f8, 2, 8, 4) AS wb_3f,\n    width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,\n    width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,\n    width_bucket(operand_num, -25, 25, 10) AS wb_5,\n    width_bucket(operand_f8, -25, 25, 10) AS wb_5f\n    FROM width_bucket_test;\n\n-- Check positive and negative infinity: we require\n-- finite bucket bounds, but allow an infinite operand\n--Testcase 1197:\nDELETE FROM width_bucket_tbl;\n--Testcase 1198:\nINSERT INTO width_bucket_tbl VALUES (0.0, 'Infinity'::numeric , 5, 10);\n--Testcase 1199:\nSELECT width_bucket(id1::numeric, 'Infinity'::numeric, id3, id4) FROM width_bucket_tbl; -- error\n--Testcase 1200:\nDELETE FROM width_bucket_tbl;\n--Testcase 1201:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, '-Infinity'::numeric, 20);\n--Testcase 1202:\nSELECT width_bucket(id1::numeric, id2, '-Infinity'::numeric, id4) FROM width_bucket_tbl; -- error\n--Testcase 1203:\nDELETE FROM width_bucket_tbl;\n--Testcase 1204:\nINSERT INTO width_bucket_tbl VALUES ('Infinity'::numeric, 1, 10, 10), ('-Infinity'::numeric, 1, 10, 10);\n--Testcase 1205:\nSELECT width_bucket(id1::numeric, id2, id3, id4) FROM width_bucket_tbl;\n--Testcase 510:\nDELETE FROM width_bucket_tbl;\n-- postgres does not support insert 'Infinity' and '-Infinity' as numeric.\n--Testcase 632:\nINSERT INTO width_bucket_tbl VALUES (0.0, 0.0, 5, 10);\n--Testcase 633:\nSELECT width_bucket(id1::float8, 'Infinity'::float8, id3, id4) FROM width_bucket_tbl;  -- error\n\n--Testcase 511:\nDELETE FROM width_bucket_tbl;\n--Testcase 634:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, 0.0, 20);\n--Testcase 635:\nSELECT width_bucket(id1::float8, id2, 'Infinity'::float8, id4) FROM width_bucket_tbl; -- error\n--Testcase 512:\nDELETE FROM width_bucket_tbl;\n--Testcase 636:\nINSERT INTO width_bucket_tbl VALUES (0.0, 1, 10, 10);\n--Testcase 637:\nSELECT width_bucket('Infinity'::float8, id2, id3, id4), width_bucket('-Infinity'::float8, id2, id3, id4) FROM width_bucket_tbl;\n\n-- Simple test for roundoff error when results should be exact\n--Testcase 1445:\nDELETE FROM width_bucket_tbl;\n--Testcase 1446:\nINSERT INTO width_bucket_tbl SELECT x, 10, 100, 9 FROM generate_series(0, 110, 10) x;\n--Testcase 1447:\nSELECT id1, width_bucket(id1::float8, id2, id3, id4) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 1448:\nDELETE FROM width_bucket_tbl;\n--Testcase 1449:\nINSERT INTO width_bucket_tbl SELECT x, 100, 10, 9 FROM generate_series(0, 110, 10) x;       \n--Testcase 1450:\nSELECT id1, width_bucket(id1::float8, 100, 10, 9) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(0, -1e100::numeric, 1, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(0, -1e100::float8, 1, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(1, 1e100::numeric, 0, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(1, 1e100::float8, 0, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\n-- Check cases that could trigger overflow or underflow within the calculation\nSELECT oper, low, high, cnt, width_bucket(oper, low, high, cnt)\nFROM\n  (SELECT 1.797e+308::float8 AS big, 5e-324::float8 AS tiny) as v,\n  LATERAL (VALUES\n    (10.5::float8, -big, big, 1),\n    (10.5::float8, -big, big, 2),\n    (10.5::float8, -big, big, 3),\n    (big / 4, -big / 2, big / 2, 10),\n    (10.5::float8, big, -big, 1),\n    (10.5::float8, big, -big, 2),\n    (10.5::float8, big, -big, 3),\n    (big / 4, big / 2, -big / 2, 10),\n    (0, 0, tiny, 4),\n    (tiny, 0, tiny, 4),\n    (0, 0, 1, 2147483647),\n    (1, 1, 0, 2147483647)\n  ) as sample(oper, low, high, cnt);\n-- These fail because the result would be out of int32 range:\n-- Do not convert to check right.\nSELECT width_bucket(1::float8, 0, 1, 2147483647);\nSELECT width_bucket(0::float8, 1, 0, 2147483647);\n\n--Testcase 638:\nDROP FOREIGN TABLE width_bucket_test;\n\n-- TO_CHAR()\n--\n--Testcase 513:\nSELECT to_char(val, '9G999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 514:\nSELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 515:\nSELECT to_char(val, '9999999999999999.999999999999999PR')\n\tFROM num_data;\n\n--Testcase 516:\nSELECT to_char(val, '9999999999999999.999999999999999S')\n\tFROM num_data;\n\n--Testcase 517:\nSELECT to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;\n--Testcase 518:\nSELECT to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;\n--Testcase 519:\nSELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;\n--Testcase 520:\nSELECT to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;\n--Testcase 521:\nSELECT to_char(val, '0999999999999999.999999999999999')       FROM num_data;\n--Testcase 522:\nSELECT to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;\n--Testcase 523:\nSELECT to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;\n--Testcase 524:\nSELECT to_char(val, 'FM9999999999999999.099999999999999') \tFROM num_data;\n--Testcase 525:\nSELECT to_char(val, 'FM9999999999990999.990999999999999') \tFROM num_data;\n--Testcase 526:\nSELECT to_char(val, 'FM0999999999999999.999909999999999') \tFROM num_data;\n--Testcase 527:\nSELECT to_char(val, 'FM9999999990999999.099999999999999') \tFROM num_data;\n--Testcase 528:\nSELECT to_char(val, 'L9999999999999999.099999999999999')\tFROM num_data;\n--Testcase 529:\nSELECT to_char(val, 'FM9999999999999999.99999999999999')\tFROM num_data;\n--Testcase 530:\nSELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 531:\nSELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 532:\nSELECT to_char(val, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM num_data;\n--Testcase 533:\nSELECT to_char(val, '999999SG9999999999')\t\t\tFROM num_data;\n--Testcase 534:\nSELECT to_char(val, 'FM9999999999999999.999999999999999')\tFROM num_data;\n--Testcase 535:\nSELECT to_char(val, '9.999EEEE')\t\t\t\tFROM num_data;\n\n--Testcase 1476:\nDELETE FROM v;\n--Testcase 1477:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1478:\nSELECT x,\n  to_char(x, '9.999EEEE') as numeric,\n  to_char(x::float8, '9.999EEEE') as float8,\n  to_char(x::float4, '9.999EEEE') as float4\nFROM v;\n\n--Testcase 1522:\nDELETE FROM v;\n--Testcase 1523:\nINSERT INTO v(x) VALUES (-16379),(-16378),(-1234),(-789),(-45),(-5),(-4),(-3),(-2),(-1),(0),\n                        (1),(2),(3),(4),(5),(38),(275),(2345),(45678),(131070),(131071);\n--Testcase 1524:\nSELECT x,\n  to_char(('1.2345e'||x)::numeric, '9.999EEEE') as numeric\nFROM v;\n\n--Testcase 1479:\nDELETE FROM v;\n--Testcase 1480:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1481:\nSELECT x,\n  to_char(x, 'MI9999999999.99') as numeric,\n  to_char(x::float8, 'MI9999999999.99') as float8,\n  to_char(x::float4, 'MI9999999999.99') as float4\nFROM v;\n\n--Testcase 1482:\nDELETE FROM v;\n--Testcase 1483:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1484:\nSELECT x,\n  to_char(x, 'MI99.99') as numeric,\n  to_char(x::float8, 'MI99.99') as float8,\n  to_char(x::float4, 'MI99.99') as float4\nFROM v;\n\n--Testcase 536:\nDELETE FROM ceil_floor_round;\n--Testcase 537:\nINSERT INTO ceil_floor_round VALUES ('100'::numeric);\n--Testcase 538:\nSELECT to_char(a, 'FM999.9') FROM ceil_floor_round;\n--Testcase 539:\nSELECT to_char(a, 'FM999.') FROM ceil_floor_round;\n--Testcase 540:\nSELECT to_char(a, 'FM999') FROM ceil_floor_round;\n\nCREATE FOREIGN TABLE ceil_round_float8(a float8) SERVER sqlite_svr;\nINSERT INTO ceil_round_float8 VALUES ('12345678901'::float8);\nSELECT to_char(a, 'FM9999999999D9999900000000000000000') FROM ceil_round_float8;\n\n-- Check parsing of literal text in a format string\n--Testcase 541:\nSELECT to_char(a, 'foo999') FROM ceil_floor_round;\n--Testcase 542:\nSELECT to_char(a, 'f\\oo999') FROM ceil_floor_round;\n--Testcase 543:\nSELECT to_char(a, 'f\\\\oo999') FROM ceil_floor_round;\n--Testcase 544:\nSELECT to_char(a, 'f\\\"oo999') FROM ceil_floor_round;\n--Testcase 545:\nSELECT to_char(a, 'f\\\\\"oo999') FROM ceil_floor_round;\n--Testcase 546:\nSELECT to_char(a, 'f\"ool\"999') FROM ceil_floor_round;\n--Testcase 547:\nSELECT to_char(a, 'f\"\\ool\"999') FROM ceil_floor_round;\n--Testcase 548:\nSELECT to_char(a, 'f\"\\\\ool\"999') FROM ceil_floor_round;\n--Testcase 549:\nSELECT to_char(a, 'f\"ool\\\"999') FROM ceil_floor_round;\n--Testcase 550:\nSELECT to_char(a, 'f\"ool\\\\\"999') FROM ceil_floor_round;\n\n-- TO_NUMBER()\n--\n--Testcase 639:\ncreate foreign table to_number_tbl (a text, id int options (key 'true')) server sqlite_svr;\n--Testcase 1211:\nSET lc_numeric = 'C';\n--Testcase 640:\nDELETE FROM to_number_tbl;\n--Testcase 641:\nINSERT INTO to_number_tbl VALUES ('-34,338,492');\n--Testcase 642:\nSELECT to_number(a, '99G999G999') FROM to_number_tbl;\n\n--Testcase 643:\nDELETE FROM to_number_tbl;\n--Testcase 644:\nINSERT INTO to_number_tbl VALUES ('-34,338,492.654,878');\n--Testcase 645:\nSELECT to_number(a, '99G999G999D999G999') FROM to_number_tbl;\n\n--Testcase 646:\nDELETE FROM to_number_tbl;\n--Testcase 647:\nINSERT INTO to_number_tbl VALUES ('<564646.654564>');\n--Testcase 648:\nSELECT to_number(a, '999999.999999PR') FROM to_number_tbl;\n\n--Testcase 649:\nDELETE FROM to_number_tbl;\n--Testcase 650:\nINSERT INTO to_number_tbl VALUES ('0.00001-');\n--Testcase 651:\nSELECT to_number(a, '9.999999S') FROM to_number_tbl;\n\n--Testcase 652:\nDELETE FROM to_number_tbl;\n--Testcase 653:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 654:\nSELECT to_number(a, 'FM9.999999S') FROM to_number_tbl;\n\n--Testcase 655:\nDELETE FROM to_number_tbl;\n--Testcase 656:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 657:\nSELECT to_number(a, 'FM9.999999MI') FROM to_number_tbl;\n\n--Testcase 658:\nDELETE FROM to_number_tbl;\n--Testcase 659:\nINSERT INTO to_number_tbl VALUES ('5 4 4 4 4 8 . 7 8');\n--Testcase 660:\nSELECT to_number(a, '9 9 9 9 9 9 . 9 9') FROM to_number_tbl;\n\n--Testcase 661:\nDELETE FROM to_number_tbl;\n--Testcase 662:\nINSERT INTO to_number_tbl VALUES ('.01');\n--Testcase 663:\nSELECT to_number(a, 'FM9.99') FROM to_number_tbl;\n\n--Testcase 664:\nDELETE FROM to_number_tbl;\n--Testcase 665:\nINSERT INTO to_number_tbl VALUES ('.0');\n--Testcase 666:\nSELECT to_number(a, '99999999.99999999') FROM to_number_tbl;\n\n--Testcase 667:\nDELETE FROM to_number_tbl;\n--Testcase 668:\nINSERT INTO to_number_tbl VALUES ('0');\n--Testcase 669:\nSELECT to_number(a, '99.99') FROM to_number_tbl;\n\n--Testcase 670:\nDELETE FROM to_number_tbl;\n--Testcase 671:\nINSERT INTO to_number_tbl VALUES ('.-01');\n--Testcase 672:\nSELECT to_number(a, 'S99.99') FROM to_number_tbl;\n\n--Testcase 673:\nDELETE FROM to_number_tbl;\n--Testcase 674:\nINSERT INTO to_number_tbl VALUES ('.01-');\n--Testcase 675:\nSELECT to_number(a, '99.99S') FROM to_number_tbl;\n\n--Testcase 676:\nDELETE FROM to_number_tbl;\n--Testcase 677:\nINSERT INTO to_number_tbl VALUES (' . 0 1-');\n--Testcase 678:\nSELECT to_number(a, ' 9 9 . 9 9 S') FROM to_number_tbl;\n\n--Testcase 679:\nDELETE FROM to_number_tbl;\n--Testcase 680:\nINSERT INTO to_number_tbl VALUES ('34,50');\n--Testcase 681:\nSELECT to_number(a,'999,99') FROM to_number_tbl;\n\n--Testcase 682:\nDELETE FROM to_number_tbl;\n--Testcase 683:\nINSERT INTO to_number_tbl VALUES ('123,000');\n--Testcase 684:\nSELECT to_number(a,'999G') FROM to_number_tbl;\n\n--Testcase 685:\nDELETE FROM to_number_tbl;\n--Testcase 686:\nINSERT INTO to_number_tbl VALUES ('123456');\n--Testcase 687:\nSELECT to_number(a,'999G999') FROM to_number_tbl;\n\n--Testcase 688:\nDELETE FROM to_number_tbl;\n--Testcase 689:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 690:\nSELECT to_number(a,'L9,999.99') FROM to_number_tbl;\n\n--Testcase 691:\nDELETE FROM to_number_tbl;\n--Testcase 692:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 693:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 694:\nDELETE FROM to_number_tbl;\n--Testcase 695:\nINSERT INTO to_number_tbl VALUES ('$1,234.56');\n--Testcase 696:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 697:\nDELETE FROM to_number_tbl;\n--Testcase 698:\nINSERT INTO to_number_tbl VALUES ('1234.56');\n--Testcase 699:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 700:\nDELETE FROM to_number_tbl;\n--Testcase 701:\nINSERT INTO to_number_tbl VALUES ('1,234.56');\n--Testcase 702:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 703:\nDELETE FROM to_number_tbl;\n--Testcase 704:\nINSERT INTO to_number_tbl VALUES ('42nd');\n--Testcase 705:\nSELECT to_number(a, '99th') FROM to_number_tbl;\n\n--Testcase 1212:\nRESET lc_numeric;\n--\n-- Input syntax\n--\n\n--Testcase 706:\nCREATE FOREIGN TABLE num_input_test (n1 numeric) SERVER sqlite_svr;\n\n-- good inputs\n--Testcase 551:\nINSERT INTO num_input_test(n1) VALUES (' 123');\n--Testcase 552:\nINSERT INTO num_input_test(n1) VALUES ('   3245874    ');\n--Testcase 553:\nINSERT INTO num_input_test(n1) VALUES ('  -93853');\n--Testcase 554:\nINSERT INTO num_input_test(n1) VALUES ('555.50');\n--Testcase 555:\nINSERT INTO num_input_test(n1) VALUES ('-555.50');\n--Testcase 556:\nINSERT INTO num_input_test(n1) VALUES ('NaN ');\n--Testcase 557:\nINSERT INTO num_input_test(n1) VALUES ('        nan');\n--Testcase 1213:\nINSERT INTO num_input_test(n1) VALUES (' inf ');\n--Testcase 1214:\nINSERT INTO num_input_test(n1) VALUES (' +inf ');\n--Testcase 1215:\nINSERT INTO num_input_test(n1) VALUES (' -inf ');\n--Testcase 1216:\nINSERT INTO num_input_test(n1) VALUES (' Infinity ');\n--Testcase 1217:\nINSERT INTO num_input_test(n1) VALUES (' +inFinity ');\n--Testcase 1218:\nINSERT INTO num_input_test(n1) VALUES (' -INFINITY ');\nINSERT INTO num_input_test(n1) VALUES ('12_000_000_000');\nINSERT INTO num_input_test(n1) VALUES ('12_000.123_456');\nINSERT INTO num_input_test(n1) VALUES ('23_000_000_000e-1_0');\nINSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e1_0');\nINSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e+1_1');\nINSERT INTO num_input_test(n1) VALUES ('0b10001110111100111100001001010');\nINSERT INTO num_input_test(n1) VALUES ('  -0B_1010_1011_0101_0100_1010_1001_1000_1100_1110_1011_0001_1111_0000_1010_1101_0010  ');\nINSERT INTO num_input_test(n1) VALUES ('  +0o112402761777 ');\nINSERT INTO num_input_test(n1) VALUES ('-0O0012_5524_5230_6334_3167_0261');\nINSERT INTO num_input_test(n1) VALUES ('-0x0000000000000000000000000deadbeef');\nINSERT INTO num_input_test(n1) VALUES (' 0X_30b1_F33a_6DF0_bD4E_64DF_9BdA_7D15 ');\n\n-- bad inputs\n--Testcase 558:\nINSERT INTO num_input_test(n1) VALUES ('     ');\n--Testcase 559:\nINSERT INTO num_input_test(n1) VALUES ('   1234   %');\n--Testcase 560:\nINSERT INTO num_input_test(n1) VALUES ('xyz');\n--Testcase 561:\nINSERT INTO num_input_test(n1) VALUES ('- 1234');\n--Testcase 562:\nINSERT INTO num_input_test(n1) VALUES ('5 . 0');\n--Testcase 563:\nINSERT INTO num_input_test(n1) VALUES ('5. 0   ');\n--Testcase 564:\nINSERT INTO num_input_test(n1) VALUES ('');\n--Testcase 565:\nINSERT INTO num_input_test(n1) VALUES (' N aN ');\nINSERT INTO num_input_test(n1) VALUES ('+NaN');\nINSERT INTO num_input_test(n1) VALUES ('-NaN');\n--Testcase 1219:\nINSERT INTO num_input_test(n1) VALUES ('+ infinity');\nINSERT INTO num_input_test(n1) VALUES ('_123');\nINSERT INTO num_input_test(n1) VALUES ('123_');\nINSERT INTO num_input_test(n1) VALUES ('12__34');\nINSERT INTO num_input_test(n1) VALUES ('123_.456');\nINSERT INTO num_input_test(n1) VALUES ('123._456');\nINSERT INTO num_input_test(n1) VALUES ('1.2e_34');\nINSERT INTO num_input_test(n1) VALUES ('1.2e34_');\nINSERT INTO num_input_test(n1) VALUES ('1.2e3__4');\nINSERT INTO num_input_test(n1) VALUES ('0b1112');\nINSERT INTO num_input_test(n1) VALUES ('0c1112');\nINSERT INTO num_input_test(n1) VALUES ('0o12345678');\nINSERT INTO num_input_test(n1) VALUES ('0x1eg');\nINSERT INTO num_input_test(n1) VALUES ('0x12.34');\nINSERT INTO num_input_test(n1) VALUES ('0x__1234');\nINSERT INTO num_input_test(n1) VALUES ('0x1234_');\nINSERT INTO num_input_test(n1) VALUES ('0x12__34');\n\n--Testcase 566:\nSELECT * FROM num_input_test;\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT4_NUMERIC(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_INT4_NUMERIC VALUES ('34.5', 1), ('34xyz', 2), ('1e400000', 3);\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 3), 'numeric');\n\nINSERT INTO NON_ERROR_THROWING_API_INT4_NUMERIC VALUES ('1234.567', 4), ('0x1234.567', 5);\nSELECT pg_input_is_valid(f1, 'numeric(8,4)') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4;\nSELECT pg_input_is_valid(f1, 'numeric(7,4)') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4), 'numeric(7,4)');\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 5), 'numeric');\n\n--\n-- Test precision and scale typemods\n--\n\n--Testcase 1557:\nCREATE FOREIGN TABLE num_typemod_test (\n  millions numeric(3, -6),\n  thousands numeric(3, -3),\n  units numeric(3, 0),\n  thousandths numeric(3, 3),\n  millionths numeric(3, 6)\n) SERVER sqlite_svr;\n--Testcase 1558:\n\\d num_typemod_test\n\n-- rounding of valid inputs\n--Testcase 1559:\nINSERT INTO num_typemod_test VALUES (123456, 123, 0.123, 0.000123, 0.000000123);\n--Testcase 1560:\nINSERT INTO num_typemod_test VALUES (654321, 654, 0.654, 0.000654, 0.000000654);\n--Testcase 1561:\nINSERT INTO num_typemod_test VALUES (2345678, 2345, 2.345, 0.002345, 0.000002345);\n--Testcase 1562:\nINSERT INTO num_typemod_test VALUES (7654321, 7654, 7.654, 0.007654, 0.000007654);\n--Testcase 1563:\nINSERT INTO num_typemod_test VALUES (12345678, 12345, 12.345, 0.012345, 0.000012345);\n--Testcase 1564:\nINSERT INTO num_typemod_test VALUES (87654321, 87654, 87.654, 0.087654, 0.000087654);\n--Testcase 1565:\nINSERT INTO num_typemod_test VALUES (123456789, 123456, 123.456, 0.123456, 0.000123456);\n--Testcase 1566:\nINSERT INTO num_typemod_test VALUES (987654321, 987654, 987.654, 0.987654, 0.000987654);\n--Testcase 1567:\nINSERT INTO num_typemod_test VALUES ('NaN', 'NaN', 'NaN', 'NaN', 'NaN');\n\n--Testcase 1568:\nSELECT scale(millions), * FROM num_typemod_test ORDER BY millions;\n\n-- invalid inputs\n--Testcase 1569:\nINSERT INTO num_typemod_test (millions) VALUES ('inf');\n--Testcase 1570:\nINSERT INTO num_typemod_test (millions) VALUES (999500000);\n--Testcase 1571:\nINSERT INTO num_typemod_test (thousands) VALUES (999500);\n--Testcase 1572:\nINSERT INTO num_typemod_test (units) VALUES (999.5);\n--Testcase 1573:\nINSERT INTO num_typemod_test (thousandths) VALUES (0.9995);\n--Testcase 1574:\nINSERT INTO num_typemod_test (millionths) VALUES (0.0009995);\n\n--\n-- Test some corner cases for multiplication\n--\n--Testcase 707:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO num_tmp VALUES (4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 709:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 710:\nDELETE FROM num_tmp;\n--Testcase 711:\nINSERT INTO num_tmp VALUES (4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 712:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 713:\nDELETE FROM num_tmp;\n--Testcase 714:\nINSERT INTO num_tmp VALUES (4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 715:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 716:\nDELETE FROM num_tmp;\n--Testcase 717:\nINSERT INTO num_tmp VALUES (4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 718:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 1525:\nDELETE FROM num_tmp;\n--Testcase 1526:\nINSERT INTO num_tmp VALUES ((0.1 - 2e-16383), (0.1 - 3e-16383));\n--Testcase 1527:\nSELECT trim_scale(n1 * n2) FROM num_tmp;\n\n--\n-- Test some corner cases for division\n--\n--Testcase 719:\nDELETE FROM num_tmp;\n--Testcase 720:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 721:\nSELECT n1::numeric / n2 FROM num_tmp;\n\n--Testcase 722:\nDELETE FROM num_tmp;\n--Testcase 723:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 724:\nSELECT div(n1::numeric, n2) FROM num_tmp;\n--Testcase 725:\nSELECT mod(n1::numeric, n2) FROM num_tmp;\n--Testcase 726:\nSELECT div(-n1::numeric, n2) FROM num_tmp;\n--Testcase 727:\nSELECT mod(-n1::numeric, n2) FROM num_tmp;\n--Testcase 728:\nselect div(-n1::numeric,n2)*n2 + mod(-n1::numeric,n2) FROM num_tmp;\n\n--Testcase 729:\nDELETE FROM num_tmp;\n--Testcase 730:\nINSERT INTO num_tmp VALUES (70.0,70);\n--Testcase 731:\nselect mod (n1, n2) FROM num_tmp;\n--Testcase 732:\nselect div (n1, n2) FROM num_tmp;\n--Testcase 733:\nselect n1 / n2 FROM num_tmp;\n\n--Testcase 734:\nDELETE FROM num_tmp;\n--Testcase 735:\nINSERT INTO num_tmp VALUES (12345678901234567890, 123);\n--Testcase 736:\nselect n1 % n2 FROM num_tmp;\n--Testcase 737:\nselect n1 / n2 FROM num_tmp;\n--Testcase 738:\nselect div(n1, n2) FROM num_tmp;\n--Testcase 739:\nselect div(n1, n2) * n2 + n1 % n2 FROM num_tmp;\n\n--\n-- Test some corner cases for square root\n--\n--Testcase 740:\nDELETE FROM num_tmp;\n--Testcase 741:\nINSERT INTO num_tmp VALUES (1.000000000000003::numeric);\n--Testcase 742:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 743:\nDELETE FROM num_tmp;\n--Testcase 744:\nINSERT INTO num_tmp VALUES (1.000000000000004::numeric);\n--Testcase 745:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 746:\nDELETE FROM num_tmp;\n--Testcase 747:\nINSERT INTO num_tmp VALUES (96627521408608.56340355805::numeric);\n--Testcase 748:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 749:\nDELETE FROM num_tmp;\n--Testcase 750:\nINSERT INTO num_tmp VALUES (96627521408608.56340355806::numeric);\n--Testcase 751:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 752:\nDELETE FROM num_tmp;\n--Testcase 753:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290367::numeric);\n--Testcase 754:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 755:\nDELETE FROM num_tmp;\n--Testcase 756:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290368::numeric);\n--Testcase 757:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 758:\nDELETE FROM num_tmp;\n--Testcase 759:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900306::numeric);\n--Testcase 760:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 761:\nDELETE FROM num_tmp;\n--Testcase 762:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900307::numeric);\n--Testcase 763:\nSELECT sqrt(n1) FROM num_tmp;\n\n--\n-- Test code path for raising to integer powers\n--\n--Testcase 764:\nDELETE FROM num_tmp;\n--Testcase 765:\nINSERT INTO num_tmp VALUES (10.0, -2147483648);\n--Testcase 766:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 767:\nDELETE FROM num_tmp;\n--Testcase 768:\nINSERT INTO num_tmp VALUES (10.0, -2147483647);\n--Testcase 769:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 770:\nDELETE FROM num_tmp;\n--Testcase 771:\nINSERT INTO num_tmp VALUES (10.0, 2147483647);\n--Testcase 772:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n--Testcase 773:\nDELETE FROM num_tmp;\n--Testcase 774:\nINSERT INTO num_tmp VALUES (117743296169.0, -1000000000);\n--Testcase 775:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n-- cases that used to return inaccurate results\n--Testcase 776:\nDELETE FROM num_tmp;\n--Testcase 777:\nINSERT INTO num_tmp VALUES (3.789, 21.0000000000000000);\n--Testcase 778:\nSELECT n1 ^ n2 FROM num_tmp;\n\n\n--Testcase 779:\nDELETE FROM num_tmp;\n--Testcase 780:\nINSERT INTO num_tmp VALUES (3.789, 35.0000000000000000);\n--Testcase 781:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 782:\nDELETE FROM num_tmp;\n--Testcase 783:\nINSERT INTO num_tmp VALUES (1.2, 345);\n--Testcase 784:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 785:\nDELETE FROM num_tmp;\n--Testcase 786:\nINSERT INTO num_tmp VALUES (0.12, (-20));\n--Testcase 787:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1220:\nDELETE FROM num_tmp;\n--Testcase 1221:\nINSERT INTO num_tmp VALUES (1.000000000123, (-2147483648));\n--Testcase 1222:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1528:\nDELETE FROM num_tmp;\n--Testcase 1529:\nINSERT INTO num_tmp VALUES (0.9999999999, 23300000000000);\n--Testcase 1530:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n--Testcase 1575:\nDELETE FROM num_tmp;\n--Testcase 1576:\nINSERT INTO num_tmp VALUES ((1 - 1.500012345678e-1000), 1.45e1003);\n--Testcase 1577:\nSELECT round(((1 - 1.500012345678e-1000) ^ 1.45e1003) * 1e1000) FROM num_tmp;\n\n-- cases that used to error out\n--Testcase 788:\nDELETE FROM num_tmp;\n--Testcase 789:\nINSERT INTO num_tmp VALUES (0.12, (-25));\n--Testcase 790:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 791:\nDELETE FROM num_tmp;\n--Testcase 792:\nINSERT INTO num_tmp VALUES (0.5678, (-85));\n--Testcase 793:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1531:\nDELETE FROM num_tmp;\n--Testcase 1532:\nINSERT INTO num_tmp VALUES (0.9999999999, 70000000000000);\n--Testcase 1533:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n-- negative base to integer powers\n--Testcase 1534:\nDELETE FROM num_tmp;\n--Testcase 1535:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483646);\n--Testcase 1536:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1537:\nDELETE FROM num_tmp;\n--Testcase 1538:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483647);\n--Testcase 1539:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1540:\nDELETE FROM num_tmp;\n--Testcase 1541:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483648);\n--Testcase 1542:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1543:\nDELETE FROM num_tmp;\n--Testcase 1544:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000000);\n--Testcase 1545:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1546:\nDELETE FROM num_tmp;\n--Testcase 1547:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000001);\n--Testcase 1548:\nSELECT n1 ^ n2 FROM num_tmp;\n\n-- integer powers of 10\nDELETE FROM num_tmp;\nINSERT INTO num_tmp(n1) SELECT n FROM generate_series(-20,20) n;\nSELECT n1, 10.0 ^ n1 as \"10^n\", (10.0 ^ n1) * (10.0 ^ (-n1)) = 1 as ok FROM num_tmp;\n\n--\n-- Tests for raising to non-integer powers\n--\n\n-- special cases\n--Testcase 794:\nDELETE FROM num_tmp;\n--Testcase 795:\nINSERT INTO num_tmp VALUES (0.0, 0.0);\n--Testcase 796:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 797:\nDELETE FROM num_tmp;\n--Testcase 798:\nINSERT INTO num_tmp VALUES ((-12.34), 0.0);\n--Testcase 799:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 800:\nDELETE FROM num_tmp;\n--Testcase 801:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 802:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 803:\nDELETE FROM num_tmp;\n--Testcase 804:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 805:\nselect n1 ^ n2 FROM num_tmp;\n\n-- NaNs\n--Testcase 806:\nDELETE FROM num_tmp;\n--Testcase 807:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 'NaN'::numeric);\n--Testcase 808:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 809:\nDELETE FROM num_tmp;\n--Testcase 810:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 0);\n--Testcase 811:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 812:\nDELETE FROM num_tmp;\n--Testcase 813:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 1);\n--Testcase 814:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 815:\nDELETE FROM num_tmp;\n--Testcase 816:\nINSERT INTO num_tmp VALUES (0, 'NaN'::numeric);\n--Testcase 817:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 818:\nDELETE FROM num_tmp;\n--Testcase 819:\nINSERT INTO num_tmp VALUES (1, 'NaN'::numeric);\n--Testcase 820:\nselect n1 ^ n2 FROM num_tmp;\n\n-- invalid inputs\n--Testcase 821:\nDELETE FROM num_tmp;\n--Testcase 822:\nINSERT INTO num_tmp VALUES (0.0, (-12.34));\n--Testcase 823:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 824:\nDELETE FROM num_tmp;\n--Testcase 825:\nINSERT INTO num_tmp VALUES ((-12.34), 1.2);\n--Testcase 826:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 827:\nDELETE FROM num_tmp;\n--Testcase 828:\nINSERT INTO num_tmp VALUES (32.1, 9.8);\n--Testcase 829:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 830:\nDELETE FROM num_tmp;\n--Testcase 831:\nINSERT INTO num_tmp VALUES (32.1, (-9.8));\n--Testcase 832:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 833:\nDELETE FROM num_tmp;\n--Testcase 834:\nINSERT INTO num_tmp VALUES (12.3, 45.6);\n--Testcase 835:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 836:\nDELETE FROM num_tmp;\n--Testcase 837:\nINSERT INTO num_tmp VALUES (12.3, (-45.6));\n--Testcase 838:\nselect n1 ^ n2 FROM num_tmp;\n\n-- big test\n--Testcase 839:\nDELETE FROM num_tmp;\n--Testcase 840:\nINSERT INTO num_tmp VALUES (1.234, 5678);\n--Testcase 841:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for EXP()\n--\n\n-- special cases\n--Testcase 842:\nDELETE FROM num_tmp;\n--Testcase 843:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 844:\nselect exp(n1) from num_tmp;\n\n--Testcase 845:\nDELETE FROM num_tmp;\n--Testcase 846:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 847:\nselect exp(n1) from num_tmp;\n\n--Testcase 848:\nDELETE FROM num_tmp;\n--Testcase 849:\nINSERT INTO num_tmp VALUES (1.0::numeric(71,70));\n--Testcase 850:\nselect exp(n1) from num_tmp;\n\n--Testcase 1223:\nDELETE FROM num_tmp;\n--Testcase 1224:\nINSERT INTO num_tmp VALUES ('nan'::numeric);\n--Testcase 1225:\nselect exp(n1) from num_tmp;\n\n--Testcase 1226:\nDELETE FROM num_tmp;\n--Testcase 1227:\nINSERT INTO num_tmp VALUES ('inf'::numeric);\n--Testcase 1228:\nselect exp(n1) from num_tmp;\n\n--Testcase 1229:\nDELETE FROM num_tmp;\n--Testcase 1230:\nINSERT INTO num_tmp VALUES ('-inf'::numeric);\n--Testcase 1231:\nselect exp(n1) from num_tmp;\n\n--Testcase 1549:\nDELETE FROM num_tmp;\n--Testcase 1550:\nINSERT INTO num_tmp VALUES ('-5000'::numeric);\n--Testcase 1551:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n--Testcase 1552:\nDELETE FROM num_tmp;\n--Testcase 1553:\nINSERT INTO num_tmp VALUES ('-10000'::numeric);\n--Testcase 1554:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 851:\nDELETE FROM num_tmp;\n--Testcase 852:\nINSERT INTO num_tmp VALUES (32.999);\n--Testcase 853:\nselect exp(n1) from num_tmp;\n\n--Testcase 854:\nDELETE FROM num_tmp;\n--Testcase 855:\nINSERT INTO num_tmp VALUES (-32.999);\n--Testcase 856:\nselect exp(n1) from num_tmp;\n\n--Testcase 857:\nDELETE FROM num_tmp;\n--Testcase 858:\nINSERT INTO num_tmp VALUES (123.456);\n--Testcase 859:\nselect exp(n1) from num_tmp;\n\n--Testcase 860:\nDELETE FROM num_tmp;\n--Testcase 861:\nINSERT INTO num_tmp VALUES (-123.456);\n--Testcase 862:\nselect exp(n1) from num_tmp;\n\n-- big test\n--Testcase 863:\nDELETE FROM num_tmp;\n--Testcase 864:\nINSERT INTO num_tmp VALUES (1234.5678);\n--Testcase 865:\nselect exp(n1) from num_tmp;\n\n--\n-- Tests for generate_series\n--\n--Testcase 866:\nDELETE FROM num_tmp;\n--Testcase 867:\nINSERT INTO num_tmp select * from generate_series(0.0::numeric, 4.0::numeric);\n--Testcase 868:\nSELECT n1 FROM num_tmp;\n\n--Testcase 869:\nDELETE FROM num_tmp;\n--Testcase 870:\nINSERT INTO num_tmp select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);\n--Testcase 871:\nSELECT n1 FROM num_tmp;\n\n--Testcase 872:\nDELETE FROM num_tmp;\n--Testcase 873:\nINSERT INTO num_tmp select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);\n--Testcase 874:\nSELECT n1 FROM num_tmp;\n\n-- Trigger errors\n--Testcase 875:\nDELETE FROM num_tmp;\n--Testcase 876:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 0::numeric);\n--Testcase 877:\nSELECT n1 FROM num_tmp;\n\n--Testcase 878:\nDELETE FROM num_tmp;\n--Testcase 879:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);\n--Testcase 880:\nSELECT n1 FROM num_tmp;\n\n--Testcase 881:\nDELETE FROM num_tmp;\n--Testcase 882:\nINSERT INTO num_tmp select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);\n--Testcase 883:\nSELECT n1 FROM num_tmp;\n\n--Testcase 884:\nDELETE FROM num_tmp;\n--Testcase 885:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);\n--Testcase 886:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1232:\nDELETE FROM num_tmp;\n--Testcase 1233:\nINSERT INTO num_tmp select * from generate_series('inf'::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1234:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1235:\nDELETE FROM num_tmp;\n--Testcase 1236:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1237:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1238:\nDELETE FROM num_tmp;\n--Testcase 1239:\nINSERT INTO num_tmp select * from generate_series(0::numeric, '42'::numeric, '-inf'::numeric);\n--Testcase 1240:\nSELECT n2 FROM num_tmp;\n\n-- Checks maximum, output is truncated\n--Testcase 887:\nDELETE FROM num_tmp;\n--Testcase 888:\nINSERT INTO num_tmp select (i / (10::numeric ^ 131071))::numeric(1,0)\n        from generate_series(6 * (10::numeric ^ 131071),\n                             9 * (10::numeric ^ 131071),\n                             10::numeric ^ 131071) i;\n--Testcase 889:\nSELECT n1 FROM num_tmp;\n                            \n-- Check usage with variables\n--Testcase 890:\nDELETE FROM num_tmp;\n--Testcase 891:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;\n--Testcase 892:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 893:\nDELETE FROM num_tmp;\n--Testcase 894:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;\n--Testcase 895:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 896:\nDELETE FROM num_tmp;\n--Testcase 897:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;\n--Testcase 898:\nSELECT n1, n2 FROM num_tmp;\n\n--\n-- Tests for LN()\n--\n\n-- Invalid inputs\n--Testcase 899:\nDELETE FROM num_tmp;\n--Testcase 900:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 901:\nselect ln(n1) from num_tmp;\n\n--Testcase 902:\nDELETE FROM num_tmp;\n--Testcase 903:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 904:\nselect ln(n1) from num_tmp;\n\n-- Some random tests\n--Testcase 905:\nDELETE FROM num_tmp;\n--Testcase 906:\nINSERT INTO num_tmp VALUES (1.2345678e-28);\n--Testcase 907:\nselect ln(n1) from num_tmp;\n\n--Testcase 908:\nDELETE FROM num_tmp;\n--Testcase 909:\nINSERT INTO num_tmp VALUES (0.0456789);\n--Testcase 910:\nselect ln(n1) from num_tmp;\n\n--Testcase 911:\nDELETE FROM num_tmp;\n--Testcase 912:\nINSERT INTO num_tmp VALUES (0.349873948359354029493948309745709580730482050975);\n--Testcase 913:\nselect ln(n1) from num_tmp;\n\n--Testcase 914:\nDELETE FROM num_tmp;\n--Testcase 915:\nINSERT INTO num_tmp VALUES (0.99949452);\n--Testcase 916:\nselect ln(n1) from num_tmp;\n\n--Testcase 917:\nDELETE FROM num_tmp;\n--Testcase 918:\nINSERT INTO num_tmp VALUES (1.00049687395);\n--Testcase 919:\nselect ln(n1) from num_tmp;\n\n--Testcase 920:\nDELETE FROM num_tmp;\n--Testcase 921:\nINSERT INTO num_tmp VALUES (1234.567890123456789);\n--Testcase 922:\nselect ln(n1) from num_tmp;\n\n--Testcase 923:\nDELETE FROM num_tmp;\n--Testcase 924:\nINSERT INTO num_tmp VALUES (5.80397490724e5);\n--Testcase 925:\nselect ln(n1) from num_tmp;\n\n--Testcase 926:\nDELETE FROM num_tmp;\n--Testcase 927:\nINSERT INTO num_tmp VALUES (9.342536355e34);\n--Testcase 928:\nselect ln(n1) from num_tmp;\n\n--\n-- Tests for LOG() (base 10)\n--\n\n-- invalid inputs\n--Testcase 929:\nDELETE FROM num_tmp;\n--Testcase 930:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 931:\nselect log(n1) from num_tmp;\n\n--Testcase 932:\nDELETE FROM num_tmp;\n--Testcase 933:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 934:\nselect log(n1) from num_tmp;\n\n-- some random tests\n--Testcase 935:\nDELETE FROM num_tmp;\n--Testcase 936:\nINSERT INTO num_tmp VALUES (1.234567e-89);\n--Testcase 937:\nselect log(n1) from num_tmp;\n\n--Testcase 938:\nDELETE FROM num_tmp;\n--Testcase 939:\nINSERT INTO num_tmp VALUES (3.4634998359873254962349856073435545);\n--Testcase 940:\nselect log(n1) from num_tmp;\n\n--Testcase 941:\nDELETE FROM num_tmp;\n--Testcase 942:\nINSERT INTO num_tmp VALUES (9.999999999999999999);\n--Testcase 943:\nselect log(n1) from num_tmp;\n\n--Testcase 944:\nDELETE FROM num_tmp;\n--Testcase 945:\nINSERT INTO num_tmp VALUES (10.00000000000000000);\n--Testcase 946:\nselect log(n1) from num_tmp;\n\n--Testcase 947:\nDELETE FROM num_tmp;\n--Testcase 948:\nINSERT INTO num_tmp VALUES (10.00000000000000001);\n--Testcase 949:\nselect log(n1) from num_tmp;\n\n--Testcase 950:\nDELETE FROM num_tmp;\n--Testcase 951:\nINSERT INTO num_tmp VALUES (590489.45235237);\n--Testcase 952:\nselect log(n1) from num_tmp;\n\n--\n-- Tests for LOG() (arbitrary base)\n--\n\n-- invalid inputs\n--Testcase 953:\nDELETE FROM num_tmp;\n--Testcase 954:\nINSERT INTO num_tmp VALUES (-12.34, 56.78);\n--Testcase 955:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 956:\nDELETE FROM num_tmp;\n--Testcase 957:\nINSERT INTO num_tmp VALUES (-12.34, -56.78);\n--Testcase 958:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 959:\nDELETE FROM num_tmp;\n--Testcase 960:\nINSERT INTO num_tmp VALUES (12.34, -56.78);\n--Testcase 961:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 962:\nDELETE FROM num_tmp;\n--Testcase 963:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 964:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 965:\nDELETE FROM num_tmp;\n--Testcase 966:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 967:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 968:\nDELETE FROM num_tmp;\n--Testcase 969:\nINSERT INTO num_tmp VALUES (.0, 12.34);\n--Testcase 970:\nselect log(n1, n2) from num_tmp;\n\n-- some random tests\n--Testcase 971:\nDELETE FROM num_tmp;\n--Testcase 972:\nINSERT INTO num_tmp VALUES (1.23e-89, 6.4689e45);\n--Testcase 973:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 974:\nDELETE FROM num_tmp;\n--Testcase 975:\nINSERT INTO num_tmp VALUES (0.99923, 4.58934e34);\n--Testcase 976:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 977:\nDELETE FROM num_tmp;\n--Testcase 978:\nINSERT INTO num_tmp VALUES (1.000016, 8.452010e18);\n--Testcase 979:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 980:\nDELETE FROM num_tmp;\n--Testcase 981:\nINSERT INTO num_tmp VALUES (3.1954752e47, 9.4792021e-73);\n--Testcase 982:\nselect log(n1, n2) from num_tmp;\n\n--\n-- Tests for scale()\n--\n--Testcase 983:\nDELETE FROM num_tmp;\n--Testcase 984:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 985:\nselect scale(n1) from num_tmp;\n\n--Testcase 1241:\nDELETE FROM num_tmp;\n--Testcase 1242:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1243:\nselect scale(n1) from num_tmp;\n\n--Testcase 986:\nDELETE FROM num_tmp;\n--Testcase 987:\nINSERT INTO num_tmp VALUES (NULL::numeric);\n--Testcase 988:\nselect scale(n1) from num_tmp;\n\n--Testcase 989:\nDELETE FROM num_tmp;\n--Testcase 990:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 991:\nselect scale(n1) from num_tmp;\n\n--Testcase 992:\nDELETE FROM num_tmp;\n--Testcase 993:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 994:\nselect scale(n1) from num_tmp;\n\n--Testcase 995:\nDELETE FROM num_tmp;\n--Testcase 996:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 997:\nselect scale(n1) from num_tmp;\n\n--Testcase 998:\nDELETE FROM num_tmp;\n--Testcase 999:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1000:\nselect scale(n1) from num_tmp;\n\n--Testcase 1001:\nDELETE FROM num_tmp;\n--Testcase 1002:\nINSERT INTO num_tmp VALUES (110123.12475871856128);\n--Testcase 1003:\nselect scale(n1) from num_tmp;\n\n--Testcase 1004:\nDELETE FROM num_tmp;\n--Testcase 1005:\nINSERT INTO num_tmp VALUES (-1123.12471856128);\n--Testcase 1006:\nselect scale(n1) from num_tmp;\n\n--Testcase 1007:\nDELETE FROM num_tmp;\n--Testcase 1008:\nINSERT INTO num_tmp VALUES (-13.000000000000000);\n--Testcase 1009:\nselect scale(n1) from num_tmp;\n\n--\n-- Tests for min_scale()\n--\n--Testcase 1010:\nDELETE FROM num_tmp;\n--Testcase 1011:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1012:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1244:\nDELETE FROM num_tmp;\n--Testcase 1245:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1246:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1013:\nDELETE FROM num_tmp;\n--Testcase 1014:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1015:\nselect min_scale(n1) from num_tmp;                     -- no digits\n\n--Testcase 1016:\nDELETE FROM num_tmp;\n--Testcase 1017:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1018:\nselect min_scale(n1) from num_tmp;                  -- no digits again\n\n--Testcase 1019:\nDELETE FROM num_tmp;\n--Testcase 1020:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 1021:\nselect min_scale(n1) from num_tmp;                   -- no scale\n\n--Testcase 1022:\nDELETE FROM num_tmp;\n--Testcase 1023:\nINSERT INTO num_tmp VALUES (1.1);\n--Testcase 1024:\nselect min_scale(n1) from num_tmp;                   -- scale 1\n\n--Testcase 1025:\nDELETE FROM num_tmp;\n--Testcase 1026:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 1027:\nselect min_scale(n1) from num_tmp;                  -- scale 2\n\n--Testcase 1028:\nDELETE FROM num_tmp;\n--Testcase 1029:\nINSERT INTO num_tmp VALUES (1.123);\n--Testcase 1030:\nselect min_scale(n1) from num_tmp;                 -- scale 3\n\n--Testcase 1031:\nDELETE FROM num_tmp;\n--Testcase 1032:\nINSERT INTO num_tmp VALUES (1.1234);\n--Testcase 1033:\nselect min_scale(n1) from num_tmp;                -- scale 4, filled digit\n\n--Testcase 1034:\nDELETE FROM num_tmp;\n--Testcase 1035:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1036:\nselect min_scale(n1) from num_tmp;               -- scale 5, 2 NDIGITS\n\n--Testcase 1037:\nDELETE FROM num_tmp;\n--Testcase 1038:\nINSERT INTO num_tmp VALUES (1.1000);\n--Testcase 1039:\nselect min_scale(n1) from num_tmp;                -- 1 pos in NDIGITS\n\n--Testcase 1040:\nDELETE FROM num_tmp;\n--Testcase 1041:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1042:\nselect min_scale(n1) from num_tmp;                 -- very big number\n\n--\n-- Tests for trim_scale()\n--\n--Testcase 1043:\nDELETE FROM num_tmp;\n--Testcase 1044:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1045:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1247:\nDELETE FROM num_tmp;\n--Testcase 1248:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1249:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1046:\nDELETE FROM num_tmp;\n--Testcase 1047:\nINSERT INTO num_tmp VALUES (1.120);\n--Testcase 1048:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1049:\nDELETE FROM num_tmp;\n--Testcase 1050:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1051:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1052:\nDELETE FROM num_tmp;\n--Testcase 1053:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1054:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1055:\nDELETE FROM num_tmp;\n--Testcase 1056:\nINSERT INTO num_tmp VALUES (1.1234500);\n--Testcase 1057:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1058:\nDELETE FROM num_tmp;\n--Testcase 1059:\nINSERT INTO num_tmp VALUES (110123.12475871856128000);\n--Testcase 1060:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1061:\nDELETE FROM num_tmp;\n--Testcase 1062:\nINSERT INTO num_tmp VALUES (-123.124718561280000000);\n--Testcase 1063:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1064:\nDELETE FROM num_tmp;\n--Testcase 1065:\nINSERT INTO num_tmp VALUES (-13.00000000000000000000);\n--Testcase 1066:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1067:\nDELETE FROM num_tmp;\n--Testcase 1068:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1069:\nselect trim_scale(n1) from num_tmp;\n\n--\n-- Tests for SUM()\n--\n\n-- cases that need carry propagation\n--Testcase 1070:\nDELETE FROM num_tmp;\n--Testcase 1071:\nINSERT INTO num_tmp SELECT * FROM generate_series(1, 100000);\n--Testcase 1072:\nSELECT SUM(9999::numeric) FROM num_tmp;\n--Testcase 1073:\nSELECT SUM((-9999)::numeric) FROM num_tmp;\n\n--\n-- Tests for VARIANCE()\n--\n--Testcase 1578:\nINSERT INTO num_variance VALUES (0);\n--Testcase 1579:\nINSERT INTO num_variance VALUES (3e-500);\n--Testcase 1580:\nINSERT INTO num_variance VALUES (-3e-500);\n--Testcase 1581:\nINSERT INTO num_variance VALUES (4e-500 - 1e-16383);\n--Testcase 1582:\nINSERT INTO num_variance VALUES (-4e-500 + 1e-16383);\n-- variance is just under 12.5e-1000 and so should round down to 12e-1000\n--Testcase 1583:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1584:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\nROLLBACK;\n\n-- case where sum of squares would overflow but variance does not\n--Testcase 1585:\nDELETE FROM num_variance;\n--Testcase 1586:\nINSERT INTO num_variance SELECT 9e131071 + x FROM generate_series(1, 5) x;\n--Testcase 1587:\nSELECT variance(a) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1588:\nSELECT variance(a) FROM num_variance;\nROLLBACK;\n\n--\n-- Tests for GCD()\n--\n--Testcase 1074:\nDELETE FROM num_tmp;\n--Testcase 1075:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 46375::numeric),\n             (433125::numeric, 46375::numeric),\n             (43312.5::numeric, 4637.5::numeric),\n             (4331.250::numeric, 463.75000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n\n--Testcase 1076:\nSELECT n1 as a, n2 as b, gcd(n1, n2), gcd(n1, -n2), gcd(-n2, n1), gcd(-n2, -n1) FROM num_tmp;\n--\n-- Tests for LCM()\n--\n--Testcase 1077:\nDELETE FROM num_tmp;\n--Testcase 1078:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 13272::numeric),\n             (13272::numeric, 13272::numeric),\n             (423282::numeric, 13272::numeric),\n             (42328.2::numeric, 1327.2::numeric),\n             (4232.820::numeric, 132.72000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n--Testcase 1079:\nSELECT n1 as a, n2 as b, lcm(n1, n2), lcm(n1, -n2), lcm(-n2, n1), lcm(-n2, -n1) FROM num_tmp;\n\n--Testcase 1080:\nDELETE FROM num_tmp;\n--Testcase 1081:\nINSERT INTO num_tmp VALUES (10::numeric, 131068); \n--Testcase 1082:\nSELECT lcm(9999 * (n1)^n2 + (n1^n2 - 1), 2) FROM num_tmp; -- overflow\n\n--\n-- Tests for factorial\n--\n--Testcase 1250:\nDELETE FROM num_tmp;\n--Testcase 1251:\nINSERT INTO num_tmp VALUES (4); \n--Testcase 1252:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1253:\nDELETE FROM num_tmp;\n--Testcase 1254:\nINSERT INTO num_tmp VALUES (15); \n--Testcase 1255:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1256:\nDELETE FROM num_tmp;\n--Testcase 1257:\nINSERT INTO num_tmp VALUES (100000); \n--Testcase 1258:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1259:\nDELETE FROM num_tmp;\n--Testcase 1260:\nINSERT INTO num_tmp VALUES (0); \n--Testcase 1261:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1262:\nDELETE FROM num_tmp;\n--Testcase 1263:\nINSERT INTO num_tmp VALUES (-4); \n--Testcase 1264:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--\n-- Tests for pg_lsn()\n--\n--Testcase 1265:\nDELETE FROM num_tmp;\n--Testcase 1266:\nINSERT INTO num_tmp VALUES (23783416::numeric); \n--Testcase 1267:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1268:\nDELETE FROM num_tmp;\n--Testcase 1269:\nINSERT INTO num_tmp VALUES (0::numeric); \n--Testcase 1270:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1271:\nDELETE FROM num_tmp;\n--Testcase 1272:\nINSERT INTO num_tmp VALUES (18446744073709551615::numeric); \n--Testcase 1273:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1274:\nDELETE FROM num_tmp;\n--Testcase 1275:\nINSERT INTO num_tmp VALUES (-1::numeric); \n--Testcase 1276:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1277:\nDELETE FROM num_tmp;\n--Testcase 1278:\nINSERT INTO num_tmp VALUES (18446744073709551616::numeric); \n--Testcase 1279:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1280:\nDELETE FROM num_tmp;\n--Testcase 1281:\nINSERT INTO num_tmp VALUES ('NaN'::numeric); \n--Testcase 1282:\nSELECT pg_lsn(n1) FROM num_tmp; \n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 1083:\nDROP SERVER sqlite_svr;\n--Testcase 1084:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/out_of_range.sql",
    "content": "--\n-- INT4 + INT2\n--\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 02:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n\n--Testcase 03:\nDELETE FROM INT4_TMP;\n--Testcase 04:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 05:\nINSERT INTO INT4_TMP VALUES (x'7FFFFFFF'::int8 + 1, 0);\n--Testcase 06:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 07:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 08:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 09:\nDELETE FROM INT4_TMP;\n--Testcase 10:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 11:\nINSERT INTO INT4_TMP VALUES (-(x'7FFFFFFF'::int8) - 2, 0);\n--Testcase 12:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 13:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 14:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 15:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 16:\nCREATE FOREIGN TABLE INT2_TMP(f1 int2, f2 int2, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 17:\nDELETE FROM INT2_TMP;\n--Testcase 18:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 19:\nINSERT INTO INT2_TMP VALUES (x'7FFF'::int8 + 1, 0);\n--Testcase 20:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 21:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 22:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 23:\nDELETE FROM INT2_TMP;\n--Testcase 24:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 25:\nINSERT INTO INT2_TMP VALUES (-(x'7FFF'::int8) - 2, 0);\n--Testcase 26:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 27:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 28:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 29:\nCREATE FOREIGN TABLE INT8_TBL(q1 int8 OPTIONS (key 'true'), q2 int8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 31:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 32:\nINSERT INTO INT8_TBL VALUES (-9223372036854775810, 0);\n--Testcase 33:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 34:\nSELECT * FROM INT8_TBL; -- NO overflow\n--Testcase 35:\nSELECT q1 FROM INT8_TBL; -- NO overflow\n--Testcase 36:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 37:\nDELETE FROM INT8_TBL WHERE q1 = -9223372036854775810;\n--Testcase 38:\nINSERT INTO INT8_TBL VALUES (9223372036854775809, 0);\n--Testcase 39:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 40:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 41:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 42:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 43:\nDELETE FROM INT8_TBL WHERE q1 = 9223372036854775809;\n--Testcase 44:\nINSERT INTO INT8_TBL VALUES (10 * -9223372036854775810, 0);\n--Testcase 45:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 46:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 47:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 48:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 49:\nDELETE FROM INT8_TBL WHERE q1 = 10 * -9223372036854775810;\n--Testcase 50:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n\n--Testcase 003:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 004:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/timestamp.sql",
    "content": "--\n-- TIMESTAMP\n--\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 3:\nCREATE FOREIGN TABLE dates1 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number timestamp without time zone OPTIONS (column_type 'INT'))\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n--Testcase 4:\nCREATE FOREIGN TABLE dates2 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number double precision)\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n-- Showing timestamp column from SQLite value as TEXT and as INTEGER/FLOAT has same value\n--Testcase 5:\nSELECT name,\n\tto_char(date_as_text, \t'YYYY-MM-DD HH24:MI:SS.MS') as date_as_text, \n\tto_char(date_as_number, 'YYYY-MM-DD HH24:MI:SS.MS') as date_as_number\nFROM dates1;\n--Testcase 6:\nSELECT * FROM dates2;\n\n-- Comparing exact values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 7:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 8:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 9:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 10:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n-- Comparing greater values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 11:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 12:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 13:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 14:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 15:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 16:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 17:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 18:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--- Comparing without using to_timestamp\n--Testcase 19:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 20:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 21:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 22:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 23:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 24:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 25:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 26:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n-- Comparing greater values  without using to_timestamp\n\n\n--Testcase 27:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 28:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 29:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 30:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 31:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 32:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 33:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 34:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 35:\nDROP FOREIGN TABLE dates1;\n--Testcase 36:\nDROP FOREIGN TABLE dates2;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/types/uuid.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_UUID\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 012:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 013:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 014:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 015:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 016:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 017:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 018:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 019:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 020:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 021:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 022:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 023:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 024:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 025:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 026:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 029:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 030:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 031:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 032:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 033:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 034:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 035:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 036:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 037:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 038:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 039:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 040:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 041:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 042:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 043:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 044:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 045:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 046:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 047:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 048:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 049:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 050:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 051:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 052:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 053:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 054:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 056:\nCREATE FOREIGN TABLE \"type_UUID+\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');\n--Testcase 057:\nSELECT * FROM \"type_UUID+\";\n--Testcase 058:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 059:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 060:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 061:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 062:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 063:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 064:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 065:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 066:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 067:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 068:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 069:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 071:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 072:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 073:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 074:\nSELECT * FROM \"type_UUID+\";\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';\n--Testcase 076:\nSELECT * FROM \"type_UUID+\";\n--Testcase 077:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 077:\nSELECT * FROM \"type_UUID+\";\n--Testcase 078:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');\n--Testcase 079:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 41;\n--Testcase 080:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 081:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 082:\nSELECT * FROM \"type_UUID+\";\n--Testcase 083:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 086:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));\n--Testcase 087:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));\n--Testcase 088:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 089:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 42;\n--Testcase 090:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 43;\n--Testcase 091:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 092:\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 093:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (44, NULL);\n--Testcase 094:\nSELECT * FROM \"type_UUID+\";\n--Testcase 095:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 096:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n\n--Testcase 100:\nCREATE FOREIGN TABLE \"type_UUIDpk\" (col uuid OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 101:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (ADD column_type 'TEXT');\n--Testcase 102:\nINSERT INTO \"type_UUIDpk\" VALUES ('{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 103:\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 104:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 105: ERR - primary key\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 106:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 107: NO ERR, but the same semantics!\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 108:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 109:\nDELETE FROM \"type_UUIDpk\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/with_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/with_gis_support/postgis.sql",
    "content": "--Testcase 2:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 3:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 4:\nCREATE EXTENSION IF NOT EXISTS postgis;\n--Testcase 5:\nCREATE EXTENSION postgis_raster;\n--Testcase 6:\nCREATE EXTENSION postgis_topology;\n\n-- TEST GIS DATA FROM UNION ASTRONOMIQUE INTERNATIONAL (国際天文学連合): MARS, Olympus mons\n--Testcase 11:\nCREATE SCHEMA \"♂\";\n--Testcase 12:\nCREATE TABLE \"♂\".\"テスト\" (\n\tid int4 NULL,\n\t\"UAI\" varchar(254) NULL,\n\t\"⌖\" public.geometry(point, 104904) NULL,\n\tgeom public.geometry(geometry, 104904) NULL,\n\t\"t₀\" date NULL,\n\t\"class\" text NULL,\n\t\"URL\" varchar(80) NULL\n);\n--Testcase 13: ETC...\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(991, 'Olympus Mons', 'SRID=104904;POINT (226.19749330952843 18.652758890345698)'::geometry, 'SRID=104904;MULTIPOLYGON (((223.78717231750488 23.3314151763916, 224.22803688049316 23.324007034301758, 224.32436180114746 23.5648136138916, 224.7186985015869 23.593564987182617, 224.79486274719238 23.45737648010254, 225.06530570983887 23.238798141479492, 225.67255210876465 23.437196731567383, 226.2211856842041 23.6611385345459, 226.5472011566162 23.65372657775879, 227.6215763092041 23.435148239135742, 228.19009590148926 23.390283584594727, 228.753023147583 23.24955177307129, 228.90711784362793 23.1943416595459, 229.23219108581543 23.004926681518555, 229.5288143157959 22.75514030456543, 229.87227058410645 22.442903518676758, 230.2469539642334 22.14628028869629, 230.7309169769287 21.927717208862305, 231.30854988098145 21.64670753479004, 231.85495948791504 21.084684371948242, 232.19841957092285 19.88258171081543, 231.88618278503418 18.47752571105957, 231.30854988098145 17.743772506713867, 231.21887397766113 17.218599319458008, 231.17812156677246 16.751802444458008, 230.97346687316895 16.353670120239258, 230.8327350616455 15.947111129760742, 230.62945365905762 15.478002548217773, 230.4574489593506 15.352907180786133, 230.20748329162598 15.29954719543457, 229.99631309509277 15.036508560180664, 229.72586631774902 14.640104293823242, 229.41096305847168 14.377065658569336, 228.98862266540527 14.10291862487793, 228.74040412902832 13.854700088500977, 228.5107135772705 13.83247184753418, 228.31806755065918 13.962137222290039, 227.93990516662598 13.929948806762695, 227.36133766174316 13.883039474487305, 227.04734230041504 13.813947677612305, 226.68895149230957 13.851762771606445, 226.4101276397705 13.839879989624023, 226.06347465515137 13.632848739624023, 225.7766170501709 13.617597579956055, 225.32925987243652 13.481771469116211, 224.76723670959473 13.591054916381836, 224.15838050842285 13.731557846069336, 223.12800407409668 14.106241226196289, 222.39425468444824 14.402864456176758, 221.67611503601074 14.918050765991211, 221.434663772583 15.403280258178711, 221.30129432678223 16.051607131958008, 221.0864200592041 16.410966873168945, 221.09012413024902 16.6591854095459, 221.1975612640381 17.09263801574707, 220.9971103668213 17.32316017150879, 220.75670051574707 17.422361373901367, 220.82338523864746 17.844701766967773, 221.18475532531738 18.073732376098633, 221.3567600250244 18.5584774017334, 221.40367317199707 19.10576820373535, 221.3567600250244 19.90325355529785, 221.42725563049316 20.59361457824707, 221.778959274292 21.40439796447754, 222.34188652038574 22.201879501342773, 223.01658821105957 23.272138595581055, 223.3759479522705 23.668546676635742, 223.3722438812256 23.675954818725586, 223.57600212097168 23.675954818725586, 223.70566749572754 23.542585372924805, 223.78717231750488 23.3314151763916)))'::geometry, '1973-01-01', 'mo', 'http://planetarynames.wr.usgs.gov/Feature/4453');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(248, 'Karzok', 'SRID=104904;POINT (228.262902951161 18.4035270924109)'::geometry, 'SRID=104904;MULTIPOLYGON (((228.269330978394 18.2748584747314, 228.266962051392 18.2748394012451, 228.264589309692 18.2748584747314, 228.26222038269 18.2749156951904, 228.259851455688 18.2750148773193, 228.257482528687 18.2751522064209, 228.255121231079 18.2753276824951, 228.252759933472 18.2755451202393, 228.250402450562 18.2757968902588, 228.248052597046 18.2760906219482, 228.245706558228 18.2764263153076, 228.243368148804 18.2767963409424, 228.241037368774 18.2772083282471, 228.23871421814 18.2776546478271, 228.236398696899 18.2781429290771, 228.234094619751 18.2786655426025, 228.231798171997 18.2792301177979, 228.229513168335 18.2798328399658, 228.227239608765 18.2804698944092, 228.224977493286 18.2811489105225, 228.222726821899 18.2818622589111, 228.220491409302 18.2826137542725, 228.218271255493 18.2833995819092, 228.216066360474 18.2842235565186, 228.213872909546 18.2850856781006, 228.211698532104 18.285982131958, 228.209539413452 18.2869167327881, 228.207399368286 18.2878856658936, 228.205278396606 18.2888889312744, 228.203172683716 18.2899265289307, 228.201089859009 18.2910022735596, 228.199026107788 18.2921085357666, 228.196981430054 18.2932529449463, 228.194959640503 18.2944278717041, 228.192956924438 18.2956371307373, 228.190980911255 18.2968769073486, 228.189023971558 18.2981548309326, 228.187093734741 18.2994594573975, 228.185186386108 18.3007984161377, 228.183305740356 18.3021678924561, 228.181447982788 18.3035678863525, 228.179616928101 18.3050022125244, 228.177812576294 18.3064632415771, 228.176038742065 18.307954788208, 228.174287796021 18.3094730377197, 228.172567367554 18.3110218048096, 228.170873641968 18.3126010894775, 228.16921043396 18.3142032623291, 228.16757774353 18.3158359527588, 228.165975570679 18.3174953460693, 228.164403915405 18.3191814422607, 228.162858963013 18.320894241333, 228.161352157593 18.3226299285889, 228.159872055054 18.3243923187256, 228.158430099487 18.3261775970459, 228.157014846802 18.3279857635498, 228.155637741089 18.3298168182373, 228.154294967651 18.3316707611084, 228.152982711792 18.3335475921631, 228.151708602905 18.3354473114014, 228.150468826294 18.337366104126, 228.149263381958 18.3393039703369, 228.148092269897 18.3412647247314, 228.14695930481 18.343240737915, 228.145864486694 18.3452396392822, 228.144804000854 18.3472537994385, 228.143781661987 18.3492832183838, 228.142793655396 18.3513317108154, 228.141847610474 18.3533954620361, 228.140939712524 18.3554744720459, 228.140066146851 18.3575687408447, 228.139234542847 18.3596782684326, 228.138441085815 18.3617992401123, 228.137685775757 18.3639354705811, 228.136972427368 18.3660831451416, 228.136297225952 18.3682422637939, 228.135660171509 18.3704090118408, 228.135065078735 18.3725872039795, 228.134511947632 18.37477684021, 228.133996963501 18.376974105835, 228.133520126343 18.3791828155518, 228.133085250854 18.3813953399658, 228.132692337036 18.3836154937744, 228.132341384888 18.3858432769775, 228.132028579712 18.3880748748779, 228.131757736206 18.3903102874756, 228.13152885437 18.3925533294678, 228.131341934204 18.39479637146, 228.131196975708 18.3970432281494, 228.131090164185 18.3992938995361, 228.131025314331 18.4015445709229, 228.131002426147 18.4037952423096, 228.131021499634 18.4060459136963, 228.13108253479 18.408296585083, 228.131185531616 18.4105472564697, 228.131326675415 18.4127941131592, 228.131513595581 18.4150371551514, 228.13173866272 18.4172801971436, 228.132005691528 18.4195156097412, 228.132314682007 18.4217510223389, 228.132661819458 18.4239749908447, 228.133054733276 18.4261989593506, 228.13348197937 18.4284114837646, 228.133955001831 18.4306163787842, 228.134466171265 18.4328174591064, 228.135019302368 18.4350070953369, 228.135610580444 18.4371852874756, 228.13624382019 18.4393558502197, 228.136919021606 18.4415149688721, 228.137628555298 18.4436626434326, 228.138380050659 18.4457988739014, 228.13917350769 18.4479236602783, 228.140001296997 18.4500331878662, 228.140871047974 18.452127456665, 228.141775131226 18.4542064666748, 228.142721176147 18.4562740325928, 228.143705368042 18.4583225250244, 228.144723892212 18.460355758667, 228.145784378052 18.4623699188232, 228.146879196167 18.4643688201904, 228.148008346558 18.4663486480713, 228.149175643921 18.4683094024658, 228.150381088257 18.4702472686768, 228.151620864868 18.4721698760986, 228.152894973755 18.4740695953369, 228.154203414917 18.4759464263916, 228.155546188354 18.47780418396, 228.156923294067 18.4796352386475, 228.158334732056 18.4814472198486, 228.159776687622 18.4832363128662, 228.161256790161 18.4849987030029, 228.162763595581 18.4867343902588, 228.164304733276 18.4884471893311, 228.16587638855 18.4901371002197, 228.167478561401 18.4917964935303, 228.169115066528 18.49342918396, 228.170778274536 18.4950351715088, 228.172468185425 18.4966144561768, 228.174192428589 18.4981670379639, 228.175939559937 18.4996891021729, 228.177717208862 18.5011806488037, 228.179521560669 18.5026454925537, 228.181352615356 18.5040760040283, 228.183210372925 18.5054798126221, 228.185094833374 18.5068492889404, 228.187002182007 18.5081920623779, 228.188936233521 18.50950050354, 228.190893173218 18.5107746124268, 228.192869186401 18.5120182037354, 228.194871902466 18.5132274627686, 228.196897506714 18.5144062042236, 228.198942184448 18.5155506134033, 228.201009750366 18.5166568756104, 228.203096389771 18.5177326202393, 228.205202102661 18.5187740325928, 228.207326889038 18.5197811126709, 228.209466934204 18.5207500457764, 228.211629867554 18.5216846466064, 228.213804244995 18.5225811004639, 228.21600151062 18.5234432220459, 228.218210220337 18.5242710113525, 228.220434188843 18.5250568389893, 228.22266960144 18.5258121490479, 228.224924087524 18.5265254974365, 228.227186203003 18.5272045135498, 228.229463577271 18.5278415679932, 228.23175239563 18.5284442901611, 228.234052658081 18.5290088653564, 228.236360549927 18.5295352935791, 228.238679885864 18.5300235748291, 228.241006851196 18.5304698944092, 228.243341445923 18.5308818817139, 228.245683670044 18.5312557220459, 228.248029708862 18.531587600708, 228.250383377075 18.5318813323975, 228.252744674683 18.5321369171143, 228.255109786987 18.5323505401611, 228.257474899292 18.5325298309326, 228.259847640991 18.5326671600342, 228.262216567993 18.5327663421631, 228.26459312439 18.5328235626221, 228.266965866089 18.5328426361084, 228.269342422485 18.5328235626221, 228.271715164185 18.5327625274658, 228.274087905884 18.5326671600342, 228.276456832886 18.5325298309326, 228.278825759888 18.5323505401611, 228.281187057495 18.5321369171143, 228.283548355103 18.5318813323975, 228.285902023315 18.531587600708, 228.288251876831 18.5312519073486, 228.290594100952 18.5308818817139, 228.292928695679 18.5304698944092, 228.295255661011 18.5300197601318, 228.297574996948 18.5295352935791, 228.299882888794 18.5290088653564, 228.302179336548 18.5284442901611, 228.304468154907 18.5278415679932, 228.306745529175 18.5272006988525, 228.309011459351 18.5265254974365, 228.311262130737 18.5258083343506, 228.313501358032 18.5250568389893, 228.315725326538 18.5242671966553, 228.317934036255 18.5234432220459, 228.320127487183 18.5225811004639, 228.322305679321 18.5216808319092, 228.324464797974 18.5207462310791, 228.326608657837 18.5197772979736, 228.328733444214 18.5187702178955, 228.330839157104 18.5177326202393, 228.332925796509 18.5166568756104, 228.334989547729 18.5155467987061, 228.337034225464 18.5144023895264, 228.339059829712 18.5132274627686, 228.341062545776 18.5120143890381, 228.343042373657 18.5107707977295, 228.344995498657 18.5094966888428, 228.346929550171 18.5081882476807, 228.348836898804 18.5068454742432, 228.350721359253 18.5054759979248, 228.352579116821 18.5040721893311, 228.354410171509 18.5026416778564, 228.356214523315 18.5011768341064, 228.357992172241 18.4996852874756, 228.359739303589 18.4981632232666, 228.361463546753 18.4966106414795, 228.363153457642 18.4950313568115, 228.364816665649 18.4934253692627, 228.366449356079 18.491792678833, 228.368055343628 18.4901294708252, 228.369626998901 18.4884433746338, 228.371168136597 18.4867305755615, 228.372674942017 18.4849910736084, 228.374151229858 18.4832286834717, 228.375597000122 18.4814434051514, 228.37700843811 18.4796314239502, 228.378385543823 18.4778003692627, 228.379728317261 18.4759426116943, 228.381036758423 18.4740619659424, 228.38231086731 18.4721660614014, 228.383550643921 18.4702434539795, 228.38475227356 18.4683017730713, 228.385919570923 18.4663410186768, 228.387052536011 18.4643650054932, 228.388147354126 18.462366104126, 228.389204025269 18.4603481292725, 228.390226364136 18.4583187103271, 228.391206741333 18.4562664031982, 228.392152786255 18.4542026519775, 228.393060684204 18.4521198272705, 228.393926620483 18.4500255584717, 228.394758224487 18.4479160308838, 228.395547866821 18.4457950592041, 228.396299362183 18.4436588287354, 228.397012710571 18.4415111541748, 228.39768409729 18.4393520355225, 228.398317337036 18.4371814727783, 228.398908615112 18.4349994659424, 228.399461746216 18.4328098297119, 228.399972915649 18.4306125640869, 228.40044593811 18.4284076690674, 228.400876998901 18.4261913299561, 228.401266098022 18.4239711761475, 228.401613235474 18.4217433929443, 228.401922225952 18.4195117950439, 228.402189254761 18.417272567749, 228.402414321899 18.4150333404541, 228.402597427368 18.4127864837646, 228.402742385864 18.4105396270752, 228.40284538269 18.4082927703857, 228.402902603149 18.406042098999, 228.402921676636 18.403787612915, 228.402898788452 18.4015369415283, 228.402837753296 18.3992862701416, 228.402730941772 18.3970394134521, 228.402585983276 18.3947887420654, 228.402395248413 18.3925457000732, 228.402166366577 18.3903064727783, 228.401895523071 18.3880672454834, 228.401586532593 18.385835647583, 228.401231765747 18.3836116790771, 228.400838851929 18.3813877105713, 228.40040397644 18.3791751861572, 228.399930953979 18.3769702911377, 228.399415969849 18.3747730255127, 228.398859024048 18.3725833892822, 228.398263931274 18.3704051971436, 228.397626876831 18.3682346343994, 228.396951675415 18.3660755157471, 228.396238327026 18.3639316558838, 228.395483016968 18.361795425415, 228.394689559937 18.3596744537354, 228.393857955933 18.3575649261475, 228.392988204956 18.3554706573486, 228.39207649231 18.3533916473389, 228.391130447388 18.3513278961182, 228.390146255493 18.3492794036865, 228.389120101929 18.3472461700439, 228.388063430786 18.3452320098877, 228.386964797974 18.3432369232178, 228.385831832886 18.3412609100342, 228.384660720825 18.3393001556396, 228.383455276489 18.3373622894287, 228.382215499878 18.3354434967041, 228.380941390991 18.3335437774658, 228.379629135132 18.3316669464111, 228.378286361694 18.32981300354, 228.376905441284 18.3279819488525, 228.375494003296 18.3261699676514, 228.374048233032 18.3243846893311, 228.37257194519 18.3226261138916, 228.371061325073 18.3208866119385, 228.369520187378 18.3191776275635, 228.367948532104 18.3174915313721, 228.366346359253 18.3158321380615, 228.364709854126 18.3141994476318, 228.363046646118 18.3125972747803, 228.361356735229 18.3110179901123, 228.359636306763 18.3094692230225, 228.357885360718 18.3079509735107, 228.356107711792 18.3064594268799, 228.354303359985 18.3049983978271, 228.352472305298 18.3035640716553, 228.350618362427 18.3021640777588, 228.348733901978 18.3007946014404, 228.346826553345 18.2994556427002, 228.344896316528 18.2981510162354, 228.342943191528 18.2968769073486, 228.340963363647 18.29563331604, 228.33896446228 18.2944240570068, 228.336938858032 18.293249130249, 228.334897994995 18.2921085357666, 228.332830429077 18.2909984588623, 228.33074760437 18.2899265289307, 228.328645706177 18.2888851165771, 228.3265209198 18.2878818511963, 228.324380874634 18.2869129180908, 228.322221755981 18.285982131958, 228.32004737854 18.2850856781006, 228.31785774231 18.2842235565186, 228.315649032593 18.2833995819092, 228.313428878784 18.2826099395752, 228.311193466187 18.2818584442139, 228.3089427948 18.2811450958252, 228.306684494019 18.2804698944092, 228.304410934448 18.2798290252686, 228.302125930786 18.2792301177979, 228.299829483032 18.2786655426025, 228.297521591187 18.2781391143799, 228.295206069946 18.2776546478271, 228.292882919312 18.2772045135498, 228.290552139282 18.2767963409424, 228.288213729858 18.2764225006104, 228.28586769104 18.2760906219482, 228.283517837524 18.2757968902588, 228.281160354614 18.2755451202393, 228.278802871704 18.2753276824951, 228.276437759399 18.2751522064209, 228.274072647095 18.2750148773193, 228.271703720093 18.2749156951904, 228.269330978394 18.2748584747314)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14144');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(249, 'Pangboche', 'SRID=104904;POINT (226.595873773026 17.2783598670807)'::geometry, 'SRID=104904;MULTIPOLYGON (((226.601442337036 17.1929302215576, 226.599878311157 17.1929187774658, 226.598310470581 17.1929302215576, 226.596746444702 17.1929721832275, 226.595178604126 17.1930370330811, 226.593618392944 17.1931285858154, 226.592054367065 17.1932430267334, 226.590497970581 17.1933879852295, 226.588941574097 17.1935558319092, 226.587385177612 17.193754196167, 226.585836410522 17.1939754486084, 226.58429145813 17.1942195892334, 226.582754135132 17.1944942474365, 226.581216812134 17.1947917938232, 226.57968711853 17.1951160430908, 226.578165054321 17.195463180542, 226.576650619507 17.195837020874, 226.57513999939 17.1962375640869, 226.573637008667 17.1966648101807, 226.572145462036 17.197114944458, 226.570657730103 17.1975879669189, 226.569181442261 17.1980876922607, 226.567712783813 17.1986103057861, 226.566255569458 17.1991596221924, 226.564809799194 17.1997318267822, 226.563371658325 17.2003269195557, 226.561948776245 17.20094871521, 226.56053352356 17.2015933990479, 226.559129714966 17.2022609710693, 226.557741165161 17.2029514312744, 226.556364059448 17.2036647796631, 226.555002212524 17.2044010162354, 226.553651809692 17.2051601409912, 226.552316665649 17.2059421539307, 226.550992965698 17.2067432403564, 226.549688339233 17.2075710296631, 226.54839515686 17.2084178924561, 226.547121047974 17.2092876434326, 226.545862197876 17.2101764678955, 226.544618606567 17.211088180542, 226.543394088745 17.2120189666748, 226.542184829712 17.2129688262939, 226.540990829468 17.2139415740967, 226.539819717407 17.2149333953857, 226.538663864136 17.2159404754639, 226.537527084351 17.2169704437256, 226.536409378052 17.2180194854736, 226.535310745239 17.219087600708, 226.534231185913 17.2201709747314, 226.533174514771 17.2212734222412, 226.532133102417 17.2223949432373, 226.531118392944 17.2235317230225, 226.530118942261 17.2246875762939, 226.529146194458 17.2258586883545, 226.528188705444 17.2270450592041, 226.527257919312 17.2282466888428, 226.526346206665 17.2294635772705, 226.525461196899 17.2306995391846, 226.52459526062 17.2319469451904, 226.523752212524 17.2332057952881, 226.522932052612 17.2344837188721, 226.522138595581 17.2357730865479, 226.521364212036 17.2370738983154, 226.520616531372 17.2383899688721, 226.519891738892 17.2397136688232, 226.519193649292 17.2410526275635, 226.518518447876 17.2424030303955, 226.517869949341 17.2437648773193, 226.517244338989 17.245138168335, 226.516641616821 17.2465190887451, 226.516069412231 17.2479114532471, 226.515520095825 17.2493152618408, 226.514993667603 17.2507228851318, 226.514497756958 17.2521419525146, 226.514024734497 17.253568649292, 226.513578414917 17.2550029754639, 226.513158798218 17.2564449310303, 226.512765884399 17.2578945159912, 226.512399673462 17.2593479156494, 226.512060165405 17.2608089447021, 226.511747360229 17.2622776031494, 226.511461257935 17.2637462615967, 226.511201858521 17.2652225494385, 226.510969161987 17.2667026519775, 226.510766983032 17.2681865692139, 226.510587692261 17.2696743011475, 226.51043510437 17.2711620330811, 226.510313034058 17.2726535797119, 226.510217666626 17.27414894104, 226.510149002075 17.2756404876709, 226.510107040405 17.277135848999, 226.510091781616 17.2786350250244, 226.510103225708 17.2801303863525, 226.510145187378 17.2816257476807, 226.510213851929 17.2831211090088, 226.510305404663 17.2846164703369, 226.510431289673 17.2861080169678, 226.510580062866 17.2875957489014, 226.51075553894 17.289083480835, 226.510957717896 17.2905673980713, 226.511190414429 17.2920475006104, 226.511449813843 17.2935237884521, 226.51173210144 17.2949924468994, 226.512044906616 17.2964611053467, 226.512384414673 17.2979221343994, 226.51275062561 17.2993755340576, 226.513139724731 17.3008251190186, 226.513559341431 17.302267074585, 226.514001846313 17.3037014007568, 226.514474868774 17.3051280975342, 226.514970779419 17.306547164917, 226.515493392944 17.3079586029053, 226.516042709351 17.309362411499, 226.51661491394 17.310754776001, 226.517213821411 17.3121356964111, 226.517839431763 17.3135089874268, 226.518487930298 17.3148708343506, 226.519163131714 17.3162212371826, 226.519861221313 17.3175601959229, 226.520586013794 17.3188877105713, 226.521333694458 17.3202037811279, 226.522104263306 17.3215045928955, 226.522897720337 17.3227939605713, 226.523717880249 17.3240718841553, 226.524557113647 17.3253345489502, 226.525423049927 17.3265819549561, 226.52631187439 17.3278141021729, 226.527219772339 17.3290348052979, 226.528150558472 17.3302364349365, 226.529108047485 17.3314228057861, 226.530080795288 17.3325939178467, 226.531076431274 17.3337497711182, 226.532094955444 17.3348903656006, 226.533132553101 17.3360080718994, 226.53419303894 17.3371143341064, 226.535272598267 17.3381977081299, 226.536371231079 17.3392658233643, 226.537488937378 17.3403148651123, 226.538625717163 17.341344833374, 226.539781570435 17.3423557281494, 226.540952682495 17.3433475494385, 226.542146682739 17.3443202972412, 226.543355941772 17.3452739715576, 226.544580459595 17.3462047576904, 226.545824050903 17.3471164703369, 226.547082901001 17.3480052947998, 226.548360824585 17.3488750457764, 226.549654006958 17.3497219085693, 226.550958633423 17.350549697876, 226.552282333374 17.351354598999, 226.553617477417 17.3521366119385, 226.554967880249 17.3528957366943, 226.55633354187 17.3536319732666, 226.557710647583 17.3543453216553, 226.559099197388 17.3550395965576, 226.560503005981 17.3557071685791, 226.561918258667 17.356351852417, 226.563344955444 17.356969833374, 226.564783096313 17.3575687408447, 226.566232681274 17.3581409454346, 226.56768989563 17.3586902618408, 226.569158554077 17.3592128753662, 226.570634841919 17.359712600708, 226.572122573853 17.3601894378662, 226.573617935181 17.3606395721436, 226.575120925903 17.36106300354, 226.576631546021 17.3614635467529, 226.578149795532 17.361837387085, 226.579675674438 17.3621883392334, 226.581205368042 17.362512588501, 226.58274269104 17.3628101348877, 226.584283828735 17.3630847930908, 226.585828781128 17.3633289337158, 226.587377548218 17.3635501861572, 226.588933944702 17.363748550415, 226.590490341187 17.3639163970947, 226.592050552368 17.3640613555908, 226.593614578247 17.3641757965088, 226.595178604126 17.3642673492432, 226.596746444702 17.3643321990967, 226.598314285278 17.3643741607666, 226.599882125854 17.3643856048584, 226.601449966431 17.3643741607666, 226.603017807007 17.3643321990967, 226.604581832886 17.3642673492432, 226.606145858765 17.3641757965088, 226.607709884644 17.3640613555908, 226.609270095825 17.3639163970947, 226.610830307007 17.3637447357178, 226.612382888794 17.3635501861572, 226.613931655884 17.3633289337158, 226.615480422974 17.3630809783936, 226.617021560669 17.3628101348877, 226.618558883667 17.362512588501, 226.620088577271 17.3621883392334, 226.621610641479 17.361837387085, 226.623128890991 17.3614635467529, 226.624639511108 17.36106300354, 226.626142501831 17.3606395721436, 226.627637863159 17.3601856231689, 226.629125595093 17.359712600708, 226.630601882935 17.3592128753662, 226.632070541382 17.3586902618408, 226.633531570435 17.3581409454346, 226.634977340698 17.3575687408447, 226.636415481567 17.356969833374, 226.637842178345 17.3563480377197, 226.63925743103 17.3557033538818, 226.640661239624 17.3550357818604, 226.642049789429 17.3543453216553, 226.643426895142 17.3536319732666, 226.644792556763 17.3528957366943, 226.646142959595 17.3521327972412, 226.647478103638 17.3513507843018, 226.648801803589 17.3505458831787, 226.650110244751 17.3497219085693, 226.651399612427 17.3488750457764, 226.652677536011 17.3480052947998, 226.653936386108 17.3471126556396, 226.655179977417 17.3462009429932, 226.656408309937 17.3452701568604, 226.65761756897 17.3443202972412, 226.658807754517 17.3433475494385, 226.659982681274 17.3423557281494, 226.661138534546 17.341344833374, 226.662275314331 17.3403148651123, 226.66339302063 17.3392658233643, 226.664487838745 17.3381977081299, 226.665567398071 17.3371105194092, 226.666627883911 17.3360080718994, 226.667665481567 17.3348865509033, 226.668684005737 17.3337459564209, 226.669679641724 17.3325939178467, 226.670656204224 17.3314228057861, 226.67160987854 17.3302326202393, 226.672540664673 17.3290309906006, 226.673448562622 17.3278141021729, 226.674337387085 17.3265781402588, 226.675203323364 17.3253307342529, 226.676042556763 17.324068069458, 226.676862716675 17.3227939605713, 226.677656173706 17.3215007781982, 226.678426742554 17.3201999664307, 226.679174423218 17.318883895874, 226.679899215698 17.3175563812256, 226.680597305298 17.3162174224854, 226.681272506714 17.3148670196533, 226.681921005249 17.3135051727295, 226.682546615601 17.3121318817139, 226.683145523071 17.3107509613037, 226.683717727661 17.3093585968018, 226.684267044067 17.307954788208, 226.684789657593 17.3065433502197, 226.685285568237 17.3051242828369, 226.685754776001 17.3036975860596, 226.686201095581 17.3022632598877, 226.686616897583 17.3008213043213, 226.687009811401 17.2993717193604, 226.687376022339 17.2979183197021, 226.687715530396 17.2964572906494, 226.688024520874 17.2949886322021, 226.688310623169 17.2935199737549, 226.688570022583 17.2920436859131, 226.688798904419 17.290563583374, 226.689004898071 17.2890796661377, 226.689180374146 17.2875919342041, 226.689329147339 17.2861042022705, 226.689451217651 17.2846126556396, 226.689546585083 17.2831172943115, 226.689615249634 17.2816219329834, 226.689653396606 17.2801265716553, 226.689668655396 17.2786312103271, 226.689653396606 17.277135848999, 226.689611434937 17.2756366729736, 226.689542770386 17.2741451263428, 226.689443588257 17.2726497650146, 226.689321517944 17.2711582183838, 226.689168930054 17.2696704864502, 226.688993453979 17.2681827545166, 226.688787460327 17.2666988372803, 226.688554763794 17.2652187347412, 226.68829536438 17.2637424468994, 226.688009262085 17.2622737884521, 226.687696456909 17.2608051300049, 226.687356948853 17.2593441009521, 226.686990737915 17.2578907012939, 226.686597824097 17.256441116333, 226.686178207397 17.2549991607666, 226.685731887817 17.2535648345947, 226.685258865356 17.2521381378174, 226.684762954712 17.2507190704346, 226.684236526489 17.2493114471436, 226.683687210083 17.2479076385498, 226.683115005493 17.2465152740479, 226.682512283325 17.2451343536377, 226.681886672974 17.2437610626221, 226.681238174438 17.2424030303955, 226.680562973022 17.2410526275635, 226.679864883423 17.2397136688232, 226.679140090942 17.2383861541748, 226.678392410278 17.2370700836182, 226.677618026733 17.2357692718506, 226.676824569702 17.2344799041748, 226.67600440979 17.2332057952881, 226.675161361694 17.2319431304932, 226.674295425415 17.2306957244873, 226.673410415649 17.2294635772705, 226.672498703003 17.2282428741455, 226.671564102173 17.2270412445068, 226.670610427856 17.2258548736572, 226.669637680054 17.2246837615967, 226.66863822937 17.2235317230225, 226.6676197052 17.22239112854, 226.666582107544 17.2212734222412, 226.665525436401 17.2201709747314, 226.664445877075 17.2190837860107, 226.663347244263 17.2180194854736, 226.662229537964 17.2169704437256, 226.661092758179 17.2159404754639, 226.659936904907 17.2149295806885, 226.658761978149 17.2139377593994, 226.657571792603 17.2129650115967, 226.656362533569 17.2120151519775, 226.655138015747 17.2110843658447, 226.653894424438 17.2101726531982, 226.652635574341 17.2092838287354, 226.651357650757 17.2084140777588, 226.650068283081 17.2075672149658, 226.648759841919 17.2067432403564, 226.647439956665 17.2059383392334, 226.646104812622 17.2051563262939, 226.64475440979 17.2043972015381, 226.643388748169 17.2036609649658, 226.642011642456 17.2029476165771, 226.640623092651 17.2022571563721, 226.639223098755 17.2015895843506, 226.637807846069 17.2009449005127, 226.636381149292 17.2003269195557, 226.63494682312 17.1997318267822, 226.633497238159 17.1991558074951, 226.632040023804 17.1986103057861, 226.630575180054 17.1980838775635, 226.629095077515 17.1975879669189, 226.627611160278 17.1971111297607, 226.62611579895 17.1966609954834, 226.624616622925 17.1962375640869, 226.623106002808 17.195837020874, 226.621587753296 17.195463180542, 226.620065689087 17.1951160430908, 226.618535995483 17.1947917938232, 226.617002487183 17.1944942474365, 226.615461349487 17.1942195892334, 226.613916397095 17.1939716339111, 226.612367630005 17.1937503814697, 226.610815048218 17.1935558319092, 226.609258651733 17.1933879852295, 226.607698440552 17.1932430267334, 226.60613822937 17.1931285858154, 226.604574203491 17.1930370330811, 226.603010177612 17.1929721832275, 226.601442337036 17.1929302215576)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14145');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1849, 'Hermes Patera', 'SRID=104904;POINT (226.57 18.33)'::geometry, 'SRID=104904;POLYGON ((226.27743530274 18.067016601562, 226.25820922852 18.135681152343, 226.255462646485 18.216705322265124, 226.26507568359813 18.293609619139627, 226.25614929199594 18.331375122069314, 226.26095581055 18.369140624999, 226.28842163086 18.465270996093, 226.35159301758 18.528442382812, 226.44772338867 18.577880859374, 226.48480224609438 18.594360351561626, 226.52462768555 18.6026000976555, 226.57955932617 18.608093261718, 226.68118286133 18.586120605468, 226.70590209961 18.569641113281, 226.74435424805 18.539428710937, 226.78555297852 18.514709472656, 226.83224487305 18.498229980468, 226.86932373046687 18.488616943359126, 226.89404296875 18.4721374511715, 226.90090942383 18.451538085937, 226.90640258789 18.410339355468, 226.91189575195 18.380126953124, 226.92013549805 18.322448730468, 226.90640258789 18.251037597656, 226.87344360352 18.187866210937, 226.82949829102 18.146667480468, 226.79379272461 18.113708496093, 226.77456665039 18.102722167968, 226.72787475586 18.119201660156, 226.68392944336 18.141174316406, 226.63723754883125 18.15490722656175, 226.58779907226562 18.14254760742125, 226.56033325195 18.121948242187, 226.52188110352 18.088989257812, 226.48617553711 18.067016601562, 226.45321655274 18.083496093749, 226.38729858399 18.086242675781, 226.32412719727 18.078002929687, 226.27743530274 18.067016601562))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15690');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1688, 'Olympus Rupes', 'SRID=104904;POINT (226.43548539543502 18.401964175317982)'::geometry, 'SRID=104904;MULTILINESTRING ((227.42951774597168 22.934080123901367, 227.93671226501465 22.65593910217285, 228.34573936462402 22.4268856048584, 228.52571296691895 22.295995712280273, 228.67296028137207 22.099660873413086, 228.96746253967285 22.099660873413086, 229.62190437316895 21.739717483520508, 230.1290988922119 21.477941513061523, 230.35815620422363 21.26524543762207, 230.38258171081543 21.086992263793945, 230.2117748260498 20.55558967590332, 230.71787071228027 19.182798385620117, 230.8653507232666 18.500219345092773, 230.8653507232666 18.058469772338867, 230.8653507232666 17.96030616760254, 230.88171195983887 16.978639602661133, 230.9144344329834 16.635053634643555, 230.73446083068848 16.389638900756836, 230.6690158843994 16.242387771606445, 230.55448722839355 15.980611801147461, 230.45632362365723 15.816999435424805, 230.35815620422363 15.506139755249023, 230.0472927093506 15.457056045532227, 229.83220100402832 15.140348434448242, 229.54010200500488 14.73716926574707, 229.22923851013184 14.442667007446289, 228.86929512023926 14.213613510131836, 228.5420742034912 14.05000114440918, 228.2148494720459 14.148168563842773, 227.8221836090088 14.148168563842773, 227.2168254852295 13.984556198120117, 226.85687828063965 13.968194961547852, 226.49693489074707 14.05000114440918, 226.0879077911377 13.77186393737793, 225.80977058410645 13.755502700805664, 225.55567741394043 13.881429672241211, 225.3911952972412 14.058565139770508, 224.9426326751709 14.73716926574707, 224.76265907287598 14.73716926574707, 224.36999320983887 14.573556900024414, 223.97732734680176 14.802610397338867, 223.29015922546387 15.12983512878418, 222.70116233825684 15.391611099243164, 222.4393825531006 15.40797233581543, 221.93218803405762 15.40797233581543, 221.57224464416504 15.66975212097168, 221.4413547515869 16.09514045715332, 221.3431911468506 16.700498580932617, 221.39227104187012 17.07680320739746, 221.16321754455566 17.404027938842773, 220.89009284973145 17.53165626525879, 220.90144157409668 17.84577751159668, 221.14274787902832 17.76296043395996, 221.52316093444824 17.61672019958496, 221.86674308776855 18.074831008911133, 222.06307792663574 18.614748001098633, 221.8994655609131 18.860166549682617, 221.6376895904541 19.252832412719727, 221.62132835388184 19.59641456604004, 221.7358570098877 20.185415267944336, 221.94854927062988 20.774412155151367, 222.079439163208 21.26524543762207, 222.48846626281738 21.854246139526367, 222.99566078186035 22.508691787719727, 223.43741035461426 22.934080123901367, 223.78099250793457 23.13041114807129, 224.04277229309082 23.064966201782227, 224.3045482635498 22.999521255493164, 224.72993659973145 22.934080123901367, 224.9917163848877 22.88499641418457, 225.2862148284912 22.934080123901367, 225.72796440124512 23.01588249206543, 226.2351589202881 23.146772384643555, 226.61146354675293 23.27766227722168, 227.05321311950684 23.097688674926758, 227.42951774597168 22.934080123901367))'::geometry, '1976-01-01', 'ru', 'http://planetarynames.wr.usgs.gov/Feature/4454');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1847, 'Zeus Patera', 'SRID=104904;POINT (227.07 18.39)'::geometry, 'SRID=104904;POLYGON ((226.50457763673 18.675384521485, 226.51556396485 18.70834350586, 226.55401611329 18.766021728516, 226.6254272461 18.820953369141, 226.71881103516 18.853912353516, 226.82043457032 18.886871337891, 226.91107177735 18.886871337891, 226.99621582032 18.875885009766, 227.03741455079 18.873138427735, 226.99346923829 18.831939697266, 226.97973632813 18.77426147461, 226.99896240235 18.702850341797, 227.06213378907 18.631439208985, 227.15002441407 18.584747314454, 227.23516845704 18.568267822266, 227.30383300781875 18.59024047851625, 227.33404541016 18.628692626954, 227.34503173829 18.658905029297, 227.39721679688 18.587493896485, 227.42742919923 18.494110107422, 227.42193603516 18.408966064454, 227.39996337891 18.315582275391, 227.39172363282 18.227691650391, 227.34228515626 18.123321533204, 227.29559326173 18.018951416016, 227.21319580079 17.942047119141, 227.15551757813 17.903594970704, 227.09783935548 17.876129150391, 227.00170898438 17.845916748047, 226.9330444336 17.840423583985, 226.88635253907 17.840423583985, 226.90832519532 17.876129150391, 226.91381835938 17.925567626954, 226.90283203126 17.972259521485, 226.87536621094 18.021697998047, 226.82318115235 18.062896728516, 226.77923583985 18.098602294922, 226.83691406251 18.156280517579, 226.88360595704 18.233184814454, 226.91107177735 18.315582275391, 226.8890991211 18.40072631836, 226.88085937501 18.474884033204, 226.83142089844 18.507843017579, 226.72430419923 18.546295166016, 226.67761230469 18.584747314454, 226.6254272461 18.614959716797, 226.58972167969 18.617706298829, 226.62817382813 18.645172119141, 226.67761230469 18.650665283204, 226.61993408204 18.661651611329, 226.56500244141 18.64242553711, 226.4935913086 18.653411865235, 226.50457763673 18.675384521485))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15689');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1848, 'Athena Patera', 'SRID=104904;POINT (227.18 18.74)'::geometry, 'SRID=104904;POLYGON ((227.0290374756 18.766021728515, 227.04002380372 18.807220458984, 227.06062316896 18.840179443359, 227.08259582521 18.867645263671, 227.12928771974 18.880004882812, 227.17597961427 18.877258300781, 227.22541809083 18.866271972656, 227.28172302247 18.825073242187, 227.31605529786 18.775634765624, 227.328414917 18.731689453124, 227.33116149903 18.691864013671, 227.30369567872 18.656158447265, 227.2844696045 18.619079589843, 227.23915100099 18.599853515624, 227.18147277833 18.599853515624, 227.10594177247 18.624572753906, 227.05513000489 18.665771484374, 227.02491760255 18.705596923828, 227.0207977295 18.744049072265, 227.0290374756 18.766021728515))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15693');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1850, 'Apollo Patera', 'SRID=104904;POINT (226.45 17.94)'::geometry, 'SRID=104904;POLYGON ((226.28540039064 17.909774780272, 226.27441406252 17.938613891601, 226.26754760744 17.981185913085, 226.27716064455 18.027877807616, 226.30325317385 18.074569702147, 226.35818481447 18.091049194335, 226.40075683596 18.091049194335, 226.46804809572 18.073196411132, 226.52572631838 18.045730590819, 226.56967163088 18.023757934569, 226.63146972658 17.946853637694, 226.63558959963 17.878189086913, 226.62185668947 17.83836364746, 226.61911010744 17.806777954101, 226.59439086916 17.788925170897, 226.52847290041 17.780685424804, 226.45980834963 17.808151245116, 226.40899658205 17.832870483397, 226.37878417971 17.841110229491, 226.33758544924 17.864456176757, 226.30462646486 17.887802124022, 226.28540039064 17.909774780272))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15694');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1851, 'Olympus Paterae', 'SRID=104904;POINT (226.81 18.32)'::geometry, 'SRID=104904;POLYGON ((226.14367675781 18.452911376953, 226.16564941406 18.513336181641, 226.2041015625 18.554534912109, 226.23431396484 18.592987060547, 226.30572509766 18.625946044922, 226.36889648438 18.650665283203, 226.42108154297 18.653411865234, 226.45678710938 18.642425537109, 226.49249267578 18.700103759766, 226.54193115234 18.755035400391, 226.58312988281 18.809967041016, 226.65454101563 18.845672607422, 226.72320556641 18.870391845703, 226.82757568359 18.895111083984, 226.88525390625 18.911590576172, 226.96545410157 18.900604248046, 227.0121459961 18.900604248046, 227.04785156251 18.889617919921, 227.08355712891 18.906097412109, 227.13299560548 18.917083740234, 227.21813964844 18.911590576171, 227.28405761719 18.875885009765, 227.33349609376 18.829193115234, 227.37194824219 18.771514892578, 227.37744140626 18.735809326171, 227.38156127930375 18.711776733397812, 227.3808746337928 18.69255065917931, 227.37469482423 18.675384521484, 227.40216064454 18.620452880859, 227.43237304688 18.571014404296, 227.4515991211 18.496856689453, 227.45709228516 18.441925048828, 227.44885253907 18.38150024414, 227.44061279298 18.323822021484, 227.43237304688 18.277130126953, 227.41589355469 18.202972412109, 227.38018798829 18.120574951171, 227.34448242188 18.05191040039, 227.31701660157 17.999725341796, 227.26757812501 17.950286865234, 227.22088623048 17.911834716796, 227.17419433594 17.870635986328, 227.12475585938 17.848663330078, 227.03686523438 17.821197509765, 226.97918701173 17.801971435546, 226.88580322266 17.815704345703, 226.85009765626 17.790985107421, 226.81439208985 17.769012451171, 226.7484741211 17.741546630859, 226.68530273438 17.733306884765, 226.62762451173 17.738800048828, 226.57543945313 17.736053466796, 226.50128173829 17.72232055664, 226.39416503907 17.758026123046, 226.32550048829 17.78823852539, 226.29803466798 17.823944091796, 226.27056884766 17.843170166015, 226.21289062501 17.89810180664, 226.20465087891 17.966766357421, 226.22937011719 18.035430908203, 226.20465087891 18.084869384765, 226.18267822266 18.13980102539, 226.17169189454 18.18374633789, 226.17993164063 18.20571899414, 226.15795898438 18.252410888671, 226.13873291016 18.318328857421, 226.13049316407 18.389739990234, 226.14367675781 18.452911376953))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15695');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1870, 'Dionysus Patera', 'SRID=104904;POINT (226.77 17.96)'::geometry, 'SRID=104904;POLYGON ((226.53973388672 18.046417236328, 226.564453125 18.082122802735, 226.60015869141 18.11508178711, 226.64410400391 18.134307861328, 226.71826171875 18.117828369141, 226.77868652344 18.09310913086, 226.83361816406 18.043670654297, 226.87756347656 17.988739013672, 226.89129638672 17.936553955078, 226.8720703125 17.870635986328, 226.828125 17.82943725586, 226.7484741211 17.799224853516, 226.68530273438 17.793731689453, 226.64959716797 17.78549194336, 226.61389160156 17.782745361328, 226.63037109375 17.848663330078, 226.63037109375 17.914581298828, 226.62213134766 17.972259521485, 226.58093261719 18.021697998047, 226.53973388672 18.046417236328))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15692');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1871, 'Hera Patera', 'SRID=104904;POINT (226.23 18.45)'::geometry, 'SRID=104904;POLYGON ((226.21000671387 18.244171142578, 226.18116760254063 18.30047607421875, 226.17567443848188 18.347167968749623, 226.17155456543125 18.41445922851525, 226.19902038575 18.489990234375377, 226.24021911621563 18.549041748046875, 226.32124328613438 18.602600097655873, 226.37892150879125 18.616333007812376, 226.44209289551 18.61083984375, 226.396774292 18.582000732422, 226.3610687255875 18.55316162109375, 226.31986999512 18.511962890625, 226.2827911377 18.474884033203, 226.27043151856 18.428192138672, 226.24845886231 18.367767333984, 226.24021911621 18.21533203125, 226.21000671387 18.244171142578))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15691');\n\n-- TEST GIS DATA FROM OPENSTREETMAP: EARTH, Ancienne Sylvie\n--Testcase 14:\nCREATE TABLE \"♁\" (\n\tgeom public.geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int8 NOT NULL,\n\tver int2 NOT NULL,\n\tarr _int8 NULL,\n\tt json NULL\n);\n--Testcase 15: ETC...\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4596087 59.6907755)'::geometry, 'node', 1621246531, 4, NULL, '{\"drain\":\"disperse\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601391 59.6904673)'::geometry, 'node', 1621246620, 24, NULL, '{\"access\":\"yes\",\"addr:housenumber\":\"20 литВЕ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Ж.-Ф. Тома де Томон\",\"barrier\":\"gate\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6458/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Ворота памятника Любезным родителям\",\"ref:okn\":\"781610399040286\",\"start_date\":\"1807\",\"tourism\":\"attraction\",\"wikidata\":\"Q118122048\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617098 59.6910199)'::geometry, 'node', 1632220259, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617672 59.6909141)'::geometry, 'node', 1632220283, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461757 59.6909696)'::geometry, 'node', 1632220292, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614802 59.6907676)'::geometry, 'node', 1632220315, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615866 59.6907823)'::geometry, 'node', 1632220319, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611444 59.6908848)'::geometry, 'node', 1632220350, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611916 59.6908345)'::geometry, 'node', 1632220355, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.46127 59.6907954)'::geometry, 'node', 1632220358, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611342 59.6909402)'::geometry, 'node', 1632220359, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614212 59.6910868)'::geometry, 'node', 1632220364, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611621 59.6909941)'::geometry, 'node', 1632220366, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616766 59.6908145)'::geometry, 'node', 1632220378, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616314 59.691059)'::geometry, 'node', 1632220590, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613148 59.6910721)'::geometry, 'node', 1632220686, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613385 59.6907988)'::geometry, 'node', 1632497609, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6476/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Euterpe\",\"material\":\"metal\",\"name\":\"Эвтерпа\",\"name:el\":\"Εὐτέρπη\",\"name:la\":\"Euterpē\",\"name:uk\":\"Евтерпа\",\"name:zh\":\"欧忒耳佩\",\"note\":\"Ошибочно подписано «Clio»\",\"ref\":\"П-61/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614438 59.6907856)'::geometry, 'node', 1632497610, 30, NULL, '{\"alt_name:el\":\"Χλωρίς\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1796\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6475/\",\"historic\":\"yes\",\"historic:start_date\":\"1796\",\"int_name\":\"Flore\",\"material\":\"metal\",\"name\":\"Флора\",\"name:el\":\"Φλόρα\",\"name:en\":\"Flora\",\"ref\":\"П-62/1\",\"ref:okn\":\"781610399040456\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461244 59.690833)'::geometry, 'node', 1632497611, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6470/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Melpomene\",\"material\":\"metal\",\"name\":\"Мельпомена\",\"name:el\":\"Μελπομένη\",\"name:en\":\"Melpomene\",\"name:la\":\"Melpomenē\",\"name:uk\":\"Мельпомена\",\"name:zh\":\"墨爾波墨涅\",\"ref\":\"П-60/1\",\"ref:okn\":\"781610399040376\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617227 59.6909514)'::geometry, 'node', 1632497612, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6468/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Caliope\",\"material\":\"metal\",\"name\":\"Калиопа\",\"name:el\":\"Καλλιόπη\",\"name:la\":\"Calliopē\",\"name:uk\":\"Калліопа\",\"name:zh\":\"卡利俄佩\",\"ref\":\"П-65/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q120979306\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615805 59.6907985)'::geometry, 'node', 1632497613, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6474/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Uranie\",\"material\":\"metal\",\"name\":\"Урания\",\"name:el\":\"Οὐρανία\",\"name:la\":\"Ūrania\",\"ref\":\"П-63/1\",\"ref:okn\":\"78161039904044\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616825 59.6908428)'::geometry, 'node', 1632497614, 29, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6469/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"material\":\"metal\",\"name\":\"Клио\",\"name:el\":\"Κλειώ\",\"name:la\":\"Clīō\",\"note\":\"Подписано «Euterpe»\",\"ref\":\"П-64/1\",\"ref:okn\":\"781610399040466\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614541 59.6909278)'::geometry, 'node', 1632497615, 34, NULL, '{\"alt_name\":\"Аполлон Бельведерский\",\"artist_name\":\"Леохар;модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1782\",\"artwork_type\":\"statue\",\"description\":\"Иконография Бельведерского типа. В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6466/\",\"historic\":\"yes\",\"historic:start_date\":\"1782\",\"material\":\"metal\",\"name\":\"Аполлон\",\"name:en\":\"Apollo\",\"name:zh\":\"阿波罗神像\",\"ref\":\"П-71/1\",\"ref:okn\":\"781610399040386\",\"start_date\":\"1817\",\"tourism\":\"artwork\",\"wikidata\":\"Q118122062\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616021 59.6910564)'::geometry, 'node', 1632497616, 26, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1780\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"historic\":\"yes\",\"historic:start_date\":\"1780\",\"material\":\"metal\",\"name\":\"Венера Каллипиги\",\"ref\":\"П-67/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616651 59.6910293)'::geometry, 'node', 1632497617, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6471/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Polymnia\",\"material\":\"metal\",\"name\":\"Полигимния\",\"name:el\":\"Πολύμνια\",\"name:la\":\"Polyhymnia\",\"name:uk\":\"Полігімнія\",\"name:zh\":\"波吕许谟尼亚\",\"ref\":\"П-66/1\",\"ref:okn\":\"781610399040726\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395079\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614666 59.6910732)'::geometry, 'node', 1632497618, 30, NULL, '{\"alt_name\":\"Гермес Флорентийский\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6467/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Hermes\",\"material\":\"metal\",\"name\":\"Меркурий\",\"name:en\":\"Mercury\",\"ref\":\"П-68/1\",\"ref:okn\":\"781610399040396\",\"start_date\":\"1810\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395060\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613231 59.6910597)'::geometry, 'node', 1632497619, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_subject:wikidata\":\"Q104413\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6477/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Erato\",\"material\":\"metal\",\"name\":\"Эрато\",\"name:el\":\"Ἐρατώ\",\"name:ka\":\"ერატო\",\"name:ko\":\"에라토\",\"name:la\":\"Eratō\",\"name:uk\":\"Ерато\",\"name:zh\":\"厄剌托\",\"ref\":\"П-69/1\",\"ref:okn\":\"781610399040476\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395110\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612077 59.691005)'::geometry, 'node', 1632497620, 31, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6473/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Terpsichore\",\"material\":\"metal\",\"name\":\"Терпсихора\",\"name:el\":\"Τερψιχόρη\",\"name:en\":\"Terpsichore\",\"name:la\":\"Terpsichore\",\"ref\":\"П-70/1\",\"ref:okn\":\"781610399040436\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395096\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611782 59.690902)'::geometry, 'node', 1632497621, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1792\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6472/\",\"historic\":\"yes\",\"historic:start_date\":\"1792\",\"int_name\":\"Thalie\",\"material\":\"metal\",\"name\":\"Талия\",\"name:el\":\"Θαλία\",\"name:la\":\"Thalīa\",\"name:uk\":\"Талія\",\"name:zh\":\"塔利亚\",\"ref\":\"П-59/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612041 59.6907321)'::geometry, 'node', 1632503254, 6, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.462536 59.6908707)'::geometry, 'node', 1652587953, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4619277 59.6908578)'::geometry, 'node', 1652587958, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617256 59.6909215)'::geometry, 'node', 3177639362, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612018 59.6909805)'::geometry, 'node', 3188928044, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613001 59.6906759)'::geometry, 'node', 3218618266, 4, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614144 59.6907882)'::geometry, 'node', 4912277772, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Флора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615482 59.6907937)'::geometry, 'node', 4912277773, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Урания\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613145 59.6908057)'::geometry, 'node', 4912277774, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эвтерпа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616653 59.6908341)'::geometry, 'node', 4912277775, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Клио\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612216 59.6908451)'::geometry, 'node', 4912277776, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Мельпомена\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611751 59.690919)'::geometry, 'node', 4912277777, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Талия\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617272 59.6909351)'::geometry, 'node', 4912277778, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Калиопа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612298 59.691015)'::geometry, 'node', 4912277779, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Терпсихора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616819 59.6910157)'::geometry, 'node', 4912277780, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Полигимния\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461621 59.6910498)'::geometry, 'node', 4912277781, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Венера Каллипиги\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613548 59.6910624)'::geometry, 'node', 4912277782, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эрато\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615016 59.6910712)'::geometry, 'node', 4912277783, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Меркурий\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608954 59.6897746)'::geometry, 'node', 5251698420, 25, NULL, '{\"access\":\"permissive\",\"addr:housenumber\":\"20 литББ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Винченцо Бренна\",\"barrier\":\"gate\",\"description:access\":\"Ворота можно закрывать и открывать руками\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6459/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Большие Старосильвийские ворота\",\"ref\":\"1\",\"ref:okn\":\"781620399040626\",\"start_date\":\"1786..1793\",\"tourism\":\"attraction\",\"website\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"wheelchair\":\"yes\",\"wikidata\":\"Q118122050\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460198 59.6905729)'::geometry, 'node', 6758903438, 6, NULL, '{\"artist_name\":\"И.П. Мартос\",\"artwork_type\":\"sculpture\",\"height\":\"4\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4625734 59.6908311)'::geometry, 'node', 8331430683, 3, NULL, '{\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614743 59.690923)'::geometry, 'node', 8530936200, 1, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Аполлон\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4597619 59.6907527)'::geometry, 'node', 9140565043, 1, NULL, '{\"ford\":\"yes\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4606891 59.6906687)'::geometry, 'node', 9140576937, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608515 59.6907117)'::geometry, 'node', 9140576938, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613945 59.6911519)'::geometry, 'node', 9143069530, 5, NULL, '{\"drain\":\"no\",\"source:direction\":\"survey\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('POINT (30.4615903 59.6911716)'::geometry, 'node', 9143069534, 1, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460339 59.6906064)'::geometry, 'node', 9143093777, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601191 59.6906349)'::geometry, 'node', 9143093778, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610445 59.6908345)'::geometry, 'node', 9143093802, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610243 59.6909861)'::geometry, 'node', 9143093804, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612126 59.691117)'::geometry, 'node', 9143093806, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460445 59.6910504)'::geometry, 'node', 9656736571, 2, NULL, '{\"colour\":\"#4e3a39\",\"description\":\"Веломаршрут №4\",\"height\":\"4\",\"information\":\"guidepost\",\"material\":\"metal\",\"start_date\":\"2021-03..2021-10\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4608056 59.6895935, 30.4608954 59.6897746, 30.4609447 59.6898691, 30.4614541 59.6909278)'::geometry, 'way', 30995960, 42, '{9140727117,5251698420,1518870630,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Центральная аллея\",\"ref\":\"VII\",\"source:name\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605616 59.6906319, 30.4597619 59.6907527, 30.4596087 59.6907755)'::geometry, 'way', 149099000, 6, '{1621246509,9140565043,1621246531}', '{\"intermittent\":\"yes\",\"source:direction\":\"isoline\",\"start_date\":\"1786\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604741 59.6903357, 30.4604598 59.6904575, 30.4604646 59.6905099, 30.4604784 59.6905443, 30.4604933 59.6905665, 30.4605321 59.6905996, 30.4605616 59.6906319)'::geometry, 'way', 149099004, 8, '{1621246503,9140576877,1621246482,1621246465,1621246454,9140576939,1621246509}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601177 59.6905796, 30.4600903 59.6905709, 30.4600721 59.6905605, 30.4600579 59.6905458, 30.4600519 59.6905296, 30.4600545 59.6905133, 30.4600656 59.6904979, 30.4600844 59.6904845, 30.4601095 59.690474, 30.4601391 59.6904673, 30.460169 59.6904648, 30.4601991 59.6904661, 30.4602277 59.6904711, 30.4602498 59.6904787, 30.4602686 59.6904892, 30.4602829 59.6905018, 30.4602918 59.6905174, 30.4602917 59.6905327, 30.4602881 59.6905462, 30.4602793 59.6905579)'::geometry, 'way', 149099028, 5, '{9140576951,9140576902,9140576952,1621246602,1621246607,1621246668,1621246614,1621246615,1621246618,1621246620,1621246630,1621246244,1621246631,1621246224,1621246250,1621246635,1621246647,9140576950,9140576903,9140576949}', '{\"barrier\":\"fence\",\"colour\":\"green\",\"fence_type\":\"wood\",\"height\":\"2\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4603352 59.6911039, 30.460353 59.6910638, 30.4603719 59.6910414, 30.4603979 59.691021, 30.4604807 59.6909761, 30.460577 59.6909284, 30.4606406 59.6908886, 30.460669 59.6908562, 30.460673 59.6908234, 30.4606633 59.6907504, 30.4606582 59.6907286, 30.4606491 59.6907025, 30.4606314 59.690668, 30.460609 59.690636, 30.4605858 59.6906064, 30.4605578 59.6905735, 30.4605362 59.6905385, 30.4605214 59.6905022, 30.4605119 59.6904644, 30.4605095 59.6904098, 30.460512 59.6903499, 30.4605096 59.6903011)'::geometry, 'way', 149099029, 36, '{9140727237,4260007753,9140727241,8650331583,1621246592,1621246588,1621246578,1652603857,9140727240,8650331584,1621246577,9143093738,1621246419,9140576875,1652603906,9140576876,1621246542,8650331586,9140576874,8650331585,1621246403,9140576873,1239612684}', '{\"alt_name\":\"Окружная дорожка\",\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Круговая дорожка\",\"start_date\":\"1789.1793\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610979 59.6907799, 30.4608515 59.6907117)'::geometry, 'way', 149099034, 9, '{1632503255,9140576938}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4629005 59.6913411, 30.4614541 59.6909278)'::geometry, 'way', 150294524, 8, '{1239612692,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"III\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613148 59.6910721, 30.4613667 59.6910818, 30.4614212 59.6910868, 30.4614766 59.6910869, 30.4615311 59.6910822, 30.4615833 59.6910728, 30.4616314 59.691059, 30.461674 59.6910412, 30.4617098 59.6910199, 30.4617378 59.6909958, 30.461757 59.6909696, 30.4617669 59.6909421, 30.4617672 59.6909141, 30.4617579 59.6908866, 30.4617393 59.6908603, 30.4617119 59.690836, 30.4616766 59.6908145, 30.4616343 59.6907964, 30.4615866 59.6907823, 30.4615347 59.6907726, 30.4614802 59.6907676, 30.4614248 59.6907674, 30.4613703 59.6907721, 30.4613181 59.6907815, 30.46127 59.6907954, 30.4612274 59.6908132, 30.4611916 59.6908345, 30.4611636 59.6908586, 30.4611444 59.6908848, 30.4611345 59.6909123, 30.4611342 59.6909402, 30.4611435 59.6909678, 30.4611621 59.6909941, 30.4611895 59.6910184, 30.4612248 59.6910399, 30.461267 59.6910579, 30.4613148 59.6910721)'::geometry, 'way', 150294525, 6, '{1632220686,9143093824,1632220364,9143093807,1632220588,9143093808,1632220590,9143093809,1632220259,9143093810,1632220292,9143093811,1632220283,9143093812,1632220296,9143093813,1632220378,9143093814,1632220319,9143093815,1632220315,9143093816,1632220323,9143093817,1632220358,9143093818,1632220355,9143093819,1632220350,9143093820,1632220359,9143093821,1632220366,9143093822,1632220374,9143093823,1632220686}', '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.460726 59.6910052, 30.460614 59.6910145, 30.4605241 59.69102, 30.4604597 59.691022, 30.4603979 59.691021)'::geometry, 'way', 150294532, 30, '{1632497615,1632220252,9140727238,9140727242,9140727239,1621246592}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"ref\":\"X\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605096 59.6903011, 30.4614541 59.6909278)'::geometry, 'way', 150294541, 8, '{1239612684,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VIII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4617339 59.6901702)'::geometry, 'way', 150294547, 9, '{1632497615,1518870645}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461819 59.6910085, 30.4618473 59.6909863, 30.4618928 59.6909647, 30.461951 59.6909401, 30.4620356 59.6909251, 30.462536 59.6908707)'::geometry, 'way', 152440395, 6, '{1652587944,1652587948,1652587950,9143093800,1652587952,1652587953}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613063 59.6907075, 30.4612631 59.6907161, 30.4612041 59.6907321)'::geometry, 'way', 152442436, 10, '{1652605207,9143204222,1632503254}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4617627 59.6907689, 30.4618218 59.6907946, 30.4618794 59.6908253, 30.4619277 59.6908578)'::geometry, 'way', 152442438, 8, '{1652605205,1652605201,1652605200,1652587958}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4612018 59.6909805, 30.4617256 59.6909215, 30.4625734 59.6908311, 30.4628306 59.6908088)'::geometry, 'way', 311975108, 20, '{3188928044,3177639362,8331430683,7911801321}', '{\"layer\":\"-1\",\"name\":\"Старосильвийская дождевая канализация\",\"source:direction\":\"survey\",\"tunnel\":\"yes\",\"waterway\":\"drain\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611708 59.6911018, 30.4611289 59.6910829, 30.4610793 59.6910531, 30.4610552 59.6910294, 30.4610432 59.6910153, 30.4610243 59.6909861)'::geometry, 'way', 313051687, 8, '{1632503180,9143069533,9143093805,9143069532,1632503185,9143093804}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061)'::geometry, 'way', 426269715, 5, '{4255746051,4255746033,9140576943,9140576942,9140576941,9140576940,4255746057,4255746007,9140576945,9140576946,9140576944,4255746054,4255745992,4255746051}', '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603979 59.691021, 30.4603224 59.6910067, 30.4602382 59.6909843, 30.4601137 59.6909482, 30.4600256 59.6909178, 30.4599203 59.6908773, 30.4597958 59.6908259, 30.4597422 59.6908088, 30.4596966 59.6907997, 30.4596501 59.6907961, 30.4596189 59.6907966, 30.4595885 59.6908005, 30.4595518 59.6908091, 30.4595101 59.6908241)'::geometry, 'way', 438780267, 20, '{1621246592,1621246561,1622496989,8850590008,1621246248,1621246252,8650331580,8849369897,9140576840,8650331579,9140576841,8650331578,9140576842,1622496957}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"loc_name\":\"Спуск у места домика Крик\",\"name\":\"Криковская дорога\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4625498 59.6908065, 30.4614541 59.6909278)'::geometry, 'way', 750779153, 4, '{1632220250,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IV\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4631938 59.6918756)'::geometry, 'way', 750779155, 5, '{1632497615,1195120146}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"II\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4606491 59.6907025)'::geometry, 'way', 750779156, 5, '{1632497615,1621246419}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IX\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4625914 59.6924527)'::geometry, 'way', 750779157, 4, '{1632497615,1652587960}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"I\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611165 59.6918779, 30.46118 59.6916919, 30.4614541 59.6909278)'::geometry, 'way', 750779158, 4, '{9159459639,1239612686,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"XII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4596189 59.6907966, 30.4596712 59.6907865, 30.4597275 59.6907729, 30.459757 59.6907607, 30.4597619 59.6907527, 30.4597677 59.6907431, 30.4597919 59.6907269, 30.4598455 59.6907093, 30.459934 59.6906931, 30.4600118 59.6906782, 30.4600467 59.690666, 30.4600681 59.6906484, 30.4600725 59.6906275, 30.4600655 59.6906044, 30.4600295 59.6905552, 30.4600066 59.6905268, 30.4600031 59.690512, 30.4600111 59.6904995, 30.460044 59.6904799, 30.4600789 59.6904629, 30.4601241 59.6904473)'::geometry, 'way', 988944864, 2, '{9140576841,9140565053,9140565052,9140565051,9140565043,9140565050,9140565049,9140565048,9140565047,9140565046,9140565045,9140565044,1621246253,9140565042,1621246302,1621246323,9140576899,9140576892,9143093786,9143093785,1621246340}', '{\"highway\":\"path\",\"surface\":\"ground\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4607784 59.690696, 30.4606891 59.6906687)'::geometry, 'way', 988944880, 3, '{9140576936,9140576937}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601316 59.6905738, 30.4601383 59.6905745, 30.460144 59.6905725, 30.4601453 59.6905691, 30.4601415 59.6905663, 30.4601348 59.6905656, 30.4601291 59.6905676, 30.4601278 59.6905709, 30.4601316 59.6905738)'::geometry, 'way', 989184163, 1, '{9142788307,9142788306,9142788305,9142788304,9142788303,9142788302,9142788301,9142788300,9142788307}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601637 59.6905695, 30.4601704 59.6905701, 30.4601761 59.6905682, 30.4601774 59.6905648, 30.4601736 59.6905619, 30.4601668 59.6905613, 30.4601612 59.6905632, 30.4601599 59.6905666, 30.4601637 59.6905695)'::geometry, 'way', 989184166, 1, '{9142819031,9142819030,9142819029,9142819028,9142819027,9142819026,9142819025,9142819024,9142819031}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4615026 59.6911479, 30.4614481 59.6911519, 30.4613945 59.6911519)'::geometry, 'way', 989211851, 4, '{1652605211,9143069529,9143069530}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603719 59.6910414, 30.4597387 59.6911122)'::geometry, 'way', 989211857, 12, '{8650331583,4260007752}', '{\"highway\":\"path\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"start_date\":\"1780.1785\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603446 59.6911727, 30.4603806 59.6910714, 30.4603967 59.691047, 30.4604235 59.6910376, 30.4604664 59.6910348, 30.4605415 59.6910308)'::geometry, 'way', 989211858, 1, '{9143069609,9143069608,9143069607,9143069606,9143069605,9143069604}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613583 59.6906799, 30.4614025 59.6907746, 30.461428 59.6907726, 30.4614548 59.6907726, 30.4614763 59.6907739)'::geometry, 'way', 989211859, 1, '{9143093728,9143093727,9143093726,9143093725,9143093724}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461314 59.6906832, 30.461361 59.6907794, 30.4613301 59.6907854, 30.4613033 59.6907929, 30.4612845 59.690799, 30.4609841 59.6905973)'::geometry, 'way', 989211860, 1, '{9143093729,9143093730,9143093731,9143093732,9143093734,9143093733}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611484 59.6909364, 30.4611471 59.6909174, 30.4611497 59.6909005, 30.4611578 59.6908836, 30.4611645 59.6908714, 30.4611739 59.6908606, 30.4606917 59.6907283, 30.460681 59.6907283, 30.460677 59.6907337, 30.460685 59.6907601, 30.4606891 59.6907817, 30.4606917 59.6908129, 30.4606944 59.6908426, 30.4606837 59.6908656, 30.4606596 59.6908927, 30.4606247 59.6909184, 30.460563 59.6909523, 30.460453 59.6910064)'::geometry, 'way', 989211861, 1, '{9143093739,9143093740,9143093741,9143093742,9143093743,9143093744,9143093755,9143093737,9143093736,9143093754,9143093753,9143093722,9143093721,9143093720,9143093719,9143093718,9143093717,9143069616}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605335 59.6903364, 30.4605335 59.6903946, 30.4605308 59.6904501, 30.4605348 59.6904813, 30.4605442 59.6905137, 30.4605576 59.6905394, 30.4605818 59.6905773, 30.4606193 59.6906247, 30.4606408 59.6906545, 30.4606596 59.6906856, 30.4606716 59.6906958, 30.4606958 59.6907039, 30.4611947 59.6908433, 30.4612155 59.6908301, 30.4612369 59.6908166, 30.461253 59.6908098, 30.4609492 59.6906112)'::geometry, 'way', 989211862, 1, '{9143093764,9143093763,9143093762,9143093748,9143093761,9143093760,9143093759,9143093758,9143093757,9143093756,9143093752,9143093751,9143093750,9143093747,9143093746,9143093745,9143093735}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604919 59.6903357, 30.4604919 59.690398, 30.4604892 59.6904494, 30.4604946 59.690486, 30.4605053 59.6905157, 30.4605161 59.6905387, 30.4605402 59.6905766, 30.4605778 59.690624, 30.4605992 59.6906538, 30.460626 59.6906931, 30.4606368 59.6907255, 30.4606448 59.6907574, 30.4606502 59.6907871, 30.4606542 59.6908196, 30.4606502 59.6908494, 30.4606327 59.6908751, 30.4606059 59.6908927, 30.4605496 59.6909266, 30.4604128 59.6909942)'::geometry, 'way', 989211863, 1, '{9143093776,9143093775,9143093774,9143093773,9143093749,9143093772,9143093771,9143093770,9143093769,9143093768,9143093767,9143093765,9143093766,9143069615,9143069610,9143069614,9143069613,9143069612,9143069611}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619893 59.6908956, 30.4620356 59.6909251)'::geometry, 'way', 989211867, 2, '{1652587955,1652587952}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610753 59.6908007, 30.4610979 59.6907799)'::geometry, 'way', 989211868, 4, '{9143093801,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611491 59.6907553, 30.4610979 59.6907799)'::geometry, 'way', 989211869, 4, '{1632503177,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461012 59.6909572, 30.4610056 59.6909157, 30.4610163 59.6908698, 30.4610445 59.6908345)'::geometry, 'way', 989211870, 4, '{1632503179,9143093803,1632503181,9143093802}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613456 59.6911475, 30.46131 59.6911438, 30.4612696 59.6911343, 30.4612126 59.691117)'::geometry, 'way', 989211871, 4, '{1652605209,9143069531,1632503237,9143093806}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4622826 59.6903796)'::geometry, 'way', 991343632, 2, '{1632497615,1518870652}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"V\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4620021 59.690877, 30.4617551 59.6909043, 30.4617579 59.690914, 30.4617593 59.6909255, 30.4617606 59.6909377)'::geometry, 'way', 991343633, 1, '{9159456550,9159456549,9159456545,9159456544,9159456543}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619941 59.6908547, 30.4617471 59.690882, 30.4617392 59.6908714, 30.4617298 59.6908606, 30.4617164 59.6908491)'::geometry, 'way', 991343634, 1, '{9159456552,9159456551,9159456548,9159456547,9159456546}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4602794 59.6911745, 30.4603083 59.6910871)'::geometry, 'way', 991343661, 1, '{9159459675,9159459674}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4614541 59.6909278)'::geometry, 'way', 1042527594, 11, '{9140727237,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч Амфитеатра\",\"ref\":\"XI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4611342 59.6909402, 30.4611345 59.6909123, 30.4611444 59.6908848, 30.4611636 59.6908586, 30.4611916 59.6908345, 30.4612274 59.6908132, 30.46127 59.6907954, 30.4613181 59.6907815, 30.4613703 59.6907721, 30.4614248 59.6907674, 30.4614802 59.6907676, 30.4615347 59.6907726, 30.4615866 59.6907823, 30.4616343 59.6907964, 30.4616766 59.6908145, 30.4617119 59.690836, 30.4617393 59.6908603, 30.4617579 59.6908866, 30.4617672 59.6909141, 30.4617669 59.6909421, 30.461757 59.6909696, 30.4617378 59.6909958, 30.4617098 59.6910199, 30.461674 59.6910412, 30.4616314 59.691059, 30.4615833 59.6910728, 30.4615311 59.6910822, 30.4614766 59.6910869, 30.4614212 59.6910868, 30.4613667 59.6910818, 30.4613148 59.6910721, 30.461267 59.6910579, 30.4612248 59.6910399, 30.4611895 59.6910184, 30.4611621 59.6909941, 30.4611435 59.6909678, 30.4611342 59.6909402)))'::geometry, 'way', 150294525, 6, NULL, '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034)))'::geometry, 'way', 426269715, 5, NULL, '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601599 59.6905666, 30.4601612 59.6905632, 30.4601668 59.6905613, 30.4601736 59.6905619, 30.4601774 59.6905648, 30.4601761 59.6905682, 30.4601704 59.6905701, 30.4601637 59.6905695, 30.4601599 59.6905666)))'::geometry, 'way', 989184166, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography) SERVER sqlite_svr;\n\n--Testcase 41: ERR - raster\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, read PostGOS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49: ERR, no SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 50: ERR, no SRID\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 52:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 53: ERR damaged, but there is SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = (decode('0101000020e6100000bf72ce99fe76', 'hex')::geometry);\n\n-- Insert PostGIS/GEOS BLOB, read SpatiaLite BLOB\n--Testcase 54: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 55:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 56:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 57: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 58:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 59:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 60:  ERR damaged geometry, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (3, decode('0101000020e6100000bf72ce99fe76', 'hex'),  NULL, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 61:  ERR damaged geography, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (4, NULL, decode('0101000020e6100000bf72ce99fe76', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n\n--Testcase 62:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 63:\nINSERT INTO \"♂\" SELECT * FROM \"♂\".\"テスト\";\n--Testcase 64:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 65:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 66:\nSELECT * FROM \"♂\";\n--Testcase 67:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 69:\nSELECT * FROM \"♂\";\n\n--Testcase 70:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL ,\n\tosm_id bigint OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt text\n) SERVER sqlite_svr OPTIONS (table '♁');\n\n--Testcase 71: ERR - No SRID\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\";\n--Testcase 72: OK\nSELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 73:\nUPDATE \"♁\" SET geom = ST_SetSRID(geom, 4326);\n--Testcase 74:\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 75:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 76:\nSELECT * FROM \"♁ FDW\";\n--Testcase 77:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 78:\nSELECT * FROM \"♁ FDW\";\n\n--Testcase 79:\nDROP FOREIGN TABLE \"♂\";\n--Testcase 80:\nDROP FOREIGN TABLE \"♁ FDW\";\n--Testcase 81:\nDROP TABLE \"♁\";\n--Testcase 82:\nDROP TABLE \"♂\".\"テスト\";\n--Testcase 83:\nDROP SCHEMA \"♂\";\n\n-- Test operators implemented in PostGIS 3.4.2, other are not tested\n-- SELECT testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 100   -> TC 150                 -> TC200     -> TC250\n-- WHERE testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 300   -> TC 350                 -> TC400     -> TC450\n\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ gm1 g FROM \"types_PostGIS\";\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && gm1 g FROM \"types_PostGIS\";\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << gm1 g FROM \"types_PostGIS\";\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> gm1 g FROM \"types_PostGIS\";\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< gm1 g FROM \"types_PostGIS\";\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> gm1 g FROM \"types_PostGIS\";\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| gm1 g FROM \"types_PostGIS\";\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> gm1 g FROM \"types_PostGIS\";\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| gm1 g FROM \"types_PostGIS\";\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> gm1 g FROM \"types_PostGIS\";\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= gm1 g FROM \"types_PostGIS\";\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm = gm1 g FROM \"types_PostGIS\";\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| gm1 g FROM \"types_PostGIS\";\n--Testcase 115\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> gm1 g FROM \"types_PostGIS\";\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> gm1 g FROM \"types_PostGIS\";\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ gm1 g FROM \"types_PostGIS\";\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ gm1 g FROM \"types_PostGIS\";\n\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 157:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 159:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> gg1 g FROM \"types_PostGIS\";\n--Testcase 201:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && gg1 g FROM \"types_PostGIS\";\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> gg1 g FROM \"types_PostGIS\";\n--Testcase 203:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg = gg1 g FROM \"types_PostGIS\";\n--Testcase 204\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != gg1 g FROM \"types_PostGIS\";\n\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 300:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ gm1 IS NOT NULL;\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && gm1 IS NOT NULL;\n--Testcase 302:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << gm1 IS NOT NULL;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> gm1 IS NOT NULL;\n--Testcase 304:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< gm1 IS NOT NULL;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> gm1 IS NOT NULL;\n--Testcase 306:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| gm1 IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> gm1 IS NOT NULL;\n--Testcase 308:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| gm1 IS NOT NULL;\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> gm1 IS NOT NULL;\n--Testcase 310:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= gm1 IS NOT NULL;\n--Testcase 311:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm = gm1 IS NOT NULL;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& gm1 IS NOT NULL;\n--Testcase 313:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| gm1 IS NOT NULL;\n--Testcase 314:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> gm1 IS NOT NULL;\n--Testcase 315:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> gm1 IS NOT NULL;\n--Testcase 316:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ gm1 IS NOT NULL;\n--Testcase 317:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ gm1 IS NOT NULL;\n\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 351:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 352:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 353:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 354:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 355:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 356:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 357:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 358:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 359:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 360:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 361:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 362:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 363:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 364:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 365:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 366:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 367:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 368:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 369:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 370:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 400:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> gg1 IS NOT NULL;\n--Testcase 401:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && gg1 IS NOT NULL;\n--Testcase 402:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 404:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg = gg1 IS NOT NULL;\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != gg1 IS NOT NULL;\n\n--Testcase 450:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 451:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 452:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 453:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 454:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 500:\nDROP FOREIGN TABLE \"types_PostGIS\";\n--Testcase 501:\nDROP EXTENSION sqlite_fdw CASCADE;\n--Testcase 502:\nDROP EXTENSION postgis CASCADE;\n"
  },
  {
    "path": "sql/16.3/with_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 47:\nCREATE EXTENSION postgis;\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/without_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/without_gis_support/nogis.sql",
    "content": "--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 10:\nCREATE DOMAIN geometry AS bytea;\n--Testcase 11:\nCREATE DOMAIN geography AS bytea;\n--Testcase 12:\nCREATE DOMAIN addbandarg AS bytea;\n--Testcase 13:\nCREATE DOMAIN box2d AS bytea;\n--Testcase 14:\nCREATE DOMAIN box3d AS bytea;\n--Testcase 15:\nCREATE DOMAIN geometry_dump AS bytea;\n--Testcase 16:\nCREATE DOMAIN geomval AS bytea;\n--Testcase 17:\nCREATE DOMAIN getfaceedges_returntype AS bytea;\n--Testcase 18:\nCREATE DOMAIN rastbandarg AS bytea;\n--Testcase 19:\nCREATE DOMAIN raster AS bytea;\n--Testcase 20:\nCREATE DOMAIN reclassarg AS bytea;\n--Testcase 21:\nCREATE DOMAIN summarystats AS bytea;\n--Testcase 22:\nCREATE DOMAIN topoelement AS bytea;\n--Testcase 23:\nCREATE DOMAIN topoelementarray AS bytea;\n--Testcase 24:\nCREATE DOMAIN topogeometry AS bytea;\n--Testcase 25:\nCREATE DOMAIN unionarg AS bytea;\n--Testcase 26:\nCREATE DOMAIN validatetopology_returntype AS bytea;\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text) SERVER sqlite_svr;\n\n--Testcase 41: ERR unable to convert to unsupported PostGIS specific data type\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, but CANNOT read PostGIS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: read the same BLOBs\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n--Testcase 50:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n\n-- Insert a BLOB, read SpatiaLite BLOB without any transformations\n--Testcase 51: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 52:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 53:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 54: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n\n--Testcase 55:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 56:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 57:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 58:\nSELECT * FROM \"♂\";\n--Testcase 59:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 60:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 61:\nINSERT INTO \"♂\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\n--Testcase 62:\nSELECT * FROM \"♂\";\n\n--Testcase 63:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL,\n\tosm_id int OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt json\n) SERVER sqlite_svr\nOPTIONS (table '♁');\n\n--Testcase 55:\nINSERT INTO \"♁ FDW\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 67:\nSELECT * FROM \"♁ FDW\";\n\n-- PostGIS specific data types, but SpatiaLite or sqlite_fdw unsupported \n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box2d;\n--Testcase 69: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 70:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box3d;\n--Testcase 71: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 72:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry_dump;\n--Testcase 73: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 74:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geomval;\n--Testcase 75: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 76:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE getfaceedges_returntype;\n--Testcase 77: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 78:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE rastbandarg;\n--Testcase 79: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 80:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE raster;\n--Testcase 81: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 82:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE reclassarg;\n--Testcase 83: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 84:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE summarystats;\n--Testcase 85: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 86:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelement;\n--Testcase 87: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 88:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelementarray;\n--Testcase 89: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 90:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topogeometry;\n--Testcase 91: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 92:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE unionarg;\n--Testcase 93: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 94:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE validatetopology_returntype;\n--Testcase 95: -- ERR\nSELECT * FROM \"♂\";\n\n-- PostGIS specific data types, not bytea mode, hence error\n--Testcase 96:\nALTER DOMAIN geometry RENAME TO geom0;\n--Testcase 97:\nALTER DOMAIN geography RENAME TO geog0;\n--Testcase 98:\nCREATE DOMAIN geometry AS text;\n--Testcase 99:\nCREATE DOMAIN geography AS text;\n\n--Testcase 100:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 101: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 102:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geography;\n--Testcase 102: -- ERR\nSELECT * FROM \"♂\";\n\n--Testcase 103:\nDROP DOMAIN geometry CASCADE;\n--Testcase 104:\nDROP DOMAIN geography CASCADE;\n--Testcase 105:\nDROP DOMAIN addbandarg;\n--Testcase 106:\nDROP DOMAIN box2d;\n--Testcase 107:\nDROP DOMAIN box3d;\n--Testcase 108:\nDROP DOMAIN geometry_dump;\n--Testcase 109:\nDROP DOMAIN geomval;\n--Testcase 110:\nDROP DOMAIN getfaceedges_returntype;\n--Testcase 111:\nDROP DOMAIN rastbandarg;\n--Testcase 112:\nDROP DOMAIN raster CASCADE;\n--Testcase 113:\nDROP DOMAIN reclassarg;\n--Testcase 114:\nDROP DOMAIN summarystats;\n--Testcase 115:\nDROP DOMAIN topoelement;\n--Testcase 116:\nDROP DOMAIN topoelementarray;\n--Testcase 117:\nDROP DOMAIN topogeometry;\n--Testcase 118:\nDROP DOMAIN unionarg;\n--Testcase 119:\nDROP DOMAIN validatetopology_returntype;\n--Testcase 120:\nDROP DOMAIN geom0 CASCADE;\n--Testcase 121:\nDROP DOMAIN geog0 CASCADE;\n\n--Testcase 122:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 123:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/16.3/without_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/aggregate.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 18:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n-- test for aggregate pushdown\n--Testcase 8:\nDROP SERVER IF EXISTS sqlite_svr CASCADE;\n--Testcase 9:\nDROP EXTENSION IF EXISTS sqlite_fdw CASCADE;\n\n--Testcase 10:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 11:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 12:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nexplain (costs off, verbose) select count(distinct a) from multiprimary;\n\n--Testcase 2:\nexplain (costs off, verbose) select sum(b),max(b), min(b), avg(b) from multiprimary;\n\n--Testcase 3:\nexplain (costs off, verbose) select sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n\n--Testcase 4:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having sum(a) > 0;\n\n--Testcase 5:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having avg(a^2) > 0 and sum(a) > 0;\n\n-- stddev and variance are not pushed down\n--Testcase 6:\nexplain (costs off, verbose) select stddev(a) from multiprimary;\n--Testcase 7:\nexplain (costs off, verbose) select sum(a) from multiprimary group by b having variance(a) > 0;\n\n--Testcase 13:\nDROP FOREIGN TABLE multiprimary;\n\n--Testcase 16:\nCREATE FOREIGN TABLE limittest(id serial OPTIONS (key 'true'), x int, y text) SERVER sqlite_svr;\n\n--Testcase 17:\nINSERT INTO limittest(x, y) VALUES (1, 'x'), (2, 'x'), (3, 'x'), (4, 'x');\n--Testcase 18:\nINSERT INTO limittest(x, y) VALUES (1, 'y'), (2, 'y'), (3, 'y'), (4, 'y');\n--Testcase 19:\nINSERT INTO limittest(x, y) VALUES (1, 'z'), (2, 'z'), (3, 'z'), (4, 'z');\n\n--Testcase 20:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 21:\nSELECT avg(x) FROM limittest GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 22:\nEXPLAIN VERBOSE \nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 23:\nSELECT avg(x) FROM limittest WHERE  x >= 0 GROUP BY y ORDER BY 1 DESC FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 24:\nEXPLAIN VERBOSE \nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 25:\nSELECT x FROM limittest WHERE x > 0 ORDER BY 1 FETCH FIRST 2 ROWS WITH TIES;\n\n--Testcase 26:\nEXPLAIN VERBOSE \nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n--Testcase 27:\nSELECT x FROM limittest ORDER BY 1 FETCH FIRST 2 ROWS ONLY;\n\n--Testcase 28:\nDROP FOREIGN TABLE limittest;\n\n--Testcase 14:\nDROP SERVER sqlite_svr;\n--Testcase 15:\nDROP EXTENSION sqlite_fdw CASCADE;\n\n"
  },
  {
    "path": "sql/17.0/extra/aggregates.sql",
    "content": "--\n-- AGGREGATES\n--\n--Testcase 266:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 267:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 268:\nCREATE FOREIGN TABLE onek(\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 269:\nCREATE FOREIGN TABLE aggtest (\n  a       int2,\n  b     float4\n) SERVER sqlite_svr;\n\n--Testcase 270:\nCREATE FOREIGN TABLE student (\n  name    text,\n  age     int4,\n  location  point,\n  gpa     float8\n) SERVER sqlite_svr;\n\n--Testcase 271:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 272:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 782:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 783:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 784:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 785:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 786:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 273:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr; \n--Testcase 787:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 788:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 789:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 790:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 791:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 274:\nCREATE FOREIGN TABLE multi_arg_agg (a int OPTIONS (key 'true'), b int, c text) SERVER sqlite_svr;\n\n--Testcase 275:\nCREATE FOREIGN TABLE VARCHAR_TBL(f1 varchar(4) OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 276:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 588:\nSET extra_float_digits = 0;\n--Testcase 1:\nSELECT avg(four) AS avg_1 FROM onek;\n\n--Testcase 2:\nSELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;\n\n--Testcase 697:\nCREATE FOREIGN TABLE agg_tb(v int, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 698:\nINSERT INTO agg_tb(v) VALUES(1), (2), (3);\n--Testcase 699: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 700:\nDELETE FROM agg_tb;\n--Testcase 701:\nINSERT INTO agg_tb(v) VALUES (NULL);\n--Testcase 702: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 703:\nDELETE FROM agg_tb;\n--Testcase 704:\nINSERT INTO agg_tb(v) VALUES (NULL), (1), (2);\n--Testcase 705: -- Pg 16+\nSELECT any_value(v) FROM agg_tb;\n\n--Testcase 706:\nCREATE FOREIGN TABLE agg_tb2(v text) SERVER sqlite_svr;\n--Testcase 707:\nINSERT INTO agg_tb2(v) VALUES (array['hello', 'world']);\n--Testcase 708: -- Pg 16+\nSELECT any_value(v) FROM agg_tb2;\n\n-- In 7.1, avg(float4) is computed using float8 arithmetic.\n--Testcase 3:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 678:\nSELECT avg(b)::numeric(10,3) AS avg_107_943 FROM aggtest;\n\n--Testcase 4:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 679:\nSELECT avg(gpa)::numeric(10,3) AS avg_3_4 FROM ONLY student;\n\n\n--Testcase 5:\nSELECT sum(four) AS sum_1500 FROM onek;\n--Testcase 6:\nSELECT sum(a) AS sum_198 FROM aggtest;\n--Testcase 7:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 680:\nSELECT sum(b)::numeric(10,3) AS avg_431_773 FROM aggtest;\n--Testcase 8:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 681:\nSELECT sum(gpa)::numeric(10,3) AS avg_6_8 FROM ONLY student;\n\n--Testcase 9:\nSELECT max(four) AS max_3 FROM onek;\n--Testcase 10:\nSELECT max(a) AS max_100 FROM aggtest;\n--Testcase 11:\nSELECT max(aggtest.b) AS max_324_78 FROM aggtest;\n--Testcase 12:\nSELECT max(student.gpa) AS max_3_7 FROM student;\n\n--Testcase 13:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 682:\nSELECT stddev_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 14:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 683:\nSELECT stddev_samp(b)::numeric(20,10) FROM aggtest;\n--Testcase 15:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 684:\nSELECT var_pop(b)::numeric(20,10) FROM aggtest;\n--Testcase 16:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 685:\nSELECT var_samp(b)::numeric(20,10) FROM aggtest;\n\n--Testcase 17:\nSELECT stddev_pop(b::numeric) FROM aggtest;\n--Testcase 18:\nSELECT stddev_samp(b::numeric) FROM aggtest;\n--Testcase 19:\nSELECT var_pop(b::numeric) FROM aggtest;\n--Testcase 20:\nSELECT var_samp(b::numeric) FROM aggtest;\n\n-- population variance is defined for a single tuple, sample variance\n-- is not\n--Testcase 277:\nCREATE FOREIGN TABLE agg_t3(a float8, b float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 278:\nDELETE FROM agg_t3;\n--Testcase 279:\nINSERT INTO agg_t3 values (1.0::float8, 2.0::float8);\n--Testcase 280:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n\n--Testcase 281:\nDELETE FROM agg_t3;\n--Testcase 282:\nINSERT INTO agg_t3 values (3.0::float8, 4.0::float8);\n--Testcase 283:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 284:\nDELETE FROM agg_t3;\n--Testcase 285:\nINSERT INTO agg_t3 values ('inf'::float8, 'inf'::float8);\n--Testcase 286:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 287:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 288:\nDELETE FROM agg_t3;\n--Testcase 289:\nINSERT INTO agg_t3 values ('nan'::float8, 'nan'::float8);\n--Testcase 290:\nSELECT var_pop(a), var_samp(b) FROM agg_t3;\n--Testcase 291:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t3;\n\n--Testcase 292:\nCREATE FOREIGN TABLE agg_t4(a float4, b float4, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 293:\nDELETE FROM agg_t4;\n--Testcase 294:\nINSERT INTO agg_t4 values (1.0::float4, 2.0::float4);\n--Testcase 295:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n\n--Testcase 296:\nDELETE FROM agg_t4;\n--Testcase 297:\nINSERT INTO agg_t4 values (3.0::float4, 4.0::float4);\n--Testcase 298:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 299:\nDELETE FROM agg_t4;\n--Testcase 300:\nINSERT INTO agg_t4 values ('inf'::float4, 'inf'::float4);\n--Testcase 301:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 302:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 303:\nDELETE FROM agg_t4;\n--Testcase 304:\nINSERT INTO agg_t4 values ('nan'::float4, 'nan'::float4);\n--Testcase 305:\nSELECT var_pop(a), var_samp(b) FROM agg_t4;\n--Testcase 306:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t4;\n\n--Testcase 307:\nCREATE FOREIGN TABLE agg_t5(a numeric, b numeric, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 308:\nDELETE FROM agg_t5;\n--Testcase 309:\nINSERT INTO agg_t5 values (1.0::numeric, 2.0::numeric);\n--Testcase 310:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 311:\nDELETE FROM agg_t5;\n--Testcase 312:\nINSERT INTO agg_t5 values (3.0::numeric, 4.0::numeric);\n--Testcase 313:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 597:\nDELETE FROM agg_t5;\n--Testcase 598:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 599:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n\n--Testcase 600:\nDELETE FROM agg_t5;\n--Testcase 601:\nINSERT INTO agg_t5 values ('inf'::numeric, 'inf'::numeric);\n--Testcase 602:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n--Testcase 314:\nDELETE FROM agg_t5;\n--Testcase 315:\nINSERT INTO agg_t5 values ('nan'::numeric, 'nan'::numeric);\n--Testcase 316:\nSELECT var_pop(a), var_samp(b) FROM agg_t5;\n--Testcase 317:\nSELECT stddev_pop(a), stddev_samp(b) FROM agg_t5;\n\n-- verify correct results for null and NaN inputs\n--Testcase 318:\nCREATE FOREIGN TABLE agg_t8(a text OPTIONS (key 'true'), b text) SERVER sqlite_svr;\n--Testcase 319:\nDELETE FROM agg_t8;\n--Testcase 320:\nINSERT INTO agg_t8 select * from generate_series(1,3);\n--Testcase 321:\nselect sum(null::int4) from agg_t8;\n--Testcase 322:\nselect sum(null::int8) from agg_t8;\n--Testcase 323:\nselect sum(null::numeric) from agg_t8;\n--Testcase 324:\nselect sum(null::float8) from agg_t8;\n--Testcase 325:\nselect avg(null::int4) from agg_t8;\n--Testcase 326:\nselect avg(null::int8) from agg_t8;\n--Testcase 327:\nselect avg(null::numeric) from agg_t8;\n--Testcase 328:\nselect avg(null::float8) from agg_t8;\n--Testcase 329:\nselect sum('NaN'::numeric) from agg_t8;\n--Testcase 330:\nselect avg('NaN'::numeric) from agg_t8;\n\n-- verify correct results for infinite inputs\n--Testcase 331:\nDELETE FROM agg_t3;\n--Testcase 332:\nINSERT INTO agg_t3 VALUES ('1'::float8), ('infinity'::float8);\n--Testcase 333:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 334:\nDELETE FROM agg_t3;\n--Testcase 335:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('1'::float8);\n--Testcase 336:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 337:\nDELETE FROM agg_t3;\n--Testcase 338:\nINSERT INTO agg_t3 VALUES ('infinity'::float8), ('infinity'::float8);\n--Testcase 339:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 340:\nDELETE FROM agg_t3;\n--Testcase 341:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('infinity'::float8);\n--Testcase 342:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 603:\nDELETE FROM agg_t3;\n--Testcase 604:\nINSERT INTO agg_t3 VALUES ('-infinity'::float8), ('-infinity'::float8);\n--Testcase 605:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 606:\nDELETE FROM agg_t3;\n--Testcase 607:\nINSERT INTO agg_t3 VALUES ('1'::numeric), ('infinity'::numeric);\n--Testcase 608:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 609:\nDELETE FROM agg_t3;\n--Testcase 610:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('1'::numeric);\n--Testcase 611:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 612:\nDELETE FROM agg_t3;\n--Testcase 613:\nINSERT INTO agg_t3 VALUES ('infinity'::numeric), ('infinity'::numeric);\n--Testcase 614:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 615:\nDELETE FROM agg_t3;\n--Testcase 616:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('infinity'::numeric);\n--Testcase 617:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n--Testcase 618:\nDELETE FROM agg_t3;\n--Testcase 619:\nINSERT INTO agg_t3 VALUES ('-infinity'::numeric), ('-infinity'::numeric);\n--Testcase 620:\nSELECT sum(a), avg(a), var_pop(a) FROM agg_t3;\n\n-- test accuracy with a large input offset\n--Testcase 343:\nCREATE FOREIGN TABLE agg_t6(a float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 344:\nDELETE FROM agg_t6;\n--Testcase 345:\nINSERT INTO agg_t6 VALUES (100000003), (100000004), (100000006), (100000007);\n--Testcase 346:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n--Testcase 347:\nDELETE FROM agg_t6;\n--Testcase 348:\nINSERT INTO agg_t6 VALUES (7000000000005), (7000000000007);\n--Testcase 349:\nSELECT avg(a), var_pop(a) FROM agg_t6;\n\n-- SQL2003 binary aggregates\n--Testcase 21:\nSELECT regr_count(b, a) FROM aggtest;\n--Testcase 22:\nSELECT regr_sxx(b, a) FROM aggtest;\n--Testcase 23:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 686:\nSELECT regr_syy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 24:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 687:\nSELECT regr_sxy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 25:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 688:\nSELECT regr_avgx(b, a), regr_avgy(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 26:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 689:\nSELECT regr_r2(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 27:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 690:\nSELECT regr_slope(b, a)::numeric(20,10), regr_intercept(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 28:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 691:\nSELECT covar_pop(b, a)::numeric(20,10), covar_samp(b, a)::numeric(20,10) FROM aggtest;\n--Testcase 29:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 692:\nSELECT corr(b, a)::numeric(20,10) FROM aggtest;\n\n-- check single-tuple behavior\n--Testcase 350:\nCREATE FOREIGN TABLE agg_t7(a float8, b float8, c float8, d float8, id integer OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 351:\nDELETE FROM agg_t7;\n--Testcase 352:\nINSERT INTO agg_t7 VALUES (1, 2, 3, 4);\n--Testcase 353:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 354:\nDELETE FROM agg_t7;\n--Testcase 355:\nINSERT INTO agg_t7 VALUES (1, 'inf', 3, 'inf');\n--Testcase 356:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n--Testcase 357:\nDELETE FROM agg_t7;\n--Testcase 358:\nINSERT INTO agg_t7 VALUES (1, 'nan', 3, 'nan');\n--Testcase 359:\nSELECT covar_pop(a,b), covar_samp(c,d) FROM agg_t7;\n\n-- test accum and combine functions directly\n--Testcase 360:\nCREATE FOREIGN TABLE regr_test (x float8, y float8, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 361:\nDELETE FROM regr_test;\n--Testcase 362:\nINSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);\n--Testcase 363:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 364:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 590:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30,80);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test;\n\n--Testcase 365:\nCREATE FOREIGN TABLE agg_t15 (a text, b int, c int, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 366:\ndelete from agg_t15;\n--Testcase 367:\ninsert into agg_t15 values ('{4,140,2900}', 100);\n--Testcase 368:\nSELECT float8_accum(a::float8[], b) from agg_t15;\n\n--Testcase 369:\ndelete from agg_t15;\n--Testcase 370:\ninsert into agg_t15 values ('{4,140,2900,1290,83075,15050}', 200, 100);\n--Testcase 371:\nSELECT float8_regr_accum(a::float8[], b, c) from agg_t15;\n\n--Testcase 372:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (10,20,30);\n\n--Testcase 373:\nSELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)\nFROM regr_test WHERE x IN (80,100);\n\n--Testcase 374:\nCREATE FOREIGN TABLE agg_t16 (a text, b text, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 375:\ndelete from agg_t16;\n--Testcase 376:\ninsert into agg_t16 values ('{3,60,200}', '{0,0,0}');\n--Testcase 377:\ninsert into agg_t16 values ('{0,0,0}', '{2,180,200}');\n--Testcase 378:\ninsert into agg_t16 values ('{3,60,200}', '{2,180,200}');\n--Testcase 379:\nSELECT float8_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 380:\ndelete from agg_t16;\n--Testcase 381:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{0,0,0,0,0,0}');\n--Testcase 382:\ninsert into agg_t16 values ('{0,0,0,0,0,0}', '{2,180,200,740,57800,-3400}');\n--Testcase 383:\ninsert into agg_t16 values ('{3,60,200,750,20000,2000}', '{2,180,200,740,57800,-3400}');\n--Testcase 384:\nSELECT float8_regr_combine(a::float8[], b::float8[]) FROM agg_t16;\n\n--Testcase 385:\nDROP FOREIGN TABLE regr_test;\n\n-- test count, distinct\n--Testcase 30:\nSELECT count(four) AS cnt_1000 FROM onek;\n--Testcase 31:\nSELECT count(DISTINCT four) AS cnt_4 FROM onek;\n\n--Testcase 32:\nselect ten, count(*), sum(four) from onek\ngroup by ten order by ten;\n\n--Testcase 33:\nselect ten, count(four), sum(DISTINCT four) from onek\ngroup by ten order by ten;\n\n-- user-defined aggregates\n--Testcase 386:\nCREATE AGGREGATE newavg (\n   sfunc = int4_avg_accum, basetype = int4, stype = _int8,\n   finalfunc = int8_avg,\n   initcond1 = '{0,0}'\n);\n\n--Testcase 387:\nCREATE AGGREGATE newsum (\n   sfunc1 = int4pl, basetype = int4, stype1 = int4,\n   initcond1 = '0'\n);\n\n--Testcase 388:\nCREATE AGGREGATE newcnt (*) (\n   sfunc = int8inc, stype = int8,\n   initcond = '0', parallel = safe\n);\n\n--Testcase 389:\nCREATE AGGREGATE newcnt (\"any\") (\n   sfunc = int8inc_any, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 390:\nCREATE AGGREGATE oldcnt (\n   sfunc = int8inc, basetype = 'ANY', stype = int8,\n   initcond = '0'\n);\n\n--Testcase 391:\ncreate function sum3(int8,int8,int8) returns int8 as\n'select $1 + $2 + $3' language sql strict immutable;\n\n--Testcase 392:\ncreate aggregate sum2(int8,int8) (\n   sfunc = sum3, stype = int8,\n   initcond = '0'\n);\n\n--Testcase 34:\nSELECT newavg(four) AS avg_1 FROM onek;\n--Testcase 35:\nSELECT newsum(four) AS sum_1500 FROM onek;\n--Testcase 36:\nSELECT newcnt(four) AS cnt_1000 FROM onek;\n--Testcase 37:\nSELECT newcnt(*) AS cnt_1000 FROM onek;\n--Testcase 38:\nSELECT oldcnt(*) AS cnt_1000 FROM onek;\n--Testcase 39:\nSELECT sum2(q1,q2) FROM int8_tbl;\n\n-- test for outer-level aggregates\n\n-- this should work\n--Testcase 40:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n-- this should fail because subquery has an agg of its own in WHERE\n--Testcase 41:\nselect ten, sum(distinct four) from onek a\ngroup by ten\nhaving exists (select 1 from onek b\n               where sum(distinct a.four + b.four) = b.four);\n\n-- Test handling of sublinks within outer-level aggregates.\n-- Per bug report from Daniel Grace.\n--Testcase 42:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))\nfrom tenk1 o;\n\n-- Test handling of Params within aggregate arguments in hashed aggregation.\n-- Per bug report from Jeevan Chalke.\n--Testcase 393:\nexplain (verbose, costs off)\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 394:\nselect s1, s2, sm\nfrom generate_series(1, 3) s1,\n     lateral (select s2, sum(s1 + s2) sm\n              from generate_series(1, 3) s2 group by s2) ss\norder by 1, 2;\n\n--Testcase 395:\nexplain (verbose, costs off)\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--Testcase 396:\nselect array(select sum(x+y) s\n            from generate_series(1,3) y group by y order by s)\n  from generate_series(1,3) x;\n\n--\n-- test for bitwise integer aggregates\n--\n--Testcase 397:\nCREATE FOREIGN TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 43:\nSELECT\n  BIT_AND(i2) AS \"?\",\n  BIT_OR(i4)  AS \"?\",\n  BIT_XOR(i8) AS \"?\"\nFROM bitwise_test;\n\n--Testcase 44:\nINSERT INTO bitwise_test VALUES\n  (1, 1, 1, 1, 1),\n  (3, 3, 3, null, 2),\n  (7, 7, 7, 3, 4);\n\n--Testcase 45:\nSELECT\n  BIT_AND(i2) AS \"1\",\n  BIT_AND(i4) AS \"1\",\n  BIT_AND(i8) AS \"1\",\n  BIT_AND(i)  AS \"?\",\n  BIT_AND(x)  AS \"0\",\n\n  BIT_OR(i2)  AS \"7\",\n  BIT_OR(i4)  AS \"7\",\n  BIT_OR(i8)  AS \"7\",\n  BIT_OR(i)   AS \"?\",\n  BIT_OR(x)   AS \"7\",\n\n  BIT_XOR(i2) AS \"5\",\n  BIT_XOR(i4) AS \"5\",\n  BIT_XOR(i8) AS \"5\",\n  BIT_XOR(i)  AS \"?\",\n  BIT_XOR(x)  AS \"7\"\nFROM bitwise_test;\n\n--\n-- test boolean aggregates\n--\n-- first test all possible transition and final states\n\n--Testcase 398:\nCREATE FOREIGN TABLE bool_test_tmp(\n  b1 BOOL OPTIONS (key 'true'),\n  b2 BOOL OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n-- boolean and transitions\n-- null because strict\nBEGIN;\n--Testcase 399:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 400:\nSELECT booland_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- and actual computations\nBEGIN;\n--Testcase 401:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE);\n--Testcase 402:\nSELECT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 403:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, FALSE),\n  (FALSE, TRUE),\n  (FALSE, FALSE);\n--Testcase 404:\nSELECT NOT booland_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- boolean or transitions\n-- null because strict\nBEGIN;\n--Testcase 405:\nINSERT INTO bool_test_tmp VALUES\n  (NULL, NULL),\n  (TRUE, NULL),\n  (FALSE, NULL),\n  (NULL, TRUE),\n  (NULL, FALSE);\n--Testcase 406:\nSELECT boolor_statefunc(b1, b2) IS NULL as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n-- actual computations\nBEGIN;\n--Testcase 407:\nINSERT INTO bool_test_tmp VALUES\n  (TRUE, TRUE),\n  (TRUE, FALSE),\n  (FALSE, TRUE);\n--Testcase 408:\nSELECT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\nBEGIN;\n--Testcase 409:\nINSERT INTO bool_test_tmp VALUES\n  (FALSE, FALSE);\n--Testcase 410:\nSELECT NOT boolor_statefunc(b1, b2) as \"t\" FROM bool_test_tmp;\nROLLBACK;\n\n--Testcase 411:\nCREATE FOREIGN TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL\n) SERVER sqlite_svr;\n\n-- empty case\n--Testcase 46:\nSELECT\n  BOOL_AND(b1)   AS \"n\",\n  BOOL_OR(b3)    AS \"n\"\nFROM bool_test;\n\n--Testcase 47:\nINSERT INTO bool_test VALUES\n  (TRUE, null, FALSE, null),\n  (FALSE, TRUE, null, null),\n  (null, TRUE, FALSE, null);\n\n--Testcase 48:\nSELECT\n  BOOL_AND(b1)     AS \"f\",\n  BOOL_AND(b2)     AS \"t\",\n  BOOL_AND(b3)     AS \"f\",\n  BOOL_AND(b4)     AS \"n\",\n  BOOL_AND(NOT b2) AS \"f\",\n  BOOL_AND(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 49:\nSELECT\n  EVERY(b1)     AS \"f\",\n  EVERY(b2)     AS \"t\",\n  EVERY(b3)     AS \"f\",\n  EVERY(b4)     AS \"n\",\n  EVERY(NOT b2) AS \"f\",\n  EVERY(NOT b3) AS \"t\"\nFROM bool_test;\n\n--Testcase 50:\nSELECT\n  BOOL_OR(b1)      AS \"t\",\n  BOOL_OR(b2)      AS \"t\",\n  BOOL_OR(b3)      AS \"f\",\n  BOOL_OR(b4)      AS \"n\",\n  BOOL_OR(NOT b2)  AS \"f\",\n  BOOL_OR(NOT b3)  AS \"t\"\nFROM bool_test;\n\n--\n-- Test cases that should be optimized into indexscans instead of\n-- the generic aggregate implementation.\n--\n\n-- Basic cases\n--Testcase 51:\nexplain (costs off)\n  select min(unique1) from tenk1;\n--Testcase 52:\nselect min(unique1) from tenk1;\n--Testcase 53:\nexplain (costs off)\n  select max(unique1) from tenk1;\n--Testcase 54:\nselect max(unique1) from tenk1;\n--Testcase 55:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 < 42;\n--Testcase 56:\nselect max(unique1) from tenk1 where unique1 < 42;\n--Testcase 57:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42;\n--Testcase 58:\nselect max(unique1) from tenk1 where unique1 > 42;\n\n-- the planner may choose a generic aggregate here if parallel query is\n-- enabled, since that plan will be parallel safe and the \"optimized\"\n-- plan, which has almost identical cost, will not be.  we want to test\n-- the optimized plan, so temporarily disable parallel query.\nbegin;\n--Testcase 628:\nset local max_parallel_workers_per_gather = 0;\n--Testcase 59:\nexplain (costs off)\n  select max(unique1) from tenk1 where unique1 > 42000;\n--Testcase 60:\nselect max(unique1) from tenk1 where unique1 > 42000;\nrollback;\n\n-- multi-column index (uses tenk1_thous_tenthous)\n--Testcase 61:\nexplain (costs off)\n  select max(tenthous) from tenk1 where thousand = 33;\n--Testcase 62:\nselect max(tenthous) from tenk1 where thousand = 33;\n--Testcase 63:\nexplain (costs off)\n  select min(tenthous) from tenk1 where thousand = 33;\n--Testcase 64:\nselect min(tenthous) from tenk1 where thousand = 33;\n\n-- check parameter propagation into an indexscan subquery\n--Testcase 65:\nexplain (costs off)\n  select f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n    from int4_tbl;\n--Testcase 66:\nselect f1, (select min(unique1) from tenk1 where unique1 > f1) AS gt\n  from int4_tbl;\n\n-- check some cases that were handled incorrectly in 8.3.0\n--Testcase 67:\nexplain (costs off)\n  select distinct max(unique2) from tenk1;\n--Testcase 68:\nselect distinct max(unique2) from tenk1;\n--Testcase 69:\nexplain (costs off)\n  select max(unique2) from tenk1 order by 1;\n--Testcase 70:\nselect max(unique2) from tenk1 order by 1;\n--Testcase 71:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2);\n--Testcase 72:\nselect max(unique2) from tenk1 order by max(unique2);\n--Testcase 73:\nexplain (costs off)\n  select max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 74:\nselect max(unique2) from tenk1 order by max(unique2)+1;\n--Testcase 75:\nexplain (costs off)\n  select max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n--Testcase 76:\nselect max(unique2), generate_series(1,3) as g from tenk1 order by g desc;\n\n-- interesting corner case: constant gets optimized into a seqscan\n--Testcase 77:\nexplain (costs off)\n  select max(100) from tenk1;\n--Testcase 78:\nselect max(100) from tenk1;\n\n-- try it on an inheritance tree\n--Testcase 412:\ncreate foreign table minmaxtest(f1 int) server sqlite_svr;\n--Testcase 413:\ncreate table minmaxtest1() inherits (minmaxtest);\n--Testcase 414:\ncreate table minmaxtest2() inherits (minmaxtest);\n--Testcase 415:\ncreate table minmaxtest3() inherits (minmaxtest);\n--Testcase 416:\ncreate index minmaxtest1i on minmaxtest1(f1);\n--Testcase 417:\ncreate index minmaxtest2i on minmaxtest2(f1 desc);\n--Testcase 418:\ncreate index minmaxtest3i on minmaxtest3(f1) where f1 is not null;\n\n--Testcase 79:\ninsert into minmaxtest values(11), (12);\n--Testcase 80:\ninsert into minmaxtest1 values(13), (14);\n--Testcase 81:\ninsert into minmaxtest2 values(15), (16);\n--Testcase 82:\ninsert into minmaxtest3 values(17), (18);\n\n--Testcase 83:\nexplain (costs off)\n  select min(f1), max(f1) from minmaxtest;\n--Testcase 84:\nselect min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT doesn't do anything useful here, but it shouldn't fail\n--Testcase 85:\nexplain (costs off)\n  select distinct min(f1), max(f1) from minmaxtest;\n--Testcase 86:\nselect distinct min(f1), max(f1) from minmaxtest;\n\n-- DISTINCT can also trigger wrong answers with hash aggregation (bug #18465)\nbegin;\nset local enable_sort = off;\n--Testcase 709:\nexplain (costs off)\n  select f1, (select distinct min(t1.f1) from int4_tbl t1 where t1.f1 = t0.f1)\n  from int4_tbl t0;\n--Testcase 710:\nselect f1, (select distinct min(t1.f1) from int4_tbl t1 where t1.f1 = t0.f1)\nfrom int4_tbl t0;\nrollback;\n\n-- check for correct detection of nested-aggregate errors\n--Testcase 87:\nselect max(min(unique1)) from tenk1;\n--Testcase 88:\nselect (select max(min(unique1)) from int8_tbl) from tenk1;\n--Testcase 711:\nselect avg((select avg(a1.col1 order by (select avg(a2.col2) from tenk1 a3))\n            from tenk1 a1(col1)))\nfrom tenk1 a2(col2);\n--\n-- Test removal of redundant GROUP BY columns\n--\n\n--Testcase 419:\ncreate foreign table agg_t1 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int, d int) server sqlite_svr;\n--Testcase 420:\ncreate foreign table agg_t2 (x int OPTIONS (key 'true'), y int OPTIONS (key 'true'), z int) server sqlite_svr;\n--Testcase 421:\ncreate foreign table agg_t9 (a int OPTIONS (key 'true'), b int OPTIONS (key 'true'), c int) server sqlite_svr;\n\n-- Non-primary-key columns can be removed from GROUP BY\n--Testcase 89:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- No removal can happen if the complete PK is not present in GROUP BY\n--Testcase 90:\nexplain (costs off) select a,c from agg_t1 group by a,c,d;\n\n-- Test removal across multiple relations\n--Testcase 91:\nexplain (costs off) select *\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.y,agg_t2.z;\n\n-- Test case where agg_t1 can be optimized but not agg_t2\n--Testcase 92:\nexplain (costs off) select agg_t1.*,agg_t2.x,agg_t2.z\nfrom agg_t1 inner join agg_t2 on agg_t1.a = agg_t2.x and agg_t1.b = agg_t2.y\ngroup by agg_t1.a,agg_t1.b,agg_t1.c,agg_t1.d,agg_t2.x,agg_t2.z;\n\n-- Cannot optimize when PK is deferrable\n--Testcase 422:\nexplain (costs off) select * from agg_t9 group by a,b,c;\n\n--Testcase 423:\ncreate temp table t1c () inherits (agg_t1);\n\n-- Ensure we don't remove any columns when t1 has a child table\n--Testcase 424:\nexplain (costs off) select * from agg_t1 group by a,b,c,d;\n\n-- Okay to remove columns if we're only querying the parent.\n--Testcase 425:\nexplain (costs off) select * from only agg_t1 group by a,b,c,d;\n\n-- Skip this test, sqlite_fdw does not support partition table\n--create foreign table p_t1 (\n--  a int options (key 'true'),\n--  b int options (key 'true'),\n--  c int,\n--  d int,\n--) partition by list(a) server sqlite_svr;\n--create temp table p_t1_1 partition of p_t1 for values in(1);\n--create temp table p_t1_2 partition of p_t1 for values in(2);\n\n-- Ensure we can remove non-PK columns for partitioned tables.\n--explain (costs off) select * from p_t1 group by a,b,c,d;\n\n--drop table t1 cascade;\n--drop table t2;\n--drop table t3;\n--drop table p_t1;\n\n--\n-- Test GROUP BY matching of join columns that are type-coerced due to USING\n--\n\n--Testcase 426:\ncreate foreign table t1(f1 int, f2 int) server sqlite_svr;\n--Testcase 427:\ncreate foreign table t2(f1 bigint, f2 oid) server sqlite_svr;\n\n--Testcase 428:\nselect f1 from t1 left join t2 using (f1) group by f1;\n--Testcase 429:\nselect f1 from t1 left join t2 using (f1) group by t1.f1;\n--Testcase 430:\nselect t1.f1 from t1 left join t2 using (f1) group by t1.f1;\n-- only this one should fail:\n--Testcase 431:\nselect t1.f1 from t1 left join t2 using (f1) group by f1;\n\n-- check case where we have to inject nullingrels into coerced join alias\n--Testcase 712:\nselect f1, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f1)) on (x0 = 0)\ngroup by f1;\n\n-- same, for a RelabelType coercion\n--Testcase 713:\nselect f2, count(*) from\nt1 x(x0,x1) left join (t1 left join t2 using(f2)) on (x0 = 0)\ngroup by f2;\n\n--Testcase 432:\ndrop foreign table t1, t2;\n--\n-- Test planner's selection of pathkeys for ORDER BY aggregates\n--\n\n-- Ensure we order by four.  This suits the most aggregate functions.\n--Testcase 714:\nexplain (costs off)\nselect sum(two order by two),max(four order by four), min(four order by four)\nfrom tenk1;\n\n-- Ensure we order by two.  It's a tie between ordering by two and four but\n-- we tiebreak on the aggregate's position.\n--Testcase 715:\nexplain (costs off)\nselect\n  sum(two order by two), max(four order by four),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Similar to above, but tiebreak on ordering by four\n--Testcase 716:\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two)\nfrom tenk1;\n\n-- Ensure this one orders by ten since there are 3 aggregates that require ten\n-- vs two that suit two and four.\n--Testcase 717:\nexplain (costs off)\nselect\n  max(four order by four), sum(two order by two),\n  min(four order by four), max(two order by two),\n  sum(ten order by ten), min(ten order by ten), max(ten order by ten)\nfrom tenk1;\n\n-- Try a case involving a GROUP BY clause where the GROUP BY column is also\n-- part of an aggregate's ORDER BY clause.  We want a sort order that works\n-- for the GROUP BY along with the first and the last aggregate.\n--Testcase 718:\nexplain (costs off)\nselect\n  sum(unique1 order by ten, two), sum(unique1 order by four),\n  sum(unique1 order by two, four)\nfrom tenk1\ngroup by ten;\n\n-- Ensure that we never choose to provide presorted input to an Aggref with\n-- a volatile function in the ORDER BY / DISTINCT clause.  We want to ensure\n-- these sorts are performed individually rather than at the query level.\n--Testcase 719:\nexplain (costs off)\nselect\n  sum(unique1 order by two), sum(unique1 order by four),\n  sum(unique1 order by four, two), sum(unique1 order by two, random()),\n  sum(unique1 order by two, random(), random() + 1)\nfrom tenk1\ngroup by ten;\n\n-- Ensure consecutive NULLs are properly treated as distinct from each other\n--Testcase 720:\nselect array_agg(distinct val)\nfrom (select null as val from generate_series(1, 2));\n\n-- Ensure no ordering is requested when enable_presorted_aggregate is off\nset enable_presorted_aggregate to off;\n--Testcase 721:\nexplain (costs off)\nselect sum(two order by two) from tenk1;\nreset enable_presorted_aggregate;\n\n--\n-- Test combinations of DISTINCT and/or ORDER BY\n--\nbegin;\n--Testcase 93:\ndelete from INT8_TBL;\n--Testcase 94:\ninsert into INT8_TBL values (1,4),(2,3),(3,1),(4,2);\n--Testcase 95:\nselect array_agg(q1 order by q2)\n  from INT8_TBL;\n--Testcase 96:\nselect array_agg(q1 order by q1)\n  from INT8_TBL;\n--Testcase 97:\nselect array_agg(q1 order by q1 desc)\n  from INT8_TBL;\n--Testcase 98:\nselect array_agg(q2 order by q1 desc)\n  from INT8_TBL;\n\n--Testcase 99:\ndelete from INT4_TBL;\n--Testcase 100:\ninsert into INT4_TBL values (1),(2),(1),(3),(null),(2);\n--Testcase 101:\nselect array_agg(distinct f1)\n  from INT4_TBL;\n--Testcase 102:\nselect array_agg(distinct f1 order by f1)\n  from INT4_TBL;\n--Testcase 103:\nselect array_agg(distinct f1 order by f1 desc)\n  from INT4_TBL;\n--Testcase 104:\nselect array_agg(distinct f1 order by f1 desc nulls last)\n  from INT4_TBL;\nrollback;\n\n-- multi-arg aggs, strict/nonstrict, distinct/order by\n--Testcase 433:\ncreate type aggtype as (a integer, b integer, c text);\n\n--Testcase 434:\ncreate function aggf_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql strict immutable;\n\n--Testcase 435:\ncreate function aggfns_trans(aggtype[],integer,integer,text) returns aggtype[]\nas 'select array_append($1,ROW($2,$3,$4)::aggtype)'\nlanguage sql immutable;\n\n--Testcase 436:\ncreate aggregate aggfstr(integer,integer,text) (\n   sfunc = aggf_trans, stype = aggtype[],\n   initcond = '{}'\n);\n\n--Testcase 437:\ncreate aggregate aggfns(integer,integer,text) (\n   sfunc = aggfns_trans, stype = aggtype[], sspace = 10000,\n   initcond = '{}'\n);\n\nbegin;\n--Testcase 105:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 106:\nselect aggfstr(a,b,c) from multi_arg_agg;\n--Testcase 107:\nselect aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 108:\nselect aggfstr(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 109:\nselect aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 110:\nselect aggfstr(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n--Testcase 111:\nselect aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n-- test specific code paths\n\n--Testcase 112:\nselect aggfns(distinct a,a,c order by c using ~<~,a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 113:\nselect aggfns(distinct a,a,c order by c using ~<~) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 114:\nselect aggfns(distinct a,a,c order by a) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 115:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- test a more complex permutation that has previous caused issues\n--Testcase 761:\ncreate foreign table agg_t22 (c1 text, id int) server sqlite_svr;\n--Testcase 762:\ncreate foreign table agg_t23 (id int) server sqlite_svr;\n--Testcase 763:\ninsert into agg_t22 values ('a', 1);\n--Testcase 764:\ninsert into agg_t23 values (1);\n--Testcase 765:\nselect\n    string_agg(distinct c1, ','),\n    sum((\n        select sum(b.id)\n        from agg_t23 b\n        where a.id = b.id\n)) from agg_t22 a;\n\n-- check node I/O via view creation and usage, also deparsing logic\n\n--Testcase 438:\ncreate view agg_view1 as\n  select aggfns(a,b,c) from multi_arg_agg;\n\n--Testcase 116:\nselect * from agg_view1;\n--Testcase 117:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 439:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 118:\nselect * from agg_view1;\n--Testcase 119:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 440:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by b) from multi_arg_agg, generate_series(1,3) i;\n\n--Testcase 120:\nselect * from agg_view1;\n--Testcase 121:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 441:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by b+1) from multi_arg_agg;\n\n--Testcase 122:\nselect * from agg_view1;\n--Testcase 123:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 442:\ncreate or replace view agg_view1 as\n  select aggfns(a,a,c order by b) from multi_arg_agg;\n\n--Testcase 124:\nselect * from agg_view1;\n--Testcase 125:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 443:\ncreate or replace view agg_view1 as\n  select aggfns(a,b,c order by c using ~<~) from multi_arg_agg;\n\n--Testcase 126:\nselect * from agg_view1;\n--Testcase 127:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 444:\ncreate or replace view agg_view1 as\n  select aggfns(distinct a,b,c order by a,c using ~<~,b) from multi_arg_agg, generate_series(1,2) i;\n\n--Testcase 128:\nselect * from agg_view1;\n--Testcase 129:\nselect pg_get_viewdef('agg_view1'::regclass);\n\n--Testcase 445:\ndrop view agg_view1;\nrollback;\n\n-- incorrect DISTINCT usage errors\n--Testcase 130:\ninsert into multi_arg_agg values (1,1,'foo');\n--Testcase 131:\nselect aggfns(distinct a,b,c order by i) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 132:\nselect aggfns(distinct a,b,c order by a,b+1) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 133:\nselect aggfns(distinct a,b,c order by a,b,i,c) from multi_arg_agg, generate_series(1,2) i;\n--Testcase 134:\nselect aggfns(distinct a,a,c order by a,b) from multi_arg_agg, generate_series(1,2) i;\n\n-- string_agg tests\nbegin;\n--Testcase 135:\ndelete from varchar_tbl;\n--Testcase 136:\ninsert into varchar_tbl values ('aaaa'),('bbbb'),('cccc');\n--Testcase 137:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 138:\ndelete from varchar_tbl;\n--Testcase 139:\ninsert into varchar_tbl values ('aaaa'),(null),('bbbb'),('cccc');\n--Testcase 140:\nselect string_agg(f1,',') from varchar_tbl;\n\n--Testcase 141:\ndelete from varchar_tbl;\n--Testcase 142:\ninsert into varchar_tbl values (null),(null),('bbbb'),('cccc');\n--Testcase 143:\nselect string_agg(f1,'AB') from varchar_tbl;\n\n--Testcase 144:\ndelete from varchar_tbl;\n--Testcase 145:\ninsert into varchar_tbl values (null),(null);\n--Testcase 146:\nselect string_agg(f1,',') from varchar_tbl;\nrollback;\n\n-- check some implicit casting cases, as per bug #5564\n\n--Testcase 147:\nselect string_agg(distinct f1, ',' order by f1) from varchar_tbl;  -- ok\n--Testcase 148:\nselect string_agg(distinct f1::text, ',' order by f1) from varchar_tbl;  -- not ok\n--Testcase 149:\nselect string_agg(distinct f1, ',' order by f1::text) from varchar_tbl;  -- not ok\n--Testcase 150:\nselect string_agg(distinct f1::text, ',' order by f1::text) from varchar_tbl;  -- ok\n\n-- string_agg bytea tests\n--Testcase 446:\ncreate foreign table bytea_test_table(v bytea) server sqlite_svr;\n\n--Testcase 151:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 152:\ninsert into bytea_test_table values(decode('ff','hex'));\n\n--Testcase 153:\nselect string_agg(v, '') from bytea_test_table;\n\n--Testcase 154:\ninsert into bytea_test_table values(decode('aa','hex'));\n\n--Testcase 155:\nselect string_agg(v, '') from bytea_test_table;\n--Testcase 156:\nselect string_agg(v, NULL) from bytea_test_table;\n--Testcase 157:\nselect string_agg(v, decode('ee', 'hex')) from bytea_test_table;\n\n--Testcase 447:\ndrop foreign table bytea_test_table;\n\n-- Test parallel string_agg and array_agg\n--Testcase 723:\ncreate foreign table pagg_test (x int, y int) server sqlite_svr;\n--Testcase 724:\ninsert into pagg_test\nselect (case x % 4 when 1 then null else x end), x % 10\nfrom generate_series(1,5000) x;\n\nset parallel_setup_cost TO 0;\nset parallel_tuple_cost TO 0;\nset parallel_leader_participation TO 0;\nset min_parallel_table_scan_size = 0;\nset bytea_output = 'escape';\nset max_parallel_workers_per_gather = 2;\n\n-- create a view as we otherwise have to repeat this query a few times.\n--Testcase 725:\ncreate view v_pagg_test AS\nselect\n\ty,\n\tmin(t) AS tmin,max(t) AS tmax,count(distinct t) AS tndistinct,\n\tmin(b) AS bmin,max(b) AS bmax,count(distinct b) AS bndistinct,\n\tmin(a) AS amin,max(a) AS amax,count(distinct a) AS andistinct,\n\tmin(aa) AS aamin,max(aa) AS aamax,count(distinct aa) AS aandistinct\nfrom (\n\tselect\n\t\ty,\n\t\tunnest(regexp_split_to_array(a1.t, ','))::int AS t,\n\t\tunnest(regexp_split_to_array(a1.b::text, ',')) AS b,\n\t\tunnest(a1.a) AS a,\n\t\tunnest(a1.aa) AS aa\n\tfrom (\n\t\tselect\n\t\t\ty,\n\t\t\tstring_agg(x::text, ',') AS t,\n\t\t\tstring_agg(x::text::bytea, ',') AS b,\n\t\t\tarray_agg(x) AS a,\n\t\t\tarray_agg(ARRAY[x]) AS aa\n\t\tfrom pagg_test\n\t\tgroup by y\n\t) a1\n) a2\ngroup by y;\n\n-- Ensure results are correct.\n--Testcase 726:\nselect * from v_pagg_test order by y;\n\n-- Ensure parallel aggregation is actually being used.\n--Testcase 727:\nexplain (costs off) select * from v_pagg_test order by y;\n\nset max_parallel_workers_per_gather = 0;\n\n-- Ensure results are the same without parallel aggregation.\n--Testcase 728:\nselect * from v_pagg_test order by y;\n\n-- Clean up\nreset max_parallel_workers_per_gather;\nreset bytea_output;\nreset min_parallel_table_scan_size;\nreset parallel_leader_participation;\nreset parallel_tuple_cost;\nreset parallel_setup_cost;\n\n--Testcase 729:\ndrop view v_pagg_test;\n--Testcase 730:\ndrop foreign table pagg_test;\n\n\n-- FILTER tests\n\n--Testcase 158:\nselect min(unique1) filter (where unique1 > 100) from tenk1;\n\n--Testcase 159:\nselect sum(1/ten) filter (where ten > 0) from tenk1;\n\n--Testcase 160:\nselect ten, sum(distinct four) filter (where four::text ~ '123') from onek a\ngroup by ten;\n\n--Testcase 161:\nselect ten, sum(distinct four) filter (where four > 10) from onek a\ngroup by ten\nhaving exists (select 1 from onek b where sum(distinct a.four) = b.four);\n\n--Testcase 448:\ncreate foreign table agg_t17(foo text, bar text) server sqlite_svr;\n--Testcase 449:\ninsert into agg_t17 values ('a', 'b');\n\n--Testcase 450:\nselect max(foo COLLATE \"C\") filter (where (bar collate \"POSIX\") > '0')\nfrom agg_t17;\n\n--Testcase 731:\ncreate foreign table agg_t170(v int) server sqlite_svr;\n--Testcase 732:\ninsert into agg_t170(v) values (1), (2), (3);\n--Testcase 733:\nselect any_value(v) filter (where v > 2) from agg_t170;\n\n-- outer reference in FILTER (PostgreSQL extension)\n--Testcase 451:\ncreate foreign table agg_t18 (inner_c int) server sqlite_svr;\n--Testcase 452:\ncreate foreign table agg_t19 (outer_c int) server sqlite_svr;\n--Testcase 453:\ninsert into agg_t18 values (1);\n--Testcase 454:\ninsert into agg_t19 values (2), (3);\n\n--Testcase 455:\nselect (select count(*)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n--Testcase 456:\nselect (select count(*) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- outer query is aggregation query\n--Testcase 457:\nselect (select count(inner_c) filter (where outer_c <> 0)\n        from agg_t18) from agg_t19; -- inner query is aggregation query\n\n--Testcase 162:\nselect\n  (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1))\n     filter (where o.unique1 < 10))\nfrom tenk1 o;\t\t\t\t\t-- outer query is aggregation query\n\n-- subquery in FILTER clause (PostgreSQL extension)\n--Testcase 163:\nselect sum(unique1) FILTER (WHERE\n  unique1 IN (SELECT unique1 FROM onek where unique1 < 100)) FROM tenk1;\n\n-- exercise lots of aggregate parts with FILTER\nbegin;\n--Testcase 164:\ndelete from multi_arg_agg;\n--Testcase 165:\ninsert into multi_arg_agg values (1,3,'foo'),(0,null,null),(2,2,'bar'),(3,1,'baz');\n--Testcase 166:\nselect aggfns(distinct a,b,c order by a,c using ~<~,b) filter (where a > 1) from multi_arg_agg, generate_series(1,2) i;\nrollback;\n\n-- check handling of bare boolean Var in FILTER\n--Testcase 672:\nselect max(0) filter (where b1) from bool_test;\n--Testcase 673:\nselect (select max(0) filter (where b1)) from bool_test;\n\n-- check for correct detection of nested-aggregate errors in FILTER\n--Testcase 674:\nselect max(unique1) filter (where sum(ten) > 0) from tenk1;\n--Testcase 675:\nselect (select max(unique1) filter (where sum(ten) > 0) from int8_tbl) from tenk1;\n--Testcase 676:\nselect max(unique1) filter (where bool_or(ten > 0)) from tenk1;\n--Testcase 677:\nselect (select max(unique1) filter (where bool_or(ten > 0)) from int8_tbl) from tenk1;\n\n-- ordered-set aggregates\n\nbegin;\n--Testcase 167:\ndelete from FLOAT8_TBL;\n--Testcase 168:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 169:\nselect f1, percentile_cont(f1) within group (order by x::float8)\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 170:\ndelete from FLOAT8_TBL;\n--Testcase 171:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 172:\nselect f1, percentile_cont(f1 order by f1) within group (order by x)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 173:\ndelete from FLOAT8_TBL;\n--Testcase 174:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 175:\nselect f1, sum() within group (order by x::float8)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\nbegin;\n--Testcase 176:\ndelete from FLOAT8_TBL;\n--Testcase 177:\ninsert into FLOAT8_TBL values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1);\n--Testcase 178:\nselect f1, percentile_cont(f1,f1)  -- error\nfrom generate_series(1,5) x,\n     FLOAT8_TBL\ngroup by f1 order by f1;\nrollback;\n\n--Testcase 179:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 693:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10) from aggtest;\n--Testcase 180:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 694:\nselect (percentile_cont(0.5) within group (order by b))::numeric(20,10), sum(b)::numeric(10,3) from aggtest;\n--Testcase 181:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 695:\nselect percentile_cont(0.5) within group (order by thousand) from tenk1;\n--Testcase 182:\nselect percentile_disc(0.5) within group (order by thousand) from tenk1;\n\nbegin;\n--Testcase 183:\ndelete from INT4_TBL;\n--Testcase 184:\ninsert into INT4_TBL values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 185:\nselect rank(3) within group (order by f1) from INT4_TBL;\n--Testcase 186:\nselect cume_dist(3) within group (order by f1) from INT4_TBL;\n--Testcase 187:\ninsert into INT4_TBL values (5);\n--Testcase 458:\n-- Round the result to limited digits to avoid platform-specific results.\n--Testcase 696:\nselect (percent_rank(3) within group (order by f1))::numeric(20,10) from INT4_TBL;\n--Testcase 459:\ndelete from INT4_TBL where f1 = 5;\n--Testcase 188:\nselect dense_rank(3) within group (order by f1) from INT4_TBL;\nrollback;\n\n--Testcase 189:\nselect percentile_disc(array[0,0.1,0.25,0.5,0.75,0.9,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 190:\nselect percentile_cont(array[0,0.25,0.5,0.75,1]) within group (order by thousand)\nfrom tenk1;\n--Testcase 191:\nselect percentile_disc(array[[null,1,0.5],[0.75,0.25,null]]) within group (order by thousand)\nfrom tenk1;\n\n--Testcase 460:\ncreate foreign table agg_t21 (x int) server sqlite_svr;\nbegin;\n--Testcase 248:\ninsert into agg_t21 select * from generate_series(1,6);\n--Testcase 249:\nselect percentile_cont(array[0,1,0.25,0.75,0.5,1,0.3,0.32,0.35,0.38,0.4]) within group (order by x)\nfrom agg_t21;\nrollback;\n\n--Testcase 192:\nselect ten, mode() within group (order by string4) from tenk1 group by ten;\n\n--Testcase 461:\ncreate foreign table agg_t20 (x text) server sqlite_svr;\nbegin;\n--Testcase 462:\ninsert into agg_t20 values (unnest('{fred,jim,fred,jack,jill,fred,jill,jim,jim,sheila,jim,sheila}'::text[]));\n--Testcase 463:\nselect percentile_disc(array[0.25,0.5,0.75]) within group (order by x) from agg_t20;\nrollback;\n\n-- check collation propagates up in suitable cases:\nbegin;\n--Testcase 464:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 465:\nselect pg_collation_for(percentile_disc(1) within group (order by x collate \"POSIX\")) from agg_t20;\nrollback;\n\n-- ordered-set aggs created with CREATE AGGREGATE\n--Testcase 466:\ncreate aggregate my_percentile_disc(float8 ORDER BY anyelement) (\n  stype = internal,\n  sfunc = ordered_set_transition,\n  finalfunc = percentile_disc_final,\n  finalfunc_extra = true,\n  finalfunc_modify = read_write\n);\n\n--Testcase 467:\ncreate aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\") (\n  stype = internal,\n  sfunc = ordered_set_transition_multi,\n  finalfunc = rank_final,\n  finalfunc_extra = true,\n  hypothetical\n);\n\n--Testcase 633:\nalter aggregate my_percentile_disc(float8 ORDER BY anyelement)\n  rename to test_percentile_disc;\n  \n--Testcase 634:\nalter aggregate my_rank(VARIADIC \"any\" ORDER BY VARIADIC \"any\")\n  rename to test_rank;\n\nbegin;\n--Testcase 468:\ninsert into agg_t21 values (1),(1),(2),(2),(3),(3),(4);\n--Testcase 469:\nselect test_rank(3) within group (order by x) from agg_t21;\nrollback;\n \n--Testcase 193:\nselect test_percentile_disc(0.5) within group (order by thousand) from tenk1;\n\n-- ordered-set aggs can't use ungrouped vars in direct args:\nbegin;\n--Testcase 470:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 471:\nselect rank(x) within group (order by x) from agg_t21;\nrollback;\n\n-- outer-level agg can't use a grouped arg of a lower level, either:\nbegin;\n--Testcase 472:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 473:\nselect array(select percentile_disc(a) within group (order by x)\n               from (values (0.3),(0.7)) v(a) group by a)\n  from agg_t21;\nrollback;\n\n-- agg in the direct args is a grouping violation, too:\nbegin;\n--Testcase 474:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 475:\nselect rank(sum(x)) within group (order by x) from agg_t21;\nrollback;\n\n-- hypothetical-set type unification and argument-count failures:\nbegin;\n--Testcase 264:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 265:\nselect rank(3) within group (order by x) from agg_t20;\nrollback;\n\n--Testcase 194:\nselect rank(3) within group (order by stringu1,stringu2) from tenk1;\n\nbegin;\n--Testcase 476:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 477:\nselect rank('fred') within group (order by x) from agg_t21;\nrollback;\n\nbegin;\n--Testcase 478:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 479:\nselect rank('adam'::text collate \"C\") within group (order by x collate \"POSIX\")\n  from agg_t20;\nrollback;\n\n-- hypothetical-set type unification successes:\nbegin;\n--Testcase 480:\ninsert into agg_t20 values ('fred'), ('jim');\n--Testcase 481:\nselect rank('adam'::varchar) within group (order by x) from agg_t20;\nrollback;\n\nbegin;\n--Testcase 482:\ninsert into agg_t21 select * from generate_series(1,5);\n--Testcase 483:\nselect rank('3') within group (order by x) from agg_t21;\nrollback;\n\n-- divide by zero check\nbegin;\n--Testcase 484:\ninsert into agg_t21 select * from generate_series(1,0);\n--Testcase 485:\nselect percent_rank(0) within group (order by x) from agg_t21;\nrollback;\n\n-- deparse and multiple features:\n--Testcase 486:\ncreate view aggordview1 as\nselect ten,\n       percentile_disc(0.5) within group (order by thousand) as p50,\n       percentile_disc(0.5) within group (order by thousand) filter (where hundred=1) as px,\n       rank(5,'AZZZZ',50) within group (order by hundred, string4 desc, hundred)\n  from tenk1\n group by ten order by ten;\n\n--Testcase 196:\nselect pg_get_viewdef('aggordview1');\n--Testcase 197:\nselect * from aggordview1 order by ten;\n--Testcase 487:\ndrop view aggordview1;\n\n-- variadic aggregates\n--Testcase 488:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 489:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n--Testcase 490:\ncreate function cleast_accum(anycompatible, variadic anycompatiblearray)\nreturns anycompatible language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n\n--Testcase 491:\ncreate aggregate cleast_agg(variadic items anycompatiblearray) (\n  stype = anycompatible, sfunc = cleast_accum);\n\n--Testcase 198:\nselect least_agg(q1,q2) from int8_tbl;\n--Testcase 199:\nselect least_agg(variadic array[q1,q2]) from int8_tbl;\n\n--Testcase 492:\nselect cleast_agg(q1,q2) from int8_tbl;\n--Testcase 493:\nselect cleast_agg(4.5,f1) from int4_tbl;\n--Testcase 494:\nselect cleast_agg(variadic array[4.5,f1]) from int4_tbl;\n--Testcase 495:\nselect pg_typeof(cleast_agg(variadic array[4.5,f1])) from int4_tbl;\n\n-- test aggregates with common transition functions share the same states\n--Testcase 496:\ncreate foreign table agg_t10(one int, id int options (key 'true')) server sqlite_svr;\n--Testcase 497:\ncreate foreign table agg_t11(one int, two int, id int options (key 'true')) server sqlite_svr;\n--Testcase 498:\ncreate foreign table agg_t12(a int, id int options (key 'true')) server sqlite_svr;\nbegin work;\n\n--Testcase 499:\ncreate type avg_state as (total bigint, count bigint);\n\n--Testcase 500:\ncreate or replace function avg_transfn(state avg_state, n int) returns avg_state as\n$$\ndeclare new_state avg_state;\nbegin\n\traise notice 'avg_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state.total := n;\n\t\t\tnew_state.count := 1;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate.total := state.total + n;\n\t\tstate.count := state.count + 1;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 501:\ncreate function avg_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total / state.count;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 502:\ncreate function sum_finalfn(state avg_state) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state.total;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 503:\ncreate aggregate my_avg(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn\n);\n\n--Testcase 504:\ncreate aggregate my_sum(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn\n);\n\n-- aggregate state should be shared as aggs are the same.\n--Testcase 505:\ndelete from agg_t10;\n--Testcase 506:\ninsert into agg_t10 values (1), (3);\n--Testcase 507:\nselect my_avg(one),my_avg(one) from agg_t10;\n\n-- aggregate state should be shared as transfn is the same for both aggs.\n--Testcase 508:\nselect my_avg(one),my_sum(one) from agg_t10;\n\n-- same as previous one, but with DISTINCT, which requires sorting the input.\n--Testcase 509:\ndelete from agg_t10;\n--Testcase 510:\ninsert into agg_t10 values (1), (3), (1);\n--Testcase 511:\nselect my_avg(distinct one),my_sum(distinct one) from agg_t10;\n\n-- shouldn't share states due to the distinctness not matching.\n--Testcase 512:\ndelete from agg_t10;\n--Testcase 513:\ninsert into agg_t10 values (1), (3);\n--Testcase 514:\nselect my_avg(distinct one),my_sum(one) from agg_t10;\n\n-- shouldn't share states due to the filter clause not matching.\n--Testcase 515:\nselect my_avg(one) filter (where one > 1),my_sum(one) from agg_t10;\n\n-- this should not share the state due to different input columns.\n--Testcase 516:\ndelete from agg_t11;\n--Testcase 517:\ninsert into agg_t11 values (1,2),(3,4);\n--Testcase 518:\nselect my_avg(one),my_sum(two) from agg_t11;\n\n-- exercise cases where OSAs share state\n--Testcase 519:\ndelete from agg_t12;\n--Testcase 520:\ninsert into agg_t12 values (1), (3), (5), (7);\n--Testcase 521:\nselect\n  percentile_cont(0.5) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n--Testcase 522:\nselect\n  percentile_cont(0.25) within group (order by a),\n  percentile_disc(0.5) within group (order by a)\nfrom agg_t12;\n\n-- these can't share state currently\n--Testcase 523:\nselect\n  rank(4) within group (order by a),\n  dense_rank(4) within group (order by a)\nfrom agg_t12;\n\n-- test that aggs with the same sfunc and initcond share the same agg state\n--Testcase 524:\ncreate aggregate my_sum_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = sum_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 525:\ncreate aggregate my_avg_init(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(10,0)'\n);\n\n--Testcase 526:\ncreate aggregate my_avg_init2(int4)\n(\n   stype = avg_state,\n   sfunc = avg_transfn,\n   finalfunc = avg_finalfn,\n   initcond = '(4,0)'\n);\n\n-- state should be shared if INITCONDs are matching\n--Testcase 527:\ndelete from agg_t10;\n--Testcase 528:\ninsert into agg_t10 values (1), (3);\n--Testcase 529:\nselect my_sum_init(one),my_avg_init(one) from agg_t10;\n\n\n-- Varying INITCONDs should cause the states not to be shared.\n--Testcase 530:\nselect my_sum_init(one),my_avg_init2(one) from agg_t10;\n\nrollback;\n\n-- test aggregate state sharing to ensure it works if one aggregate has a\n-- finalfn and the other one has none.\nbegin work;\n\n--Testcase 531:\ncreate or replace function sum_transfn(state int4, n int4) returns int4 as\n$$\ndeclare new_state int4;\nbegin\n\traise notice 'sum_transfn called with %', n;\n\tif state is null then\n\t\tif n is not null then\n\t\t\tnew_state := n;\n\t\t\treturn new_state;\n\t\tend if;\n\t\treturn null;\n\telsif n is not null then\n\t\tstate := state + n;\n\t\treturn state;\n\tend if;\n\n\treturn null;\nend\n$$ language plpgsql;\n\n--Testcase 532:\ncreate function halfsum_finalfn(state int4) returns int4 as\n$$\nbegin\n\tif state is null then\n\t\treturn NULL;\n\telse\n\t\treturn state / 2;\n\tend if;\nend\n$$ language plpgsql;\n\n--Testcase 533:\ncreate aggregate my_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn\n);\n\n--Testcase 534:\ncreate aggregate my_half_sum(int4)\n(\n   stype = int4,\n   sfunc = sum_transfn,\n   finalfunc = halfsum_finalfn\n);\n\n-- Agg state should be shared even though my_sum has no finalfn\n--Testcase 535:\ndelete from agg_t10;\n--Testcase 536:\ninsert into agg_t10 values (1), (2), (3), (4);\n--Testcase 537:\nselect my_sum(one),my_half_sum(one) from agg_t10;\n\nrollback;\n\n\n-- test that the aggregate transition logic correctly handles\n-- transition / combine functions returning NULL\n\n-- First test the case of a normal transition function returning NULL\nBEGIN;\n--Testcase 538:\nCREATE FUNCTION balkifnull(int8, int4)\nRETURNS int8\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 539:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = balkifnull(int8, int4),\n    STYPE = int8,\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n--Testcase 200:\nSELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- GROUP BY optimization by reordering GROUP BY clauses\n--Testcase 766:\nCREATE FOREIGN TABLE btg_groupby(x int, y int, z text, w int) SERVER sqlite_svr;\n--Testcase 767:\nINSERT INTO btg_groupby \n  SELECT\n    i % 10 AS x,\n    i % 10 AS y,\n    'abc' || i % 10 AS z,\n    i AS w\n  FROM generate_series(1, 100) AS i;\n\n-- CREATE INDEX is not supported for foreign tables.\n-- CREATE INDEX btg_x_y_idx ON btg_groupby(x, y);\n-- ANALYZE btg_groupby;\n\nSET enable_hashagg = off;\nSET enable_seqscan = off;\n\n-- Because CREATE INDEX is not supported for foreign tables, \n-- we cannot utilize the ordering of index scan to avoid a Sort operation\n-- Utilize the ordering of index scan to avoid a Sort operation\n--Testcase 768:\nEXPLAIN (COSTS OFF)\nSELECT count(*) FROM btg_groupby GROUP BY y, x;\n\n-- Engage incremental sort\n--Testcase 769:\nEXPLAIN (COSTS OFF)\nSELECT count(*) FROM btg_groupby GROUP BY z, y, w, x;\n\n-- Utilize the ordering of subquery scan to avoid a Sort operation\n--Testcase 770:\nEXPLAIN (COSTS OFF) SELECT count(*)\nFROM (SELECT * FROM btg_groupby ORDER BY x, y, w, z) AS q1\nGROUP BY w, x, z, y;\n\n-- Utilize the ordering of merge join to avoid a full Sort operation\nSET enable_hashjoin = off;\nSET enable_nestloop = off;\n--Testcase 771:\nEXPLAIN (COSTS OFF)\nSELECT count(*)\n  FROM btg_groupby t1 JOIN btg_groupby t2 ON t1.z = t2.z AND t1.w = t2.w AND t1.x = t2.x\n  GROUP BY t1.x, t1.y, t1.z, t1.w;\nRESET enable_nestloop;\nRESET enable_hashjoin;\n\n-- Should work with and without GROUP-BY optimization\n--Testcase 772:\nEXPLAIN (COSTS OFF)\nSELECT count(*) FROM btg_groupby GROUP BY w, x, z, y ORDER BY y, x, z, w;\n\n-- Utilize incremental sort to make the ORDER BY rule a bit cheaper\n--Testcase 773:\nEXPLAIN (COSTS OFF)\nSELECT count(*) FROM btg_groupby GROUP BY w, x, y, z ORDER BY x*x, z;\n\n-- Test the case where the number of incoming subtree path keys is more than\n-- the number of grouping keys.\n-- CREATE INDEX btg_y_x_w_idx ON btg_groupby(y, x, w);\n--Testcase 774:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT y, x, array_agg(distinct w)\n  FROM btg_groupby WHERE y < 0 GROUP BY x, y;\n\n-- Ensure that we do not select the aggregate pathkeys instead of the grouping\n-- pathkeys\n--Testcase 775:\nCREATE FOREIGN TABLE group_agg_pk(x int, y int, z int, w int, f int) SERVER sqlite_svr;\n--Testcase 776:\nINSERT INTO group_agg_pk SELECT\n  i % 10 AS x,\n  i % 2 AS y,\n  i % 2 AS z,\n  2 AS w,\n  i % 10 AS f\nFROM generate_series(1,100) AS i;\n-- ANALYZE group_agg_pk;\nSET enable_nestloop = off;\nSET enable_hashjoin = off;\n--Testcase 777:\nEXPLAIN (COSTS OFF)\nSELECT avg(c1.f ORDER BY c1.x, c1.y)\nFROM group_agg_pk c1 JOIN group_agg_pk c2 ON c1.x = c2.x\nGROUP BY c1.w, c1.z;\n--Testcase 778:\nSELECT avg(c1.f ORDER BY c1.x, c1.y)\nFROM group_agg_pk c1 JOIN group_agg_pk c2 ON c1.x = c2.x\nGROUP BY c1.w, c1.z;\n\n-- Pathkeys, built in a subtree, can be used to optimize GROUP-BY clause\n-- ordering.  Also, here we check that it doesn't depend on the initial clause\n-- order in the GROUP-BY list.\n--Testcase 780:\nEXPLAIN (COSTS OFF)\nSELECT c1.y,c1.x FROM group_agg_pk c1\n  JOIN group_agg_pk c2\n  ON c1.x = c2.x\nGROUP BY c1.y,c1.x,c2.x;\n--Testcase 781:\nEXPLAIN (COSTS OFF)\nSELECT c1.y,c1.x FROM group_agg_pk c1\n  JOIN group_agg_pk c2\n  ON c1.x = c2.x\nGROUP BY c1.y,c2.x,c1.x;\n\nRESET enable_nestloop;\nRESET enable_hashjoin;\n\n--Testcase 779:\nDROP FOREIGN TABLE group_agg_pk;\n\n-- -- CREATE UNIQUE INDEX is not supported for foreign table\n-- -- Test the case where the ordering of the scan matches the ordering within the\n-- -- aggregate but cannot be found in the group-by list\n-- CREATE TABLE agg_sort_order (c1 int PRIMARY KEY, c2 int);\n-- CREATE UNIQUE INDEX agg_sort_order_c2_idx ON agg_sort_order(c2);\n-- INSERT INTO agg_sort_order SELECT i, i FROM generate_series(1,100)i;\n-- ANALYZE agg_sort_order;\n\n-- EXPLAIN (COSTS OFF)\n-- SELECT array_agg(c1 ORDER BY c2),c2\n-- FROM agg_sort_order WHERE c2 < 100 GROUP BY c1 ORDER BY 2;\n\n-- DROP TABLE agg_sort_order CASCADE;\n\n--Testcase 678:\nDROP FOREIGN TABLE btg_groupby;\n\nRESET enable_hashagg;\nRESET enable_seqscan;\n\n-- Secondly test the case of a parallel aggregate combiner function\n-- returning NULL. For that use normal transition function, but a\n-- combiner function returning NULL.\nBEGIN;\n--Testcase 540:\nCREATE FUNCTION balkifnull(int8, int8)\nRETURNS int8\nPARALLEL SAFE\nSTRICT\nLANGUAGE plpgsql AS $$\nBEGIN\n    IF $1 IS NULL THEN\n       RAISE 'erroneously called with NULL argument';\n    END IF;\n    RETURN NULL;\nEND$$;\n\n--Testcase 541:\nCREATE AGGREGATE balk(int4)\n(\n    SFUNC = int4_sum(int8, int4),\n    STYPE = int8,\n    COMBINEFUNC = balkifnull(int8, int8),\n    PARALLEL = SAFE,\n    INITCOND = '0'\n);\n\n-- force use of parallelism\n-- Skip this test, cannot alter foreign table tenk1\n-- ALTER FOREIGN TABLE tenk1 set (parallel_workers = 4);\n-- SET LOCAL parallel_setup_cost=0;\n-- SET LOCAL max_parallel_workers_per_gather=4;\n\n-- EXPLAIN (COSTS OFF) SELECT balk(hundred) FROM tenk1;\n-- SELECT balk(hundred) FROM tenk1;\n\nROLLBACK;\n\n-- test multiple usage of an aggregate whose finalfn returns a R/W datum\nBEGIN;\n\n--Testcase 754:\nCREATE FUNCTION rwagg_sfunc(x anyarray, y anyarray) RETURNS anyarray\nLANGUAGE plpgsql IMMUTABLE AS $$\nBEGIN\n    RETURN array_fill(y[1], ARRAY[4]);\nEND;\n$$;\n\n--Testcase 755:\nCREATE FUNCTION rwagg_finalfunc(x anyarray) RETURNS anyarray\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nDECLARE\n    res x%TYPE;\nBEGIN\n    -- assignment is essential for this test, it expands the array to R/W\n    res := array_fill(x[1], ARRAY[4]);\n    RETURN res;\nEND;\n$$;\n\n--Testcase 756:\nCREATE AGGREGATE rwagg(anyarray) (\n    STYPE = anyarray,\n    SFUNC = rwagg_sfunc,\n    FINALFUNC = rwagg_finalfunc\n);\n\n--Testcase 757:\nCREATE FUNCTION eatarray(x real[]) RETURNS real[]\nLANGUAGE plpgsql STRICT IMMUTABLE AS $$\nBEGIN\n    x[1] := x[1] + 1;\n    RETURN x;\nEND;\n$$;\n\n--Testcase 758:\nCREATE FOREIGN TABLE float_tb(f real) SERVER sqlite_svr;\n--Testcase 759:\nINSERT INTO float_tb(f)  VALUES (1.0);\n--Testcase 760:\nSELECT eatarray(rwagg(ARRAY[f::real])), eatarray(rwagg(ARRAY[f::real])) FROM float_tb;\n\nROLLBACK;\n\n\n-- test coverage for aggregate combine/serial/deserial functions\nBEGIN;\n\n--Testcase 635:\nSET parallel_setup_cost = 0;\n--Testcase 636:\nSET parallel_tuple_cost = 0;\n--Testcase 637:\nSET min_parallel_table_scan_size = 0;\n--Testcase 638:\nSET max_parallel_workers_per_gather = 4;\n--Testcase 639:\nSET parallel_leader_participation = off;\n--Testcase 640:\nSET enable_indexonlyscan = off;\n\n-- variance(int4) covers numeric_poly_combine\n-- sum(int8) covers int8_avg_combine\n-- regr_count(float8, float8) covers int8inc_float8_float8 and aggregates with > 1 arg\n--Testcase 542:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 543:\nSELECT variance(unique1::int4), sum(unique1::int8), regr_count(unique1::float8, unique1::float8)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n-- variance(int8) covers numeric_combine\n-- avg(numeric) covers numeric_avg_combine\n--Testcase 544:\nEXPLAIN (COSTS OFF, VERBOSE)\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\n--Testcase 545:\nSELECT variance(unique1::int8), avg(unique1::numeric)\nFROM (SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1\n      UNION ALL SELECT * FROM tenk1) u;\n\nROLLBACK;\n\n-- test coverage for dense_rank\n--Testcase 546:\ncreate foreign table agg_t13(x int, id int options (key 'true')) server sqlite_svr;\n--Testcase 547:\ninsert into agg_t13 values (1),(1),(2),(2),(3),(3);\n--Testcase 548:\nSELECT dense_rank(x) WITHIN GROUP (ORDER BY x) FROM agg_t13 GROUP BY (x) ORDER BY 1;\n--Testcase 549:\ndelete from agg_t13;\n\n\n-- Ensure that the STRICT checks for aggregates does not take NULLness\n-- of ORDER BY columns into account. See bug report around\n-- 2a505161-2727-2473-7c46-591ed108ac52@email.cz\n--Testcase 550:\ncreate foreign table agg_t14(x int, y int, id int options (key 'true')) server sqlite_svr;\n--Testcase 551:\ninsert into agg_t14 values (1, NULL), (1, 2);\n--Testcase 552:\nSELECT min(x ORDER BY y) FROM agg_t14;\n--Testcase 553:\nSELECT min(x ORDER BY y) FROM agg_t14;\n\n-- check collation-sensitive matching between grouping expressions\nbegin;\n--Testcase 554:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 555:\nselect x||'a', case x||'a' when 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\nbegin;\n--Testcase 556:\ninsert into agg_t20 values (unnest(array['a','b']));\n--Testcase 557:\nselect x||'a', case when x||'a' = 'aa' then 1 else 0 end, count(*)\n  from agg_t20 group by x||'a' order by 1;\nrollback;\n\n-- Make sure that generation of HashAggregate for uniqification purposes\n-- does not lead to array overflow due to unexpected duplicate hash keys\n-- see CAFeeJoKKu0u+A_A9R9316djW-YW3-+Gtgvy3ju655qRHR3jtdA@mail.gmail.com\n--Testcase 641:\nset enable_memoize to off;\n--Testcase 558:\nexplain (costs off)\n  select 1 from tenk1\n   where (hundred, thousand) in (select twothousand, twothousand from onek);\n--Testcase 642:\nreset enable_memoize;\n\n--\n-- Hash Aggregation Spill tests\n--\n\n--Testcase 643:\nset enable_sort=false;\n--Testcase 644:\nset work_mem='64kB';\n\n--Testcase 559:\nselect unique1, count(*), sum(twothousand) from tenk1\ngroup by unique1\nhaving sum(fivethous) > 4975\norder by sum(twothousand);\n\n--Testcase 645:\nset work_mem to default;\n--Testcase 646:\nset enable_sort to default;\n\n--\n-- Compare results between plans using sorting and plans using hash\n-- aggregation. Force spilling in both cases by setting work_mem low.\n--\n\n--Testcase 647:\nset work_mem='64kB';\n\n--Testcase 560:\ncreate foreign table agg_data_2k(g int, id int options (key 'true')) server sqlite_svr;\n--Testcase 561:\ncreate foreign table agg_data_20k(g int, id int options (key 'true')) server sqlite_svr;\n\n--Testcase 562:\ncreate foreign table agg_group_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 563:\ncreate foreign table agg_group_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 564:\ncreate foreign table agg_group_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 565:\ncreate foreign table agg_group_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n--Testcase 566:\ncreate foreign table agg_hash_1(c1 int, c2 numeric, c3 int) server sqlite_svr;\n--Testcase 567:\ncreate foreign table agg_hash_2(a int, c1 numeric, c2 text, c3 int) server sqlite_svr;\n--Testcase 568:\ncreate foreign table agg_hash_3(c1 numeric, c2 int4, c3 int) server sqlite_svr;\n--Testcase 569:\ncreate foreign table agg_hash_4(c1 numeric, c2 text, c3 int) server sqlite_svr;\n\n\n--Testcase 570:\ninsert into agg_data_2k select g from generate_series(0, 1999) g;\n--analyze agg_data_2k;\n\n--Testcase 571:\ninsert into agg_data_20k select g from generate_series(0, 19999) g;\n--analyze agg_data_20k;\n\n-- Produce results with sorting.\n\n--Testcase 648:\nset enable_hashagg = false;\n\n--Testcase 649:\nset jit_above_cost = 0;\n\n--Testcase 572:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 573:\ninsert into agg_group_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 574:\ninsert into agg_group_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 650:\nset jit_above_cost to default;\n\n--Testcase 575:\ninsert into agg_group_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 576:\ninsert into agg_group_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n-- Produce results with hash aggregation\n\n--Testcase 651:\nset enable_hashagg = true;\n--Testcase 652:\nset enable_sort = false;\n\n--Testcase 653:\nset jit_above_cost = 0;\n\n--Testcase 577:\nexplain (costs off)\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 578:\ninsert into agg_hash_1\nselect g%10000 as c1, sum(g::numeric) as c2, count(*) as c3\n  from agg_data_20k group by g%10000;\n\n--Testcase 579:\ninsert into agg_hash_2\nselect * from\n  (values (100), (300), (500)) as r(a),\n  lateral (\n    select (g/2)::numeric as c1,\n           array_agg(g::numeric) as c2,\n\t   count(*) as c3\n    from agg_data_2k\n    where g < r.a\n    group by g/2) as s;\n\n--Testcase 654:\nset jit_above_cost to default;\n\n--Testcase 580:\ninsert into agg_hash_3\nselect (g/2)::numeric as c1, sum(7::int4) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 581:\ninsert into agg_hash_4\nselect (g/2)::numeric as c1, array_agg(g::numeric) as c2, count(*) as c3\n  from agg_data_2k group by g/2;\n\n--Testcase 655:\nset enable_sort = true;\n--Testcase 656:\nset work_mem to default;\n\n-- Compare group aggregation results to hash aggregation results\n\n--Testcase 582:\n(select * from agg_hash_1 except select * from agg_group_1)\n  union all\n(select * from agg_group_1 except select * from agg_hash_1);\n\n--Testcase 583:\n(select * from agg_hash_2 except select * from agg_group_2)\n  union all\n(select * from agg_group_2 except select * from agg_hash_2);\n\n--Testcase 584:\n(select * from agg_hash_3 except select * from agg_group_3)\n  union all\n(select * from agg_group_3 except select * from agg_hash_3);\n\n--Testcase 585:\n(select * from agg_hash_4 except select * from agg_group_4)\n  union all\n(select * from agg_group_4 except select * from agg_hash_4);\n\n--Testcase 792:\nDELETE FROM INT4_TBL;\n--Testcase 793:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 586:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 587:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/encodings.sql",
    "content": "-- tests for PR #76 github\n-- see https://www.postgresql.org/docs/current/multibyte.html\n-- EUC_CN, not tested\n-- EUC_JP\n-- EUC_JIS_2004, not tested\n-- EUC_KR\n-- EUC_TW, not tested\n-- ISO_8859_5\n-- ISO_8859_6\n-- ISO_8859_7\n-- ISO_8859_8\n-- KOI8R, not tested\n-- KOI8U, not tested\n-- LATIN1\n-- LATIN2\n-- LATIN3\n-- LATIN4\n-- LATIN5\n-- LATIN6\n-- LATIN7\n-- LATIN8\n-- LATIN9\n-- LATIN10\n-- MULE_INTERNAL, not tested\n-- SQL_ASCII\n-- WIN866, not tested\n-- WIN874, not tested\n-- WIN1250\n-- WIN1251\n-- WIN1252\n-- WIN1253\n-- WIN1254\n-- WIN1255\n-- WIN1256\n-- WIN1257\n-- WIN1258, not tested\n\n-- ================\n-- check all data in UTF8\n-- ================\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr;\nSELECT * FROM \"Unicode data\";\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\n-- euc_jp\nCREATE DATABASE \"contrib_regression_EUC_JP\" ENCODING EUC_JP LC_CTYPE='ja_JP.eucjp' LC_COLLATE='ja_JP.eucjp' template template0;\n\\connect \"contrib_regression_EUC_JP\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_JP\";\n\n-- ko_KR.euckr\nCREATE DATABASE \"contrib_regression_EUC_KR\" ENCODING EUC_KR LC_CTYPE='ko_KR.euckr' LC_COLLATE='ko_KR.euckr' template template0;\n\\connect \"contrib_regression_EUC_KR\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_EUC_KR\";\n\n-- ISO_8859_5\nCREATE DATABASE \"contrib_regression_ISO_8859_5\" ENCODING ISO_8859_5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_5\";\n\n-- ISO_8859_6\nCREATE DATABASE \"contrib_regression_ISO_8859_6\" ENCODING ISO_8859_6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_6\";\n\n-- ISO_8859_7\nCREATE DATABASE \"contrib_regression_ISO_8859_7\" ENCODING ISO_8859_7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_7\";\n\n-- ISO_8859_8\nCREATE DATABASE \"contrib_regression_ISO_8859_8\" ENCODING ISO_8859_8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_8\";\n\n-- ISO_8859_9\nCREATE DATABASE \"contrib_regression_ISO_8859_9\" ENCODING ISO_8859_9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_ISO_8859_9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_ISO_8859_9\";\n\n-- LATIN1\nCREATE DATABASE \"contrib_regression_LATIN1\" ENCODING LATIN1 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN1\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN1\";\n\n-- LATIN2\nCREATE DATABASE \"contrib_regression_LATIN2\" ENCODING LATIN2 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN2\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN2\";\n\n-- LATIN3\nCREATE DATABASE \"contrib_regression_LATIN3\" ENCODING LATIN3 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN3\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN3\";\n\n-- LATIN4\nCREATE DATABASE \"contrib_regression_LATIN4\" ENCODING LATIN4 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN4\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN4\";\n\n-- LATIN5\nCREATE DATABASE \"contrib_regression_LATIN5\" ENCODING LATIN5 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN5\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN5\";\n\n-- LATIN6\nCREATE DATABASE \"contrib_regression_LATIN6\" ENCODING LATIN6 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN6\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN6\";\n\n-- LATIN7\nCREATE DATABASE \"contrib_regression_LATIN7\" ENCODING LATIN7 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN7\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN7\";\n\n-- LATIN8\nCREATE DATABASE \"contrib_regression_LATIN8\" ENCODING LATIN8 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN8\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN8\";\n\n-- LATIN9\nCREATE DATABASE \"contrib_regression_LATIN9\" ENCODING LATIN9 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN9\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN9\";\n\n-- LATIN10\nCREATE DATABASE \"contrib_regression_LATIN10\" ENCODING LATIN10 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_LATIN10\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_LATIN10\";\n\n-- cp1250\nCREATE DATABASE \"contrib_regression_WIN1250\" ENCODING WIN1250 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1250\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1250\";\n\n-- cp1251\nCREATE DATABASE \"contrib_regression_WIN1251\" ENCODING WIN1251 LC_CTYPE='bg_BG' LC_COLLATE='bg_BG' template template0;\n\\connect \"contrib_regression_WIN1251\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1251\";\n\n-- cp1252\nCREATE DATABASE \"contrib_regression_WIN1252\" ENCODING WIN1252 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1252\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1252\";\n\n-- cp1253\nCREATE DATABASE \"contrib_regression_WIN1253\" ENCODING WIN1253 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1253\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1253\";\n\n-- cp1254\nCREATE DATABASE \"contrib_regression_WIN1254\" ENCODING WIN1254 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1254\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1254\";\n\n-- cp1255\nCREATE DATABASE \"contrib_regression_WIN1255\" ENCODING WIN1255 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1255\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1255\";\n\n-- cp1256\nCREATE DATABASE \"contrib_regression_WIN1256\" ENCODING WIN1256 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1256\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1256\";\n\n-- cp1257\nCREATE DATABASE \"contrib_regression_WIN1257\" ENCODING WIN1257 LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_WIN1257\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_WIN1257\";\n\n-- SQL_ASCII\nCREATE DATABASE \"contrib_regression_SQL_ASCII\" ENCODING SQL_ASCII LC_CTYPE='POSIX' LC_COLLATE='POSIX' template template0;\n\\connect \"contrib_regression_SQL_ASCII\"\nCREATE EXTENSION sqlite_fdw;\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\nCREATE FOREIGN TABLE \"Unicode data\"(i text OPTIONS (key 'true'), t text) SERVER sqlite_svr; \n-- EUC_JP\nSELECT * FROM \"Unicode data\" WHERE i = 'jap';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'いろはにほ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap+', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._');\nDELETE FROM \"Unicode data\" WHERE t = 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'jap+';\n-- 1251, ISO_8859_5\nSELECT * FROM \"Unicode data\" WHERE i = 'bel';\nSELECT * FROM \"Unicode data\" WHERE i = 'bul';\nSELECT * FROM \"Unicode data\" WHERE i = 'rus';\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'У руд%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ах, ч%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Широк%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Гей, %';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel+', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bel+';\nDELETE FROM \"Unicode data\" WHERE t = 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bel+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul+', 'Ах, чудна българска земьо, полюшвай цъфтящи жита._');\nSELECT * FROM \"Unicode data\" WHERE i = 'bul+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ах, чудна българска земьо, полюшвай цъфтящи жита._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'bul+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus+', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._');\nSELECT * FROM \"Unicode data\" WHERE i = 'rus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'rus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr+', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._');\nSELECT * FROM \"Unicode data\" WHERE i = 'ukr+';\nDELETE FROM \"Unicode data\" WHERE t = 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ukr+';\n-- 1256, ISO_8859_6\nSELECT * FROM \"Unicode data\" WHERE i = 'ara';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%ضَظَغ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara+', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_');\nSELECT * FROM \"Unicode data\" WHERE i = 'ara+';\nDELETE FROM \"Unicode data\" WHERE t = 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'ara+';\n-- 1253, ISO_8859_7\nSELECT * FROM \"Unicode data\" WHERE i = 'gre';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Τάχισ%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre+', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_');\nSELECT * FROM \"Unicode data\" WHERE i = 'gre+';\nDELETE FROM \"Unicode data\" WHERE t = 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός_';\n-- 1255, ISO_8859_8\nSELECT * FROM \"Unicode data\" WHERE i = 'heb';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '%כי ח%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb+', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_');\nSELECT * FROM \"Unicode data\" WHERE i = 'heb+';\nDELETE FROM \"Unicode data\" WHERE t = 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'heb+';\n-- 1252, LATIN1\nSELECT * FROM \"Unicode data\" WHERE i = 'eus';\nSELECT * FROM \"Unicode data\" WHERE i = 'fra';\nSELECT * FROM \"Unicode data\" WHERE i = 'spa';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Permi%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Dès N%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Quier%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus+', 'Permin gox dabiltzu yoskiñ._');\nSELECT * FROM \"Unicode data\" WHERE i = 'eus+';\nDELETE FROM \"Unicode data\" WHERE t = 'Permin gox dabiltzu yoskiñ._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'eus+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra+', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_');\nSELECT * FROM \"Unicode data\" WHERE i = 'fra+';\nDELETE FROM \"Unicode data\" WHERE t = 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'fra+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa+', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._');\nSELECT * FROM \"Unicode data\" WHERE i = 'spa+';\nDELETE FROM \"Unicode data\" WHERE t = 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'spa+';\n-- 1250, LATIN2\nSELECT * FROM \"Unicode data\" WHERE i = 'cze';\nSELECT * FROM \"Unicode data\" WHERE i = 'pol';\nSELECT * FROM \"Unicode data\" WHERE i = 'srp';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zvláš%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Pchną%';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ljuba%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze+', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._');\nSELECT * FROM \"Unicode data\" WHERE i = 'cze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'cze+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol+', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'pol+';\nDELETE FROM \"Unicode data\" WHERE t = 'Pchnąć w tę łódź jeża lub ośm skrzyń fig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'pol+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp+', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._');\nSELECT * FROM \"Unicode data\" WHERE i = 'srp+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'srp+';\n-- 1257, LATIN7\nSELECT * FROM \"Unicode data\" WHERE i = 'lav';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Ķieģeļu%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav+', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._');\nSELECT * FROM \"Unicode data\" WHERE i = 'lav+';\nDELETE FROM \"Unicode data\" WHERE t = 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'lav+';\n-- EUC_KR\nSELECT * FROM \"Unicode data\" WHERE i = 'kor';\nSELECT * FROM \"Unicode data\" WHERE t LIKE '키스의 고%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor+', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._');\nSELECT * FROM \"Unicode data\" WHERE i = 'kor+';\nDELETE FROM \"Unicode data\" WHERE t = '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'kor+';\n-- 1254, LATIN5\nSELECT * FROM \"Unicode data\" WHERE i = 'aze';\nSELECT * FROM \"Unicode data\" WHERE t LIKE 'Zəfər%';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze+', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._');\nSELECT * FROM \"Unicode data\" WHERE i = 'aze+';\nDELETE FROM \"Unicode data\" WHERE t = 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'aze+';\n-- etc\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm+', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_');\nSELECT * FROM \"Unicode data\" WHERE i = 'arm+';\nDELETE FROM \"Unicode data\" WHERE t = 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։_';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'arm+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle+', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._');\nSELECT * FROM \"Unicode data\" WHERE i = 'gle+';\nDELETE FROM \"Unicode data\" WHERE t = 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'gle+';\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo+', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._');\nSELECT * FROM \"Unicode data\" WHERE i = 'epo+';\nDELETE FROM \"Unicode data\" WHERE t = 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj._';\nSELECT count(*) n FROM \"Unicode data\" WHERE i = 'epo+';\n\nDROP FOREIGN TABLE \"Unicode data\";\nDROP SERVER sqlite_svr;\nDROP EXTENSION sqlite_fdw;\n\\connect contrib_regression;\nDROP DATABASE \"contrib_regression_SQL_ASCII\";\n"
  },
  {
    "path": "sql/17.0/extra/insert.sql",
    "content": "--\n-- insert with DEFAULT in the target_list\n--\n--Testcase 16:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 17:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 18:\nCREATE FOREIGN TABLE inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing') SERVER sqlite_svr;\n--Testcase 1:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT, DEFAULT);\n--Testcase 2:\ninsert into inserttest01 (col2, col3) values (3, DEFAULT);\n--Testcase 3:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, 5, DEFAULT);\n--Testcase 4:\ninsert into inserttest01 values (DEFAULT, 5, 'test');\n--Testcase 5:\ninsert into inserttest01 values (DEFAULT, 7);\n\n--Testcase 6:\nselect * from inserttest01;\n\n--\n-- insert with similar expression / target_list values (all fail)\n--\n--Testcase 7:\ninsert into inserttest01 (col1, col2, col3) values (DEFAULT, DEFAULT);\n--Testcase 8:\ninsert into inserttest01 (col1, col2, col3) values (1, 2);\n--Testcase 9:\ninsert into inserttest01 (col1) values (1, 2);\n--Testcase 10:\ninsert into inserttest01 (col1) values (DEFAULT, DEFAULT);\n\n--Testcase 11:\nselect * from inserttest01;\n\n--\n-- VALUES test\n--\n--Testcase 12:\ninsert into inserttest01 values(10, 20, '40'), (-1, 2, DEFAULT),\n    ((select 2), (select i from (values(3)) as foo (i)), 'values are fun!');\n\n--Testcase 13:\nselect * from inserttest01;\n\n--\n-- TOASTed value test\n--\n--Testcase 14:\ninsert into inserttest01 values(30, 50, repeat('x', 10000));\n\n--Testcase 15:\nselect col1, col2, char_length(col3) from inserttest01;\n\n--\n-- tuple larger than fillfactor\n-- foreign table does not support fillfactor\n--\n-- CREATE TABLE large_tuple_test (a int, b text) WITH (fillfactor = 10);\n-- ALTER TABLE large_tuple_test ALTER COLUMN b SET STORAGE plain;\n\n-- -- create page w/ free space in range [nearlyEmptyFreeSpace, MaxHeapTupleSize)\n-- INSERT INTO large_tuple_test (select 1, NULL);\n\n-- -- should still fit on the page\n-- INSERT INTO large_tuple_test (select 2, repeat('a', 1000));\n-- SELECT pg_size_pretty(pg_relation_size('large_tuple_test'::regclass, 'main'));\n\n-- -- add small record to the second page\n-- INSERT INTO large_tuple_test (select 3, NULL);\n\n-- -- now this tuple won't fit on the second page, but the insert should\n-- -- still succeed by extending the relation\n-- INSERT INTO large_tuple_test (select 4, repeat('a', 8126));\n\n-- DROP TABLE large_tuple_test;\n\n-- skip, sqlite fdw does not support customized type\n/*\n-- check indirection (field/array assignment), cf bug #14265\n--\n-- these tests are aware that transformInsertStmt has 3 separate code paths\n--\n\ncreate type insert_test_type as (if1 int, if2 text[]);\n\ncreate table inserttest (f1 int, f2 int[],\n                         f3 insert_test_type, f4 insert_test_type[]);\n\ninsert into inserttest (f2[1], f2[2]) values (1,2);\ninsert into inserttest (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttest (f2[1], f2[2]) select 7,8;\ninsert into inserttest (f2[1], f2[2]) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttest (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttest (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttest (f3.if1, f3.if2) values (1,default);  -- not supported\n\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttest (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttest (f4[1].if2[1], f4[1].if2[2]) select 'bear', 'beer';\n\nselect * from inserttest;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttest (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttest (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttest;\n-- Make the same tests with domains over the array and composite fields\n\ncreate domain insert_pos_ints as int[] check (value[1] > 0);\n\ncreate domain insert_test_domain as insert_test_type\n  check ((value).if2[1] is not null);\n\ncreate table inserttesta (f1 int, f2 insert_pos_ints);\ncreate table inserttestb (f3 insert_test_domain, f4 insert_test_domain[]);\n\ninsert into inserttesta (f2[1], f2[2]) values (1,2);\ninsert into inserttesta (f2[1], f2[2]) values (3,4), (5,6);\ninsert into inserttesta (f2[1], f2[2]) select 7,8;\ninsert into inserttesta (f2[1], f2[2]) values (1,default);  -- not supported\ninsert into inserttesta (f2[1], f2[2]) values (0,2);\ninsert into inserttesta (f2[1], f2[2]) values (3,4), (0,6);\ninsert into inserttesta (f2[1], f2[2]) select 0,8;\n\ninsert into inserttestb (f3.if1, f3.if2) values (1,array['foo']);\ninsert into inserttestb (f3.if1, f3.if2) values (1,'{foo}'), (2,'{bar}');\ninsert into inserttestb (f3.if1, f3.if2) select 3, '{baz,quux}';\ninsert into inserttestb (f3.if1, f3.if2) values (1,default);  -- not supported\ninsert into inserttestb (f3.if1, f3.if2) values (1,array[null]);\ninsert into inserttestb (f3.if1, f3.if2) values (1,'{null}'), (2,'{bar}');\ninsert into inserttestb (f3.if1, f3.if2) select 3, '{null,quux}';\n\ninsert into inserttestb (f3.if2[1], f3.if2[2]) values ('foo', 'bar');\ninsert into inserttestb (f3.if2[1], f3.if2[2]) values ('foo', 'bar'), ('baz', 'quux');\ninsert into inserttestb (f3.if2[1], f3.if2[2]) select 'bear', 'beer';\n\ninsert into inserttestb (f3, f4[1].if2[1], f4[1].if2[2]) values (row(1,'{x}'), 'foo', 'bar');\ninsert into inserttestb (f3, f4[1].if2[1], f4[1].if2[2]) values (row(1,'{x}'), 'foo', 'bar'), (row(2,'{y}'), 'baz', 'quux');\ninsert into inserttestb (f3, f4[1].if2[1], f4[1].if2[2]) select row(1,'{x}')::insert_test_domain, 'bear', 'beer';\n\nselect * from inserttesta;\nselect * from inserttestb;\n\n-- also check reverse-listing\ncreate table inserttest2 (f1 bigint, f2 text);\ncreate rule irule1 as on insert to inserttest2 do also\n  insert into inserttestb (f3.if2[1], f3.if2[2])\n  values (new.f1,new.f2);\ncreate rule irule2 as on insert to inserttest2 do also\n  insert into inserttestb (f4[1].if1, f4[1].if2[2])\n  values (1,'fool'),(new.f1,new.f2);\ncreate rule irule3 as on insert to inserttest2 do also\n  insert into inserttestb (f4[1].if1, f4[1].if2[2])\n  select new.f1, new.f2;\n\\d+ inserttest2\n\ndrop table inserttest2;\ndrop table inserttesta;\ndrop table inserttestb;\ndrop domain insert_pos_ints;\ndrop domain insert_test_domain;\n\n-- Verify that multiple inserts to subfields of a domain-over-container\n-- check the domain constraints only on the finished value\n\ncreate domain insert_nnarray as int[]\n  check (value[1] is not null and value[2] is not null);\n\ncreate domain insert_test_domain as insert_test_type\n  check ((value).if1 is not null and (value).if2 is not null);\n\ncreate table inserttesta (f1 insert_nnarray);\ninsert into inserttesta (f1[1]) values (1);  -- fail\ninsert into inserttesta (f1[1], f1[2]) values (1, 2);\n\ncreate table inserttestb (f1 insert_test_domain);\ninsert into inserttestb (f1.if1) values (1);  -- fail\ninsert into inserttestb (f1.if1, f1.if2) values (1, '{foo}');\n\ndrop table inserttesta;\ndrop table inserttestb;\ndrop domain insert_nnarray;\ndrop type insert_test_type cascade;\n\n-- direct partition inserts should check partition bound constraint\ncreate table range_parted (\n\ta text,\n\tb int\n) partition by range (a, (b+0));\n\n-- no partitions, so fail\ninsert into range_parted values ('a', 11);\n\ncreate table part1 partition of range_parted for values from ('a', 1) to ('a', 10);\ncreate table part2 partition of range_parted for values from ('a', 10) to ('a', 20);\ncreate table part3 partition of range_parted for values from ('b', 1) to ('b', 10);\ncreate table part4 partition of range_parted for values from ('b', 10) to ('b', 20);\n\n-- fail\ninsert into part1 values ('a', 11);\ninsert into part1 values ('b', 1);\n-- ok\ninsert into part1 values ('a', 1);\n-- fail\ninsert into part4 values ('b', 21);\ninsert into part4 values ('a', 10);\n-- ok\ninsert into part4 values ('b', 10);\n\n-- fail (partition key a has a NOT NULL constraint)\ninsert into part1 values (null);\n-- fail (expression key (b+0) cannot be null either)\ninsert into part1 values (1);\n\ncreate table list_parted (\n\ta text,\n\tb int\n) partition by list (lower(a));\ncreate table part_aa_bb partition of list_parted FOR VALUES IN ('aa', 'bb');\ncreate table part_cc_dd partition of list_parted FOR VALUES IN ('cc', 'dd');\ncreate table part_null partition of list_parted FOR VALUES IN (null);\n\n-- fail\ninsert into part_aa_bb values ('cc', 1);\ninsert into part_aa_bb values ('AAa', 1);\ninsert into part_aa_bb values (null);\n-- ok\ninsert into part_cc_dd values ('cC', 1);\ninsert into part_null values (null, 0);\n\n-- check in case of multi-level partitioned table\ncreate table part_ee_ff partition of list_parted for values in ('ee', 'ff') partition by range (b);\ncreate table part_ee_ff1 partition of part_ee_ff for values from (1) to (10);\ncreate table part_ee_ff2 partition of part_ee_ff for values from (10) to (20);\n\n-- test default partition\ncreate table part_default partition of list_parted default;\n-- Negative test: a row, which would fit in other partition, does not fit\n-- default partition, even when inserted directly\ninsert into part_default values ('aa', 2);\ninsert into part_default values (null, 2);\n-- ok\ninsert into part_default values ('Zz', 2);\n-- test if default partition works as expected for multi-level partitioned\n-- table as well as when default partition itself is further partitioned\ndrop table part_default;\ncreate table part_xx_yy partition of list_parted for values in ('xx', 'yy') partition by list (a);\ncreate table part_xx_yy_p1 partition of part_xx_yy for values in ('xx');\ncreate table part_xx_yy_defpart partition of part_xx_yy default;\ncreate table part_default partition of list_parted default partition by range(b);\ncreate table part_default_p1 partition of part_default for values from (20) to (30);\ncreate table part_default_p2 partition of part_default for values from (30) to (40);\n\n-- fail\ninsert into part_ee_ff1 values ('EE', 11);\ninsert into part_default_p2 values ('gg', 43);\n-- fail (even the parent's, ie, part_ee_ff's partition constraint applies)\ninsert into part_ee_ff1 values ('cc', 1);\ninsert into part_default values ('gg', 43);\n-- ok\ninsert into part_ee_ff1 values ('ff', 1);\ninsert into part_ee_ff2 values ('ff', 11);\ninsert into part_default_p1 values ('cd', 25);\ninsert into part_default_p2 values ('de', 35);\ninsert into list_parted values ('ab', 21);\ninsert into list_parted values ('xx', 1);\ninsert into list_parted values ('yy', 2);\nselect tableoid::regclass, * from list_parted;\n\n-- Check tuple routing for partitioned tables\n\n-- fail\ninsert into range_parted values ('a', 0);\n-- ok\ninsert into range_parted values ('a', 1);\ninsert into range_parted values ('a', 10);\n-- fail\ninsert into range_parted values ('a', 20);\n-- ok\ninsert into range_parted values ('b', 1);\ninsert into range_parted values ('b', 10);\n-- fail (partition key (b+0) is null)\ninsert into range_parted values ('a');\n\n-- Check default partition\ncreate table part_def partition of range_parted default;\n-- fail\ninsert into part_def values ('b', 10);\n-- ok\ninsert into part_def values ('c', 10);\ninsert into range_parted values (null, null);\ninsert into range_parted values ('a', null);\ninsert into range_parted values (null, 19);\ninsert into range_parted values ('b', 20);\n\nselect tableoid::regclass, * from range_parted;\n-- ok\ninsert into list_parted values (null, 1);\ninsert into list_parted (a) values ('aA');\n-- fail (partition of part_ee_ff not found in both cases)\ninsert into list_parted values ('EE', 0);\ninsert into part_ee_ff values ('EE', 0);\n-- ok\ninsert into list_parted values ('EE', 1);\ninsert into part_ee_ff values ('EE', 10);\nselect tableoid::regclass, * from list_parted;\n\n-- some more tests to exercise tuple-routing with multi-level partitioning\ncreate table part_gg partition of list_parted for values in ('gg') partition by range (b);\ncreate table part_gg1 partition of part_gg for values from (minvalue) to (1);\ncreate table part_gg2 partition of part_gg for values from (1) to (10) partition by range (b);\ncreate table part_gg2_1 partition of part_gg2 for values from (1) to (5);\ncreate table part_gg2_2 partition of part_gg2 for values from (5) to (10);\n\ncreate table part_ee_ff3 partition of part_ee_ff for values from (20) to (30) partition by range (b);\ncreate table part_ee_ff3_1 partition of part_ee_ff3 for values from (20) to (25);\ncreate table part_ee_ff3_2 partition of part_ee_ff3 for values from (25) to (30);\n\ntruncate list_parted;\ninsert into list_parted values ('aa'), ('cc');\ninsert into list_parted select 'Ff', s.a from generate_series(1, 29) s(a);\ninsert into list_parted select 'gg', s.a from generate_series(1, 9) s(a);\ninsert into list_parted (b) values (1);\nselect tableoid::regclass::text, a, min(b) as min_b, max(b) as max_b from list_parted group by 1, 2 order by 1;\n\n-- direct partition inserts should check hash partition bound constraint\n\ncreate table hash_parted (\n\ta int\n) partition by hash (a part_test_int4_ops);\ncreate table hpart0 partition of hash_parted for values with (modulus 4, remainder 0);\ncreate table hpart1 partition of hash_parted for values with (modulus 4, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 4, remainder 3);\n\ninsert into hash_parted values(generate_series(1,10));\n\n-- direct insert of values divisible by 4 - ok;\ninsert into hpart0 values(12),(16);\n-- fail;\ninsert into hpart0 values(11);\n-- 11 % 4 -> 3 remainder i.e. valid data for hpart3 partition\ninsert into hpart3 values(11);\n\n-- view data\nselect tableoid::regclass as part, a, a%4 as \"remainder = a % 4\"\nfrom hash_parted order by part;\n\n-- test \\d+ output on a table which has both partitioned and unpartitioned\n-- partitions\n\\d+ list_parted\n\n-- cleanup\ndrop table range_parted, list_parted;\ndrop table hash_parted;\n\n-- test that a default partition added as the first partition accepts any value\n-- including null\ncreate table list_parted (a int) partition by list (a);\ncreate table part_default partition of list_parted default;\n\\d+ part_default\ninsert into part_default values (null);\ninsert into part_default values (1);\ninsert into part_default values (-1);\nselect tableoid::regclass, a from list_parted;\n-- cleanup\ndrop table list_parted;\n\n-- more tests for certain multi-level partitioning scenarios\ncreate table mlparted (a int, b int) partition by range (a, b);\ncreate table mlparted1 (b int not null, a int not null) partition by range ((b+0));\ncreate table mlparted11 (like mlparted1);\nalter table mlparted11 drop a;\nalter table mlparted11 add a int;\nalter table mlparted11 drop a;\nalter table mlparted11 add a int not null;\n-- attnum for key attribute 'a' is different in mlparted, mlparted1, and mlparted11\nselect attrelid::regclass, attname, attnum\nfrom pg_attribute\nwhere attname = 'a'\n and (attrelid = 'mlparted'::regclass\n   or attrelid = 'mlparted1'::regclass\n   or attrelid = 'mlparted11'::regclass)\norder by attrelid::regclass::text;\n\nalter table mlparted1 attach partition mlparted11 for values from (2) to (5);\nalter table mlparted attach partition mlparted1 for values from (1, 2) to (1, 10);\n\n-- check that \"(1, 2)\" is correctly routed to mlparted11.\ninsert into mlparted values (1, 2);\nselect tableoid::regclass, * from mlparted;\n\n-- check that proper message is shown after failure to route through mlparted1\ninsert into mlparted (a, b) values (1, 5);\n\ntruncate mlparted;\nalter table mlparted add constraint check_b check (b = 3);\n\n-- have a BR trigger modify the row such that the check_b is violated\ncreate function mlparted11_trig_fn()\nreturns trigger AS\n$$\nbegin\n  NEW.b := 4;\n  return NEW;\nend;\n$$\nlanguage plpgsql;\ncreate trigger mlparted11_trig before insert ON mlparted11\n  for each row execute procedure mlparted11_trig_fn();\n\n-- check that the correct row is shown when constraint check_b fails after\n-- \"(1, 2)\" is routed to mlparted11 (actually \"(1, 4)\" would be shown due\n-- to the BR trigger mlparted11_trig_fn)\ninsert into mlparted values (1, 2);\ndrop trigger mlparted11_trig on mlparted11;\ndrop function mlparted11_trig_fn();\n\n-- check that inserting into an internal partition successfully results in\n-- checking its partition constraint before inserting into the leaf partition\n-- selected by tuple-routing\ninsert into mlparted1 (a, b) values (2, 3);\n\n-- check routing error through a list partitioned table when the key is null\ncreate table lparted_nonullpart (a int, b char) partition by list (b);\ncreate table lparted_nonullpart_a partition of lparted_nonullpart for values in ('a');\ninsert into lparted_nonullpart values (1);\ndrop table lparted_nonullpart;\n\n-- check that RETURNING works correctly with tuple-routing\nalter table mlparted drop constraint check_b;\ncreate table mlparted12 partition of mlparted1 for values from (5) to (10);\ncreate table mlparted2 (b int not null, a int not null);\nalter table mlparted attach partition mlparted2 for values from (1, 10) to (1, 20);\ncreate table mlparted3 partition of mlparted for values from (1, 20) to (1, 30);\ncreate table mlparted4 (like mlparted);\nalter table mlparted4 drop a;\nalter table mlparted4 add a int not null;\nalter table mlparted attach partition mlparted4 for values from (1, 30) to (1, 40);\nwith ins (a, b, c) as\n  (insert into mlparted (b, a) select s.a, 1 from generate_series(2, 39) s(a) returning tableoid::regclass, *)\n  select a, b, min(c), max(c) from ins group by a, b order by 1;\n\nalter table mlparted add c text;\ncreate table mlparted5 (c text, a int not null, b int not null) partition by list (c);\ncreate table mlparted5a (a int not null, c text, b int not null);\nalter table mlparted5 attach partition mlparted5a for values in ('a');\nalter table mlparted attach partition mlparted5 for values from (1, 40) to (1, 50);\nalter table mlparted add constraint check_b check (a = 1 and b < 45);\ninsert into mlparted values (1, 45, 'a');\ncreate function mlparted5abrtrig_func() returns trigger as $$ begin new.c = 'b'; return new; end; $$ language plpgsql;\ncreate trigger mlparted5abrtrig before insert on mlparted5a for each row execute procedure mlparted5abrtrig_func();\ninsert into mlparted5 (a, b, c) values (1, 40, 'a');\ndrop table mlparted5;\nalter table mlparted drop constraint check_b;\n\n-- Check multi-level default partition\ncreate table mlparted_def partition of mlparted default partition by range(a);\ncreate table mlparted_def1 partition of mlparted_def for values from (40) to (50);\ncreate table mlparted_def2 partition of mlparted_def for values from (50) to (60);\ninsert into mlparted values (40, 100);\ninsert into mlparted_def1 values (42, 100);\ninsert into mlparted_def2 values (54, 50);\n-- fail\ninsert into mlparted values (70, 100);\ninsert into mlparted_def1 values (52, 50);\ninsert into mlparted_def2 values (34, 50);\n-- ok\ncreate table mlparted_defd partition of mlparted_def default;\ninsert into mlparted values (70, 100);\n\nselect tableoid::regclass, * from mlparted_def;\n\n-- Check multi-level tuple routing with attributes dropped from the\n-- top-most parent.  First remove the last attribute.\nalter table mlparted add d int, add e int;\nalter table mlparted drop e;\ncreate table mlparted5 partition of mlparted\n  for values from (1, 40) to (1, 50) partition by range (c);\ncreate table mlparted5_ab partition of mlparted5\n  for values from ('a') to ('c') partition by list (c);\n-- This partitioned table should remain with no partitions.\ncreate table mlparted5_cd partition of mlparted5\n  for values from ('c') to ('e') partition by list (c);\ncreate table mlparted5_a partition of mlparted5_ab for values in ('a');\ncreate table mlparted5_b (d int, b int, c text, a int);\nalter table mlparted5_ab attach partition mlparted5_b for values in ('b');\ntruncate mlparted;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ntruncate mlparted;\n-- Remove the before last attribute.\nalter table mlparted add e int, add d int;\nalter table mlparted drop e;\ninsert into mlparted values (1, 2, 'a', 1);\ninsert into mlparted values (1, 40, 'a', 1);  -- goes to mlparted5_a\ninsert into mlparted values (1, 45, 'b', 1);  -- goes to mlparted5_b\ninsert into mlparted values (1, 45, 'c', 1);  -- goes to mlparted5_cd, fails\ninsert into mlparted values (1, 45, 'f', 1);  -- goes to mlparted5, fails\nselect tableoid::regclass, * from mlparted order by a, b, c, d;\nalter table mlparted drop d;\ndrop table mlparted5;\n\n-- check that message shown after failure to find a partition shows the\n-- appropriate key description (or none) in various situations\ncreate table key_desc (a int, b int) partition by list ((a+0));\ncreate table key_desc_1 partition of key_desc for values in (1) partition by range (b);\n\ncreate user regress_insert_other_user;\ngrant select (a) on key_desc_1 to regress_insert_other_user;\ngrant insert on key_desc to regress_insert_other_user;\n\nset role regress_insert_other_user;\n-- no key description is shown\ninsert into key_desc values (1, 1);\n\nreset role;\ngrant select (b) on key_desc_1 to regress_insert_other_user;\nset role regress_insert_other_user;\n-- key description (b)=(1) is now shown\ninsert into key_desc values (1, 1);\n\n-- key description is not shown if key contains expression\ninsert into key_desc values (2, 1);\nreset role;\nrevoke all on key_desc from regress_insert_other_user;\nrevoke all on key_desc_1 from regress_insert_other_user;\ndrop role regress_insert_other_user;\ndrop table key_desc, key_desc_1;\n\n-- test minvalue/maxvalue restrictions\ncreate table mcrparted (a int, b int, c int) partition by range (a, abs(b), c);\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, 0, 0) to (1, maxvalue, maxvalue);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, minvalue);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, 0) to (30, 20, minvalue);\n\n-- check multi-column range partitioning expression enforces the same\n-- constraint as what tuple-routing would determine it to be\ncreate table mcrparted0 partition of mcrparted for values from (minvalue, minvalue, minvalue) to (1, maxvalue, maxvalue);\ncreate table mcrparted1 partition of mcrparted for values from (2, 1, minvalue) to (10, 5, 10);\ncreate table mcrparted2 partition of mcrparted for values from (10, 6, minvalue) to (10, maxvalue, maxvalue);\ncreate table mcrparted3 partition of mcrparted for values from (11, 1, 1) to (20, 10, 10);\ncreate table mcrparted4 partition of mcrparted for values from (21, minvalue, minvalue) to (30, 20, maxvalue);\ncreate table mcrparted5 partition of mcrparted for values from (30, 21, 20) to (maxvalue, maxvalue, maxvalue);\n\n-- null not allowed in range partition\ninsert into mcrparted values (null, null, null);\n\n-- routed to mcrparted0\ninsert into mcrparted values (0, 1, 1);\ninsert into mcrparted0 values (0, 1, 1);\n\n-- routed to mcparted1\ninsert into mcrparted values (9, 1000, 1);\ninsert into mcrparted1 values (9, 1000, 1);\ninsert into mcrparted values (10, 5, -1);\ninsert into mcrparted1 values (10, 5, -1);\ninsert into mcrparted values (2, 1, 0);\ninsert into mcrparted1 values (2, 1, 0);\n\n-- routed to mcparted2\ninsert into mcrparted values (10, 6, 1000);\ninsert into mcrparted2 values (10, 6, 1000);\ninsert into mcrparted values (10, 1000, 1000);\ninsert into mcrparted2 values (10, 1000, 1000);\n\n-- no partition exists, nor does mcrparted3 accept it\ninsert into mcrparted values (11, 1, -1);\ninsert into mcrparted3 values (11, 1, -1);\n\n-- routed to mcrparted5\ninsert into mcrparted values (30, 21, 20);\ninsert into mcrparted5 values (30, 21, 20);\ninsert into mcrparted4 values (30, 21, 20);\t-- error\n\n-- check rows\nselect tableoid::regclass::text, * from mcrparted order by 1;\n\n-- cleanup\ndrop table mcrparted;\n\n-- check that a BR constraint can't make partition contain violating rows\ncreate table brtrigpartcon (a int, b text) partition by list (a);\ncreate table brtrigpartcon1 partition of brtrigpartcon for values in (1);\ncreate or replace function brtrigpartcon1trigf() returns trigger as $$begin new.a := 2; return new; end$$ language plpgsql;\ncreate trigger brtrigpartcon1trig before insert on brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();\ninsert into brtrigpartcon values (1, 'hi there');\ninsert into brtrigpartcon1 values (1, 'hi there');\n\n-- check that the message shows the appropriate column description in a\n-- situation where the partitioned table is not the primary ModifyTable node\ncreate table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);\ncreate role regress_coldesc_role;\ngrant insert on inserttest3 to regress_coldesc_role;\ngrant insert on brtrigpartcon to regress_coldesc_role;\nrevoke select on brtrigpartcon from regress_coldesc_role;\nset role regress_coldesc_role;\nwith result as (insert into brtrigpartcon values (1, 'hi there') returning 1)\n  insert into inserttest3 (f3) select * from result;\nreset role;\n\n-- cleanup\nrevoke all on inserttest3 from regress_coldesc_role;\nrevoke all on brtrigpartcon from regress_coldesc_role;\ndrop role regress_coldesc_role;\ndrop table inserttest3;\ndrop table brtrigpartcon;\ndrop function brtrigpartcon1trigf();\n\n-- check that \"do nothing\" BR triggers work with tuple-routing\ncreate table donothingbrtrig_test (a int, b text) partition by list (a);\ncreate table donothingbrtrig_test1 (b text, a int);\ncreate table donothingbrtrig_test2 (c text, b text, a int);\nalter table donothingbrtrig_test2 drop column c;\ncreate or replace function donothingbrtrig_func() returns trigger as $$begin raise notice 'b: %', new.b; return NULL; end$$ language plpgsql;\ncreate trigger donothingbrtrig1 before insert on donothingbrtrig_test1 for each row execute procedure donothingbrtrig_func();\ncreate trigger donothingbrtrig2 before insert on donothingbrtrig_test2 for each row execute procedure donothingbrtrig_func();\nalter table donothingbrtrig_test attach partition donothingbrtrig_test1 for values in (1);\nalter table donothingbrtrig_test attach partition donothingbrtrig_test2 for values in (2);\ninsert into donothingbrtrig_test values (1, 'foo'), (2, 'bar');\ncopy donothingbrtrig_test from stdout;\n1\tbaz\n2\tqux\n\\.\nselect tableoid::regclass, * from donothingbrtrig_test;\n\n-- cleanup\ndrop table donothingbrtrig_test;\ndrop function donothingbrtrig_func();\n\n-- check multi-column range partitioning with minvalue/maxvalue constraints\ncreate table mcrparted (a text, b int) partition by range(a, b);\ncreate table mcrparted1_lt_b partition of mcrparted for values from (minvalue, minvalue) to ('b', minvalue);\ncreate table mcrparted2_b partition of mcrparted for values from ('b', minvalue) to ('c', minvalue);\ncreate table mcrparted3_c_to_common partition of mcrparted for values from ('c', minvalue) to ('common', minvalue);\ncreate table mcrparted4_common_lt_0 partition of mcrparted for values from ('common', minvalue) to ('common', 0);\ncreate table mcrparted5_common_0_to_10 partition of mcrparted for values from ('common', 0) to ('common', 10);\ncreate table mcrparted6_common_ge_10 partition of mcrparted for values from ('common', 10) to ('common', maxvalue);\ncreate table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);\ncreate table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);\n\n\\d+ mcrparted\n\\d+ mcrparted1_lt_b\n\\d+ mcrparted2_b\n\\d+ mcrparted3_c_to_common\n\\d+ mcrparted4_common_lt_0\n\\d+ mcrparted5_common_0_to_10\n\\d+ mcrparted6_common_ge_10\n\\d+ mcrparted7_gt_common_lt_d\n\\d+ mcrparted8_ge_d\n\ninsert into mcrparted values ('aaa', 0), ('b', 0), ('bz', 10), ('c', -10),\n    ('comm', -10), ('common', -10), ('common', 0), ('common', 10),\n    ('commons', 0), ('d', -10), ('e', 0);\nselect tableoid::regclass, * from mcrparted order by a, b;\ndrop table mcrparted;\n\n-- check that wholerow vars in the RETURNING list work with partitioned tables\ncreate table returningwrtest (a int) partition by list (a);\ncreate table returningwrtest1 partition of returningwrtest for values in (1);\ninsert into returningwrtest values (1) returning returningwrtest;\n\n-- check also that the wholerow vars in RETURNING list are converted as needed\nalter table returningwrtest add b text;\ncreate table returningwrtest2 (b text, c int, a int);\nalter table returningwrtest2 drop c;\nalter table returningwrtest attach partition returningwrtest2 for values in (2);\ninsert into returningwrtest values (2, 'foo') returning returningwrtest;\ndrop table returningwrtest;\n*/\n\n-- drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 19:\nDROP SERVER sqlite_svr;\n--Testcase 20:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/join.sql",
    "content": "--\n-- JOIN\n-- Test JOIN clauses\n--\n--Testcase 360:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 361:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 362:\nCREATE FOREIGN TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n) SERVER sqlite_svr; \n\n--Testcase 363:\nCREATE FOREIGN TABLE J2_TBL (\n  i integer,\n  k integer\n) SERVER sqlite_svr; \n\n--Testcase 364:\nCREATE FOREIGN TABLE tenk1 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 365:\nCREATE FOREIGN TABLE tenk2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 366:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 641:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n--Testcase 642:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n--Testcase 643:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n--Testcase 644:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n--Testcase 645:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n--Testcase 367:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 646:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 647:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 648:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 649:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 650:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n--Testcase 368:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 651:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 652:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 653:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 654:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 655:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n--Testcase 369:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO J1_TBL VALUES (1, 4, 'one');\n--Testcase 2:\nINSERT INTO J1_TBL VALUES (2, 3, 'two');\n--Testcase 3:\nINSERT INTO J1_TBL VALUES (3, 2, 'three');\n--Testcase 4:\nINSERT INTO J1_TBL VALUES (4, 1, 'four');\n--Testcase 5:\nINSERT INTO J1_TBL VALUES (5, 0, 'five');\n--Testcase 6:\nINSERT INTO J1_TBL VALUES (6, 6, 'six');\n--Testcase 7:\nINSERT INTO J1_TBL VALUES (7, 7, 'seven');\n--Testcase 8:\nINSERT INTO J1_TBL VALUES (8, 8, 'eight');\n--Testcase 9:\nINSERT INTO J1_TBL VALUES (0, NULL, 'zero');\n--Testcase 10:\nINSERT INTO J1_TBL VALUES (NULL, NULL, 'null');\n--Testcase 11:\nINSERT INTO J1_TBL VALUES (NULL, 0, 'zero');\n\n--Testcase 12:\nINSERT INTO J2_TBL VALUES (1, -1);\n--Testcase 13:\nINSERT INTO J2_TBL VALUES (2, 2);\n--Testcase 14:\nINSERT INTO J2_TBL VALUES (3, -3);\n--Testcase 15:\nINSERT INTO J2_TBL VALUES (2, 4);\n--Testcase 16:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 17:\nINSERT INTO J2_TBL VALUES (5, -5);\n--Testcase 18:\nINSERT INTO J2_TBL VALUES (0, NULL);\n--Testcase 19:\nINSERT INTO J2_TBL VALUES (NULL, NULL);\n--Testcase 20:\nINSERT INTO J2_TBL VALUES (NULL, 0);\n\n-- useful in some tests below\n--Testcase 370:\ncreate temp table onerow();\n--Testcase 371:\ninsert into onerow default values;\nanalyze onerow;\n\n\n--\n-- CORRELATION NAMES\n-- Make sure that table/column aliases are supported\n-- before diving into more complex join syntax.\n--\n\n--Testcase 21:\nSELECT *\n  FROM J1_TBL AS tx;\n\n--Testcase 22:\nSELECT *\n  FROM J1_TBL tx;\n\n--Testcase 23:\nSELECT *\n  FROM J1_TBL AS t1 (a, b, c);\n\n--Testcase 24:\nSELECT *\n  FROM J1_TBL t1 (a, b, c);\n\n--Testcase 25:\nSELECT *\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e);\n\n--Testcase 26:\nSELECT t1.a, t2.e\n  FROM J1_TBL t1 (a, b, c), J2_TBL t2 (d, e)\n  WHERE t1.a = t2.d;\n\n\n--\n-- CROSS JOIN\n-- Qualifications are not allowed on cross joins,\n-- which degenerate into a standard unqualified inner join.\n--\n\n--Testcase 27:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- ambiguous column\n--Testcase 28:\nSELECT i, k, t\n  FROM J1_TBL CROSS JOIN J2_TBL;\n\n-- resolve previous ambiguity by specifying the table name\n--Testcase 29:\nSELECT t1.i, k, t\n  FROM J1_TBL t1 CROSS JOIN J2_TBL t2;\n\n--Testcase 30:\nSELECT ii, tt, kk\n  FROM (J1_TBL CROSS JOIN J2_TBL)\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 31:\nSELECT tx.ii, tx.jj, tx.kk\n  FROM (J1_TBL t1 (a, b, c) CROSS JOIN J2_TBL t2 (d, e))\n    AS tx (ii, jj, tt, ii2, kk);\n\n--Testcase 32:\nSELECT *\n  FROM J1_TBL CROSS JOIN J2_TBL a CROSS JOIN J2_TBL b;\n\n\n--\n--\n-- Inner joins (equi-joins)\n--\n--\n\n--\n-- Inner joins (equi-joins) with USING clause\n-- The USING syntax changes the shape of the resulting table\n-- by including a column in the USING clause only once in the result.\n--\n\n-- Inner equi-join on specified column\n--Testcase 33:\nSELECT *\n  FROM J1_TBL INNER JOIN J2_TBL USING (i);\n\n-- Same as above, slightly different syntax\n--Testcase 34:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i);\n\n--Testcase 35:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, d) USING (a)\n  ORDER BY a, d;\n\n--Testcase 36:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) JOIN J2_TBL t2 (a, b) USING (b)\n  ORDER BY b, t1.a;\n\n-- test join using aliases\n--Testcase 489:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 490:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';  -- ok\n--Testcase 491:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i)) AS x WHERE J1_TBL.t = 'one';  -- error\n--Testcase 492:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.i = 1;  -- ok\n--Testcase 493:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE x.t = 'one';  -- error\n--Testcase 494:\nSELECT *\n  FROM (J1_TBL JOIN J2_TBL USING (i) AS x) AS xx WHERE x.i = 1;  -- error (XXX could use better hint)\n--Testcase 495:\nSELECT *\n  FROM J1_TBL a1 JOIN J2_TBL a2 USING (i) AS a1;  -- error\n--Testcase 496:\nSELECT x.*\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 497:\nSELECT ROW(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n--Testcase 498:\nSELECT row_to_json(x.*)\n  FROM J1_TBL JOIN J2_TBL USING (i) AS x WHERE J1_TBL.t = 'one';\n\n--\n-- NATURAL JOIN\n-- Inner equi-join on all columns with the same name\n--\n\n--Testcase 37:\nSELECT *\n  FROM J1_TBL NATURAL JOIN J2_TBL;\n\n--Testcase 38:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (a, d);\n\n--Testcase 39:\nSELECT *\n  FROM J1_TBL t1 (a, b, c) NATURAL JOIN J2_TBL t2 (d, a);\n\n-- mismatch number of columns\n-- currently, Postgres will fill in with underlying names\n--Testcase 40:\nSELECT *\n  FROM J1_TBL t1 (a, b) NATURAL JOIN J2_TBL t2 (a);\n\n\n--\n-- Inner joins (equi-joins)\n--\n\n--Testcase 41:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.i);\n\n--Testcase 42:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i = J2_TBL.k);\n\n\n--\n-- Non-equi-joins\n--\n\n--Testcase 43:\nSELECT *\n  FROM J1_TBL JOIN J2_TBL ON (J1_TBL.i <= J2_TBL.k);\n\n\n--\n-- Outer joins\n-- Note that OUTER is a noise word\n--\n\n--Testcase 44:\nSELECT *\n  FROM J1_TBL LEFT OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 45:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 46:\nSELECT *\n  FROM J1_TBL RIGHT OUTER JOIN J2_TBL USING (i);\n\n--Testcase 47:\nSELECT *\n  FROM J1_TBL RIGHT JOIN J2_TBL USING (i);\n\n--Testcase 48:\nSELECT *\n  FROM J1_TBL FULL OUTER JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 49:\nSELECT *\n  FROM J1_TBL FULL JOIN J2_TBL USING (i)\n  ORDER BY i, k, t;\n\n--Testcase 50:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (k = 1);\n\n--Testcase 51:\nSELECT *\n  FROM J1_TBL LEFT JOIN J2_TBL USING (i) WHERE (i = 1);\n\n--\n-- semijoin selectivity for <>\n--\n--Testcase 52:\nexplain (costs off)\nselect * from int4_tbl i4, tenk1 a\nwhere exists(select * from tenk1 b\n             where a.twothousand = b.twothousand and a.fivethous <> b.fivethous)\n      and i4.f1 = a.tenthous;\n\n\n--\n-- More complicated constructs\n--\n\n--\n-- Multiway full join\n--\n\n--Testcase 372:\nCREATE FOREIGN TABLE t11 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 373:\nCREATE FOREIGN TABLE t21 (name TEXT, n INTEGER) SERVER sqlite_svr;\n--Testcase 374:\nCREATE FOREIGN TABLE t31 (name TEXT, n INTEGER) SERVER sqlite_svr;\n\n--Testcase 483:\nCREATE FOREIGN TABLE onek (\n  unique1   int4 OPTIONS (key 'true'),\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n\n--Testcase 53:\nINSERT INTO t11 VALUES ( 'bb', 11 );\n--Testcase 54:\nINSERT INTO t21 VALUES ( 'bb', 12 );\n--Testcase 55:\nINSERT INTO t21 VALUES ( 'cc', 22 );\n--Testcase 56:\nINSERT INTO t21 VALUES ( 'ee', 42 );\n--Testcase 57:\nINSERT INTO t31 VALUES ( 'bb', 13 );\n--Testcase 58:\nINSERT INTO t31 VALUES ( 'cc', 23 );\n--Testcase 59:\nINSERT INTO t31 VALUES ( 'dd', 33 );\n\n--Testcase 60:\nSELECT * FROM t11 FULL JOIN t21 USING (name) FULL JOIN t31 USING (name);\n\n--\n-- Test interactions of join syntax and subqueries\n--\n\n-- Basic cases (we expect planner to pull up the subquery here)\n--Testcase 61:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nINNER JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 62:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nLEFT JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n--Testcase 63:\nSELECT * FROM\n(SELECT * FROM t21) as s2\nFULL JOIN\n(SELECT * FROM t31) s3\nUSING (name);\n\n-- Cases with non-nullable expressions in subquery results;\n-- make sure these go to null as expected\n--Testcase 64:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 65:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL LEFT JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 66:\nSELECT * FROM\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 67:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL INNER JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL INNER JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 68:\nSELECT * FROM\n(SELECT name, n as s1_n, 1 as s1_1 FROM t11) as s1\nNATURAL FULL JOIN\n(SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\nNATURAL FULL JOIN\n(SELECT name, n as s3_n, 3 as s3_2 FROM t31) s3;\n\n--Testcase 69:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n--Testcase 70:\nSELECT * FROM\n(SELECT name, n as s1_n FROM t11) as s1\nNATURAL FULL JOIN\n  (SELECT * FROM\n    (SELECT name, n as s2_n, 2 as s2_2 FROM t21) as s2\n    NATURAL FULL JOIN\n    (SELECT name, n as s3_n FROM t31) as s3\n  ) ss2;\n\n-- Constants as join keys can also be problematic\n--Testcase 375:\nSELECT * FROM\n  (SELECT name, n as s1_n FROM t11) as s1\nFULL JOIN\n  (SELECT name, 2 as s2_n FROM t21) as s2\nON (s1_n = s2_n);\n\n-- Test for propagation of nullability constraints into sub-joins\n\n--Testcase 376:\ncreate foreign table x (x1 int, x2 int) server sqlite_svr;\n--Testcase 71:\ninsert into x values (1,11);\n--Testcase 72:\ninsert into x values (2,22);\n--Testcase 73:\ninsert into x values (3,null);\n--Testcase 74:\ninsert into x values (4,44);\n--Testcase 75:\ninsert into x values (5,null);\n\n--Testcase 377:\ncreate foreign table y (y1 int, y2 int) server sqlite_svr;\n--Testcase 76:\ninsert into y values (1,111);\n--Testcase 77:\ninsert into y values (2,222);\n--Testcase 78:\ninsert into y values (3,333);\n--Testcase 79:\ninsert into y values (4,null);\n\n--Testcase 80:\nselect * from x;\n--Testcase 81:\nselect * from y;\n\n--Testcase 82:\nselect * from x left join y on (x1 = y1 and x2 is not null);\n--Testcase 83:\nselect * from x left join y on (x1 = y1 and y2 is not null);\n\n--Testcase 84:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1);\n--Testcase 85:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and x2 is not null);\n--Testcase 86:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and y2 is not null);\n--Testcase 87:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1 and xx2 is not null);\n-- these should NOT give the same answers as above\n--Testcase 88:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (x2 is not null);\n--Testcase 89:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (y2 is not null);\n--Testcase 90:\nselect * from (x left join y on (x1 = y1)) left join x xx(xx1,xx2)\non (x1 = xx1) where (xx2 is not null);\n\n--\n-- regression test: check for bug with propagation of implied equality\n-- to outside an IN\n--\n--Testcase 91:\nselect count(*) from tenk1 a where unique1 in\n  (select unique1 from tenk1 b join tenk1 c using (unique1)\n   where b.unique2 = 42);\n\n--\n-- regression test: check for failure to generate a plan with multiple\n-- degenerate IN clauses\n--\n--Testcase 92:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\n\n-- try that with GEQO too\nbegin;\n--Testcase 499:\nset geqo = on;\n--Testcase 500:\nset geqo_threshold = 2;\n--Testcase 93:\nselect count(*) from tenk1 x where\n  x.unique1 in (select a.f1 from int4_tbl a,float8_tbl b where a.f1=b.f1) and\n  x.unique1 = 0 and\n  x.unique1 in (select aa.f1 from int4_tbl aa,float8_tbl bb where aa.f1=bb.f1);\nrollback;\n\n--\n-- regression test: be sure we cope with proven-dummy append rels\n--\n--Testcase 378:\ncreate table b (aa int, bb int);\n--Testcase 379:\nexplain (costs off)\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--Testcase 380:\nselect aa, bb, unique1, unique1\n  from tenk1 right join b on aa = unique1\n  where bb < bb and bb is null;\n\n--\n-- regression test: check handling of empty-FROM subquery underneath outer join\n--\n--Testcase 94:\nexplain (costs off)\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--Testcase 95:\nselect * from int8_tbl i1 left join (int8_tbl i2 join\n  (select 123 as x) ss on i2.q1 = x) on i1.q2 = i2.q2\norder by 1, 2;\n\n--\n-- regression test: check a case where join_clause_is_movable_into()\n-- used to give an imprecise result, causing an assertion failure\n--\n--Testcase 96:\nselect count(*)\nfrom\n  (select t31.tenthous as x1, coalesce(t11.stringu1, t21.stringu1) as x2\n   from tenk1 t11\n   left join tenk1 t21 on t11.unique1 = t21.unique1\n   join tenk1 t31 on t11.unique2 = t31.unique2) ss,\n  tenk1 t4,\n  tenk1 t5\nwhere t4.thousand = t5.unique1 and ss.x1 = t4.tenthous and ss.x2 = t5.stringu1;\n\n--\n-- regression test: check a case where we formerly missed including an EC\n-- enforcement clause because it was expected to be handled at scan level\n--\n--Testcase 97:\nexplain (costs off)\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--Testcase 98:\nselect a.f1, b.f1, t.thousand, t.tenthous from\n  tenk1 t,\n  (select sum(f1)+1 as f1 from int4_tbl i4a) a,\n  (select sum(f1) as f1 from int4_tbl i4b) b\nwhere b.f1 = t.thousand and a.f1 = b.f1 and (a.f1+b.f1+999) = t.tenthous;\n\n--\n-- checks for correct handling of quals in multiway outer joins\n--\n--Testcase 545:\nexplain (costs off)\nselect t1.f1\nfrom int4_tbl t1, int4_tbl t2\n  left join int4_tbl t3 on t3.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 1\nwhere t4.f1 is null;\n\n--Testcase 546:\nselect t1.f1\nfrom int4_tbl t1, int4_tbl t2\n  left join int4_tbl t3 on t3.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 1\nwhere t4.f1 is null;\n\n--Testcase 547:\nexplain (costs off)\nselect *\nfrom int4_tbl t1 left join int4_tbl t2 on true\n  left join int4_tbl t3 on t2.f1 > 0\n  left join int4_tbl t4 on t3.f1 > 0;\n\n--Testcase 548:\nexplain (costs off)\nselect * from onek t1\n  left join onek t2 on t1.unique1 = t2.unique1\n  left join onek t3 on t2.unique1 != t3.unique1\n  left join onek t4 on t3.unique1 = t4.unique1;\n\n--Testcase 549:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join (select now() from int4_tbl t2\n             left join int4_tbl t3 on t2.f1 = t3.f1\n             left join int4_tbl t4 on t3.f1 = t4.f1) s on true\n  inner join int4_tbl t5 on true;\n\n--Testcase 550:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join int4_tbl t2 on true\n  left join int4_tbl t3 on true\n  left join int4_tbl t4 on t2.f1 = t3.f1;\n\n--Testcase 551:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join int4_tbl t2 on true\n  left join int4_tbl t3 on t2.f1 = t3.f1\n  left join int4_tbl t4 on t3.f1 != t4.f1;\n\n--Testcase 552:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join (int4_tbl t2 left join int4_tbl t3 on t2.f1 > 0) on t2.f1 > 1\n  left join int4_tbl t4 on t2.f1 > 2 and t3.f1 > 3\nwhere t1.f1 = coalesce(t2.f1, 1);\n\n--Testcase 553:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join ((select t2.f1 from int4_tbl t2\n                left join int4_tbl t3 on t2.f1 > 0\n                where t3.f1 is null) s\n             left join tenk1 t4 on s.f1 > 1)\n    on s.f1 = t1.f1;\n\n--Testcase 554:\nexplain (costs off)\nselect * from int4_tbl t1\n  left join ((select t2.f1 from int4_tbl t2\n                left join int4_tbl t3 on t2.f1 > 0\n                where t2.f1 <> coalesce(t3.f1, -1)) s\n             left join tenk1 t4 on s.f1 > 1)\n    on s.f1 = t1.f1;\n\n--Testcase 555:\nexplain (costs off)\nselect * from onek t1\n    left join onek t2 on t1.unique1 = t2.unique1\n    left join onek t3 on t2.unique1 = t3.unique1\n    left join onek t4 on t3.unique1 = t4.unique1 and t2.unique2 = t4.unique2;\n\n--Testcase 556:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n    (int8_tbl t2 left join int8_tbl t3 full join int8_tbl t4 on false on false)\n    left join int8_tbl t5 on t2.q1 = t5.q1\non t2.q2 = 123;\n\n--Testcase 557:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select * from int8_tbl t3 where t3.q1 = t2.q1 offset 0) s\n      on t2.q1 = 1;\n\n--Testcase 558:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select * from generate_series(t2.q1, 100)) s\n      on t2.q1 = 1;\n\n--Testcase 559:\nexplain (costs off)\nselect * from int8_tbl t1\n    left join int8_tbl t2 on true\n    left join lateral\n      (select t2.q1 from int8_tbl t3) s\n      on t2.q1 = 1;\n\n--Testcase 560:\nexplain (costs off)\nselect * from onek t1\n    left join onek t2 on true\n    left join lateral\n      (select * from onek t3 where t3.two = t2.two offset 0) s\n      on t2.unique1 = 1;\n\n--\n-- check a case where we formerly got confused by conflicting sort orders\n-- in redundant merge join path keys\n-- PS: Used ORDER BY to force SQLite and PG12 always order in the same way (NULLS FIRST/LAST default value for PG and Sqlite are different)\n--\n--Testcase 99:\nexplain (costs off)\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--Testcase 100:\nselect * from\n  j1_tbl full join\n  (select * from j2_tbl order by j2_tbl.i desc, j2_tbl.k asc) j2_tbl\n  on j1_tbl.i = j2_tbl.i and j1_tbl.i = j2_tbl.k ORDER BY j1_tbl.i, j2_tbl.k;\n\n--\n-- a different check for handling of redundant sort keys in merge joins\n--\n--Testcase 101:\nexplain (costs off)\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\n--Testcase 102:\nselect count(*) from\n  (select * from tenk1 x order by x.thousand, x.twothousand, x.fivethous) x\n  left join\n  (select * from tenk1 y order by y.unique2) y\n  on x.thousand = y.unique2 and x.twothousand = y.hundred and x.fivethous = y.unique2;\n\nset enable_hashjoin = 0;\nset enable_nestloop = 0;\nset enable_hashagg = 0;\n\n--\n-- Check that we use the pathkeys from a prefix of the group by / order by\n-- clause for the join pathkeys when that prefix covers all join quals.  We\n-- expect this to lead to an incremental sort for the group by / order by.\n--\n--Testcase 561:\nexplain (costs off)\nselect x.thousand, x.twothousand, count(*)\nfrom tenk1 x inner join tenk1 y on x.thousand = y.thousand\ngroup by x.thousand, x.twothousand\norder by x.thousand desc, x.twothousand;\n\nreset enable_hashagg;\nreset enable_nestloop;\nreset enable_hashjoin;\n\n--\n-- Clean up\n--\n\n--Testcase 381:\nDROP FOREIGN TABLE t11;\n--Testcase 382:\nDROP FOREIGN TABLE t21;\n--Testcase 383:\nDROP FOREIGN TABLE t31;\n\n--Testcase 384:\nDROP FOREIGN TABLE J1_TBL;\n--Testcase 385:\nDROP FOREIGN TABLE J2_TBL;\n\n-- Both DELETE and UPDATE allow the specification of additional tables\n-- to \"join\" against to determine which rows should be modified.\n\n--Testcase 386:\nCREATE FOREIGN TABLE t12 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 387:\nCREATE FOREIGN TABLE t22 (a int OPTIONS (key 'true'), b int) SERVER sqlite_svr;\n--Testcase 388:\nCREATE FOREIGN TABLE t32 (x int OPTIONS (key 'true'), y int) SERVER sqlite_svr;\n\n--Testcase 103:\nINSERT INTO t12 VALUES (5, 10);\n--Testcase 104:\nINSERT INTO t12 VALUES (15, 20);\n--Testcase 105:\nINSERT INTO t12 VALUES (100, 100);\n--Testcase 106:\nINSERT INTO t12 VALUES (200, 1000);\n--Testcase 107:\nINSERT INTO t22 VALUES (200, 2000);\n--Testcase 108:\nINSERT INTO t32 VALUES (5, 20);\n--Testcase 109:\nINSERT INTO t32 VALUES (6, 7);\n--Testcase 110:\nINSERT INTO t32 VALUES (7, 8);\n--Testcase 111:\nINSERT INTO t32 VALUES (500, 100);\n\n--Testcase 112:\nDELETE FROM t32 USING t12 table1 WHERE t32.x = table1.a;\n--Testcase 113:\nSELECT * FROM t32;\n--Testcase 114:\nDELETE FROM t32 USING t12 JOIN t22 USING (a) WHERE t32.x > t12.a;\n--Testcase 115:\nSELECT * FROM t32;\n--Testcase 116:\nDELETE FROM t32 USING t32 t3_other WHERE t32.x = t3_other.x AND t32.y = t3_other.y;\n--Testcase 117:\nSELECT * FROM t32;\n\n-- Test join against inheritance tree\n\n--Testcase 389:\ncreate temp table t2a () inherits (t22);\n\n--Testcase 118:\ninsert into t2a values (200, 2001);\n\n--Testcase 119:\nselect * from t12 left join t22 on (t12.a = t22.a);\n\n-- Test matching of column name with wrong alias\n\n--Testcase 120:\nselect t12.x from t12 join t32 on (t12.a = t32.x);\n\n-- Test matching of locking clause with wrong alias\n\n--Testcase 540:\nselect t12.*, t22.*, unnamed_join.* from\n  t12 join t22 on (t12.a = t22.a), t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 541:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of unnamed_join;\n\n--Testcase 542:\nselect foo.*, unnamed_join.* from\n  t12 join t22 using (a) as foo, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 543:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of foo;\n\n--Testcase 544:\nselect bar.*, unnamed_join.* from\n  (t12 join t22 using (a) as foo) as bar, t32 as unnamed_join\n  for update of bar;\n\n--Testcase 536:\ndrop table t2a;\n\n--\n-- regression test for 8.1 merge right join bug\n--\n\n--Testcase 390:\nCREATE FOREIGN TABLE tt1 ( tt1_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO tt1 VALUES (1, 11);\n--Testcase 122:\nINSERT INTO tt1 VALUES (2, NULL);\n\n--Testcase 391:\nCREATE FOREIGN TABLE tt2 ( tt2_id int4, joincol int4 ) SERVER sqlite_svr;\n--Testcase 123:\nINSERT INTO tt2 VALUES (21, 11);\n--Testcase 124:\nINSERT INTO tt2 VALUES (22, 11);\n\n--Testcase 501:\nset enable_hashjoin to off;\n--Testcase 502:\nset enable_nestloop to off;\n\n-- these should give the same results\n\n--Testcase 125:\nselect tt1.*, tt2.* from tt1 left join tt2 on tt1.joincol = tt2.joincol;\n\n--Testcase 126:\nselect tt1.*, tt2.* from tt2 right join tt1 on tt1.joincol = tt2.joincol;\n\n--Testcase 503:\nreset enable_hashjoin;\n--Testcase 504:\nreset enable_nestloop;\n\n--\n-- regression test for bug #18522 (merge-right-anti-join in inner_unique cases)\n--\n\n--Testcase 637:\ncreate foreign table tbl_ra(a int options (key 'true'), b int) server sqlite_svr;\n--Testcase 638:\ninsert into tbl_ra select i, i%100 from generate_series(1,1000)i;\n-- CREATE INDEX, ANALYZE are not supported for foreign tables.\n-- create index on tbl_ra (b);\n-- analyze tbl_ra;\n\nset enable_hashjoin to off;\nset enable_nestloop to off;\n\n-- Because CREATE INDEX is not supported for foreign tables, \n-- we cannot use this index to create a merge right anti join plan\n-- ensure we get a merge right anti join\n--Testcase 639:\nexplain (costs off)\nselect * from tbl_ra t1\nwhere not exists (select 1 from tbl_ra t2 where t2.b = t1.a) and t1.b < 2;\n\n-- and check we get the expected results\n--Testcase 640:\nselect * from tbl_ra t1\nwhere not exists (select 1 from tbl_ra t2 where t2.b = t1.a) and t1.b < 2;\n\nreset enable_hashjoin;\nreset enable_nestloop;\n\n--\n-- regression test for bug #13908 (hash join with skew tuples & nbatch increase)\n--\n\n--Testcase 505:\nset work_mem to '64kB';\n--Testcase 506:\nset enable_mergejoin to off;\n--Testcase 507:\nset enable_memoize to off;\n\n--Testcase 127:\nexplain (costs off)\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n--Testcase 128:\nselect count(*) from tenk1 a, tenk1 b\n  where a.hundred = b.thousand and (b.fivethous % 10) < 10;\n\n--Testcase 508:\nreset work_mem;\n--Testcase 509:\nreset enable_mergejoin;\n--Testcase 510:\nreset enable_memoize;\n\n--\n-- regression test for 8.2 bug with improper re-ordering of left joins\n--\n\n--Testcase 392:\ncreate foreign table tt3(f1 int, f2 text) server sqlite_svr;\n--Testcase 129:\ninsert into tt3 select x, repeat('xyzzy', 100) from generate_series(1,10000) x;\n\n--Testcase 393:\ncreate foreign table tt4(f1 int) server sqlite_svr;\n--Testcase 130:\ninsert into tt4 values (0),(1),(9999);\n\nset enable_nestloop to off;\n\n--Testcase 562:\nEXPLAIN (COSTS OFF)\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE COALESCE(c.f1, 0) = 0\n) AS d ON (a.f1 = d.f1)\nWHERE COALESCE(d.f1, 0) = 0\nORDER BY 1;\n\n--Testcase 563:\nSELECT a.f1\nFROM tt4 a\nLEFT JOIN (\n        SELECT b.f1\n        FROM tt3 b LEFT JOIN tt3 c ON (b.f1 = c.f1)\n        WHERE COALESCE(c.f1, 0) = 0\n) AS d ON (a.f1 = d.f1)\nWHERE COALESCE(d.f1, 0) = 0\nORDER BY 1;\n\nreset enable_nestloop;\n\n--\n-- basic semijoin and antijoin recognition tests\n--\n\n--Testcase 564:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere unique1 in (select unique2 from tenk1 b);\n\n-- sadly, this is not an antijoin\n--Testcase 565:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere unique1 not in (select unique2 from tenk1 b);\n\n--Testcase 566:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere exists (select 1 from tenk1 b where a.unique1 = b.unique2);\n\n--Testcase 567:\nexplain (costs off)\nselect a.* from tenk1 a\nwhere not exists (select 1 from tenk1 b where a.unique1 = b.unique2);\n\n--Testcase 568:\nexplain (costs off)\nselect a.* from tenk1 a left join tenk1 b on a.unique1 = b.unique2\nwhere b.unique2 is null;\n\n\n--\n-- regression test for proper handling of outer joins within antijoins\n--\n\n--Testcase 394:\ncreate foreign table tt4x(c1 int, c2 int, c3 int) server sqlite_svr;\n\n--Testcase 132:\nexplain (costs off)\nselect * from tt4x t1\nwhere not exists (\n  select 1 from tt4x t2\n    left join tt4x t3 on t2.c3 = t3.c1\n    left join ( select t5.c1 as c1\n                from tt4x t4 left join tt4x t5 on t4.c2 = t5.c1\n              ) a1 on t3.c2 = a1.c1\n  where t1.c1 = t2.c2\n);\n\n--\n-- regression test for problems of the sort depicted in bug #3494\n--\n\n--Testcase 395:\ncreate foreign table tt5(f1 int, f2 int) server sqlite_svr;\n--Testcase 396:\ncreate foreign table tt6(f1 int, f2 int) server sqlite_svr;\n\n--Testcase 133:\ninsert into tt5 values(1, 10);\n--Testcase 134:\ninsert into tt5 values(1, 11);\n\n--Testcase 135:\ninsert into tt6 values(1, 9);\n--Testcase 136:\ninsert into tt6 values(1, 2);\n--Testcase 137:\ninsert into tt6 values(2, 9);\n\n--Testcase 138:\nselect * from tt5,tt6 where tt5.f1 = tt6.f1 and tt5.f1 = tt5.f2 - tt6.f2;\n\n--\n-- regression test for problems of the sort depicted in bug #3588\n--\n\n--Testcase 397:\ncreate foreign table xx (pkxx int) server sqlite_svr;\n--Testcase 398:\ncreate foreign table yy (pkyy int, pkxx int) server sqlite_svr;\n\n--Testcase 139:\ninsert into xx values (1);\n--Testcase 140:\ninsert into xx values (2);\n--Testcase 141:\ninsert into xx values (3);\n\n--Testcase 142:\ninsert into yy values (101, 1);\n--Testcase 143:\ninsert into yy values (201, 2);\n--Testcase 144:\ninsert into yy values (301, NULL);\n\n--Testcase 145:\nselect yy.pkyy as yy_pkyy, yy.pkxx as yy_pkxx, yya.pkyy as yya_pkyy,\n       xxa.pkxx as xxa_pkxx, xxb.pkxx as xxb_pkxx\nfrom yy\n     left join (SELECT * FROM yy where pkyy = 101) as yya ON yy.pkyy = yya.pkyy\n     left join xx xxa on yya.pkxx = xxa.pkxx\n     left join xx xxb on coalesce (xxa.pkxx, 1) = xxb.pkxx;\n\n--\n-- regression test for improper pushing of constants across outer-join clauses\n-- (as seen in early 8.2.x releases)\n--\n\n--Testcase 399:\ncreate foreign table zt1 (f1 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 400:\ncreate foreign table zt2 (f2 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 401:\ncreate foreign table zt3 (f3 int OPTIONS(key 'true')) server sqlite_svr;\n--Testcase 146:\ninsert into zt1 values(53);\n--Testcase 147:\ninsert into zt2 values(53);\n\n--Testcase 148:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zt1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 402:\ncreate temp view zv1 as select *,'dummy'::text AS junk from zt1;\n\n--Testcase 149:\nselect * from\n  zt2 left join zt3 on (f2 = f3)\n      left join zv1 on (f3 = f1)\nwhere f2 = 53;\n\n--Testcase 537:\ndrop view zv1;\n\n--\n-- regression test for improper extraction of OR indexqual conditions\n-- (as seen in early 8.3.x releases)\n--\n\n--Testcase 150:\nselect a.unique2, a.ten, b.tenthous, b.unique2, b.hundred\nfrom tenk1 a left join tenk1 b on a.unique2 = b.tenthous\nwhere a.unique1 = 42 and\n      ((b.unique2 is null and a.ten = 2) or b.hundred = 3);\n\n--\n-- test proper positioning of one-time quals in EXISTS (8.4devel bug)\n--\n--Testcase 151:\nprepare foo(bool) as\n  select count(*) from tenk1 a left join tenk1 b\n    on (a.unique2 = b.unique1 and exists\n        (select 1 from tenk1 c where c.thousand = b.unique2 and $1));\n--Testcase 152:\nexecute foo(true);\n--Testcase 153:\nexecute foo(false);\n\n--\n-- test for sane behavior with noncanonical merge clauses, per bug #4926\n--\n\nbegin;\n\n--Testcase 511:\nset enable_mergejoin = 1;\n--Testcase 512:\nset enable_hashjoin = 0;\n--Testcase 513:\nset enable_nestloop = 0;\n\n--Testcase 403:\ncreate foreign table a1 (i integer) server sqlite_svr;\n--Testcase 404:\ncreate foreign table b1 (x integer, y integer) server sqlite_svr;\n\n--Testcase 154:\nselect * from a1 left join b1 on i = x and i = y and x = i;\n\nrollback;\n\n-- skip this test, sqlite fdw does not support customized type\n-- test handling of merge clauses using record_ops\n--\n--begin;\n\n--create type mycomptype as (id int, v bigint);\n\n--create foreign table tidv (idv mycomptype) server sqlite_svr;\n--create index on tidv (idv);\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--set enable_mergejoin = 0;\n\n--explain (costs off)\n--select a.idv, b.idv from tidv a, tidv b where a.idv = b.idv;\n\n--rollback;\n\n--\n-- test NULL behavior of whole-row Vars, per bug #5025\n--\n--Testcase 155:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join int8_tbl t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 156:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 157:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join (select * from int8_tbl offset 0) t2 on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--Testcase 158:\nselect t1.q2, count(t2.*)\nfrom int8_tbl t1 left join\n  (select q1, case when q2=1 then 1 else q2 end as q2 from int8_tbl) t2\n  on (t1.q2 = t2.q1)\ngroup by t1.q2 order by 1;\n\n--\n-- test incorrect failure to NULL pulled-up subexpressions\n--\nbegin;\n\n--Testcase 405:\ncreate foreign table a2 (\n     code char OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 406:\ncreate foreign table b2 (\n     a char OPTIONS (key 'true'),\n     num integer OPTIONS (key 'true')\n) server sqlite_svr;\n--Testcase 407:\ncreate foreign table c2 (\n     name char OPTIONS (key 'true'),\n     a char\n) server sqlite_svr;\n\n--Testcase 159:\ninsert into a2 (code) values ('p');\n--Testcase 160:\ninsert into a2 (code) values ('q');\n--Testcase 161:\ninsert into b2 (a, num) values ('p', 1);\n--Testcase 162:\ninsert into b2 (a, num) values ('p', 2);\n--Testcase 163:\ninsert into c2 (name, a) values ('A', 'p');\n--Testcase 164:\ninsert into c2 (name, a) values ('B', 'q');\n--Testcase 165:\ninsert into c2 (name, a) values ('C', null);\n\n--Testcase 166:\nselect c2.name, ss.code, ss.b_cnt, ss.const\nfrom c2 left join\n  (select a2.code, coalesce(b_grp.cnt, 0) as b_cnt, -1 as const\n   from a2 left join\n     (select count(1) as cnt, b2.a from b2 group by b2.a) as b_grp\n     on a2.code = b_grp.a\n  ) as ss\n  on (c2.a = ss.code)\norder by c2.name;\n\nrollback;\n\n--\n-- test incorrect handling of placeholders that only appear in targetlists,\n-- per bug #6154\n--\n--Testcase 408:\ncreate foreign table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id int options (key 'true')) server sqlite_svr;\n--Testcase 409:\ninsert into sub_tbl values (1, 1, 1, 2, 42);\n\n--Testcase 410:\nSELECT * FROM\n( SELECT key1 from sub_tbl) sub1\nLEFT JOIN\n( SELECT sub3.key3, sub4.value2, COALESCE(sub4.value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl ) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n-- test the path using join aliases, too\n--Testcase 411:\nSELECT * FROM\n( SELECT key1 from sub_tbl ) sub1\nLEFT JOIN\n( SELECT sub3.key3, value2, COALESCE(value2, 66) as value3 FROM\n    ( SELECT key3 from sub_tbl ) sub3\n    LEFT JOIN\n    ( SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2 FROM\n        ( SELECT key5 from sub_tbl ) sub5\n        LEFT JOIN\n        ( SELECT key6, value1 from sub_tbl) sub6\n        ON sub5.key5 = sub6.key6\n    ) sub4\n    ON sub4.key5 = sub3.key3\n) sub2\nON sub1.key1 = sub2.key3;\n\n--\n-- test case where a PlaceHolderVar is used as a nestloop parameter\n--\n\n--Testcase 167:\nEXPLAIN (COSTS OFF)\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--Testcase 168:\nSELECT qq, unique1\n  FROM\n  ( SELECT COALESCE(q1, 0) AS qq FROM int8_tbl a ) AS ss1\n  FULL OUTER JOIN\n  ( SELECT COALESCE(q2, -1) AS qq FROM int8_tbl b ) AS ss2\n  USING (qq)\n  INNER JOIN tenk1 c ON qq = unique2;\n\n--\n-- nested nestloops can require nested PlaceHolderVars\n--\n\n--Testcase 412:\ncreate foreign table nt1 (\n  id int OPTIONS (key 'true'),\n  a1 boolean,\n  a2 boolean\n) server sqlite_svr;\n--Testcase 413:\ncreate foreign table nt2 (\n  id int OPTIONS (key 'true'),\n  nt1_id int,\n  b1 boolean,\n  b2 boolean\n) server sqlite_svr;\n--Testcase 414:\ncreate foreign table nt3 (\n  id int OPTIONS (key 'true'),\n  nt2_id int,\n  c1 boolean\n) server sqlite_svr;\n\n--Testcase 169:\ninsert into nt1 values (1,true,true);\n--Testcase 170:\ninsert into nt1 values (2,true,false);\n--Testcase 171:\ninsert into nt1 values (3,false,false);\n--Testcase 172:\ninsert into nt2 values (1,1,true,true);\n--Testcase 173:\ninsert into nt2 values (2,2,true,false);\n--Testcase 174:\ninsert into nt2 values (3,3,false,false);\n--Testcase 175:\ninsert into nt3 values (1,1,true);\n--Testcase 176:\ninsert into nt3 values (2,2,false);\n--Testcase 177:\ninsert into nt3 values (3,3,true);\n\n--Testcase 178:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 179:\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 and ss1.a3) AS b3\n     from nt2 as nt2\n       left join\n         (select nt1.*, (nt1.id is not null) as a3 from nt1) as ss1\n         on ss1.id = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--\n-- test case where a PlaceHolderVar is propagated into a subquery\n--\n\n--Testcase 180:\nexplain (costs off)\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--Testcase 181:\nselect * from\n  int8_tbl t1 left join\n  (select q1 as x, 42 as y from int8_tbl t2) ss\n  on t1.q2 = ss.x\nwhere\n  1 = (select 1 from int8_tbl t3 where ss.y is not null limit 1)\norder by 1,2;\n\n--\n-- variant where a PlaceHolderVar is needed at a join, but not above the join\n--\n\n--Testcase 514:\nexplain (costs off)\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--Testcase 515:\nselect * from\n  int4_tbl as i41,\n  lateral\n    (select 1 as x from\n      (select i41.f1 as lat,\n              i42.f1 as loc from\n         int8_tbl as i81, int4_tbl as i42) as ss1\n      right join int4_tbl as i43 on (i43.f1 > 1)\n      where ss1.loc = ss1.lat) as ss2\nwhere i41.f1 > 0;\n\n--\n-- test the corner cases FULL JOIN ON TRUE and FULL JOIN ON FALSE\n--\n--Testcase 182:\nselect * from int4_tbl a full join int4_tbl b on true;\n--Testcase 183:\nselect * from int4_tbl a full join int4_tbl b on false;\n\n--\n-- test for ability to use a cartesian join when necessary\n--\n--Testcase 415:\ncreate foreign table q1(i int) server sqlite_svr;\n--Testcase 416:\ninsert into q1 values (1);\n--Testcase 417:\ncreate foreign table q2(i int) server sqlite_svr;\n--Testcase 418:\ninsert into q2 values (0);\n--Testcase 184:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere q1.i = thousand or q2.i = thousand;\n\n--Testcase 185:\nexplain (costs off)\nselect * from\n  tenk1 join int4_tbl on f1 = twothousand,\n  q1, q2\nwhere thousand = (q1.i + q2.i);\n\n--\n-- test ability to generate a suitable plan for a star-schema query\n--\n\n--Testcase 186:\nexplain (costs off)\nselect * from\n  tenk1, int8_tbl a, int8_tbl b\nwhere thousand = a.q1 and tenthous = b.q1 and a.q2 = 1 and b.q2 = 2;\n\n--\n-- test a corner case in which we shouldn't apply the star-schema optimization\n--\n\n--Testcase 187:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 188:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (select 1,0 from onerow) v1(x1,x2)\n               left join (select 3,1 from onerow) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- variant that isn't quite a star-schema case\n\n--Testcase 189:\nselect ss1.d1 from\n  tenk1 as t1\n  inner join tenk1 as t2\n  on t1.tenthous = t2.ten\n  inner join\n    int8_tbl as i8\n    left join int4_tbl as i4\n      inner join (select 64::information_schema.cardinal_number as d1\n                  from tenk1 t3,\n                       lateral (select abs(t3.unique1) + random()) ss0(x)\n                  where t3.fivethous < 0) as ss1\n      on i4.f1 = ss1.d1\n    on i8.q1 = i4.f1\n  on t1.tenthous = ss1.d1\nwhere t1.unique1 < i4.f1;\n\n-- this variant is foldable by the remove-useless-RESULT-RTEs code\n\n--Testcase 419:\nexplain (costs off)\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n--Testcase 420:\nselect t1.unique2, t1.stringu1, t2.unique1, t2.stringu2 from\n  tenk1 t1\n  inner join int4_tbl i1\n    left join (select v1.x2, v2.y1, 11 AS d1\n               from (values(1,0)) v1(x1,x2)\n               left join (values(3,1)) v2(y1,y2)\n               on v1.x1 = v2.y2) subq1\n    on (i1.f1 = subq1.x2)\n  on (t1.unique2 = subq1.d1)\n  left join tenk1 t2\n  on (subq1.y1 = t2.unique1)\nwhere t1.unique2 < 42 and t1.stringu1 > t2.stringu2;\n\n-- Here's a variant that we can't fold too aggressively, though,\n-- or we end up with noplace to evaluate the lateral PHV\n\n--Testcase 421:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x from sub_tbl) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n--Testcase 422:\nselect * from\n  (select key1 as x from sub_tbl as x) ss1 left join (select key6 as y from sub_tbl) ss2 on (true),\n  lateral (select ss2.y as z limit 1) ss3;\n\n-- Test proper handling of appendrel PHVs during useless-RTE removal\n--Testcase 516:\nexplain (costs off)\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n--Testcase 517:\nselect * from\n  (select 0 as z) as t1\n  left join\n  (select true as a) as t2\n  on true,\n  lateral (select true as b\n           union all\n           select a as b) as t3\nwhere b;\n\n-- Test PHV in a semijoin qual, which confused useless-RTE removal (bug #17700)\n--Testcase 569:\nexplain (verbose, costs off)\nwith ctetable as not materialized ( select 1 as f1 )\nselect * from ctetable c1\nwhere f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true );\n\n--Testcase 570:\nwith ctetable as not materialized ( select 1 as f1 )\nselect * from ctetable c1\nwhere f1 in ( select c3.f1 from ctetable c2 full join ctetable c3 on true );\n\n-- Test PHV that winds up in a Result node, despite having nonempty nullingrels\n--Testcase 571:\nexplain (verbose, costs off)\nselect table_catalog, table_name\nfrom int4_tbl t1\n  inner join (int8_tbl t2\n              left join information_schema.column_udt_usage on null)\n  on null;\n\n-- Test handling of qual pushdown to appendrel members with non-Var outputs\n--Testcase 572:\nexplain (verbose, costs off)\nselect * from int4_tbl left join (\n  select text 'foo' union all select text 'bar'\n) ss(x) on true\nwhere ss.x is null;\n\n--\n-- test inlining of immutable functions\n--\n--Testcase 423:\ncreate function f_immutable_int4(i integer) returns integer as\n$$ begin return i; end; $$ language plpgsql immutable;\n\n-- check optimization of function scan with join\n--Testcase 424:\nexplain (costs off)\nselect unique1 from tenk1, (select * from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 425:\nexplain (verbose, costs off)\nselect unique1, x.*\nfrom tenk1, (select *, random() from f_immutable_int4(1) x) x\nwhere x = unique1;\n\n--Testcase 426:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = unique1;\n\n--Testcase 427:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x = unique1;\n\n--Testcase 538:\nexplain (costs off)\nselect unique1 from tenk1, lateral f_immutable_int4(1) x where x in (select 17);\n\n--Testcase 428:\nexplain (costs off)\nselect unique1, x from tenk1 join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 429:\nexplain (costs off)\nselect unique1, x from tenk1 left join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 430:\nexplain (costs off)\nselect unique1, x from tenk1 right join f_immutable_int4(1) x on unique1 = x;\n\n--Testcase 431:\nexplain (costs off)\nselect unique1, x from tenk1 full join f_immutable_int4(1) x on unique1 = x;\n\n-- check that pullup of a const function allows further const-folding\n--Testcase 432:\nexplain (costs off)\nselect unique1 from tenk1, f_immutable_int4(1) x where x = 42;\n\n-- test inlining of immutable functions with PlaceHolderVars\n--Testcase 433:\nexplain (costs off)\nselect nt3.id\nfrom nt3 as nt3\n  left join\n    (select nt2.*, (nt2.b1 or i4 = 42) AS b3\n     from nt2 as nt2\n       left join\n         f_immutable_int4(0) i4\n         on i4 = nt2.nt1_id\n    ) as ss2\n    on ss2.id = nt3.nt2_id\nwhere nt3.id = 1 and ss2.b3;\n\n--Testcase 434:\ndrop function f_immutable_int4(int);\n\n-- test inlining when function returns composite\n\n--Testcase 435:\ncreate function mki8(bigint, bigint) returns int8_tbl as\n$$select row($1,$2)::int8_tbl$$ language sql;\n\n--Testcase 436:\ncreate function mki4(int) returns int4_tbl as\n$$select row($1)::int4_tbl$$ language sql;\n\n--Testcase 437:\nexplain (verbose, costs off)\nselect * from mki8(1,2);\n--Testcase 438:\nselect * from mki8(1,2);\n\n--Testcase 439:\nexplain (verbose, costs off)\nselect * from mki4(42);\n--Testcase 440:\nselect * from mki4(42);\n\n--Testcase 441:\ndrop function mki8(bigint, bigint);\n--Testcase 442:\ndrop function mki4(int);\n\n-- test const-folding of a whole-row Var into a per-field Var\n-- (need to inline a function to reach this case, else parser does it)\n--Testcase 632:\ncreate function f_field_select(t onek) returns int4 as\n$$ select t.unique2; $$ language sql immutable;\n\n--Testcase 633:\nexplain (verbose, costs off)\nselect (t2.*).unique1, f_field_select(t2) from tenk1 t1\n    left join onek t2 on t1.unique1 = t2.unique1\n    left join int8_tbl t3 on true;\n\n--Testcase 634:\ndrop function f_field_select(t onek);\n\n--\n-- test extraction of restriction OR clauses from join OR clause\n-- (we used to only do this for indexable clauses)\n--\n\n--Testcase 190:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.hundred = 4);\n--Testcase 191:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or (a.unique2 = 3 and b.ten = 4);\n--Testcase 192:\nexplain (costs off)\nselect * from tenk1 a join tenk1 b on\n  (a.unique1 = 1 and b.unique1 = 2) or\n  ((a.unique2 = 3 or a.unique2 = 7) and b.hundred = 4);\n\n--\n-- test placement of movable quals in a parameterized join tree\n--\n\n--Testcase 193:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 194:\nexplain (costs off)\nselect * from tenk1 t1 left join\n  (tenk1 t2 join tenk1 t3 on t2.thousand = t3.unique2)\n  on t1.hundred = t2.hundred and t1.ten + t2.ten = t3.ten\nwhere t1.unique1 = 1;\n\n--Testcase 195:\nexplain (costs off)\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 196:\nselect count(*) from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on a.unique2 = b.unique1 and c.thousand = a.thousand\n  join int4_tbl on b.thousand = f1;\n\n--Testcase 197:\nexplain (costs off)\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 198:\nselect b.unique1 from\n  tenk1 a join tenk1 b on a.unique1 = b.unique2\n  left join tenk1 c on b.unique1 = 42 and c.thousand = a.thousand\n  join int4_tbl i1 on b.thousand = f1\n  right join int4_tbl i2 on i2.f1 = b.tenthous\n  order by 1;\n\n--Testcase 199:\nexplain (costs off)\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 200:\nselect * from\n(\n  select unique1, q1, coalesce(unique1, -1) + q1 as fault\n  from int8_tbl left join tenk1 on (q2 = unique2)\n) ss\nwhere fault = 122\norder by fault;\n\n--Testcase 201:\nexplain (costs off)\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--Testcase 202:\nselect * from\n(values (1, array[10,20]), (2, array[20,30])) as v1(v1x,v1ys)\nleft join (values (1, 10), (2, 20)) as v2(v2x,v2y) on v2x = v1x\nleft join unnest(v1ys) as u1(u1y) on u1y = v2y;\n\n--\n-- test handling of potential equivalence clauses above outer joins\n--\n\n--Testcase 203:\nexplain (costs off)\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 204:\nselect q1, unique2, thousand, hundred\n  from int8_tbl a left join tenk1 b on q1 = unique2\n  where coalesce(thousand,123) = q1 and q1 = coalesce(hundred,123);\n\n--Testcase 205:\nexplain (costs off)\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--Testcase 206:\nselect f1, unique2, case when unique2 is null then f1 else 0 end\n  from int4_tbl a left join tenk1 b on f1 = unique2\n  where (case when unique2 is null then f1 else 0 end) = 0;\n\n--\n-- another case with equivalence clauses above outer joins (bug #8591)\n--\n\n--Testcase 207:\nexplain (costs off)\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n--Testcase 208:\nselect a.unique1, b.unique1, c.unique1, coalesce(b.twothousand, a.twothousand)\n  from tenk1 a left join tenk1 b on b.thousand = a.unique1                        left join tenk1 c on c.unique2 = coalesce(b.twothousand, a.twothousand)\n  where a.unique2 < 10 and coalesce(b.twothousand, a.twothousand) = 44;\n\n-- related case\n\n--Testcase 573:\nexplain (costs off)\nselect * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1,\n  lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss;\n\n--Testcase 574:\nselect * from int8_tbl t1 left join int8_tbl t2 on t1.q2 = t2.q1,\n  lateral (select * from int8_tbl t3 where t2.q1 = t2.q2) ss;\n\n--\n-- check handling of join aliases when flattening multiple levels of subquery\n--\n\n--Testcase 209:\nexplain (verbose, costs off)\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--Testcase 210:\nselect foo1.join_key as foo1_id, foo3.join_key AS foo3_id, bug_field from\n  (values (0),(1)) foo1(join_key)\nleft join\n  (select join_key, bug_field from\n    (select ss1.join_key, ss1.bug_field from\n      (select f1 as join_key, 666 as bug_field from int4_tbl i1) ss1\n    ) foo2\n   left join\n    (select unique2 as join_key from tenk1 i2) ss2\n   using (join_key)\n  ) foo3\nusing (join_key);\n\n--\n-- check handling of a variable-free join alias\n--\n--Testcase 575:\nexplain (verbose, costs off)\nselect * from\nint4_tbl i0 left join\n( (select *, 123 as x from int4_tbl i1) ss1\n  left join\n  (select *, q2 as x from int8_tbl i2) ss2\n  using (x)\n) ss0\non (i0.f1 = ss0.f1)\norder by i0.f1, x;\n\n--Testcase 576:\nselect * from\nint4_tbl i0 left join\n( (select *, 123 as x from int4_tbl i1) ss1\n  left join\n  (select *, q2 as x from int8_tbl i2) ss2\n  using (x)\n) ss0\non (i0.f1 = ss0.f1)\norder by i0.f1, x;\n\n--\n-- test successful handling of nested outer joins with degenerate join quals\n--\n--Testcase 443:\ncreate foreign table text_tbl(f1 text) server sqlite_svr;\n\n--Testcase 211:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 212:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 213:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 214:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 215:\nexplain (verbose, costs off)\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 216:\nselect t1.* from\n  text_tbl t1\n  left join (select *, '***'::text as d1 from int8_tbl i8b1) b1\n    left join int8_tbl i8\n      left join (select *, null::int as d2 from int8_tbl i8b2, int4_tbl i4b2\n                 where q1 = f1) b2\n      on (i8.q1 = b2.q1)\n    on (b2.d2 = b1.q2)\n  on (t1.f1 = b1.d1)\n  left join int4_tbl i4\n  on (i8.q2 = i4.f1);\n\n--Testcase 217:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n--Testcase 218:\nselect * from\n  text_tbl t1\n  inner join int8_tbl i8\n  on i8.q2 = 456\n  right join text_tbl t2\n  on t1.f1 = 'doh!'\n  left join int4_tbl i4\n  on i8.q1 = i4.f1;\n\n-- check handling of a variable-free qual for a non-commutable outer join\n--Testcase 577:\nexplain (costs off)\nselect nspname\nfrom (select 1 as x) ss1\nleft join\n( select n.nspname, c.relname\n  from pg_class c left join pg_namespace n on n.oid = c.relnamespace\n  where c.relkind = 'r'\n) ss2 on false;\n\n-- check handling of apparently-commutable outer joins with non-commutable\n-- joins between them\n--Testcase 578:\nexplain (costs off)\nselect 1 from\n  int4_tbl i4\n  left join int8_tbl i8 on i4.f1 is not null\n  left join (select 1 as a) ss1 on null\n  join int4_tbl i42 on ss1.a is null or i8.q1 <> i8.q2\n  right join (select 2 as b) ss2\n  on ss2.b < i4.f1;\n\n--\n-- test for appropriate join order in the presence of lateral references\n--\n\n--Testcase 219:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 220:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss\nwhere t1.f1 = ss.f1;\n\n--Testcase 221:\nexplain (verbose, costs off)\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 222:\nselect * from\n  text_tbl t1\n  left join int8_tbl i8\n  on i8.q2 = 123,\n  lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,\n  lateral (select ss1.* from text_tbl t3 limit 1) as ss2\nwhere t1.f1 = ss2.f1;\n\n--Testcase 223:\nexplain (verbose, costs off)\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 224:\nselect 1 from\n  text_tbl as tt1\n  inner join text_tbl as tt2 on (tt1.f1 = 'foo')\n  left join text_tbl as tt3 on (tt3.f1 = 'foo')\n  left join text_tbl as tt4 on (tt3.f1 = tt4.f1),\n  lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1\nwhere tt1.f1 = ss1.c0;\n\n--Testcase 579:\nexplain (verbose, costs off)\nselect 1 from\n  int4_tbl as i4\n  inner join\n    ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1\n     right join (select 1 as z) as ss2 on true)\n  on false,\n  lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;\n\n--Testcase 580:\nselect 1 from\n  int4_tbl as i4\n  inner join\n    ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1\n     right join (select 1 as z) as ss2 on true)\n  on false,\n  lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;\n\n--\n-- check a case where we formerly generated invalid parameterized paths\n--\n\nbegin;\n\n--Testcase 630:\nCREATE FOREIGN TABLE t (a int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 631:\nexplain (costs off)\nselect 1 from t t1\n  join lateral (select t1.a from (select 1) foo offset 0) as s1 on true\n  join\n    (select 1 from t t2\n       inner join (t t3\n                   left join (t t4 left join t t5 on t4.a = 1)\n                   on t3.a = t4.a)\n       on false\n     where t3.a = coalesce(t5.a,1)) as s2\n  on true;\n\nrollback;\n\n--\n-- check a case in which a PlaceHolderVar forces join order\n--\n\n--Testcase 225:\nexplain (verbose, costs off)\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--Testcase 226:\nselect ss2.* from\n  int4_tbl i41\n  left join int8_tbl i8\n    join (select i42.f1 as c1, i43.f1 as c2, 42 as c3\n          from int4_tbl i42, int4_tbl i43) ss1\n    on i8.q1 = ss1.c2\n  on i41.f1 = ss1.c1,\n  lateral (select i41.*, i8.*, ss1.* from text_tbl limit 1) ss2\nwhere ss1.c2 = 0;\n\n--\n-- test successful handling of full join underneath left join (bug #14105)\n--\n\n--Testcase 227:\nexplain (costs off)\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--Testcase 228:\nselect * from\n  (select 1 as id) as xx\n  left join\n    (tenk1 as a1 full join (select 1 as id) as yy on (a1.unique1 = yy.id))\n  on (xx.id = coalesce(yy.id));\n\n--\n-- test ability to push constants through outer join clauses\n--\n\n--Testcase 229:\nexplain (costs off)\n  select * from int4_tbl a left join tenk1 b on f1 = unique2 where f1 = 0;\n\n--Testcase 230:\nexplain (costs off)\n  select * from tenk1 a full join tenk1 b using(unique2) where unique2 = 42;\n\n--\n-- test that quals attached to an outer join have correct semantics,\n-- specifically that they don't re-use expressions computed below the join;\n-- we force a mergejoin so that coalesce(b.q1, 1) appears as a join input\n--\n\n--Testcase 518:\nset enable_hashjoin to off;\n--Testcase 519:\nset enable_nestloop to off;\n\n--Testcase 231:\nexplain (verbose, costs off)\n  select a.q2, b.q1\n    from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n    where coalesce(b.q1, 1) > 0;\n--Testcase 232:\nselect a.q2, b.q1\n  from int8_tbl a left join int8_tbl b on a.q2 = coalesce(b.q1, 1)\n  where coalesce(b.q1, 1) > 0;\n\n--Testcase 520:\nreset enable_hashjoin;\n--Testcase 521:\nreset enable_nestloop;\n\n--\n-- test join strength reduction with a SubPlan providing the proof\n--\n\n--Testcase 581:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a left join onek b on a.unique1 = b.unique2\n  where (b.unique2, random() > 0) = any (select q1, random() > 0 from int8_tbl c where c.q1 < b.unique1);\n\n--Testcase 582:\nselect a.unique1, b.unique2\n  from onek a left join onek b on a.unique1 = b.unique2\n  where (b.unique2, random() > 0) = any (select q1, random() > 0 from int8_tbl c where c.q1 < b.unique1);\n\n--\n-- test full-join strength reduction\n--\n\n--Testcase 583:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42;\n\n--Testcase 584:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42;\n\n--Testcase 585:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where b.unique2 = 43;\n\n--Testcase 586:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where b.unique2 = 43;\n\n--Testcase 587:\nexplain (costs off)\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42 and b.unique2 = 42;\n\n--Testcase 588:\nselect a.unique1, b.unique2\n  from onek a full join onek b on a.unique1 = b.unique2\n  where a.unique1 = 42 and b.unique2 = 42;\n\n--\n-- test result-RTE removal underneath a full join\n--\n\n--Testcase 589:\nexplain (costs off)\nselect * from\n  (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1\nfull join\n  (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2\non true;\n\n--Testcase 590:\nselect * from\n  (select * from int8_tbl i81 join (values(123,2)) v(v1,v2) on q2=v1) ss1\nfull join\n  (select * from (values(456,2)) w(v1,v2) join int8_tbl i82 on q2=v1) ss2\non true;\n\n--\n-- test join removal\n--\n\nbegin;\n\n--Testcase 444:\nCREATE FOREIGN TABLE a3 (id int OPTIONS (key 'true'), b_id int) SERVER sqlite_svr;\n--Testcase 445:\nCREATE FOREIGN TABLE b3 (id int OPTIONS (key 'true'), c_id int) SERVER sqlite_svr;\n--Testcase 446:\nCREATE FOREIGN TABLE c3 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 447:\nCREATE FOREIGN TABLE d3 (a int, b int) SERVER sqlite_svr;\n--Testcase 233:\nINSERT INTO a3 VALUES (0, 0), (1, NULL);\n--Testcase 234:\nINSERT INTO b3 VALUES (0, 0), (1, NULL);\n--Testcase 235:\nINSERT INTO c3 VALUES (0), (1);\n--Testcase 236:\nINSERT INTO d3 VALUES (1,3), (2,2), (3,1);\n\n-- all three cases should be optimizable into a3 simple seqscan\n--Testcase 237:\nexplain (costs off) SELECT a3.* FROM a3 LEFT JOIN b3 ON a3.b_id = b3.id;\n--Testcase 238:\nexplain (costs off) SELECT b3.* FROM b3 LEFT JOIN c3 ON b3.c_id = c3.id;\n--Testcase 239:\nexplain (costs off)\n  SELECT a3.* FROM a3 LEFT JOIN (b3 left join c3 on b3.c_id = c3.id)\n  ON (a3.b_id = b3.id);\n\n-- check optimization of outer join within another special join\n--Testcase 240:\nexplain (costs off)\nselect id from a3 where id in (\n\tselect b3.id from b3 left join c3 on b3.id = c3.id\n);\n\n-- check optimization with oddly-nested outer joins\n--Testcase 591:\nexplain (costs off)\nselect a31.id from\n  (a3 a31 left join a3 a32 on true)\n  left join\n  (a3 a33 left join a3 a34 on a33.id = a34.id)\n  on a32.id = a33.id;\n\n--Testcase 592:\nexplain (costs off)\nselect a31.id from\n  (a3 a31 left join a3 a32 on a31.id = a32.id)\n  left join\n  (a3 a33 left join a3 a34 on a33.id = a34.id)\n  on a32.id = a33.id;\n\n--Testcase 593:\nexplain (costs off)\nselect 1 from a3 t1\n    left join a3 t2 on true\n   inner join a3 t3 on true\n    left join a3 t4 on t2.id = t4.id and t2.id = t3.id;\n\n-- another example (bug #17781)\n--Testcase 594:\nexplain (costs off)\nselect ss1.f1\nfrom int4_tbl as t1\n  left join (int4_tbl as t2\n             right join int4_tbl as t3 on null\n             left join (int4_tbl as t4\n                        right join int8_tbl as t5 on null)\n               on t2.f1 = t4.f1\n             left join ((select null as f1 from int4_tbl as t6) as ss1\n                        inner join int8_tbl as t7 on null)\n               on t5.q1 = t7.q2)\n    on false;\n\n-- variant with Var rather than PHV coming from t6\n--Testcase 595:\nexplain (costs off)\nselect ss1.f1\nfrom int4_tbl as t1\n  left join (int4_tbl as t2\n             right join int4_tbl as t3 on null\n             left join (int4_tbl as t4\n                        right join int8_tbl as t5 on null)\n               on t2.f1 = t4.f1\n             left join ((select f1 from int4_tbl as t6) as ss1\n                        inner join int8_tbl as t7 on null)\n               on t5.q1 = t7.q2)\n    on false;\n\n-- per further discussion of bug #17781\n--Testcase 596:\nexplain (costs off)\nselect ss1.x\nfrom (select f1/2 as x from int4_tbl i4 left join a3 on a3.id = i4.f1) ss1\n     right join int8_tbl i8 on true\nwhere current_user is not null;  -- this is to add a Result node\n\n-- and further discussion of bug #17781\n--Testcase 597:\nexplain (costs off)\nselect *\nfrom int8_tbl t1\n  left join (int8_tbl t2 left join onek t3 on t2.q1 > t3.unique1)\n    on t1.q2 = t2.q2\n  left join onek t4\n    on t2.q2 < t3.unique2;\n\n-- More tests of correct placement of pseudoconstant quals\n\n-- simple constant-false condition\n--Testcase 598:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n  (int8_tbl t2 inner join int8_tbl t3 on false\n   left join int8_tbl t4 on t2.q2 = t4.q2)\non t1.q1 = t2.q1;\n\n-- deduce constant-false from an EquivalenceClass\n--Testcase 599:\nexplain (costs off)\nselect * from int8_tbl t1 left join\n  (int8_tbl t2 inner join int8_tbl t3 on (t2.q1-t3.q2) = 0 and (t2.q1-t3.q2) = 1\n   left join int8_tbl t4 on t2.q2 = t4.q2)\non t1.q1 = t2.q1;\n\n-- pseudoconstant based on an outer-level Param\n--Testcase 600:\nexplain (costs off)\nselect exists(\n  select * from int8_tbl t1 left join\n    (int8_tbl t2 inner join int8_tbl t3 on x0.f1 = 1\n     left join int8_tbl t4 on t2.q2 = t4.q2)\n  on t1.q1 = t2.q1\n) from int4_tbl x0;\n\n\n-- check that join removal works for a left join when joining a subquery\n-- that is guaranteed to be unique by its GROUP BY clause\n--Testcase 241:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 242:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id and d3.b = s.c_id;\n\n-- join removal is not possible when the GROUP BY contains a column that is\n-- not in the join condition.  (Note: as of 9.6, we notice that b3.id is a\n-- primary key and so drop b3.c_id from the GROUP BY of the resulting plan;\n-- but this happens too late for join removal in the outer plan level.)\n--Testcase 243:\nexplain (costs off)\nselect d3.* from d3 left join (select * from b3 group by b3.id, b3.c_id) s\n  on d3.a = s.id;\n\n-- similarly, but keying off a DISTINCT clause\n--Testcase 244:\nexplain (costs off)\nselect d3.* from d3 left join (select distinct * from b3) s\n  on d3.a = s.id;\n\n-- join removal is not possible here\n--Testcase 601:\nexplain (costs off)\nselect 1 from a3 t1\n  left join (a3 t2 left join a3 t3 on t2.id = 1) on t2.id = 1;\n\n-- check join removal works when uniqueness of the join condition is enforced\n-- by a UNION\n--Testcase 245:\nexplain (costs off)\nselect d3.* from d3 left join (select id from a3 union select id from b3) s\n  on d3.a = s.id;\n\n-- check join removal with a cross-type comparison operator\n--Testcase 246:\nexplain (costs off)\nselect i8.* from int8_tbl i8 left join (select f1 from int4_tbl group by f1) i4\n  on i8.q1 = i4.f1;\n\n-- check join removal with lateral references\n--Testcase 247:\nexplain (costs off)\nselect 1 from (select a3.id FROM a3 left join b3 on a3.b_id = b3.id) q,\n\t\t\t  lateral generate_series(1, q.id) gs(i) where q.id = gs.i;\n\n-- check join removal within RHS of an outer join\n--Testcase 602:\nexplain (costs off)\nselect c3.id, ss.a from c3\n  left join (select d3.a from onerow, d3 left join b3 on d3.a = b3.id) ss\n  on c3.id = ss.a;\n\n--Testcase 603:\nCREATE TEMP TABLE parted_b (id int PRIMARY KEY) partition by range(id);\n--Testcase 604:\nCREATE TEMP TABLE parted_b1 partition of parted_b for values from (0) to (10);\n\n-- test join removals on a partitioned table\n--Testcase 605:\nexplain (costs off)\nselect a3.* from a3 left join parted_b pb on a3.b_id = pb.id;\n\nrollback;\n\n--Testcase 448:\ncreate foreign table parent (k int options (key 'true'), pd int) server sqlite_svr;\n--Testcase 449:\ncreate foreign table child (k int options (key 'true'), cd int) server sqlite_svr;\n--Testcase 248:\ninsert into parent values (1, 10), (2, 20), (3, 30);\n--Testcase 249:\ninsert into child values (1, 100), (4, 400);\n\n-- this case is optimizable\n--Testcase 250:\nselect p.* from parent p left join child c on (p.k = c.k);\n--Testcase 251:\nexplain (costs off)\n  select p.* from parent p left join child c on (p.k = c.k);\n\n-- this case is not\n--Testcase 252:\nselect p.*, linked from parent p\n  left join (select c.*, true as linked from child c) as ss\n  on (p.k = ss.k);\n--Testcase 253:\nexplain (costs off)\n  select p.*, linked from parent p\n    left join (select c.*, true as linked from child c) as ss\n    on (p.k = ss.k);\n\n-- check for a 9.0rc1 bug: join removal breaks pseudoconstant qual handling\n--Testcase 254:\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n--Testcase 255:\nexplain (costs off)\nselect p.* from\n  parent p left join child c on (p.k = c.k)\n  where p.k = 1 and p.k = 2;\n\n--Testcase 256:\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n--Testcase 257:\nexplain (costs off)\nselect p.* from\n  (parent p left join child c on (p.k = c.k)) join parent x on p.k = x.k\n  where p.k = 1 and p.k = 2;\n\n-- bug 5255: this is not optimizable by join removal\nbegin;\n\n--Testcase 450:\nCREATE FOREIGN TABLE a4 (id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 451:\nCREATE FOREIGN TABLE b4 (id int OPTIONS (key 'true'), a_id int) SERVER sqlite_svr;\n--Testcase 258:\nINSERT INTO a4 VALUES (0), (1);\n--Testcase 259:\nINSERT INTO b4 VALUES (0, 0), (1, NULL);\n\n--Testcase 260:\nSELECT * FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n--Testcase 261:\nSELECT b4.* FROM b4 LEFT JOIN a4 ON (b4.a_id = a4.id) WHERE (a4.id IS NULL OR a4.id > 0);\n\nrollback;\n\n-- another join removal bug: this is not optimizable, either\nbegin;\n\n--Testcase 452:\ncreate foreign table innertab (id int8 options (key 'true'), dat1 int8) server sqlite_svr;\n--Testcase 262:\ninsert into innertab values(123, 42);\n\n--Testcase 263:\nSELECT * FROM\n    (SELECT 1 AS x) ss1\n  LEFT JOIN\n    (SELECT q1, q2, COALESCE(dat1, q1) AS y\n     FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss2\n  ON true;\n\n-- join removal bug #17769: can't remove if there's a pushed-down reference\n--Testcase 606:\nEXPLAIN (COSTS OFF)\nSELECT q2 FROM\n  (SELECT *\n   FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss\n WHERE COALESCE(dat1, 0) = q1;\n\n-- join removal bug #17773: otherwise-removable PHV appears in a qual condition\n--Testcase 607:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q2 FROM\n  (SELECT q2, 'constant'::text AS x\n   FROM int8_tbl LEFT JOIN innertab ON q2 = id) ss\n  RIGHT JOIN int4_tbl ON NULL\n WHERE x >= x;\n\n-- join removal bug #17786: check that OR conditions are cleaned up\n--Testcase 608:\nEXPLAIN (COSTS OFF)\nSELECT f1, x\nFROM int4_tbl\n     JOIN ((SELECT 42 AS x FROM int8_tbl LEFT JOIN innertab ON q1 = id) AS ss1\n           RIGHT JOIN tenk1 ON NULL)\n        ON tenk1.unique1 = ss1.x OR tenk1.unique2 = ss1.x;\n\nrollback;\n\n-- another join removal bug: we must clean up correctly when removing a PHV\nbegin;\n\n--Testcase 453:\ncreate foreign table uniquetbl (f1 text) server sqlite_svr;\n\n--Testcase 264:\nexplain (costs off)\nselect t1.* from\n  uniquetbl as t1\n  left join (select *, '***'::text as d1 from uniquetbl) t2\n  on t1.f1 = t2.f1\n  left join uniquetbl t3\n  on t2.d1 = t3.f1;\n\n--Testcase 265:\nexplain (costs off)\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\n--Testcase 266:\nselect t0.*\nfrom\n text_tbl t0\n left join\n   (select case t1.ten when 0 then 'doh!'::text else null::text end as case1,\n           t1.stringu2\n     from tenk1 t1\n     join int4_tbl i4 ON i4.f1 = t1.unique2\n     left join uniquetbl u1 ON u1.f1 = t1.string4) ss\n  on t0.f1 = ss.case1\nwhere ss.stringu2 !~* ss.case1;\n\nrollback;\n\n-- another join removal bug: we must clean up EquivalenceClasses too\nbegin;\n\n--Testcase 609:\ncreate temp table t (a int unique);\n--Testcase 610:\ninsert into t values (1);\n\n--Testcase 611:\nexplain (costs off)\nselect 1\nfrom t t1\n  left join (select 2 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n    on true\nwhere t1.a = s.c;\n\n--Testcase 612:\nselect 1\nfrom t t1\n  left join (select 2 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n    on true\nwhere t1.a = s.c;\n\nrollback;\n\n-- test cases where we can remove a join, but not a PHV computed at it\nbegin;\n\n--Testcase 613:\ncreate temp table t (a int unique, b int);\n--Testcase 614:\ninsert into t values (1,1), (2,2);\n\n--Testcase 615:\nexplain (costs off)\nselect 1\nfrom t t1\n  left join (select t2.a, 1 as c\n             from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\n--Testcase 616:\nexplain (costs off)\nselect t1.a, s.*\nfrom t t1\n  left join lateral (select t2.a, coalesce(t1.a, 1) as c\n                     from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\n--Testcase 617:\nselect t1.a, s.*\nfrom t t1\n  left join lateral (select t2.a, coalesce(t1.a, 1) as c\n                     from t t2 left join t t3 on t2.a = t3.a) s\n  on true\n  left join t t4 on true\nwhere s.a < s.c;\n\nrollback;\n\n-- test case to expose miscomputation of required relid set for a PHV\n--Testcase 522:\nexplain (verbose, costs off)\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n--Testcase 523:\nselect i8.*, ss.v, t.unique2\n  from int8_tbl i8\n    left join int4_tbl i4 on i4.f1 = 1\n    left join lateral (select i4.f1 + 1 as v) as ss on true\n    left join tenk1 t on t.unique2 = ss.v\nwhere q2 = 456;\n\n-- -- and check a related issue where we miscompute required relids for\n-- -- a PHV that's been translated to a child rel\n-- create temp table parttbl (a integer primary key) partition by range (a);\n-- create temp table parttbl1 partition of parttbl for values from (1) to (100);\n-- insert into parttbl values (11), (12);\n-- explain (costs off)\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n-- select * from\n--   (select *, 12 as phv from parttbl) as ss\n--   right join int4_tbl on true\n-- where ss.a = ss.phv and f1 = 0;\n\n-- bug #8444: we've historically allowed duplicate aliases within aliased JOINs\n\n--Testcase 267:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = f1; -- error\n--Testcase 268:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y) j on q1 = y.f1; -- error\n--Testcase 269:\nselect * from\n  int8_tbl x join (int4_tbl x cross join int4_tbl y(ff)) j on q1 = f1; -- ok\n\n--\n-- Test hints given on incorrect column references are useful\n--\n\n--Testcase 270:\nselect t1.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t1\" suggestion\n--Testcase 271:\nselect t2.uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, prefer \"t2\" suggestion\n--Testcase 272:\nselect uunique1 from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, suggest both at once\n--Testcase 618:\nselect ctid from\n  tenk1 t1 join tenk2 t2 on t1.two = t2.two; -- error, need qualification\n\n--\n-- Take care to reference the correct RTE\n--\n\n--Testcase 454:\nselect atts.relid::regclass, s.* from pg_stats s join\n    pg_attribute a on s.attname = a.attname and s.tablename =\n    a.attrelid::regclass::text join (select unnest(indkey) attnum,\n    indexrelid from pg_index i) atts on atts.attnum = a.attnum where\n    schemaname != 'pg_catalog';\n\n-- Test bug in rangetable flattening\n--Testcase 619:\nexplain (verbose, costs off)\nselect 1 from\n  (select * from int8_tbl where q1 <> (select 42) offset 0) ss\nwhere false;\n\n--\n-- Test LATERAL\n--\n\n--Testcase 273:\nselect unique2, x.*\nfrom tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 274:\nexplain (costs off)\n  select unique2, x.*\n  from tenk1 a, lateral (select * from int4_tbl b where f1 = a.unique1) x;\n--Testcase 275:\nselect unique2, x.*\nfrom int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 276:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x, lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 277:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x cross join lateral (select unique2 from tenk1 where f1 = unique1) ss;\n--Testcase 278:\nselect unique2, x.*\nfrom int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n--Testcase 279:\nexplain (costs off)\n  select unique2, x.*\n  from int4_tbl x left join lateral (select unique1, unique2 from tenk1 where f1 = unique1) ss on true;\n\n-- check scoping of lateral versus parent references\n-- the first of these should return int8_tbl.q2, the second int8_tbl.q1\n--Testcase 280:\nselect *, (select r from (select q1 as q2) x, (select q2 as r) y) from int8_tbl;\n--Testcase 281:\nselect *, (select r from (select q1 as q2) x, lateral (select q2 as r) y) from int8_tbl;\n\n-- lateral with function in FROM\n--Testcase 282:\nselect count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 283:\nexplain (costs off)\n  select count(*) from tenk1 a, lateral generate_series(1,two) g;\n--Testcase 284:\nexplain (costs off)\n  select count(*) from tenk1 a cross join lateral generate_series(1,two) g;\n-- don't need the explicit LATERAL keyword for functions\n--Testcase 285:\nexplain (costs off)\n  select count(*) from tenk1 a, generate_series(1,two) g;\n\n-- lateral with UNION ALL subselect\n--Testcase 286:\nexplain (costs off)\n  select * from generate_series(100,200) g,\n    lateral (select * from int8_tbl a where g = q1 union all\n             select * from int8_tbl b where g = q2) ss;\n--Testcase 287:\nselect * from generate_series(100,200) g,\n  lateral (select * from int8_tbl a where g = q1 union all\n           select * from int8_tbl b where g = q2) ss;\n\n-- lateral with VALUES\n--Testcase 288:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n--Testcase 289:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral with VALUES, no flattening possible\n--Testcase 290:\nexplain (costs off)\n  select count(*) from tenk1 a,\n    tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n--Testcase 291:\nselect count(*) from tenk1 a,\n  tenk1 b join lateral (values(a.unique1),(-1)) ss(x) on b.unique2 = ss.x;\n\n-- lateral injecting a strange outer join condition\n--Testcase 292:\nexplain (costs off)\n  select * from int8_tbl a,\n    int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n      on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n--Testcase 293:\nselect * from int8_tbl a,\n  int8_tbl x left join lateral (select a.q1 from int4_tbl y) ss(z)\n    on x.q2 = ss.z\n  order by a.q1, a.q2, x.q1, x.q2, ss.z;\n\n-- lateral reference to a join alias variable\n--Testcase 294:\nselect * from (select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (select x) ss2(y);\n--Testcase 295:\nselect * from (select f1 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1,\n  lateral (values(x)) ss2(y);\n--Testcase 296:\nselect * from ((select f1/2 as x from int4_tbl) ss1 join int4_tbl i4 on x = f1) j,\n  lateral (select x) ss2(y);\n\n-- lateral references requiring pullup\n--Testcase 297:\nselect * from (values(1)) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 298:\nselect * from (select f1/1000000000 from int4_tbl) x(lb),\n  lateral generate_series(lb,4) x4;\n--Testcase 299:\nselect * from (values(1)) x(lb),\n  lateral (values(lb)) y(lbcopy);\n--Testcase 300:\nselect * from (values(1)) x(lb),\n  lateral (select lb from int4_tbl) y(lbcopy);\n--Testcase 301:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (values(x.q1,y.q1,y.q2)) v(xq1,yq1,yq2);\n--Testcase 302:\nselect * from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 303:\nselect x.* from\n  int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1,\n  lateral (select x.q1,y.q1,y.q2) v(xq1,yq1,yq2);\n--Testcase 304:\nselect v.* from\n  (int8_tbl x left join (select q1,coalesce(q2,0) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 305:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 union all select x.q2,y.q2) v(vx,vy);\n--Testcase 307:\nselect v.* from\n  (int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)\n  left join int4_tbl z on z.f1 = x.q2,\n  lateral (select x.q1,y.q1 from onerow union all select x.q2,y.q2 from onerow) v(vx,vy);\n\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 455:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 456:\nselect * from\n  int8_tbl a left join\n  lateral (select *, a.q2 as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 457:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n--Testcase 458:\nselect * from\n  int8_tbl a left join\n  lateral (select *, coalesce(a.q2, 42) as x from int8_tbl b) ss on a.q2 = ss.q1;\n\n-- lateral can result in join conditions appearing below their\n-- real semantic level\n--Testcase 308:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 309:\nselect * from int4_tbl i left join\n  lateral (select * from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 310:\nexplain (verbose, costs off)\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 311:\nselect * from int4_tbl i left join\n  lateral (select coalesce(i) from int2_tbl j where i.f1 = j.f1) k on true;\n--Testcase 312:\nexplain (verbose, costs off)\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n--Testcase 313:\nselect * from int4_tbl a,\n  lateral (\n    select * from int4_tbl b left join int8_tbl c on (b.f1 = q1 and a.f1 = q2)\n  ) ss;\n\n-- lateral reference in a PlaceHolderVar evaluated at join level\n-- Error when using sub-query with multi instances of table, this issue is fixed on PostgreSQL-12\n--Testcase 459:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n--Testcase 460:\nselect * from\n  int8_tbl a left join lateral\n  (select b.q1 as bq1, c.q1 as cq1, least(a.q1,b.q1,c.q1) from\n   int8_tbl b cross join int8_tbl c) ss\n  on a.q2 = ss.bq1;\n\n-- case requiring nested PlaceHolderVars\n--Testcase 461:\nexplain (verbose, costs off)\nselect * from\n  int8_tbl c left join (\n    int8_tbl a left join (select q1, coalesce(q2,42) as x from int8_tbl b) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select ss2.y offset 0) ss3;\n\n-- another case requiring nested PlaceHolderVars\n--Testcase 635:\nexplain (verbose, costs off)\nselect * from\n  (select 0 as val0 FROM int8_tbl LIMIT 1) as ss0\n  left join (select 1 as val FROM int8_tbl LIMIT 1) as ss1 on true\n  left join lateral (select ss1.val as val_filtered where false) as ss2 on true;\n\n--Testcase 636:\nselect * from\n  (select 0 as val0 FROM int8_tbl LIMIT 1) as ss0\n  left join (select 1 as val FROM int8_tbl LIMIT 1) as ss1 on true\n  left join lateral (select ss1.val as val_filtered where false) as ss2 on true;\n\n-- case that breaks the old ph_may_need optimization\n--Testcase 462:\nexplain (verbose, costs off)\nselect c.*,a.*,ss1.q1,ss2.q1,ss3.* from\n  int8_tbl c left join (\n    int8_tbl a left join\n      (select q1, coalesce(q2,f1) as x from int8_tbl b, int4_tbl b2\n       where q1 < f1) ss1\n      on a.q2 = ss1.q1\n    cross join\n    lateral (select q1, coalesce(ss1.x,q2) as y from int8_tbl d) ss2\n  ) on c.q2 = ss2.q1,\n  lateral (select * from int4_tbl i where ss2.y > f1) ss3;\n\n-- check processing of postponed quals (bug #9041)\n--Testcase 463:\ndelete from sub_tbl;\n--Testcase 464:\ninsert into sub_tbl values (1, 2, 3, 4, 5);\n--Testcase 465:\nexplain (verbose, costs off)\nselect * from\n  (select key1 as x  from sub_tbl offset 0) x cross join (select key3 as y from sub_tbl offset 0) y\n  left join lateral (\n    select * from (select key5 as z from sub_tbl offset 0) z where z.z = x.x\n  ) zz on zz.z = y.y;\n\n-- a new postponed-quals issue (bug #17768)\n--Testcase 620:\nexplain (costs off)\nselect * from int4_tbl t1,\n  lateral (select * from int4_tbl t2 inner join int4_tbl t3 on t1.f1 = 1\n           inner join (int4_tbl t4 left join int4_tbl t5 on true) on true) ss;\n\n-- check dummy rels with lateral references (bug #15694)\n--Testcase 466:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl where false) ss on true;\n--Testcase 467:\nexplain (verbose, costs off)\nselect * from int8_tbl i8 left join lateral\n  (select *, i8.q2 from int4_tbl i1, int4_tbl i2 where false) ss on true;\n\n-- check handling of nested appendrels inside LATERAL\n--Testcase 468:\nselect * from\n  ((select key3 as v from sub_tbl) union all (select key5 as v from sub_tbl)) as q1\n  cross join lateral\n  ((select * from\n      ((select key6 as v from sub_tbl) union all (select value1 as v from sub_tbl)) as q3)\n   union all\n   (select q1.v)\n  ) as q2;\n\n-- check the number of columns specified\n--Testcase 539:\nSELECT * FROM (int8_tbl i cross join int4_tbl j) ss(a,b,c,d);\n\n-- check we don't try to do a unique-ified semijoin with LATERAL\n--Testcase 314:\nexplain (verbose, costs off)\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n--Testcase 315:\nselect * from\n  (values (0,9998), (1,1000)) v(id,x),\n  lateral (select f1 from int4_tbl\n           where f1 = any (select unique1 from tenk1\n                           where unique2 = v.x offset 0)) ss;\n\n-- check proper extParam/allParam handling (this isn't exactly a LATERAL issue,\n-- but we can make the test case much more compact with LATERAL)\n--Testcase 316:\nexplain (verbose, costs off)\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where (q1, random() > 0) = any (select q2, random() > 0 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n--Testcase 317:\nselect * from (values (0), (1)) v(id),\nlateral (select * from int8_tbl t1,\n         lateral (select * from\n                    (select * from int8_tbl t2\n                     where (q1, random() > 0) = any (select q2, random() > 0 from int8_tbl t3\n                                     where q2 = (select greatest(t1.q1,t2.q2))\n                                       and (select v.id=0)) offset 0) ss2) ss\n         where t1.q1 = ss.q2) ss0;\n\n-- test some error cases where LATERAL should have been used but wasn't\n--Testcase 318:\nselect f1,g from int4_tbl a, (select f1 as g) ss;\n--Testcase 319:\nselect f1,g from int4_tbl a, (select a.f1 as g) ss;\n--Testcase 320:\nselect f1,g from int4_tbl a cross join (select f1 as g) ss;\n--Testcase 321:\nselect f1,g from int4_tbl a cross join (select a.f1 as g) ss;\n-- SQL:2008 says the left table is in scope but illegal to access here\n--Testcase 322:\nselect f1,g from int4_tbl a right join lateral generate_series(0, a.f1) g on true;\n--Testcase 323:\nselect f1,g from int4_tbl a full join lateral generate_series(0, a.f1) g on true;\n-- check we complain about ambiguous table references\n--Testcase 324:\nselect * from\n  int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss);\n-- LATERAL can be used to put an aggregate into the FROM clause of its query\n--Testcase 325:\nselect 1 from tenk1 a, lateral (select max(a.unique1) from int4_tbl b) ss;\n\n-- check behavior of LATERAL in UPDATE/DELETE\n\n--Testcase 469:\ncreate temp table xx1 as select f1 as x1, -f1 as x2 from int4_tbl;\n\n-- error, can't do this:\n--Testcase 326:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = x1) ss;\n--Testcase 327:\nupdate xx1 set x2 = f1 from (select * from int4_tbl where f1 = xx1.x1) ss;\n-- can't do it even with LATERAL:\n--Testcase 328:\nupdate xx1 set x2 = f1 from lateral (select * from int4_tbl where f1 = x1) ss;\n-- we might in future allow something like this, but for now it's an error:\n--Testcase 329:\nupdate xx1 set x2 = f1 from xx1, lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- also errors:\n--Testcase 330:\ndelete from xx1 using (select * from int4_tbl where f1 = x1) ss;\n--Testcase 331:\ndelete from xx1 using (select * from int4_tbl where f1 = xx1.x1) ss;\n--Testcase 332:\ndelete from xx1 using lateral (select * from int4_tbl where f1 = x1) ss;\n\n-- Skip this test, sqlite fdw does not support to create partition table\n-- test LATERAL reference propagation down a multi-level inheritance hierarchy\n-- produced for a multi-level partitioned table hierarchy.\n--\n--create table join_pt1 (a int, b int, c varchar) partition by range(a);\n--create table join_pt1p1 partition of join_pt1 for values from (0) to (100) partition by range(b);\n--create table join_pt1p2 partition of join_pt1 for values from (100) to (200);\n--create table join_pt1p1p1 partition of join_pt1p1 for values from (0) to (100);\n--insert into join_pt1 values (1, 1, 'x'), (101, 101, 'y');\n--create table join_ut1 (a int, b int, c varchar);\n--insert into join_ut1 values (101, 101, 'y'), (2, 2, 'z');\n--explain (verbose, costs off)\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n--select t1.b, ss.phv from join_ut1 t1 left join lateral\n--              (select t2.a as t2a, t3.a t3a, least(t1.a, t2.a, t3.a) phv\n--                                          from join_pt1 t2 join join_ut1 t3 on t2.a = t3.b) ss\n--              on t1.a = ss.t2a order by t1.a;\n\n--drop table join_pt1;\n--drop table join_ut1;\n\n--\n-- test estimation behavior with multi-column foreign key and constant qual\n--\n\nbegin;\n\n--Testcase 524:\ncreate table fkest (x integer, x10 integer, x10b integer, x100 integer);\n--Testcase 525:\ninsert into fkest select x, x/10, x/10, x/100 from generate_series(1,1000) x;\n--Testcase 526:\ncreate unique index on fkest(x, x10, x100);\nanalyze fkest;\n\n--Testcase 527:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\n--Testcase 528:\nalter table fkest add constraint fk\n  foreign key (x, x10b, x100) references fkest (x, x10, x100);\n\n--Testcase 529:\nexplain (costs off)\nselect * from fkest f1\n  join fkest f2 on (f1.x = f2.x and f1.x10 = f2.x10b and f1.x100 = f2.x100)\n  join fkest f3 on f1.x = f3.x\n  where f1.x100 = 2;\n\nrollback;\n\n--\n-- test that foreign key join estimation performs sanely for outer joins\n--\n\nbegin;\n\n--Testcase 470:\ncreate foreign table fkest (a int options (key 'true'), b int options (key 'true'), c int) server sqlite_svr;\n--Testcase 471:\ncreate foreign table fkest1 (a int options (key 'true'), b int options (key 'true')) server sqlite_svr;\n\n--Testcase 333:\ninsert into fkest select x/10, x%10, x from generate_series(1,1000) x;\n--Testcase 334:\ninsert into fkest1 select x/10, x%10 from generate_series(1,1000) x;\n\n--alter table fkest1\n--  add constraint fkest1_a_b_fkey foreign key (a,b) references fkest;\n\n--analyze fkest;\n--analyze fkest1;\n\n--Testcase 335:\nexplain (costs off)\nselect *\nfrom fkest f\n  left join fkest1 f1 on f.a = f1.a and f.b = f1.b\n  left join fkest1 f2 on f.a = f2.a and f.b = f2.b\n  left join fkest1 f3 on f.a = f3.a and f.b = f3.b\nwhere f.c = 1;\n\nrollback;\n\n--\n-- test planner's ability to mark joins as unique\n--\n\n--Testcase 472:\ncreate foreign table j11 (id int options (key 'true')) server sqlite_svr;\n--Testcase 473:\ncreate foreign table j21 (id int options (key 'true')) server sqlite_svr;\n--Testcase 474:\ncreate foreign table j31 (id int) server sqlite_svr;\n\n--Testcase 336:\ninsert into j11 values(1),(2),(3);\n--Testcase 337:\ninsert into j21 values(1),(2),(3);\n--Testcase 338:\ninsert into j31 values(1),(1);\n\n-- ensure join is properly marked as unique\n--Testcase 339:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id = j21.id;\n\n-- ensure join is not unique when not an equi-join\n--Testcase 340:\nexplain (verbose, costs off)\nselect * from j11 inner join j21 on j11.id > j21.id;\n\n-- ensure non-unique rel is not chosen as inner\n--Testcase 341:\nexplain (verbose, costs off)\nselect * from j11 inner join j31 on j11.id = j31.id;\n\n-- ensure left join is marked as unique\n--Testcase 342:\nexplain (verbose, costs off)\nselect * from j11 left join j21 on j11.id = j21.id;\n\n-- ensure right join is marked as unique\n--Testcase 343:\nexplain (verbose, costs off)\nselect * from j11 right join j21 on j11.id = j21.id;\n\n-- ensure full join is marked as unique\n--Testcase 344:\nexplain (verbose, costs off)\nselect * from j11 full join j21 on j11.id = j21.id;\n\n-- a clauseless (cross) join can't be unique\n--Testcase 345:\nexplain (verbose, costs off)\nselect * from j11 cross join j21;\n\n-- ensure a natural join is marked as unique\n--Testcase 346:\nexplain (verbose, costs off)\nselect * from j11 natural join j21;\n\n-- ensure a distinct clause allows the inner to become unique\n--Testcase 347:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select distinct id from j31) j31 on j11.id = j31.id;\n\n-- ensure group by clause allows the inner to become unique\n--Testcase 348:\nexplain (verbose, costs off)\nselect * from j11\ninner join (select id from j31 group by id) j31 on j11.id = j31.id;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- test more complex permutations of unique joins\n\n--Testcase 475:\ncreate foreign table j12 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 476:\ncreate foreign table j22 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n--Testcase 477:\ncreate foreign table j32 (id1 int options (key 'true'), id2 int options (key 'true')) server sqlite_svr;\n\n--Testcase 349:\ninsert into j12 values(1,1),(1,2);\n--Testcase 350:\ninsert into j22 values(1,1);\n--Testcase 351:\ninsert into j32 values(1,1);\n\n--analyze j1;\n--analyze j2;\n--analyze j3;\n\n-- ensure there's no unique join when not all columns which are part of the\n-- unique index are seen in the join clause\n--Testcase 352:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1;\n\n-- ensure proper unique detection with multiple join quals\n--Testcase 353:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2;\n\n-- ensure we don't detect the join to be unique when quals are not part of the\n-- join condition\n--Testcase 354:\nexplain (verbose, costs off)\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- as above, but for left joins.\n--Testcase 355:\nexplain (verbose, costs off)\nselect * from j12\nleft join j22 on j12.id1 = j22.id1 where j12.id2 = 1;\n\n-- create unique index command does not work with foreign table\n-- Add these normal tables for it.\n--Testcase 624:\ncreate table j1 (id1 int, id2 int, primary key(id1,id2));\n--Testcase 625:\ncreate table j2 (id1 int, id2 int, primary key(id1,id2));\n\n--Testcase 626:\ninsert into j1 values(1,1),(1,2);\n--Testcase 627:\ninsert into j2 values(1,1);\n\nanalyze j1;\nanalyze j2;\n\n--Testcase 621:\ncreate unique index j1_id2_idx on j1(id2) where id2 is not null;\n\n-- ensure we don't use a partial unique index as unique proofs\n--Testcase 622:\nexplain (verbose, costs off)\nselect * from j1\ninner join j2 on j1.id2 = j2.id2;\n\n--Testcase 623:\ndrop index j1_id2_idx;\n\n--Testcase 628:\ndrop table j1;\n--Testcase 629:\ndrop table j2;\n\n-- validate logic in merge joins which skips mark and restore.\n-- it should only do this if all quals which were used to detect the unique\n-- are present as join quals, and not plain quals.\n--Testcase 530:\nset enable_nestloop to 0;\n--Testcase 531:\nset enable_hashjoin to 0;\n--Testcase 532:\nset enable_sort to 0;\n-- skip, cannot create index on foreign table\n-- create indexes that will be preferred over the PKs to perform the join\n--create index j1_id1_idx on j1 (id1) where id1 % 1000 = 1;\n--create index j2_id1_idx on j2 (id1) where id1 % 1000 = 1;\n-- need an additional row in j2, if we want j2_id1_idx to be preferred\n--Testcase 478:\ninsert into j22 values(1,2);\n--analyze j2;\n\n--Testcase 356:\nexplain (costs off) select * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n--Testcase 357:\nselect * from j12 j12\ninner join j12 j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1;\n\n-- Exercise array keys mark/restore B-Tree code\n--Testcase 479:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n--Testcase 480:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 = any (array[1]);\n\n-- Exercise array keys \"find extreme element\" B-Tree code\n--Testcase 481:\nexplain (costs off) select * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 482:\nselect * from j12\ninner join j22 on j12.id1 = j22.id1 and j12.id2 = j22.id2\nwhere j12.id1 % 1000 = 1 and j22.id1 % 1000 = 1 and j22.id1 >= any (array[1,5]);\n\n--Testcase 533:\nreset enable_nestloop;\n--Testcase 534:\nreset enable_hashjoin;\n--Testcase 535:\nreset enable_sort;\n\n--drop table j1;\n--drop table j2;\n--drop table j3;\n\n-- check that semijoin inner is not seen as unique for a portion of the outerrel\n--Testcase 358:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from tenk1 t3\n              where t3.thousand = t1.unique1 and t3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n-- ... unless it actually is unique\n--Testcase 484:\ncreate table j3 as select unique1, tenthous from onek;\nvacuum analyze j3;\n--Testcase 485:\ncreate unique index on j3(unique1, tenthous);\n\n--Testcase 359:\nexplain (verbose, costs off)\nselect t1.unique1, t2.hundred\nfrom onek t1, tenk1 t2\nwhere exists (select 1 from j3\n              where j3.unique1 = t1.unique1 and j3.tenthous = t2.hundred)\n      and t1.unique1 < 1;\n\n--Testcase 486:\ndrop table j3;\n\n-- sqlite_fdw is not supported WITH fillfactor, INDEX, VACUM, ANALYZE with foreign table.\n-- Exercise the \"skip fetch\" Bitmap Heap Scan optimization when candidate\n-- tuples are discarded. This may occur when:\n--   1. A join doesn't require all inner tuples to be scanned for each outer\n--      tuple, and\n--   2. The inner side is scanned using a bitmap heap scan, and\n--   3. The bitmap heap scan is eligible for the \"skip fetch\" optimization.\n--      This optimization is usable when no data from the underlying table is\n--      needed. Use a temp table so it is only visible to this backend and\n--      vacuum may reliably mark all blocks in the table all visible in the\n--      visibility map.\n-- CREATE TEMP TABLE skip_fetch (a INT, b INT) WITH (fillfactor=10);\n-- INSERT INTO skip_fetch SELECT i % 3, i FROM generate_series(0,30) i;\n-- CREATE INDEX ON skip_fetch(a);\n-- VACUUM (ANALYZE) skip_fetch;\n-- SET enable_indexonlyscan = off;\n-- SET enable_seqscan = off;\n-- EXPLAIN (COSTS OFF)\n-- SELECT t1.a FROM skip_fetch t1 LEFT JOIN skip_fetch t2 ON t2.a = 1 WHERE t2.a IS NULL;\n-- SELECT t1.a FROM skip_fetch t1 LEFT JOIN skip_fetch t2 ON t2.a = 1 WHERE t2.a IS NULL;\n-- RESET enable_indexonlyscan;\n-- RESET enable_seqscan;\n\n--Testcase 656:\nDELETE FROM INT4_TBL;\n--Testcase 657:\nDELETE FROM FLOAT8_TBL;\n--Testcase 658:\nDELETE FROM INT8_TBL;\n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 487:\nDROP SERVER sqlite_svr;\n--Testcase 488:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/limit.sql",
    "content": "--\n-- LIMIT\n-- Check the LIMIT/OFFSET feature of SELECT\n--\n--Testcase 27:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 28:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 29:\nCREATE FOREIGN TABLE onek(\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 30:\nCREATE FOREIGN TABLE int8_tbl(q1 int8 OPTIONS (key 'true'), q2 int8) SERVER sqlite_svr;\n--Testcase 105:\nINSERT INTO int8_tbl VALUES('  123   ','  456');\n--Testcase 106:\nINSERT INTO int8_tbl VALUES('123   ','4567890123456789');\n--Testcase 107:\nINSERT INTO int8_tbl VALUES('4567890123456789','123');\n--Testcase 108:\nINSERT INTO int8_tbl VALUES(+4567890123456789,'4567890123456789');\n--Testcase 109:\nINSERT INTO int8_tbl VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 31:\nCREATE FOREIGN TABLE INT8_TMP(\n        q1 int8,\n        q2 int8,\n        q3 int4,\n        q4 int2,\n        q5 text,\n        id int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 32:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4 OPTIONS (key 'true'),\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd     \tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 88:\nCREATE TABLE parent_table (\n\tunique1\t\tint4 PRIMARY KEY,\n\tunique2\t\tint4,\n\ttwo \t\tint4,\n\tfour\t\tint4,\n\tten \t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\n--Testcase 89:\nCREATE FOREIGN table inherited_table ()\nINHERITS (parent_table)\nSERVER sqlite_svr options (table 'tenk1');\n\n--Testcase 1:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tORDER BY unique1 LIMIT 2;\n--Testcase 2:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 3:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 60 AND unique1 < 63\n\t\tORDER BY unique1 LIMIT 5;\n--Testcase 4:\nSELECT ''::text AS three, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 100\n\t\tORDER BY unique1 LIMIT 3 OFFSET 20;\n--Testcase 5:\nSELECT ''::text AS zero, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 8 OFFSET 99;\n--Testcase 6:\nSELECT ''::text AS eleven, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 < 50\n\t\tORDER BY unique1 DESC LIMIT 20 OFFSET 39;\n--Testcase 7:\nSELECT ''::text AS ten, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990;\n--Testcase 8:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 OFFSET 990 LIMIT 5;\n--Testcase 9:\nSELECT ''::text AS five, unique1, unique2, stringu1\n\t\tFROM onek\n\t\tORDER BY unique1 LIMIT 5 OFFSET 900;\n\n-- Test null limit and offset.  The planner would discard a simple null\n-- constant, so to ensure executor is exercised, do this:\n--Testcase 10:\nselect * from int8_tbl limit (case when random() < 0.5 then null::bigint end);\n--Testcase 11:\nselect * from int8_tbl offset (case when random() < 0.5 then null::bigint end);\n\n-- Test assorted cases involving backwards fetch from a LIMIT plan node\nbegin;\n\ndeclare c1 scroll cursor for select * from int8_tbl order by q1 limit 10;\n--Testcase 12:\nfetch all in c1;\n--Testcase 13:\nfetch 1 in c1;\n--Testcase 14:\nfetch backward 1 in c1;\n--Testcase 33:\nfetch backward all in c1;\n--Testcase 34:\nfetch backward 1 in c1;\n--Testcase 35:\nfetch all in c1;\n\ndeclare c2 scroll cursor for select * from int8_tbl limit 3;\n--Testcase 36:\nfetch all in c2;\n--Testcase 37:\nfetch 1 in c2;\n--Testcase 38:\nfetch backward 1 in c2;\n--Testcase 39:\nfetch backward all in c2;\n--Testcase 40:\nfetch backward 1 in c2;\n--Testcase 41:\nfetch all in c2;\n\ndeclare c3 scroll cursor for select * from int8_tbl offset 3;\n--Testcase 42:\nfetch all in c3;\n--Testcase 43:\nfetch 1 in c3;\n--Testcase 44:\nfetch backward 1 in c3;\n--Testcase 45:\nfetch backward all in c3;\n--Testcase 46:\nfetch backward 1 in c3;\n--Testcase 47:\nfetch all in c3;\n\ndeclare c4 scroll cursor for select * from int8_tbl offset 10;\n--Testcase 48:\nfetch all in c4;\n--Testcase 49:\nfetch 1 in c4;\n--Testcase 50:\nfetch backward 1 in c4;\n--Testcase 51:\nfetch backward all in c4;\n--Testcase 52:\nfetch backward 1 in c4;\n--Testcase 53:\nfetch all in c4;\n\ndeclare c5 scroll cursor for select * from int8_tbl order by q1 fetch first 2 rows with ties;\n--Testcase 54:\nfetch all in c5;\n--Testcase 55:\nfetch 1 in c5;\n--Testcase 56:\nfetch backward 1 in c5;\n--Testcase 57:\nfetch backward 1 in c5;\n--Testcase 58:\nfetch all in c5;\n--Testcase 59:\nfetch backward all in c5;\n--Testcase 60:\nfetch all in c5;\n--Testcase 61:\nfetch backward all in c5;\n\nrollback;\n\n-- Stress test for variable LIMIT in conjunction with bounded-heap sorting\n--Testcase 62:\nDELETE FROM INT8_TMP;\n--Testcase 63:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series(1,10) q1;\n\n--Testcase 64:\nSELECT\n  (SELECT s.q1 \n     FROM (VALUES (1)) AS x,\n          (SELECT q1 FROM INT8_TMP as n \n             ORDER BY q1 LIMIT 1 OFFSET s.q1-1) AS y) AS z\n  FROM INT8_TMP AS s;\n\n--\n-- Test behavior of volatile and set-returning functions in conjunction\n-- with ORDER BY and LIMIT.\n--\n\n--Testcase 65:\ncreate temp sequence testseq;\n\n--Testcase 15:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 16:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10;\n\n--Testcase 90:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 91:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 limit 10 offset 5;\n\n--Testcase 17:\nselect currval('testseq');\n\n--Testcase 92:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n--Testcase 93:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10;\n\n\n--Testcase 94:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 95:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by unique2 desc limit 10 offset 5;\n\n--Testcase 96:\nselect currval('testseq');\n\n--Testcase 18:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 19:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10;\n\n--Testcase 97:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 98:\nselect unique1, unique2, nextval('testseq')\n  from tenk1 order by tenthous limit 10 offset 5;\n\n--Testcase 20:\nselect currval('testseq');\n\n-- test for limit and offset when querying table and foreign table inherited\n--Testcase 99:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n--Testcase 100:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10;\n\n-- when querying regular tables with inherited tables, only limit is pushed-down when no offset is specified\n--Testcase 101:\nexplain (verbose, costs off)\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 102:\nselect unique1, unique2, nextval('testseq')\n  from parent_table order by tenthous limit 10 offset 5;\n\n--Testcase 103:\nselect currval('testseq');\n\n--Testcase 21:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 22:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by unique2 limit 7;\n\n--Testcase 23:\nexplain (verbose, costs off)\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n--Testcase 24:\nselect unique1, unique2, generate_series(1,10)\n  from tenk1 order by tenthous limit 7;\n\n-- use of random() is to keep planner from folding the expressions together\n--Testcase 66:\nDELETE FROM INT8_TMP;\n--Testcase 67:\nINSERT INTO INT8_TMP VALUES (generate_series(0,2), generate_series((random()*.1)::int,2));\n--Testcase 68:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp;\n\n--Testcase 69:\nselect q1, q2 from int8_tmp;\n\n--Testcase 70:\nexplain (verbose, costs off)\nselect q1, q2 from int8_tmp order by q2 desc;\n\n--Testcase 71:\nselect q1, q2 from int8_tmp order by q2 desc;\n\n-- test for failure to set all aggregates' aggtranstype\n--Testcase 25:\nexplain (verbose, costs off)\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--Testcase 26:\nselect sum(tenthous) as s1, sum(tenthous) + random()*0 as s2\n  from tenk1 group by thousand order by thousand limit 3;\n\n--\n-- FETCH FIRST\n-- Check the WITH TIES clause\n--\n\n--Testcase 72:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW WITH TIES;\n\n--Testcase 73:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST ROWS WITH TIES;\n\n--Testcase 74:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES;\n\n--Testcase 75:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 2 ROW ONLY;\n\n-- SKIP LOCKED and WITH TIES are incompatible\n--Testcase 104:\nSELECT  thousand\n\t\tFROM onek WHERE thousand < 5\n\t\tORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;\n\n-- should fail\n--Testcase 76:\nSELECT ''::text AS two, unique1, unique2, stringu1\n\t\tFROM onek WHERE unique1 > 50\n\t\tFETCH FIRST 2 ROW WITH TIES;\n\n-- test ruleutils\n--Testcase 77:\nCREATE VIEW limit_thousand_v_1 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST 5 ROWS WITH TIES OFFSET 10;\n--Testcase 78:\n\\d+ limit_thousand_v_1\n--Testcase 79:\nCREATE VIEW limit_thousand_v_2 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand OFFSET 10 FETCH FIRST 5 ROWS ONLY;\n--Testcase 80:\n\\d+ limit_thousand_v_2\n--Testcase 81:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS WITH TIES;\t\t-- fails\n--Testcase 82:\nCREATE VIEW limit_thousand_v_3 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST (NULL+1) ROWS WITH TIES;\n--Testcase 83:\n\\d+ limit_thousand_v_3\n--Testcase 84:\nCREATE VIEW limit_thousand_v_4 AS SELECT thousand FROM onek WHERE thousand < 995\n\t\tORDER BY thousand FETCH FIRST NULL ROWS ONLY;\n--Testcase 85:\n\\d+ limit_thousand_v_4\n-- leave these views\n\n--Testcase 110:\nDELETE FROM int8_tbl;\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name\n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 86:\nDROP SERVER sqlite_svr;\n--Testcase 87:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/prepare.sql",
    "content": "-- Regression tests for prepareable statements. We query the content\n-- of the pg_prepared_statements view as prepared statements are\n-- created and removed.\n--Testcase 26:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 27:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 28:\nCREATE FOREIGN TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n) SERVER sqlite_svr;\n\n--Testcase 29:\nCREATE FOREIGN TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n) SERVER sqlite_svr;\n\n--Testcase 30:\ncreate foreign table road_tmp (a int, b int, id int options (key 'true')) server sqlite_svr;\n--Testcase 31:\ninsert into road_tmp values (1, 2);\n\n--Testcase 1:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n--Testcase 2:\nPREPARE q1 AS SELECT a FROM road_tmp;\n--Testcase 3:\nEXECUTE q1;\n\n--Testcase 4:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- should fail\n--Testcase 5:\nPREPARE q1 AS SELECT b FROM road_tmp;\n\n-- should succeed\nDEALLOCATE q1;\n--Testcase 6:\nPREPARE q1 AS SELECT b FROM road_tmp;\n--Testcase 7:\nEXECUTE q1;\n\n--Testcase 8:\nPREPARE q2 AS SELECT b FROM road_tmp;\n--Testcase 9:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- sql92 syntax\nDEALLOCATE PREPARE q1;\n\n--Testcase 10:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\nDEALLOCATE PREPARE q2;\n-- the view should return the empty set again\n--Testcase 11:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements;\n\n-- parameterized queries\n--Testcase 12:\nPREPARE q2(text) AS\n\tSELECT datname, datistemplate, datallowconn\n\tFROM pg_database WHERE datname = $1;\n\n--Testcase 13:\nEXECUTE q2('postgres');\n\n--Testcase 14:\nPREPARE q3(text, int, float, boolean, smallint) AS\n\tSELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR\n\tten = $3::bigint OR true = $4 OR odd = $5::int)\n\tORDER BY unique1;\n\n--Testcase 15:\nEXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 4::bigint);\n\n-- too few params\n--Testcase 16:\nEXECUTE q3('bool');\n\n-- too many params\n--Testcase 17:\nEXECUTE q3('bytea', 5::smallint, 10.5::float, false, 4::bigint, true);\n\n-- wrong param types\n--Testcase 18:\nEXECUTE q3(5::smallint, 10.5::float, false, 4::bigint, 'bytea');\n\n-- invalid type\n--Testcase 19:\nPREPARE q4(nonexistenttype) AS SELECT * FROM road WHERE name = $1;\n\n-- create table as execute\n--Testcase 20:\nPREPARE q5(int, text) AS\n\tSELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2\n\tORDER BY unique1;\n--Testcase 32:\nCREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');\n--Testcase 21:\nSELECT * FROM q5_prep_results;\n--Testcase 33:\nCREATE TEMPORARY TABLE q5_prep_nodata AS EXECUTE q5(200, 'DTAAAA')\n    WITH NO DATA;\n--Testcase 34:\nSELECT * FROM q5_prep_nodata;\n\n-- unknown or unspecified parameter types: should succeed\n--Testcase 22:\nPREPARE q6 AS\n    SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;\n--Testcase 23:\nPREPARE q7(unknown) AS\n    SELECT * FROM road WHERE thepath = $1;\n\n-- DML statements\nPREPARE q8 AS\n    UPDATE tenk1 SET stringu1 = $2 WHERE unique1 = $1;\n--Testcase 24:\nSELECT name, statement, parameter_types, result_types FROM pg_prepared_statements\n    ORDER BY name;\n\n-- test DEALLOCATE ALL;\nDEALLOCATE ALL;\n--Testcase 25:\nSELECT name, statement, parameter_types FROM pg_prepared_statements\n    ORDER BY name;\n\n--Testcase 35:\nDROP FOREIGN TABLE tenk1;\n--Testcase 36:\nDROP FOREIGN TABLE road;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/select.sql",
    "content": "--\n-- SELECT\n--\n--Testcase 43:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 44:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 45:\nCREATE FOREIGN TABLE onek (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 46:\nCREATE FOREIGN TABLE onek2 (\n  unique1   int4,\n  unique2   int4,\n  two     int4,\n  four    int4,\n  ten     int4,\n  twenty    int4,\n  hundred   int4,\n  thousand  int4,\n  twothousand int4,\n  fivethous int4,\n  tenthous  int4,\n  odd     int4,\n  even    int4,\n  stringu1  name,\n  stringu2  name,\n  string4   name\n) SERVER sqlite_svr;\n\n--Testcase 47:\nCREATE FOREIGN TABLE INT8_TBL(\n  q1 int8 OPTIONS (key 'true'),\n  q2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 73:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 74:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 75:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 76:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 77:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n--Testcase 48:\nCREATE FOREIGN TABLE person (\n  name    text,\n  age     int4,\n  location  point\n) SERVER sqlite_svr;\n\n-- btree index\n-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 1:\nSELECT * FROM onek\n   WHERE onek.unique1 < 10\n   ORDER BY onek.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 2:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 3:\nSELECT onek.unique1, onek.stringu1 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY stringu1 using <;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1d -2 +0nr -1\n--\n--Testcase 4:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using <, unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |\n-- sort +1dr -2 +0n -1\n--\n--Testcase 5:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 > 980\n   ORDER BY string4 using >, unique1 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0nr -1 +1d -2\n--\n--Testcase 6:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using >, string4 using <;\n\n--\n-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |\n-- sort +0n -1 +1dr -2\n--\n--Testcase 7:\nSELECT onek.unique1, onek.string4 FROM onek\n   WHERE onek.unique1 < 20\n   ORDER BY unique1 using <, string4 using >;\n\n--\n-- test partial btree indexes\n--\n-- As of 7.2, planner probably won't pick an indexscan without stats,\n-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan\n-- followed by sort, because that could hide index ordering problems.\n--\n--ANALYZE onek2;\n\nSET enable_seqscan TO off;\nSET enable_bitmapscan TO off;\nSET enable_sort TO off;\n\n--\n-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1\n--\n--Testcase 8:\nSELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10 order by onek2.unique1;\n\n--\n-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1\n--\n--Testcase 9:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n    WHERE onek2.unique1 < 20\n    ORDER BY unique1 using >;\n\n--\n-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2\n--\n--Testcase 10:\nSELECT onek2.unique1, onek2.stringu1 FROM onek2\n   WHERE onek2.unique1 > 980 ORDER BY onek2.unique1;\n\nRESET enable_seqscan;\nRESET enable_bitmapscan;\nRESET enable_sort;\n\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data\n--\n-- SELECT name, age FROM person*; ??? check if different\n--Testcase 12:\nSELECT p.name, p.age FROM person* p;\n\n--\n-- awk '{print $1,$2;}' person.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |\n-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |\n-- awk 'BEGIN{FS=\"      \";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |\n-- sort +1nr -2\n--\n--Testcase 13:\nSELECT p.name, p.age FROM person* p ORDER BY age using >, name;\n\n--\n-- Test some cases involving whole-row Var referencing a subquery\n--\n--Testcase 49:\nselect foo from (select 1 offset 0) as foo;\n--Testcase 50:\nselect foo from (select null offset 0) as foo;\n--Testcase 51:\nselect foo from (select 'xyzzy',1,null offset 0) as foo;\n\n--\n-- Test VALUES lists\n--\n--Testcase 14:\nselect * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)\n    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;\n\n-- a more complex case\n-- looks like we're coding lisp :-)\n--Testcase 15:\nselect * from onek,\n  (values ((select i from\n    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)\n    order by i asc limit 1))) bar (i)\n  where onek.unique1 = bar.i;\n\n-- try VALUES in a subquery\n--Testcase 16:\nselect * from onek\n    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))\n    order by unique1;\n\n-- VALUES is also legal as a standalone query or a set-operation member\n--Testcase 17:\nVALUES (1,2), (3,4+4), (7,77.7);\n\n--Testcase 52:\nVALUES (1,2), (3,4+4), (7,77.7)\nUNION ALL\nSELECT 2+2, 57\nUNION ALL\nTABLE int8_tbl;\n\n-- corner case: VALUES with no columns\n-- CREATE TEMP TABLE nocols();\n-- INSERT INTO nocols DEFAULT VALUES;\n-- SELECT * FROM nocols n, LATERAL (VALUES(n.*)) v;\n\n--\n-- Test ORDER BY options\n--\n\n--Testcase 53:\nCREATE FOREIGN TABLE foo (f1 int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 18:\nINSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);\n\n--Testcase 19:\nSELECT * FROM foo ORDER BY f1;\n--Testcase 20:\nSELECT * FROM foo ORDER BY f1 ASC;\t-- same thing\n--Testcase 21:\nSELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--Testcase 22:\nSELECT * FROM foo ORDER BY f1 DESC;\n--Testcase 23:\nSELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n-- Skip, cannot create index on foreign table\n-- check if indexscans do the right things\n--CREATE INDEX fooi ON foo (f1);\n--SET enable_sort = false;\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--DROP INDEX fooi;\n--CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);\n\n--SELECT * FROM foo ORDER BY f1;\n--SELECT * FROM foo ORDER BY f1 NULLS FIRST;\n--SELECT * FROM foo ORDER BY f1 DESC;\n--SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;\n\n--\n-- Test planning of some cases with partial indexes\n--\n\n-- partial index is usable\n--Testcase 24:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 25:\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- actually run the query with an analyze to use the partial index\n--Testcase 54:\nexplain (costs off, analyze on, timing off, summary off)\nselect * from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 27:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n--Testcase 28:\nselect unique2 from onek2 where unique2 = 11 and stringu1 = 'ATAAAA';\n-- partial index predicate implies clause, so no need for retest\n--Testcase 29:\nexplain (costs off)\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 30:\nselect * from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 31:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 32:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n-- but if it's an update target, must retest anyway\n--Testcase 33:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n--Testcase 34:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B' for update;\n-- partial index is not applicable\n--Testcase 35:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n--Testcase 36:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'C';\n-- partial index implies clause, but bitmap scan must recheck predicate anyway\nSET enable_indexscan TO off;\n--Testcase 37:\nexplain (costs off)\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\n--Testcase 38:\nselect unique2 from onek2 where unique2 = 11 and stringu1 < 'B';\nRESET enable_indexscan;\n-- check multi-index cases too\n--Testcase 39:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 40:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 or unique1 = 0) and stringu1 < 'B';\n--Testcase 41:\nexplain (costs off)\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n--Testcase 42:\nselect unique1, unique2 from onek2\n  where (unique2 = 11 and stringu1 < 'B') or unique1 = 0;\n\n--\n-- Test some corner cases that have been known to confuse the planner\n--\n\n-- ORDER BY on a constant doesn't really need any sorting\n--Testcase 55:\nSELECT 1 AS x ORDER BY x;\n\n-- But ORDER BY on a set-valued expression does\n--Testcase 56:\ncreate function sillysrf(int) returns setof int as\n  'values (1),(10),(2),($1)' language sql immutable;\n\n--Testcase 57:\nselect sillysrf(42);\n--Testcase 58:\nselect sillysrf(-1) order by 1;\n\n--Testcase 59:\ndrop function sillysrf(int);\n\n-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict\n-- (see bug #5084)\n--Testcase 60:\nselect * from (values (2),(null),(1)) v(k) where k = k order by k;\n--Testcase 61:\nselect * from (values (2),(null),(1)) v(k) where k = k;\n\n-- Test partitioned tables with no partitions, which should be handled the\n-- same as the non-inheritance case when expanding its RTE.\n--Testcase 62:\ncreate table list_parted_tbl (a int,b int) partition by list (a);\n--Testcase 63:\ncreate table list_parted_tbl1 partition of list_parted_tbl\n  for values in (1) partition by list(b);\n--Testcase 64:\nexplain (costs off) select * from list_parted_tbl;\n--Testcase 65:\ndrop table list_parted_tbl;\n\n--Testcase 78:\nDELETE FROM INT8_TBL;\n\n--Testcase 66:\nDROP FOREIGN TABLE onek;\n--Testcase 67:\nDROP FOREIGN TABLE onek2;\n--Testcase 68:\nDROP FOREIGN TABLE int8_tbl;\n--Testcase 69:\nDROP FOREIGN TABLE person;\n--Testcase 70:\nDROP FOREIGN TABLE foo;\n--Testcase 71:\nDROP SERVER sqlite_svr;\n--Testcase 72:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/select_having.sql",
    "content": "--\n-- SELECT_HAVING\n--\n\n--Testcase 22:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 23:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 24:\nCREATE FOREIGN TABLE test_having(a int OPTIONS (key 'true'), b int, c char(8), d char) SERVER sqlite_svr;\n\n-- load test data\n--Testcase 1:\nINSERT INTO test_having VALUES (0, 1, 'XXXX', 'A');\n--Testcase 2:\nINSERT INTO test_having VALUES (1, 2, 'AAAA', 'b');\n--Testcase 3:\nINSERT INTO test_having VALUES (2, 2, 'AAAA', 'c');\n--Testcase 4:\nINSERT INTO test_having VALUES (3, 3, 'BBBB', 'D');\n--Testcase 5:\nINSERT INTO test_having VALUES (4, 3, 'BBBB', 'e');\n--Testcase 6:\nINSERT INTO test_having VALUES (5, 3, 'bbbb', 'F');\n--Testcase 7:\nINSERT INTO test_having VALUES (6, 4, 'cccc', 'g');\n--Testcase 8:\nINSERT INTO test_having VALUES (7, 4, 'cccc', 'h');\n--Testcase 9:\nINSERT INTO test_having VALUES (8, 4, 'CCCC', 'I');\n--Testcase 10:\nINSERT INTO test_having VALUES (9, 4, 'CCCC', 'j');\n\n--Testcase 11:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING count(*) = 1 ORDER BY b, c;\n\n-- HAVING is effectively equivalent to WHERE in this case\n--Testcase 12:\nSELECT b, c FROM test_having\n\tGROUP BY b, c HAVING b = 3 ORDER BY b, c collate \"en_US.utf8\";\n\n--Testcase 13:\nSELECT lower(c), count(c) FROM test_having\n\tGROUP BY lower(c) HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY lower(c);\n\n--Testcase 14:\nSELECT c, max(a) FROM test_having\n\tGROUP BY c HAVING count(*) > 2 OR min(a) = max(a)\n\tORDER BY c collate \"en_US.utf8\";\n\n-- test degenerate cases involving HAVING without GROUP BY\n-- Per SQL spec, these should generate 0 or 1 row, even without aggregates\n\n--Testcase 15:\nSELECT min(a), max(a) FROM test_having HAVING min(a) = max(a);\n--Testcase 16:\nSELECT min(a), max(a) FROM test_having HAVING min(a) < max(a);\n\n-- errors: ungrouped column references\n--Testcase 17:\nSELECT a FROM test_having HAVING min(a) < max(a);\n--Testcase 18:\nSELECT 1 AS one FROM test_having HAVING a > 1;\n\n-- the really degenerate case: need not scan table at all\n--Testcase 19:\nSELECT 1 AS one FROM test_having HAVING 1 > 2;\n--Testcase 20:\nSELECT 1 AS one FROM test_having HAVING 1 < 2;\n\n-- and just to prove that we aren't scanning the table:\n--Testcase 21:\nSELECT 1 AS one FROM test_having WHERE 1/a = 1 HAVING 1 < 2;\n\n--Testcase 25:\nDROP FOREIGN TABLE test_having;\n--Testcase 26:\nDROP SERVER sqlite_svr;\n--Testcase 27:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/sqlite_fdw_post.sql",
    "content": "-- ===================================================================\n-- create FDW objects\n-- ===================================================================\n\n--Testcase 483:\nCREATE EXTENSION sqlite_fdw;\n\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr2 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n        EXECUTE $$CREATE SERVER sqlite_svr3 FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- SQLite FDW does not need User and User Mapping.\n--Testcase 484:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 485:\n-- CREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 756:\n-- CREATE USER MAPPING FOR public SERVER sqlite_svr3;\n-- ===================================================================\n-- create objects used through FDW sqlite server\n-- ===================================================================\n--Testcase 486:\nCREATE SCHEMA \"S 1\";\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO \"S 1\";\n\n--Testcase 1:\nINSERT INTO \"S 1\".\"T 1\"\n\tSELECT id,\n\t       id % 10,\n\t       to_char(id, 'FM00000'),\n\t       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,\n\t       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,\n\t       id % 10,\n\t       id % 10,\n\t       'foo'\n\tFROM generate_series(1, 1000) id;\n--Testcase 2:\nINSERT INTO \"S 1\".\"T 2\"\n\tSELECT id,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 3:\nINSERT INTO \"S 1\".\"T 3\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 487:\nDELETE FROM \"S 1\".\"T 3\" WHERE c1 % 2 != 0;\t-- delete for outer join tests\n--Testcase 4:\nINSERT INTO \"S 1\".\"T 4\"\n\tSELECT id,\n\t       id + 1,\n\t       'AAA' || to_char(id, 'FM000')\n\tFROM generate_series(1, 100) id;\n--Testcase 488:\nDELETE FROM \"S 1\".\"T 4\" WHERE c1 % 3 != 0;\t-- delete for outer join tests\n\n/*ANALYZE \"S 1\".\"T 1\";\nANALYZE \"S 1\".\"T 2\";\nANALYZE \"S 1\".\"T 3\";\nANALYZE \"S 1\".\"T 4\";*/\n\n-- ===================================================================\n-- create foreign tables\n-- ===================================================================\n--Testcase 489:\nCREATE FOREIGN TABLE ft1 (\n\tc0 int,\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 757:\nALTER FOREIGN TABLE ft1 DROP COLUMN c0;\n\n--Testcase 490:\nCREATE FOREIGN TABLE ft2 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tcx int,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft2',\n\tc8 text\n) SERVER sqlite_svr;\n--Testcase 758:\nALTER FOREIGN TABLE ft2 DROP COLUMN cx;\n\n--Testcase 491:\nCREATE FOREIGN TABLE ft4 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 3');\n\n--Testcase 492:\nCREATE FOREIGN TABLE ft5 (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr OPTIONS (table 'T 4');\n\n--Testcase 493:\nCREATE FOREIGN TABLE ft6 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr2 OPTIONS (table 'T 4');\n\n--Testcase 759:\nCREATE FOREIGN TABLE ft7 (\n\tc1 int NOT NULL,\n\tc2 int NOT NULL,\n\tc3 text\n) SERVER sqlite_svr3 OPTIONS (table 'T 4');\n\n--Testcase 760:\nALTER FOREIGN TABLE ft1 OPTIONS (table 'T 1');\n--Testcase 761:\nALTER FOREIGN TABLE ft2 OPTIONS (table 'T 1');\n--Testcase 762:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 763:\nALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n--Testcase 5:\n\\det+\n\n-- Test that alteration of server options causes reconnection\n-- Remote's errors might be non-English, so hide them to ensure stable results\n\\set VERBOSITY terse\n--Testcase 6:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work\n\n--Testcase 764:\nALTER SERVER sqlite_svr OPTIONS (SET database 'no such database');\n--Testcase 7:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should fail\nDO $d$\n    BEGIN\n        EXECUTE $$ALTER SERVER sqlite_svr\n            OPTIONS (SET database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n--Testcase 8:\nSELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1;  -- should work again\n\\set VERBOSITY default\n\n-- Now we should be able to run ANALYZE.\n-- To exercise multiple code paths, we use local stats on ft1\n-- and remote-estimate mode on ft2.\n--ANALYZE ft1;\n--ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');\n\n-- ===================================================================\n-- test error case for create publication on foreign table\n-- ===================================================================\n--Testcase 955:\nCREATE PUBLICATION testpub_ftbl FOR TABLE ft1;  -- should fail\n\n-- ===================================================================\n-- simple queries\n-- ===================================================================\n-- single table without alias\n--Testcase 9:\nEXPLAIN (COSTS OFF) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n--Testcase 10:\nSELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;\n-- single table with alias - also test that tableoid sort is not pushed to remote side\n--Testcase 11:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n--Testcase 12:\nSELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1, t1.tableoid OFFSET 100 LIMIT 10;\n-- whole-row reference\n--Testcase 13:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 14:\nSELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- empty result\n--Testcase 15:\nSELECT * FROM ft1 WHERE false;\n-- with WHERE clause\n--Testcase 16:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n--Testcase 17:\nSELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';\n-- with FOR UPDATE/SHARE\n--Testcase 18:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 19:\nSELECT * FROM ft1 t1 WHERE c1 = 101 FOR UPDATE;\n--Testcase 20:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n--Testcase 21:\nSELECT * FROM ft1 t1 WHERE c1 = 102 FOR SHARE;\n-- aggregate\n--Testcase 22:\nSELECT COUNT(*) FROM ft1 t1;\n-- subquery\n--Testcase 23:\nSELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;\n-- subquery+MAX\n--Testcase 24:\nSELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;\n-- used in CTE\n--Testcase 25:\nWITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;\n-- fixed values\n--Testcase 26:\nSELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;\n-- Test forcing the remote server to produce sorted data for a merge join.\n--Testcase 765:\nSET enable_hashjoin TO false;\n--Testcase 766:\nSET enable_nestloop TO false;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 27:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 28:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 29:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 30:\nSELECT t1.c1, t2.\"C 1\" FROM ft2 t1 LEFT JOIN \"S 1\".\"T 1\" t2 ON (t1.c1 = t2.\"C 1\") OFFSET 100 LIMIT 10;\n-- A join between local table and foreign join. ORDER BY clause is added to the\n-- foreign join so that the local table can be joined using merge join strategy.\n--Testcase 31:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 32:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1 left join ft1 t2 join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above, except that the full join prevents any equivalence\n-- classes from being merged. This produces single relation equivalence classes\n-- included in join restrictions.\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 34:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 left join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n-- Test similar to above with all full outer joins\n--Testcase 35:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 36:\nSELECT t1.\"C 1\", t2.c1, t3.c1 FROM \"S 1\".\"T 1\" t1 full join ft1 t2 full join ft2 t3 on (t2.c1 = t3.c1) on (t3.c1 = t1.\"C 1\") OFFSET 100 LIMIT 10;\n--Testcase 767:\nRESET enable_hashjoin;\n--Testcase 768:\nRESET enable_nestloop;\n\n-- Test executing assertion in estimate_path_cost_size() that makes sure that\n-- retrieved_rows for foreign rel re-used to cost pre-sorted foreign paths is\n-- a sensible value even when the rel has tuples=0\n-- CREATE TABLE loct_empty (c1 int NOT NULL, c2 text);\n--Testcase 769:\nCREATE FOREIGN TABLE ft_empty (c1 int NOT NULL, c2 text)\n  SERVER sqlite_svr OPTIONS (table 'loct_empty');\n--Testcase 770:\nINSERT INTO \"S 1\".loct_empty\n  SELECT id, 'AAA' || to_char(id, 'FM000') FROM generate_series(1, 100) id;\n--Testcase 771:\nDELETE FROM \"S 1\".loct_empty;\n-- ANALYZE ft_empty;\n--Testcase 772:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft_empty ORDER BY c1;\n\n-- test restriction on non-system foreign tables.\nSET restrict_nonsystem_relation_kind TO 'foreign-table';\n--Testcase 1029:\nSELECT * from ft1 where c1 < 1; -- ERROR\n--Testcase 1030:\nINSERT INTO ft1 (c1) VALUES (1); -- ERROR\n--Testcase 1031:\nDELETE FROM ft1 WHERE c1 = 1; -- ERROR\nTRUNCATE ft1; -- ERROR\nRESET restrict_nonsystem_relation_kind;\n\n-- ===================================================================\n-- WHERE with remotely-executable conditions\n-- ===================================================================\n--Testcase 37:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr\n--Testcase 39:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NULL;        -- NullTest\n--Testcase 40:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c3 IS NOT NULL;    -- NullTest\n--Testcase 41:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr\n--Testcase 42:\n\n--Testcase 956:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)\n--Testcase 44:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr\n--Testcase 45:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr\n--Testcase 46:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- SubscriptingRef\n--Testcase 47:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\\\bar';  -- check special chars\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote\n-- parameterized remote path for foreign table\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n--Testcase 50:\nSELECT * FROM \"S 1\".\"T 1\" a, ft2 b WHERE a.\"C 1\" = 47 AND b.c1 = a.c2;\n\n-- check both safe and unsafe join conditions\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft2 a, ft2 b\n  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n--Testcase 52:\nSELECT * FROM ft2 a, ft2 b\nWHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);\n-- bug before 9.3.5 due to sloppy handling of remote-estimate parameters\n--Testcase 53:\nSELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));\n--Testcase 54:\nSELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));\n\n-- user-defined operator/function\n--Testcase 494:\nCREATE FUNCTION sqlite_fdw_abs(int) RETURNS int AS $$\nBEGIN\nRETURN abs($1);\nEND\n$$ LANGUAGE plpgsql IMMUTABLE;\n--Testcase 495:\nCREATE OPERATOR === (\n    LEFTARG = int,\n    RIGHTARG = int,\n    PROCEDURE = int4eq,\n    COMMUTATOR = ===\n);\n\n-- built-in operators and functions can be shipped for remote execution\n--Testcase 57:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 58:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);\n--Testcase 59:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 60:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = t1.c2;\n\n-- by default, user-defined ones cannot\n--Testcase 61:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 62:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 63:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 64:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- ORDER BY can be shipped, though\n--Testcase 496:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 497:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- but let's put them in an extension ...\n--Testcase 773:\nALTER EXTENSION sqlite_fdw ADD FUNCTION sqlite_fdw_abs(int);\n--Testcase 774:\nALTER EXTENSION sqlite_fdw ADD OPERATOR === (int, int);\n--ALTER SERVER sqlite_svr2 OPTIONS (ADD extensions 'sqlite_fdw');\n\n-- ... now they can be shipped\n--Testcase 498:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 499:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 = sqlite_fdw_abs(t1.c2);\n--Testcase 500:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 501:\nSELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n\n-- and both ORDER BY and LIMIT can be shipped\n--Testcase 502:\nEXPLAIN (VERBOSE, COSTS OFF)\n  SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n--Testcase 503:\nSELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;\n\n-- Ensure we don't ship FETCH FIRST .. WITH TIES\n--Testcase 1027:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c2 FROM ft1 t1 WHERE t1.c1 > 960 ORDER BY t1.c2 FETCH FIRST 2 ROWS WITH TIES;\n--Testcase 1028:\nSELECT t1.c2 FROM ft1 t1 WHERE t1.c1 > 960 ORDER BY t1.c2 FETCH FIRST 2 ROWS WITH TIES;\n\n-- Test CASE pushdown\n--Testcase 957:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n--Testcase 958:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE WHEN c1 > 990 THEN c1 END < 1000 ORDER BY c1;\n\n-- Nested CASE\n--Testcase 959:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n--Testcase 960:\nSELECT c1,c2,c3 FROM ft2 WHERE CASE CASE WHEN c2 > 0 THEN c2 END WHEN 100 THEN 601 WHEN c2 THEN c2 ELSE 0 END > 600 ORDER BY c1;\n\n-- CASE arg WHEN\n--Testcase 961:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- CASE cannot be pushed down because of unshippable arg clause\n--Testcase 962:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c1 > (CASE random()::integer WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 963:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 964:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 965:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- a regconfig constant referring to this text search configuration\n-- is initially unshippable--Testcase 984:\nCREATE TEXT SEARCH CONFIGURATION public.custom_search\n  (COPY = pg_catalog.english);\n--Testcase 985:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n--Testcase 986:\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n\n-- but if it's in a shippable extension, it can be shipped\nALTER EXTENSION sqlite_fdw ADD TEXT SEARCH CONFIGURATION public.custom_search;\n-- however, that doesn't flush the shippability cache, so do a quick reconnect\n\\c -\n--Testcase 995:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n--Testcase 996:\nSELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1\nWHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;\n\n-- ===================================================================\n-- ORDER BY queries\n-- ===================================================================\n-- we should not push order by clause with volatile expressions or unsafe\n-- collations\n--Testcase 1006:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, random();\n--Testcase 1007:\nEXPLAIN (VERBOSE, COSTS OFF)\n\tSELECT * FROM ft2 ORDER BY ft2.c1, ft2.c3 collate \"C\";\n\n-- Ensure we don't push ORDER BY expressions which are Consts at the UNION\n-- child level to the foreign server.\n--Testcase 1008:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM (\n    SELECT 1 AS type,c1 FROM ft1\n    UNION ALL\n    SELECT 2 AS type,c1 FROM ft2\n) a ORDER BY type,c1;\n\n--Testcase 1009:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM (\n    SELECT 1 AS type,c1 FROM ft1\n    UNION ALL\n    SELECT 2 AS type,c1 FROM ft2\n) a ORDER BY type;\n\n-- ===================================================================\n-- JOIN queries\n-- ===================================================================\n-- Analyze ft4 and ft5 so that we have better statistics. These tables do not\n-- have use_remote_estimate set.\n--ANALYZE ft4;\n--ANALYZE ft5;\n\n-- join two tables\n--Testcase 65:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 66:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join three tables\n--Testcase 67:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 68:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join\n--Testcase 69:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 70:\nSELECT t1.c1, t2.c1 FROM ft4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- left outer join three tables\n--Testcase 71:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 72:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- left outer join + placement of clauses.\n-- clauses within the nullable side are not pulled up, but top level clause on\n-- non-nullable side is pushed into non-nullable side\n--Testcase 73:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n--Testcase 74:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1) WHERE t1.c1 < 10;\n-- clauses within the nullable side are not pulled up, but the top level clause\n-- on nullable side is not pushed down into nullable side\n--Testcase 75:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n--Testcase 76:\nSELECT t1.c1, t1.c2, t2.c1, t2.c2 FROM ft4 t1 LEFT JOIN (SELECT * FROM ft5 WHERE c1 < 10) t2 ON (t1.c1 = t2.c1)\n\t\t\tWHERE (t2.c1 < 10 OR t2.c1 IS NULL) AND t1.c1 < 10;\n-- right outer join\n--Testcase 77:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 78:\nSELECT t1.c1, t2.c1 FROM ft5 t1 RIGHT JOIN ft4 t2 ON (t1.c1 = t2.c1) ORDER BY t2.c1, t1.c1 OFFSET 10 LIMIT 10;\n-- right outer join three tables\n--Testcase 79:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 80:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- full outer join\n--Testcase 81:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n--Testcase 82:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 45 LIMIT 10;\n-- full outer join with restrictions on the joining relations\n-- a. the joining relations are both base relations\n--Testcase 83:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 84:\nSELECT t1.c1, t2.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1;\n--Testcase 85:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n--Testcase 86:\nSELECT 1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t2 ON (TRUE) OFFSET 10 LIMIT 10;\n-- b. one of the joining relations is a base relation and the other is a join\n-- relation\n--Testcase 87:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 88:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM ft4 t2 LEFT JOIN ft5 t3 ON (t2.c1 = t3.c1) WHERE (t2.c1 between 50 and 60)) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- c. test deparsing the remote query as nested subqueries\n--Testcase 89:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n--Testcase 90:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t1 FULL JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (t1.c1 = ss.a) ORDER BY t1.c1, ss.a, ss.b;\n-- d. test deparsing rowmarked relations as subqueries\n--Testcase 91:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n--Testcase 92:\nSELECT t1.c1, ss.a, ss.b FROM (SELECT c1 FROM \"S 1\".\"T 3\" WHERE c1 = 50) t1 INNER JOIN (SELECT t2.c1, t3.c1 FROM (SELECT c1 FROM ft4 WHERE c1 between 50 and 60) t2 FULL JOIN (SELECT c1 FROM ft5 WHERE c1 between 50 and 60) t3 ON (t2.c1 = t3.c1) WHERE t2.c1 IS NULL OR t2.c1 IS NOT NULL) ss(a, b) ON (TRUE) ORDER BY t1.c1, ss.a, ss.b FOR UPDATE OF t1;\n-- full outer join + inner join\n--Testcase 93:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n--Testcase 94:\nSELECT t1.c1, t2.c1, t3.c1 FROM ft4 t1 INNER JOIN ft5 t2 ON (t1.c1 = t2.c1 + 1 and t1.c1 between 50 and 60) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1, t2.c1, t3.c1 LIMIT 10;\n-- full outer join three tables\n--Testcase 95:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 96:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + right outer join\n--Testcase 97:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 98:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n-- right outer join + full outer join\n--Testcase 99:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 100:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + left outer join\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 102:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- left outer join + full outer join\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 104:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) FULL JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n--Testcase 775:\nSET enable_memoize TO off;\n-- right outer join + left outer join\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 106:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 RIGHT JOIN ft2 t2 ON (t1.c1 = t2.c1) LEFT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 776:\nRESET enable_memoize;\n-- left outer join + right outer join\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) OFFSET 10 LIMIT 10;\n--Testcase 108:\nSELECT t1.c1, t2.c2, t3.c3 FROM ft2 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) RIGHT JOIN ft4 t3 ON (t2.c1 = t3.c1) ORDER BY t1.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause, only matched rows\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 110:\nSELECT t1.c1, t2.c1 FROM ft4 t1 FULL JOIN ft5 t2 ON (t1.c1 = t2.c1) WHERE (t1.c1 = t2.c1 OR t1.c1 IS NULL) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n-- full outer join + WHERE clause with shippable extensions set\n--Testcase 504:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--ALTER SERVER sqlite_svr2 OPTIONS (DROP extensions);\n-- full outer join + WHERE clause with shippable extensions not set\n--Testcase 505:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2, t1.c3 FROM ft1 t1 FULL JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE sqlite_fdw_abs(t1.c1) > 0 OFFSET 10 LIMIT 10;\n--Testcase 777:\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- join two tables with FOR UPDATE clause\n-- tests whole-row reference for row marks\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 112:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE OF t1;\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n--Testcase 114:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR UPDATE;\n-- join two tables with FOR SHARE clause\n--Testcase 115:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 116:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE OF t1;\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n--Testcase 118:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10 FOR SHARE;\n-- join in CTE\n--Testcase 119:\nEXPLAIN (VERBOSE, COSTS OFF)\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n--Testcase 120:\nWITH t (c1_1, c1_3, c2_1) AS MATERIALIZED (SELECT t1.c1, t1.c3, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) SELECT c1_1, c2_1 FROM t ORDER BY c1_3, c1_1 OFFSET 100 LIMIT 10;\n-- ctid with whole-row reference\n--Testcase 121:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.ctid, t1, t2, t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- SEMI JOIN\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 123:\nSELECT t1.c1 FROM ft1 t1 WHERE EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c1) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- ANTI JOIN, not pushed down\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 125:\nSELECT t1.c1 FROM ft1 t1 WHERE NOT EXISTS (SELECT 1 FROM ft2 t2 WHERE t1.c1 = t2.c2) ORDER BY t1.c1 OFFSET 100 LIMIT 10;\n-- CROSS JOIN can be pushed down\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 127:\nSELECT t1.c1, t2.c1 FROM ft1 t1 CROSS JOIN ft2 t2 ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- different server, not pushed down. No result expected.\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 129:\nSELECT t1.c1, t2.c1 FROM ft5 t1 JOIN ft6 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe join conditions (c8 has a UDT), not pushed down. Practically a CROSS\n-- JOIN since c8 in both tables has same value.\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n--Testcase 131:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c8 = t2.c8) ORDER BY t1.c1, t2.c1 OFFSET 100 LIMIT 10;\n-- unsafe conditions on one side (c8 has a UDT), not pushed down.\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 133:\nSELECT t1.c1, t2.c1 FROM ft1 t1 LEFT JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = 'foo' ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- join where unsafe to pushdown condition in WHERE clause has a column not\n-- in the SELECT clause. In this test unsafe clause needs to have column\n-- references from both joining sides so that the clause is not pushed down\n-- into one of the joining sides.\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n--Testcase 135:\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) WHERE t1.c8 = t2.c8 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n-- Aggregate after UNION, for testing setrefs\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n--Testcase 137:\nSELECT t1c1, avg(t1c1 + t2c1) FROM (SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) UNION SELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1)) AS t (t1c1, t2c1) GROUP BY t1c1 ORDER BY t1c1 OFFSET 100 LIMIT 10;\n-- join with lateral reference\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n--Testcase 139:\nSELECT t1.\"C 1\" FROM \"S 1\".\"T 1\" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1.\"C 1\" OFFSET 10 LIMIT 10;\n-- join with pseudoconstant quals\n--Testcase 997:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1 AND CURRENT_USER = SESSION_USER) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;\n\n-- non-Var items in targetlist of the nullable rel of a join preventing\n-- push-down in some cases\n-- unable to push {ft1, ft2}\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n--Testcase 141:\nSELECT q.a, ft2.c1 FROM (SELECT 13 FROM ft1 WHERE c1 = 13) q(a) RIGHT JOIN ft2 ON (q.a = ft2.c1) WHERE ft2.c1 BETWEEN 10 AND 15;\n\n-- ok to push {ft1, ft2} but not {ft1, ft2, ft4}\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n--Testcase 143:\nSELECT ft4.c1, q.* FROM ft4 LEFT JOIN (SELECT 13, ft1.c1, ft2.c1 FROM ft1 RIGHT JOIN ft2 ON (ft1.c1 = ft2.c1) WHERE ft1.c1 = 12) q(a, b, c) ON (ft4.c1 = q.b) WHERE ft4.c1 BETWEEN 10 AND 15;\n\n-- join with nullable side with some columns with null values\n--Testcase 144:\nUPDATE ft5 SET c3 = null where c1 % 9 = 0;\n--Testcase 145:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n--Testcase 146:\nSELECT ft5, ft5.c1, ft5.c2, ft5.c3, ft4.c1, ft4.c2 FROM ft5 left join ft4 on ft5.c1 = ft4.c1 WHERE ft4.c1 BETWEEN 10 and 30 ORDER BY ft5.c1, ft4.c1;\n\n-- multi-way join involving multiple merge joins\n-- (this case used to have EPQ-related planning problems)\n--Testcase 506:\nCREATE TABLE local_tbl (c1 int NOT NULL, c2 int NOT NULL, c3 text, CONSTRAINT local_tbl_pkey PRIMARY KEY (c1));\n--Testcase 507:\nINSERT INTO local_tbl SELECT id, id % 10, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\nANALYZE local_tbl;\n--Testcase 778:\nSET enable_nestloop TO false;\n--Testcase 779:\nSET enable_hashjoin TO false;\n--Testcase 147:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 FOR UPDATE;\n--Testcase 148:\nSELECT * FROM ft1, ft2, ft4, ft5, local_tbl WHERE ft1.c1 = ft2.c1 AND ft1.c2 = ft4.c1\n    AND ft1.c2 = ft5.c1 AND ft1.c2 = local_tbl.c1 AND ft1.c1 < 100 AND ft2.c1 < 100 ORDER BY ft1.c1 FOR UPDATE;\n--Testcase 780:\nRESET enable_nestloop;\n--Testcase 781:\nRESET enable_hashjoin;\n\n-- test that add_paths_with_pathkeys_for_rel() arranges for the epq_path to\n-- return columns needed by the parent ForeignScan node\n-- This does not work as SQLite FDW does not support use_remote_estimate\n--Testcase 987:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foobar') FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100)) ss ON (local_tbl.c1 = ss.c1) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0');\n\n--Testcase 988:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND (ft1.c1 - sqlite_fdw_abs(ft2.c2)) = 0)) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;\n-- ALTER SERVER loopback OPTIONS (DROP fdw_startup_cost);\n-- ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n--DROP TABLE local_tbl;\n-- check join pushdown in situations where multiple userids are involved\n-- Although SQLite FDW does not need User and User mapping to connect to\n-- the database file, however, JOIN pushdown is decided by the core code.\n-- If outer and inner relation are foreign tables (or joins) belonging to\n-- the same server and assigned to the same user, join will be pushed down.\n-- Otherwise, join cannot be pushed down.\n-- In addition to an exact match of userid, we allow the case where one side\n-- has zero userid (implying current user) and the other side has explicit\n-- userid that happens to equal the current user; but in that case, pushdown of\n-- the join is only valid for the current user.\n--Testcase 508:\nCREATE ROLE regress_view_owner SUPERUSER;\n--Testcase 509:\n-- CREATE USER MAPPING FOR regress_view_owner SERVER sqlite_svr;\nGRANT SELECT ON ft4 TO regress_view_owner;\nGRANT SELECT ON ft5 TO regress_view_owner;\n\n--Testcase 510:\nCREATE VIEW v4 AS SELECT * FROM ft4;\n--Testcase 511:\nCREATE VIEW v5 AS SELECT * FROM ft5;\n--Testcase 782:\nALTER VIEW v5 OWNER TO regress_view_owner;\n--Testcase 149:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, different view owners\n--Testcase 150:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 783:\nALTER VIEW v4 OWNER TO regress_view_owner;\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n\n--Testcase 152:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN v5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can't be pushed down, view owner not current user\n--Testcase 154:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 784:\nALTER VIEW v4 OWNER TO CURRENT_USER;\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;  -- can be pushed down\n--Testcase 156:\nSELECT t1.c1, t2.c2 FROM v4 t1 LEFT JOIN ft5 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c1, t2.c1 OFFSET 10 LIMIT 10;\n--Testcase 785:\nALTER VIEW v4 OWNER TO regress_view_owner;\n\n-- Comment out these test cases.\n-- sqlite_fdw does not need to getUserMapping in planning phase,\n-- so it is unable to check userid to use when querying the remote table is correctly propagated into foreign rels.\n-- -- ====================================================================\n-- -- Check that userid to use when querying the remote table is correctly\n-- -- propagated into foreign rels present in subqueries under an UNION ALL\n-- -- ====================================================================\n-- CREATE ROLE regress_view_owner_another;\n-- ALTER VIEW v4 OWNER TO regress_view_owner_another;\n-- GRANT SELECT ON ft4 TO regress_view_owner_another;\n-- ALTER FOREIGN TABLE ft4 OPTIONS (ADD use_remote_estimate 'true');\n-- -- The following should query the remote backing table of ft4 as user\n-- -- regress_view_owner_another, the view owner, though it fails as expected\n-- -- due to the lack of a user mapping for that user.\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4;\n-- -- Likewise, but with the query under an UNION ALL\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4);\n-- -- Should not get that error once a user mapping is created\n-- CREATE USER MAPPING FOR regress_view_owner_another SERVER loopback OPTIONS (password_required 'false');\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM v4;\n-- EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM (SELECT * FROM v4 UNION ALL SELECT * FROM v4);\n-- DROP USER MAPPING FOR regress_view_owner_another SERVER loopback;\n-- DROP OWNED BY regress_view_owner_another;\n-- DROP ROLE regress_view_owner_another;\n-- ALTER FOREIGN TABLE ft4 OPTIONS (SET use_remote_estimate 'false');\n\n-- cleanup\n--Testcase 512:\nDROP OWNED BY regress_view_owner;\n--Testcase 513:\nDROP ROLE regress_view_owner;\n\n-- ===================================================================\n-- Aggregate and grouping queries\n-- ===================================================================\n\n-- Simple aggregates\n--Testcase 157:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n--Testcase 158:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2;\n\n--Testcase 514:\nexplain (verbose, costs off)\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n--Testcase 515:\nselect count(c6), sum(c1), avg(c1), min(c2), max(c1), stddev(c2), sum(c1) * (random() <= 1)::int as sum2 from ft1 where c2 < 5 group by c2 order by 1, 2 limit 1;\n\n-- Aggregate is not pushed down as aggregation contains random()\n--Testcase 159:\nexplain (verbose, costs off)\nselect sum(c1 * (random() <= 1)::int) as sum, avg(c1) from ft1;\n\n-- Aggregate over join query\n--Testcase 160:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n--Testcase 161:\nselect count(*), sum(t1.c1), avg(t2.c1) from ft1 t1 inner join ft1 t2 on (t1.c2 = t2.c2) where t1.c2 = 6;\n\n-- Not pushed down due to local conditions present in underneath input rel\n--Testcase 162:\nexplain (verbose, costs off)\nselect sum(t1.c1), count(t2.c1) from ft1 t1 inner join ft2 t2 on (t1.c1 = t2.c1) where ((t1.c1 * t2.c1)/(t1.c1 * t2.c1)) * random() <= 1;\n\n-- GROUP BY clause having expressions\n--Testcase 163:\nexplain (verbose, costs off)\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n--Testcase 164:\nselect c2/2, sum(c2) * (c2/2) from ft1 group by c2/2 order by c2/2;\n\n-- Aggregates in subquery are pushed down.\nset enable_incremental_sort = off;\n--Testcase 165:\nexplain (verbose, costs off)\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\n--Testcase 166:\nselect count(x.a), sum(x.a) from (select c2 a, sum(c1) b from ft1 group by c2, sqrt(c1) order by 1, 2) x;\nreset enable_incremental_sort;\n\n-- Aggregate is still pushed down by taking unshippable expression out\n--Testcase 167:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n--Testcase 168:\nselect c2 * (random() <= 1)::int as sum1, sum(c1) * c2 as sum2 from ft1 group by c2 order by 1, 2;\n\n-- Aggregate with unshippable GROUP BY clause are not pushed\n--Testcase 169:\nexplain (verbose, costs off)\nselect c2 * (random() <= 1)::int as c2 from ft2 group by c2 * (random() <= 1)::int order by 1;\n\n-- GROUP BY clause in various forms, cardinal, alias and constant expression\n--Testcase 516:\nexplain (verbose, costs off)\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n--Testcase 517:\nselect count(c2) w, c2 x, 5 y, 7.0 z from ft1 group by 2, y, 9.0::int order by 2;\n\n-- GROUP BY clause referring to same column multiple times\n-- Also, ORDER BY contains an aggregate function\n--Testcase 170:\n\n--Testcase 966:\nexplain (verbose, costs off)\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n--Testcase 171:\nselect c2, c2 from ft1 where c2 > 6 group by 1, 2 order by sum(c1);\n\n-- Testing HAVING clause shippability\n--Testcase 172:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n--Testcase 173:\nselect c2, sum(c1) from ft2 group by c2 having avg(c1) < 500 and sum(c1) < 49800 order by c2;\n\n-- Unshippable HAVING clause will be evaluated locally, and other qual in HAVING clause is pushed down\n--Testcase 174:\nexplain (verbose, costs off)\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n--Testcase 175:\nselect count(*) from (select c5, count(c1) from ft1 group by c5, sqrt(c2) having (avg(c1) / avg(c1)) * random() <= 1 and avg(c1) < 500) x;\n\n-- Aggregate in HAVING clause is not pushable, and thus aggregation is not pushed down\n--Testcase 176:\nexplain (verbose, costs off)\nselect sum(c1) from ft1 group by c2 having avg(c1 * (random() <= 1)::int) > 100 order by 1;\n\n-- Remote aggregate in combination with a local Param (for the output\n-- of an initplan) can be trouble, per bug #15781\n--Testcase 518:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n--Testcase 519:\nselect exists(select 1 from pg_enum), sum(c1) from ft1;\n\n--Testcase 520:\nexplain (verbose, costs off)\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n--Testcase 521:\nselect exists(select 1 from pg_enum), sum(c1) from ft1 group by 1;\n\n\n-- Testing ORDER BY, DISTINCT, FILTER, Ordered-sets and VARIADIC within aggregates\n\n-- ORDER BY within aggregate, same column used to order\n--Testcase 177:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n--Testcase 178:\nselect array_agg(c1 order by c1) from ft1 where c1 < 100 group by c2 order by 1;\n\n-- ORDER BY within aggregate, different column used to order also using DESC\n--Testcase 179:\nexplain (verbose, costs off)\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n--Testcase 180:\nselect array_agg(c5 order by c1 desc) from ft2 where c2 = 6 and c1 < 50;\n-- DISTINCT within aggregate\n--Testcase 181:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 182:\nselect array_agg(distinct (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- DISTINCT combined with ORDER BY within aggregate\n--Testcase 183:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 184:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n--Testcase 185:\nexplain (verbose, costs off)\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n--Testcase 186:\nselect array_agg(distinct (t1.c1)%5 order by (t1.c1)%5 desc nulls last) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) where t1.c1 < 20 or (t1.c1 is null and t2.c1 < 5) group by (t2.c1)%3 order by 1;\n\n-- FILTER within aggregate\n--Testcase 187:\nexplain (verbose, costs off)\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n--Testcase 188:\nselect sum(c1) filter (where c1 < 100 and c2 > 5) from ft1 group by c2 order by 1 nulls last;\n\n-- DISTINCT, ORDER BY and FILTER within aggregate\n--Testcase 189:\nexplain (verbose, costs off)\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n--Testcase 190:\nselect sum(c1%3), sum(distinct c1%3 order by c1%3) filter (where c1%3 < 2), c2 from ft1 where c2 = 6 group by c2;\n\n-- Outer query is aggregation query\n--Testcase 191:\nexplain (verbose, costs off)\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 192:\nselect distinct (select count(*) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n-- Inner query is aggregation query\n--Testcase 193:\nexplain (verbose, costs off)\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n--Testcase 194:\nselect distinct (select count(t1.c1) filter (where t2.c2 = 6 and t2.c1 < 10) from ft1 t1 where t1.c1 = 6) from ft2 t2 where t2.c2 % 6 = 0 order by 1;\n\n-- Aggregate not pushed down as FILTER condition is not pushable\n--Testcase 195:\nexplain (verbose, costs off)\nselect sum(c1) filter (where (c1 / c1) * random() <= 1) from ft1 group by c2 order by 1;\n--Testcase 196:\nexplain (verbose, costs off)\nselect sum(c2) filter (where c2 in (select c2 from ft1 where c2 < 5)) from ft1;\n\n-- Ordered-sets within aggregate\n--Testcase 197:\nexplain (verbose, costs off)\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n--Testcase 198:\nselect c2, rank('10'::varchar) within group (order by c6), percentile_cont(c2/10::numeric) within group (order by c1) from ft1 where c2 < 10 group by c2 having percentile_cont(c2/10::numeric) within group (order by c1) < 500 order by c2;\n\n-- Using multiple arguments within aggregates\n--Testcase 199:\nexplain (verbose, costs off)\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n--Testcase 200:\nselect c1, rank(c1, c2) within group (order by c1, c2) from ft1 group by c1, c2 having c1 = 6 order by 1;\n\n-- User defined function for user defined aggregate, VARIADIC\n--Testcase 522:\ncreate function least_accum(anyelement, variadic anyarray)\nreturns anyelement language sql as\n  'select least($1, min($2[i])) from generate_subscripts($2,1) g(i)';\n--Testcase 523:\ncreate aggregate least_agg(variadic items anyarray) (\n  stype = anyelement, sfunc = least_accum\n);\n\n-- Disable hash aggregation for plan stability.\n--Testcase 786:\nset enable_hashagg to false;\n\n-- Not pushed down due to user defined aggregate\n--Testcase 524:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Add function and aggregate into extension\n--alter extension postgres_fdw add function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw add aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Now aggregate will be pushed.  Aggregate will display VARIADIC argument.\n--Testcase 525:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n--Testcase 526:\nselect c2, least_agg(c1) from ft1 where c2 < 100 group by c2 order by c2;\n\n-- Remove function and aggregate from extension\n--alter extension postgres_fdw drop function least_accum(anyelement, variadic anyarray);\n--alter extension postgres_fdw drop aggregate least_agg(variadic items anyarray);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- Not pushed down as we have dropped objects from extension.\n--Testcase 527:\nexplain (verbose, costs off)\nselect c2, least_agg(c1) from ft1 group by c2 order by c2;\n\n-- Cleanup\n--Testcase 787:\nreset enable_hashagg;\n--Testcase 528:\ndrop aggregate least_agg(variadic items anyarray);\n--Testcase 529:\ndrop function least_accum(anyelement, variadic anyarray);\n\n\n-- Testing USING OPERATOR() in ORDER BY within aggregate.\n-- For this, we need user defined operators along with operator family and\n-- operator class.  Create those and then add them in extension.  Note that\n-- user defined objects are considered unshippable unless they are part of\n-- the extension.\n--Testcase 530:\ncreate operator public.<^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4eq\n);\n\n--Testcase 531:\ncreate operator public.=^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4lt\n);\n\n--Testcase 532:\ncreate operator public.>^ (\n leftarg = int4,\n rightarg = int4,\n procedure = int4gt\n);\n\n--Testcase 533:\ncreate operator family my_op_family using btree;\n\n--Testcase 534:\ncreate function my_op_cmp(a int, b int) returns int as\n  $$begin return btint4cmp(a, b); end $$ language plpgsql;\n\n--Testcase 535:\ncreate operator class my_op_class for type int using btree family my_op_family as\n operator 1 public.<^,\n operator 3 public.=^,\n operator 5 public.>^,\n function 1 my_op_cmp(int, int);\n\n-- This will not be pushed as user defined sort operator is not part of the\n-- extension yet.\n--Testcase 536:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- This should not be pushed either.\n--Testcase 967:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Update local stats on ft2\n--ANALYZE ft2;\n\n-- Add into extension\n--Testcase 788:\nalter extension sqlite_fdw add operator class my_op_class using btree;\n--Testcase 789:\nalter extension sqlite_fdw add function my_op_cmp(a int, b int);\n--Testcase 790:\nalter extension sqlite_fdw add operator family my_op_family using btree;\n--Testcase 791:\nalter extension sqlite_fdw add operator public.<^(int, int);\n--Testcase 792:\nalter extension sqlite_fdw add operator public.=^(int, int);\n--Testcase 793:\nalter extension sqlite_fdw add operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n--alter server loopback options (add fdw_tuple_cost '0.5');\n-- Now this will be pushed as sort operator is part of the extension.\n--Testcase 537:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--Testcase 538:\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n--alter server loopback options (drop fdw_tuple_cost);\n-- This should be pushed too.\n-- Sqlite not support pushdown user defined operators \n--Testcase 968:\nexplain (verbose, costs off)\nselect * from ft2 order by c1 using operator(public.<^);\n\n-- Remove from extension\n--Testcase 794:\nalter extension sqlite_fdw drop operator class my_op_class using btree;\n--Testcase 795:\nalter extension sqlite_fdw drop function my_op_cmp(a int, b int);\n--Testcase 796:\nalter extension sqlite_fdw drop operator family my_op_family using btree;\n--Testcase 797:\nalter extension sqlite_fdw drop operator public.<^(int, int);\n--Testcase 798:\nalter extension sqlite_fdw drop operator public.=^(int, int);\n--Testcase 799:\nalter extension sqlite_fdw drop operator public.>^(int, int);\n--alter server loopback options (set extensions 'postgres_fdw');\n\n-- This will not be pushed as sort operator is now removed from the extension.\n--Testcase 539:\nexplain (verbose, costs off)\nselect array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 and c1 < 100 group by c2;\n\n-- Cleanup\n--Testcase 540:\ndrop operator class my_op_class using btree;\n--Testcase 541:\ndrop function my_op_cmp(a int, b int);\n--Testcase 542:\ndrop operator family my_op_family using btree;\n--Testcase 543:\ndrop operator public.>^(int, int);\n--Testcase 544:\ndrop operator public.=^(int, int);\n--Testcase 545:\ndrop operator public.<^(int, int);\n\n-- Input relation to aggregate push down hook is not safe to pushdown and thus\n-- the aggregate cannot be pushed down to foreign server.\n--Testcase 201:\nexplain (verbose, costs off)\nselect count(t1.c3) from ft2 t1 left join ft2 t2 on (t1.c1 = random() * t2.c2);\n\n-- Subquery in FROM clause having aggregate\n--Testcase 202:\nexplain (verbose, costs off)\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n--Testcase 203:\nselect count(*), x.b from ft1, (select c2 a, sum(c1) b from ft1 group by c2) x where ft1.c2 = x.a group by x.b order by 1, 2;\n\n-- FULL join with IS NULL check in HAVING\n--Testcase 204:\nexplain (verbose, costs off)\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n--Testcase 205:\nselect avg(t1.c1), sum(t2.c1) from ft4 t1 full join ft5 t2 on (t1.c1 = t2.c1) group by t2.c1 having (avg(t1.c1) is null and sum(t2.c1) < 10) or sum(t2.c1) is null order by 1 nulls last, 2;\n\n-- Aggregate over FULL join needing to deparse the joining relations as\n-- subqueries.\n--Testcase 206:\nexplain (verbose, costs off)\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n--Testcase 207:\nselect count(*), sum(t1.c1), avg(t2.c1) from (select c1 from ft4 where c1 between 50 and 60) t1 full join (select c1 from ft5 where c1 between 50 and 60) t2 on (t1.c1 = t2.c1);\n\n-- ORDER BY expression is part of the target list but not pushed down to\n-- foreign server.\n--Testcase 208:\nexplain (verbose, costs off)\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n--Testcase 209:\nselect sum(c2) * (random() <= 1)::int as sum from ft1 order by 1;\n\n-- LATERAL join, with parameterization\n--Testcase 800:\nset enable_hashagg to false;\n--Testcase 210:\nexplain (verbose, costs off)\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 211:\nselect c2, sum from \"S 1\".\"T 1\" t1, lateral (select sum(t2.c1 + t1.\"C 1\") sum from ft2 t2 group by t2.c1) qry where t1.c2 * 2 = qry.sum and t1.c2 < 3 and t1.\"C 1\" < 100 order by 1;\n--Testcase 801:\nreset enable_hashagg;\n\n-- bug #15613: bad plan for foreign table scan with lateral reference\n--Testcase 546:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n--Testcase 547:\nSELECT ref_0.c2, subq_1.*\nFROM\n    \"S 1\".\"T 1\" AS ref_0,\n    LATERAL (\n        SELECT ref_0.\"C 1\" c1, subq_0.*\n        FROM (SELECT ref_0.c2, ref_1.c3\n              FROM ft1 AS ref_1) AS subq_0\n             RIGHT JOIN ft2 AS ref_3 ON (subq_0.c3 = ref_3.c3)\n    ) AS subq_1\nWHERE ref_0.\"C 1\" < 10 AND subq_1.c3 = '00001'\nORDER BY ref_0.\"C 1\";\n\n-- Check with placeHolderVars\n--Testcase 212:\nexplain (verbose, costs off)\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n--Testcase 213:\nselect sum(q.a), count(q.b) from ft4 left join (select 13, avg(ft1.c1), sum(ft2.c1) from ft1 right join ft2 on (ft1.c1 = ft2.c1)) q(a, b, c) on (ft4.c1 <= q.b);\n\n\n-- Not supported cases\n-- Grouping sets\n--Testcase 214:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 215:\nselect c2, sum(c1) from ft1 where c2 < 3 group by rollup(c2) order by 1 nulls last;\n--Testcase 216:\nexplain (verbose, costs off)\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 217:\nselect c2, sum(c1) from ft1 where c2 < 3 group by cube(c2) order by 1 nulls last;\n--Testcase 218:\nexplain (verbose, costs off)\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 219:\nselect c2, c6, sum(c1) from ft1 where c2 < 3 group by grouping sets(c2, c6) order by 1 nulls last, 2 nulls last;\n--Testcase 220:\nexplain (verbose, costs off)\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n--Testcase 221:\nselect c2, sum(c1), grouping(c2) from ft1 where c2 < 3 group by c2 order by 1 nulls last;\n\n-- DISTINCT itself is not pushed down, whereas underneath aggregate is pushed\n--Testcase 222:\nexplain (verbose, costs off)\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n--Testcase 223:\nselect distinct sum(c1)/1000 s from ft2 where c2 < 6 group by c2 order by 1;\n\n-- WindowAgg\n--Testcase 224:\nexplain (verbose, costs off)\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 225:\nselect c2, sum(c2), count(c2) over (partition by c2%2) from ft2 where c2 < 10 group by c2 order by 1;\n--Testcase 226:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 227:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 desc) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 228:\nexplain (verbose, costs off)\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n--Testcase 229:\nselect c2, array_agg(c2) over (partition by c2%2 order by c2 range between current row and unbounded following) from ft1 where c2 < 10 group by c2 order by 1;\n\n\n-- ===================================================================\n-- parameterized queries\n-- ===================================================================\n-- simple join\n--Testcase 230:\nPREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st1(1, 2);\n--Testcase 232:\nEXECUTE st1(1, 1);\n--Testcase 233:\nEXECUTE st1(101, 101);\nSET enable_hashjoin TO off;\nSET enable_sort TO off;\n-- subquery using stable function (can't be sent to remote)\n--Testcase 234:\nPREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 235:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st2(10, 20);\n--Testcase 236:\nEXECUTE st2(10, 20);\n--Testcase 237:\nEXECUTE st2(101, 121);\nRESET enable_hashjoin;\nRESET enable_sort;\n-- subquery using immutable function (can be sent to remote)\n--Testcase 238:\nPREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;\n--Testcase 239:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st3(10, 20);\n--Testcase 240:\nEXECUTE st3(10, 20);\n--Testcase 241:\nEXECUTE st3(20, 30);\n-- custom plan should be chosen initially\n--Testcase 242:\nPREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;\n--Testcase 243:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 244:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 245:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 246:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n--Testcase 247:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- once we try it enough times, should switch to generic plan\n--Testcase 248:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st4(1);\n-- value of $1 should not be sent to remote\n--Testcase 249:\nPREPARE st5(text,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 254:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 255:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st5('foo', 1);\n--Testcase 256:\nEXECUTE st5('foo', 1);\n\n-- altering FDW options requires replanning\n--Testcase 257:\nPREPARE st6 AS SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;\n--Testcase 258:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 259:\nPREPARE st7 AS INSERT INTO ft1 (c1,c2,c3) VALUES (1001,101,'foo');\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 548:\nINSERT INTO \"S 1\".\"T 0\" SELECT * FROM \"S 1\".\"T 1\";\n--Testcase 802:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 0');\n--Testcase 261:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st6;\n--Testcase 262:\nEXECUTE st6;\n--Testcase 263:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st7;\n--Testcase 803:\nALTER FOREIGN TABLE ft1 OPTIONS (SET table 'T 1');\n\n--Testcase 549:\nPREPARE st8 AS SELECT count(c3) FROM ft1 t1 WHERE t1.c1 === t1.c2;\n--Testcase 550:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 551:\nEXPLAIN (VERBOSE, COSTS OFF) EXECUTE st8;\n--Testcase 552:\nEXECUTE st8;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n-- cleanup\nDEALLOCATE st1;\nDEALLOCATE st2;\nDEALLOCATE st3;\nDEALLOCATE st4;\nDEALLOCATE st5;\nDEALLOCATE st6;\nDEALLOCATE st7;\nDEALLOCATE st8;\n\n-- System columns, except ctid and oid, should not be sent to remote\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'pg_class'::regclass LIMIT 1;\n--Testcase 265:\nSELECT * FROM ft1 t1 WHERE t1.tableoid = 'ft1'::regclass LIMIT 1;\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 267:\nSELECT tableoid::regclass, * FROM ft1 t1 LIMIT 1;\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 553:\nSELECT * FROM ft1 t1 WHERE t1.ctid = '(0,2)';\n--Testcase 554:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n--Testcase 271:\nSELECT ctid, * FROM ft1 t1 LIMIT 1;\n\n-- ===================================================================\n-- used in PL/pgSQL function\n-- ===================================================================\n--Testcase 555:\nCREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$\nDECLARE\n\tv_c1 int;\nBEGIN\n--Testcase 556:\n    SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;\n    PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;\n    RETURN v_c1;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 272:\nSELECT f_test(100);\n--Testcase 557:\nDROP FUNCTION f_test(int);\n\n-- ===================================================================\n-- REINDEX\n-- ===================================================================\n-- remote table is not created here\n--Testcase 804:\nCREATE FOREIGN TABLE reindex_foreign (c1 int, c2 int)\n  SERVER sqlite_svr2 OPTIONS (table 'reindex_local');\nREINDEX TABLE reindex_foreign; -- error\nREINDEX TABLE CONCURRENTLY reindex_foreign; -- error\n--Testcase 805:\nDROP FOREIGN TABLE reindex_foreign;\n-- partitions and foreign tables\n--Testcase 806:\nCREATE TABLE reind_fdw_parent (c1 int) PARTITION BY RANGE (c1);\n--Testcase 807:\nCREATE TABLE reind_fdw_0_10 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (0) TO (10);\n--Testcase 808:\nCREATE FOREIGN TABLE reind_fdw_10_20 PARTITION OF reind_fdw_parent\n  FOR VALUES FROM (10) TO (20)\n  SERVER sqlite_svr OPTIONS (table 'reind_local_10_20');\nREINDEX TABLE reind_fdw_parent; -- ok\nREINDEX TABLE CONCURRENTLY reind_fdw_parent; -- ok\n--Testcase 809:\nDROP TABLE reind_fdw_parent;\n\n-- ===================================================================\n-- conversion error\n-- ===================================================================\n--Testcase 810:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;\n--Testcase 273:\nSELECT * FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8) WHERE x1 = 1;\n--Testcase 274:\nSELECT  ftx.x1,  ft2.c2, ftx.x8 FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 275:\nSELECT  ftx.x1,  ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1;\n--Testcase 276:\nSELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8;\n-- ANALYZE ft1; -- ERROR\n\n-- ===================================================================\n-- local type can be different from remote type in some cases,\n-- in particular if similarly-named operators do equivalent things\n-- ===================================================================\n--Testcase 811:\nALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE text;\n--Testcase 969:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 970:\nSELECT * FROM ft1 WHERE c8 = 'foo' LIMIT 1;\n--Testcase 971:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n--Testcase 972:\nSELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1;\n-- we declared c8 to be text locally, but it's still the same type on\n-- the remote which will balk if we try to do anything incompatible\n-- with that remote type\n-- Can not create user define type in SqliteDB.\n-- Type c8 of foreign table ft1 and remote table T1 are \n-- match. These case below not error with sqlite_fdw. \n-- with that remote type\n--Testcase 973:\nSELECT * FROM ft1 WHERE c8 LIKE 'foo' LIMIT 1; -- ERROR\n--Testcase 974:\nSELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed down\n\n-- ===================================================================\n-- subtransaction\n--  + local/remote error doesn't break cursor\n-- ===================================================================\nBEGIN;\nDECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;\n--Testcase 277:\nFETCH c;\nSAVEPOINT s;\nERROR OUT;          -- ERROR\nROLLBACK TO s;\n--Testcase 278:\nFETCH c;\nSAVEPOINT s;\n--Testcase 279:\nSELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR\nROLLBACK TO s;\n--Testcase 280:\nFETCH c;\n--Testcase 281:\nSELECT * FROM ft1 ORDER BY c1 LIMIT 1;\nCOMMIT;\n\n-- ===================================================================\n-- test handling of collations\n-- ===================================================================\n--Testcase 558:\ncreate foreign table ft3 (f1 text collate \"C\", f2 text, f3 varchar(10)) server sqlite_svr;\n\n-- can be sent to remote\n--Testcase 559:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo';\n--Testcase 560:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"C\" = 'foo';\n--Testcase 561:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo';\n--Testcase 562:\nexplain (verbose, costs off) select * from ft3 where f3 = 'foo';\n--Testcase 563:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 and l.f1 = 'foo';\n-- can't be sent to remote\n--Testcase 564:\nexplain (verbose, costs off) select * from ft3 where f1 COLLATE \"POSIX\" = 'foo';\n--Testcase 565:\nexplain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE \"C\";\n--Testcase 566:\nexplain (verbose, costs off) select * from ft3 where f2 COLLATE \"C\" = 'foo';\n--Testcase 567:\nexplain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE \"C\";\n--Testcase 568:\nexplain (verbose, costs off) select * from ft3 f, loct3 l\n  where f.f3 = l.f3 COLLATE \"POSIX\" and l.f1 = 'foo';\n\n-- ===================================================================\n-- test SEMI-JOIN pushdown\n-- ===================================================================\n--Testcase 1012:\nEXPLAIN (verbose, costs off)\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN ft4 ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  AND EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)\n  ORDER BY ft2.c1;\n--Testcase 1013:\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN ft4 ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  AND EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)\n  ORDER BY ft2.c1;\n\n-- The same query, different join order\n--Testcase 1014:\nEXPLAIN (verbose, costs off)\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1;\n--Testcase 1015:\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1;\n\n-- Left join\n--Testcase 1016:\nEXPLAIN (verbose, costs off)\nSELECT ft2.*, ft4.* FROM ft2 LEFT JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n--Testcase 1017:\nSELECT ft2.*, ft4.* FROM ft2 LEFT JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n\n-- Several semi-joins per upper level join\n--Testcase 1018:\nEXPLAIN (verbose, costs off)\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  INNER JOIN (SELECT * FROM ft5 WHERE\n  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c1 = ft5.c1)) ft5\n  ON ft2.c2 <= ft5.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n--Testcase 1019:\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n  (SELECT * FROM ft4 WHERE\n  EXISTS (SELECT 1 FROM ft5 WHERE ft4.c1 = ft5.c1)) ft4\n  ON ft2.c2 = ft4.c1\n  INNER JOIN (SELECT * FROM ft5 WHERE\n  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c1 = ft5.c1)) ft5\n  ON ft2.c2 <= ft5.c1\n  WHERE ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n\n-- Semi-join below Semi-join\n--Testcase 1020:\nEXPLAIN (verbose, costs off)\nSELECT ft2.* FROM ft2 WHERE\n  c1 = ANY (\n\tSELECT c1 FROM ft2 WHERE\n\t  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2))\n  AND ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n--Testcase 1021:\nSELECT ft2.* FROM ft2 WHERE\n  c1 = ANY (\n\tSELECT c1 FROM ft2 WHERE\n\t  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2))\n  AND ft2.c1 > 900\n  ORDER BY ft2.c1 LIMIT 10;\n\n-- Upper level relations shouldn't refer EXISTS() subqueries\n--Testcase 1022:\nEXPLAIN (verbose, costs off)\nSELECT * FROM ft2 ftupper WHERE\n   EXISTS (\n\tSELECT c1 FROM ft2 WHERE\n\t  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2) AND c1 = ftupper.c1 )\n  AND ftupper.c1 > 900\n  ORDER BY ftupper.c1 LIMIT 10;\n--Testcase 1023:\nSELECT * FROM ft2 ftupper WHERE\n   EXISTS (\n\tSELECT c1 FROM ft2 WHERE\n\t  EXISTS (SELECT 1 FROM ft4 WHERE ft4.c2 = ft2.c2) AND c1 = ftupper.c1 )\n  AND ftupper.c1 > 900\n  ORDER BY ftupper.c1 LIMIT 10;\n\n-- EXISTS should be propagated to the highest upper inner join\n--Testcase 1024:\nEXPLAIN (verbose, costs off)\n\tSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n\t(SELECT * FROM ft4 WHERE EXISTS (\n\t\tSELECT 1 FROM ft2 WHERE ft2.c2 = ft4.c2)) ft4\n\tON ft2.c2 = ft4.c1\n\tINNER JOIN\n\t(SELECT * FROM ft2 WHERE EXISTS (\n\t\tSELECT 1 FROM ft4 WHERE ft2.c2 = ft4.c2)) ft21\n\tON ft2.c2 = ft21.c2\n\tWHERE ft2.c1 > 900\n\tORDER BY ft2.c1 LIMIT 10;\n--Testcase 1025:\nSELECT ft2.*, ft4.* FROM ft2 INNER JOIN\n\t(SELECT * FROM ft4 WHERE EXISTS (\n\t\tSELECT 1 FROM ft2 WHERE ft2.c2 = ft4.c2)) ft4\n\tON ft2.c2 = ft4.c1\n\tINNER JOIN\n\t(SELECT * FROM ft2 WHERE EXISTS (\n\t\tSELECT 1 FROM ft4 WHERE ft2.c2 = ft4.c2)) ft21\n\tON ft2.c2 = ft21.c2\n\tWHERE ft2.c1 > 900\n\tORDER BY ft2.c1 LIMIT 10;\n\n-- Can't push down semi-join with inner rel vars in targetlist\n--Testcase 1026:\nEXPLAIN (verbose, costs off)\nSELECT ft1.c1 FROM ft1 JOIN ft2 on ft1.c1 = ft2.c1 WHERE\n\tft1.c1 IN (\n\t\tSELECT ft2.c1 FROM ft2 JOIN ft4 ON ft2.c1 = ft4.c1)\n\tORDER BY ft1.c1 LIMIT 5;\n\n-- ===================================================================\n-- test writable foreign table stuff\n-- ===================================================================\n--Testcase 282:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 283:\nINSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;\n--Testcase 284:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc');\n--Testcase 285:\nSELECT * FROM ft2 WHERE c1 >= 1101;\n--Testcase 286:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');\n--Testcase 287:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;              -- can be pushed down\n--Testcase 288:\nUPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;\n--Testcase 289:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;  -- can be pushed down\n--Testcase 290:\nUPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7;\n--Testcase 291:\nSELECT * FROM ft2 WHERE c1 % 10 = 7;\n--Testcase 292:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;                               -- can be pushed down\n--Testcase 293:\nUPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT\n  FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;\n--Testcase 294:\nEXPLAIN (verbose, costs off)\n  DELETE FROM ft2 WHERE c1 % 10 = 5;                               -- can be pushed down\n--Testcase 295:\nSELECT c1, c4 FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 569:\nDELETE FROM ft2 WHERE c1 % 10 = 5;\n--Testcase 297:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;                -- can be pushed down\n--Testcase 298:\nDELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;\n--Testcase 299:\nSELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;\n--Testcase 300:\nEXPLAIN (verbose, costs off)\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 301:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1200,999,'foo');\n--Testcase 302:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;             -- can be pushed down\n--Testcase 303:\nUPDATE ft2 SET c3 = 'bar' WHERE c1 = 1200;\n--Testcase 304:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2 WHERE c1 = 1200;                       -- can be pushed down\n--Testcase 305:\nDELETE FROM ft2 WHERE c1 = 1200;\n\n-- Test UPDATE/DELETE on a three-table join\n--Testcase 306:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id - 1200, to_char(id, 'FM00000') FROM generate_series(1201, 1300) id;\n--Testcase 307:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;       -- can be pushed down\n--Testcase 308:\nUPDATE ft2 SET c3 = 'foo'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c2 = ft4.c1;\n--Testcase 309:\nSELECT ft2, ft2.*, ft4, ft4.*\n  FROM ft2 INNER JOIN ft4 ON (ft2.c1 > 1200 AND ft2.c2 = ft4.c1)\n  INNER JOIN ft5 ON (ft4.c1 = ft5.c1);\n--Testcase 310:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;                          -- can be pushed down\n--Testcase 311:\nSELECT 100 FROM ft2, ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n\n--Testcase 570:\nDELETE FROM ft2\n  USING ft4 LEFT JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 1200 AND ft2.c1 % 10 = 0 AND ft2.c2 = ft4.c1;\n--Testcase 312:\nDELETE FROM ft2 WHERE ft2.c1 > 1200;\n\n-- Test UPDATE with a MULTIEXPR sub-select\n-- (maybe someday this'll be remotely executable, but not today)\n--Testcase 571:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n--Testcase 572:\nUPDATE ft2 AS target SET (c2, c7) = (\n    SELECT c2 * 10, c7\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n--Testcase 573:\nUPDATE ft2 AS target SET (c2) = (\n    SELECT c2 / 10\n        FROM ft2 AS src\n        WHERE target.c1 = src.c1\n) WHERE c1 > 1100;\n\n-- Test UPDATE involving a join that can be pushed down,\n-- but a SET clause that can't be\n--Testcase 812:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n--Testcase 813:\nUPDATE ft2 d SET c2 = CASE WHEN random() >= 0 THEN d.c2 ELSE 0 END\n  FROM ft2 AS t WHERE d.c1 = t.c1 AND d.c1 > 1000;\n\n-- Test UPDATE/DELETE with WHERE or JOIN/ON conditions containing\n-- user-defined operators/functions\n--ALTER SERVER loopback OPTIONS (DROP extensions);\n--Testcase 574:\nINSERT INTO ft2 (c1,c2,c3)\n  SELECT id, id % 10, to_char(id, 'FM00000') FROM generate_series(2001, 2010) id;\n--Testcase 575:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;            -- can't be pushed down\n--Testcase 576:\nUPDATE ft2 SET c3 = 'bar' WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 577:\nSELECT * FROM ft2 WHERE sqlite_fdw_abs(c1) > 2000;\n--Testcase 578:\nEXPLAIN (verbose, costs off)\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;                                                    -- can't be pushed down\n--Testcase 579:\nUPDATE ft2 SET c3 = 'baz'\n  FROM ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n--Testcase 580:\nSELECT ft2.*, ft4.*, ft5.* \n  FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 = ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 === ft4.c1;\n\n--Testcase 581:\nEXPLAIN (verbose, costs off)\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 582:\nSELECT ft2.c1, ft2.c2, ft2.c3 FROM ft2, ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;       -- can't be pushed down\n\n--Testcase 583:\nDELETE FROM ft2\n  USING ft4 INNER JOIN ft5 ON (ft4.c1 === ft5.c1)\n  WHERE ft2.c1 > 2000 AND ft2.c2 = ft4.c1;\n\n--Testcase 584:\nDELETE FROM ft2 WHERE ft2.c1 > 2000;\n--ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');\n\n-- Test that trigger on remote table works as expected\n--Testcase 585:\nCREATE OR REPLACE FUNCTION \"S 1\".F_BRTRIG() RETURNS trigger AS $$\nBEGIN\n    NEW.c3 = NEW.c3 || '_trig_update';\n    RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n--Testcase 586:\nCREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE\n    ON ft2 FOR EACH ROW EXECUTE PROCEDURE \"S 1\".F_BRTRIG();\n\n--Testcase 313:\nINSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff');\n--Testcase 314:\nSELECT * FROM ft2 WHERE c1 = 1208;\n--Testcase 315:\nINSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;');\n--Testcase 316:\nSELECT * FROM ft2 WHERE c1 = 1218;\n--Testcase 317:\nUPDATE ft2 SET c2 = c2 + 600, c3 = c3 WHERE c1 % 10 = 8 AND c1 < 1200;\n--Testcase 318:\nSELECT * FROM ft2 WHERE c1 % 10 = 8 AND c1 < 1200;\n\n-- Test errors thrown on remote side during update\n-- create table in the remote server with check contraint\n--Testcase 738:\nCREATE FOREIGN TABLE ft1_constraint (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_svr OPTIONS (table 't1_constraint');\n--Testcase 747:\nINSERT INTO ft1_constraint SELECT * FROM ft1 ON CONFLICT DO NOTHING;\n-- c2 must be greater than or equal to 0, so this case is ignored.\n--Testcase 754:\nINSERT INTO ft1_constraint(c1, c2) VALUES (2222, -2) ON CONFLICT DO NOTHING; -- ignore, do nothing\n--Testcase 755:\nSELECT c1, c2 FROM ft1_constraint WHERE c1 = 2222 or c2 = -2; -- empty result\n--Testcase 748:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 749:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n--Testcase 319:\nINSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key\n--Testcase 320:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO NOTHING; -- unsupported\n--Testcase 321:\nINSERT INTO ft1(c1, c2) VALUES(11, 12) ON CONFLICT (c1, c2) DO UPDATE SET c3 = 'ffg'; -- unsupported\n--Testcase 743:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 744:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 750:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_constraint;\n--Testcase 751:\nALTER FOREIGN TABLE ft1_org RENAME TO ft1;\n\n-- Test savepoint/rollback behavior\n--Testcase 322:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 323:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\nbegin;\n--Testcase 324:\nupdate ft2 set c2 = 42 where c2 = 0;\n--Testcase 325:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s1;\n--Testcase 326:\nupdate ft2 set c2 = 44 where c2 = 4;\n--Testcase 327:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s1;\n--Testcase 328:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s2;\n--Testcase 329:\nupdate ft2 set c2 = 46 where c2 = 6;\n--Testcase 330:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrollback to savepoint s2;\n--Testcase 331:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s2;\n--Testcase 332:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nsavepoint s3;\n--Testcase 333:\n--skip, does not support CHECK\n--update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side\nrollback to savepoint s3;\n--Testcase 334:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\nrelease savepoint s3;\n--Testcase 335:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n-- none of the above is committed yet remotely\n--Testcase 336:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\ncommit;\n--Testcase 337:\nselect c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;\n--Testcase 338:\nselect c2, count(*) from \"S 1\".\"T 1\" where c2 < 500 group by 1 order by 1;\n\n--VACUUM ANALYZE \"S 1\".\"T 1\";\n\n-- Above DMLs add data with c6 as NULL in ft1, so test ORDER BY NULLS LAST and NULLs\n-- FIRST behavior here.\n-- ORDER BY DESC NULLS LAST options\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795 LIMIT 10;\n--Testcase 340:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS LAST, c1 OFFSET 795  LIMIT 10;\n-- ORDER BY DESC NULLS FIRST options\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 342:\nSELECT * FROM ft1 ORDER BY c6 DESC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n-- ORDER BY ASC NULLS FIRST options\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n--Testcase 344:\nSELECT * FROM ft1 ORDER BY c6 ASC NULLS FIRST, c1 OFFSET 15 LIMIT 10;\n\n-- Test ReScan code path that recreates the cursor even when no parameters\n-- change (bug #17889)\n--Testcase 1032:\nCREATE FOREIGN TABLE loct1_rescan (c1 int OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'loct1_rescan');\n--Testcase 1033:\nCREATE FOREIGN TABLE loct2_rescan (c1 int OPTIONS (key 'true'), c2 text) SERVER sqlite_svr OPTIONS (table 'loct2_rescan');\n--Testcase 1034:\nINSERT INTO loct1_rescan VALUES (1001);\n--Testcase 1035:\nINSERT INTO loct1_rescan VALUES (1002);\n--Testcase 1036:\nINSERT INTO loct2_rescan SELECT id, to_char(id, 'FM0000') FROM generate_series(1, 1000) id;\n--Testcase 1037:\nINSERT INTO loct2_rescan VALUES (1001, 'foo');\n--Testcase 1038:\nINSERT INTO loct2_rescan VALUES (1002, 'bar');\n--Testcase 1039:\nCREATE FOREIGN TABLE remt2_rescan (c1 int OPTIONS (key 'true'), c2 text) SERVER sqlite_svr OPTIONS (table 'loct2_rescan');\n-- ANALYZE loct1_rescan;\n-- ANALYZE remt2_rescan;\nSET enable_mergejoin TO false;\nSET enable_hashjoin TO false;\nSET enable_material TO false;\n--Testcase 1040:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE remt2_rescan SET c2 = remt2_rescan.c2 || remt2_rescan.c2 FROM loct1_rescan WHERE loct1_rescan.c1 = remt2_rescan.c1;\n--Testcase 1041:\nUPDATE remt2_rescan SET c2 = remt2_rescan.c2 || remt2_rescan.c2 FROM loct1_rescan WHERE loct1_rescan.c1 = remt2_rescan.c1;\n--Testcase 1042:\nSELECT remt2_rescan.* FROM loct1_rescan, remt2_rescan WHERE loct1_rescan.c1 = remt2_rescan.c1;\nRESET enable_mergejoin;\nRESET enable_hashjoin;\nRESET enable_material;\n--Testcase 1043:\nDROP FOREIGN TABLE loct1_rescan;\n--Testcase 1044:\nDROP FOREIGN TABLE loct2_rescan;\n--Testcase 1045:\nDROP FOREIGN TABLE remt2_rescan;\n\n-- ===================================================================\n-- test check constraints\n-- ===================================================================\n--Testcase 752:\nALTER FOREIGN TABLE ft1 RENAME TO ft1_org;\n--Testcase 753:\nALTER FOREIGN TABLE ft1_constraint RENAME TO ft1;\n-- Consistent check constraints provide consistent results\n--Testcase 814:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2positive CHECK (c2 >= 0);\n--Testcase 587:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 588:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 815:\nSET constraint_exclusion = 'on';\n--Testcase 589:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 590:\nSELECT count(*) FROM ft1 WHERE c2 < 0;\n--Testcase 816:\nRESET constraint_exclusion;\n-- check constraint is enforced on the remote side, not locally\n--Testcase 745:\nINSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive\n--Testcase 746:\nUPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive\n--Testcase 817:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2positive;\n\n-- But inconsistent check constraints provide inconsistent results\n--Testcase 818:\nALTER FOREIGN TABLE ft1 ADD CONSTRAINT ft1_c2negative CHECK (c2 < 0);\n--Testcase 591:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 592:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 819:\nSET constraint_exclusion = 'on';\n--Testcase 593:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 594:\nSELECT count(*) FROM ft1 WHERE c2 >= 0;\n--Testcase 820:\nRESET constraint_exclusion;\n-- local check constraint is not actually enforced\n--Testcase 595:\nINSERT INTO ft1(c1, c2) VALUES(1111, 2);\n--Testcase 596:\nUPDATE ft1 SET c2 = c2 + 1 WHERE c1 = 1;\n--Testcase 821:\nALTER FOREIGN TABLE ft1 DROP CONSTRAINT ft1_c2negative;\n\n-- ===================================================================\n-- test WITH CHECK OPTION constraints\n-- ===================================================================\n--Testcase 597:\nCREATE FUNCTION row_before_insupd_trigfunc() RETURNS trigger AS $$BEGIN NEW.a := NEW.a + 10; RETURN NEW; END$$ LANGUAGE plpgsql;\n\n--Testcase 598:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 599:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n--Testcase 600:\nCREATE VIEW rw_view AS SELECT * FROM foreign_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 601:\n\\d+ rw_view\n\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 602:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 603:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 604:\nINSERT INTO rw_view VALUES (0, 15); -- error\n--Testcase 605:\nSELECT * FROM foreign_tbl;\n\n--Testcase 606:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 607:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 608:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 609:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 610:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 989:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 990:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 991:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 611:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 612:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n\n-- test WCO for partitions\n\n--Testcase 613:\nCREATE FOREIGN TABLE foreign_tbl (a int OPTIONS (key 'true'), b int)\n  SERVER sqlite_svr;\n--Testcase 614:\nCREATE TRIGGER row_before_insupd_trigger BEFORE INSERT OR UPDATE ON foreign_tbl FOR EACH ROW EXECUTE PROCEDURE row_before_insupd_trigfunc();\n\n--Testcase 615:\nCREATE TABLE parent_tbl (a int, b int) PARTITION BY RANGE(a);\n--Testcase 822:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n-- Detach and re-attach once, to stress the concurrent detach case.\n--Testcase 975:\nALTER TABLE parent_tbl DETACH PARTITION foreign_tbl CONCURRENTLY;\n--Testcase 976:\nALTER TABLE parent_tbl ATTACH PARTITION foreign_tbl FOR VALUES FROM (0) TO (100);\n\n--Testcase 616:\nCREATE VIEW rw_view AS SELECT * FROM parent_tbl\n  WHERE a < b WITH CHECK OPTION;\n--Testcase 617:\n\\d+ rw_view\n\n--Testcase 618:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 5);\n--Testcase 619:\nINSERT INTO rw_view VALUES (0, 5); -- should fail\n--Testcase 620:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15);\n--Testcase 621:\nINSERT INTO rw_view VALUES (0, 15); -- ok\n--Testcase 622:\nSELECT * FROM foreign_tbl;\n\n--Testcase 623:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 5;\n--Testcase 624:\nUPDATE rw_view SET b = b + 5; -- should fail\n--Testcase 625:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE rw_view SET b = b + 15;\n--Testcase 626:\nUPDATE rw_view SET b = b + 15; -- ok\n--Testcase 627:\nSELECT * FROM foreign_tbl;\n\n-- We don't allow batch insert when there are any WCO constraints\nALTER SERVER sqlite_svr OPTIONS (ADD batch_size '10');\n--Testcase 992:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO rw_view VALUES (0, 15), (1, 5);\n--Testcase 993:\nINSERT INTO rw_view VALUES (0, 15), (1, 5); -- should fail\n--Testcase 994:\nSELECT * FROM foreign_tbl;\nALTER SERVER sqlite_svr OPTIONS (DROP batch_size);\n\n--Testcase 628:\nDROP TRIGGER row_before_insupd_trigger ON foreign_tbl;\n--Testcase 629:\nDROP FOREIGN TABLE foreign_tbl CASCADE;\n--Testcase 630:\nDROP TABLE parent_tbl CASCADE;\n\n--Testcase 631:\nDROP FUNCTION row_before_insupd_trigfunc;\n\n-- -- Try a more complex permutation of WCO where there are multiple levels of\n-- -- partitioned tables with columns not all in the same order\n-- CREATE TABLE parent_tbl (a int, b text, c numeric) PARTITION BY RANGE(a);\n-- CREATE TABLE sub_parent (c numeric, a int, b text) PARTITION BY RANGE(a);\n-- ALTER TABLE parent_tbl ATTACH PARTITION sub_parent FOR VALUES FROM (1) TO (10);\n-- CREATE TABLE child_local (b text, c numeric, a int);\n-- CREATE FOREIGN TABLE child_foreign (b text, c numeric, a int)\n--   SERVER loopback OPTIONS (table_name 'child_local');\n-- ALTER TABLE sub_parent ATTACH PARTITION child_foreign FOR VALUES FROM (1) TO (10);\n-- CREATE VIEW rw_view AS SELECT * FROM parent_tbl WHERE a < 5 WITH CHECK OPTION;\n\n-- INSERT INTO parent_tbl (a) VALUES(1),(5);\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE rw_view SET b = 'text', c = 123.456;\n-- UPDATE rw_view SET b = 'text', c = 123.456;\n-- SELECT * FROM parent_tbl ORDER BY a;\n\n-- DROP VIEW rw_view;\n-- DROP TABLE child_local;\n-- DROP FOREIGN TABLE child_foreign;\n-- DROP TABLE sub_parent;\n-- DROP TABLE parent_tbl;\n\n\n-- ===================================================================\n-- test serial columns (ie, sequence-based defaults)\n-- ===================================================================\n--Testcase 632:\ncreate foreign table loc1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr;\n--Testcase 633:\ncreate foreign table rem1 (f1 serial, f2 text, id integer options (key 'true'))\n  server sqlite_svr options(table 'loc1');\n--Testcase 352:\nselect pg_catalog.setval('rem1_f1_seq', 10, false);\n--Testcase 353:\ninsert into loc1(f2) values('hi');\n--Testcase 634:\ninsert into rem1(f2) values('hi remote');\n--Testcase 354:\ninsert into loc1(f2) values('bye');\n--Testcase 635:\ninsert into rem1(f2) values('bye remote');\n--Testcase 355:\nselect f1, f2 from loc1;\n--Testcase 636:\nselect f1, f2 from rem1;\n\n-- ===================================================================\n-- test generated columns\n-- ===================================================================\n--Testcase 637:\ncreate foreign table grem1 (\n  a int options (key 'true'),\n  b int generated always as (a * 2) stored)\n  server sqlite_svr options(table 'grem1_post14');\n--Testcase 638:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 823:\ninsert into grem1 (a) values (1), (2);\n--Testcase 639:\nexplain (verbose, costs off)\nupdate grem1 set a = 22 where a = 2;\n--Testcase 824:\nupdate grem1 set a = 22 where a = 2;\n--Testcase 640:\nselect * from grem1;\n--Testcase 825:\ndelete from grem1;\n\n-- -- test copy from\n-- copy grem1 from stdin;\n-- 1\n-- 2\n-- \\.\n-- select * from grem1;\n-- delete from grem1;\n\n-- test batch insert\n--Testcase 826:\nalter server sqlite_svr options (add batch_size '10');\n--Testcase 827:\nexplain (verbose, costs off)\ninsert into grem1 (a) values (1), (2);\n--Testcase 828:\ninsert into grem1 (a) values (1), (2);\n--Testcase 829:\nselect * from grem1;\n--Testcase 830:\ndelete from grem1;\n\n-- -- batch insert with foreign partitions.\n-- -- This schema uses two partitions, one local and one remote with a modulo\n-- -- to loop across all of them in batches.\n-- create table tab_batch_local (id int, data text);\n-- insert into tab_batch_local select i, 'test'|| i from generate_series(1, 45) i;\n-- create table tab_batch_sharded (id int, data text) partition by hash(id);\n-- create table tab_batch_sharded_p0 partition of tab_batch_sharded\n--   for values with (modulus 2, remainder 0);\n-- create table tab_batch_sharded_p1_remote (id int, data text);\n-- create foreign table tab_batch_sharded_p1 partition of tab_batch_sharded\n--   for values with (modulus 2, remainder 1)\n--   server loopback options (table_name 'tab_batch_sharded_p1_remote');\n-- insert into tab_batch_sharded select * from tab_batch_local;\n-- select count(*) from tab_batch_sharded;\n-- drop table tab_batch_local;\n-- drop table tab_batch_sharded;\n-- drop table tab_batch_sharded_p1_remote;\n\n--Testcase 831:\nalter server sqlite_svr options (drop batch_size);\n\n-- ===================================================================\n-- test local triggers\n-- ===================================================================\n\n-- Trigger functions \"borrowed\" from triggers regress test.\n--Testcase 641:\nCREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$\nBEGIN\n\tRAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',\n\t\tTG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;\n\tRETURN NULL;\nEND;$$;\n\n--Testcase 642:\nCREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 1005:\nCREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n\n--Testcase 644:\nCREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger\nLANGUAGE plpgsql AS $$\n\ndeclare\n\toldnew text[];\n\trelid text;\n    argstr text;\nbegin\n\n\trelid := TG_relid::regclass;\n\targstr := '';\n\tfor i in 0 .. TG_nargs - 1 loop\n\t\tif i > 0 then\n\t\t\targstr := argstr || ', ';\n\t\tend if;\n\t\targstr := argstr || TG_argv[i];\n\tend loop;\n\n    RAISE NOTICE '%(%) % % % ON %',\n\t\ttg_name, argstr, TG_when, TG_level, TG_OP, relid;\n    oldnew := '{}'::text[];\n\tif TG_OP != 'INSERT' then\n\t\toldnew := array_append(oldnew, format('OLD: %s', OLD));\n\tend if;\n\n\tif TG_OP != 'DELETE' then\n\t\toldnew := array_append(oldnew, format('NEW: %s', NEW));\n\tend if;\n\n    RAISE NOTICE '%', array_to_string(oldnew, ',');\n\n\tif TG_OP = 'DELETE' then\n\t\treturn OLD;\n\telse\n\t\treturn NEW;\n\tend if;\nend;\n$$;\n\n-- Test basic functionality\n--Testcase 645:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 646:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 356:\ndelete from rem1;\n--Testcase 357:\ninsert into rem1 values(1,'insert');\n--Testcase 358:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 359:\nupdate rem1 set f2 = f2 || f2;\ntruncate rem1;\n\n\n-- cleanup\n--Testcase 647:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 648:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 649:\nDROP TRIGGER trig_stmt_before ON rem1;\n--Testcase 650:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n--Testcase 360:\nDELETE from rem1;\n\n-- Test multiple AFTER ROW triggers on a foreign table\n--Testcase 651:\nCREATE TRIGGER trig_row_after1\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 652:\nCREATE TRIGGER trig_row_after2\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 653:\ninsert into rem1 values(1,'insert');\n--Testcase 654:\nupdate rem1 set f2  = 'update' where f1 = 1;\n--Testcase 655:\nupdate rem1 set f2 = f2 || f2;\n--Testcase 656:\ndelete from rem1;\n\n-- cleanup\n--Testcase 657:\nDROP TRIGGER trig_row_after1 ON rem1;\n--Testcase 658:\nDROP TRIGGER trig_row_after2 ON rem1;\n\n-- Test WHEN conditions\n\n--Testcase 659:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 660:\nCREATE TRIGGER trig_row_after_insupd\nAFTER INSERT OR UPDATE ON rem1\nFOR EACH ROW\nWHEN (NEW.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Insert or update not matching: nothing happens\n--Testcase 363:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 364:\nUPDATE rem1 set f2 = 'test';\n\n-- Insert or update matching: triggers are fired\n--Testcase 365:\nINSERT INTO rem1 values(2, 'update');\n--Testcase 366:\nUPDATE rem1 set f2 = 'update update' where f1 = '2';\n\n--Testcase 661:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 662:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW\nWHEN (OLD.f2 like '%update%')\nEXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n-- Trigger is fired for f1=2, not for f1=1\n--Testcase 369:\nDELETE FROM rem1;\n\n-- cleanup\n--Testcase 663:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 664:\nDROP TRIGGER trig_row_after_insupd ON rem1;\n--Testcase 665:\nDROP TRIGGER trig_row_before_delete ON rem1;\n--Testcase 666:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n\n-- Test various RETURN statements in BEFORE triggers.\n\n--Testcase 667:\nCREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$\n  BEGIN\n    NEW.f2 := NEW.f2 || ' triggered !';\n    RETURN NEW;\n  END\n$$ language plpgsql;\n\n--Testcase 668:\nCREATE TRIGGER trig_row_before_insupd\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n-- The new values should have 'triggered' appended\n--Testcase 370:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 371:\nSELECT f1, f2 from rem1;\n--Testcase 372:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 373:\nSELECT f1, f2 from rem1;\n--Testcase 374:\nUPDATE rem1 set f2 = '';\n--Testcase 375:\nSELECT f1, f2 from rem1;\n--Testcase 376:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 377:\nSELECT f1, f2 from rem1;\n\n--Testcase 669:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f1 = 10;          -- all columns should be transmitted\n--Testcase 670:\nUPDATE rem1 set f1 = 10;\n--Testcase 671:\nSELECT f1, f2 from rem1;\n\n--Testcase 378:\nDELETE FROM rem1;\n\n-- Add a second trigger, to check that the changes are propagated correctly\n-- from trigger to trigger\n--Testcase 672:\nCREATE TRIGGER trig_row_before_insupd2\nBEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 379:\nINSERT INTO rem1 values(1, 'insert');\n--Testcase 380:\nSELECT f1, f2 from rem1;\n--Testcase 381:\nINSERT INTO rem1 values(2, 'insert');\n--Testcase 382:\nSELECT f1, f2 from rem1;\n--Testcase 383:\nUPDATE rem1 set f2 = '';\n--Testcase 384:\nSELECT f1, f2 from rem1;\n--Testcase 385:\nUPDATE rem1 set f2 = 'skidoo';\n--Testcase 386:\nSELECT f1, f2 from rem1;\n\n--Testcase 673:\nDROP TRIGGER trig_row_before_insupd ON rem1;\n--Testcase 674:\nDROP TRIGGER trig_row_before_insupd2 ON rem1;\n\n--Testcase 387:\nDELETE from rem1;\n\n--Testcase 388:\nINSERT INTO rem1 VALUES (1, 'test');\n\n-- Test with a trigger returning NULL\n--Testcase 675:\nCREATE FUNCTION trig_null() RETURNS TRIGGER AS $$\n  BEGIN\n    RETURN NULL;\n  END\n$$ language plpgsql;\n\n--Testcase 676:\nCREATE TRIGGER trig_null\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_null();\n\n-- Nothing should have changed.\n--Testcase 389:\nINSERT INTO rem1 VALUES (2, 'test2');\n\n--Testcase 390:\nSELECT f1, f2 from rem1;\n\n--Testcase 391:\nUPDATE rem1 SET f2 = 'test2';\n\n--Testcase 392:\nSELECT f1, f2 from rem1;\n\n--Testcase 393:\nDELETE from rem1;\n\n--Testcase 394:\nSELECT f1, f2 from rem1;\n\n--Testcase 677:\nDROP TRIGGER trig_null ON rem1;\n--Testcase 395:\nDELETE from rem1;\n\n-- Test a combination of local and remote triggers\n--Testcase 678:\nCREATE TRIGGER trig_row_before\nBEFORE INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 679:\nCREATE TRIGGER trig_row_after\nAFTER INSERT OR UPDATE OR DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 680:\nCREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();\n\n--Testcase 681:\nINSERT INTO rem1(f2) VALUES ('test');\n--Testcase 682:\nUPDATE rem1 SET f2 = 'testo';\n\n-- Test returning a system attribute\n--Testcase 683:\nINSERT INTO rem1(f2) VALUES ('test');\n\n-- cleanup\n--Testcase 684:\nDROP TRIGGER trig_row_before ON rem1;\n--Testcase 685:\nDROP TRIGGER trig_row_after ON rem1;\n--Testcase 686:\nDROP TRIGGER trig_local_before ON rem1;\n\n\n-- Test direct foreign table modification functionality\n--Testcase 832:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 833:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1 WHERE false;     -- currently can't be pushed down\n\n-- Test with statement-level triggers\n--Testcase 687:\nCREATE TRIGGER trig_stmt_before\n\tBEFORE DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 396:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 397:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 688:\nDROP TRIGGER trig_stmt_before ON rem1;\n\n--Testcase 689:\nCREATE TRIGGER trig_stmt_after\n\tAFTER DELETE OR INSERT OR UPDATE ON rem1\n\tFOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();\n--Testcase 398:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 399:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 690:\nDROP TRIGGER trig_stmt_after ON rem1;\n\n-- Test with row-level ON INSERT triggers\n--Testcase 691:\nCREATE TRIGGER trig_row_before_insert\nBEFORE INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 400:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 401:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 692:\nDROP TRIGGER trig_row_before_insert ON rem1;\n\n--Testcase 693:\nCREATE TRIGGER trig_row_after_insert\nAFTER INSERT ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 402:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 403:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 694:\nDROP TRIGGER trig_row_after_insert ON rem1;\n\n-- Test with row-level ON UPDATE triggers\n--Testcase 695:\nCREATE TRIGGER trig_row_before_update\nBEFORE UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 404:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 405:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 696:\nDROP TRIGGER trig_row_before_update ON rem1;\n\n--Testcase 697:\nCREATE TRIGGER trig_row_after_update\nAFTER UPDATE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 406:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can't be pushed down\n--Testcase 407:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can be pushed down\n--Testcase 698:\nDROP TRIGGER trig_row_after_update ON rem1;\n\n-- Test with row-level ON DELETE triggers\n--Testcase 699:\nCREATE TRIGGER trig_row_before_delete\nBEFORE DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 408:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 409:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 700:\nDROP TRIGGER trig_row_before_delete ON rem1;\n\n--Testcase 701:\nCREATE TRIGGER trig_row_after_delete\nAFTER DELETE ON rem1\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 410:\nEXPLAIN (verbose, costs off)\nUPDATE rem1 set f2 = '';          -- can be pushed down\n--Testcase 411:\nEXPLAIN (verbose, costs off)\nDELETE FROM rem1;                 -- can't be pushed down\n--Testcase 702:\nDROP TRIGGER trig_row_after_delete ON rem1;\n\n-- ===================================================================\n-- test inheritance features\n-- ===================================================================\n\n--Testcase 703:\nCREATE TABLE a (aa TEXT);\n--Testcase 834:\nALTER TABLE a SET (autovacuum_enabled = 'false');\n--Testcase 704:\nCREATE FOREIGN TABLE b (aa TEXT OPTIONS (key 'true'), bb TEXT) INHERITS (a)\n  SERVER sqlite_svr OPTIONS (table 'loct');\n\n--Testcase 412:\nINSERT INTO a(aa) VALUES('aaa');\n--Testcase 413:\nINSERT INTO a(aa) VALUES('aaaa');\n--Testcase 414:\nINSERT INTO a(aa) VALUES('aaaaa');\n\n--Testcase 415:\nINSERT INTO b(aa) VALUES('bbb');\n--Testcase 416:\nINSERT INTO b(aa) VALUES('bbbb');\n--Testcase 417:\nINSERT INTO b(aa) VALUES('bbbbb');\n\n--Testcase 418:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 419:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 420:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 421:\nUPDATE a SET aa = 'zzzzzz' WHERE aa LIKE 'aaaa%';\n\n--Testcase 422:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 423:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 424:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 425:\nUPDATE b SET aa = 'new';\n\n--Testcase 426:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 427:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 428:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 429:\nUPDATE a SET aa = 'newtoo';\n\n--Testcase 430:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 431:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 432:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 433:\nDELETE FROM a;\n\n--Testcase 434:\nSELECT tableoid::regclass, * FROM a;\n--Testcase 435:\nSELECT tableoid::regclass, * FROM b;\n--Testcase 436:\nSELECT tableoid::regclass, * FROM ONLY a;\n\n--Testcase 705:\nDROP TABLE a CASCADE;\n\n-- Check SELECT FOR UPDATE/SHARE with an inherited source table\n\n--Testcase 706:\ncreate table foo (f1 int, f2 int);\n--Testcase 707:\ncreate foreign table foo2 (f3 int OPTIONS (key 'true')) inherits (foo)\n  server sqlite_svr options (table 'loct1');\n--Testcase 708:\ncreate table bar (f1 int, f2 int);\n--Testcase 709:\ncreate foreign table bar2 (f3 int OPTIONS (key 'true')) inherits (bar)\n  server sqlite_svr options (table 'loct2');\n\n--Testcase 835:\nalter table foo set (autovacuum_enabled = 'false');\n--Testcase 836:\nalter table bar set (autovacuum_enabled = 'false');\n\n--Testcase 437:\ninsert into foo values(1,1);\n--Testcase 438:\ninsert into foo values(3,3);\n--Testcase 439:\ninsert into foo2 values(2,2,2);\n--Testcase 440:\ninsert into foo2 values(4,4,4);\n--Testcase 441:\ninsert into bar values(1,11);\n--Testcase 442:\ninsert into bar values(2,22);\n--Testcase 443:\ninsert into bar values(6,66);\n--Testcase 444:\ninsert into bar2 values(3,33,33);\n--Testcase 445:\ninsert into bar2 values(4,44,44);\n--Testcase 446:\ninsert into bar2 values(7,77,77);\n\n--Testcase 447:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for update;\n--Testcase 448:\nselect * from bar where f1 in (select f1 from foo) for update;\n\n--Testcase 449:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo) for share;\n--Testcase 450:\nselect * from bar where f1 in (select f1 from foo) for share;\n\n-- Now check SELECT FOR UPDATE/SHARE with an inherited source table,\n-- where the parent is itself a foreign table\n--Testcase 837:\ncreate foreign table foo2child (f3 int) inherits (foo2)\n  server sqlite_svr options (table 'loct4_2');\n\n--Testcase 838:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 839:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 840:\ndrop foreign table foo2child;\n\n-- And with a local child relation of the foreign table parent\n--Testcase 841:\ncreate table foo2child (f3 int) inherits (foo2);\n\n--Testcase 842:\nexplain (verbose, costs off)\nselect * from bar where f1 in (select f1 from foo2) for share;\n--Testcase 843:\nselect * from bar where f1 in (select f1 from foo2) for share;\n\n--Testcase 844:\ndrop table foo2child;\n\n-- Check UPDATE with inherited target and an inherited source table\n--Testcase 451:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n--Testcase 452:\nupdate bar set f2 = f2 + 100 where f1 in (select f1 from foo);\n\n--Testcase 453:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Check UPDATE with inherited target and an appendrel subquery\n--Testcase 454:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n--Testcase 455:\nupdate bar set f2 = f2 + 100\nfrom\n  ( select f1 from foo union all select f1+3 from foo ) ss\nwhere bar.f1 = ss.f1;\n\n--Testcase 456:\nselect tableoid::regclass, * from bar order by 1,2;\n\n-- Test forcing the remote server to produce sorted data for a merge join,\n-- but the foreign table is an inheritance child.\n--truncate table loct1;\n--Testcase 710:\ndelete from foo2;\ntruncate table only foo;\n\\set num_rows_foo 2000\n--Testcase 711:\ninsert into foo2 select generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2), generate_series(0, :num_rows_foo, 2);\n--Testcase 712:\ninsert into foo select generate_series(1, :num_rows_foo, 2), generate_series(1, :num_rows_foo, 2);\n--Testcase 845:\nSET enable_hashjoin to false;\n--Testcase 846:\nSET enable_nestloop to false;\n--alter foreign table foo2 options (use_remote_estimate 'true');\n--create index i_loct1_f1 on loct1(f1);\n--Testcase 713:\ncreate index i_foo_f1 on foo(f1);\nanalyze foo;\n--analyze loct1;\n-- inner join; expressions in the clauses appear in the equivalence class list\n--Testcase 714:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 715:\nselect foo.f1, foo2.f1 from foo join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n-- outer join; expressions in the clauses do not appear in equivalence class\n-- list but no output change as compared to the previous query\n--Testcase 716:\nexplain (verbose, costs off)\n\tselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 717:\nselect foo.f1, foo2.f1 from foo left join foo2 on (foo.f1 = foo2.f1) order by foo.f2 offset 10 limit 10;\n--Testcase 847:\nRESET enable_hashjoin;\n--Testcase 848:\nRESET enable_nestloop;\n\n-- Test that WHERE CURRENT OF is not supported\nbegin;\ndeclare c cursor for select * from bar where f1 = 7;\n--Testcase 457:\nfetch from c;\n--Testcase 458:\nupdate bar set f2 = null where current of c;\nrollback;\n\n--Testcase 459:\nexplain (verbose, costs off)\ndelete from foo where f1 < 5;\n--Testcase 460:\ndelete from foo where f1 < 5;\n--Testcase 461:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 462:\nupdate bar set f2 = f2 + 100;\n--Testcase 463:\nselect * from bar;\n\n-- Test that UPDATE/DELETE with inherited target works with row-level triggers\n--Testcase 718:\nCREATE TRIGGER trig_row_before\nBEFORE UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 719:\nCREATE TRIGGER trig_row_after\nAFTER UPDATE OR DELETE ON bar2\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n\n--Testcase 464:\nexplain (verbose, costs off)\nupdate bar set f2 = f2 + 100;\n--Testcase 465:\nupdate bar set f2 = f2 + 100;\n\n--Testcase 466:\nexplain (verbose, costs off)\ndelete from bar where f2 < 400;\n--Testcase 467:\ndelete from bar where f2 < 400;\n\n-- cleanup\n--Testcase 720:\ndrop table foo cascade;\n--Testcase 721:\ndrop table bar cascade;\n\n-- Test pushing down UPDATE/DELETE joins to the remote server\n--Testcase 722:\ncreate table parent (a int, b text);\n--Testcase 723:\ncreate foreign table remt1 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct3');\n--Testcase 724:\ncreate foreign table remt2 (a int OPTIONS (key 'true'), b text)\n  server sqlite_svr options (table 'loct4');\n--Testcase 849:\nalter foreign table remt1 inherit parent;\n\n--Testcase 468:\ninsert into remt1 values (1, 'foo');\n--Testcase 469:\ninsert into remt1 values (2, 'bar');\n--Testcase 470:\ninsert into remt2 values (1, 'foo');\n--Testcase 471:\ninsert into remt2 values (2, 'bar');\n\n--Testcase 472:\nexplain (verbose, costs off)\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 473:\nupdate parent set b = parent.b || remt2.b from remt2 where parent.a = remt2.a;\n--Testcase 474:\nselect * from parent inner join remt2 on (parent.a = remt2.a);\n--Testcase 475:\nexplain (verbose, costs off)\ndelete from parent using remt2 where parent.a = remt2.a;\n--Testcase 476:\ndelete from parent using remt2 where parent.a = remt2.a;\n\n-- cleanup\n--Testcase 725:\ndrop foreign table remt1;\n--Testcase 726:\ndrop foreign table remt2;\n--Testcase 727:\ndrop table parent;\n\n/* \n-- Skip these tests, sqlite fdw does not support partition table, check constraint, copy from\n-- ===================================================================\n-- test tuple routing for foreign-table partitions\n-- ===================================================================\n\n-- Test insert tuple routing\ncreate table itrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table itrtest attach partition remp1 for values in (1);\nalter table itrtest attach partition remp2 for values in (2);\n\ninsert into itrtest values (1, 'foo');\ninsert into itrtest values (1, 'bar') returning *;\ninsert into itrtest values (2, 'baz');\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\n\nselect tableoid::regclass, * FROM itrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from itrtest;\n\n-- MERGE ought to fail cleanly\nmerge into itrtest using (select 1, 'foo') as source on (true)\n  when matched then do nothing;\n\ncreate unique index loct1_idx on loct1 (a);\n\n-- DO NOTHING without an inference specification is supported\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\ninsert into itrtest values (1, 'foo') on conflict do nothing returning *;\n\n-- But other cases are not supported\ninsert into itrtest values (1, 'bar') on conflict (a) do nothing;\ninsert into itrtest values (1, 'bar') on conflict (a) do update set b = excluded.b;\n\nselect tableoid::regclass, * FROM itrtest;\n\ndelete from itrtest;\n\ndrop index loct1_idx;\n\n-- Test that remote triggers work with insert tuple routing\ncreate function br_insert_trigfunc() returns trigger as $$\nbegin\n\tnew.b := new.b || ' triggered !';\n\treturn new;\nend\n$$ language plpgsql;\ncreate trigger loct1_br_insert_trigger before insert on loct1\n\tfor each row execute procedure br_insert_trigfunc();\ncreate trigger loct2_br_insert_trigger before insert on loct2\n\tfor each row execute procedure br_insert_trigfunc();\n\n-- The new values are concatenated with ' triggered !'\ninsert into itrtest values (1, 'foo') returning *;\ninsert into itrtest values (2, 'qux') returning *;\ninsert into itrtest values (1, 'test1'), (2, 'test2') returning *;\nwith result as (insert into itrtest values (1, 'test1'), (2, 'test2') returning *) select * from result;\n\ndrop trigger loct1_br_insert_trigger on loct1;\ndrop trigger loct2_br_insert_trigger on loct2;\n\ndrop table itrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- Test update tuple routing\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table loct (a int check (a in (1)), b text);\ncreate foreign table remp (a int check (a in (1)), b text) server loopback options (table_name 'loct');\ncreate table locp (a int check (a in (2)), b text);\nalter table utrtest attach partition remp for values in (1);\nalter table utrtest attach partition locp for values in (2);\n\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- It's not allowed to move a row from a partition that is foreign to another\nupdate utrtest set a = 2 where b = 'foo' returning *;\n\n-- But the reverse is allowed\nupdate utrtest set a = 1 where b = 'qux' returning *;\n\nselect tableoid::regclass, * FROM utrtest;\nselect tableoid::regclass, * FROM remp;\nselect tableoid::regclass, * FROM locp;\n\n-- The executor should not let unexercised FDWs shut down\nupdate utrtest set a = 1 where b = 'foo';\n\n-- Test that remote triggers work with update tuple routing\ncreate trigger loct_br_insert_trigger before insert on loct\n\tfor each row execute procedure br_insert_trigfunc();\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition is a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 1 or a = 2 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (2, 'qux');\n\n-- Check case where the foreign partition isn't a subplan target rel\nexplain (verbose, costs off)\nupdate utrtest set a = 1 where a = 2 returning *;\n-- The new values are concatenated with ' triggered !'\nupdate utrtest set a = 1 where a = 2 returning *;\n\ndrop trigger loct_br_insert_trigger on loct;\n\n-- We can move rows to a foreign partition that has been updated already,\n-- but can't move rows to a foreign partition that hasn't been updated yet\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- Test the former case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 returning *;\nupdate utrtest set a = 1 returning *;\n\ndelete from utrtest;\ninsert into utrtest values (1, 'foo');\ninsert into utrtest values (2, 'qux');\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\nupdate utrtest set a = 1 from (values (1), (2)) s(x) where a = s.x returning *;\n\n-- Change the definition of utrtest so that the foreign partition get updated\n-- after the local partition\ndelete from utrtest;\nalter table utrtest detach partition remp;\ndrop foreign table remp;\nalter table loct drop constraint loct_a_check;\nalter table loct add check (a in (3));\ncreate foreign table remp (a int check (a in (3)), b text) server loopback options (table_name 'loct');\nalter table utrtest attach partition remp for values in (3);\ninsert into utrtest values (2, 'qux');\ninsert into utrtest values (3, 'xyzzy');\n\n-- Test the latter case:\n-- with a direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 returning *;\nupdate utrtest set a = 3 returning *; -- ERROR\n\n-- with a non-direct modification plan\nexplain (verbose, costs off)\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *;\nupdate utrtest set a = 3 from (values (2), (3)) s(x) where a = s.x returning *; -- ERROR\n\ndrop table utrtest;\ndrop table loct;\n\n-- Test copy tuple routing\ncreate table ctrtest (a int, b text) partition by list (a);\ncreate table loct1 (a int check (a in (1)), b text);\ncreate foreign table remp1 (a int check (a in (1)), b text) server loopback options (table_name 'loct1');\ncreate table loct2 (a int check (a in (2)), b text);\ncreate foreign table remp2 (b text, a int check (a in (2))) server loopback options (table_name 'loct2');\nalter table ctrtest attach partition remp1 for values in (1);\nalter table ctrtest attach partition remp2 for values in (2);\n\ncopy ctrtest from stdin;\n1\tfoo\n2\tqux\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\n-- Copying into foreign partitions directly should work as well\ncopy remp1 from stdin;\n1\tbar\n\\.\n\nselect tableoid::regclass, * FROM remp1;\n\ndelete from ctrtest;\n\n-- Test copy tuple routing with the batch_size option enabled\nalter server loopback options (add batch_size '2');\n\ncopy ctrtest from stdin;\n1\tfoo\n1\tbar\n2\tbaz\n2\tqux\n1\ttest1\n2\ttest2\n\\.\n\nselect tableoid::regclass, * FROM ctrtest;\nselect tableoid::regclass, * FROM remp1;\nselect tableoid::regclass, * FROM remp2;\n\ndelete from ctrtest;\n\nalter server loopback options (drop batch_size);\n\n\ndrop table ctrtest;\ndrop table loct1;\ndrop table loct2;\n\n-- ===================================================================\n-- test COPY FROM\n-- ===================================================================\n\ncreate table loc2 (f1 int, f2 text);\nalter table loc2 set (autovacuum_enabled = 'false');\ncreate foreign table rem2 (f1 int, f2 text) server loopback options(table_name 'loc2');\n\n-- Test basic functionality\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndelete from rem2;\n\n-- Test check constraints\nalter table loc2 add constraint loc2_f1positive check (f1 >= 0);\nalter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- check constraint is enforced on the remote side, not locally\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\ncopy rem2 from stdin; -- ERROR\n-1\txyzzy\n\\.\nselect * from rem2;\n\nalter foreign table rem2 drop constraint rem2_f1positive;\nalter table loc2 drop constraint loc2_f1positive;\n\ndelete from rem2;\n\n-- Test local triggers\ncreate trigger trig_stmt_before before insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_stmt_after after insert on rem2\n\tfor each statement execute procedure trigger_func();\ncreate trigger trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before on rem2;\ndrop trigger trig_row_after on rem2;\ndrop trigger trig_stmt_before on rem2;\ndrop trigger trig_stmt_after on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_row_before_insert before insert on rem2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on rem2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on rem2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on rem2;\n\ndelete from rem2;\n\n-- Test remote triggers\ncreate trigger trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\n-- The new values are concatenated with ' triggered !'\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_row_before_insert on loc2;\n\ndelete from rem2;\n\ncreate trigger trig_null before insert on loc2\n\tfor each row execute procedure trig_null();\n\n-- Nothing happens\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger trig_null on loc2;\n\ndelete from rem2;\n\n-- Test a combination of local and remote triggers\ncreate trigger rem2_trig_row_before before insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger rem2_trig_row_after after insert on rem2\n\tfor each row execute procedure trigger_data(23,'skidoo');\ncreate trigger loc2_trig_row_before_insert before insert on loc2\n\tfor each row execute procedure trig_row_before_insupdate();\n\ncopy rem2 from stdin;\n1\tfoo\n2\tbar\n\\.\nselect * from rem2;\n\ndrop trigger rem2_trig_row_before on rem2;\ndrop trigger rem2_trig_row_after on rem2;\ndrop trigger loc2_trig_row_before_insert on loc2;\n\ndelete from rem2;\n\n-- test COPY FROM with foreign table created in the same transaction\ncreate table loc3 (f1 int, f2 text);\nbegin;\ncreate foreign table rem3 (f1 int, f2 text)\n\tserver loopback options(table_name 'loc3');\ncopy rem3 from stdin;\n1\tfoo\n2\tbar\n\\.\ncommit;\nselect * from rem3;\ndrop foreign table rem3;\ndrop table loc3;\n*/\n-- Test COPY FROM with the batch_size option enabled\n-- alter server loopback options (add batch_size '2');\n\n-- -- Test basic functionality\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- delete from rem2;\n\n-- -- Test check constraints\n-- alter table loc2 add constraint loc2_f1positive check (f1 >= 0);\n-- alter foreign table rem2 add constraint rem2_f1positive check (f1 >= 0);\n\n-- -- check constraint is enforced on the remote side, not locally\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- copy rem2 from stdin; -- ERROR\n-- -1\txyzzy\n-- \\.\n-- select * from rem2;\n\n-- alter foreign table rem2 drop constraint rem2_f1positive;\n-- alter table loc2 drop constraint loc2_f1positive;\n\n-- delete from rem2;\n\n-- -- Test remote triggers\n-- create trigger trig_row_before_insert before insert on loc2\n-- \tfor each row execute procedure trig_row_before_insupdate();\n\n-- -- The new values are concatenated with ' triggered !'\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- drop trigger trig_row_before_insert on loc2;\n\n-- delete from rem2;\n\n-- create trigger trig_null before insert on loc2\n-- \tfor each row execute procedure trig_null();\n\n-- -- Nothing happens\n-- copy rem2 from stdin;\n-- 1\tfoo\n-- 2\tbar\n-- 3\tbaz\n-- \\.\n-- select * from rem2;\n\n-- drop trigger trig_null on loc2;\n\n-- delete from rem2;\n\n-- -- Check with zero-column foreign table; batch insert will be disabled\n-- alter table loc2 drop column f1;\n-- alter table loc2 drop column f2;\n-- alter table rem2 drop column f1;\n-- alter table rem2 drop column f2;\n-- copy rem2 from stdin;\n\n\n-- select * from rem2;\n\n-- delete from rem2;\n\n-- alter server loopback options (drop batch_size);\n\n-- ===================================================================\n-- test for TRUNCATE\n-- ===================================================================\n--Testcase 850:\nCREATE FOREIGN TABLE tru_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable0');\n--Testcase 851:\nINSERT INTO \"S 1\".tru_rtable0 (SELECT x FROM generate_series(1,10) x);\n\n-- CREATE TABLE tru_ptable (id int) PARTITION BY HASH(id);\n-- CREATE TABLE tru_ptable__p0 PARTITION OF tru_ptable\n--                             FOR VALUES WITH (MODULUS 2, REMAINDER 0);\n-- CREATE TABLE tru_rtable1 (id int primary key);\n-- CREATE FOREIGN TABLE tru_ftable__p1 (id int)\n--        SERVER sqlite_svr OPTIONS (table 'tru_ptable');\n-- INSERT INTO tru_ptable (SELECT x FROM generate_series(11,20) x);\n\n--Testcase 852:\nINSERT INTO \"S 1\".tru_pk_table (SELECT x FROM generate_series(1,10) x);\n--Testcase 853:\nINSERT INTO \"S 1\".tru_fk_table(fkey) (SELECT x % 10 + 1 FROM generate_series(5,25) x);\n--Testcase 854:\nCREATE FOREIGN TABLE tru_pk_ftable (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_pk_table');\n\n--Testcase 855:\nCREATE FOREIGN TABLE tru_ftable_parent (id int)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_parent');\n--Testcase 856:\nCREATE FOREIGN TABLE tru_ftable_child () INHERITS (tru_ftable_parent)\n       SERVER sqlite_svr OPTIONS (table 'tru_rtable_child');\n--Testcase 857:\nINSERT INTO \"S 1\".tru_rtable_parent (SELECT x FROM generate_series(1,8) x);\n--Testcase 858:\nINSERT INTO \"S 1\".tru_rtable_child  (SELECT x FROM generate_series(10, 18) x);\n\n-- normal truncate\n--Testcase 859:\nSELECT sum(id) FROM tru_ftable;        -- 55\nTRUNCATE tru_ftable;\n--Testcase 860:\nSELECT count(*) FROM \"S 1\".tru_rtable0;\t\t-- 0\n--Testcase 861:\nSELECT count(*) FROM tru_ftable;\t\t-- 0\n\n-- 'truncatable' option\n--Testcase 862:\nALTER SERVER sqlite_svr OPTIONS (ADD truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 863:\nALTER FOREIGN TABLE tru_ftable OPTIONS (ADD truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n--Testcase 864:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 865:\nALTER SERVER sqlite_svr OPTIONS (DROP truncatable);\n--Testcase 866:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'false');\nTRUNCATE tru_ftable;\t\t\t-- error\n--Testcase 867:\nALTER FOREIGN TABLE tru_ftable OPTIONS (SET truncatable 'true');\nTRUNCATE tru_ftable;\t\t\t-- accepted\n\n-- -- partitioned table with both local and foreign tables as partitions\n-- SELECT sum(id) FROM tru_ptable;        -- 155\n-- TRUNCATE tru_ptable;\n-- SELECT count(*) FROM tru_ptable;\t\t-- 0\n-- SELECT count(*) FROM tru_ptable__p0;\t-- 0\n-- SELECT count(*) FROM tru_ftable__p1;\t-- 0\n-- SELECT count(*) FROM tru_rtable1;\t\t-- 0\n\n-- 'CASCADE' option\n--Testcase 868:\nSELECT sum(id) FROM tru_pk_ftable;      -- 55\n-- SQLite FDW support TRUNCATE command by executing DELETE statement without WHERE clause.\n-- In order to delete records in parent and child table subsequently,\n-- SQLite FDW executes \"PRAGMA foreign_keys = ON\" before executing DELETE statement.\nTRUNCATE tru_pk_ftable; -- success\nTRUNCATE tru_pk_ftable CASCADE; -- success\n--Testcase 869:\nSELECT count(*) FROM tru_pk_ftable;    -- 0\n--Testcase 870:\nSELECT count(*) FROM \"S 1\".tru_fk_table;\t\t-- also truncated,0\n\n-- truncate two tables at a command\n--Testcase 871:\nINSERT INTO tru_ftable (SELECT x FROM generate_series(1,8) x);\n--Testcase 872:\nINSERT INTO tru_pk_ftable (SELECT x FROM generate_series(3,10) x);\n--Testcase 873:\nSELECT count(*) from tru_ftable; -- 8\n--Testcase 874:\nSELECT count(*) from tru_pk_ftable; -- 8\nTRUNCATE tru_ftable, tru_pk_ftable;\n--Testcase 875:\nSELECT count(*) from tru_ftable; -- 0\n--Testcase 876:\nSELECT count(*) from tru_pk_ftable; -- 0\n\n-- truncate with ONLY clause\n-- Since ONLY is specified, the table tru_ftable_child that inherits\n-- tru_ftable_parent locally is not truncated.\nTRUNCATE ONLY tru_ftable_parent;\n--Testcase 877:\nSELECT sum(id) FROM tru_ftable_parent;  -- 126\nTRUNCATE tru_ftable_parent;\n--Testcase 878:\nSELECT count(*) FROM tru_ftable_parent; -- 0\n\n-- -- in case when remote table has inherited children\n-- CREATE TABLE tru_rtable0_child () INHERITS (tru_rtable0);\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(5,9) x);\n-- INSERT INTO \"S 1\".tru_rtable0_child (SELECT x FROM generate_series(10,14) x);\n-- SELECT sum(id) FROM tru_ftable;   -- 95\n\n-- -- Both parent and child tables in the foreign server are truncated\n-- -- even though ONLY is specified because ONLY has no effect\n-- -- when truncating a foreign table.\n-- TRUNCATE ONLY tru_ftable;\n-- SELECT count(*) FROM tru_ftable;   -- 0\n\n-- INSERT INTO tru_rtable0 (SELECT x FROM generate_series(21,25) x);\n-- INSERT INTO tru_rtable0_child (SELECT x FROM generate_series(26,30) x);\n-- SELECT sum(id) FROM tru_ftable;\t\t-- 255\n-- TRUNCATE tru_ftable;\t\t\t-- truncate both of parent and child\n-- SELECT count(*) FROM tru_ftable;    -- 0\n\n-- cleanup\n--Testcase 879:\nDROP FOREIGN TABLE tru_ftable_parent, tru_ftable_child, tru_pk_ftable,tru_ftable;\n-- DROP TABLE tru_rtable0, tru_rtable1, tru_ptable, tru_ptable__p0, tru_pk_table, tru_fk_table,\n-- tru_rtable_parent,tru_rtable_child, tru_rtable0_child;\n\n-- ===================================================================\n-- test IMPORT FOREIGN SCHEMA\n-- ===================================================================\n\n--Testcase 728:\nCREATE SCHEMA import_dest1;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest1;\n--Testcase 477:\n\\det+ import_dest1.*\n--Testcase 478:\n\\d import_dest1.*\n\n-- Options\n--Testcase 729:\nCREATE SCHEMA import_dest2;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest2\n  OPTIONS (import_default 'true');\n--Testcase 479:\n\\det+ import_dest2.*\n--Testcase 480:\n\\d import_dest2.*\n\n-- Check LIMIT TO and EXCEPT\n--Testcase 730:\nCREATE SCHEMA import_dest3;\nIMPORT FOREIGN SCHEMA public LIMIT TO (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 481:\n\\det+ import_dest3.*\nIMPORT FOREIGN SCHEMA public EXCEPT (\"T 1\", loct6, nonesuch)\n  FROM SERVER sqlite_svr INTO import_dest3;\n--Testcase 482:\n\\det+ import_dest3.*\n\n-- Assorted error cases\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO import_dest3;\nIMPORT FOREIGN SCHEMA public FROM SERVER sqlite_svr INTO notthere;\nIMPORT FOREIGN SCHEMA public FROM SERVER nowhere INTO notthere;\n\n/*\n-- Skip these test, sqlite fdw does not support fetch_size option, partition table\n-- Check case of a type present only on the remote server.\n-- We can fake this by dropping the type locally in our transaction.\nCREATE TYPE \"Colors\" AS ENUM ('red', 'green', 'blue');\nCREATE TABLE import_source.t5 (c1 int, c2 text collate \"C\", \"Col\" \"Colors\");\n\nCREATE SCHEMA import_dest5;\nBEGIN;\nDROP TYPE \"Colors\" CASCADE;\nIMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)\n  FROM SERVER loopback INTO import_dest5;  -- ERROR\n\nROLLBACK;\n\nBEGIN;\n\n\nCREATE SERVER fetch101 FOREIGN DATA WRAPPER postgres_fdw OPTIONS( fetch_size '101' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nALTER SERVER fetch101 OPTIONS( SET fetch_size '202' );\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=101'];\n\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'fetch101'\nAND srvoptions @> array['fetch_size=202'];\n\nCREATE FOREIGN TABLE table30000 ( x int ) SERVER fetch101 OPTIONS ( fetch_size '30000' );\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nALTER FOREIGN TABLE table30000 OPTIONS ( SET fetch_size '60000');\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=30000'];\n\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30000'::regclass\nAND ftoptions @> array['fetch_size=60000'];\n\nROLLBACK;\n\n-- ===================================================================\n-- test partitionwise joins\n-- ===================================================================\nSET enable_partitionwise_join=on;\n\nCREATE TABLE fprt1 (a int, b int, c varchar) PARTITION BY RANGE(a);\nCREATE TABLE fprt1_p1 (LIKE fprt1);\nCREATE TABLE fprt1_p2 (LIKE fprt1);\nALTER TABLE fprt1_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt1_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt1_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 2) i;\nINSERT INTO fprt1_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 2) i;\nCREATE FOREIGN TABLE ftprt1_p1 PARTITION OF fprt1 FOR VALUES FROM (0) TO (250)\n\tSERVER loopback OPTIONS (table_name 'fprt1_p1', use_remote_estimate 'true');\nCREATE FOREIGN TABLE ftprt1_p2 PARTITION OF fprt1 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (TABLE_NAME 'fprt1_p2');\nANALYZE fprt1;\nANALYZE fprt1_p1;\nANALYZE fprt1_p2;\n\nCREATE TABLE fprt2 (a int, b int, c varchar) PARTITION BY RANGE(b);\nCREATE TABLE fprt2_p1 (LIKE fprt2);\nCREATE TABLE fprt2_p2 (LIKE fprt2);\nALTER TABLE fprt2_p1 SET (autovacuum_enabled = 'false');\nALTER TABLE fprt2_p2 SET (autovacuum_enabled = 'false');\nINSERT INTO fprt2_p1 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(0, 249, 3) i;\nINSERT INTO fprt2_p2 SELECT i, i, to_char(i/50, 'FM0000') FROM generate_series(250, 499, 3) i;\nCREATE FOREIGN TABLE ftprt2_p1 (b int, c varchar, a int)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p1', use_remote_estimate 'true');\nALTER TABLE fprt2 ATTACH PARTITION ftprt2_p1 FOR VALUES FROM (0) TO (250);\nCREATE FOREIGN TABLE ftprt2_p2 PARTITION OF fprt2 FOR VALUES FROM (250) TO (500)\n\tSERVER loopback OPTIONS (table_name 'fprt2_p2', use_remote_estimate 'true');\nANALYZE fprt2;\nANALYZE fprt2_p1;\nANALYZE fprt2_p2;\n\n-- inner join three tables\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t3.c FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) INNER JOIN fprt1 t3 ON (t2.b = t3.a) WHERE t1.a % 25 =0 ORDER BY 1,2,3;\n\n-- left outer join + nullable clause\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\nSELECT t1.a,t2.b,t2.c FROM fprt1 t1 LEFT JOIN (SELECT * FROM fprt2 WHERE a < 10) t2 ON (t1.a = t2.b and t1.b = t2.a) WHERE t1.a < 10 ORDER BY 1,2,3;\n\n-- with whole-row reference; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\nSELECT t1.wr, t2.wr FROM (SELECT t1 wr, a FROM fprt1 t1 WHERE t1.a % 25 = 0) t1 FULL JOIN (SELECT t2 wr, b FROM fprt2 t2 WHERE t2.b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY 1,2;\n\n-- join with lateral reference\nEXPLAIN (COSTS OFF)\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\nSELECT t1.a,t1.b FROM fprt1 t1, LATERAL (SELECT t2.a, t2.b FROM fprt2 t2 WHERE t1.a = t2.b AND t1.b = t2.a) q WHERE t1.a%25 = 0 ORDER BY 1,2;\n\n-- with PHVs, partitionwise join selected but no join pushdown\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\nSELECT t1.a, t1.phv, t2.b, t2.phv FROM (SELECT 't1_phv' phv, * FROM fprt1 WHERE a % 25 = 0) t1 FULL JOIN (SELECT 't2_phv' phv, * FROM fprt2 WHERE b % 25 = 0) t2 ON (t1.a = t2.b) ORDER BY t1.a, t2.b;\n\n-- test FOR UPDATE; partitionwise join does not apply\nEXPLAIN (COSTS OFF)\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\nSELECT t1.a, t2.b FROM fprt1 t1 INNER JOIN fprt2 t2 ON (t1.a = t2.b) WHERE t1.a % 25 = 0 ORDER BY 1,2 FOR UPDATE OF t1;\n\nRESET enable_partitionwise_join;\n\n\n-- ===================================================================\n-- test partitionwise aggregates\n-- ===================================================================\n\nCREATE TABLE pagg_tab (a int, b int, c text) PARTITION BY RANGE(a);\n\nCREATE TABLE pagg_tab_p1 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p2 (LIKE pagg_tab);\nCREATE TABLE pagg_tab_p3 (LIKE pagg_tab);\n\nINSERT INTO pagg_tab_p1 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 10;\nINSERT INTO pagg_tab_p2 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 20 and (i % 30) >= 10;\nINSERT INTO pagg_tab_p3 SELECT i % 30, i % 50, to_char(i/30, 'FM0000') FROM generate_series(1, 3000) i WHERE (i % 30) < 30 and (i % 30) >= 20;\n\n-- Create foreign partitions\nCREATE FOREIGN TABLE fpagg_tab_p1 PARTITION OF pagg_tab FOR VALUES FROM (0) TO (10) SERVER loopback OPTIONS (table_name 'pagg_tab_p1');\nCREATE FOREIGN TABLE fpagg_tab_p2 PARTITION OF pagg_tab FOR VALUES FROM (10) TO (20) SERVER loopback OPTIONS (table_name 'pagg_tab_p2');\nCREATE FOREIGN TABLE fpagg_tab_p3 PARTITION OF pagg_tab FOR VALUES FROM (20) TO (30) SERVER loopback OPTIONS (table_name 'pagg_tab_p3');\n\nANALYZE pagg_tab;\nANALYZE fpagg_tab_p1;\nANALYZE fpagg_tab_p2;\nANALYZE fpagg_tab_p3;\n\n-- When GROUP BY clause matches with PARTITION KEY.\n-- Plan with partitionwise aggregates is disabled\nSET enable_partitionwise_aggregate TO false;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Plan with partitionwise aggregates is enabled\nSET enable_partitionwise_aggregate TO true;\nEXPLAIN (COSTS OFF)\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, sum(b), min(b), count(*) FROM pagg_tab GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- Check with whole-row reference\n-- Should have all the columns in the target list for the given relation\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\nSELECT a, count(t1) FROM pagg_tab t1 GROUP BY a HAVING avg(b) < 22 ORDER BY 1;\n\n-- When GROUP BY clause does not match with PARTITION KEY.\nEXPLAIN (COSTS OFF)\nSELECT b, avg(a), max(a), count(*) FROM pagg_tab GROUP BY b HAVING sum(a) < 700 ORDER BY 1;\n*/\n\n/*\n-- Skip these tests, sqlite fdw does not support nosuper user.\n-- ===================================================================\n-- access rights and superuser\n-- ===================================================================\n\n-- Non-superuser cannot create a FDW without a password in the connstr\nCREATE ROLE regress_nosuper NOSUPERUSER;\n\nGRANT USAGE ON FOREIGN DATA WRAPPER sqlite_fdw TO regress_nosuper;\n\nSET ROLE regress_nosuper;\n\nSHOW is_superuser;\n\n-- This will be OK, we can create the FDW\nDO $d$\n    BEGIN\n        EXECUTE $$CREATE SERVER sqlite_nopw FOREIGN DATA WRAPPER sqlite_fdw\n            OPTIONS (database '/tmp/sqlite_fdw_test/post.db')$$;\n    END;\n$d$;\n\n-- But creation of user mappings for non-superusers should fail\nCREATE USER MAPPING FOR public SERVER sqlite_nopw;\nCREATE USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\nCREATE FOREIGN TABLE ft1_nopw (\n\tc1 int OPTIONS (key 'true'),\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10) default 'ft1',\n\tc8 text\n) SERVER sqlite_nopw;\n\nALTER FOREIGN TABLE ft1_nopw OPTIONS (table 'T 1');\nALTER FOREIGN TABLE ft1_nopw ALTER COLUMN c1 OPTIONS (column_name 'C 1');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- If we add a password to the connstr it'll fail, because we don't allow passwords\n-- in connstrs only in user mappings.\n\nALTER SERVER loopback_nopw OPTIONS (ADD password 'dummypw');\n\n\n-- If we add a password for our user mapping instead, we should get a different\n-- error because the password wasn't actually *used* when we run with trust auth.\n--\n-- This won't work with installcheck, but neither will most of the FDW checks.\n\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password 'dummypw');\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- Unpriv user cannot make the mapping passwordless\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\n\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- But the superuser can\nALTER USER MAPPING FOR regress_nosuper SERVER sqlite_nopw OPTIONS (ADD password_required 'false');\n\nSET ROLE regress_nosuper;\n\n-- Should finally work now\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- unpriv user also cannot set sslcert / sslkey on the user mapping\n-- first set password_required so we see the right error messages\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (SET password_required 'true');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslcert 'foo.crt');\nALTER USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw OPTIONS (ADD sslkey 'foo.key');\n\n-- We're done with the role named after a specific user and need to check the\n-- changes to the public mapping.\nDROP USER MAPPING FOR CURRENT_USER SERVER sqlite_nopw;\n\n-- This will fail again as it'll resolve the user mapping for public, which\n-- lacks password_required=false\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\nRESET ROLE;\n\n-- The user mapping for public is passwordless and lacks the password_required=false\n-- mapping option, but will work because the current user is a superuser.\nSELECT 1 FROM ft1_nopw LIMIT 1;\n\n-- cleanup\nDROP USER MAPPING FOR public SERVER sqlite_nopw;\nDROP OWNED BY regress_nosuper;\nDROP ROLE regress_nosuper;\n\n-- Clean-up\nRESET enable_partitionwise_aggregate;\n*/\n-- Two-phase transactions are not supported.\nBEGIN;\n--Testcase 731:\nSELECT count(*) FROM ft1;\n-- error here\n--Testcase 732:\nPREPARE TRANSACTION 'fdw_tpc';\nROLLBACK;\n\n-- ===================================================================\n-- reestablish new connection\n-- ===================================================================\n-- -- Test case relative with option application_name is not suitable for SQLite FDW.\n-- -- Because this option is in libpq of postgres.\n-- -- Change application_name of remote connection to special one\n-- -- so that we can easily terminate the connection later.\n-- ALTER SERVER sqlite_svr OPTIONS (application_name 'fdw_retry_check');\n-- -- Make sure we have a remote connection.\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- (If a cache flush happens, the remote connection might have already been\n-- dropped; so code this step in a way that doesn't fail if no connection.)\n-- DO $$ BEGIN\n-- PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- END $$;\n-- -- This query should detect the broken connection when starting new remote\n-- -- transaction, reestablish new connection, and then succeed.\n-- BEGIN;\n-- SELECT 1 FROM ft1 LIMIT 1;\n-- -- If we detect the broken connection when starting a new remote\n-- -- subtransaction, we should fail instead of establishing a new connection.\n-- -- Terminate the remote connection and wait for the termination to complete.\n-- DO $$ BEGIN\n-- PERFORM pg_terminate_backend(pid, 180000) FROM pg_stat_activity\n-- \tWHERE application_name = 'fdw_retry_check';\n-- END $$;\n-- SAVEPOINT s;\n-- -- The text of the error might vary across platforms, so only show SQLSTATE.\n-- \\set VERBOSITY sqlstate\n-- SELECT 1 FROM ft1 LIMIT 1;    -- should fail\n-- \\set VERBOSITY default\n-- COMMIT;\n\n-- =============================================================================\n-- test connection invalidation cases and sqlite_fdw_get_connections function\n-- =============================================================================\n-- Let's ensure to close all the existing cached connections.\n--Testcase 880:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 881:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- This test case is for closing the connection in sqlitefdw_xact_callback\nBEGIN;\n-- Connection xact depth becomes 1 i.e. the connection is in midst of the xact.\n--Testcase 882:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 883:\nSELECT 1 FROM ft7 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3 should be\n-- output.\n--Testcase 884:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Connections are not closed at the end of the alter and drop statements.\n-- That's because the connections are in midst of this xact,\n-- they are just marked as invalid in sqlitefdw_inval_callback.\n--Testcase 885:\nALTER SERVER sqlite_svr OPTIONS (ADD keep_connections 'off');\n--Testcase 886:\nDROP SERVER sqlite_svr3 CASCADE;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr3\n-- should be output as invalid connections. Also the server name for\n-- sqlite_svr3 should be NULL because the server was dropped.\n--Testcase 887:\nSELECT * FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- The invalid connections get closed in sqlitefdw_xact_callback during commit.\nCOMMIT;\n--Testcase 888:\nALTER SERVER sqlite_svr OPTIONS (DROP keep_connections);\n-- All cached connections were closed while committing above xact, so no\n-- records should be output.\n--Testcase 889:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =======================================================================\n-- test sqlite_fdw_disconnect and sqlite_fdw_disconnect_all functions\n-- =======================================================================\nBEGIN;\n-- Ensure to cache loopback connection.\n--Testcase 890:\nSELECT 1 FROM ft1 LIMIT 1;\n-- Ensure to cache loopback2 connection.\n--Testcase 891:\nSELECT 1 FROM ft6 LIMIT 1;\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 892:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Issue a warning and return false as sqlite_svr connection is still in use and\n-- can not be closed.\n--Testcase 893:\nSELECT sqlite_fdw_disconnect('sqlite_svr');\n-- List all the existing cached connections. sqlite_svr and sqlite_svr2 should be\n-- output.\n--Testcase 894:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n-- Return false as connections are still in use, warnings are issued.\n-- But disable warnings temporarily because the order of them is not stable.\n--Testcase 895:\nSET client_min_messages = 'ERROR';\n--Testcase 896:\nSELECT sqlite_fdw_disconnect_all();\n--Testcase 897:\nRESET client_min_messages;\nCOMMIT;\n-- Ensure that sqlite_svr2 connection is closed.\n--Testcase 898:\nSELECT 1 FROM sqlite_fdw_disconnect('sqlite_svr2');\n--Testcase 899:\nSELECT server_name FROM sqlite_fdw_get_connections() WHERE server_name = 'sqlite_svr2';\n-- Return false as sqlite_svr2 connection is closed already.\n--Testcase 900:\nSELECT sqlite_fdw_disconnect('sqlite_svr2');\n-- Return an error as there is no foreign server with given name.\n--Testcase 901:\nSELECT sqlite_fdw_disconnect('unknownserver');\n-- Let's ensure to close all the existing cached connections.\n--Testcase 902:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 903:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- =============================================================================\n-- test case for having multiple cached connections for a foreign server\n-- SQLite FDW does not support User Mapping, so cached connection is identified\n-- by only serverid (not like other FDWs use key including serverid and userid),\n-- and there is only one server for all users, so there is only one cached connection.\n-- In case of using key including serverid and userid, if many users are used,\n-- there will be many cached connections.\n-- =============================================================================\n--Testcase 904:\nCREATE ROLE regress_multi_conn_user1 SUPERUSER;\n--Testcase 905:\nCREATE ROLE regress_multi_conn_user2 SUPERUSER;\n--Testcase 906:\n-- CREATE USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 907:\n-- CREATE USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n\nBEGIN;\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user1\n--Testcase 908:\nSET ROLE regress_multi_conn_user1;\n--Testcase 909:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 910:\nRESET ROLE;\n\n-- Will cache sqlite_svr connection with user mapping for regress_multi_conn_user2\n--Testcase 911:\nSET ROLE regress_multi_conn_user2;\n--Testcase 912:\nSELECT 1 FROM ft1 LIMIT 1;\n--Testcase 913:\nRESET ROLE;\n\n-- Should output one cached connection for sqlite_svr server\n--Testcase 914:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\nCOMMIT;\n-- Let's ensure to close all the existing cached connections.\n--Testcase 915:\nSELECT 1 FROM sqlite_fdw_disconnect_all();\n-- No cached connections, so no records should be output.\n--Testcase 916:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n\n-- Clean up\n--Testcase 917:\n-- DROP USER MAPPING FOR regress_multi_conn_user1 SERVER sqlite_svr;\n--Testcase 918:\n-- DROP USER MAPPING FOR regress_multi_conn_user2 SERVER sqlite_svr;\n--Testcase 919:\nDROP ROLE regress_multi_conn_user1;\n--Testcase 920:\nDROP ROLE regress_multi_conn_user2;\n\n-- ===================================================================\n-- Test foreign server level option keep_connections\n-- ===================================================================\n-- By default, the connections associated with foreign server are cached i.e.\n-- keep_connections option is on. Set it to off.\n--Testcase 921:\nALTER SERVER sqlite_svr OPTIONS (keep_connections 'off');\n-- connection to sqlite_svr server is closed at the end of xact\n-- as keep_connections was set to off.\n--Testcase 922:\nSELECT 1 FROM ft1 LIMIT 1;\n-- No cached connections, so no records should be output.\n--Testcase 923:\nSELECT server_name FROM sqlite_fdw_get_connections() ORDER BY 1;\n--Testcase 924:\nALTER SERVER sqlite_svr OPTIONS (SET keep_connections 'on');\n\n-- ===================================================================\n-- batch insert\n-- ===================================================================\n\nBEGIN;\n\n--Testcase 925:\nCREATE SERVER batch10 FOREIGN DATA WRAPPER sqlite_fdw OPTIONS( batch_size '10' );\n\n--Testcase 926:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 927:\nALTER SERVER batch10 OPTIONS( SET batch_size '20' );\n\n--Testcase 928:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=10'];\n\n--Testcase 929:\nSELECT count(*)\nFROM pg_foreign_server\nWHERE srvname = 'batch10'\nAND srvoptions @> array['batch_size=20'];\n\n--Testcase 930:\nCREATE FOREIGN TABLE table30 ( x int ) SERVER batch10 OPTIONS ( batch_size '30' );\n\n--Testcase 931:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 932:\nALTER FOREIGN TABLE table30 OPTIONS ( SET batch_size '40');\n\n--Testcase 933:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=30'];\n\n--Testcase 934:\nSELECT COUNT(*)\nFROM pg_foreign_table\nWHERE ftrelid = 'table30'::regclass\nAND ftoptions @> array['batch_size=40'];\n\nROLLBACK;\n\n--Testcase 935:\nCREATE FOREIGN TABLE ftable ( x int OPTIONS (key 'true') ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '10' );\n--Testcase 936:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 937:\nINSERT INTO ftable SELECT * FROM generate_series(1, 10) i;\n--Testcase 938:\nINSERT INTO ftable SELECT * FROM generate_series(11, 31) i;\n--Testcase 939:\nINSERT INTO ftable VALUES (32);\n--Testcase 940:\nINSERT INTO ftable VALUES (33), (34);\n--Testcase 946:\nSELECT COUNT(*) FROM ftable;\n--Testcase 947:\nDELETE FROM ftable;\n--Testcase 948:\nDROP FOREIGN TABLE ftable;\n\n-- Disable batch insert\n--Testcase 949:\nCREATE FOREIGN TABLE ftable ( x int ) SERVER sqlite_svr OPTIONS ( table 'batch_table', batch_size '1' );\n--Testcase 950:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (1), (2);\n--Testcase 951:\nINSERT INTO ftable VALUES (1), (2);\n--Testcase 952:\nSELECT COUNT(*) FROM ftable;\n\n-- Disable batch inserting into foreign tables with BEFORE ROW INSERT triggers\n-- even if the batch_size option is enabled.\n--Testcase 977:\nALTER FOREIGN TABLE ftable OPTIONS ( SET batch_size '10' );\n--Testcase 978:\nCREATE TRIGGER trig_row_before BEFORE INSERT ON ftable\nFOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');\n--Testcase 980:\nEXPLAIN (VERBOSE, COSTS OFF) INSERT INTO ftable VALUES (3), (4);\n--Testcase 981:\nINSERT INTO ftable VALUES (3), (4);\n--Testcase 982:\nSELECT COUNT(*) FROM ftable;\n\n-- Clean up\n--Testcase 983:\nDROP TRIGGER trig_row_before ON ftable;\n--Testcase 953:\nDROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n\n-- -- Use partitioning\n-- CREATE TABLE batch_table ( x int ) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p0f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 0)\n\t-- SERVER sqlite_svr\n\t-- OPTIONS (table 'batch_table_p0', batch_size '10');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- CREATE FOREIGN TABLE batch_table_p1f\n\t-- PARTITION OF batch_table\n\t-- FOR VALUES WITH (MODULUS 3, REMAINDER 1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table 'batch_table_p1', batch_size '1');\n\n-- CREATE TABLE batch_table_p2\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 3, REMAINDER 2);\n\n-- INSERT INTO \"S 1\".batch_table SELECT * FROM generate_series(1, 66) i;\n-- SELECT COUNT(*) FROM \"S 1\".batch_table;\n\n-- -- Clean up\n-- DROP TABLE batch_table;\n-- DROP TABLE batch_table_p0;\n-- DROP TABLE batch_table_p1;\n\n-- Check that batched mode also works for some inserts made during\n-- cross-partition updates\n-- CREATE TABLE batch_cp_upd_test (a int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_cp_upd_test1 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test1_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (1)\n-- \tSERVER sqlite_svr\n-- \tOPTIONS (table_name 'batch_cp_upd_test1', batch_size '10');\n-- CREATE TABLE batch_cp_upd_test2 PARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (2);\n-- CREATE TABLE batch_cp_upd_test3 (LIKE batch_cp_upd_test);\n-- CREATE FOREIGN TABLE batch_cp_upd_test3_f\n-- \tPARTITION OF batch_cp_upd_test\n-- \tFOR VALUES IN (3)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_cp_upd_test3', batch_size '1');\n-- -- Create statement triggers on remote tables that \"log\" any INSERTs\n-- -- performed on them.\n-- CREATE TABLE cmdlog (cmd text);\n-- CREATE FUNCTION log_stmt() RETURNS TRIGGER LANGUAGE plpgsql AS $$\n-- \tBEGIN INSERT INTO public.cmdlog VALUES (TG_OP || ' on ' || TG_RELNAME); RETURN NULL; END;\n-- $$;\n-- CREATE TRIGGER stmt_trig AFTER INSERT ON batch_cp_upd_test1\n-- \tFOR EACH STATEMENT EXECUTE FUNCTION log_stmt();\n-- CREATE TRIGGER stmt_trig AFTER INSERT ON batch_cp_upd_test3\n-- \tFOR EACH STATEMENT EXECUTE FUNCTION log_stmt();\n-- -- This update moves rows from the local partition 'batch_cp_upd_test2' to the\n-- -- foreign partition 'batch_cp_upd_test1', one that has insert batching\n-- -- enabled, so a single INSERT for both rows.\n-- INSERT INTO batch_cp_upd_test VALUES (2), (2);\n-- UPDATE batch_cp_upd_test t SET a = 1 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2;\n-- -- This one moves rows from the local partition 'batch_cp_upd_test2' to the\n-- -- foreign partition 'batch_cp_upd_test2', one that has insert batching\n-- -- disabled, so separate INSERTs for the two rows.\n-- INSERT INTO batch_cp_upd_test VALUES (2), (2);\n-- UPDATE batch_cp_upd_test t SET a = 3 FROM (VALUES (1), (2)) s(a) WHERE t.a = s.a AND s.a = 2;\n-- SELECT tableoid::regclass, * FROM batch_cp_upd_test ORDER BY 1;\n-- -- Should see 1 INSERT on batch_cp_upd_test1 and 2 on batch_cp_upd_test3 as\n-- -- described above.\n-- SELECT * FROM cmdlog ORDER BY 1;\n\n-- -- Clean up\n-- DROP TABLE batch_cp_upd_test;\n-- DROP TABLE batch_cp_upd_test1;\n-- DROP TABLE batch_cp_upd_test3;\n-- DROP TABLE cmdlog;\n-- DROP FUNCTION log_stmt();\n\n-- -- Use partitioning\n-- ALTER SERVER loopback OPTIONS (ADD batch_size '10');\n\n-- CREATE TABLE batch_table ( x int, field1 text, field2 text) PARTITION BY HASH (x);\n\n-- CREATE TABLE batch_table_p0 (LIKE batch_table);\n-- ALTER TABLE batch_table_p0 ADD CONSTRAINT p0_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p0f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 0)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p0');\n\n-- CREATE TABLE batch_table_p1 (LIKE batch_table);\n-- ALTER TABLE batch_table_p1 ADD CONSTRAINT p1_pkey PRIMARY KEY (x);\n-- CREATE FOREIGN TABLE batch_table_p1f\n-- \tPARTITION OF batch_table\n-- \tFOR VALUES WITH (MODULUS 2, REMAINDER 1)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table_p1');\n\n-- INSERT INTO batch_table SELECT i, 'test'||i, 'test'|| i FROM generate_series(1, 50) i;\n-- SELECT COUNT(*) FROM batch_table;\n-- SELECT * FROM batch_table ORDER BY x;\n\n-- -- Clean up\n-- DROP TABLE batch_table;\n-- DROP TABLE batch_table_p0;\n-- DROP TABLE batch_table_p1;\n\n-- ALTER SERVER loopback OPTIONS (DROP batch_size);\n\n-- Test that pending inserts are handled properly when needed\n-- CREATE TABLE batch_table (a text, b int);\n-- CREATE FOREIGN TABLE ftable (a text, b int)\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table', batch_size '2');\n-- CREATE TABLE ltable (a text, b int);\n-- CREATE FUNCTION ftable_rowcount_trigf() RETURNS trigger LANGUAGE plpgsql AS\n-- $$\n-- begin\n-- \traise notice '%: there are % rows in ftable',\n-- \t\tTG_NAME, (SELECT count(*) FROM ftable);\n-- \tif TG_OP = 'DELETE' then\n-- \t\treturn OLD;\n-- \telse\n-- \t\treturn NEW;\n-- \tend if;\n-- end;\n-- $$;\n-- CREATE TRIGGER ftable_rowcount_trigger\n-- BEFORE INSERT OR UPDATE OR DELETE ON ltable\n-- FOR EACH ROW EXECUTE PROCEDURE ftable_rowcount_trigf();\n\n-- WITH t AS (\n-- \tINSERT INTO ltable VALUES ('AAA', 42), ('BBB', 42) RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- WITH t AS (\n-- \tUPDATE ltable SET b = b + 100 RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- WITH t AS (\n-- \tDELETE FROM ltable RETURNING *\n-- )\n-- INSERT INTO ftable SELECT * FROM t;\n\n-- SELECT * FROM ltable;\n-- SELECT * FROM ftable;\n-- DELETE FROM ftable;\n\n-- -- Clean up\n-- DROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n-- DROP TRIGGER ftable_rowcount_trigger ON ltable;\n-- DROP TABLE ltable;\n\n-- CREATE TABLE parent (a text, b int) PARTITION BY LIST (a);\n-- CREATE TABLE batch_table (a text, b int);\n-- CREATE FOREIGN TABLE ftable\n-- \tPARTITION OF parent\n-- \tFOR VALUES IN ('AAA')\n-- \tSERVER loopback\n-- \tOPTIONS (table_name 'batch_table', batch_size '2');\n-- CREATE TABLE ltable\n-- \tPARTITION OF parent\n-- \tFOR VALUES IN ('BBB');\n-- CREATE TRIGGER ftable_rowcount_trigger\n-- BEFORE INSERT ON ltable\n-- FOR EACH ROW EXECUTE PROCEDURE ftable_rowcount_trigf();\n\n-- INSERT INTO parent VALUES ('AAA', 42), ('BBB', 42), ('AAA', 42), ('BBB', 42);\n\n-- SELECT tableoid::regclass, * FROM parent;\n\n-- -- Clean up\n-- DROP FOREIGN TABLE ftable;\n-- DROP TABLE batch_table;\n-- DROP TRIGGER ftable_rowcount_trigger ON ltable;\n-- DROP TABLE ltable;\n-- DROP TABLE parent;\n-- DROP FUNCTION ftable_rowcount_trigf;\n\n\n-- ===================================================================\n-- test asynchronous execution\n-- ===================================================================\n\n-- ALTER SERVER loopback OPTIONS (DROP extensions);\n-- ALTER SERVER loopback OPTIONS (ADD async_capable 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD async_capable 'true');\n\n-- CREATE TABLE async_pt (a int, b int, c text) PARTITION BY RANGE (a);\n-- CREATE TABLE base_tbl1 (a int, b int, c text);\n-- CREATE TABLE base_tbl2 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p1 PARTITION OF async_pt FOR VALUES FROM (1000) TO (2000)\n--   SERVER loopback OPTIONS (table_name 'base_tbl1');\n-- CREATE FOREIGN TABLE async_p2 PARTITION OF async_pt FOR VALUES FROM (2000) TO (3000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl2');\n-- INSERT INTO async_p1 SELECT 1000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- INSERT INTO async_p2 SELECT 2000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- -- simple queries\n-- CREATE TABLE result_tbl (a int, b int, c text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b % 100 = 0;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- Test error handling, if accessing one of the foreign partitions errors out\n-- CREATE FOREIGN TABLE async_p_broken PARTITION OF async_pt FOR VALUES FROM (10000) TO (10001)\n--   SERVER loopback OPTIONS (table_name 'non_existent_table');\n-- SELECT * FROM async_pt;\n-- DROP FOREIGN TABLE async_p_broken;\n\n-- -- Check case where multiple partitions use the same connection\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000)\n--   SERVER loopback2 OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- DROP FOREIGN TABLE async_p3;\n-- DROP TABLE base_tbl3;\n\n-- -- Check case where the partitioned table has local/remote partitions\n-- CREATE TABLE async_p3 PARTITION OF async_pt FOR VALUES FROM (3000) TO (4000);\n-- INSERT INTO async_p3 SELECT 3000 + i, i, to_char(i, 'FM0000') FROM generate_series(0, 999, 5) i;\n-- ANALYZE async_pt;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n-- INSERT INTO result_tbl SELECT * FROM async_pt WHERE b === 505;\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- -- partitionwise joins\n-- SET enable_partitionwise_join TO true;\n\n-- CREATE TABLE join_tbl (a1 int, b1 int, c1 text, a2 int, b2 int, c2 text);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_partitionwise_join;\n\n-- -- Test rescan of an async Append node with do_exec_prune=false\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n-- INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- RESET enable_hashjoin;\n\n-- -- Test interaction of async execution with plan-time partition pruning\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 3000;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE a < 2000;\n\n-- -- Test interaction of async execution with run-time partition pruning\n-- SET plan_cache_mode TO force_generic_plan;\n\n-- PREPARE async_pt_query (int, int) AS\n--   INSERT INTO result_tbl SELECT * FROM async_pt WHERE a < $1 AND b === $2;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (3000, 505);\n-- EXECUTE async_pt_query (3000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- EXECUTE async_pt_query (2000, 505);\n-- EXECUTE async_pt_query (2000, 505);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- RESET plan_cache_mode;\n\n-- CREATE TABLE local_tbl(a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo'), (2505, 505, 'bar');\n-- ANALYZE local_tbl;\n\n-- CREATE INDEX base_tbl1_idx ON base_tbl1 (a);\n-- CREATE INDEX base_tbl2_idx ON base_tbl2 (a);\n-- CREATE INDEX async_p3_idx ON async_p3 (a);\n-- ANALYZE base_tbl1;\n-- ANALYZE base_tbl2;\n-- ANALYZE async_p3;\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (use_remote_estimate 'true');\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (use_remote_estimate 'true');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n-- SELECT * FROM local_tbl, async_pt WHERE local_tbl.a = async_pt.a AND local_tbl.c = 'bar';\n\n-- ALTER FOREIGN TABLE async_p1 OPTIONS (DROP use_remote_estimate);\n-- ALTER FOREIGN TABLE async_p2 OPTIONS (DROP use_remote_estimate);\n\n-- DROP TABLE local_tbl;\n-- DROP INDEX base_tbl1_idx;\n-- DROP INDEX base_tbl2_idx;\n-- DROP INDEX async_p3_idx;\n\n-- -- UNION queries\n-- SET enable_sort TO off;\n-- SET enable_incremental_sort TO off;\n-- -- Adjust fdw_startup_cost so that we get an unordered path in the Append.\n-- ALTER SERVER loopback2 OPTIONS (ADD fdw_startup_cost '0.00');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n-- INSERT INTO result_tbl\n-- (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)\n-- UNION ALL\n-- (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);\n\n-- SELECT * FROM result_tbl ORDER BY a;\n-- DELETE FROM result_tbl;\n\n-- RESET enable_incremental_sort;\n-- RESET enable_sort;\n-- ALTER SERVER loopback2 OPTIONS (DROP fdw_startup_cost);\n\n-- -- Disable async execution if we use gating Result nodes for pseudoconstant\n-- -- quals\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt WHERE CURRENT_USER = SESSION_USER;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER)\n-- UNION ALL\n-- (SELECT * FROM async_p2 WHERE CURRENT_USER = SESSION_USER);\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM async_p2 WHERE b < 10)) s WHERE CURRENT_USER = SESSION_USER;\n\n-- -- Test that pending requests are processed properly\n-- SET enable_mergejoin TO false;\n-- SET enable_hashjoin TO false;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n-- SELECT * FROM async_pt t1, async_p2 t2 WHERE t1.a = t2.a AND t1.b === 505;\n\n-- CREATE TABLE local_tbl (a int, b int, c text);\n-- INSERT INTO local_tbl VALUES (1505, 505, 'foo');\n-- ANALYZE local_tbl;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n-- SELECT * FROM local_tbl t1 LEFT JOIN (SELECT *, (SELECT count(*) FROM async_pt WHERE a < 3000) FROM async_pt WHERE a < 3000) t2 ON t1.a = t2.a;\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n-- SELECT * FROM async_pt t1 WHERE t1.b === 505 LIMIT 1;\n\n-- -- Check with foreign modify\n-- CREATE TABLE base_tbl3 (a int, b int, c text);\n-- CREATE FOREIGN TABLE remote_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl3');\n-- INSERT INTO remote_tbl VALUES (2505, 505, 'bar');\n\n-- CREATE TABLE base_tbl4 (a int, b int, c text);\n-- CREATE FOREIGN TABLE insert_tbl (a int, b int, c text)\n--   SERVER loopback OPTIONS (table_name 'base_tbl4');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n-- INSERT INTO insert_tbl (SELECT * FROM local_tbl UNION ALL SELECT * FROM remote_tbl);\n\n-- SELECT * FROM insert_tbl ORDER BY a;\n\n-- -- Check with direct modify\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n-- WITH t AS (UPDATE remote_tbl SET c = c || c RETURNING *)\n-- INSERT INTO join_tbl SELECT * FROM async_pt LEFT JOIN t ON (async_pt.a = t.a AND async_pt.b = t.b) WHERE async_pt.b === 505;\n\n-- SELECT * FROM join_tbl ORDER BY a1;\n-- DELETE FROM join_tbl;\n\n-- DROP TABLE local_tbl;\n-- DROP FOREIGN TABLE remote_tbl;\n-- DROP FOREIGN TABLE insert_tbl;\n-- DROP TABLE base_tbl3;\n-- DROP TABLE base_tbl4;\n\n-- RESET enable_mergejoin;\n-- RESET enable_hashjoin;\n\n-- -- Test that UPDATE/DELETE with inherited target works with async_capable enabled\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- UPDATE async_pt SET c = c || c WHERE b = 0 RETURNING *;\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n-- DELETE FROM async_pt WHERE b = 0 RETURNING *;\n\n-- -- Check EXPLAIN ANALYZE for a query that scans empty partitions asynchronously\n-- DELETE FROM async_p1;\n-- DELETE FROM async_p2;\n-- DELETE FROM async_p3;\n\n-- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)\n-- SELECT * FROM async_pt;\n\n-- -- Clean up\n-- DROP TABLE async_pt;\n-- DROP TABLE base_tbl1;\n-- DROP TABLE base_tbl2;\n-- DROP TABLE result_tbl;\n-- DROP TABLE join_tbl;\n\n-- -- Test that an asynchronous fetch is processed before restarting the scan in\n-- -- ReScanForeignScan\n-- CREATE TABLE base_tbl (a int, b int);\n-- INSERT INTO base_tbl VALUES (1, 11), (2, 22), (3, 33);\n-- CREATE FOREIGN TABLE foreign_tbl (b int)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n-- CREATE FOREIGN TABLE foreign_tbl2 () INHERITS (foreign_tbl)\n--   SERVER loopback OPTIONS (table_name 'base_tbl');\n\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl);\n-- SELECT a FROM base_tbl WHERE (a, random() > 0) IN (SELECT a, random() > 0 FROM foreign_tbl);\n\n-- -- Clean up\n-- DROP FOREIGN TABLE foreign_tbl CASCADE;\n-- DROP TABLE base_tbl;\n\n-- ALTER SERVER loopback OPTIONS (DROP async_capable);\n-- ALTER SERVER loopback2 OPTIONS (DROP async_capable);\n\n-- ===================================================================\n-- test invalid server and foreign table options\n-- ===================================================================\n-- -- Invalid fdw_startup_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_startup_cost '100$%$#$#');\n-- -- Invalid fdw_tuple_cost option\n-- CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw\n-- \tOPTIONS(fdw_tuple_cost '100$%$#$#');\n-- -- Invalid fetch_size option\n-- CREATE FOREIGN TABLE inv_fsz (c1 int )\n-- \tSERVER loopback OPTIONS (fetch_size '100$%$#$#');\n-- Invalid batch_size option\n--Testcase 954:\nCREATE FOREIGN TABLE inv_bsz (c1 int )\n\tSERVER sqlite_svr OPTIONS (batch_size '100$%$#$#');\n\n-- -- No option is allowed to be specified at foreign data wrapper level\n-- ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (nonexistent 'fdw');\n\n-- -- ===================================================================\n-- -- test postgres_fdw.application_name GUC\n-- -- ===================================================================\n-- To avoid race conditions in checking the remote session's application_name,\n-- use this view to make the remote session itself read its application_name.\n-- CREATE VIEW my_application_name AS\n--   SELECT application_name FROM pg_stat_activity WHERE pid = pg_backend_pid();\n\n-- CREATE FOREIGN TABLE remote_application_name (application_name text)\n--   SERVER loopback2\n--   OPTIONS (schema_name 'public', table_name 'my_application_name');\n\n-- SELECT count(*) FROM remote_application_name;\n\n-- Specify escape sequences in application_name option of a server\n-- object so as to test that they are replaced with status information\n-- expectedly.  Note that we are also relying on ALTER SERVER to force\n-- the remote session to be restarted with its new application name.\n-- -- Since pg_stat_activity.application_name may be truncated to less than\n-- -- NAMEDATALEN characters, note that substring() needs to be used\n-- -- at the condition of test query to make sure that the string consisting\n-- -- of database name and process ID is also less than that.\n-- ALTER SERVER loopback2 OPTIONS (application_name 'fdw_%d%p');\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_database() || pg_backend_pid() for\n--       current_setting('max_identifier_length')::int);\n\n-- -- postgres_fdw.application_name overrides application_name option\n-- -- of a server object if both settings are present.\n-- ALTER SERVER loopback2 OPTIONS (SET application_name 'fdw_wrong');\n-- SET postgres_fdw.application_name TO 'fdw_%a%u%%';\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('application_name') ||\n--       CURRENT_USER || '%' for current_setting('max_identifier_length')::int);\n-- RESET postgres_fdw.application_name;\n\n-- -- Test %c (session ID) and %C (cluster name) escape sequences.\n-- ALTER SERVER loopback2 OPTIONS (SET application_name 'fdw_%C%c');\n-- SELECT count(*) FROM remote_application_name\n--   WHERE application_name =\n--     substring('fdw_' || current_setting('cluster_name') ||\n--       to_hex(trunc(EXTRACT(EPOCH FROM (SELECT backend_start FROM\n--       pg_stat_get_activity(pg_backend_pid()))))::integer) || '.' ||\n--       to_hex(pg_backend_pid())\n--       for current_setting('max_identifier_length')::int);\n\n-- -- Clean up.\n-- DROP FOREIGN TABLE remote_application_name;\n-- DROP VIEW my_application_name;\n\n-- -- ===================================================================\n-- -- test parallel commit and parallel abort\n-- -- ===================================================================\n-- ALTER SERVER loopback OPTIONS (ADD parallel_commit 'true');\n-- ALTER SERVER loopback OPTIONS (ADD parallel_abort 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD parallel_commit 'true');\n-- ALTER SERVER loopback2 OPTIONS (ADD parallel_abort 'true');\n\n-- CREATE TABLE ploc1 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem1 (f1 int, f2 text)\n--   SERVER loopback OPTIONS (table_name 'ploc1');\n-- CREATE TABLE ploc2 (f1 int, f2 text);\n-- CREATE FOREIGN TABLE prem2 (f1 int, f2 text)\n--   SERVER loopback2 OPTIONS (table_name 'ploc2');\n\n-- BEGIN;\n-- INSERT INTO prem1 VALUES (101, 'foo');\n-- INSERT INTO prem2 VALUES (201, 'bar');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (102, 'foofoo');\n-- INSERT INTO prem2 VALUES (202, 'barbar');\n-- RELEASE SAVEPOINT s;\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- -- This tests executing DEALLOCATE ALL against foreign servers in parallel\n-- -- during pre-commit\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (103, 'baz');\n-- INSERT INTO prem2 VALUES (203, 'qux');\n-- ROLLBACK TO SAVEPOINT s;\n-- RELEASE SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (104, 'bazbaz');\n-- INSERT INTO prem2 VALUES (204, 'quxqux');\n-- COMMIT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- BEGIN;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ABORT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- -- This tests executing DEALLOCATE ALL against foreign servers in parallel\n-- -- during post-abort\n-- BEGIN;\n-- SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ROLLBACK TO SAVEPOINT s;\n-- RELEASE SAVEPOINT s;\n-- INSERT INTO prem1 VALUES (105, 'test1');\n-- INSERT INTO prem2 VALUES (205, 'test2');\n-- ABORT;\n-- SELECT * FROM prem1;\n-- SELECT * FROM prem2;\n\n-- ALTER SERVER loopback OPTIONS (DROP parallel_commit);\n-- ALTER SERVER loopback OPTIONS (DROP parallel_abort);\n-- ALTER SERVER loopback2 OPTIONS (DROP parallel_commit);\n-- ALTER SERVER loopback2 OPTIONS (DROP parallel_abort);\n\n-- -- ===================================================================\n-- -- test for ANALYZE sampling\n-- -- ===================================================================\n\n-- CREATE TABLE analyze_table (id int, a text, b bigint);\n\n-- CREATE FOREIGN TABLE analyze_ftable (id int, a text, b bigint)\n--        SERVER loopback OPTIONS (table_name 'analyze_rtable1');\n\n-- INSERT INTO analyze_table (SELECT x FROM generate_series(1,1000) x);\n-- ANALYZE analyze_table;\n\n-- SET default_statistics_target = 10;\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (analyze_sampling 'invalid');\n\n-- ALTER SERVER loopback OPTIONS (analyze_sampling 'auto');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'system');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'bernoulli');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'random');\n-- ANALYZE analyze_table;\n\n-- ALTER SERVER loopback OPTIONS (SET analyze_sampling 'off');\n-- ANALYZE analyze_table;\n-- cleanup\n-- DROP FOREIGN TABLE analyze_ftable;\n-- DROP TABLE analyze_table;\n\n-- SQLite FDW does not support query cancel feature\n-- SELECT version() ~ 'cygwin' AS skip_test \\gset\n-- \\if :skip_test\n-- \\quit\n-- \\endif\n\n-- -- Let's test canceling a remote query.  Use a table that does not have\n-- -- remote_estimate enabled, else there will be multiple queries to the\n-- -- remote and we might unluckily send the cancel in between two of them.\n-- -- First let's confirm that the query is actually pushed down.\n-- EXPLAIN (VERBOSE, COSTS OFF)\n-- SELECT count(*) FROM ft1 a CROSS JOIN ft1 b CROSS JOIN ft1 c CROSS JOIN ft1 d;\n\n-- BEGIN;\n-- -- Make sure that connection is open and set up.\n-- SELECT count(*) FROM ft1 a;\n-- -- Timeout needs to be long enough to be sure that we've sent the slow query.\n-- SET LOCAL statement_timeout = '100ms';\n-- -- This would take very long if not canceled:\n-- SELECT count(*) FROM ft1 a CROSS JOIN ft1 b CROSS JOIN ft1 c CROSS JOIN ft1 d;\n-- COMMIT;\n\n-- Clean-up\n--Testcase 733:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr;\n--Testcase 734:\n-- DROP USER MAPPING FOR CURRENT_USER SERVER sqlite_svr2;\n--Testcase 735:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 736:\nDROP SERVER sqlite_svr2 CASCADE;\n--Testcase 737:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/extra/update.sql",
    "content": "--\n-- UPDATE syntax tests\n--\n--Testcase 32:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 33:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 34:\nCREATE FOREIGN TABLE update_test (\n    i   INT OPTIONS (key 'true'),\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n) SERVER sqlite_svr;\n\n--Testcase 35:\nCREATE FOREIGN TABLE upsert_test (\n    a   INT OPTIONS (key 'true'),\n    b   TEXT\n) SERVER sqlite_svr;\n\n\n--Testcase 1:\nINSERT INTO update_test VALUES (1, 5, 10, 'foo');\n--Testcase 2:\nINSERT INTO update_test(i, b, a) VALUES (2, 15, 10);\n\n--Testcase 3:\nSELECT * FROM update_test;\n\n--Testcase 4:\nUPDATE update_test SET a = DEFAULT, b = DEFAULT;\n\n--Testcase 5:\nSELECT * FROM update_test;\n\n-- aliases for the UPDATE target table\n--Testcase 6:\nUPDATE update_test AS t SET b = 10 WHERE t.a = 10;\n\n--Testcase 7:\nSELECT * FROM update_test;\n\n--Testcase 8:\nUPDATE update_test t SET b = t.b + 10 WHERE t.a = 10;\n\n--Testcase 9:\nSELECT * FROM update_test;\n\n-- error, you're not supposed to qualify the target column\n--Testcase 41:\nUPDATE update_test t SET t.b = t.b + 10 WHERE t.a = 10;\n\n--\n-- Test VALUES in FROM\n--\n\n--Testcase 10:\nUPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--Testcase 11:\nSELECT * FROM update_test;\n\n-- fail, wrong data type:\n--Testcase 12:\nUPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j)\n  WHERE update_test.b = v.j;\n\n--\n-- Test multiple-set-clause syntax\n--\n\n--Testcase 13:\nINSERT INTO update_test SELECT i+2,a,b+1,c FROM update_test;\n--Testcase 14:\nSELECT * FROM update_test;\n\n--Testcase 15:\nUPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';\n--Testcase 16:\nSELECT * FROM update_test;\n--Testcase 17:\nUPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;\n--Testcase 18:\nSELECT * FROM update_test;\n-- fail, multi assignment to same column:\n--Testcase 19:\nUPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;\n\n-- uncorrelated sub-select:\n--Testcase 20:\nUPDATE update_test\n  SET (b,a) = (select a,b from update_test where b = 41 and c = 'car')\n  WHERE a = 100 AND b = 20;\n--Testcase 21:\nSELECT * FROM update_test;\n-- correlated sub-select:\n--Testcase 22:\nUPDATE update_test o\n  SET (b,a) = (select a+1,b from update_test i\n               where i.a=o.a and i.b=o.b and i.c is not distinct from o.c);\n--Testcase 23:\nSELECT * FROM update_test;\n-- fail, multiple rows supplied:\n--Testcase 24:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test);\n-- set to null if no rows supplied:\n--Testcase 25:\nUPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000)\n  WHERE a = 11;\n--Testcase 26:\nSELECT * FROM update_test;\n-- *-expansion should work in this context:\n--Testcase 27:\nUPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 100)) AS v(i, j)\n  WHERE update_test.a = v.i;\n-- you might expect this to work, but syntactically it's not a RowExpr:\n--Testcase 28:\nUPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 101)) AS v(i, j)\n  WHERE update_test.a = v.i;\n\n-- if an alias for the target table is specified, don't allow references\n-- to the original table name\n--Testcase 29:\nUPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10;\n\n-- Make sure that we can update to a TOASTed value.\n--Testcase 30:\nUPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car';\n--Testcase 31:\nSELECT a, b, char_length(c) FROM update_test;\n\n-- Check multi-assignment with a Result node to handle a one-time filter.\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 37:\nUPDATE update_test t\n  SET (a, b) = (SELECT b, a FROM update_test s WHERE s.a = t.a)\n  WHERE CURRENT_USER = SESSION_USER;\n--Testcase 38:\nSELECT a, b, char_length(c) FROM update_test;\n\n/* Skip, sqlite fdw does not support ON CONFLICT DO UPDATE\n-- Test ON CONFLICT DO UPDATE\nINSERT INTO upsert_test VALUES(1, 'Boo'), (3, 'Zoo');\n-- uncorrelated  sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nINSERT INTO upsert_test VALUES (1, 'Baz'), (3, 'Zaz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Correlated', a from upsert_test i WHERE i.a = upsert_test.a)\n  RETURNING *;\n-- correlated sub-select (EXCLUDED.* alias):\nINSERT INTO upsert_test VALUES (1, 'Bat'), (3, 'Zot') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING *;\n\n-- ON CONFLICT using system attributes in RETURNING, testing both the\n-- inserting and updating paths. See bug report at:\n-- https://www.postgresql.org/message-id/73436355-6432-49B1-92ED-1FE4F7E7E100%40finefun.com.au\nINSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = 0 AS xmax_correct;\n-- currently xmax is set after a conflict - that's probably not good,\n-- but it seems worthwhile to have to be explicit if that changes.\nINSERT INTO upsert_test VALUES (2, 'Brox') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b || ', Excluded', a from upsert_test i WHERE i.a = excluded.a)\n  RETURNING tableoid::regclass, xmin = pg_current_xact_id()::xid AS xmin_correct, xmax = pg_current_xact_id()::xid AS xmax_correct;\n\n\nDROP FOREIGN TABLE update_test;\nDROP FOREIGN TABLE upsert_test;\n*/\n\n/*Skip, sqlite fdw does not support create partition table\n-- Test ON CONFLICT DO UPDATE with partitioned table and non-identical children\n\nCREATE TABLE upsert_test (\n    a   INT PRIMARY KEY,\n    b   TEXT\n) PARTITION BY LIST (a);\n\nCREATE TABLE upsert_test_1 PARTITION OF upsert_test FOR VALUES IN (1);\nCREATE TABLE upsert_test_2 (b TEXT, a INT PRIMARY KEY);\nALTER TABLE upsert_test ATTACH PARTITION upsert_test_2 FOR VALUES IN (2);\n\nINSERT INTO upsert_test VALUES(1, 'Boo'), (2, 'Zoo');\n-- uncorrelated sub-select:\nWITH aaa AS (SELECT 1 AS a, 'Foo' AS b) INSERT INTO upsert_test\n  VALUES (1, 'Bar') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT b, a FROM aaa) RETURNING *;\n-- correlated sub-select:\nWITH aaa AS (SELECT 1 AS ctea, ' Foo' AS cteb) INSERT INTO upsert_test\n  VALUES (1, 'Bar'), (2, 'Baz') ON CONFLICT(a)\n  DO UPDATE SET (b, a) = (SELECT upsert_test.b||cteb, upsert_test.a FROM aaa) RETURNING *;\n\nDROP TABLE upsert_test;\n\n---------------------------\n-- UPDATE with row movement\n---------------------------\n\n-- When a partitioned table receives an UPDATE to the partitioned key and the\n-- new values no longer meet the partition's bound, the row must be moved to\n-- the correct partition for the new partition key (if one exists). We must\n-- also ensure that updatable views on partitioned tables properly enforce any\n-- WITH CHECK OPTION that is defined. The situation with triggers in this case\n-- also requires thorough testing as partition key updates causing row\n-- movement convert UPDATEs into DELETE+INSERT.\n\nCREATE TABLE range_parted (\n\ta text,\n\tb bigint,\n\tc numeric,\n\td int,\n\te varchar\n) PARTITION BY RANGE (a, b);\n\n-- Create partitions intentionally in descending bound order, so as to test\n-- that update-row-movement works with the leaf partitions not in bound order.\nCREATE TABLE part_b_20_b_30 (e varchar, c numeric, a text, b bigint, d int);\nALTER TABLE range_parted ATTACH PARTITION part_b_20_b_30 FOR VALUES FROM ('b', 20) TO ('b', 30);\nCREATE TABLE part_b_10_b_20 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY RANGE (c);\nCREATE TABLE part_b_1_b_10 PARTITION OF range_parted FOR VALUES FROM ('b', 1) TO ('b', 10);\nALTER TABLE range_parted ATTACH PARTITION part_b_10_b_20 FOR VALUES FROM ('b', 10) TO ('b', 20);\nCREATE TABLE part_a_10_a_20 PARTITION OF range_parted FOR VALUES FROM ('a', 10) TO ('a', 20);\nCREATE TABLE part_a_1_a_10 PARTITION OF range_parted FOR VALUES FROM ('a', 1) TO ('a', 10);\n\n-- Check that partition-key UPDATE works sanely on a partitioned table that\n-- does not have any child partitions.\nUPDATE part_b_10_b_20 set b = b - 6;\n\n-- Create some more partitions following the above pattern of descending bound\n-- order, but let's make the situation a bit more complex by having the\n-- attribute numbers of the columns vary from their parent partition.\nCREATE TABLE part_c_100_200 (e varchar, c numeric, a text, b bigint, d int) PARTITION BY range (abs(d));\nALTER TABLE part_c_100_200 DROP COLUMN e, DROP COLUMN c, DROP COLUMN a;\nALTER TABLE part_c_100_200 ADD COLUMN c numeric, ADD COLUMN e varchar, ADD COLUMN a text;\nALTER TABLE part_c_100_200 DROP COLUMN b;\nALTER TABLE part_c_100_200 ADD COLUMN b bigint;\nCREATE TABLE part_d_1_15 PARTITION OF part_c_100_200 FOR VALUES FROM (1) TO (15);\nCREATE TABLE part_d_15_20 PARTITION OF part_c_100_200 FOR VALUES FROM (15) TO (20);\n\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_100_200 FOR VALUES FROM (100) TO (200);\n\nCREATE TABLE part_c_1_100 (e varchar, d int, c numeric, b bigint, a text);\nALTER TABLE part_b_10_b_20 ATTACH PARTITION part_c_1_100 FOR VALUES FROM (1) TO (100);\n\n\\set init_range_parted 'truncate range_parted; insert into range_parted VALUES (''a'', 1, 1, 1), (''a'', 10, 200, 1), (''b'', 12, 96, 1), (''b'', 13, 97, 2), (''b'', 15, 105, 16), (''b'', 17, 105, 19)'\n\\set show_data 'select tableoid::regclass::text COLLATE \"C\" partname, * from range_parted ORDER BY 1, 2, 3, 4, 5, 6'\n:init_range_parted;\n:show_data;\n\n-- The order of subplans should be in bound order\nEXPLAIN (costs off) UPDATE range_parted set c = c - 50 WHERE c > 97;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_c_100_200 set c = c - 20, d = c WHERE c = 105;\n-- fail, no partition key update, so no attempt to move tuple,\n-- but \"a = 'a'\" violates partition constraint enforced by root partition)\nUPDATE part_b_10_b_20 set a = 'a';\n-- ok, partition key update, no constraint violation\nUPDATE range_parted set d = d - 10 WHERE d > 10;\n-- ok, no partition key update, no constraint violation\nUPDATE range_parted set e = d;\n-- No row found\nUPDATE part_c_1_100 set c = c + 20 WHERE c = 98;\n-- ok, row movement\nUPDATE part_b_10_b_20 set c = c + 20 returning c, b, a;\n:show_data;\n\n-- fail, row movement happens only within the partition subtree.\nUPDATE part_b_10_b_20 set b = b - 6 WHERE c > 116 returning *;\n-- ok, row movement, with subset of rows moved into different partition.\nUPDATE range_parted set b = b - 6 WHERE c > 116 returning a, b + c;\n\n:show_data;\n\n-- Common table needed for multiple test scenarios.\nCREATE TABLE mintab(c1 int);\nINSERT into mintab VALUES (120);\n\n-- update partition key using updatable view.\nCREATE VIEW upview AS SELECT * FROM range_parted WHERE (select c > c1 FROM mintab) WITH CHECK OPTION;\n-- ok\nUPDATE upview set c = 199 WHERE b = 4;\n-- fail, check option violation\nUPDATE upview set c = 120 WHERE b = 4;\n-- fail, row movement with check option violation\nUPDATE upview set a = 'b', b = 15, c = 120 WHERE b = 4;\n-- ok, row movement, check option passes\nUPDATE upview set a = 'b', b = 15 WHERE b = 4;\n\n:show_data;\n\n-- cleanup\nDROP VIEW upview;\n\n-- RETURNING having whole-row vars.\n:init_range_parted;\nUPDATE range_parted set c = 95 WHERE a = 'b' and b > 10 and c > 100 returning (range_parted), *;\n:show_data;\n\n\n-- Transition tables with update row movement\n:init_range_parted;\n\nCREATE FUNCTION trans_updatetrigfunc() RETURNS trigger LANGUAGE plpgsql AS\n$$\n  begin\n    raise notice 'trigger = %, old table = %, new table = %',\n                 TG_NAME,\n                 (select string_agg(old_table::text, ', ' ORDER BY a) FROM old_table),\n                 (select string_agg(new_table::text, ', ' ORDER BY a) FROM new_table);\n    return null;\n  end;\n$$;\n\nCREATE TRIGGER trans_updatetrig\n  AFTER UPDATE ON range_parted REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\n\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end ) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\n\n-- Enabling OLD TABLE capture for both DELETE as well as UPDATE stmt triggers\n-- should not cause DELETEd rows to be captured twice. Similar thing for\n-- INSERT triggers and inserted rows.\nCREATE TRIGGER trans_deletetrig\n  AFTER DELETE ON range_parted REFERENCING OLD TABLE AS old_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nCREATE TRIGGER trans_inserttrig\n  AFTER INSERT ON range_parted REFERENCING NEW TABLE AS new_table\n  FOR EACH STATEMENT EXECUTE PROCEDURE trans_updatetrigfunc();\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\nDROP TRIGGER trans_deletetrig ON range_parted;\nDROP TRIGGER trans_inserttrig ON range_parted;\n-- Don't drop trans_updatetrig yet. It is required below.\n\n-- Test with transition tuple conversion happening for rows moved into the\n-- new partition. This requires a trigger that references transition table\n-- (we already have trans_updatetrig). For inserted rows, the conversion\n-- is not usually needed, because the original tuple is already compatible with\n-- the desired transition tuple format. But conversion happens when there is a\n-- BR trigger because the trigger can change the inserted row. So install a\n-- BR triggers on those child partitions where the rows will be moved.\nCREATE FUNCTION func_parted_mod_b() RETURNS trigger AS $$\nBEGIN\n   NEW.b = NEW.b + 1;\n   return NEW;\nEND $$ language plpgsql;\nCREATE TRIGGER trig_c1_100 BEFORE UPDATE OR INSERT ON part_c_1_100\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d1_15 BEFORE UPDATE OR INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\nCREATE TRIGGER trig_d15_20 BEFORE UPDATE OR INSERT ON part_d_15_20\n   FOR EACH ROW EXECUTE PROCEDURE func_parted_mod_b();\n:init_range_parted;\nUPDATE range_parted set c = (case when c = 96 then 110 else c + 1 end) WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n:init_range_parted;\nUPDATE range_parted set c = c + 50 WHERE a = 'b' and b > 10 and c >= 96;\n:show_data;\n\n-- Case where per-partition tuple conversion map array is allocated, but the\n-- map is not required for the particular tuple that is routed, thanks to\n-- matching table attributes of the partition and the target table.\n:init_range_parted;\nUPDATE range_parted set b = 15 WHERE b = 1;\n:show_data;\n\nDROP TRIGGER trans_updatetrig ON range_parted;\nDROP TRIGGER trig_c1_100 ON part_c_1_100;\nDROP TRIGGER trig_d1_15 ON part_d_1_15;\nDROP TRIGGER trig_d15_20 ON part_d_15_20;\nDROP FUNCTION func_parted_mod_b();\n\n-- RLS policies with update-row-movement\n-----------------------------------------\n\nALTER TABLE range_parted ENABLE ROW LEVEL SECURITY;\nCREATE USER regress_range_parted_user;\nGRANT ALL ON range_parted, mintab TO regress_range_parted_user;\nCREATE POLICY seeall ON range_parted AS PERMISSIVE FOR SELECT USING (true);\nCREATE POLICY policy_range_parted ON range_parted for UPDATE USING (true) WITH CHECK (c % 2 = 0);\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error while moving row from\n-- part_a_10_a_20 to part_d_1_15, because we are setting 'c' to an odd number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n-- Create a trigger on part_d_1_15\nCREATE FUNCTION func_d_1_15() RETURNS trigger AS $$\nBEGIN\n   NEW.c = NEW.c + 1; -- Make even numbers odd, or vice versa\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_d_1_15 BEFORE INSERT ON part_d_1_15\n   FOR EACH ROW EXECUTE PROCEDURE func_d_1_15();\n\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n\n-- Here, RLS checks should succeed while moving row from part_a_10_a_20 to\n-- part_d_1_15. Even though the UPDATE is setting 'c' to an odd number, the\n-- trigger at the destination partition again makes it an even number.\nUPDATE range_parted set a = 'b', c = 151 WHERE a = 'a' and c = 200;\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- This should fail with RLS violation error. Even though the UPDATE is setting\n-- 'c' to an even number, the trigger at the destination partition again makes\n-- it an odd number.\nUPDATE range_parted set a = 'b', c = 150 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP TRIGGER trig_d_1_15 ON part_d_1_15;\nDROP FUNCTION func_d_1_15();\n\n-- Policy expression contains SubPlan\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_subplan on range_parted\n    AS RESTRICTIVE for UPDATE USING (true)\n    WITH CHECK ((SELECT range_parted.c <= c1 FROM mintab));\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, mintab has row with c1 = 120\nUPDATE range_parted set a = 'b', c = 122 WHERE a = 'a' and c = 200;\n-- ok\nUPDATE range_parted set a = 'b', c = 120 WHERE a = 'a' and c = 200;\n\n-- RLS policy expression contains whole row.\n\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nCREATE POLICY policy_range_parted_wholerow on range_parted AS RESTRICTIVE for UPDATE USING (true)\n   WITH CHECK (range_parted = row('b', 10, 112, 1, NULL)::range_parted);\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- ok, should pass the RLS check\nUPDATE range_parted set a = 'b', c = 112 WHERE a = 'a' and c = 200;\nRESET SESSION AUTHORIZATION;\n:init_range_parted;\nSET SESSION AUTHORIZATION regress_range_parted_user;\n-- fail, the whole row RLS check should fail\nUPDATE range_parted set a = 'b', c = 116 WHERE a = 'a' and c = 200;\n\n-- Cleanup\nRESET SESSION AUTHORIZATION;\nDROP POLICY policy_range_parted ON range_parted;\nDROP POLICY policy_range_parted_subplan ON range_parted;\nDROP POLICY policy_range_parted_wholerow ON range_parted;\nREVOKE ALL ON range_parted, mintab FROM regress_range_parted_user;\nDROP USER regress_range_parted_user;\nDROP TABLE mintab;\n\n\n-- statement triggers with update row movement\n---------------------------------------------------\n\n:init_range_parted;\n\nCREATE FUNCTION trigfunc() returns trigger language plpgsql as\n$$\n  begin\n    raise notice 'trigger = % fired on table % during %',\n                 TG_NAME, TG_TABLE_NAME, TG_OP;\n    return null;\n  end;\n$$;\n-- Triggers on root partition\nCREATE TRIGGER parent_delete_trig\n  AFTER DELETE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_update_trig\n  AFTER UPDATE ON range_parted for each statement execute procedure trigfunc();\nCREATE TRIGGER parent_insert_trig\n  AFTER INSERT ON range_parted for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_c_1_100\nCREATE TRIGGER c1_delete_trig\n  AFTER DELETE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_update_trig\n  AFTER UPDATE ON part_c_1_100 for each statement execute procedure trigfunc();\nCREATE TRIGGER c1_insert_trig\n  AFTER INSERT ON part_c_1_100 for each statement execute procedure trigfunc();\n\n-- Triggers on leaf partition part_d_1_15\nCREATE TRIGGER d1_delete_trig\n  AFTER DELETE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_update_trig\n  AFTER UPDATE ON part_d_1_15 for each statement execute procedure trigfunc();\nCREATE TRIGGER d1_insert_trig\n  AFTER INSERT ON part_d_1_15 for each statement execute procedure trigfunc();\n-- Triggers on leaf partition part_d_15_20\nCREATE TRIGGER d15_delete_trig\n  AFTER DELETE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_update_trig\n  AFTER UPDATE ON part_d_15_20 for each statement execute procedure trigfunc();\nCREATE TRIGGER d15_insert_trig\n  AFTER INSERT ON part_d_15_20 for each statement execute procedure trigfunc();\n\n-- Move all rows from part_c_100_200 to part_c_1_100. None of the delete or\n-- insert statement triggers should be fired.\nUPDATE range_parted set c = c - 50 WHERE c > 97;\n:show_data;\n\nDROP TRIGGER parent_delete_trig ON range_parted;\nDROP TRIGGER parent_update_trig ON range_parted;\nDROP TRIGGER parent_insert_trig ON range_parted;\nDROP TRIGGER c1_delete_trig ON part_c_1_100;\nDROP TRIGGER c1_update_trig ON part_c_1_100;\nDROP TRIGGER c1_insert_trig ON part_c_1_100;\nDROP TRIGGER d1_delete_trig ON part_d_1_15;\nDROP TRIGGER d1_update_trig ON part_d_1_15;\nDROP TRIGGER d1_insert_trig ON part_d_1_15;\nDROP TRIGGER d15_delete_trig ON part_d_15_20;\nDROP TRIGGER d15_update_trig ON part_d_15_20;\nDROP TRIGGER d15_insert_trig ON part_d_15_20;\n\n\n-- Creating default partition for range\n:init_range_parted;\ncreate table part_def partition of range_parted default;\n\\d+ part_def\ninsert into range_parted values ('c', 9);\n-- ok\nupdate part_def set a = 'd' where a = 'c';\n-- fail\nupdate part_def set a = 'a' where a = 'd';\n\n:show_data;\n\n-- Update row movement from non-default to default partition.\n-- fail, default partition is not under part_a_10_a_20;\nUPDATE part_a_10_a_20 set a = 'ad' WHERE a = 'a';\n-- ok\nUPDATE range_parted set a = 'ad' WHERE a = 'a';\nUPDATE range_parted set a = 'bd' WHERE a = 'b';\n:show_data;\n-- Update row movement from default to non-default partitions.\n-- ok\nUPDATE range_parted set a = 'a' WHERE a = 'ad';\nUPDATE range_parted set a = 'b' WHERE a = 'bd';\n:show_data;\n\n-- Cleanup: range_parted no longer needed.\nDROP TABLE range_parted;\n\nCREATE TABLE list_parted (\n\ta text,\n\tb int\n) PARTITION BY list (a);\nCREATE TABLE list_part1  PARTITION OF list_parted for VALUES in ('a', 'b');\nCREATE TABLE list_default PARTITION OF list_parted default;\nINSERT into list_part1 VALUES ('a', 1);\nINSERT into list_default VALUES ('d', 10);\n\n-- fail\nUPDATE list_default set a = 'a' WHERE a = 'd';\n-- ok\nUPDATE list_default set a = 'x' WHERE a = 'd';\n\nDROP TABLE list_parted;\n\n-- Test retrieval of system columns with non-consistent partition row types.\n-- This is only partially supported, as seen in the results.\n\ncreate table utrtest (a int, b text) partition by list (a);\ncreate table utr1 (a int check (a in (1)), q text, b text);\ncreate table utr2 (a int check (a in (2)), b text);\nalter table utr1 drop column q;\nalter table utrtest attach partition utr1 for values in (1);\nalter table utrtest attach partition utr2 for values in (2);\n\ninsert into utrtest values (1, 'foo')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\ninsert into utrtest values (2, 'bar')\n  returning *, tableoid::regclass;\n\nupdate utrtest set b = b || b from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass, xmin = pg_current_xact_id()::xid as xmin_ok;  -- fails\n\nupdate utrtest set a = 3 - a from (values (1), (2)) s(x) where a = s.x\n  returning *, tableoid::regclass;\n\ndelete from utrtest\n  returning *, tableoid::regclass, xmax = pg_current_xact_id()::xid as xmax_ok;\n\ndrop table utrtest;\n\n--------------\n-- Some more update-partition-key test scenarios below. This time use list\n-- partitions.\n--------------\n\n-- Setup for list partitions\nCREATE TABLE list_parted (a numeric, b int, c int8) PARTITION BY list (a);\nCREATE TABLE sub_parted PARTITION OF list_parted for VALUES in (1) PARTITION BY list (b);\n\nCREATE TABLE sub_part1(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part1 for VALUES in (1);\nCREATE TABLE sub_part2(b int, c int8, a numeric);\nALTER TABLE sub_parted ATTACH PARTITION sub_part2 for VALUES in (2);\n\nCREATE TABLE list_part1(a numeric, b int, c int8);\nALTER TABLE list_parted ATTACH PARTITION list_part1 for VALUES in (2,3);\n\nINSERT into list_parted VALUES (2,5,50);\nINSERT into list_parted VALUES (3,6,60);\nINSERT into sub_parted VALUES (1,1,60);\nINSERT into sub_parted VALUES (1,2,10);\n\n-- Test partition constraint violation when intermediate ancestor is used and\n-- constraint is inherited from upper root.\nUPDATE sub_parted set a = 2 WHERE c = 10;\n\n-- Test update-partition-key, where the unpruned partitions do not have their\n-- partition keys updated.\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\nUPDATE list_parted set b = c + a WHERE a = 2;\nSELECT tableoid::regclass::text, * FROM list_parted WHERE a = 2 ORDER BY 1;\n\n\n-- Test the case where BR UPDATE triggers change the partition key.\nCREATE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   NEW.b = 2; -- This is changing partition key column.\n   return NEW;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER parted_mod_b before update on sub_part1\n   for each row execute procedure func_parted_mod_b();\n\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\n-- This should do the tuple routing even though there is no explicit\n-- partition-key update, because there is a trigger on sub_part1.\nUPDATE list_parted set c = 70 WHERE b  = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n\nDROP TRIGGER parted_mod_b ON sub_part1;\n\n-- If BR DELETE trigger prevented DELETE from happening, we should also skip\n-- the INSERT if that delete is part of UPDATE=>DELETE+INSERT.\nCREATE OR REPLACE FUNCTION func_parted_mod_b() returns trigger as $$\nBEGIN\n   raise notice 'Trigger: Got OLD row %, but returning NULL', OLD;\n   return NULL;\nEND $$ LANGUAGE plpgsql;\nCREATE TRIGGER trig_skip_delete before delete on sub_part2\n   for each row execute procedure func_parted_mod_b();\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\n-- Drop the trigger. Now the row should be moved.\nDROP TRIGGER trig_skip_delete ON sub_part2;\nUPDATE list_parted set b = 1 WHERE c = 70;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP FUNCTION func_parted_mod_b();\n\n-- UPDATE partition-key with FROM clause. If join produces multiple output\n-- rows for the same row to be modified, we should tuple-route the row only\n-- once. There should not be any rows inserted.\nCREATE TABLE non_parted (id int);\nINSERT into non_parted VALUES (1), (1), (1), (2), (2), (2), (3), (3), (3);\nUPDATE list_parted t1 set a = 2 FROM non_parted t2 WHERE t1.a = t2.id and a = 1;\nSELECT tableoid::regclass::text, * FROM list_parted ORDER BY 1, 2, 3, 4;\nDROP TABLE non_parted;\n\n-- Cleanup: list_parted no longer needed.\nDROP TABLE list_parted;\n\n-- create custom operator class and hash function, for the same reason\n-- explained in alter_table.sql\ncreate or replace function dummy_hashint4(a int4, seed int8) returns int8 as\n$$ begin return (a + seed); end; $$ language 'plpgsql' immutable;\ncreate operator class custom_opclass for type int4 using hash as\noperator 1 = , function 2 dummy_hashint4(int4, int8);\n\ncreate table hash_parted (\n\ta int,\n\tb int\n) partition by hash (a custom_opclass, b custom_opclass);\ncreate table hpart1 partition of hash_parted for values with (modulus 2, remainder 1);\ncreate table hpart2 partition of hash_parted for values with (modulus 4, remainder 2);\ncreate table hpart3 partition of hash_parted for values with (modulus 8, remainder 0);\ncreate table hpart4 partition of hash_parted for values with (modulus 8, remainder 4);\ninsert into hpart1 values (1, 1);\ninsert into hpart2 values (2, 5);\ninsert into hpart4 values (3, 4);\n\n-- fail\nupdate hpart1 set a = 3, b=4 where a = 1;\n-- ok, row movement\nupdate hash_parted set b = b - 1 where b = 1;\n-- ok\nupdate hash_parted set b = b + 8 where b = 1;\n\n-- cleanup\ndrop table hash_parted;\ndrop operator class custom_opclass using hash;\ndrop function dummy_hashint4(a int4, seed int8);\n*/\n\n--drop all foreign tables\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 39:\nDROP SERVER sqlite_svr;\n--Testcase 40:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/libsqlite.sql",
    "content": "-- Test for SQLite library code source and defaults\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nSELECT sqlite_fdw_sqlite_version();\n--Testcase 3:\nSELECT length(sqlite_fdw_sqlite_code_source());\n--Testcase 4:\nSELECT sqlite_fdw_sqlite_code_source();\n\n--Testcase 7:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/selectfunc.sql",
    "content": "SET datestyle=ISO;\nSET timezone='Japan';\n\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER server1 FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/selectfunc.db');\n--CREATE USER MAPPING FOR CURRENT_USER SERVER server1 OPTIONS(user 'user', password 'pass');\n\n--IMPORT FOREIGN SCHEMA public FROM SERVER server1 INTO public OPTIONS(import_time_text 'false');\n--Testcase 3:\nCREATE FOREIGN TABLE s3(id text OPTIONS (key 'true'), time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text) SERVER server1;\n\n-- s3 (value1 as float8, value2 as bigint)\n--Testcase 4:\n\\d s3;\n--Testcase 5:\nSELECT * FROM s3;\n\n-- select float8() (not pushdown, remove float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select float8() (not pushdown, remove float8, result)\n-- SELECT float8(value1), float8(value2), float8(value3), float8(value4) FROM s3;\n-- sqlite fdw does not support\n\n-- select sqrt (builtin function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (buitin function, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function,, not pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, not pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE to_hex(value2) != '64';\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt (builtin function, pushdown constraints, result)\n-- SELECT sqrt(value1), sqrt(value2) FROM s3 WHERE value2 != 200;\n-- sqlite fdw does not have sqrt()\n\n-- select abs (builtin function, explain)\n--Testcase 6:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (buitin function, result)\n--Testcase 7:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3;\n\n-- select abs (builtin function, not pushdown constraints, explain)\n--Testcase 8:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, not pushdown constraints, result)\n--Testcase 9:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE to_hex(value2) != '64';\n\n-- select abs (builtin function, pushdown constraints, explain)\n--Testcase 10:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select abs (builtin function, pushdown constraints, result)\n--Testcase 11:\nSELECT abs(value1), abs(value2), abs(value3), abs(value4) FROM s3 WHERE value2 != 200;\n\n-- select log (builtin function, need to swap arguments, numeric cast, explain)\n-- log_<base>(v) : postgresql (base, v), sqlite (v, base)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (builtin function, need to swap arguments, numeric cast, result)\n-- SELECT log(value1::numeric, value2::numeric) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, float8, result)\n-- SELECT log(value1, 0.1) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, bigint, result)\n-- SELECT log(value2, 3) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log (stub function, need to swap arguments, mix type, result)\n-- SELECT log(value1, value2) FROM s3 WHERE value1 != 1;\n-- sqlite fdw does not have log()\n\n-- select log2 (stub function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select log2 (stub function, result)\n-- SELECT log2(value1),log2(value2) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select spread (stub agg function, explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, result)\n-- SELECT spread(value1),spread(value2),spread(value3),spread(value4) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function, raise exception if not expected type)\n-- SELECT spread(value1::numeric),spread(value2::numeric),spread(value3::numeric),spread(value4::numeric) FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs as nest function with agg (pushdown, explain)\n--Testcase 12:\nEXPLAIN VERBOSE\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest function with agg (pushdown, result)\n--Testcase 13:\nSELECT sum(value3),abs(sum(value3)) FROM s3;\n\n-- select abs as nest with log2 (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs as nest with log2 (pushdown, result)\n-- SELECT abs(log2(value1)),abs(log2(1/value1)) FROM s3;\n-- sqlite fdw does not have log2()\n\n-- select abs with non pushdown func and explicit constant (explain)\n--Testcase 14:\nEXPLAIN VERBOSE\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select abs with non pushdown func and explicit constant (result)\n--Testcase 15:\nSELECT abs(value3), pi(), 4.1 FROM s3;\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant (pushdown, result)\n-- SELECT sqrt(count(value1)), pi(), 4.1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select sqrt as nest function with agg and explicit constant and tag (error, explain)\n-- EXPLAIN VERBOSE\n-- SELECT sqrt(count(value1)), pi(), 4.1, tag1 FROM s3;\n-- sqlite fdw does not have sqrt()\n\n-- select spread (stub agg function and group by influx_time() and tag) (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by influx_time() and tag) (result)\n-- SELECT spread(\"value1\"),influx_time(time, interval '1s'),tag1 FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY influx_time(time, interval '1s'), tag1;\n-- sqlite fdw does not have spread() and influx_time()\n\n-- select spread (stub agg function and group by tag only) (result)\n-- SELECT tag1,spread(\"value1\") FROM s3 WHERE time >= to_timestamp(0) and time <= to_timestamp(4) GROUP BY tag1;\n-- sqlite fdw does not have spread()\n\n-- select spread (stub agg function and other aggs) (result)\n-- SELECT sum(\"value1\"),spread(\"value1\"),count(\"value1\") FROM s3;\n-- sqlite fdw does not have spread()\n\n-- select abs with order by (explain)\n--Testcase 16:\nEXPLAIN VERBOSE\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by (result)\n--Testcase 17:\nSELECT value1, abs(1-value1) FROM s3 order by abs(1-value1);\n\n-- select abs with order by index (result)\n--Testcase 18:\nSELECT value1, abs(1-value1) FROM s3 order by 2,1;\n\n-- select abs with order by index (result)\n--Testcase 19:\nSELECT value1, abs(1-value1) FROM s3 order by 1,2;\n\n-- select abs and as\n--Testcase 20:\nSELECT abs(value3) as abs1 FROM s3;\n\n-- select spread over join query (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread over join query (result, stub call error)\n-- SELECT spread(t1.value1), spread(t2.value1) FROM s3 t1 INNER JOIN s3 t2 ON (t1.value1 = t2.value1) where t1.value1 = 0.1;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain)\n-- EXPLAIN VERBOSE\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select spread with having (explain, cannot pushdown, stub call error)\n-- SELECT spread(value1) FROM s3 HAVING spread(value1) > 100;\n-- sqlite fdw does not have spread()\n\n-- select abs with arithmetic and tag in the middle (explain)\n--Testcase 21:\nEXPLAIN VERBOSE\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select abs with arithmetic and tag in the middle (result)\n--Testcase 22:\nSELECT abs(value1) + 1, value2, tag1, sqrt(value2) FROM s3;\n\n-- select with order by limit (explain)\n--Testcase 23:\nEXPLAIN VERBOSE\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select with order by limit (explain)\n--Testcase 24:\nSELECT abs(value1), abs(value3), sqrt(value2) FROM s3 ORDER BY abs(value3) LIMIT 1;\n\n-- select mixing with non pushdown func (all not pushdown, explain)\n--Testcase 25:\nEXPLAIN VERBOSE\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- select mixing with non pushdown func (result)\n--Testcase 26:\nSELECT abs(value1), sqrt(value2), upper(tag1) FROM s3;\n\n-- sqlite data prep\n\n-- sqlite pushdown supported functions (explain)\n--Testcase 27:\nEXPLAIN VERBOSE\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown supported functions (result)\n--Testcase 28:\nSELECT abs(value3), length(tag1), lower(str1), ltrim(str2), ltrim(str1, '-'), replace(str1, 'XYZ', 'ABC'), round(value3), rtrim(str1, '-'), rtrim(str2), substr(str1, 4), substr(str1, 4, 3) FROM s3;\n\n-- sqlite pushdown nest functions (explain)\n--Testcase 32:\nEXPLAIN VERBOSE\nSELECT round(abs(value2), 0) FROM s3;\n\n-- sqlite pushdown nest functions (result)\n--Testcase 33:\nSELECT round(abs(value2), 0) FROM s3;\n\n-- select mod (builtin function, explain)\n--Testcase 34:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, result)\n--Testcase 35:\nSELECT value1, mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3;\n\n-- select mod (builtin function, not pushdown constraints, explain)\n--Testcase 36:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, not pushdown constraints, result)\n--Testcase 37:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE to_hex(value2) = '64';\n\n-- select mod (builtin function, pushdown constraints, explain)\n--Testcase 38:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, pushdown constraints, result)\n--Testcase 39:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE value2 != 200;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 40:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 41:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(value2, 2) != 1;\n\n-- select mod (builtin function, mod in constraints, explain)\n--Testcase 42:\nEXPLAIN VERBOSE\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod (builtin function, mod in constraints, result)\n--Testcase 43:\nSELECT mod(value2, 2), mod(value4, 2), mod(5, 2) FROM s3 WHERE mod(5, 2) > value1;\n\n-- select mod as nest function with agg (pushdown, explain)\n--Testcase 44:\nEXPLAIN VERBOSE\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest function with agg (pushdown, result)\n--Testcase 45:\nSELECT sum(value3),mod(sum(value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, explain)\n--Testcase 46:\nEXPLAIN VERBOSE\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod as nest with abs (pushdown, result)\n--Testcase 47:\nSELECT value1, mod(abs(value2), 2),mod(abs(1/value2), 2) FROM s3;\n\n-- select mod with non pushdown func and explicit constant (explain)\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with non pushdown func and explicit constant (result)\n--Testcase 49:\nSELECT value1, mod(value2, 2), pi(), 4.1 FROM s3;\n\n-- select mod with order by (explain)\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by (result)\n--Testcase 51:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY mod((1-value2), 2);\n\n-- select mod with order by index (result)\n--Testcase 52:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 2,1;\n\n-- select mod with order by index (result)\n--Testcase 53:\nSELECT value1, mod((1-value2), 2) FROM s3 ORDER BY 1,2;\n\n-- select mod with group by (explain)\n--Testcase 54:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by (result)\n--Testcase 55:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2);\n\n-- select mod with group by index (result)\n--Testcase 56:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 2,1;\n\n-- select mod with group by index (result)\n--Testcase 57:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2;\n\n-- select mod with group by having (explain)\n--Testcase 58:\nEXPLAIN VERBOSE\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by having (result)\n--Testcase 59:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY value1, mod((1-value2), 2) HAVING avg(value1) > 0;\n\n-- select mod with group by index having (result)\n--Testcase 60:\nSELECT value1, mod((1-value2), 2) FROM s3 GROUP BY 1,2 HAVING value1 > 1;\n\n-- select mod and as\n--Testcase 61:\nSELECT value1, mod(value2, 2) as mod1 FROM s3;\n\n--Testcase 29:\nDROP FOREIGN TABLE s3;\n--Testcase 30:\nDROP SERVER server1;\n--Testcase 31:\nDROP EXTENSION sqlite_fdw;\n"
  },
  {
    "path": "sql/17.0/sqlite_fdw.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 129:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 130:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n--Testcase 131:\nCREATE FOREIGN TABLE department(department_id int OPTIONS (key 'true'), department_name text) SERVER sqlite_svr; \n--Testcase 132:\nCREATE FOREIGN TABLE employee(emp_id int OPTIONS (key 'true'), emp_name text, emp_dept_id int) SERVER sqlite_svr;\n--Testcase 133:\nCREATE FOREIGN TABLE empdata(emp_id int OPTIONS (key 'true'), emp_dat bytea) SERVER sqlite_svr;\n--Testcase 134:\nCREATE FOREIGN TABLE numbers(a int OPTIONS (key 'true'), b varchar(255)) SERVER sqlite_svr;\n--Testcase 135:\nCREATE FOREIGN TABLE multiprimary(a int, b int OPTIONS (key 'true'), c int OPTIONS(key 'true')) SERVER sqlite_svr;\n--Testcase 136:\nCREATE FOREIGN TABLE noprimary(a int, b text) SERVER sqlite_svr;\n--Testcase 137:\nCREATE FOREIGN TABLE RO_RW_test(i int OPTIONS (key 'true'), a text, b float, c int) SERVER sqlite_svr;\n\n--Testcase 1:\nSELECT * FROM department LIMIT 10;\n--Testcase 2:\nSELECT * FROM employee LIMIT 10;\n--Testcase 3:\nSELECT * FROM empdata LIMIT 10;\n\n--Testcase 4:\nINSERT INTO department VALUES(generate_series(1,100), 'dept - ' || generate_series(1,100));\n--Testcase 5:\nINSERT INTO employee VALUES(generate_series(1,100), 'emp - ' || generate_series(1,100), generate_series(1,100));\n--Testcase 6:\nINSERT INTO empdata  VALUES(1, decode ('01234567', 'hex'));\n\n--Testcase 7:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 8:\nINSERT INTO numbers VALUES(2, 'Two');\n--Testcase 9:\nINSERT INTO numbers VALUES(3, 'Three');\n--Testcase 10:\nINSERT INTO numbers VALUES(4, 'Four');\n--Testcase 11:\nINSERT INTO numbers VALUES(5, 'Five');\n--Testcase 12:\nINSERT INTO numbers VALUES(6, 'Six');\n--Testcase 13:\nINSERT INTO numbers VALUES(7, 'Seven');\n--Testcase 14:\nINSERT INTO numbers VALUES(8, 'Eight');\n--Testcase 15:\nINSERT INTO numbers VALUES(9, 'Nine');\n\n--Testcase 16:\nSELECT count(*) FROM department;\n--Testcase 17:\nSELECT count(*) FROM employee;\n--Testcase 18:\nSELECT count(*) FROM empdata;\n\n--Testcase 19:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n\n--Testcase 20:\nEXPLAIN (COSTS FALSE) SELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) LIMIT 10;\n\n--Testcase 21:\nSELECT * FROM department d, employee e WHERE d.department_id = e.emp_dept_id LIMIT 10;\n--Testcase 22:\nSELECT * FROM department d, employee e WHERE d.department_id IN (SELECT department_id FROM department) ORDER BY d.department_id LIMIT 10;\n--Testcase 23:\nSELECT * FROM empdata;\n\n--Testcase 24:\nDELETE FROM employee WHERE emp_id = 10;\n\n--Testcase 25:\nSELECT COUNT(*) FROM department LIMIT 10;\n--Testcase 26:\nSELECT COUNT(*) FROM employee WHERE emp_id = 10;\n\n--Testcase 27:\nUPDATE employee SET emp_name = 'UPDATEd emp' WHERE emp_id = 20;\n--Testcase 28:\nSELECT emp_id, emp_name FROM employee WHERE emp_name like 'UPDATEd emp';\n\n--Testcase 29:\nUPDATE empdata SET emp_dat = decode ('0123', 'hex');\n--Testcase 30:\nSELECT * FROM empdata;\n\n--Testcase 31:\nSELECT * FROM employee LIMIT 10;\n--Testcase 32:\nSELECT * FROM employee WHERE emp_id IN (1);\n--Testcase 33:\nSELECT * FROM employee WHERE emp_id IN (1,3,4,5);\n--Testcase 34:\nSELECT * FROM employee WHERE emp_id IN (10000,1000);\n\n--Testcase 35:\nSELECT * FROM employee WHERE emp_id NOT IN (1) LIMIT 5;\n--Testcase 36:\nSELECT * FROM employee WHERE emp_id NOT IN (1,3,4,5) LIMIT 5;\n--Testcase 37:\nSELECT * FROM employee WHERE emp_id NOT IN (10000,1000) LIMIT 5;\n\n--Testcase 38:\nSELECT * FROM employee WHERE emp_id NOT IN (SELECT emp_id FROM employee WHERE emp_id IN (1,10));\n--Testcase 39:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 1', 'emp - 2') LIMIT 5;\n--Testcase 40:\nSELECT * FROM employee WHERE emp_name NOT IN ('emp - 10') LIMIT 5;\n\n--Testcase 41:\nSELECT * FROM numbers WHERE (CASE WHEN a % 2 = 0 THEN 1 WHEN a % 5 = 0 THEN 1 ELSE 0 END) = 1;\n--Testcase 42:\nSELECT * FROM numbers WHERE (CASE b WHEN 'Two' THEN 1 WHEN 'Six' THEN 1 ELSE 0 END) = 1;\n\n--Testcase 152:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE (round(abs(a)) = 1);\n--Testcase 153:\nSELECT * FROM numbers WHERE (round(abs(a)) = 1);\n\n--Testcase 137:\ncreate or replace function test_param_WHERE() returns void as $$\nDECLARE\n  n varchar;\nBEGIN\n  FOR x IN 1..9 LOOP\n--Testcase 138:\n    SELECT b INTO n from numbers WHERE a=x;\n    raise notice 'Found number %', n;\n  end loop;\n  return;\nEND\n$$ LANGUAGE plpgsql;\n--Testcase 43:\nSELECT test_param_WHERE();\n\n--Testcase 44:\nSELECT b from numbers WHERE a=1;\n--Testcase 45:\nEXPLAIN(COSTS OFF) SELECT b from numbers WHERE a=1;\n\n--Testcase 46:\nSELECT a FROM numbers WHERE b = (SELECT NULL::text);\n\n\n--Testcase 47:\nPREPARE stmt1 (int, int) AS\n  SELECT * FROM numbers WHERE a=$1 or a=$2;\n--Testcase 48:\nEXECUTE stmt1(1,2);\n--Testcase 49:\nEXECUTE stmt1(2,2); \n--Testcase 50:\nEXECUTE stmt1(3,2); \n--Testcase 51:\nEXECUTE stmt1(4,2);\n-- generic plan\n--Testcase 52:\nEXECUTE stmt1(5,2); \n--Testcase 53:\nEXECUTE stmt1(6,2); \n--Testcase 54:\nEXECUTE stmt1(7,2); \n\n--Testcase 55:\nDELETE FROM employee;\n--Testcase 56:\nDELETE FROM department;\n--Testcase 57:\nDELETE FROM empdata;\n--Testcase 58:\nDELETE FROM numbers;\n\nBEGIN;\n--Testcase 59:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 60:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n\n--Testcase 61:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 62:\nINSERT INTO numbers VALUES(3, 'Three');\nROLLBACK;\n--Testcase 63:\nSELECT * from numbers;\n\nBEGIN;\n--Testcase 64:\nINSERT INTO numbers VALUES(4, 'Four');\nSAVEPOINT my_savepoint;\n--Testcase 65:\nINSERT INTO numbers VALUES(5, 'Five');\nROLLBACK TO SAVEPOINT my_savepoint;\n--Testcase 66:\nINSERT INTO numbers VALUES(6, 'Six');\nCOMMIT;\n\n--Testcase 67:\nSELECT * from numbers;\n\n-- duplicate key\n--Testcase 68:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 69:\nDELETE from numbers;\n\nBEGIN;\n--Testcase 70:\nINSERT INTO numbers VALUES(1, 'One');\n--Testcase 71:\nINSERT INTO numbers VALUES(2, 'Two');\nCOMMIT;\n-- violate unique constraint\n--Testcase 72:\nUPDATE numbers SET b='Two' WHERE a = 1; \n--Testcase 73:\nSELECT * from numbers;\n\n-- push down\n--Testcase 74:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n-- (1,2,3) is pushed down\n--Testcase 75:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (1,2,3) AND (1,2) < (a,5);\n\n--Testcase 76:\nexplain (verbose, costs off) SELECT * from numbers WHERE a in (a+2*a,5);\n\n--Testcase 77:\nexplain (verbose, costs off) SELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n--Testcase 78:\nSELECT * from numbers WHERE  a = any(ARRAY[2,3,4,5]::int[]);\n--Testcase 79:\nSELECT * from numbers WHERE  a = any(ARRAY[1,2,a]::int[]);\n\n-- ANY with ARRAY expression\n--Testcase 154:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n--Testcase 155:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, a + 1]);\n\n--Testcase 156:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n--Testcase 157:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, a + 1]);\n\n--Testcase 158:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n--Testcase 159:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, a + 1]);\n\n--Testcase 160:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n--Testcase 161:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, a + 1]);\n\n--Testcase 162:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n--Testcase 163:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, a + 1]);\n\n--Testcase 164:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n--Testcase 165:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, a + 1]);\n\n-- ANY with ARRAY const\n--Testcase 166:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n--Testcase 167:\nSELECT * FROM numbers WHERE a = ANY(ARRAY[1, 2]);\n\n--Testcase 168:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n--Testcase 169:\nSELECT * FROM numbers WHERE a <> ANY(ARRAY[1, 2]);\n\n--Testcase 170:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n--Testcase 171:\nSELECT * FROM numbers WHERE a >= ANY(ARRAY[1, 2]);\n\n--Testcase 172:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n--Testcase 173:\nSELECT * FROM numbers WHERE a <= ANY(ARRAY[1, 2]);\n\n--Testcase 174:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n--Testcase 175:\nSELECT * FROM numbers WHERE a > ANY(ARRAY[1, 2]);\n\n--Testcase 176:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n--Testcase 177:\nSELECT * FROM numbers WHERE a < ANY(ARRAY[1, 2]);\n\n--Testcase 210:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n--Testcase 211:\nSELECT * FROM numbers WHERE a = ANY('{1, 2, 3}');\n\n--Testcase 212:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n--Testcase 213:\nSELECT * FROM numbers WHERE a <> ANY('{1, 2, 3}');\n\n-- ALL with ARRAY expression\n--Testcase 178:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n--Testcase 179:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, a * 1]);\n\n--Testcase 180:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n--Testcase 181:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, a + 1]);\n\n--Testcase 182:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n--Testcase 183:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, a / 1]);\n\n--Testcase 184:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n--Testcase 185:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, a + 1]);\n\n--Testcase 186:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n--Testcase 187:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[1, a - 1]);\n\n--Testcase 188:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n--Testcase 189:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, a + 1]);\n\n-- ALL with ARRAY const\n--Testcase 190:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n--Testcase 191:\nSELECT * FROM numbers WHERE a = ALL(ARRAY[1, 1]);\n\n--Testcase 192:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n--Testcase 193:\nSELECT * FROM numbers WHERE a <> ALL(ARRAY[1, 3]);\n\n--Testcase 194:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n--Testcase 195:\nSELECT * FROM numbers WHERE a >= ALL(ARRAY[1, 2]);\n\n--Testcase 196:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n--Testcase 197:\nSELECT * FROM numbers WHERE a <= ALL(ARRAY[1, 2]);\n\n--Testcase 198:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n--Testcase 199:\nSELECT * FROM numbers WHERE a > ALL(ARRAY[0, 1]);\n\n--Testcase 200:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n--Testcase 201:\nSELECT * FROM numbers WHERE a < ALL(ARRAY[2, 3]);\n\n-- ANY/ALL with TEXT ARRAY const\n--Testcase 202:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n--Testcase 203:\nSELECT * FROM numbers WHERE b = ANY(ARRAY['One', 'Two']);\n\n--Testcase 204:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n--Testcase 205:\nSELECT * FROM numbers WHERE b <> ALL(ARRAY['One', 'Four']);\n\n--Testcase 206:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n--Testcase 207:\nSELECT * FROM numbers WHERE b > ANY(ARRAY['One', 'Two']);\n\n--Testcase 208:\nEXPLAIN VERBOSE SELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n--Testcase 209:\nSELECT * FROM numbers WHERE b > ALL(ARRAY['Four', 'Five']);\n\n--Testcase 80:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 81:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 82:\nUPDATE multiprimary SET b = 10 WHERE c = 3;\n--Testcase 83:\nSELECT * from multiprimary;\n--Testcase 84:\nUPDATE multiprimary SET a = 10 WHERE a = 1;\n--Testcase 85:\nSELECT * from multiprimary;\n--Testcase 86:\nUPDATE multiprimary SET a = 100, b=200, c=300 WHERE a=10 AND b=10;\n--Testcase 87:\nSELECT * from multiprimary;\n--Testcase 88:\nUPDATE multiprimary SET a = 1234;\n--Testcase 89:\nSELECT * from multiprimary;\n--Testcase 90:\nUPDATE multiprimary SET a = a+1, b=b+1 WHERE b=200 AND c=300;\n\n--Testcase 91:\nSELECT * from multiprimary;\n--Testcase 92:\nDELETE from multiprimary WHERE a = 1235;\n--Testcase 93:\nSELECT * from multiprimary;\n--Testcase 94:\nDELETE from multiprimary WHERE b = 2;\n--Testcase 95:\nSELECT * from multiprimary;\n\n--Testcase 96:\nINSERT INTO multiprimary VALUES(1,2,3);\n--Testcase 97:\nINSERT INTO multiprimary VALUES(1,2,4);\n--Testcase 98:\nINSERT INTO multiprimary VALUES(1,10,20);\n--Testcase 99:\nINSERT INTO multiprimary VALUES(2,20,40);\n\n\n\n--Testcase 100:\nSELECT count(distinct a) from multiprimary;\n--Testcase 101:\nSELECT sum(b),max(b), min(b) from multiprimary;\n--Testcase 102:\nSELECT sum(b+5)+2 from multiprimary group by b/2 order by b/2;\n--Testcase 103:\nSELECT sum(a) from multiprimary group by b having sum(a) > 0 order by sum(a);\n--Testcase 104:\nSELECT sum(a) A from multiprimary group by b having avg(abs(a)) > 0 AND sum(a) > 0 order by A;\n--Testcase 105:\nSELECT count(nullif(a, 1)) FROM multiprimary;\n--Testcase 106:\nSELECT a,a FROM multiprimary group by 1,2;\n--Testcase 107:\nSELECT * from multiprimary, numbers WHERE multiprimary.a=numbers.a;\n\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n--Testcase 109:\nSELECT sum(a) FROM multiprimary HAVING sum(a) > 0;\n\n--Testcase 110:\nINSERT INTO numbers VALUES(4, 'Four');\n\n-- All where clauses are pushed down\n--Testcase 111:\nSELECT * FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n--Testcase 112:\nEXPLAIN (verbose, costs off)  SELECT b, length(b) FROM numbers WHERE abs(a) = 4 AND upper(b) = 'FOUR' AND lower(b) = 'four';\n\n-- Only \"length(b) = 4\" are pushed down\n--Testcase 113:\nSELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n--Testcase 114:\nEXPLAIN (verbose, costs off) SELECT b, length(b) FROM numbers WHERE length(b) = 4 AND power(1, a) != 0 AND length(reverse(b)) = 4;\n\n--Testcase 115:\nINSERT INTO multiprimary (b,c) VALUES (99, 100);\n--Testcase 116:\nSELECT c FROM multiprimary WHERE COALESCE(a,b,c) = 99;\n\n--Testcase 139:\nCREATE FOREIGN TABLE multiprimary2(a int, b int, c int OPTIONS(column_name 'b')) SERVER sqlite_svr OPTIONS (table 'multiprimary');\n--Testcase 117:\nSELECT * FROM multiprimary2;\n--Testcase 214:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN a OPTIONS(ADD column_name 'b');\n--Testcase 118:\nSELECT * FROM multiprimary2;\n--Testcase 215:\nALTER FOREIGN TABLE multiprimary2 ALTER COLUMN b OPTIONS (column_name 'nosuch column');\n--Testcase 119:\nSELECT * FROM multiprimary2;\n--Testcase 140:\nEXPLAIN (VERBOSE) SELECT * FROM multiprimary2;\n--Testcase 120:\nSELECT a FROM multiprimary2 WHERE b = 1;\n\n\n--Testcase 141:\nCREATE FOREIGN TABLE columntest(a int OPTIONS(column_name 'a a', key 'true'), \"b b\" int  OPTIONS(key 'true'), c int OPTIONS(column_name 'c c')) SERVER sqlite_svr;\n--Testcase 121:\nINSERT INTO columntest VALUES(1,2,3);\n--Testcase 122:\nUPDATE columntest SET c=10 WHERE a = 1;\n--Testcase 123:\nSELECT * FROM columntest;\n--Testcase 124:\nUPDATE columntest SET a=100 WHERE c = 10;\n--Testcase 125:\nSELECT * FROM columntest;\n--Testcase 126:\nINSERT INTO noprimary VALUES(1,'2');\n--Testcase 127:\nINSERT INTO noprimary SELECT * FROM noprimary;\n--Testcase 128:\nSELECT * FROM noprimary;\n\n--get version\n--Testcase 153:\n\\df sqlite*\n--Testcase 154:\nSELECT * FROM public.sqlite_fdw_version();\n--Testcase 155:\nSELECT sqlite_fdw_version();\n\n-- issue #44 github\n--Testcase 156:\nCREATE FOREIGN TABLE fts_table (name text,  description text) SERVER sqlite_svr;\n\n--Testcase 157:\nINSERT INTO fts_table VALUES ('this is name', 'this is description');\n\n--Testcase 158:\nSELECT * FROM fts_table; -- should work\n\n--Testcase 159:\nALTER TABLE fts_table ALTER COLUMN name TYPE int;\n\n--Testcase 160:\nSELECT * FROM fts_table; -- should fail\n\n-- issue #62 github\n--Testcase 236:\nINSERT INTO noprimary VALUES (4, 'Test''s');\n--Testcase 237:\nINSERT INTO noprimary VALUES (5, 'Test');\n\n--Testcase 238:\nSELECT * FROM noprimary;\n--Testcase 239:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b = 'Test''s';\n--Testcase 240:\nSELECT * FROM noprimary where b = 'Test''s';\n\n--Testcase 241:\nEXPLAIN VERBOSE\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n--Testcase 242:\nSELECT * FROM noprimary where b in ('Test''s', 'Test');\n\n-- INSERT/UPDATE whole row with generated column\n--Testcase 216:\nCREATE FOREIGN TABLE grem1_1 (\n  a int generated always as (0) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_1');\n\n--Testcase 217:\nINSERT INTO grem1_1 DEFAULT VALUES;\n--Testcase 218:\nSELECT * FROM grem1_1;\n\n--Testcase 219:\nCREATE FOREIGN TABLE grem1_2 (\n  a int generated always as (0) stored,\n  b int generated always as (1) stored,\n  c int generated always as (2) stored,\n  d int generated always as (3) stored)\n  SERVER sqlite_svr OPTIONS(table 'grem1_2');\n--Testcase 220:\nINSERT INTO grem1_2 DEFAULT VALUES;\n--Testcase 221:\nSELECT * FROM grem1_2;\n\n-- Executable test case for pushdown CASE expressions (results)\n--Testcase 224:\nCREATE FOREIGN TABLE case_exp(c1 int OPTIONS (key 'true'), c3 text, c6 varchar(10)) SERVER sqlite_svr;\n\n--Testcase 225:\nINSERT INTO case_exp\n  SELECT id,\n         to_char(id, 'FM00000'),\n         id % 10\n  FROM generate_series(1, 10) id;\n\n--Testcase 226:\nSELECT * FROM case_exp;\n\n-- CASE arg WHEN\n--Testcase 227:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n--Testcase 228:\nSELECT * FROM case_exp WHERE c1 > (CASE mod(c1, 4) WHEN 0 THEN 1 WHEN 2 THEN 50 ELSE 100 END);\n\n-- these are shippable\n--Testcase 229:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 230:\nSELECT * FROM case_exp WHERE CASE c6 WHEN 'foo' THEN true ELSE c3 < 'bar' END;\n--Testcase 231:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n--Testcase 232:\nSELECT * FROM case_exp WHERE CASE c3 WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n-- but this is not because of collation\n--Testcase 233:\nSELECT * FROM case_exp WHERE CASE c3 COLLATE \"C\" WHEN c6 THEN true ELSE c3 < 'bar' END;\n\n--Testcase 234:\nDELETE FROM case_exp;\n\n-- readonly/readwrite tests\n-- Full combinations\n-- force_RO default SERVER default TABLE default\n-- force_RO default SERVER true    TABLE default\n-- force_RO default SERVER false   TABLE default\n-- force_RO default SERVER default TABLE true\n-- force_RO default SERVER default TABLE false\n-- force_RO default SERVER true    TABLE true\n-- force_RO default SERVER false   TABLE true\n-- force_RO default SERVER false   TABLE false\n-- force_RO default SERVER true    TABLE false\n-- force_RO false   SERVER default TABLE default\n-- force_RO false   SERVER true    TABLE default\n-- force_RO false   SERVER false   TABLE default\n-- force_RO false   SERVER default TABLE true\n-- force_RO false   SERVER default TABLE false\n-- force_RO false   SERVER true    TABLE true\n-- force_RO false   SERVER false   TABLE true\n-- force_RO false   SERVER false   TABLE false\n-- force_RO false   SERVER true    TABLE false\n-- force_RO true    SERVER default TABLE default\n-- force_RO true    SERVER true    TABLE default\n-- force_RO true    SERVER false   TABLE default\n-- force_RO true    SERVER default TABLE true\n-- force_RO true    SERVER default TABLE false\n-- force_RO true    SERVER true    TABLE true\n-- force_RO true    SERVER false   TABLE true\n-- force_RO true    SERVER false   TABLE false\n-- force_RO true    SERVER true    TABLE false\n\n-- force_RO default SERVER default TABLE default\n--Testcase 235:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 236:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 237:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO default SERVER true TABLE default\n--Testcase 238:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 239:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 240:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 241:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 242:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n\n-- force_RO default SERVER false TABLE default\n--Testcase 243:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 244:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 245:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 246:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER default TABLE true\n--Testcase 247:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 248:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 249:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 250:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 251:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO default SERVER default TABLE false\n--Testcase 252:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 253:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 254:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 255:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO default SERVER true TABLE true\n--Testcase 256:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 257:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 258:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 258:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 260:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 261:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO default SERVER false TABLE true\n--Testcase 262:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 263:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 264:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 265:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO default SERVER false TABLE false\n--Testcase 266:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 267:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 268:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 269:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO default SERVER true TABLE false\n--Testcase 270:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 271:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 272:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 273:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 274:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 275:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 276:\nSELECT * FROM RO_RW_test ORDER BY i;\n\n--Bind error message test for some unsupported data type\n--Testcase 277:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 278:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 279:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 277:\nDELETE FROM RO_RW_test;\n\n--Testcase 278:\nALTER SERVER sqlite_svr OPTIONS (ADD force_readonly 'false');\n\n-- force_RO false SERVER default TABLE default\n--Testcase 279:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- OK\n--Testcase 280:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- OK\n--Testcase 281:\nDELETE FROM RO_RW_test WHERE i=2; -- OK\n\n-- force_RO false SERVER true TABLE default\n--Testcase 282:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 283:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- OK\n--Testcase 284:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- OK\n--Testcase 285:\nDELETE FROM RO_RW_test WHERE i=3; -- OK\n--Testcase 286:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- OK\n-- force_RO false SERVER false TABLE default\n--Testcase 287:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 288:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 289:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 290:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER default TABLE true\n--Testcase 291:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 292:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 293:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- OK\n--Testcase 294:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- OK\n--Testcase 295:\nDELETE FROM RO_RW_test WHERE i=6; -- OK\n\n-- force_RO false SERVER default TABLE false\n--Testcase 296:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 297:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 298:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 299:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO false SERVER true TABLE true\n--Testcase 300:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 301:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true');\n--Testcase 302:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- OK\n--Testcase 303:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 304:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 305:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- OK\n\n-- force_RO false SERVER false TABLE true\n--Testcase 306:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 307:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- OK\n--Testcase 308:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- OK\n--Testcase 309:\nDELETE FROM RO_RW_test WHERE i=9; -- OK\n\n-- force_RO false SERVER false TABLE false\n--Testcase 310:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 311:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 312:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 313:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO false SERVER true TABLE false\n--Testcase 314:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 315:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 316:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 317:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 318:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 319:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 320:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 321:\nDELETE FROM RO_RW_test;\n\n--Testcase 322:\nALTER SERVER sqlite_svr OPTIONS (SET force_readonly 'true');\n\n-- force_RO true SERVER default TABLE default\n--Testcase 323:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (2, 'B', 3.01, 1); -- ERR\n--Testcase 324:\nUPDATE RO_RW_test SET a='C' WHERE i=2; -- ERR\n--Testcase 325:\nDELETE FROM RO_RW_test WHERE i=2; -- ERR\n\n-- force_RO true SERVER true TABLE default\n--Testcase 326:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true');\n--Testcase 327:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (3, 'D', 5.02, 8); -- ERR\n--Testcase 328:\nUPDATE RO_RW_test SET a='E' WHERE i=3; -- ERR\n--Testcase 329:\nDELETE FROM RO_RW_test WHERE i=3; -- ERR\n--Testcase 330:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (4, 'F', 0.005, 5); -- ERR\n-- force_RO true SERVER false TABLE default\n--Testcase 331:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 332:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (5, 'H', 0.03, 7); -- ERR\n--Testcase 333:\nUPDATE RO_RW_test SET a='E' WHERE i=4; -- ERR\n--Testcase 334:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER default TABLE true\n--Testcase 335:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 336:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (ADD updatable 'true');\n--Testcase 337:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (6, 'I', 1.403, 2); -- ERR\n--Testcase 338:\nUPDATE RO_RW_test SET a='J' WHERE i=6; -- ERR\n--Testcase 339:\nDELETE FROM RO_RW_test WHERE i=6; -- ERR\n\n-- force_RO true SERVER default TABLE false\n--Testcase 340:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 341:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (7, 'K', 2.01, 4); -- ERR\n--Testcase 342:\nUPDATE RO_RW_test SET a='L' WHERE i=4; -- ERR\n--Testcase 343:\nDELETE FROM RO_RW_test WHERE i=4; -- ERR\n\n-- force_RO true SERVER true TABLE true\n--Testcase 344:\nALTER SERVER sqlite_svr OPTIONS (ADD updatable 'true'); -- ERR\n--Testcase 345:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'true'); -- ERR\n--Testcase 346:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (8, 'M', 5.02, 8); -- ERR\n--Testcase 347:\nUPDATE RO_RW_test SET a='N' WHERE i=8; -- OK\n--Testcase 348:\nDELETE FROM RO_RW_test WHERE i=8; -- OK\n--Testcase 349:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (9, 'O', 3.21, 9); -- ERR\n\n-- force_RO true SERVER false TABLE true\n--Testcase 350:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'false');\n--Testcase 351:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (10, 'P', 4.15, 1); -- ERR\n--Testcase 352:\nUPDATE RO_RW_test SET a='Q' WHERE i=9; -- ERR\n--Testcase 353:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER false TABLE false\n--Testcase 354:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (SET updatable 'false');\n--Testcase 355:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (11, 'Q', 2.27, 5); -- ERR\n--Testcase 356:\nUPDATE RO_RW_test SET a='S' WHERE i=9; -- ERR\n--Testcase 357:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n-- force_RO true SERVER true TABLE false\n--Testcase 358:\nALTER SERVER sqlite_svr OPTIONS (SET updatable 'true');\n--Testcase 359:\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (12, 'R', 6.18, 11); -- ERR\n--Testcase 360:\nUPDATE RO_RW_test SET a='T' WHERE i=9; -- ERR\n--Testcase 361:\nDELETE FROM RO_RW_test WHERE i=9; -- ERR\n\n--Testcase 362:\nALTER SERVER sqlite_svr OPTIONS (DROP updatable);\n--Testcase 363:\nALTER FOREIGN TABLE RO_RW_test OPTIONS (DROP updatable);\n\n--Testcase 364:\nALTER SERVER sqlite_svr OPTIONS (DROP force_readonly);\n\n--Testcase 365:\nSELECT * FROM RO_RW_test ORDER BY i;\n--Testcase 366:\nDROP FOREIGN TABLE RO_RW_test;\n-- End of RO/RW test\n\n--Bind error message test for some unsupported data type\n--Testcase 366:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE tsquery;\n--Testcase 367:\nINSERT INTO numbers VALUES(8,'fat & (rat | cat)');\n--Testcase 368:\nALTER FOREIGN TABLE numbers ALTER COLUMN b TYPE varchar(255);\n\n--Testcase 142:\nDROP FUNCTION test_param_WHERE();\n--Testcase 143:\nDROP FOREIGN TABLE numbers;\n--Testcase 144:\nDROP FOREIGN TABLE department;\n--Testcase 145:\nDROP FOREIGN TABLE employee;\n--Testcase 146:\nDROP FOREIGN TABLE empdata;\n--Testcase 147:\nDROP FOREIGN TABLE multiprimary;\n--Testcase 148:\nDROP FOREIGN TABLE multiprimary2;\n--Testcase 149:\nDROP FOREIGN TABLE columntest;\n--Testcase 150:\nDROP FOREIGN TABLE noprimary;\n--Testcase 161:\nDROP FOREIGN TABLE fts_table;\n--Testcase 222:\nDROP FOREIGN TABLE grem1_1;\n--Testcase 223:\nDROP FOREIGN TABLE grem1_2;\n--Testcase 235:\nDROP FOREIGN TABLE case_exp;\n\n--Testcase 151:\nDROP SERVER sqlite_svr;\n--Testcase 152:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/bitstring.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 02:\nCREATE FOREIGN TABLE \"type_BIT\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6)) SERVER sqlite_svr OPTIONS (table 'type_BIT');\n--Testcase 03:\nDROP FOREIGN TABLE IF EXISTS \"type_BIT+\";\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" bit(6), \"t\" text, \"l\" smallint, \"bi\" bigint OPTIONS (column_name 'b')) SERVER sqlite_svr OPTIONS (table 'type_BIT+');\n--Testcase 05: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (1, 1);\n--Testcase 06: type mismatch\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (2, 2);\n--Testcase 07: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (3, '1');\n--Testcase 08: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (4, '10');\n--Testcase 09: improper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 10:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 11:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 12:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 13:\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 14: type mismatch with proper data length\nINSERT INTO \"type_BIT\" (\"i\", \"b\") VALUES (10, 53);\n--Testcase 15:\nSELECT * FROM \"type_BIT+\";\n--Testcase 16:\nSELECT * FROM \"type_BIT\" WHERE b < '110110';\n--Testcase 17:\nSELECT * FROM \"type_BIT\" WHERE b > '110110';\n--Testcase 18:\nSELECT * FROM \"type_BIT\" WHERE b = '110110';\n\n--Testcase 20:\nCREATE FOREIGN TABLE \"type_VARBIT\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70)) SERVER sqlite_svr OPTIONS (table 'type_VARBIT');\n--Testcase 21:\nDROP FOREIGN TABLE IF EXISTS \"type_VARBIT+\";\n--Testcase 22:\nCREATE FOREIGN TABLE \"type_VARBIT+\"( \"i\" int OPTIONS (key 'true'), \"b\" varbit(70), \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_VARBIT+');\n--Testcase 23:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (1, '1');\n--Testcase 24:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (2, '10');\n--Testcase 25:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (3, '11');\n--Testcase 26:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (4, '100');\n--Testcase 27:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (5, '101');\n--Testcase 28:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (6, '110110');\n--Testcase 29:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (7, '111001');\n--Testcase 30:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (8, '110000');\n--Testcase 31:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (9, '100001');\n--Testcase 32:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (10, '0100100101011001010010101000111110110101101101111011000101010');\n--Testcase 33:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (11, '01001001010110010100101010001111101101011011011110110001010101');\n\n--Testcase 34:\nSELECT * FROM \"type_VARBIT+\";\n--Testcase 35:\nSELECT * FROM \"type_VARBIT+\" WHERE b < '110110';\n--Testcase 36:\nSELECT * FROM \"type_VARBIT+\" WHERE b > '110110';\n--Testcase 37:\nSELECT * FROM \"type_VARBIT+\" WHERE b = '110110';\n\n--Testcase 38:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (12, '010010010101100101001010100011111011010110110111101100010101010');\n--Testcase 39:\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (13, '0100100101011001010010101000111110110101101101111011000101010101');\n--Testcase 40: very long bit string, expected ERROR, 65 bits\nINSERT INTO \"type_VARBIT\" (\"i\", \"b\") VALUES (14, '01001001010110010100101010001111101101011011011110110001010101010');\n--Testcase 41:\nSELECT * FROM \"type_VARBIT+\" WHERE \"i\" > 10;\n\n--Testcase 42:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 43:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 44:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 45:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 46:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 47:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n--Testcase 48:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 49:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 50:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_BIT\" b1 INNER JOIN \"type_BIT\" b2 ON true;\n--Testcase 51:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_BIT\";\n--Testcase 52:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_BIT\";\n--Testcase 53:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_BIT\";\n\n--Testcase 54:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 55:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 56:\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 57:\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 58:\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 59:\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" | b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 61:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" & b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 62:\nEXPLAIN VERBOSE\nSELECT b1.\"i\" \"i₁\", b1.\"b\" \"b₁\", b2.\"i\" \"i₂\", b2.\"b\" \"b₂\", b1.\"b\" # b2.\"b\" \"res\" FROM \"type_VARBIT\" b1 INNER JOIN \"type_VARBIT\" b2 ON true;\n--Testcase 63:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" >> 2 \"res\" FROM \"type_VARBIT\";\n--Testcase 64:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", \"b\" << 3 \"res\" FROM \"type_VARBIT\";\n--Testcase 65:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\", ~ \"b\" \"res\" FROM \"type_VARBIT\";\n\n--Testcase 66:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 67:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 68:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 69:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 70:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 71:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 72:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 73:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 74:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 75:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 76:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 77:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 78:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 79:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 80:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 81:\nSELECT \"i\", \"b\", \"b\" & B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 82:\nSELECT \"i\", \"b\", \"b\" | B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 83:\nSELECT \"i\", \"b\", \"b\" # B'101011' \"res\" FROM \"type_BIT\";\n--Testcase 84:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 85:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 86:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 87:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 88:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 89:\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n--Testcase 90:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" & B'101011') IS NOT NULL;\n--Testcase 91:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" | B'101011') IS NOT NULL;\n--Testcase 92:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" # B'101011') IS NOT NULL;\n--Testcase 93:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" >> 1) IS NOT NULL;\n--Testcase 94:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (\"b\" << 2) IS NOT NULL;\n--Testcase 95:\nEXPLAIN VERBOSE\nSELECT \"i\", \"b\" FROM \"type_BIT\" WHERE (~ \"b\") IS NOT NULL;\n\n--Testcase 005:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/bool.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 000:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 001:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int OPTIONS (key 'true'), b bool) SERVER sqlite_svr;\n--Testcase 02:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (1, TRUE);\n--Testcase 03:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (2, FALSE);\n--Testcase 04:\nCREATE FOREIGN TABLE \"type_BOOLEAN+\"( \"i\" int, \"b\" bool, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN+');\n--Testcase 05:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE text;\n--Testcase 06:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (3, TRUE);\n--Testcase 07:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (4, FALSE);\n--Testcase 08:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (5, true);\n--Testcase 09:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (6, false);\n--Testcase 10:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (7, 'Yes');\n--Testcase 11:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (8, 'YeS');\n--Testcase 12:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (9, 'yes');\n--Testcase 13:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (10, 'no');\n--Testcase 14:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (11, 'No');\n--Testcase 15:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (12, 'nO');\n--Testcase 16:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (13, 'off');\n--Testcase 17:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (14, 'oFf');\n--Testcase 18:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (15, 'on');\n--Testcase 19:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (16, 'ON');\n--Testcase 20:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (17, 't');\n--Testcase 21:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (18, 'T');\n--Testcase 22:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (19, 'Y');\n--Testcase 23:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (20, 'y');\n--Testcase 24:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (21, 'F');\n--Testcase 25:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (22, 'f');\n--Testcase 26:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (23, 'x');\n--Testcase 27:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (24, '0');\n--Testcase 28:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (25, '1');\n--Testcase 29:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (26, NULL);\n--Testcase 30:\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 31:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 32:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN\";\n--Testcase 33:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 34: ERR - invalid text affinity because not ISO:SQL text input\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 35\nDELETE FROM \"type_BOOLEAN\" WHERE i = 23;\n--Testcase 36:\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 37:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NULL;\n--Testcase 38:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b IS NOT NULL;\n--Testcase 39:\nSELECT * FROM \"type_BOOLEAN+\" WHERE b;\n--Testcase 40:\nSELECT * FROM \"type_BOOLEAN+\" WHERE NOT b;\n\n--Testcase 41:\nCREATE FOREIGN TABLE \"type_BOOLEANpk\" (col bool OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 42:\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 43:\nINSERT INTO \"type_BOOLEANpk\" VALUES (FALSE);\n--Testcase 44: ERR - primary key\nINSERT INTO \"type_BOOLEANpk\" VALUES (TRUE);\n--Testcase 45:\nDELETE FROM \"type_BOOLEANpk\";\n\n--Testcase 46:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE float8;\n--Testcase 47:\nINSERT INTO \"type_BOOLEAN\"(i, b) VALUES (27, 3.14159265358979);\n--Testcase 48:\nALTER FOREIGN TABLE \"type_BOOLEAN\" ALTER COLUMN \"b\" TYPE bool;\n--Testcase 49: ERR - invalid float for bool column\nSELECT * FROM \"type_BOOLEAN+\";\n--Testcase 50\nDELETE FROM \"type_BOOLEAN\" WHERE i = 27;\n--Testcase 51:\nSELECT * FROM \"type_BOOLEAN+\";\n\n--Testcase 52:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE b;\n--Testcase 53:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN\" SET b = NULL WHERE NOT b;\n--Testcase 54:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE b;\n--Testcase 55:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN\" WHERE NOT b;\n\n--Testcase 56:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n--Testcase 57:\nSELECT *, NOT b nb FROM \"type_BOOLEAN+\" b;\n\n--Testcase 58:\nCREATE FOREIGN TABLE \"type_BOOLEAN_oper\"( \"i\" int  OPTIONS (key 'true'), i1 smallint, b1 boolean, i2 smallint, b2 boolean) SERVER sqlite_svr OPTIONS (table 'type_BOOLEAN_oper');\n--Testcase 59: see INIT.SQL with mixed affinity boolean data\nSELECT * FROM \"type_BOOLEAN_oper\";\n--Testcase 60:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n--Testcase 61:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\";\n\n--Testcase 62:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n--Testcase 63:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 AND b2;\n\n--Testcase 64:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n--Testcase 65:\nSELECT DISTINCT b1, b2, b1 AND b2 a, b1 OR b2 o FROM \"type_BOOLEAN_oper\" WHERE b1 OR b2;\n\n--Testcase 66:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 67:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = NULL WHERE NOT b1;\n--Testcase 68:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 69:\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 70:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_BOOLEAN_oper\" SET b1 = false WHERE b1 OR b2;\n--Testcase 71:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 72:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 73:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b1 AND b2;\n--Testcase 74:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 75:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE NOT b2;\n--Testcase 76:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n--Testcase 77:\nDELETE FROM \"type_BOOLEAN_oper\" WHERE b2;\n--Testcase 78:\nSELECT DISTINCT b1, b2 FROM \"type_BOOLEAN_oper\";\n\n--Testcase 79:\nDELETE FROM \"type_BOOLEAN\";\n\n--Testcase 003:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/float4.sql",
    "content": "--\n-- FLOAT4\n--\n--Testcase 46:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 47:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 48:\nCREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 49:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('    0.0');\n--Testcase 2:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30   ');\n--Testcase 3:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     -34.84    ');\n--Testcase 4:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20');\n--Testcase 5:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20');\n\n-- test for over and under flow\n--Testcase 6:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70');\n--Testcase 7:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70');\n--Testcase 8:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70');\n--Testcase 9:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70');\n\n--Testcase 50:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8);\n--Testcase 51:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8);\n--Testcase 52:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8);\n--Testcase 53:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8);\n\n--Testcase 54:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e400');\n--Testcase 55:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400');\n--Testcase 56:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400');\n--Testcase 57:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400');\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('       ');\n--Testcase 12:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('     - 3.0');\n--Testcase 17:\nINSERT INTO FLOAT4_TBL(f1) VALUES ('123            5');\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_FLOAT4(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_FLOAT4 VALUES ('34.5', 1), ('xyz', 2), ('1e400', 3);\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3), 'float4');\n\n\n-- special inputs\n--Testcase 18:\nDELETE FROM FLOAT4_TMP;\n--Testcase 58:\nINSERT INTO FLOAT4_TMP VALUES ('NaN'::float4);\n--Testcase 59:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 20:\nDELETE FROM FLOAT4_TMP;\n--Testcase 60:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4);\n--Testcase 61:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 21:\nDELETE FROM FLOAT4_TMP;\n--Testcase 62:\nINSERT INTO FLOAT4_TMP VALUES ('   NAN  '::float4);\n--Testcase 63:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 22:\nDELETE FROM FLOAT4_TMP;\n--Testcase 64:\nINSERT INTO FLOAT4_TMP VALUES ('infinity'::float4);\n--Testcase 65:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 23:\nDELETE FROM FLOAT4_TMP;\n--Testcase 66:\nINSERT INTO FLOAT4_TMP VALUES ('          -INFINiTY   '::float4);\n--Testcase 67:\nSELECT f1 FROM FLOAT4_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT4_TMP;\n--Testcase 68:\nINSERT INTO FLOAT4_TMP VALUES ('N A N'::float4);\n--Testcase 69:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 26:\nDELETE FROM FLOAT4_TMP;\n--Testcase 70:\nINSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4);\n--Testcase 71:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 27:\nDELETE FROM FLOAT4_TMP;\n--Testcase 72:\nINSERT INTO FLOAT4_TMP VALUES (' INFINITY    x'::float4);\n--Testcase 73:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT4_TMP;\n--Testcase 74:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0);\n--Testcase 75:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 30:\nDELETE FROM FLOAT4_TMP;\n--Testcase 76:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4);\n--Testcase 77:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 185:\nDELETE FROM FLOAT4_TMP;\n--Testcase 186:\nINSERT INTO FLOAT4_TMP VALUES ('42'::float4 / 'Infinity'::float4);\n--Testcase 187:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 31:\nDELETE FROM FLOAT4_TMP;\n--Testcase 78:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4);\n--Testcase 79:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 188:\nDELETE FROM FLOAT4_TMP;\n--Testcase 189:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / '0'::float4);\n--Testcase 190:\nSELECT f1 FROM FLOAT4_TMP;\n--Testcase 32:\nDELETE FROM FLOAT4_TMP;\n--Testcase 80:\nINSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4);\n--Testcase 81:\nSELECT f1 FROM FLOAT4_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT4_TBL;\n\n--SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3';\n\n--SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3';\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1;\n\n--SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 35:\nSELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 36:\nSELECT f.* FROM FLOAT4_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 37:\nSELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 38:\nSELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 39:\nSELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 40:\nSELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f\n   WHERE f.f1 > '0.0';\n\n-- test divide by zero\n--Testcase 41:\nSELECT f.f1 / '0.0' from FLOAT4_TBL f;\n\n--Testcase 42:\nSELECT * FROM FLOAT4_TBL;\n\n-- test the unary float4abs operator\n--Testcase 43:\nSELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f;\n\n--Testcase 44:\nUPDATE FLOAT4_TBL\n   SET f1 = FLOAT4_TBL.f1 * '-1'\n   WHERE FLOAT4_TBL.f1 > '0.0';\n\n--Testcase 45:\nSELECT * FROM FLOAT4_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 82:\nDELETE FROM FLOAT4_TMP;\n--Testcase 83:\nINSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4);\n--Testcase 84:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 85:\nDELETE FROM FLOAT4_TMP;\n--Testcase 86:\nINSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4);\n--Testcase 87:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 88:\nDELETE FROM FLOAT4_TMP;\n--Testcase 89:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4);\n--Testcase 90:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 91:\nDELETE FROM FLOAT4_TMP;\n--Testcase 92:\nINSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4);\n--Testcase 93:\nSELECT f1::int2 FROM FLOAT4_TMP;\n\n--Testcase 94:\nDELETE FROM FLOAT4_TMP;\n--Testcase 95:\nINSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4);\n--Testcase 96:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 97:\nDELETE FROM FLOAT4_TMP;\n--Testcase 98:\nINSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4);\n--Testcase 99:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 100:\nDELETE FROM FLOAT4_TMP;\n--Testcase 101:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4);\n--Testcase 102:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 103:\nDELETE FROM FLOAT4_TMP;\n--Testcase 104:\nINSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4);\n--Testcase 105:\nSELECT f1::int4 FROM FLOAT4_TMP;\n\n--Testcase 106:\nDELETE FROM FLOAT4_TMP;\n--Testcase 107:\nINSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4);\n--Testcase 108:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 109:\nDELETE FROM FLOAT4_TMP;\n--Testcase 110:\nINSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4);\n--Testcase 111:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 112:\nDELETE FROM FLOAT4_TMP;\n--Testcase 113:\nINSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4);\n--Testcase 114:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n--Testcase 115:\nDELETE FROM FLOAT4_TMP;\n--Testcase 116:\nINSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4);\n--Testcase 117:\nSELECT f1::int8 FROM FLOAT4_TMP;\n\n\n-- Test for correct input rounding in edge cases.\n-- These lists are from Paxson 1991, excluding subnormals and\n-- inputs of over 9 sig. digits.\n--Testcase 118:\nDELETE FROM FLOAT4_TMP;\n--Testcase 119:\nINSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4);\n--Testcase 120:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 121:\nDELETE FROM FLOAT4_TMP;\n--Testcase 122:\nINSERT INTO FLOAT4_TMP VALUES ('67e14'::float4);\n--Testcase 123:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 124:\nDELETE FROM FLOAT4_TMP;\n--Testcase 125:\nINSERT INTO FLOAT4_TMP VALUES ('985e15'::float4);\n--Testcase 126:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 127:\nDELETE FROM FLOAT4_TMP;\n--Testcase 128:\nINSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4);\n--Testcase 129:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 130:\nDELETE FROM FLOAT4_TMP;\n--Testcase 131:\nINSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4);\n--Testcase 132:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 133:\nDELETE FROM FLOAT4_TMP;\n--Testcase 134:\nINSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4);\n--Testcase 135:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 136:\nDELETE FROM FLOAT4_TMP;\n--Testcase 137:\nINSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4);\n--Testcase 138:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 139:\nDELETE FROM FLOAT4_TMP;\n--Testcase 140:\nINSERT INTO FLOAT4_TMP VALUES ('57e18'::float4);\n--Testcase 141:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 142:\nDELETE FROM FLOAT4_TMP;\n--Testcase 143:\nINSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4);\n--Testcase 144:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 145:\nDELETE FROM FLOAT4_TMP;\n--Testcase 146:\nINSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4);\n--Testcase 147:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 148:\nDELETE FROM FLOAT4_TMP;\n--Testcase 149:\nINSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4);\n--Testcase 150:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 151:\nDELETE FROM FLOAT4_TMP;\n--Testcase 152:\nINSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4);\n--Testcase 153:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 154:\nDELETE FROM FLOAT4_TMP;\n--Testcase 155:\nINSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4);\n--Testcase 156:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 157:\nDELETE FROM FLOAT4_TMP;\n--Testcase 158:\nINSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4);\n--Testcase 159:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 160:\nDELETE FROM FLOAT4_TMP;\n--Testcase 161:\nINSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4);\n--Testcase 162:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- Test that the smallest possible normalized input value inputs\n-- correctly, either in 9-significant-digit or shortest-decimal\n-- format.\n--\n-- exact val is             1.1754943508...\n-- shortest val is          1.1754944000\n-- midpoint to next val is  1.1754944208...\n\n--Testcase 163:\nDELETE FROM FLOAT4_TMP;\n--Testcase 164:\nINSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4);\n--Testcase 165:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n--Testcase 166:\nDELETE FROM FLOAT4_TMP;\n--Testcase 167:\nINSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4);\n--Testcase 168:\nSELECT float4send(f1) FROM FLOAT4_TMP;\n\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 169:\ncreate type xfloat4;\n--Testcase 170:\ncreate function xfloat4in(cstring) returns xfloat4 immutable strict\n  language internal as 'int4in';\n--Testcase 171:\ncreate function xfloat4out(xfloat4) returns cstring immutable strict\n  language internal as 'int4out';\n--Testcase 172:\ncreate type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4);\n--Testcase 173:\ncreate cast (xfloat4 as float4) without function;\n--Testcase 174:\ncreate cast (float4 as xfloat4) without function;\n--Testcase 175:\ncreate cast (xfloat4 as integer) without function;\n--Testcase 176:\ncreate cast (integer as xfloat4) without function;\n\n-- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 177:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 178:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'00000001'),\n  (x'00000002'), (x'00000003'),\n  (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'),\n  (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'),\n  -- stress values\n  (x'0053c4f4'),  -- 7693e-42\n  (x'006c85c4'),  -- 996622e-44\n  (x'0041ca76'),  -- 60419369e-46\n  (x'004b7678'),  -- 6930161142e-48\n  -- taken from upstream testsuite\n  (x'00000007'),\n  (x'00424fe2'),\n  -- borderline between subnormal and normal\n  (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff');\n--Testcase 179:\nselect float4send(flt) as ibits,\n       flt\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\nbegin;\n\n--Testcase 180:\ninsert into testdata(bits) values\n  (x'00000000'),\n  -- smallest normal values\n  (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'),\n  (x'00800006'),\n  -- small normal values chosen for short vs. long output\n  (x'008002f1'), (x'008002f2'), (x'008002f3'),\n  (x'00800e17'), (x'00800e18'), (x'00800e19'),\n  -- assorted values (random mantissae)\n  (x'01000001'), (x'01102843'), (x'01a52c98'),\n  (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'),\n  (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'),\n  (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'),\n  (x'1f850283'), (x'2874a9d6'),\n  -- values around 5e-08\n  (x'3356bf94'), (x'3356bf95'), (x'3356bf96'),\n  -- around 1e-07\n  (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'),\n  -- around 3e-07 .. 1e-04\n  (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'),\n  (x'350637bc'), (x'350637bd'), (x'350637be'),\n  (x'35719786'), (x'35719787'), (x'35719788'),\n  (x'358637bc'), (x'358637bd'), (x'358637be'),\n  (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'),\n  (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'),\n  -- format crossover at 1e-04\n  (x'38d1b714'), (x'38d1b715'), (x'38d1b716'),\n  (x'38d1b717'), (x'38d1b718'), (x'38d1b719'),\n  (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'),\n  (x'38d1b71d'),\n  --\n  (x'38dffffe'), (x'38dfffff'), (x'38e00000'),\n  (x'38efffff'), (x'38f00000'), (x'38f00001'),\n  (x'3a83126e'), (x'3a83126f'), (x'3a831270'),\n  (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'),\n  (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'),\n  -- chosen to need 9 digits for 3dcccd70\n  (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'),\n  --\n  (x'3effffff'), (x'3f000000'), (x'3f000001'),\n  (x'3f333332'), (x'3f333333'), (x'3f333334'),\n  -- approach 1.0 with increasing numbers of 9s\n  (x'3f666665'), (x'3f666666'), (x'3f666667'),\n  (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'),\n  (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'),\n  (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'),\n  (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'),\n  (x'3f7fffee'), (x'3f7fffef'),\n  -- values very close to 1\n  (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'),\n  (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'),\n  (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'),\n  (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'),\n  (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'),\n  (x'3f7fffff'),\n  (x'3f800000'),\n  (x'3f800001'), (x'3f800002'), (x'3f800003'),\n  (x'3f800004'), (x'3f800005'), (x'3f800006'),\n  (x'3f800007'), (x'3f800008'), (x'3f800009'),\n  -- values 1 to 1.1\n  (x'3f80000f'), (x'3f800010'), (x'3f800011'),\n  (x'3f800012'), (x'3f800013'), (x'3f800014'),\n  (x'3f800017'), (x'3f800018'), (x'3f800019'),\n  (x'3f80001a'), (x'3f80001b'), (x'3f80001c'),\n  (x'3f800029'), (x'3f80002a'), (x'3f80002b'),\n  (x'3f800053'), (x'3f800054'), (x'3f800055'),\n  (x'3f800346'), (x'3f800347'), (x'3f800348'),\n  (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'),\n  (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'),\n  (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'),\n  --\n  (x'3fc90fdb'), -- pi/2\n  (x'402df854'), -- e\n  (x'40490fdb'), -- pi\n  --\n  (x'409fffff'), (x'40a00000'), (x'40a00001'),\n  (x'40afffff'), (x'40b00000'), (x'40b00001'),\n  (x'411fffff'), (x'41200000'), (x'41200001'),\n  (x'42c7ffff'), (x'42c80000'), (x'42c80001'),\n  (x'4479ffff'), (x'447a0000'), (x'447a0001'),\n  (x'461c3fff'), (x'461c4000'), (x'461c4001'),\n  (x'47c34fff'), (x'47c35000'), (x'47c35001'),\n  (x'497423ff'), (x'49742400'), (x'49742401'),\n  (x'4b18967f'), (x'4b189680'), (x'4b189681'),\n  (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'),\n  (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'),\n  (x'501502f8'), (x'501502f9'), (x'501502fa'),\n  (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'),\n  -- stress values\n  (x'1f6c1e4a'),  -- 5e-20\n  (x'59be6cea'),  -- 67e14\n  (x'5d5ab6c4'),  -- 985e15\n  (x'2cc4a9bd'),  -- 55895e-16\n  (x'15ae43fd'),  -- 7038531e-32\n  (x'2cf757ca'),  -- 702990899e-20\n  (x'665ba998'),  -- 25933168707e13\n  (x'743c3324'),  -- 596428896559e20\n  -- exercise fixed-point memmoves\n  (x'47f1205a'),\n  (x'4640e6ae'),\n  (x'449a5225'),\n  (x'42f6e9d5'),\n  (x'414587dd'),\n  (x'3f9e064b'),\n  -- these cases come from the upstream's testsuite\n  -- BoundaryRoundEven\n  (x'4c000004'),\n  (x'50061c46'),\n  (x'510006a8'),\n  -- ExactValueRoundEven\n  (x'48951f84'),\n  (x'45fd1840'),\n  -- LotsOfTrailingZeros\n  (x'39800000'),\n  (x'3b200000'),\n  (x'3b900000'),\n  (x'3bd00000'),\n  -- Regression\n  (x'63800000'),\n  (x'4b000000'),\n  (x'4b800000'),\n  (x'4c000001'),\n  (x'4c800b0d'),\n  (x'00d24584'),\n  (x'00d90b88'),\n  (x'45803f34'),\n  (x'4f9f24f7'),\n  (x'3a8722c3'),\n  (x'5c800041'),\n  (x'15ae43fd'),\n  (x'5d4cccfb'),\n  (x'4c800001'),\n  (x'57800ed8'),\n  (x'5f000000'),\n  (x'700000f0'),\n  (x'5f23e9ac'),\n  (x'5e9502f9'),\n  (x'5e8012b1'),\n  (x'3c000028'),\n  (x'60cde861'),\n  (x'03aa2a50'),\n  (x'43480000'),\n  (x'4c000000'),\n  -- LooksLikePow5\n  (x'5D1502F9'),\n  (x'5D9502F9'),\n  (x'5E1502F9'),\n  -- OutputLength\n  (x'3f99999a'),\n  (x'3f9d70a4'),\n  (x'3f9df3b6'),\n  (x'3f9e0419'),\n  (x'3f9e0610'),\n  (x'3f9e064b'),\n  (x'3f9e0651'),\n  (x'03d20cfe');\n\n--Testcase 181:\nselect float4send(flt) as ibits,\n       flt,\n       flt::text::float4 as r_flt,\n       float4send(flt::text::float4) as obits,\n       float4send(flt::text::float4) = float4send(flt) as correct\n  from (select bits::bit(32)::integer::xfloat4::float4 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n\n-- clean up, lest opr_sanity complain\n--Testcase 182:\ndrop type xfloat4 cascade;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/float8.sql",
    "content": "--\n-- FLOAT8\n--\n--Testcase 113:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 114:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 115:\nCREATE FOREIGN TABLE FLOAT8_TBL(f1 float8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 116:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    0.0   ');\n--Testcase 2:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1004.30  ');\n--Testcase 3:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('   -34.84');\n--Testcase 4:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e+200');\n--Testcase 5:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('1.2345678901234e-200');\n\n-- test for underflow and overflow handling\n--Testcase 6:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e400'::float8);\n--Testcase 7:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e400'::float8);\n--Testcase 8:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('10e-400'::float8);\n--Testcase 9:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('-10e-400'::float8);\n\n-- test smallest normalized input\n--Testcase 117:\nINSERT INTO FLOAT8_TMP(f1) VALUES ('2.2250738585072014E-308'::float8);\n--Testcase 118:\nSELECT float8send(f1) FROM FLOAT8_TMP;\n\n-- bad input\n--Testcase 10:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('');\n--Testcase 11:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('     ');\n--Testcase 12:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('xyz');\n--Testcase 13:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.0.0');\n--Testcase 14:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5 . 0');\n--Testcase 15:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('5.   0');\n--Testcase 16:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('    - 3');\n--Testcase 17:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('123           5');\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_FLOAT8(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_FLOAT8 VALUES ('34.5', 1), ('xyz', 2), ('1e4000', 3);\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'float8') FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_FLOAT8 WHERE id = 3), 'float8');\n\n-- special inputs\n--Testcase 19:\nDELETE FROM FLOAT8_TMP;\n--Testcase 119:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8);\n--Testcase 120:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 20:\nDELETE FROM FLOAT8_TMP;\n--Testcase 121:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8);\n--Testcase 122:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 21:\nDELETE FROM FLOAT8_TMP;\n--Testcase 123:\nINSERT INTO FLOAT8_TMP VALUES ('   NAN  '::float8);\n--Testcase 124:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 22:\nDELETE FROM FLOAT8_TMP;\n--Testcase 125:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8);\n--Testcase 126:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 23:\nDELETE FROM FLOAT8_TMP;\n--Testcase 127:\nINSERT INTO FLOAT8_TMP VALUES ('          -INFINiTY   '::float8);\n--Testcase 128:\nSELECT f1 FROM FLOAT8_TMP;\n\n-- bad special inputs\n--Testcase 25:\nDELETE FROM FLOAT8_TMP;\n--Testcase 129:\nINSERT INTO FLOAT8_TMP VALUES ('N A N'::float8);\n--Testcase 130:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 26:\nDELETE FROM FLOAT8_TMP;\n--Testcase 131:\nINSERT INTO FLOAT8_TMP VALUES ('NaN x'::float8);\n--Testcase 132:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 27:\nDELETE FROM FLOAT8_TMP;\n--Testcase 133:\nINSERT INTO FLOAT8_TMP VALUES (' INFINITY    x'::float8);\n--Testcase 134:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 28:\nDELETE FROM FLOAT8_TMP;\n--Testcase 135:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 + 100.0);\n--Testcase 136:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 30:\nDELETE FROM FLOAT8_TMP;\n--Testcase 137:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity'::float8 / 'Infinity'::float8);\n--Testcase 138:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 272:\nDELETE FROM FLOAT8_TMP;\n--Testcase 273:\nINSERT INTO FLOAT8_TMP VALUES ('42'::float8 / 'Infinity'::float8);\n--Testcase 274:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 31:\nDELETE FROM FLOAT8_TMP;\n--Testcase 139:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / 'nan'::float8);\n--Testcase 140:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 275:\nDELETE FROM FLOAT8_TMP;\n--Testcase 276:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::float8 / '0'::float8);\n--Testcase 277:\nSELECT f1 FROM FLOAT8_TMP;\n--Testcase 32:\nDELETE FROM FLOAT8_TMP;\n--Testcase 141:\nINSERT INTO FLOAT8_TMP VALUES ('nan'::numeric::float8);\n--Testcase 142:\nSELECT f1 FROM FLOAT8_TMP;\n\n--Testcase 34:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 35:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 <> '1004.3';\n\n--Testcase 36:\nSELECT f.* FROM FLOAT8_TBL f WHERE f.f1 = '1004.3';\n\n--Testcase 37:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' > f.f1;\n\n--Testcase 38:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 < '1004.3';\n\n--Testcase 39:\nSELECT f.* FROM FLOAT8_TBL f WHERE '1004.3' >= f.f1;\n\n--Testcase 40:\nSELECT f.* FROM FLOAT8_TBL f WHERE  f.f1 <= '1004.3';\n\n--Testcase 41:\nSELECT f.f1, f.f1 * '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 42:\nSELECT f.f1, f.f1 + '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 43:\nSELECT f.f1, f.f1 / '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 44:\nSELECT f.f1, f.f1 - '-10' AS x\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n--Testcase 45:\nSELECT f.f1 ^ '2.0' AS square_f1\n   FROM FLOAT8_TBL f where f.f1 = '1004.3';\n\n-- absolute value\n--Testcase 46:\nSELECT f.f1, @f.f1 AS abs_f1\n   FROM FLOAT8_TBL f;\n\n-- truncate\n--Testcase 47:\nSELECT f.f1, trunc(f.f1) AS trunc_f1\n   FROM FLOAT8_TBL f;\n\n-- round\n--Testcase 48:\nSELECT f.f1, round(f.f1) AS round_f1\n   FROM FLOAT8_TBL f;\n\n-- ceil / ceiling\n--Testcase 49:\nselect ceil(f1) as ceil_f1 from float8_tbl f;\n--Testcase 50:\nselect ceiling(f1) as ceiling_f1 from float8_tbl f;\n\n-- floor\n--Testcase 51:\nselect floor(f1) as floor_f1 from float8_tbl f;\n\n-- sign\n--Testcase 52:\nselect sign(f1) as sign_f1 from float8_tbl f;\n\n-- avoid bit-exact output here because operations may not be bit-exact.\n--Testcase 278:\nSET extra_float_digits = 0;\n\n-- square root\nBEGIN;\n--Testcase 53:\nDELETE FROM FLOAT8_TBL;\n--Testcase 54:\nINSERT INTO FLOAT8_TBL VALUES ('64'::float8);\n--Testcase 55:\nSELECT sqrt(f1) as eight FROM FLOAT8_TBL;\n--Testcase 56:\nSELECT |/f1 as eight FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 57:\nSELECT f.f1, |/f.f1 AS sqrt_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- power\n--Testcase 58:\nDELETE FROM FLOAT8_TMP;\n--Testcase 143:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, '0.5'::float8);\n--Testcase 144:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 60:\nDELETE FROM FLOAT8_TMP;\n--Testcase 145:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, '0.5'::float8);\n--Testcase 146:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 61:\nDELETE FROM FLOAT8_TMP;\n--Testcase 147:\nINSERT INTO FLOAT8_TMP VALUES ('144'::float8, 'NaN'::float8);\n--Testcase 148:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 62:\nDELETE FROM FLOAT8_TMP;\n--Testcase 149:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8, 'NaN'::float8);\n--Testcase 150:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 63:\nDELETE FROM FLOAT8_TMP;\n--Testcase 151:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'NaN'::float8);\n--Testcase 152:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 64:\nDELETE FROM FLOAT8_TMP;\n--Testcase 153:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'NaN'::float8);\n--Testcase 154:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 65:\nDELETE FROM FLOAT8_TMP;\n--Testcase 155:\nINSERT INTO FLOAT8_TMP VALUES ('NaN'::float8 , '0'::float8);\n--Testcase 156:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 279:\nDELETE FROM FLOAT8_TMP;\n--Testcase 280:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '0'::float8);\n--Testcase 281:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 282:\nDELETE FROM FLOAT8_TMP;\n--Testcase 283:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '0'::float8);\n--Testcase 284:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 285:\nDELETE FROM FLOAT8_TMP;\n--Testcase 286:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, 'infinity'::float8);\n--Testcase 287:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 288:\nDELETE FROM FLOAT8_TMP;\n--Testcase 289:\nINSERT INTO FLOAT8_TMP VALUES ('0'::float8, '-infinity'::float8);\n--Testcase 290:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 291:\nDELETE FROM FLOAT8_TMP;\n--Testcase 292:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, 'infinity'::float8);\n--Testcase 293:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 294:\nDELETE FROM FLOAT8_TMP;\n--Testcase 295:\nINSERT INTO FLOAT8_TMP VALUES ('1'::float8, '-infinity'::float8);\n--Testcase 296:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 297:\nDELETE FROM FLOAT8_TMP;\n--Testcase 298:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, 'infinity'::float8);\n--Testcase 299:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 300:\nDELETE FROM FLOAT8_TMP;\n--Testcase 301:\nINSERT INTO FLOAT8_TMP VALUES ('-1'::float8, '-infinity'::float8);\n--Testcase 302:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 303:\nDELETE FROM FLOAT8_TMP;\n--Testcase 304:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, 'infinity'::float8);\n--Testcase 305:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 306:\nDELETE FROM FLOAT8_TMP;\n--Testcase 307:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, 'infinity'::float8);\n--Testcase 308:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 309:\nDELETE FROM FLOAT8_TMP;\n--Testcase 310:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, 'infinity'::float8);\n--Testcase 311:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 312:\nDELETE FROM FLOAT8_TMP;\n--Testcase 313:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, 'infinity'::float8);\n--Testcase 314:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 315:\nDELETE FROM FLOAT8_TMP;\n--Testcase 316:\nINSERT INTO FLOAT8_TMP VALUES ('0.1'::float8, '-infinity'::float8);\n--Testcase 317:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 318:\nDELETE FROM FLOAT8_TMP;\n--Testcase 319:\nINSERT INTO FLOAT8_TMP VALUES ('-0.1'::float8, '-infinity'::float8);\n--Testcase 320:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 321:\nDELETE FROM FLOAT8_TMP;\n--Testcase 322:\nINSERT INTO FLOAT8_TMP VALUES ('1.1'::float8, '-infinity'::float8);\n--Testcase 323:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 324:\nDELETE FROM FLOAT8_TMP;\n--Testcase 325:\nINSERT INTO FLOAT8_TMP VALUES ('-1.1'::float8, '-infinity'::float8);\n--Testcase 326:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 327:\nDELETE FROM FLOAT8_TMP;\n--Testcase 328:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-2'::float8);\n--Testcase 329:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 330:\nDELETE FROM FLOAT8_TMP;\n--Testcase 331:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '2'::float8);\n--Testcase 332:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 333:\nDELETE FROM FLOAT8_TMP;\n--Testcase 334:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, 'infinity'::float8);\n--Testcase 335:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 336:\nDELETE FROM FLOAT8_TMP;\n--Testcase 337:\nINSERT INTO FLOAT8_TMP VALUES ('infinity'::float8, '-infinity'::float8);\n--Testcase 338:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- Intel's icc misoptimizes the code that controls the sign of this result,\n-- even with -mp1.  Pending a fix for that, only test for \"is it zero\".\n--Testcase 339:\nDELETE FROM FLOAT8_TMP;\n--Testcase 340:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-2'::float8);\n--Testcase 341:\nSELECT power(f1, f2) = '0' FROM FLOAT8_TMP;\n--Testcase 342:\nDELETE FROM FLOAT8_TMP;\n--Testcase 343:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3'::float8);\n--Testcase 344:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 345:\nDELETE FROM FLOAT8_TMP;\n--Testcase 346:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '2'::float8);\n--Testcase 347:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 348:\nDELETE FROM FLOAT8_TMP;\n--Testcase 349:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '3'::float8);\n--Testcase 350:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 351:\nDELETE FROM FLOAT8_TMP;\n--Testcase 352:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-3.5'::float8);\n--Testcase 353:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 354:\nDELETE FROM FLOAT8_TMP;\n--Testcase 355:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, 'infinity'::float8);\n--Testcase 356:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n--Testcase 357:\nDELETE FROM FLOAT8_TMP;\n--Testcase 358:\nINSERT INTO FLOAT8_TMP VALUES ('-infinity'::float8, '-infinity'::float8);\n--Testcase 359:\nSELECT power(f1, f2) FROM FLOAT8_TMP;\n\n-- take exp of ln(f.f1)\n--Testcase 67:\nSELECT f.f1, exp(ln(f.f1)) AS exp_ln_f1\n   FROM FLOAT8_TBL f\n   WHERE f.f1 > '0.0';\n\n-- check edge cases for exp\n--Testcase 360:\nDELETE FROM FLOAT8_TMP;\n--Testcase 361:\nINSERT INTO FLOAT8_TMP VALUES ('inf'::float8), ('-inf'::float8), ('nan'::float8);\n--Testcase 362:\nSELECT exp(f1) FROM FLOAT8_TMP;\n\n-- cube root\nBEGIN;\n--Testcase 68:\nDELETE FROM FLOAT8_TBL;\n--Testcase 69:\nINSERT INTO FLOAT8_TBL VALUES ('27'::float8);\n--Testcase 70:\nSELECT ||/f1 as three FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 71:\nSELECT f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;\n\n\n--Testcase 72:\nSELECT * FROM FLOAT8_TBL;\n\n--Testcase 73:\nUPDATE FLOAT8_TBL\n   SET f1 = FLOAT8_TBL.f1 * '-1'\n   WHERE FLOAT8_TBL.f1 > '0.0';\n\n--Testcase 74:\nSELECT f.f1 * '1e200' from FLOAT8_TBL f;\n\n--Testcase 75:\nSELECT f.f1 ^ '1e200' from FLOAT8_TBL f;\n\nBEGIN;\n--Testcase 76:\nDELETE FROM FLOAT8_TBL;\n--Testcase 77:\nINSERT INTO FLOAT8_TBL VALUES (0 ^ 0 + 0 ^ 1 + 0 ^ 0.0 + 0 ^ 0.5);\n--Testcase 78:\nSELECT * FROM FLOAT8_TBL;\nROLLBACK;\n\n--Testcase 79:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ;\n\n--Testcase 80:\nSELECT ln(f.f1) from FLOAT8_TBL f where f.f1 < '0.0' ;\n\n--Testcase 81:\nSELECT exp(f.f1) from FLOAT8_TBL f;\n\n--Testcase 82:\nSELECT f.f1 / '0.0' from FLOAT8_TBL f;\n\n--Testcase 83:\nSELECT * FROM FLOAT8_TBL;\n\n-- hyperbolic functions\n-- we run these with extra_float_digits = 0 too, since different platforms\n-- tend to produce results that vary in the last place.\n--Testcase 157:\nDELETE FROM FLOAT8_TMP;\n--Testcase 158:\nINSERT INTO FLOAT8_TMP(f1) VALUES (1);\n--Testcase 159:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n--Testcase 160:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n--Testcase 161:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n--Testcase 162:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 163:\nDELETE FROM FLOAT8_TMP;\n--Testcase 164:\nINSERT INTO FLOAT8_TMP(f1) VALUES (2);\n--Testcase 165:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n--Testcase 166:\nDELETE FROM FLOAT8_TMP;\n--Testcase 167:\nINSERT INTO FLOAT8_TMP(f1) VALUES (0.5);\n--Testcase 168:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- test Inf/NaN cases for hyperbolic functions\n--Testcase 169:\nDELETE FROM FLOAT8_TMP;\n--Testcase 170:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 171:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 172:\nDELETE FROM FLOAT8_TMP;\n--Testcase 173:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 174:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 175:\nDELETE FROM FLOAT8_TMP;\n--Testcase 176:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 177:\nSELECT sinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 178:\nDELETE FROM FLOAT8_TMP;\n--Testcase 179:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 180:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 181:\nDELETE FROM FLOAT8_TMP;\n--Testcase 182:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 183:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 184:\nDELETE FROM FLOAT8_TMP;\n--Testcase 185:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 186:\nSELECT cosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 187:\nDELETE FROM FLOAT8_TMP;\n--Testcase 188:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 189:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 190:\nDELETE FROM FLOAT8_TMP;\n--Testcase 191:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 192:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 193:\nDELETE FROM FLOAT8_TMP;\n--Testcase 194:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 195:\nSELECT tanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 196:\nDELETE FROM FLOAT8_TMP;\n--Testcase 197:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'infinity');\n--Testcase 198:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 199:\nDELETE FROM FLOAT8_TMP;\n--Testcase 200:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 '-infinity');\n--Testcase 201:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n--Testcase 202:\nDELETE FROM FLOAT8_TMP;\n--Testcase 203:\nINSERT INTO FLOAT8_TMP(f1) VALUES (float8 'nan');\n--Testcase 204:\nSELECT asinh(f1) FROM FLOAT8_TMP;\n\n-- acosh(Inf) should be Inf, but some mingw versions produce NaN, so skip test\n-- SELECT acosh(float8 'infinity');\n--Testcase 205:\nDELETE FROM FLOAT8_TMP;\n--Testcase 206:\nINSERT INTO FLOAT8_TMP VALUES (float8 '-infinity');\n--Testcase 207:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 208:\nDELETE FROM FLOAT8_TMP;\n--Testcase 209:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 210:\nSELECT acosh(f1) FROM FLOAT8_TMP;\n\n--Testcase 211:\nDELETE FROM FLOAT8_TMP;\n--Testcase 212:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'infinity'));\n--Testcase 213:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 214:\nDELETE FROM FLOAT8_TMP;\n--Testcase 215:\nINSERT INTO FLOAT8_TMP VALUES ((float8 '-infinity'));\n--Testcase 216:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n--Testcase 217:\nDELETE FROM FLOAT8_TMP;\n--Testcase 218:\nINSERT INTO FLOAT8_TMP VALUES ((float8 'nan'));\n--Testcase 219:\nSELECT atanh(f1) FROM FLOAT8_TMP;\n\n-- error functions\n-- we run these with extra_float_digits = -1, to get consistently rounded\n-- results on all platforms.\nSET extra_float_digits = -1;\n\nDELETE FROM FLOAT8_TBL;\nINSERT INTO FLOAT8_TBL(f1) VALUES (float8 '-infinity'),\n      (-28), (-6), (-3.4), (-2.1), (-1.1), (-0.45),\n      (-1.2e-9), (-2.3e-13), (-1.2e-17), (0),\n      (1.2e-17), (2.3e-13), (1.2e-9),\n      (0.45), (1.1), (2.1), (3.4), (6), (28),\n      (float8 'infinity'), (float8 'nan');\nSELECT f1,\n       erf(f1),\n       erfc(f1)\nFROM FLOAT8_TBL;\n\n--Testcase 369:\nRESET extra_float_digits;\n\n-- test for over- and underflow\n--Testcase 84:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');\n\n--Testcase 85:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');\n\n--Testcase 86:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('10e-400');\n\n--Testcase 87:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-10e-400');\n\n-- maintain external table consistency across platforms\n-- delete all values and reinsert well-behaved ones\n\n--Testcase 88:\nDELETE FROM FLOAT8_TBL;\n\n--Testcase 89:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('0.0');\n\n--Testcase 90:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-34.84');\n\n--Testcase 91:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1004.30');\n\n--Testcase 92:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e+200');\n\n--Testcase 93:\nINSERT INTO FLOAT8_TBL(f1) VALUES ('-1.2345678901234e-200');\n\n--Testcase 94:\nSELECT * FROM FLOAT8_TBL;\n\n-- test edge-case coercions to integer\n--Testcase 220:\nDELETE FROM FLOAT8_TMP;\n--Testcase 221:\nINSERT INTO FLOAT8_TMP VALUES ('32767.4'::float8);\n--Testcase 222:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 223:\nDELETE FROM FLOAT8_TMP;\n--Testcase 224:\nINSERT INTO FLOAT8_TMP VALUES ('32767.6'::float8);\n--Testcase 225:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 226:\nDELETE FROM FLOAT8_TMP;\n--Testcase 227:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.4'::float8);\n--Testcase 228:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 229:\nDELETE FROM FLOAT8_TMP;\n--Testcase 230:\nINSERT INTO FLOAT8_TMP VALUES ('-32768.6'::float8);\n--Testcase 231:\nSELECT f1::int2 FROM FLOAT8_TMP;\n\n--Testcase 232:\nDELETE FROM FLOAT8_TMP;\n--Testcase 233:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.4'::float8);\n--Testcase 234:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 235:\nDELETE FROM FLOAT8_TMP;\n--Testcase 236:\nINSERT INTO FLOAT8_TMP VALUES ('2147483647.6'::float8);\n--Testcase 237:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 238:\nDELETE FROM FLOAT8_TMP;\n--Testcase 239:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.4'::float8);\n--Testcase 240:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 241:\nDELETE FROM FLOAT8_TMP;\n--Testcase 242:\nINSERT INTO FLOAT8_TMP VALUES ('-2147483648.6'::float8);\n--Testcase 243:\nSELECT f1::int4 FROM FLOAT8_TMP;\n\n--Testcase 244:\nDELETE FROM FLOAT8_TMP;\n--Testcase 245:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854773760'::float8);\n--Testcase 246:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 247:\nDELETE FROM FLOAT8_TMP;\n--Testcase 248:\nINSERT INTO FLOAT8_TMP VALUES ('9223372036854775807'::float8);\n--Testcase 249:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 250:\nDELETE FROM FLOAT8_TMP;\n--Testcase 251:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854775808.5'::float8);\n--Testcase 252:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n--Testcase 253:\nDELETE FROM FLOAT8_TMP;\n--Testcase 254:\nINSERT INTO FLOAT8_TMP VALUES ('-9223372036854780000'::float8);\n--Testcase 255:\nSELECT f1::int8 FROM FLOAT8_TMP;\n\n-- test exact cases for trigonometric functions in degrees\n\nBEGIN;\n--Testcase 95:\nDELETE FROM FLOAT8_TBL;\n--Testcase 96:\nINSERT INTO FLOAT8_TBL VALUES (0), (30), (90), (150), (180),\n      (210), (270), (330), (360);\n--Testcase 97:\nSELECT f1,\n       sind(f1),\n       sind(f1) IN (-1,-0.5,0,0.5,1) AS sind_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 98:\nDELETE FROM FLOAT8_TBL;\n--Testcase 99:\nINSERT INTO FLOAT8_TBL VALUES (0), (60), (90), (120), (180),\n      (240), (270), (300), (360);\n--Testcase 100:\nSELECT f1,\n       cosd(f1),\n       cosd(f1) IN (-1,-0.5,0,0.5,1) AS cosd_exact\n       FROM FLOAT8_TBL;\n\n--Testcase 101:\nDELETE FROM FLOAT8_TBL;\n--Testcase 102:\nINSERT INTO FLOAT8_TBL VALUES (0), (45), (90), (135), (180),\n      (225), (270), (315), (360);\n--Testcase 103:\nSELECT f1,\n       tand(f1),\n       tand(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS tand_exact,\n       cotd(f1),\n       cotd(f1) IN ('-Infinity'::float8,-1,0,\n                   1,'Infinity'::float8) AS cotd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 104:\nDELETE FROM FLOAT8_TBL;\n--Testcase 105:\nINSERT INTO FLOAT8_TBL VALUES (-1), (-0.5), (0), (0.5), (1);\n--Testcase 106:\nSELECT f1,\n       asind(f1),\n       asind(f1) IN (-90,-30,0,30,90) AS asind_exact,\n       acosd(f1),\n       acosd(f1) IN (0,60,90,120,180) AS acosd_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 107:\nDELETE FROM FLOAT8_TBL;\n--Testcase 108:\nINSERT INTO FLOAT8_TBL VALUES ('-Infinity'::float8), (-1), (0), (1),\n      ('Infinity'::float8);\n--Testcase 109:\nSELECT f1,\n       atand(f1),\n       atand(f1) IN (-90,-45,0,45,90) AS atand_exact\n          FROM FLOAT8_TBL;\n\n--Testcase 110:\nDELETE FROM FLOAT8_TBL;\n--Testcase 111:\nINSERT INTO FLOAT8_TBL SELECT * FROM generate_series(0, 360, 90);\n--Testcase 112:\nSELECT x, y,\n       atan2d(y, x),\n       atan2d(y, x) IN (-90,0,90,180) AS atan2d_exact\nFROM (SELECT 10*cosd(f1), 10*sind(f1)\n          FROM FLOAT8_TBL) AS t(x,y);\n\nROLLBACK;\n\n--\n-- test output (and round-trip safety) of various values.\n-- To ensure we're testing what we think we're testing, start with\n-- float values specified by bit patterns (as a useful side effect,\n-- this means we'll fail on non-IEEE platforms).\n\n--Testcase 256:\ncreate type xfloat8;\n--Testcase 257:\ncreate function xfloat8in(cstring) returns xfloat8 immutable strict\n  language internal as 'int8in';\n--Testcase 258:\ncreate function xfloat8out(xfloat8) returns cstring immutable strict\n  language internal as 'int8out';\n--Testcase 259:\ncreate type xfloat8 (input = xfloat8in, output = xfloat8out, like = float8);\n--Testcase 260:\ncreate cast (xfloat8 as float8) without function;\n--Testcase 261:\ncreate cast (float8 as xfloat8) without function;\n--Testcase 262:\ncreate cast (xfloat8 as bigint) without function;\n--Testcase 263:\ncreate cast (bigint as xfloat8) without function;\n\n-- float8: seeeeeee eeeeeeee eeeeeeee mmmmmmmm mmmmmmmm(x4)\n\n-- we don't care to assume the platform's strtod() handles subnormals\n-- correctly; those are \"use at your own risk\". However we do test\n-- subnormal outputs, since those are under our control.\n\n--Testcase 264:\ncreate foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr;\nbegin;\n--Testcase 265:\ninsert into testdata(bits) values\n  -- small subnormals\n  (x'0000000000000001'),\n  (x'0000000000000002'), (x'0000000000000003'),\n  (x'0000000000001000'), (x'0000000100000000'),\n  (x'0000010000000000'), (x'0000010100000000'),\n  (x'0000400000000000'), (x'0000400100000000'),\n  (x'0000800000000000'), (x'0000800000000001'),\n  -- these values taken from upstream testsuite\n  (x'00000000000f4240'),\n  (x'00000000016e3600'),\n  (x'0000008cdcdea440'),\n  -- borderline between subnormal and normal\n  (x'000ffffffffffff0'), (x'000ffffffffffff1'),\n  (x'000ffffffffffffe'), (x'000fffffffffffff');\n--Testcase 266:\nselect float8send(flt) as ibits,\n       flt\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- round-trip tests\n\nbegin;\n--Testcase 267:\ninsert into testdata(bits) values\n  (x'0000000000000000'),\n  -- smallest normal values\n  (x'0010000000000000'), (x'0010000000000001'),\n  (x'0010000000000002'), (x'0018000000000000'),\n  --\n  (x'3ddb7cdfd9d7bdba'), (x'3ddb7cdfd9d7bdbb'), (x'3ddb7cdfd9d7bdbc'),\n  (x'3e112e0be826d694'), (x'3e112e0be826d695'), (x'3e112e0be826d696'),\n  (x'3e45798ee2308c39'), (x'3e45798ee2308c3a'), (x'3e45798ee2308c3b'),\n  (x'3e7ad7f29abcaf47'), (x'3e7ad7f29abcaf48'), (x'3e7ad7f29abcaf49'),\n  (x'3eb0c6f7a0b5ed8c'), (x'3eb0c6f7a0b5ed8d'), (x'3eb0c6f7a0b5ed8e'),\n  (x'3ee4f8b588e368ef'), (x'3ee4f8b588e368f0'), (x'3ee4f8b588e368f1'),\n  (x'3f1a36e2eb1c432c'), (x'3f1a36e2eb1c432d'), (x'3f1a36e2eb1c432e'),\n  (x'3f50624dd2f1a9fb'), (x'3f50624dd2f1a9fc'), (x'3f50624dd2f1a9fd'),\n  (x'3f847ae147ae147a'), (x'3f847ae147ae147b'), (x'3f847ae147ae147c'),\n  (x'3fb9999999999999'), (x'3fb999999999999a'), (x'3fb999999999999b'),\n  -- values very close to 1\n  (x'3feffffffffffff0'), (x'3feffffffffffff1'), (x'3feffffffffffff2'),\n  (x'3feffffffffffff3'), (x'3feffffffffffff4'), (x'3feffffffffffff5'),\n  (x'3feffffffffffff6'), (x'3feffffffffffff7'), (x'3feffffffffffff8'),\n  (x'3feffffffffffff9'), (x'3feffffffffffffa'), (x'3feffffffffffffb'),\n  (x'3feffffffffffffc'), (x'3feffffffffffffd'), (x'3feffffffffffffe'),\n  (x'3fefffffffffffff'),\n  (x'3ff0000000000000'),\n  (x'3ff0000000000001'), (x'3ff0000000000002'), (x'3ff0000000000003'),\n  (x'3ff0000000000004'), (x'3ff0000000000005'), (x'3ff0000000000006'),\n  (x'3ff0000000000007'), (x'3ff0000000000008'), (x'3ff0000000000009'),\n  --\n  (x'3ff921fb54442d18'),\n  (x'4005bf0a8b14576a'),\n  (x'400921fb54442d18'),\n  --\n  (x'4023ffffffffffff'), (x'4024000000000000'), (x'4024000000000001'),\n  (x'4058ffffffffffff'), (x'4059000000000000'), (x'4059000000000001'),\n  (x'408f3fffffffffff'), (x'408f400000000000'), (x'408f400000000001'),\n  (x'40c387ffffffffff'), (x'40c3880000000000'), (x'40c3880000000001'),\n  (x'40f869ffffffffff'), (x'40f86a0000000000'), (x'40f86a0000000001'),\n  (x'412e847fffffffff'), (x'412e848000000000'), (x'412e848000000001'),\n  (x'416312cfffffffff'), (x'416312d000000000'), (x'416312d000000001'),\n  (x'4197d783ffffffff'), (x'4197d78400000000'), (x'4197d78400000001'),\n  (x'41cdcd64ffffffff'), (x'41cdcd6500000000'), (x'41cdcd6500000001'),\n  (x'4202a05f1fffffff'), (x'4202a05f20000000'), (x'4202a05f20000001'),\n  (x'42374876e7ffffff'), (x'42374876e8000000'), (x'42374876e8000001'),\n  (x'426d1a94a1ffffff'), (x'426d1a94a2000000'), (x'426d1a94a2000001'),\n  (x'42a2309ce53fffff'), (x'42a2309ce5400000'), (x'42a2309ce5400001'),\n  (x'42d6bcc41e8fffff'), (x'42d6bcc41e900000'), (x'42d6bcc41e900001'),\n  (x'430c6bf52633ffff'), (x'430c6bf526340000'), (x'430c6bf526340001'),\n  (x'4341c37937e07fff'), (x'4341c37937e08000'), (x'4341c37937e08001'),\n  (x'4376345785d89fff'), (x'4376345785d8a000'), (x'4376345785d8a001'),\n  (x'43abc16d674ec7ff'), (x'43abc16d674ec800'), (x'43abc16d674ec801'),\n  (x'43e158e460913cff'), (x'43e158e460913d00'), (x'43e158e460913d01'),\n  (x'4415af1d78b58c3f'), (x'4415af1d78b58c40'), (x'4415af1d78b58c41'),\n  (x'444b1ae4d6e2ef4f'), (x'444b1ae4d6e2ef50'), (x'444b1ae4d6e2ef51'),\n  (x'4480f0cf064dd591'), (x'4480f0cf064dd592'), (x'4480f0cf064dd593'),\n  (x'44b52d02c7e14af5'), (x'44b52d02c7e14af6'), (x'44b52d02c7e14af7'),\n  (x'44ea784379d99db3'), (x'44ea784379d99db4'), (x'44ea784379d99db5'),\n  (x'45208b2a2c280290'), (x'45208b2a2c280291'), (x'45208b2a2c280292'),\n  --\n  (x'7feffffffffffffe'), (x'7fefffffffffffff'),\n  -- round to even tests (+ve)\n  (x'4350000000000002'),\n  (x'4350000000002e06'),\n  (x'4352000000000003'),\n  (x'4352000000000004'),\n  (x'4358000000000003'),\n  (x'4358000000000004'),\n  (x'435f000000000020'),\n  -- round to even tests (-ve)\n  (x'c350000000000002'),\n  (x'c350000000002e06'),\n  (x'c352000000000003'),\n  (x'c352000000000004'),\n  (x'c358000000000003'),\n  (x'c358000000000004'),\n  (x'c35f000000000020'),\n  -- exercise fixed-point memmoves\n  (x'42dc12218377de66'),\n  (x'42a674e79c5fe51f'),\n  (x'4271f71fb04cb74c'),\n  (x'423cbe991a145879'),\n  (x'4206fee0e1a9e061'),\n  (x'41d26580b487e6b4'),\n  (x'419d6f34540ca453'),\n  (x'41678c29dcd6e9dc'),\n  (x'4132d687e3df217d'),\n  (x'40fe240c9fcb68c8'),\n  (x'40c81cd6e63c53d3'),\n  (x'40934a4584fd0fdc'),\n  (x'405edd3c07fb4c93'),\n  (x'4028b0fcd32f7076'),\n  (x'3ff3c0ca428c59f8'),\n  -- these cases come from the upstream's testsuite\n  -- LotsOfTrailingZeros)\n  (x'3e60000000000000'),\n  -- Regression\n  (x'c352bd2668e077c4'),\n  (x'434018601510c000'),\n  (x'43d055dc36f24000'),\n  (x'43e052961c6f8000'),\n  (x'3ff3c0ca2a5b1d5d'),\n  -- LooksLikePow5\n  (x'4830f0cf064dd592'),\n  (x'4840f0cf064dd592'),\n  (x'4850f0cf064dd592'),\n  -- OutputLength\n  (x'3ff3333333333333'),\n  (x'3ff3ae147ae147ae'),\n  (x'3ff3be76c8b43958'),\n  (x'3ff3c083126e978d'),\n  (x'3ff3c0c1fc8f3238'),\n  (x'3ff3c0c9539b8887'),\n  (x'3ff3c0ca2a5b1d5d'),\n  (x'3ff3c0ca4283de1b'),\n  (x'3ff3c0ca43db770a'),\n  (x'3ff3c0ca428abd53'),\n  (x'3ff3c0ca428c1d2b'),\n  (x'3ff3c0ca428c51f2'),\n  (x'3ff3c0ca428c58fc'),\n  (x'3ff3c0ca428c59dd'),\n  (x'3ff3c0ca428c59f8'),\n  (x'3ff3c0ca428c59fb'),\n  -- 32-bit chunking\n  (x'40112e0be8047a7d'),\n  (x'40112e0be815a889'),\n  (x'40112e0be826d695'),\n  (x'40112e0be83804a1'),\n  (x'40112e0be84932ad'),\n  -- MinMaxShift\n  (x'0040000000000000'),\n  (x'007fffffffffffff'),\n  (x'0290000000000000'),\n  (x'029fffffffffffff'),\n  (x'4350000000000000'),\n  (x'435fffffffffffff'),\n  (x'1330000000000000'),\n  (x'133fffffffffffff'),\n  (x'3a6fa7161a4d6e0c');\n--Testcase 268:\nselect float8send(flt) as ibits,\n       flt,\n       flt::text::float8 as r_flt,\n       float8send(flt::text::float8) as obits,\n       float8send(flt::text::float8) = float8send(flt) as correct\n  from (select bits::bit(64)::bigint::xfloat8::float8 as flt\n          from testdata\n\toffset 0) s;\nrollback;\n-- clean up, lest opr_sanity complain\n--Testcase 269:\ndrop type xfloat8 cascade;\n\n--Testcase 363:\nDELETE FROM FLOAT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 280:\nCREATE FOREIGN TABLE \"type_FLOAT_INF\"( \"i\" int OPTIONS (key 'true'), \"f\" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF');\n--Testcase 281:\nCREATE FOREIGN TABLE \"type_FLOAT_INF+\"( \"i\" int OPTIONS (key 'true'), \"f\" float8, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+');\n--Testcase 282:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 283:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (10, 'Infinity');\n--Testcase 284:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (11, '+Infinity');\n--Testcase 285:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (12, '-Infinity');\n--Testcase 286:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (13, 'Inf');\n--Testcase 287:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (14, '+Inf');\n--Testcase 288:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (15, '-Inf');\n--Testcase 289: SQLite ignores NaN\n--see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (16, 'NaN');\n--Testcase 290:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE text;\n--Testcase 291:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (17, 'Infinity');\n--Testcase 292:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (18, '+Infinity');\n--Testcase 293:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (19, '-Infinity');\n--Testcase 294:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (20, 'Inf');\n--Testcase 295:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (21, '+Inf');\n--Testcase 296:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (22, '-Inf');\n--Testcase 297:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (23, 'NaN');\n--Testcase 298:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (24, 'Infinity__');\n--Testcase 299:\nINSERT INTO \"type_FLOAT_INF\" (i, f) VALUES (25, 'Infi');\n--Testcase 300:\nALTER FOREIGN TABLE \"type_FLOAT_INF\" ALTER COLUMN \"f\" TYPE float8;\n--Testcase 301: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 302:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 24;\n--Testcase 303: error : improper data with text affinity\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 304:\nDELETE FROM \"type_FLOAT_INF\" WHERE i = 25;\n--Testcase 305:\nSELECT * FROM \"type_FLOAT_INF\";\n--Testcase 306:\nSELECT * FROM \"type_FLOAT_INF+\";\n--Testcase 307:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f ASC, i;\n--Testcase 308:\nSELECT * FROM \"type_FLOAT_INF+\" ORDER BY f DESC, i;\n--Testcase 309:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 310:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 311:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 312:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 313:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 314:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 315:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 316:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 317:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 318:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 319:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 320:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 321:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 322:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 323:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 324:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 325:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 326:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 327:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 328:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 329:\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 330:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Infinity' ORDER BY i;\n--Testcase 331:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Infinity' ORDER BY i;\n--Testcase 332:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Infinity' ORDER BY i;\n--Testcase 333:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '+Inf' ORDER BY i;\n--Testcase 334:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '+Inf' ORDER BY i;\n--Testcase 335:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '+Inf' ORDER BY i;\n--Testcase 336:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Infinity' ORDER BY i;\n--Testcase 337:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Infinity' ORDER BY i;\n--Testcase 338:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Infinity' ORDER BY i;\n--Testcase 339:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > '-Inf' ORDER BY i;\n--Testcase 340:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < '-Inf' ORDER BY i;\n--Testcase 341:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = '-Inf' ORDER BY i;\n--Testcase 342:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Infinity' ORDER BY i;\n--Testcase 343:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Infinity' ORDER BY i;\n--Testcase 344:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Infinity' ORDER BY i;\n--Testcase 345:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'Inf' ORDER BY i;\n--Testcase 346:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'Inf' ORDER BY i;\n--Testcase 347:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'Inf' ORDER BY i;\n--Testcase 348:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f > 'NaN' ORDER BY i;\n--Testcase 349:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f < 'NaN' ORDER BY i;\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_FLOAT_INF+\" WHERE f = 'NaN' ORDER BY i;\n\n--Testcase 351:\nDELETE FROM \"type_FLOAT_INF\" WHERE i >= 10;\n--Testcase 352:\nDROP FOREIGN TABLE \"type_FLOAT_INF\";\n--Testcase 353:\nDROP FOREIGN TABLE \"type_FLOAT_INF+\";\n\n--Testcase 270:\nDROP SERVER sqlite_svr;\n--Testcase 271:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/int4.sql",
    "content": "--\n-- INT4 Based on PostgreSQL tests, please don't add additional tests here, use other test files\n--\n--Testcase 61:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 62:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 63:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 64:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n \n--Testcase 1:\nINSERT INTO INT4_TBL(f1) VALUES ('   0  ');\n\n--Testcase 2:\nINSERT INTO INT4_TBL(f1) VALUES ('123456     ');\n\n--Testcase 3:\nINSERT INTO INT4_TBL(f1) VALUES ('    -123456');\n\n--Testcase 4:\nINSERT INTO INT4_TBL(f1) VALUES ('34.5');\n\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT4_TBL(f1) VALUES ('2147483647');\n\n--Testcase 6:\nINSERT INTO INT4_TBL(f1) VALUES ('-2147483647');\n\n-- bad input values -- should give errors\n--Testcase 7:\nINSERT INTO INT4_TBL(f1) VALUES ('1000000000000');\n--Testcase 8:\nINSERT INTO INT4_TBL(f1) VALUES ('asdf');\n--Testcase 9:\nINSERT INTO INT4_TBL(f1) VALUES ('     ');\n--Testcase 10:\nINSERT INTO INT4_TBL(f1) VALUES ('   asdf   ');\n--Testcase 11:\nINSERT INTO INT4_TBL(f1) VALUES ('- 1234');\n--Testcase 12:\nINSERT INTO INT4_TBL(f1) VALUES ('123       5');\n--Testcase 13:\nINSERT INTO INT4_TBL(f1) VALUES ('');\n\n\n--Testcase 14:\nSELECT * FROM INT4_TBL;\n\n-- Also try it with non-error-throwing API\n--Testcase 137:\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT4(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 138:\nINSERT INTO NON_ERROR_THROWING_API_INT4 VALUES ('34', 1), ('asdf', 2), ('1000000000000', 3);\n--Testcase 139:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 1;\n--Testcase 140:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 2;\n--Testcase 141:\nSELECT pg_input_is_valid(f1, 'int4') FROM NON_ERROR_THROWING_API_INT4 WHERE id = 3;\n--Testcase 142:\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4 WHERE id = 3), 'int4');\n\n--Testcase 15:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0';\n\n--Testcase 16:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0';\n\n--Testcase 17:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int2 '0';\n\n--Testcase 18:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 = int4 '0';\n\n--Testcase 19:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int2 '0';\n\n--Testcase 20:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 < int4 '0';\n\n--Testcase 21:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0';\n\n--Testcase 22:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0';\n\n--Testcase 23:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int2 '0';\n\n--Testcase 24:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 > int4 '0';\n\n--Testcase 25:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0';\n\n--Testcase 26:\nSELECT i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0';\n\n-- positive odds\n--Testcase 27:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1';\n\n-- any evens\n--Testcase 28:\nSELECT i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';\n\n--Testcase 29:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 30:\nSELECT i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 31:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 32:\nSELECT i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i\nWHERE abs(f1) < 1073741824;\n\n--Testcase 33:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 34:\nSELECT i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 35:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 36:\nSELECT i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i\nWHERE f1 < 2147483646;\n\n--Testcase 37:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 38:\nSELECT i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 39:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;\n\n--Testcase 40:\nSELECT i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i\nWHERE f1 > -2147483647;\n\n--Testcase 41:\nSELECT i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;\n\n--Testcase 42:\nSELECT i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;\n\n--\n-- more complex expressions\n--\n\n-- variations on unary minus parsing\n\n--Testcase 65:\nDELETE FROM INT4_TMP;\n--Testcase 66:\nINSERT INTO INT4_TMP VALUES (-2, 3);\n--Testcase 67:\nSELECT f1 + f2 as one FROM INT4_TMP;\n\n--Testcase 68:\nDELETE FROM INT4_TMP;\n--Testcase 69:\nINSERT INTO INT4_TMP VALUES (4, 2);\n--Testcase 70:\nSELECT f1 - f2 as two FROM INT4_TMP;\n\n--Testcase 46:\nDELETE FROM INT4_TMP;\n--Testcase 71:\nINSERT INTO INT4_TMP VALUES (2, 1);\n--Testcase 72:\nSELECT f1- -f2 as three FROM INT4_TMP;\n\n--Testcase 47:\nDELETE FROM INT4_TMP;\n--Testcase 73:\nINSERT INTO INT4_TMP VALUES (2, 2);\n--Testcase 74:\nSELECT f1 - -f2 as four FROM INT4_TMP;\n\n--Testcase 75:\nDELETE FROM INT4_TMP;\n--Testcase 76:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int2, '16'::int2 / '4'::int2);\n--Testcase 77:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 78:\nDELETE FROM INT4_TMP;\n--Testcase 79:\nINSERT INTO INT4_TMP VALUES ('2'::int2 * '2'::int4, '16'::int2 / '4'::int4);\n--Testcase 80:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 81:\nDELETE FROM INT4_TMP;\n--Testcase 82:\nINSERT INTO INT4_TMP VALUES ('2'::int4 * '2'::int2, '16'::int4 / '4'::int2);\n--Testcase 83:\nSELECT f1 = f2 AS true FROM INT4_TMP;\n\n--Testcase 84:\nDELETE FROM INT4_TMP;\n--Testcase 85:\nINSERT INTO INT4_TMP VALUES ('1000'::int4, '999'::int4);\n--Testcase 86:\nSELECT f1 < f2 AS false FROM INT4_TMP;\n\n--Testcase 50:\nDELETE FROM INT4_TMP;\n--Testcase 91:\nINSERT INTO INT4_TMP VALUES (1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1);\n--Testcase 92:\nSELECT f1 as ten FROM INT4_TMP;\n\n--Testcase 51:\nDELETE FROM INT4_TMP;\n--Testcase 93:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 94:\nSELECT f1 + f1/f2 as three FROM INT4_TMP;\n\n--Testcase 52:\nDELETE FROM INT4_TMP;\n--Testcase 95:\nINSERT INTO INT4_TMP VALUES (2 , 2);\n--Testcase 96:\nSELECT (f1 + f2)/f2 as two FROM INT4_TMP;\n\n-- corner case\n--Testcase 54:\nDELETE FROM INT4_TMP;\n--Testcase 97:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 98:\nSELECT (f1<<31)::text FROM INT4_TMP;\n\n--Testcase 56:\nDELETE FROM INT4_TMP;\n--Testcase 99:\nINSERT INTO INT4_TMP VALUES (-1);\n--Testcase 100:\nSELECT ((f1<<31)+1)::text FROM INT4_TMP;\n\n-- check sane handling of INT_MIN overflow cases\n--Testcase 58:\nDELETE FROM INT4_TMP;\n--Testcase 101:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int4);\n--Testcase 102:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 103:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 104:\nSELECT f1 % f2 FROM INT4_TMP;\n\n--Testcase 60:\nDELETE FROM INT4_TMP;\n--Testcase 105:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-1)::int2);\n--Testcase 106:\nSELECT f1 * f2 FROM INT4_TMP;\n--Testcase 107:\nSELECT f1 / f2 FROM INT4_TMP;\n--Testcase 108:\nSELECT f1 % f2 FROM INT4_TMP;\n\n-- check rounding when casting from float\n--Testcase 109:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 110:\nDELETE FROM FLOAT8_TMP;\n--Testcase 111:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 112:\nSELECT f1 as x, f1::int4 as int4_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 113:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 114:\nDELETE FROM NUMERIC_TMP;\n--Testcase 115:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 116:\nSELECT f1 as x, f1::int4 as int4_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 117:\nDELETE FROM INT4_TMP;\n--Testcase 118:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 6410818::int4),\n             (61866666::int4, 6410818::int4),\n             (-61866666::int4, 6410818::int4),\n             ((-2147483648)::int4, 1::int4),\n             ((-2147483648)::int4, 2147483647::int4),\n             ((-2147483648)::int4, 1073741824::int4);\n--Testcase 119:\nSELECT f1, f2, gcd(f1, f2), gcd(f1, -f2), gcd(f2, f1), gcd(-f2, f1) FROM INT4_TMP;\n\n--Testcase 120:\nDELETE FROM INT4_TMP;\n--Testcase 121:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 0::int4);\n--Testcase 122:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 123:\nDELETE FROM INT4_TMP;\n--Testcase 124:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, (-2147483648)::int4);\n--Testcase 125:\nSELECT gcd(f1, f2) FROM INT4_TMP; -- overflow\n\n-- test lcm()\n--Testcase 126:\nDELETE FROM INT4_TMP;\n--Testcase 127:\nINSERT INTO INT4_TMP VALUES\n             (0::int4, 0::int4),\n             (0::int4, 42::int4),\n             (42::int4, 42::int4),\n             (330::int4, 462::int4),\n             (-330::int4, 462::int4),\n             ((-2147483648)::int4, 0::int4);\n--Testcase 128:\nSELECT f1, f2, lcm(f1, f2), lcm(f1, -f2), lcm(f2, f1), lcm(-f2, f1) FROM INT4_TMP;\n\n--Testcase 129:\nDELETE FROM INT4_TMP;\n--Testcase 130:\nINSERT INTO INT4_TMP VALUES ((-2147483648)::int4, 1::int4);\n--Testcase 131:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n--Testcase 132:\nDELETE FROM INT4_TMP;\n--Testcase 133:\nINSERT INTO INT4_TMP VALUES (2147483647::int4, 2147483646::int4);\n--Testcase 134:\nSELECT lcm(f1, f2) FROM INT4_TMP; -- overflow\n\n-- non-decimal literals\n--Testcase 143:\nCREATE FOREIGN TABLE special_case_int4 (f1 text, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 144:\nINSERT INTO special_case_int4 VALUES ('0b100101'::int4);\n--Testcase 145:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 146:\nDELETE FROM special_case_int4;\n--Testcase 147:\nINSERT INTO special_case_int4 VALUES ('0o273'::int4);\n--Testcase 148:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 149:\nDELETE FROM special_case_int4;\n--Testcase 150:\nINSERT INTO special_case_int4 VALUES ('0x42F'::int4);\n--Testcase 151:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 152:\nDELETE FROM special_case_int4;\n--Testcase 153:\nINSERT INTO special_case_int4 VALUES ('0b'::int4);\n--Testcase 154:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 155:\nDELETE FROM special_case_int4;\n--Testcase 156:\nINSERT INTO special_case_int4 VALUES ('0x'::int4);\n--Testcase 157:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 158:\nDELETE FROM special_case_int4;\n--Testcase 159:\nINSERT INTO special_case_int4 VALUES ('0x'::int4);\n--Testcase 160:\nSELECT f1 FROM special_case_int4;\n\n-- cases near overflow\n--Testcase 161:\nDELETE FROM special_case_int4;\n--Testcase 162:\nINSERT INTO special_case_int4 VALUES ('0b1111111111111111111111111111111'::int4);\n--Testcase 163:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 164:\nDELETE FROM special_case_int4;\n--Testcase 165:\nINSERT INTO special_case_int4 VALUES ('0b10000000000000000000000000000000'::int4);\n--Testcase 166:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 167:\nDELETE FROM special_case_int4;\n--Testcase 168:\nINSERT INTO special_case_int4 VALUES ('0o17777777777'::int4);\n--Testcase 169:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 170:\nDELETE FROM special_case_int4;\n--Testcase 171:\nINSERT INTO special_case_int4 VALUES ('0o20000000000'::int4);\n--Testcase 172:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 173:\nDELETE FROM special_case_int4;\n--Testcase 174:\nINSERT INTO special_case_int4 VALUES ('0x7FFFFFFF'::int4);\n--Testcase 175:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 176:\nDELETE FROM special_case_int4;\n--Testcase 177:\nINSERT INTO special_case_int4 VALUES ('0x80000000'::int4);\n--Testcase 178:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 179:\nDELETE FROM special_case_int4;\n--Testcase 180:\nINSERT INTO special_case_int4 VALUES ('-0b10000000000000000000000000000000'::int4);\n--Testcase 181:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 182:\nDELETE FROM special_case_int4;\n--Testcase 183:\nINSERT INTO special_case_int4 VALUES ('-0b10000000000000000000000000000001'::int4);\n--Testcase 184:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 185:\nDELETE FROM special_case_int4;\n--Testcase 186:\nINSERT INTO special_case_int4 VALUES ('-0o20000000000'::int4);\n--Testcase 187:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 188:\nDELETE FROM special_case_int4;\n--Testcase 189:\nINSERT INTO special_case_int4 VALUES ('-0o20000000001'::int4);\n--Testcase 190:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 191:\nDELETE FROM special_case_int4;\n--Testcase 192:\nINSERT INTO special_case_int4 VALUES ('-0x80000000'::int4);\n--Testcase 193:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 194:\nDELETE FROM special_case_int4;\n--Testcase 195:\nINSERT INTO special_case_int4 VALUES ('-0x80000001'::int4);\n--Testcase 196:\nSELECT f1 FROM special_case_int4;\n\n\n-- underscores\n--Testcase 197:\nDELETE FROM special_case_int4;\n--Testcase 198:\nINSERT INTO special_case_int4 VALUES ('1_000_000'::int4);\n--Testcase 199:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 200:\nDELETE FROM special_case_int4;\n--Testcase 201:\nINSERT INTO special_case_int4 VALUES ('1_2_3'::int4);\n--Testcase 202:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 203:\nDELETE FROM special_case_int4;\n--Testcase 204:\nINSERT INTO special_case_int4 VALUES ('0x1EEE_FFFF'::int4);\n--Testcase 205:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 206:\nDELETE FROM special_case_int4;\n--Testcase 207:\nINSERT INTO special_case_int4 VALUES ('0o2_73'::int4);\n--Testcase 208:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 209:\nDELETE FROM special_case_int4;\n--Testcase 210:\nINSERT INTO special_case_int4 VALUES ('0b_10_0101'::int4);\n--Testcase 211:\nSELECT f1 FROM special_case_int4;\n\n-- error cases\n--Testcase 212:\nDELETE FROM special_case_int4;\n--Testcase 213:\nINSERT INTO special_case_int4 VALUES ('_100'::int4);\n--Testcase 214:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 215:\nDELETE FROM special_case_int4;\n--Testcase 216:\nINSERT INTO special_case_int4 VALUES ('100_'::int4);\n--Testcase 217:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 218:\nDELETE FROM special_case_int4;\n--Testcase 219:\nINSERT INTO special_case_int4 VALUES ('100__000'::int4);\n--Testcase 220:\nSELECT f1 FROM special_case_int4;\n\n--Testcase 221:\nDELETE FROM INT4_TBL;\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 135:\nDROP SERVER sqlite_svr;\n--Testcase 136:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/int8.sql",
    "content": "--\n-- INT8\n-- Test int8 64-bit integers.\n--\n--Testcase 140:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 141:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 142:\nCREATE FOREIGN TABLE INT8_TBL(\n\tq1 int8 OPTIONS (key 'true'),\n\tq2 int8 OPTIONS (key 'true')\n) SERVER sqlite_svr;\n--Testcase 143:\nCREATE FOREIGN TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4, \n\tq4 int2,\n\tq5 text,\n\tid int options (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 1:\nINSERT INTO INT8_TBL VALUES('  123   ','  456');\n--Testcase 2:\nINSERT INTO INT8_TBL VALUES('123   ','4567890123456789');\n--Testcase 3:\nINSERT INTO INT8_TBL VALUES('4567890123456789','123');\n--Testcase 4:\nINSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');\n--Testcase 5:\nINSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');\n\n-- bad inputs\n--Testcase 6:\nINSERT INTO INT8_TBL(q1) VALUES ('      ');\n--Testcase 7:\nINSERT INTO INT8_TBL(q1) VALUES ('xxx');\n--Testcase 8:\nINSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');\n--Testcase 9:\nINSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');\n--Testcase 10:\nINSERT INTO INT8_TBL(q1) VALUES ('- 123');\n--Testcase 11:\nINSERT INTO INT8_TBL(q1) VALUES ('  345     5');\n--Testcase 12:\nINSERT INTO INT8_TBL(q1) VALUES ('');\n\n--Testcase 13:\nSELECT * FROM INT8_TBL;\n\n-- Also try it with non-error-throwing API\n--Testcase 251:\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT8(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 252:\nINSERT INTO NON_ERROR_THROWING_API_INT8 VALUES ('34', 1), ('asdf', 2), ('10000000000000000000', 3);\n--Testcase 253:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 1;\n--Testcase 254:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 2;\n--Testcase 255:\nSELECT pg_input_is_valid(f1, 'int8') FROM NON_ERROR_THROWING_API_INT8 WHERE id = 3;\n--Testcase 256:\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT8 WHERE id = 3), 'int8');\n\n\n-- int8/int8 cmp\n--Testcase 14:\nSELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;\n--Testcase 15:\nSELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;\n--Testcase 16:\nSELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;\n--Testcase 17:\nSELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;\n--Testcase 18:\nSELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;\n--Testcase 19:\nSELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;\n\n-- int8/int4 cmp\n--Testcase 20:\nSELECT * FROM INT8_TBL WHERE q2 = 456;\n--Testcase 21:\nSELECT * FROM INT8_TBL WHERE q2 <> 456;\n--Testcase 22:\nSELECT * FROM INT8_TBL WHERE q2 < 456;\n--Testcase 23:\nSELECT * FROM INT8_TBL WHERE q2 > 456;\n--Testcase 24:\nSELECT * FROM INT8_TBL WHERE q2 <= 456;\n--Testcase 25:\nSELECT * FROM INT8_TBL WHERE q2 >= 456;\n\n-- int4/int8 cmp\n--Testcase 26:\nSELECT * FROM INT8_TBL WHERE 123 = q1;\n--Testcase 27:\nSELECT * FROM INT8_TBL WHERE 123 <> q1;\n--Testcase 28:\nSELECT * FROM INT8_TBL WHERE 123 < q1;\n--Testcase 29:\nSELECT * FROM INT8_TBL WHERE 123 > q1;\n--Testcase 30:\nSELECT * FROM INT8_TBL WHERE 123 <= q1;\n--Testcase 31:\nSELECT * FROM INT8_TBL WHERE 123 >= q1;\n\n-- int8/int2 cmp\n--Testcase 32:\nSELECT * FROM INT8_TBL WHERE q2 = '456'::int2;\n--Testcase 33:\nSELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;\n--Testcase 34:\nSELECT * FROM INT8_TBL WHERE q2 < '456'::int2;\n--Testcase 35:\nSELECT * FROM INT8_TBL WHERE q2 > '456'::int2;\n--Testcase 36:\nSELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;\n--Testcase 37:\nSELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;\n\n-- int2/int8 cmp\n--Testcase 38:\nSELECT * FROM INT8_TBL WHERE '123'::int2 = q1;\n--Testcase 39:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;\n--Testcase 40:\nSELECT * FROM INT8_TBL WHERE '123'::int2 < q1;\n--Testcase 41:\nSELECT * FROM INT8_TBL WHERE '123'::int2 > q1;\n--Testcase 42:\nSELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;\n--Testcase 43:\nSELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;\n\n\n--Testcase 44:\nSELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;\n\n--Testcase 45:\nSELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;\n--Testcase 46:\nSELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;\n--Testcase 47:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;\n--Testcase 48:\nSELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL\n WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);\n--Testcase 49:\nSELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;\n\n--Testcase 50:\nSELECT q1, float8(q1) FROM INT8_TBL;\n--Testcase 51:\nSELECT q2, float8(q2) FROM INT8_TBL;\n\n--Testcase 52:\nSELECT 37 + q1 AS plus4 FROM INT8_TBL;\n--Testcase 53:\nSELECT 37 - q1 AS minus4 FROM INT8_TBL;\n--Testcase 54:\nSELECT 2 * q1 AS \"twice int4\" FROM INT8_TBL;\n--Testcase 55:\nSELECT q1 * 2 AS \"twice int4\" FROM INT8_TBL;\n\n-- int8 op int4\n--Testcase 56:\nSELECT q1 + 42::int4 AS \"8plus4\", q1 - 42::int4 AS \"8minus4\", q1 * 42::int4 AS \"8mul4\", q1 / 42::int4 AS \"8div4\" FROM INT8_TBL;\n-- int4 op int8\n--Testcase 57:\nSELECT 246::int4 + q1 AS \"4plus8\", 246::int4 - q1 AS \"4minus8\", 246::int4 * q1 AS \"4mul8\", 246::int4 / q1 AS \"4div8\" FROM INT8_TBL;\n\n-- int8 op int2\n--Testcase 58:\nSELECT q1 + 42::int2 AS \"8plus2\", q1 - 42::int2 AS \"8minus2\", q1 * 42::int2 AS \"8mul2\", q1 / 42::int2 AS \"8div2\" FROM INT8_TBL;\n-- int2 op int8\n--Testcase 59:\nSELECT 246::int2 + q1 AS \"2plus8\", 246::int2 - q1 AS \"2minus8\", 246::int2 * q1 AS \"2mul8\", 246::int2 / q1 AS \"2div8\" FROM INT8_TBL;\n\n--Testcase 60:\nSELECT q2, abs(q2) FROM INT8_TBL;\n--Testcase 61:\nSELECT min(q1), min(q2) FROM INT8_TBL;\n--Testcase 62:\nSELECT max(q1), max(q2) FROM INT8_TBL;\n\n\n-- TO_CHAR()\n--\n--Testcase 63:\nSELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')\n\tFROM INT8_TBL;\n\n--Testcase 64:\nSELECT to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')\n\tFROM INT8_TBL;\n\n--Testcase 65:\nSELECT to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')\n\tFROM INT8_TBL;\n\n--Testcase 66:\nSELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')\n\tFROM INT8_TBL;\n\n--Testcase 67:\nSELECT to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;\n--Testcase 68:\nSELECT to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;\n--Testcase 69:\nSELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;\n--Testcase 70:\nSELECT to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;\n--Testcase 71:\nSELECT to_char(q2, '0999999999999999')       FROM INT8_TBL;\n--Testcase 72:\nSELECT to_char(q2, 'S0999999999999999')      FROM INT8_TBL;\n--Testcase 73:\nSELECT to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;\n--Testcase 74:\nSELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;\n--Testcase 75:\nSELECT to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;\n--Testcase 76:\nSELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;\n--Testcase 77:\nSELECT to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;\n--Testcase 78:\nSELECT to_char(q2, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM INT8_TBL;\n--Testcase 79:\nSELECT to_char(q2, '999999SG9999999999')     FROM INT8_TBL;\n\n-- check min/max values and overflow behavior\n--Testcase 80:\nDELETE FROM INT8_TMP;\n--Testcase 144:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 145:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 81:\nDELETE FROM INT8_TMP;\n--Testcase 146:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775809'::int8);\n--Testcase 147:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 82:\nDELETE FROM INT8_TMP;\n--Testcase 148:\nINSERT INTO INT8_TMP VALUES ('9223372036854775807'::int8);\n--Testcase 149:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 83:\nDELETE FROM INT8_TMP;\n--Testcase 150:\nINSERT INTO INT8_TMP VALUES ('9223372036854775808'::int8);\n--Testcase 151:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 84:\nDELETE FROM INT8_TMP;\n--Testcase 152:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775807'::int8));\n--Testcase 153:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 86:\nDELETE FROM INT8_TMP;\n--Testcase 154:\nINSERT INTO INT8_TMP VALUES (-('-9223372036854775808'::int8));\n--Testcase 155:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 257:\nDELETE FROM INT8_TMP;\n--Testcase 258:\nINSERT INTO INT8_TMP VALUES (0::int8 , '-9223372036854775808'::int8);\n--Testcase 259:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 87:\nDELETE FROM INT8_TMP;\n--Testcase 156:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 157:\nSELECT q1 + q2 FROM INT8_TMP;\n--Testcase 88:\nDELETE FROM INT8_TMP;\n--Testcase 158:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 159:\nSELECT q1 + q2 FROM INT8_TMP;\n\n--Testcase 89:\nDELETE FROM INT8_TMP;\n--Testcase 160:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '-9223372036854775800'::int8);\n--Testcase 161:\nSELECT q1-q2 FROM INT8_TMP;\n--Testcase 90:\nDELETE FROM INT8_TMP;\n--Testcase 162:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 163:\nSELECT q1 - q2 FROM INT8_TMP;\n\n--Testcase 91:\nDELETE FROM INT8_TMP;\n--Testcase 164:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '9223372036854775800'::int8);\n--Testcase 165:\nSELECT q1 * q2 FROM INT8_TMP;\n\n--Testcase 92:\nDELETE FROM INT8_TMP;\n--Testcase 166:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 167:\nSELECT q1 / q2 FROM INT8_TMP;\n\n--Testcase 93:\nDELETE FROM INT8_TMP;\n--Testcase 168:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '0'::int8);\n--Testcase 169:\nSELECT q1 % q2 FROM INT8_TMP;\n\n--Testcase 94:\nDELETE FROM INT8_TMP;\n--Testcase 170:\nINSERT INTO INT8_TMP VALUES ('-9223372036854775808'::int8);\n--Testcase 171:\nSELECT abs(q1) FROM INT8_TMP;\n\n--Testcase 95:\nDELETE FROM INT8_TMP;\n--Testcase 172:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 173:\nSELECT q1 + q3 FROM INT8_TMP;\n--Testcase 96:\nDELETE FROM INT8_TMP;\n--Testcase 174:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('-9223372036854775800'::int8 , '100'::int4);\n--Testcase 175:\nSELECT q1 - q3 FROM INT8_TMP;\n--Testcase 97:\nDELETE FROM INT8_TMP;\n--Testcase 176:\nINSERT INTO INT8_TMP(q1, q3) VALUES ('9223372036854775800'::int8 , '100'::int4);\n--Testcase 177:\nSELECT q1 * q3 FROM INT8_TMP;\n\n--Testcase 98:\nDELETE FROM INT8_TMP;\n--Testcase 178:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 179:\nSELECT q3 + q1 FROM INT8_TMP;\n--Testcase 99:\nDELETE FROM INT8_TMP;\n--Testcase 180:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('-100'::int4 , '9223372036854775800'::int8);\n--Testcase 181:\nSELECT q3 - q1 FROM INT8_TMP;\n--Testcase 100:\nDELETE FROM INT8_TMP;\n--Testcase 182:\nINSERT INTO INT8_TMP(q3, q1) VALUES ('100'::int4 , '9223372036854775800'::int8);\n--Testcase 183:\nSELECT q3 * q1 FROM INT8_TMP;\n\n--Testcase 101:\nDELETE FROM INT8_TMP;\n--Testcase 184:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 185:\nSELECT q1 + q4 FROM INT8_TMP;\n--Testcase 102:\nDELETE FROM INT8_TMP;\n--Testcase 186:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775800'::int8 , '100'::int2);\n--Testcase 187:\nSELECT q1 - q4 FROM INT8_TMP;\n--Testcase 103:\nDELETE FROM INT8_TMP;\n--Testcase 188:\nINSERT INTO INT8_TMP VALUES ('9223372036854775800'::int8 , '100'::int2);\n--Testcase 189:\nSELECT q1 * q4 FROM INT8_TMP;\n--Testcase 104:\nDELETE FROM INT8_TMP;\n--Testcase 190:\nINSERT INTO INT8_TMP(q1, q4) VALUES ('-9223372036854775808'::int8 , '0'::int2);\n--Testcase 191:\nSELECT q1 / q4 FROM INT8_TMP;\n\n--Testcase 105:\nDELETE FROM INT8_TMP;\n--Testcase 192:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 193:\nSELECT q4 + q1 FROM INT8_TMP;\n--Testcase 106:\nDELETE FROM INT8_TMP;\n--Testcase 194:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('-100'::int2 , '9223372036854775800'::int8);\n--Testcase 195:\nSELECT q4 - q1 FROM INT8_TMP;\n--Testcase 107:\nDELETE FROM INT8_TMP;\n--Testcase 196:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '9223372036854775800'::int8);\n--Testcase 197:\nSELECT q4 * q1 FROM INT8_TMP;\n--Testcase 108:\nDELETE FROM INT8_TMP;\n--Testcase 198:\nINSERT INTO INT8_TMP(q4, q1) VALUES ('100'::int2 , '0'::int8);\n--Testcase 199:\nSELECT q4 / q1 FROM INT8_TMP;\n\n--Testcase 110:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;\n--Testcase 111:\nSELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 112:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;\n--Testcase 113:\nSELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;\n\n--Testcase 200:\nDELETE FROM INT8_TMP;\n--Testcase 201:\nINSERT INTO INT8_TMP(q5) VALUES ('42'), ('-37');\n--Testcase 202:\nSELECT CAST(q5::int2 as int8) FROM INT8_TMP;\n\n--Testcase 114:\nSELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;\n\n--Testcase 203:\nDELETE FROM INT8_TMP;\n--Testcase 204:\nINSERT INTO INT8_TMP(q5) VALUES ('36854775807.0');\n--Testcase 205:\nSELECT CAST(q5::float4 AS int8) FROM INT8_TMP;\n\n--Testcase 206:\nDELETE FROM INT8_TMP;\n--Testcase 207:\nINSERT INTO INT8_TMP(q5) VALUES ('922337203685477580700.0');\n--Testcase 208:\nSELECT CAST(q5::float8 AS int8) FROM INT8_TMP;\n\n--Testcase 115:\nSELECT CAST(q1 AS oid) FROM INT8_TBL;\n--Testcase 209:\nSELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';\n\n-- bit operations\n\n--Testcase 116:\nSELECT q1, q2, q1 & q2 AS \"and\", q1 | q2 AS \"or\", q1 # q2 AS \"xor\", ~q1 AS \"not\" FROM INT8_TBL;\n--Testcase 117:\nSELECT q1, q1 << 2 AS \"shl\", q1 >> 3 AS \"shr\" FROM INT8_TBL;\n\n-- generate_series\n\n--Testcase 118:\nDELETE FROM INT8_TMP;\n--Testcase 210:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8) q1;\n--Testcase 211:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 120:\nDELETE FROM INT8_TMP;\n--Testcase 212:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0) q1; -- should error\n--Testcase 213:\nSELECT q1 FROM INT8_TMP;\n\n--Testcase 122:\nDELETE FROM INT8_TMP;\n--Testcase 214:\nINSERT INTO INT8_TMP SELECT q1 FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2) q1;\n--Testcase 215:\nSELECT q1 FROM INT8_TMP;\n\n-- corner case\n--Testcase 216:\nDELETE FROM INT8_TMP;\n--Testcase 217:\nINSERT INTO INT8_TMP VALUES (-1::int8<<63);\n--Testcase 218:\nSELECT q1::text FROM INT8_TMP;\n\n--Testcase 219:\nDELETE FROM INT8_TMP;\n--Testcase 220:\nINSERT INTO INT8_TMP VALUES ((-1::int8<<63)+1);\n--Testcase 221:\nSELECT q1::text FROM INT8_TMP;\n\n-- check sane handling of INT64_MIN overflow cases\n--Testcase 125:\nDELETE FROM INT8_TMP;\n--Testcase 222:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int8, 888);\n--Testcase 126:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int8, 888);\n--Testcase 127:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int8, 888);\n--Testcase 128:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 129:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 130:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int4, 888);\n--Testcase 131:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int4, 888);\n--Testcase 132:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int4, 888);\n--Testcase 133:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 134:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n--Testcase 135:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 * (-1)::int2, 888);\n--Testcase 136:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 / (-1)::int2, 888);\n--Testcase 137:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8 % (-1)::int2, 888);\n--Testcase 138:\nSELECT q1 FROM INT8_TMP WHERE q2 = 888;\n--Testcase 139:\nDELETE FROM INT8_TMP WHERE q2 = 888;\n\n-- check rounding when casting from float\n--Testcase 223:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 224:\nDELETE FROM FLOAT8_TMP;\n--Testcase 225:\nINSERT INTO FLOAT8_TMP VALUES \n             (-2.5::float8),\n             (-1.5::float8),\n             (-0.5::float8),\n             (0.0::float8),\n             (0.5::float8),\n             (1.5::float8),\n             (2.5::float8);\n\n--Testcase 226:\nSELECT f1 as x, f1::int8 as int8_value FROM FLOAT8_TMP;\n\n-- check rounding when casting from numeric\n--Testcase 227:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 228:\nDELETE FROM NUMERIC_TMP;\n--Testcase 229:\nINSERT INTO NUMERIC_TMP VALUES\n             (-2.5::numeric),\n             (-1.5::numeric),\n             (-0.5::numeric),\n             (0.0::numeric),\n             (0.5::numeric),\n             (1.5::numeric),\n             (2.5::numeric);\n--Testcase 230:\nSELECT f1 as x, f1::int8 as int8_value FROM NUMERIC_TMP;\n\n-- test gcd()\n--Testcase 231:\nDELETE FROM INT8_TMP;\n--Testcase 232:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 1::int8),\n             ((-9223372036854775808)::int8, 9223372036854775807::int8),\n             ((-9223372036854775808)::int8, 4611686018427387904::int8);\n--Testcase 233:\nSELECT q1, q2, gcd(q1, q2), gcd(q1, -q2), gcd(q2, q1), gcd(-q2, q1) FROM INT8_TMP;\n\n--Testcase 234:\nDELETE FROM INT8_TMP;\n--Testcase 235:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 0::int8);\n--Testcase 236:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 237:\nDELETE FROM INT8_TMP;\n--Testcase 238:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, (-9223372036854775808)::int8);\n--Testcase 239:\nSELECT gcd(q1, q2) FROM INT8_TMP; -- overflow\n\n-- test lcm()\n--Testcase 240:\nDELETE FROM INT8_TMP;\n--Testcase 241:\nINSERT INTO INT8_TMP VALUES\n             (0::int8, 0::int8),\n             (0::int8, 29893644334::int8),\n             (29893644334::int8, 29893644334::int8),\n             (288484263558::int8, 29893644334::int8),\n             (-288484263558::int8, 29893644334::int8),\n             ((-9223372036854775808)::int8, 0::int8);\n--Testcase 242:\nSELECT q1, q2, lcm(q1, q2), lcm(q1, -q2), lcm(q2, q1), lcm(-q2, q1) FROM INT8_TMP;\n\n--Testcase 243:\nDELETE FROM INT8_TMP;\n--Testcase 244:\nINSERT INTO INT8_TMP VALUES ((-9223372036854775808)::int8, 1::int8);\n--Testcase 245:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n--Testcase 246:\nDELETE FROM INT8_TMP;\n--Testcase 247:\nINSERT INTO INT8_TMP VALUES ((9223372036854775807)::int8, (9223372036854775806)::int8);\n--Testcase 248:\nSELECT lcm(q1, q2) FROM INT8_TMP; -- overflow\n\n-- non-decimal literals\n\n--Testcase 260:\nCREATE FOREIGN TABLE special_case_int8 (f1 text, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 261:\nINSERT INTO special_case_int8 VALUES ('0b100101'::int8);\n--Testcase 262:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 263:\nDELETE FROM special_case_int8;\n--Testcase 264:\nINSERT INTO special_case_int8 VALUES ('0o273'::int8);\n--Testcase 265:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 266:\nDELETE FROM special_case_int8;\n--Testcase 267:\nINSERT INTO special_case_int8 VALUES ('0x42F'::int8);\n--Testcase 268:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 269:\nDELETE FROM special_case_int8;\n--Testcase 270:\nINSERT INTO special_case_int8 VALUES ('0b'::int8);\n--Testcase 271:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 272:\nDELETE FROM special_case_int8;\n--Testcase 273:\nINSERT INTO special_case_int8 VALUES ('0o'::int8);\n--Testcase 274:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 275:\nDELETE FROM special_case_int8;\n--Testcase 276:\nINSERT INTO special_case_int8 VALUES ('0x'::int8);\n--Testcase 277:\nSELECT f1 FROM special_case_int8;\n\n-- cases near overflow\n--Testcase 278:\nDELETE FROM special_case_int8;\n--Testcase 279:\nINSERT INTO special_case_int8 VALUES ('0b111111111111111111111111111111111111111111111111111111111111111'::int8);\n--Testcase 280:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 281:\nDELETE FROM special_case_int8;\n--Testcase 282:\nINSERT INTO special_case_int8 VALUES ('0b1000000000000000000000000000000000000000000000000000000000000000'::int8);\n--Testcase 283:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 284:\nDELETE FROM special_case_int8;\n--Testcase 285:\nINSERT INTO special_case_int8 VALUES ('0o777777777777777777777'::int8);\n--Testcase 286:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 287:\nDELETE FROM special_case_int8;\n--Testcase 288:\nINSERT INTO special_case_int8 VALUES ('0o1000000000000000000000'::int8);\n--Testcase 289:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 290:\nDELETE FROM special_case_int8;\n--Testcase 291:\nINSERT INTO special_case_int8 VALUES ('0x7FFFFFFFFFFFFFFF'::int8);\n--Testcase 292:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 293:\nDELETE FROM special_case_int8;\n--Testcase 294:\nINSERT INTO special_case_int8 VALUES ('0x8000000000000000'::int8);\n--Testcase 295:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 296:\nDELETE FROM special_case_int8;\n--Testcase 297:\nINSERT INTO special_case_int8 VALUES ('-0b1000000000000000000000000000000000000000000000000000000000000000'::int8);\n--Testcase 298:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 299:\nDELETE FROM special_case_int8;\n--Testcase 300:\nINSERT INTO special_case_int8 VALUES ('-0b1000000000000000000000000000000000000000000000000000000000000001'::int8);\n--Testcase 301:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 302:\nDELETE FROM special_case_int8;\n--Testcase 303:\nINSERT INTO special_case_int8 VALUES ('-0o1000000000000000000000'::int8);\n--Testcase 304:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 305:\nDELETE FROM special_case_int8;\n--Testcase 306:\nINSERT INTO special_case_int8 VALUES ('-0o1000000000000000000001'::int8);\n--Testcase 307:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 308:\nDELETE FROM special_case_int8;\n--Testcase 309:\nINSERT INTO special_case_int8 VALUES ('-0x8000000000000000'::int8);\n--Testcase 310:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 311:\nDELETE FROM special_case_int8;\n--Testcase 312:\nINSERT INTO special_case_int8 VALUES ('-0x8000000000000001'::int8);\n--Testcase 313:\nSELECT f1 FROM special_case_int8;\n\n-- underscores\n--Testcase 314:\nDELETE FROM special_case_int8;\n--Testcase 315:\nINSERT INTO special_case_int8 VALUES ('1_000_000'::int8);\n--Testcase 316:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 317:\nDELETE FROM special_case_int8;\n--Testcase 318:\nINSERT INTO special_case_int8 VALUES ('1_2_3'::int8);\n--Testcase 319:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 320:\nDELETE FROM special_case_int8;\n--Testcase 321:\nINSERT INTO special_case_int8 VALUES ('0x1EEE_FFFF'::int8);\n--Testcase 322:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 323:\nDELETE FROM special_case_int8;\n--Testcase 324:\nINSERT INTO special_case_int8 VALUES ('0o2_73'::int8);\n--Testcase 325:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 326:\nDELETE FROM special_case_int8;\n--Testcase 327:\nINSERT INTO special_case_int8 VALUES ('0b_10_0101'::int8);\n--Testcase 328:\nSELECT f1 FROM special_case_int8;\n\n-- error cases\n--Testcase 329:\nDELETE FROM special_case_int8;\n--Testcase 330:\nINSERT INTO special_case_int8 VALUES ('_100'::int8);\n--Testcase 331:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 332:\nDELETE FROM special_case_int8;\n--Testcase 333:\nINSERT INTO special_case_int8 VALUES ('100_'::int8);\n--Testcase 334:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 335:\nDELETE FROM special_case_int8;\n--Testcase 336:\nINSERT INTO special_case_int8 VALUES ('100__000'::int8);\n--Testcase 337:\nSELECT f1 FROM special_case_int8;\n\n--Testcase 338:\nDELETE FROM INT8_TBL;\n\n-- Clean up\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n\n--Testcase 249:\nDROP SERVER sqlite_svr;\n--Testcase 250:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/json.sql",
    "content": "-- SET log_min_messages TO DEBUG3;\n-- SET client_min_messages TO DEBUG3;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 010:\nCREATE FOREIGN TABLE \"type_JSON\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" json,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" json\n) SERVER sqlite_svr OPTIONS (table 'type_JSON');\n--Testcase 011:\nCREATE FOREIGN TABLE \"type_JSONB\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB');\n--Testcase 012:\nCREATE FOREIGN TABLE \"type_JSONB+\" (\n\t\"i\" int OPTIONS (key 'true'),\n\t\"j\" jsonb,\n\tl int, t varchar(16), tx text,\t\n\tot text,\n\tot1 text,\n\toi int,\n\toi1 int2,\n\tq text[],\n\t\"j1\" jsonb\n) SERVER sqlite_svr OPTIONS (table 'type_JSONB+');\n\n--Testcase 013:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, ot1, oi, oi1) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}],\"a+u\":47,\"5\":true,\"cc3\":[\"a\", \"b\", \"c\"], \"c3\":[true, false]}',\n'c', 'c3', 2, 1),\n(2, '[11,22,33,44,55,66,77,88,99,10,11,12,13,14]',\n'1', '29', 3, 1),\n(3, '{\"a\":\"xyz\", \"π\":3.1415926535, \"aπ\":false }',\n'a', 'π', 1, NULL),\n(4, '{\"a\":null, \"a22\":22.0, \"a2\":2 }',\n'a', '22', 4, NULL),\n(5, '[9,null,7,6,5,4,3,2,1,0]',\n'1', '5', -4, 5),\n(6, '[0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,null,true]',\n'1', '21', -2, 5);\n\n--Testcase 014:\nINSERT INTO \"type_JSONB\" SELECT * FROM \"type_JSON\";\n--Testcase 015: check some SQLite JSONb initial bytes\nSELECT i, tx FROM \"type_JSONB+\";\n\n--Testcase 020:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 021: SQLite queries to type_JSON will be without normalization for j column\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN j OPTIONS (ADD column_type 'text');\n--Testcase 022:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n\n--Testcase 023:\nSELECT \"i\", \"j\", j.\"j\"->'c' res FROM \"type_JSON\" j;\n--Testcase 024:\nSELECT \"i\", \"j\", j.\"j\"->'a' res FROM \"type_JSON\" j;\n--Testcase 025:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 026:\nSELECT \"i\", \"j\", j.\"j\"->'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 027:\nSELECT \"i\", \"j\", j.\"j\"->'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 028:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 029:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res FROM \"type_JSON\" j;\n--Testcase 030:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res FROM \"type_JSON\" j;\n--Testcase 031:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 032:\nSELECT \"i\", \"j\", j.\"j\"->>'c' res, l, t, tx FROM \"type_JSONB+\" j;\n--Testcase 033:\nSELECT \"i\", \"j\", j.\"j\"->>'a' res, l, t, tx FROM \"type_JSONB+\" j;\n\n--Testcase 034:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 035:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 036:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->'a' IS NOT NULL;\n--Testcase 037:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 038:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'c' IS NOT NULL;\n--Testcase 039:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->'a' IS NOT NULL;\n\n--Testcase 040:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 041:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 042:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 044:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'c' IS NOT NULL;\n--Testcase 045:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'a' IS NOT NULL;\n\n--Testcase 046:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 047:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSON\" j;\n--Testcase 048:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSON\" j;\n--Testcase 049:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 050:\nSELECT \"i\", \"j\", j.\"j\" -> 1 res FROM \"type_JSONB\" j;\n--Testcase 051:\nSELECT \"i\", \"j\", j.\"j\" -> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 052:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 053:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSON\" j;\n--Testcase 054:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSON\" j;\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 056:\nSELECT \"i\", \"j\", j.\"j\" ->> 1 res FROM \"type_JSONB\" j;\n--Testcase 057:\nSELECT \"i\", \"j\", j.\"j\" ->> 10 res FROM \"type_JSONB\" j;\n\n--Testcase 058:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 059:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 060:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n--Testcase 061:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 062:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 1 IS NOT NULL;\n--Testcase 063:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" -> 10 IS NOT NULL;\n\n--Testcase 064:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 065:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 066:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n--Testcase 067:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 068:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 1 IS NOT NULL;\n--Testcase 069:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\" ->> 10 IS NOT NULL;\n\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 071:\nSELECT \"i\", \"j\", ot, j.\"j\"->ot res FROM \"type_JSON\" j;\n--Testcase 072:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 073:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSON\" j;\n--Testcase 074:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n--Testcase 075:\nSELECT \"i\", \"j\", ot, j.\"j\"->>ot res FROM \"type_JSONB\" j;\n\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 077:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 078:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 079:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 081:\nSELECT \"i\", \"j\", ot FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 082:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 083:\nSELECT \"i\", \"j\", ot FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 085:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSON\" j;\n--Testcase 086:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n--Testcase 087:\nSELECT \"i\", \"j\", oi, j.\"j\" -> oi res FROM \"type_JSONB\" j;\n\n--Testcase 088:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 089:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSON\" j;\n--Testcase 090:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n--Testcase 091:\nSELECT \"i\", \"j\", oi, j.\"j\" ->> oi res FROM \"type_JSONB\" j;\n\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 093:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n--Testcase 095:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" -> oi IS NOT NULL;\n\n--Testcase 096:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 097:\nSELECT \"i\", \"j\", oi FROM \"type_JSON\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n--Testcase 099:\nSELECT \"i\", \"j\", oi FROM \"type_JSONB\" j WHERE j.\"j\" ->> oi IS NOT NULL;\n\n-- extraction with arithmetical an other expressions\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 101:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 103:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 105:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 107:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 109:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NOT NULL;\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 111:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + oi1) IS NULL;\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 113:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NOT NULL;\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n--Testcase 115:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + oi1) res, oi + oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + oi1) IS NULL;\n\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 117:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 119:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 120:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 121:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 122:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 123:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 124:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 125:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NOT NULL;\n--Testcase 126:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 127:\nSELECT \"i\", \"j\", j.\"j\" -> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi - oi1) IS NULL;\n--Testcase 128:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 129:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NOT NULL;\n--Testcase 130:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n--Testcase 131:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi - oi1) res, oi - oi1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi - oi1) IS NULL;\n\n--Testcase 132:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 133:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 134:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 135:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 136:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 137:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 138:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 139:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 140:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 141:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NOT NULL;\n--Testcase 142:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 143:\nSELECT \"i\", \"j\", j.\"j\" -> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (oi + 2) IS NULL;\n--Testcase 144:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 145:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NOT NULL;\n--Testcase 146:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n--Testcase 147:\nSELECT \"i\", \"j\", j.\"j\" ->> (oi + 2) res, oi + 2 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (oi + 2) IS NULL;\n\n--Testcase 148:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 149:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 151:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 153:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 155:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 157:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NOT NULL;\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 159:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || ot1) IS NULL;\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 161:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NOT NULL;\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n--Testcase 163:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || ot1) res, ot || ot1 expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || ot1) IS NULL;\n\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 165:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 167:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 169:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 171:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSON\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 172:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 173:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 174:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 175:\nSELECT \"i\", \"j\", j.\"j\" -> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" -> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 176:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 177:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NOT NULL;\n--Testcase 178:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n--Testcase 179:\nSELECT \"i\", \"j\", j.\"j\" ->> (ot || substr(ot1, 2, 1)) res, ot || substr(ot1, 2, 1) expr FROM \"type_JSONB\" j WHERE j.\"j\" ->> (ot || substr(ot1, 2, 1)) IS NULL;\n\n\n--TCs for SQLite JSON -> format, no sense in PostgreSQL itself\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 201:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 203:\nSELECT \"i\", \"j\" FROM \"type_JSON\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 204:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n--Testcase 205:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NOT NULL;\n\n--Testcase 206:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n--Testcase 207:\nSELECT \"i\", \"j\" FROM \"type_JSONB\" j WHERE j.\"j\"->>'$.c[2].f' IS NULL;\n\n--Testcase 208:\nDELETE FROM \"type_JSON\"; \n--Testcase 209:\nDELETE FROM \"type_JSONB\";\n--Testcase 210:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 211:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", ot, oi) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', 'c', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2]', NULL),\n(5, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '$.c[2].f', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.c[#-1]', NULL),\n(7, '{\"a\":2,\"c\":[4,5],\"f\":7}', '$.e', NULL);\n--Testcase 212:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 213:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 214:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 215:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSON\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 216:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 217:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NOT NULL;\n--Testcase 218:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n--Testcase 219:\nSELECT \"i\", \"j\", ot, \"j\" ->> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->>ot IS NULL;\n\n--Testcase 220:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 221:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 222:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 223:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSON\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 224:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 225:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NOT NULL;\n--Testcase 226:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n--Testcase 227:\nSELECT \"i\", \"j\", ot, \"j\" -> ot res FROM \"type_JSONB\" j WHERE j.\"j\"->ot IS NULL;\n-- end of SQLite right -> ->> operand test\n\n-- Operators -> ->> in SELECT context\n--Testcase 230:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n--Testcase 231:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 232:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 233:\nSELECT \"i\", \"j\"->>ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 234:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n--Testcase 235:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSON\" j;\n\n--Testcase 236:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n--Testcase 237:\nSELECT \"i\", \"j\"->ot \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 238:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n--Testcase 239:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j;\n\n--Testcase 240:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n--Testcase 241:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j;\n\n--Testcase 250:\nDELETE FROM \"type_JSON\"; \n--Testcase 251:\nDELETE FROM \"type_JSONB\";\n--Testcase 252:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 253:\nINSERT INTO \"type_JSON\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 254:\nALTER FOREIGN TABLE \"type_JSON\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 255:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text;\n--Testcase 256:\nINSERT INTO \"type_JSONB\" (\"i\", \"j\", q, ot) VALUES\n(1, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{a}', NULL),\n(2, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c}', NULL),\n(3, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2}', NULL),\n(4, '{\"a\":2,\"c\":[4,5,{\"f\":7}]}', '{c,2,f}', NULL),\n(5, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{c,-1}', NULL),\n(6, '{\"a\":2,\"c\":[4,5],\"f\":7}', '{u,8,i}', NULL),\n(7, '{\"a\":2}', '{a}', NULL);\n--Testcase 257:\nALTER FOREIGN TABLE \"type_JSONB\" ALTER COLUMN \"q\" TYPE text[];\n\n--Testcase 260:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 261:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 262:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 263:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 264:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n--Testcase 265\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NULL;\n\n--Testcase 266:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n--Testcase 267:\nSELECT \"i\", j.\"j\" #> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #> q IS NOT NULL;\n\n--Testcase 268:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 269:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 270:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 271:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSON\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 272:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n--Testcase 273\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NULL;\n\n--Testcase 274:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n--Testcase 275:\nSELECT \"i\", j.\"j\" #>> q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #>> q IS NOT NULL;\n\n--Testcase 276:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n--Testcase 277: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NULL;\n\n--Testcase 278:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n--Testcase 279:\nSELECT \"i\", j.\"j\" ?| q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?| q IS NOT NULL;\n\n--Testcase 280:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n--Testcase 281: no such - even wrong JSON gives false\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NULL;\n\n--Testcase 282:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n--Testcase 283:\nSELECT \"i\", j.\"j\" ?& q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" ?& q IS NOT NULL;\n\n--Testcase 284:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n--Testcase 285: no such\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" - q IS NULL;\n\n--Testcase 286:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 287:\nSELECT \"i\", j.\"j\" - q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 288:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n--Testcase 289: no such\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NULL;\n\n--Testcase 290:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 291:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 292:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n--Testcase 293:\nSELECT \"i\", j.\"j\" #- q \"r\" FROM \"type_JSONB\" j WHERE j.\"j\" #- q IS NOT NULL;\n\n--Testcase 294:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 295:\nUPDATE \"type_JSONB\" SET j1 = '{\"c\":[4,5,{\"f\":7}]}'::json;\n--Testcase 296:\nSELECT * FROM \"type_JSONB+\";\n\n--Testcase 297:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 298:\nSELECT \"i\", \"j\" @> \"j1\" \"r\" FROM \"type_JSONB\" WHERE \"j\" @> \"j1\";\n--Testcase 299:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n--Testcase 300: no such\nSELECT \"i\", \"j1\" <@ \"j\" \"r\" FROM \"type_JSONB\" WHERE \"j\" <@ \"j1\";\n\n--Multievel extraction chains\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 302:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" j;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 304:\nSELECT \"i\", \"j\", j.\"j\"-> 'c' -> 2 ->> 'f' res FROM \"type_JSONB\" j;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 306:\nSELECT *, \"j\" -> 'c' -> 2 ->> 'f' res FROM \"type_JSON\" WHERE i = 1 AND \"j\" -> 'c' -> 2 ->> 'f' IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n--Testcase 308:\nSELECT *, \"j\" -> 'q' -> 2 ->> 'r' res FROM \"type_JSONB\" WHERE i = 1 AND \"j\" -> 'q' -> 2 ->> 'r' IS NOT NULL;\n\n\n-- UPDATE tests\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 310:\nUPDATE \"type_JSON\" SET j = '{\"q\":[4,5,{\"r\":7}]}' WHERE \"i\" = 1;\n--Testcase 311:\nSELECT * FROM \"type_JSON\" WHERE \"i\" = 1;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 313:\nUPDATE \"type_JSONB\" SET j = '{\"q\":[4,5,{\"r\":7}]}'::json WHERE \"i\" = 1;\n--Testcase 314:\nSELECT * FROM \"type_JSONB+\" WHERE \"i\" = 1;\n\n\n-- Real GIS data test, data from https://www.wikidata.org/wiki/Q118122043\n-- https://commons.wikimedia.org/wiki/Category:Private_Garden_(Pavlovsk)\n-- License of testing data in json_osm_test table: ODbL, © OpenStreetMap contributors\n--Testcase 400:\nCREATE FOREIGN TABLE json_osm_test (\n\twkt text NOT NULL,\n\tosm_type varchar(8) OPTIONS (key 'true') NOT NULL,\n\tosm_id int8 OPTIONS (key 'true') NOT NULL,\n\tt json OPTIONS (column_name 'tags') NULL,\n\tway_nodes text NULL\n) SERVER sqlite_svr;\n\n--Testcase 401:\nINSERT INTO json_osm_test VALUES ('SRID=4326;POINT(30.4536193 59.6847624)', 'node', 1198356775, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4522474 59.6851858)', 'node', 1198357028, '{\"access\": \"private\", \"locked\": \"yes\", \"barrier\": \"gate\"}', NULL),\n ('SRID=4326;POINT(30.4532025 59.6850113)', 'node', 1738381537, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"description\": \"Ваза в дендрарии Собственного садика\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529584 59.6849417)', 'node', 3968068680, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526407 59.68497)', 'node', 4487385447, '{\"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"late C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4524943 59.6854502)', 'node', 4912270255, '{\"fee\": \"yes\", \"access\": \"customers\", \"barrier\": \"gate\", \"vehicle\": \"no\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"barrier:personnel\": \"additional\"}', NULL),\n ('SRID=4326;POINT(30.452977 59.6847621)', 'node', 7484858507, '{\"name\": \"Неизвестный мужчина\", \"ref:okn\": \"781610399040516\", \"tourism\": \"artwork\", \"alt_name\": \"Спутник Одиссея\", \"heritage\": \"2\", \"historic\": \"yes\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6522/\"}', NULL),\n ('SRID=4326;POINT(30.452909 59.6847573)', 'node', 7484858508, '{\"name\": \"Антиной\", \"ref:okn\": \"781610399040526\", \"tourism\": \"artwork\", \"alt_name\": \"Дионис\", \"heritage\": \"2\", \"historic\": \"yes\", \"material\": \"stone\", \"start_date\": \"late C18..early C19\", \"artwork_type\": \"bust\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6521/\"}', NULL),\n ('SRID=4326;POINT(30.4529561 59.6848095)', 'node', 8114975053, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528946 59.6848042)', 'node', 8114975054, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528732 59.6848762)', 'node', 8114975055, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529364 59.6848802)', 'node', 8114975056, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528444 59.6851765)', 'node', 8289295956, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527798 59.6851726)', 'node', 8289295957, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528665 59.6850957)', 'node', 8289295958, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528046 59.685091)', 'node', 8289295959, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528947 59.6850172)', 'node', 8289295960, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528301 59.6850118)', 'node', 8289295961, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4529101 59.6849636)', 'node', 8289295962, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528496 59.684959)', 'node', 8289295963, '{\"name\": \"Ваза\", \"height\": \"1.5\", \"name:en\": \"Vase\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"wikidata\": \"Q118122044\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4528359 59.6852187)', 'node', 8331430659, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4527605 59.685213)', 'node', 8331430660, '{\"height\": \"2\", \"ref:okn\": \"781620399040936\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"material\": \"marble\", \"start_date\": \"C18\", \"artwork_type\": \"vase\"}', NULL),\n ('SRID=4326;POINT(30.4523414 59.6851726)', 'node', 8331430663, '{\"name\": \"Сатир\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4523561 59.685141)', 'node', 8331430664, '{\"name\": \"Сатиресса\", \"height\": \"1.5\", \"tourism\": \"artwork\", \"historic\": \"yes\", \"wikidata\": \"Q118122105\", \"start_date\": \"~1779..1801\", \"artwork_type\": \"statue\", \"artwork:start_date\": \"C18\"}', NULL),\n ('SRID=4326;POINT(30.4527994 59.6847007)', 'node', 8566916332, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4528945 59.6847497)', 'node', 8566916333, '{\"height\": \"8\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529784 59.6853519)', 'node', 8895996426, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4529255 59.6853861)', 'node', 8895996427, '{\"genus\": \"Thuja\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4525278 59.685471)', 'node', 8895996643, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4534153 59.6851412)', 'node', 8899249758, '{\"genus\": \"Elaeagnus\", \"taxon\": \"Elaeagnus commutata\", \"natural\": \"shrub\", \"genus:ru\": \"Лох\", \"taxon:ru\": \"Лох серебристый\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4535524 59.6848638)', 'node', 8899249764, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4535202 59.6849613)', 'node', 8899249765, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534934 59.6850486)', 'node', 8899249766, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4534679 59.685136)', 'node', 8899249767, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4528899 59.6851725)', 'node', 8899249768, '{\"height\": \"0.8\", \"highway\": \"street_lamp\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530448 59.6850046)', 'node', 8899249769, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4533465 59.6850216)', 'node', 8899249770, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4532205 59.6849417)', 'node', 8899249771, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531776 59.6850839)', 'node', 8899249772, '{\"colour\": \"green\", \"amenity\": \"bench\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6851265)', 'node', 8899249773, '{\"genus\": \"Malus\", \"taxon\": \"Malus niedzwetzkyana\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Яблоня\", \"taxon:ru\": \"Яблоня Недзвецкого\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533043 59.6851928)', 'node', 8899249779, '{\"height\": \"4\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.452916 59.6849894)', 'node', 8899249796, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4528248 59.684983)', 'node', 8899249797, '{\"colour\": \"green\", \"amenity\": \"bench\", \"ref:okn\": \"781620399040946\", \"backrest\": \"yes\", \"material\": \"wood\"}', NULL),\n ('SRID=4326;POINT(30.4531527 59.685139)', 'node', 8899299127, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4529549 59.6850382)', 'node', 8902082041, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530139 59.6850101)', 'node', 8902082042, '{\"genus\": \"Amelanchier\", \"taxon\": \"Amelanchier canadensis\", \"natural\": \"shrub\", \"genus:ru\": \"Ирга\", \"taxon:ru\": \"Ирга канадская\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530089 59.6850564)', 'node', 8902082048, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529982 59.685072)', 'node', 8902082055, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530213 59.6850872)', 'node', 8902082060, '{\"genus\": \"Picea\", \"taxon\": \"Picea glauca\", \"height\": \"1.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель сизая\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4529918 59.6851617)', 'node', 8902082061, '{\"genus\": \"Berberis\", \"taxon\": \"Berberis vulgaris\", \"natural\": \"shrub\", \"genus:ru\": \"Барбарис\", \"taxon:ru\": \"Барбарис обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530615 59.685137)', 'node', 8902082071, '{\"genus\": \"Paeonia\", \"taxon\": \"Paeonia suffruticosa\", \"natural\": \"shrub\", \"genus:ru\": \"Пион\", \"taxon:ru\": \"Пион древовидный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531031 59.6851282)', 'node', 8902082072, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530991 59.6851451)', 'node', 8902082073, '{\"genus\": \"Caragana\", \"taxon\": \"Caragana arborescens\", \"natural\": \"shrub\", \"genus:ru\": \"Карагана\", \"taxon:ru\": \"Карагана древовидная\", \"description\": \"Акация желтая\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4531977 59.6851532)', 'node', 8902082074, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453207 59.6851336)', 'node', 8902082075, '{\"genus\": \"Thuja\", \"taxon\": \"Thuja occidentalis\", \"height\": \"1\", \"natural\": \"tree\", \"genus:ru\": \"Туя\", \"taxon:ru\": \"Туя западная\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532426 59.6850926)', 'node', 8902082171, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532694 59.6851157)', 'node', 8902082172, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533707 59.6851035)', 'node', 8902082173, '{\"genus\": \"Hydrangea\", \"taxon\": \"Hydrangea paniculata\", \"natural\": \"shrub\", \"genus:ru\": \"Гортензия\", \"taxon:ru\": \"Гортензия метельчатая\"}', NULL),\n ('SRID=4326;POINT(30.4528986 59.6851502)', 'node', 8902082174, '{\"genus\": \"Quercus\", \"taxon\": \"Quercus robur\", \"natural\": \"tree\", \"genus:ru\": \"Дуб\", \"taxon:ru\": \"Дуб черешчатый\", \"leaf_type\": \"broadleaved\", \"denotation\": \"landmark\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4530486 59.6848994)', 'node', 8904992674, '{\"genus\": \"Viburnum\", \"taxon\": \"Viburnum opulus\", \"natural\": \"shrub\", \"genus:ru\": \"Калина\", \"taxon:ru\": \"Калина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532396 59.6848373)', 'node', 8905335421, '{\"genus\": \"Corylus\", \"taxon\": \"Corylus avellana\", \"natural\": \"shrub\", \"genus:ru\": \"Лещина\", \"taxon:ru\": \"Лещина обыкновенная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532946 59.684841)', 'node', 8905335422, '{\"genus\": \"Spiraea\", \"taxon\": \"Spiraea chamaedryfolia\", \"natural\": \"shrub\", \"genus:ru\": \"Спирея\", \"taxon:ru\": \"Спирея дубравколистная\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533857 59.6849271)', 'node', 8905335423, '{\"genus\": \"Euonymus\", \"taxon\": \"Euonymus europaeus\", \"natural\": \"shrub\", \"genus:ru\": \"Бересклет\", \"taxon:ru\": \"Бересклет европейский\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534136 59.6849004)', 'node', 8905335424, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus sachalinensis\", \"height\": \"5\", \"natural\": \"tree\", \"genus:ru\": \"Вишня\", \"taxon:ru\": \"Вишня сахалинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4533998 59.6848611)', 'node', 8905335425, '{\"genus\": \"Buxus\", \"taxon\": \"Buxus sempervirens\", \"height\": \"1\", \"natural\": \"shrub\", \"genus:ru\": \"Самшит\", \"taxon:ru\": \"Самшит вечнозелёный\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4534776 59.6848679)', 'node', 8905335426, '{\"genus\": \"Rhamnus\", \"taxon\": \"Rhamnus cathartica\", \"height\": \"4\", \"natural\": \"tree\", \"genus:ru\": \"Жостер\", \"taxon:ru\": \"Жостер слабительный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4534324 59.6849515)', 'node', 8905335427, '{\"genus\": \"Lonicera\", \"taxon\": \"Lonicera caerulea\", \"natural\": \"shrub\", \"genus:ru\": \"Жимолость\", \"taxon:ru\": \"Жимолость синяя\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.453365 59.684981)', 'node', 8905335428, '{\"genus\": \"Philadelphus\", \"taxon\": \"Philadelphus coronarius\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник венечный\"}', NULL),\n ('SRID=4326;POINT(30.4533874 59.6849671)', 'node', 8905335429, '{\"genus\": \"Juniperus\", \"taxon\": \"Juniperus sabina\", \"height\": \"0.5\", \"natural\": \"shrub\", \"genus:ru\": \"Можжевельник\", \"taxon:ru\": \"Можжевельник казацкий\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\"}', NULL),\n ('SRID=4326;POINT(30.4531319 59.6849356)', 'node', 8905335430, '{\"genus\": \"Picea\", \"taxon\": \"Picea abies\", \"height\": \"0.5\", \"natural\": \"tree\", \"genus:ru\": \"Ель\", \"taxon:ru\": \"Ель европейская\", \"leaf_type\": \"needleleaved\", \"leaf_cycle\": \"evergreen\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532466 59.6848527)', 'node', 8905335431, '{\"genus\": \"Ginkgo\", \"taxon\": \"Ginkgo biloba\", \"height\": \"2.5\", \"natural\": \"tree\", \"genus:ru\": \"Гингко\", \"taxon:ru\": \"Гинкго двулопастный\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"label\"}', NULL),\n ('SRID=4326;POINT(30.4532184 59.6848635)', 'node', 8905335468, '{\"genus\": \"Daphne\", \"taxon\": \"Daphne mezereum\", \"natural\": \"shrub\", \"genus:ru\": \"Волчеягодник\", \"taxon:ru\": \"Волчеягодник обыкновенный\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4532392 59.6848902)', 'node', 8905335469, '{\"height\": \"3\", \"natural\": \"tree\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;POINT(30.4526679 59.6846912)', 'node', 8905558225, '{\"height\": \"3\", \"highway\": \"street_lamp\", \"man_made\": \"surveillance\", \"material\": \"metal\", \"lamp_type\": \"electric\"}', NULL),\n ('SRID=4326;POINT(30.4530347 59.6849253)', 'node', 8906857477, '{\"genus\": \"Philadelphus lemoinei\", \"taxon\": \"Philadelphus lemoinei\", \"natural\": \"shrub\", \"genus:ru\": \"Чубушник\", \"taxon:ru\": \"Чубушник Лемуана\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530224 59.6849455)', 'node', 8906857478, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;POINT(30.4530015 59.6847554)', 'node', 8906857479, '{\"natural\": \"tree_stump\"}', NULL),\n ('SRID=4326;LINESTRING(30.4522584 59.6851734,30.4522474 59.6851858)', 'way', 103807093, '{\"highway\": \"footway\", \"surface\": \"compacted\"}', '{3968068679,1198357028}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525041 59.6846527,30.4522364 59.6845601,30.4516531 59.6843525,30.4513385 59.6842533,30.4513511 59.6841667)', 'way', 103807103, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{8566824024,12023699867,8114975022,1195141497,4014269128,3186425168}'),\n ('SRID=4326;LINESTRING(30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456)', 'way', 103807114, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{1198357004,303515662,8566916345,1198356771,8566916346,1198356889,1198357009,8906857470}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529382 59.6847803,30.4528051 59.6851927,30.4527793 59.6852746,30.4527609 59.6853349,30.4527422 59.6853961,30.4527263 59.6854482,30.4527224 59.6854618)', 'way', 153761053, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068681,8114975050,8114975107,8895975844,8895975845,8895975847,4912270253,1664064412}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4532459 59.6852254,30.45322 59.6852491)', 'way', 153761054, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975105,3968068669}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4528762 59.6851274,30.4530118 59.6851874)', 'way', 153947121, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381541,1665582246}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4529574 59.6848702,30.4531238 59.6848204)', 'way', 153947122, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1738381532,1665582234}'),\n ('SRID=4326;LINESTRING(30.4533888 59.6848413,30.4535109 59.6849058,30.4534919 59.684967)', 'way', 153947123, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582235,1738381534,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533267 59.6852228,30.4533391 59.6851996,30.4533483 59.6851876,30.4533556 59.6851828,30.4533653 59.6851769,30.4533784 59.6851717,30.4533901 59.6851678,30.4534147 59.6851629,30.4534315 59.6851615,30.4534524 59.6850941)', 'way', 153947124, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,8114975034,8899249793,8114975035,8902027910,8899249794,8902027909,8899249795,1738381544,8114975036,1665582244}'),\n ('SRID=4326;LINESTRING(30.4531795 59.685129,30.4533062 59.6850846,30.4534722 59.6850303,30.4534919 59.684967)', 'way', 153947125, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975075,1665582243,1738381539,1665582240}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4530483 59.6850678,30.4529356 59.6849912)', 'way', 153947126, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,1665582242,8902082170}'),\n ('SRID=4326;LINESTRING(30.4529356 59.6849912,30.4530873 59.6849398,30.453213 59.6848988)', 'way', 153947127, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8902082170,1665582238,8904992643}'),\n ('SRID=4326;LINESTRING(30.4532598 59.6849025,30.4533508 59.6849575,30.4534722 59.6850303,30.4534524 59.6850941)', 'way', 153947128, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992648,1665582239,1738381539,1665582244}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4531238 59.6848204,30.4533888 59.6848413,30.4535282 59.6848524)', 'way', 153947130, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1665582234,1665582235,1665582236}'),\n ('SRID=4326;LINESTRING(30.4529389 59.6849276,30.4530873 59.6849398,30.4532201 59.6849487,30.4533508 59.6849575,30.4534919 59.684967)', 'way', 153947131, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582237,1665582238,8902082149,1665582239,1665582240}'),\n ('SRID=4326;LINESTRING(30.4532657 59.6852057,30.4533062 59.6850846,30.4533306 59.6850189,30.4533508 59.6849575,30.4533888 59.6848413)', 'way', 153947132, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582248,1665582243,8902082150,1665582239,1665582235}'),\n ('SRID=4326;LINESTRING(30.4534524 59.6850941,30.4533062 59.6850846,30.4531801 59.6850762,30.4530483 59.6850678,30.452898 59.6850578)', 'way', 153947133, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582244,1665582243,8902082168,1665582242,1665582241}'),\n ('SRID=4326;LINESTRING(30.4532234 59.6850226,30.4533062 59.6850846,30.4534147 59.6851629)', 'way', 153947134, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975088,1665582243,1738381544}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4530483 59.6850678,30.4530675 59.6850048,30.4530873 59.6849398,30.4531238 59.6848204)', 'way', 153947135, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,1665582242,8902082151,1665582238,1665582234}'),\n ('SRID=4326;LINESTRING(30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858)', 'way', 312745383, '{\"barrier\": \"fence\"}', '{1439053672,4912270255,4438910482,8895996664,4438910480,3234125031,4438910477,8893386635,4438910475,8895996665,4438910473,8114975112,8114975111,1198357028}'),\n ('SRID=4326;LINESTRING(30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554)', 'way', 315626926, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053649,8895996432,8895996430,1439053648,1439053645,8895996431,1439053641,1439053639}'),\n ('SRID=4326;LINESTRING(30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577)', 'way', 317173782, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"material\": \"metal\", \"fence_type\": \"bars\"}', '{1653641713,8114975028,8114975027,8566824024}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.4526304 59.6847065,30.4529536 59.6847313,30.453482 59.6847765,30.4535921 59.6847856,30.4535778 59.6848316,30.4534654 59.685163)', 'way', 393601662, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774427,8905543616,3968068681,7927774426,3968068674,8114975049,3968068687}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4530118 59.6851874,30.4532501 59.6852048,30.4532657 59.6852057)', 'way', 393601664, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1665582246,8899299159,1665582248}'),\n ('SRID=4326;LINESTRING(30.4528624 59.685176,30.4528762 59.6851274,30.4530483 59.6850678,30.4531752 59.6850205)', 'way', 393601667, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068670,1738381541,1665582242,8114975100}'),\n ('SRID=4326;LINESTRING(30.452545 59.6854429,30.4525305 59.6854105,30.4525224 59.6853929,30.4525133 59.6853758,30.4525036 59.6853597,30.4524909 59.6853438,30.4524775 59.6853279,30.4524583 59.6853083,30.4524437 59.6852938,30.4524165 59.6852717,30.4523957 59.6852568,30.452375 59.6852427,30.4523461 59.6852243,30.4523179 59.6852068)', 'way', 393620818, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975116,8895996660,8895996640,4438927787,8895996641,8895996659,8895996642,4438927782,8114975115,8895996661,8895996639,4438927777,8895996638,8114975114}'),\n ('SRID=4326;LINESTRING(30.45322 59.6852491,30.4530263 59.6852336,30.4529402 59.6852275,30.4528645 59.6852217)', 'way', 393620820, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{3968068669,8895975857,8895975877,8895975841}'),\n ('SRID=4326;LINESTRING(30.4527686 59.6854977,30.4528746 59.6855048)', 'way', 446650486, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{1439053671,1439053674}'),\n ('SRID=4326;LINESTRING(30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905)', 'way', 446650506, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053619,8914843795,8895996424,8914843796,1439053616,8914843797,8895996423,8914843798,1439053613,8914843799,8895996422,8895996441,8914843802,8895996421,8914843801,1439053611,8914843800,8895996420,1439053614}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522278 59.6851794)', 'way', 446651403, '{\"barrier\": \"fence\"}', '{1198357028,1653641713}'),\n ('SRID=4326;LINESTRING(30.4524943 59.6854502,30.452545 59.6854429,30.4525879 59.6854383,30.4527263 59.6854482,30.4528729 59.6854587)', 'way', 500077282, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{4912270255,8114975116,4438928092,4912270253,4438928093}'),\n ('SRID=4326;LINESTRING(30.4522474 59.6851858,30.4522167 59.6853009)', 'way', 758868053, '{\"highway\": \"footway\"}', '{1198357028,1406921754}'),\n ('SRID=4326;LINESTRING(30.4529536 59.6847313,30.4529562 59.6847243)', 'way', 849729200, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068681,8905543615}'),\n ('SRID=4326;LINESTRING(30.453482 59.6847765,30.4534851 59.684767)', 'way', 849729201, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{7927774426,8905543614}'),\n ('SRID=4326;LINESTRING(30.452599 59.6846895,30.4525675 59.6846756,30.45256 59.6846723,30.452568 59.6846486,30.4535014 59.6847265,30.4534976 59.6847368)', 'way', 849729202, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{3968068677,12023732269,8566916344,8566916343,8566916342,7927774425}'),\n ('SRID=4326;LINESTRING(30.4528543 59.6851747,30.4529071 59.6850026,30.4529249 59.685004,30.4529333 59.6849769,30.452917 59.6849756,30.4529721 59.6847963)', 'way', 871154683, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8114975041,8899249805,8899249804,8899249803,8899249802,8114975042}'),\n ('SRID=4326;LINESTRING(30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274,30.4526587 59.6847165)', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8114975046,8114975047,8906857474,8906857473,8114975046}'),\n ('SRID=4326;LINESTRING(30.4530118 59.6851874,30.4531264 59.6851489)', 'way', 871154687, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582246,8114975076}'),\n ('SRID=4326;LINESTRING(30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257)', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975078,8114975073,8114975074,8114975057,8114975058,8114975059,8114975075,8114975060,8114975061,8114975067,8114975068,8114975069,8114975077,8114975070,8114975062,8114975063,8114975064,8114975076,8114975065,8114975066,8114975071,8114975072,8114975078}'),\n ('SRID=4326;LINESTRING(30.4532501 59.6852048,30.4531713 59.6851525)', 'way', 871154689, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8899299159,8114975077}'),\n ('SRID=4326;LINESTRING(30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998)', 'way', 871154691, '{\"highway\": \"footway\"}', '{8114975097,8114975079,8114975080,8114975081,8114975082,8114975083,8114975099,8114975084,8114975085,8114975086,8114975087,8114975088,8114975089,8114975090,8114975091,8114975092,8114975100,8114975093,8114975094,8114975095,8114975096,8114975097}'),\n ('SRID=4326;LINESTRING(30.4529775 59.684808,30.4529574 59.6848702,30.4530873 59.6849398,30.4531787 59.684998)', 'way', 871154694, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1664064416,1738381532,1665582238,8114975097}'),\n ('SRID=4326;LINESTRING(30.4532281 59.6850005,30.4533508 59.6849575,30.4535109 59.6849058,30.4535282 59.6848524)', 'way', 871154695, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975099,1665582239,1738381534,1665582236}'),\n ('SRID=4326;LINESTRING(30.4532459 59.6852254,30.4528051 59.6851927,30.4522785 59.6851511)', 'way', 871154698, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8114975105,8114975107,8114975109}'),\n ('SRID=4326;LINESTRING(30.4526095 59.6853751,30.4526201 59.6853832,30.4527025 59.6853899,30.4527175 59.6853841,30.4527302 59.6853414,30.4527195 59.685334,30.4526348 59.6853281,30.4526225 59.6853328,30.4526095 59.6853751)', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', '{8114975123,8114975124,8114975125,8895996607,8895996606,8114975126,8114975127,8114975181,8114975123}'),\n ('SRID=4326;LINESTRING(30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686)', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', '{8114975136,8114975137,8114975138,8114975139,8114975140,8114975141,8114975142,8114975143,8114975136}'),\n ('SRID=4326;LINESTRING(30.4525419 59.6853075,30.4525505 59.6853142,30.4526031 59.6853185,30.4526157 59.6853129,30.4526268 59.6852724,30.4526177 59.6852659,30.4525671 59.6852621,30.452555 59.6852672,30.4525419 59.6853075)', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', '{8114975144,8114975145,8114975146,8114975147,8114975148,8114975149,8114975150,8114975151,8114975144}'),\n ('SRID=4326;LINESTRING(30.4526478 59.6852554,30.4526557 59.6852612,30.452739 59.6852678,30.4527533 59.685262,30.452765 59.685222,30.4527443 59.68522,30.4527459 59.685216,30.452673 59.6852102,30.4526587 59.6852148,30.4526478 59.6852554)', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', '{8114975172,8114975173,8114975174,8114975175,8114975176,8114975177,8114975178,8114975179,8114975180,8114975172}'),\n ('SRID=4326;LINESTRING(30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', '{8129422266,8129422267,8129422268,8129422269,8129422270,8129422271,8129422272,8895996472,8129422273,8895996471,8129422266}'),\n ('SRID=4326;LINESTRING(30.4536402 59.684764,30.4536193 59.6847624,30.4536067 59.6847614)', 'way', 891865282, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{1635198216,1198356775,8289295975}'),\n ('SRID=4326;LINESTRING(30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232)', 'way', 922841960, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824024,1653641402,8566824025,8566824026}'),\n ('SRID=4326;LINESTRING(30.453531 59.6847593,30.4531199 59.6847256)', 'way', 922854851, '{\"height\": \"8\", \"natural\": \"tree_row\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{5002059748,5002059751}'),\n ('SRID=4326;LINESTRING(30.4526262 59.684701,30.452599 59.6846895)', 'way', 922854852, '{\"highway\": \"steps\"}', '{7927774427,3968068677}'),\n ('SRID=4326;LINESTRING(30.4536067 59.6847614,30.4535894 59.6847601)', 'way', 922854853, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{8289295975,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4526552 59.6847274,30.4526587 59.6847165,30.4528767 59.6847343,30.4528732 59.6847452,30.4526552 59.6847274)))', 'way', 871154684, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531197 59.6851398,30.4531205 59.6851349,30.4531241 59.6851304,30.4531325 59.6851257,30.4531378 59.6851238,30.4531466 59.6851223,30.4531559 59.6851221,30.453165 59.6851233,30.453173 59.6851256,30.4531795 59.685129,30.4531835 59.6851328,30.4531855 59.685137,30.4531853 59.6851413,30.4531829 59.6851454,30.4531786 59.6851491,30.4531713 59.6851525,30.4531634 59.6851545,30.4531533 59.6851554,30.4531431 59.6851547,30.4531339 59.6851525,30.4531264 59.6851489,30.4531217 59.6851446,30.4531197 59.6851398)))', 'way', 871154688, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531682 59.6850102,30.4531694 59.6850057,30.453173 59.6850015,30.4531787 59.684998,30.4531868 59.6849952,30.4531962 59.6849937,30.453206 59.6849937,30.4532145 59.684995,30.453222 59.6849973,30.4532281 59.6850005,30.4532323 59.6850046,30.4532341 59.6850091,30.4532335 59.6850137,30.4532298 59.6850185,30.4532234 59.6850226,30.4532151 59.6850253,30.4532056 59.6850267,30.4531956 59.6850267,30.4531843 59.6850246,30.4531752 59.6850205,30.45317 59.6850157,30.4531682 59.6850102)))', 'way', 871154691, '{\"highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526095 59.6853751,30.4526225 59.6853328,30.4526348 59.6853281,30.4527195 59.685334,30.4527302 59.6853414,30.4527175 59.6853841,30.4527025 59.6853899,30.4526201 59.6853832,30.4526095 59.6853751)))', 'way', 871154699, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526283 59.6853139,30.4526398 59.6852734,30.4526535 59.6852686,30.4527368 59.6852749,30.4527467 59.6852817,30.4527358 59.6853225,30.4527215 59.6853281,30.4526382 59.6853213,30.4526283 59.6853139)))', 'way', 871154701, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525419 59.6853075,30.452555 59.6852672,30.4525671 59.6852621,30.4526177 59.6852659,30.4526268 59.6852724,30.4526157 59.6853129,30.4526031 59.6853185,30.4525505 59.6853142,30.4525419 59.6853075)))', 'way', 871154702, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526478 59.6852554,30.4526587 59.6852148,30.452673 59.6852102,30.4527459 59.685216,30.4527443 59.68522,30.452765 59.685222,30.4527533 59.685262,30.452739 59.6852678,30.4526557 59.6852612,30.4526478 59.6852554)))', 'way', 871154706, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525308 59.6853272,30.4525479 59.6853207,30.452602 59.6853253,30.4526097 59.6853317,30.4525977 59.6853735,30.4525857 59.6853804,30.4525671 59.6853795,30.452562 59.6853695,30.4525568 59.6853608,30.4525449 59.685344,30.4525308 59.6853272)))', 'way', 872998899, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;LINESTRING(30.4521596 59.6854203,30.4524943 59.6854502)', 'way', 961421780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8893386627,4912270255}'),\n ('SRID=4326;LINESTRING(30.4533818 59.6852214,30.4533763 59.68521)', 'way', 961717566, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053598,1439053596}'),\n ('SRID=4326;LINESTRING(30.4534979 59.6851951,30.4535038 59.6852069)', 'way', 961717567, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053589,1439053591}'),\n ('SRID=4326;LINESTRING(30.4533763 59.68521,30.4534979 59.6851951)', 'way', 961717568, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053596,1439053589}'),\n ('SRID=4326;LINESTRING(30.4527378 59.6852117,30.4526559 59.6852052,30.4525684 59.6851982,30.4524641 59.6851898,30.4522584 59.6851734)', 'way', 961717569, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975842,8895975876,8895975873,8895975858,3968068679}'),\n ('SRID=4326;LINESTRING(30.4530032 59.685292,30.453022 59.6852839,30.4530407 59.6852758,30.4530635 59.68527,30.4530877 59.685267,30.4531091 59.6852663,30.4531333 59.6852683,30.4531547 59.6852744,30.45322 59.6852491)', 'way', 961717570, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975875,8895975856,8895975855,8895975850,8895975854,8895975853,8895975852,8895975851,3968068669}'),\n ('SRID=4326;LINESTRING(30.4524419 59.6852441,30.452456 59.6851977,30.4524483 59.6851915,30.4523702 59.6851856,30.4523568 59.6851898,30.4523826 59.6852055,30.4524088 59.6852218,30.4524248 59.6852328,30.4524419 59.6852441)', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', '{8895975865,8895975864,8895975863,8895975862,8895975859,8895975861,8895975860,8895975838,8895975865}'),\n ('SRID=4326;LINESTRING(30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946)', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', '{8895975872,8895975871,8895975870,8895975869,8895975868,8895975867,8895975866,8895975872}'),\n ('SRID=4326;LINESTRING(30.4530263 59.6852336,30.4530032 59.685292,30.4529231 59.6852858,30.4527793 59.6852746,30.452638 59.6852636,30.4525513 59.6852568,30.4524466 59.6852487,30.4524641 59.6851898)', 'way', 961717573, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975857,8895975875,8895975843,8895975844,8895975848,8895975846,8895975874,8895975858}'),\n ('SRID=4326;LINESTRING(30.4529402 59.6852275,30.4529231 59.6852858,30.4529053 59.6853463,30.4528865 59.6854078)', 'way', 961717574, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975877,8895975843,8895975880,8895975878}'),\n ('SRID=4326;LINESTRING(30.4526559 59.6852052,30.452638 59.6852636,30.4526195 59.6853238,30.4526009 59.6853847,30.4527422 59.6853961,30.4528865 59.6854078)', 'way', 961717575, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975876,8895975848,8895975849,8895975879,8895975847,8895975878}'),\n ('SRID=4326;LINESTRING(30.4525684 59.6851982,30.4525513 59.6852568,30.4525338 59.685317,30.4526195 59.6853238,30.4527609 59.6853349,30.4529053 59.6853463)', 'way', 961717576, '{\"access\": \"private\", \"highway\": \"footway\", \"surface\": \"fine_gravel\", \"historic\": \"yes\"}', '{8895975873,8895975846,8895975881,8895975849,8895975845,8895975880}'),\n ('SRID=4326;LINESTRING(30.4527487 59.6852082,30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082)', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', '{8895975885,8895975884,8895975883,8895975882,8895975885}'),\n ('SRID=4326;LINESTRING(30.4532064 59.6852443,30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443)', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', '{8895975889,8895975888,8895975887,8895975886,8895975889}'),\n ('SRID=4326;LINESTRING(30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696)', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', '{8895975901,8895975902,8895975900,8895975903,8895975891,8895975890,8895975901}'),\n ('SRID=4326;LINESTRING(30.4530554 59.6852658,30.4530414 59.6852392,30.453028 59.6852429,30.4530143 59.6852802,30.4530288 59.6852733,30.453041 59.6852693,30.4530554 59.6852658)', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', '{8895975898,8895975895,8895975896,8895975907,8895975897,8895975906,8895975898}'),\n ('SRID=4326;LINESTRING(30.4530632 59.6852641,30.4530782 59.6852621,30.4530921 59.6852616,30.4531031 59.6852618,30.4531172 59.6852446,30.4530501 59.6852392,30.4530632 59.6852641)', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', '{8895975905,8895975899,8895975904,8895975892,8895975893,8895975894,8895975905}'),\n ('SRID=4326;LINESTRING(30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204)', 'way', 961717582, '{\"height\": \"7\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6\"}', '{1439053627,8914843793,8895996425,8914843794,1439053619}'),\n ('SRID=4326;LINESTRING(30.4525812 59.6854845,30.4526564 59.6854895)', 'way', 961717593, '{\"height\": \"2\", \"barrier\": \"fence\", \"material\": \"stone\", \"fence_type\": \"bars\", \"min_height\": \"1\"}', '{8895996555,1439053669}'),\n ('SRID=4326;LINESTRING(30.4527747 59.6854387,30.4528506 59.685445,30.4528681 59.6854402,30.4528755 59.6854172,30.4528654 59.6854091,30.4527852 59.6854026,30.4527687 59.6854078,30.4527618 59.6854305,30.4527747 59.6854387)', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', '{8895996465,8895996464,8895996463,8895996462,8895996461,8895996460,8895996459,8895996458,8895996465}'),\n ('SRID=4326;LINESTRING(30.4525201 59.6853123,30.4525328 59.6853069,30.4525442 59.6852666,30.4525351 59.6852597,30.4524557 59.6852538,30.4524775 59.6852724,30.4524969 59.6852906,30.4525201 59.6853123)', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', '{8895996470,8895996469,8895996468,8895996467,8895996466,8895996428,8895996429,8895996470}'),\n ('SRID=4326;LINESTRING(30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969,30.4523418 59.6851889)', 'way', 961717596, '{\"landuse\": \"grass\"}', '{8895996495,8895975839,8895996483,8895996484,8895996485,8895996486,8895996487,8895996488,8895996489,8895996490,8895996491,8895996492,8895996493,8895996494,8895996496,8895996473,8895996479,8895996480,8895996474,8895996509,8895996508,8895996507,8895996506,8895996505,8895996504,8895996503,8895996502,8895996501,8895996500,8895996499,8895996498,8895996497,8895996478,8895996495}'),\n ('SRID=4326;LINESTRING(30.4523081 59.6852118,30.4522803 59.6851945,30.4522795 59.6852157,30.4523143 59.6852356,30.4523427 59.6852536,30.4523628 59.6852673,30.4523827 59.6852816,30.4524087 59.6853027,30.4524225 59.6853163,30.4524411 59.6853354,30.452454 59.6853507,30.452466 59.6853657,30.4524751 59.6853808,30.4524839 59.6853973,30.4524918 59.6854125,30.4524982 59.6854272,30.452501 59.6854325,30.4525097 59.6854362,30.4525224 59.6854348,30.4525257 59.6854303,30.4525231 59.6854242,30.4525171 59.6854097,30.4525091 59.6853943,30.4525002 59.6853776,30.4524909 59.685362,30.4524785 59.6853465,30.4524653 59.6853309,30.4524465 59.6853116,30.4524322 59.6852976,30.4524056 59.685276,30.4523853 59.6852614,30.4523649 59.6852475,30.4523362 59.6852293,30.4523081 59.6852118)', 'way', 961717597, '{\"landuse\": \"grass\"}', '{8895996522,8895996477,8895996536,8895996524,8895996525,8895996526,8895996527,8895996528,8895996529,8895996530,8895996531,8895996532,8895996533,8895996534,8895996535,8895996537,8895996482,8895996476,8895996481,8895996523,8895996475,8895996521,8895996520,8895996519,8895996518,8895996517,8895996516,8895996515,8895996514,8895996513,8895996512,8895996511,8895996510,8895996522}'),\n ('SRID=4326;LINESTRING(30.4526076 59.685425,30.4526842 59.6854313,30.4527032 59.6854269,30.4527112 59.6854034,30.4527003 59.6853955,30.4526196 59.6853891,30.4526042 59.6853942,30.4525975 59.6854176,30.4526076 59.685425)', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', '{8895996545,8895996544,8895996543,8895996542,8895996541,8895996540,8895996539,8895996538,8895996545}'),\n ('SRID=4326;LINESTRING(30.4528639 59.685494,30.4528702 59.6854731,30.4527911 59.6854671,30.4527849 59.685488,30.4528639 59.685494)', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996549,8895996548,8895996547,8895996546,8895996549}'),\n ('SRID=4326;LINESTRING(30.4526433 59.6854773,30.4526495 59.6854564,30.4525705 59.6854504,30.4525642 59.6854713,30.4526433 59.6854773)', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996553,8895996552,8895996551,8895996550,8895996553}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528709 59.6855164)', 'way', 961717601, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,8895996554}'),\n ('SRID=4326;LINESTRING(30.4529138 59.6853368,30.4529235 59.6853445,30.4529678 59.6853472,30.4529853 59.6853413,30.4529963 59.6853005,30.4529866 59.6852936,30.4529427 59.6852903,30.4529263 59.6852951,30.4529138 59.6853368)', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', '{8895996564,8895996563,8895996562,8895996561,8895996560,8895996559,8895996558,8895996557,8895996564}'),\n ('SRID=4326;LINESTRING(30.452933 59.6852753,30.4529441 59.6852838,30.4529886 59.6852873,30.453002 59.6852821,30.4530171 59.6852433,30.4530088 59.6852371,30.4529582 59.685233,30.4529444 59.6852374,30.452933 59.6852753)', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', '{8895996572,8895996571,8895996570,8895996569,8895996568,8895996567,8895996566,8895996565,8895996572}'),\n ('SRID=4326;LINESTRING(30.4525595 59.6852465,30.4525692 59.6852544,30.4526207 59.6852585,30.4526333 59.6852538,30.452645 59.6852146,30.4526353 59.6852076,30.4525847 59.6852036,30.4525709 59.685208,30.4525595 59.6852465)', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', '{8895996580,8895996579,8895996578,8895996577,8895996576,8895996575,8895996574,8895996573,8895996580}'),\n ('SRID=4326;LINESTRING(30.452817 59.6852667,30.4528288 59.6852748,30.4529066 59.6852809,30.45292 59.6852751,30.4529319 59.6852358,30.4529216 59.6852291,30.452851 59.685224,30.4528493 59.6852281,30.452831 59.6852267,30.452817 59.6852667)', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', '{8895996589,8895996588,8895996587,8895996586,8895996585,8895996584,8895996581,8895996583,8895996582,8895996589}'),\n ('SRID=4326;LINESTRING(30.4527946 59.6853272,30.4528053 59.6853349,30.4528878 59.6853416,30.4529031 59.6853359,30.4529154 59.6852941,30.4529042 59.6852874,30.4528247 59.6852816,30.4528087 59.6852864,30.4527946 59.6853272)', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', '{8895996597,8895996596,8895996595,8895996594,8895996593,8895996592,8895996591,8895996590,8895996597}'),\n ('SRID=4326;LINESTRING(30.4527745 59.6853889,30.4527865 59.6853969,30.4528677 59.6854032,30.4528839 59.6853982,30.4528953 59.6853552,30.4528845 59.6853477,30.4528052 59.6853419,30.4527899 59.6853454,30.4527745 59.6853889)', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', '{8895996605,8895996604,8895996603,8895996602,8895996601,8895996600,8895996599,8895996598,8895996605}'),\n ('SRID=4326;LINESTRING(30.452565 59.6854206,30.4525598 59.6854071,30.4525516 59.6853892,30.4525422 59.6853716,30.4525319 59.6853544,30.4525184 59.6853376,30.4525045 59.6853211,30.4524848 59.6853009,30.4524693 59.6852857,30.4524408 59.6852624,30.4524192 59.685247,30.4523979 59.6852324,30.4523685 59.6852137,30.4523402 59.6851962)', 'way', 961717608, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996623,8895996621,8895996620,8895996619,8895996618,8895996617,8895996616,8895996615,8895996614,8895996613,8895996612,8895996611,8895996610,8895996622}'),\n ('SRID=4326;LINESTRING(30.4525109 59.6854262,30.4525044 59.6854114,30.4524965 59.6853961,30.4524877 59.6853796,30.4524784 59.6853642,30.4524662 59.6853489,30.4524532 59.6853335,30.4524345 59.6853143,30.4524204 59.6853005,30.4523942 59.6852791,30.452374 59.6852647,30.4523538 59.6852509,30.4523252 59.6852327,30.4522972 59.6852153)', 'way', 961717609, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8895996637,8895996635,8895996634,8895996633,8895996632,8895996631,8895996630,8895996629,8895996628,8895996627,8895996626,8895996625,8895996624,8895996636}'),\n ('SRID=4326;LINESTRING(30.4523179 59.6852068,30.4522881 59.6851891,30.4522584 59.6851734,30.4522785 59.6851511,30.4525958 59.6847532,30.4529382 59.6847803,30.4535778 59.6848316)', 'way', 961717610, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975114,8895996608,3968068679,8114975109,8114975051,8114975050,8114975049}'),\n ('SRID=4326;LINESTRING(30.4527224 59.6854618,30.4527166 59.6854798)', 'way', 961717612, '{\"highway\": \"steps\", \"incline\": \"up\", \"surface\": \"paving_stones\"}', '{1664064412,8895996662}'),\n ('SRID=4326;LINESTRING(30.4534116 59.6851536,30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536)', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249763,8899249762,8899249761,8899249760,8899249759,8899249763}'),\n ('SRID=4326;LINESTRING(30.4535137 59.6851734,30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437)', 'way', 962062988, '{\"source:taxon\": \"board\"}', '{8899249777,8899249776,8899249775,8899249774}'),\n ('SRID=4326;LINESTRING(30.4534505 59.6851512,30.4535484 59.6848425)', 'way', 962062989, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8899249781,8899249780}'),\n ('SRID=4326;LINESTRING(30.4532761 59.6852013,30.4533137 59.6852128,30.453319 59.6851999,30.4533257 59.6851898,30.4533338 59.6851796,30.4533458 59.6851715,30.4533606 59.6851647,30.453378 59.6851586,30.4533941 59.6851559,30.4533211 59.6851024,30.4533083 59.6851038,30.4532761 59.6852013)', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249792,8899249791,8899249790,8899249789,8899249788,8899249787,8899249786,8899249785,8899249784,8899249783,8899249782,8899249792}'),\n ('SRID=4326;LINESTRING(30.4534315 59.6851615,30.4534654 59.685163)', 'way', 962062991, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975036,3968068687}'),\n ('SRID=4326;LINESTRING(30.45277 59.6851675,30.4528221 59.6849965,30.4528061 59.6849952,30.4528148 59.6849678,30.4528309 59.6849691,30.4528877 59.684789)', 'way', 962062992, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"source:taxon\": \"board\", \"species:wikidata\": \"Q162750\"}', '{8899249807,8899249801,8899249800,8899249799,8899249798,8899249806}'),\n ('SRID=4326;LINESTRING(30.4530825 59.6850727,30.4530768 59.6850789,30.4531357 59.6851196,30.4531475 59.6851179,30.4531599 59.6851179,30.4531731 59.6851201,30.4531813 59.685123,30.4532721 59.6850914,30.45327 59.6850856,30.4530825 59.6850727)', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899249816,8899249815,8899249814,8899249813,8899249812,8899249811,8899249810,8899249809,8899249808,8899249816}'),\n ('SRID=4326;LINESTRING(30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148)', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299126,8899299125,8899299124,8899299123,8899299122,8899299121,8899299120,8899299119,8899299118,8899299117,8899299126}'),\n ('SRID=4326;LINESTRING(30.4531566 59.6851458,30.4531627 59.6851441,30.4531665 59.6851411,30.4531672 59.6851376,30.4531645 59.6851343,30.4531591 59.685132,30.4531523 59.6851313,30.4531455 59.6851322,30.4531404 59.6851346,30.4531381 59.685138,30.4531391 59.6851415,30.4531433 59.6851444,30.4531496 59.6851459,30.4531566 59.6851458)', 'way', 962062995, '{\"landuse\": \"grass\"}', '{8899299139,8899299138,8899299137,8899299136,8899299135,8899299134,8899299133,8899299132,8899299131,8899299130,8899299129,8899299128,8899299140,8899299139}'),\n ('SRID=4326;LINESTRING(30.4531836 59.6851532,30.45325 59.6851972,30.4532587 59.6851977,30.4532923 59.6851023,30.4532804 59.6850981,30.4531914 59.68513,30.4531946 59.6851353,30.453195 59.6851401,30.4531936 59.6851444,30.45319 59.6851488,30.4531836 59.6851532)', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299150,8899299149,8899299141,8899299148,8899299142,8899299147,8899299146,8899299145,8899299144,8899299143,8899299150}'),\n ('SRID=4326;LINESTRING(30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8899299158,8899299157,8899299156,8899299155,8899299154,8899299153,8899299152,8899299151,8899249778,8899299158}'),\n ('SRID=4326;LINESTRING(30.4532162 59.6852145,30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145)', 'way', 962062998, '{\"landuse\": \"grass\"}', '{8899299165,8899299164,8899299163,8899299161,8899299160,8899299162,8899299165}'),\n ('SRID=4326;LINESTRING(30.4532627 59.6852077,30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077)', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', '{8902082028,8902082027,8902082026,8902082025,8902082024,8902082023,8902082022,8902082021,8902082020,8902027911,8902082019,8902082018,8902082017,8902027912,8902027916,8902027913,8902027915,8902027914,8902082028}'),\n ('SRID=4326;LINESTRING(30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082032,8902082031,8902082030,8902082029,8902082032}'),\n ('SRID=4326;LINESTRING(30.4529465 59.6849826,30.4530583 59.6849454,30.4530566 59.6849397,30.4529452 59.6849315,30.4529338 59.6849691,30.4529492 59.6849698,30.4529465 59.6849826)', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082038,8902082037,8902082036,8902082035,8902082034,8902082033,8902082038}'),\n ('SRID=4326;LINESTRING(30.4530344 59.685052,30.4530456 59.6850508,30.4530757 59.684955,30.4530662 59.6849507,30.4529465 59.6849918,30.4530344 59.685052)', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082047,8902082046,8902082045,8902082044,8902082043,8902082047}'),\n ('SRID=4326;LINESTRING(30.4529083 59.6850544,30.4530153 59.6850613,30.4530221 59.685056,30.4529398 59.6850009,30.4529378 59.6850121,30.4529184 59.6850114,30.4529083 59.6850544)', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082054,8902082053,8902082052,8902082051,8902082050,8902082049,8902082054}'),\n ('SRID=4326;LINESTRING(30.4528875 59.6851184,30.4530138 59.6850731,30.4530125 59.6850679,30.4529043 59.6850625,30.4528875 59.6851184)', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082059,8902082058,8902082057,8902082056,8902082059}'),\n ('SRID=4326;LINESTRING(30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789)', 'way', 962382766, '{\"landuse\": \"grass\"}', '{8902082065,8902082064,8902082063,8902082062,8902082065}'),\n ('SRID=4326;LINESTRING(30.4529896 59.6851748,30.4530072 59.6851719,30.4530311 59.6850841,30.4530206 59.6850798,30.4528885 59.6851275,30.4529896 59.6851748)', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082070,8902082069,8902082068,8902082067,8902082066,8902082070}'),\n ('SRID=4326;LINESTRING(30.4533332 59.6850719,30.4534612 59.68503,30.4533655 59.6849715,30.4533546 59.6849733,30.4533227 59.6850682,30.4533332 59.6850719)', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082080,8902082079,8902082078,8902082077,8902082076,8902082080}'),\n ('SRID=4326;LINESTRING(30.4533437 59.685083,30.4534444 59.6850899,30.4534619 59.6850382,30.4533411 59.685078,30.4533437 59.685083)', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082084,8902082083,8902082082,8902082081,8902082084}'),\n ('SRID=4326;LINESTRING(30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173)', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082090,8902082089,8902082088,8902082087,8902082086,8902082085,8902082090}'),\n ('SRID=4326;LINESTRING(30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113)', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082096,8902082095,8902082094,8902082093,8902082092,8902082091,8902082096}'),\n ('SRID=4326;LINESTRING(30.4532258 59.6849527,30.4532116 59.6849902,30.4532207 59.684992,30.4532298 59.6849953,30.4533219 59.6849634,30.4533191 59.6849588,30.4532258 59.6849527)', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082102,8902082101,8902082100,8902082099,8902082098,8902082097,8902082102}'),\n ('SRID=4326;LINESTRING(30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082108,8902082107,8902082106,8902082105,8902082104,8902082103,8902082108}'),\n ('SRID=4326;LINESTRING(30.4530763 59.6850024,30.4531619 59.6850065,30.4531647 59.6850018,30.4531695 59.6849976,30.4531032 59.6849548,30.453091 59.6849565,30.4530763 59.6850024)', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082109,8902082114,8902082113,8902082112,8902082111,8902082110,8902082109}'),\n ('SRID=4326;LINESTRING(30.4530716 59.6850547,30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547)', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082120,8902082119,8902082118,8902082117,8902082116,8902082115,8902082120}'),\n ('SRID=4326;LINESTRING(30.4531735 59.6850722,30.4531863 59.6850287,30.4531799 59.6850271,30.4531749 59.6850252,30.4530791 59.6850599,30.453083 59.685065,30.4531735 59.6850722)', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082126,8902082125,8902082124,8902082123,8902082122,8902082121,8902082126}'),\n ('SRID=4326;LINESTRING(30.4531903 59.6850727,30.4532727 59.6850781,30.4532816 59.6850715,30.4532223 59.6850274,30.453211 59.6850297,30.453201 59.6850303,30.4531903 59.6850727)', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', '{8902082132,8902082131,8902082130,8902082129,8902082128,8902082127,8902082132}'),\n ('SRID=4326;LINESTRING(30.453206 59.6849937,30.4532201 59.6849487)', 'way', 962382778, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975081,8902082149}'),\n ('SRID=4326;LINESTRING(30.4532335 59.6850137,30.4533306 59.6850189)', 'way', 962382779, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975086,8902082150}'),\n ('SRID=4326;LINESTRING(30.4531682 59.6850102,30.4530675 59.6850048)', 'way', 962382780, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975094,8902082151}'),\n ('SRID=4326;LINESTRING(30.4531253 59.6850083,30.4531256 59.6850158,30.4531288 59.6850232,30.4531349 59.6850302,30.4531434 59.6850364,30.4531543 59.6850416,30.4531669 59.6850457,30.4531809 59.6850485,30.4531957 59.6850498,30.4532107 59.6850496,30.4532253 59.685048,30.4532391 59.685045,30.4532514 59.6850406,30.4532618 59.6850352,30.4532699 59.6850288,30.4532753 59.6850217,30.4532779 59.6850143,30.4532776 59.6850067,30.4532744 59.6849993,30.4532684 59.6849924,30.4532598 59.6849862,30.453249 59.6849809,30.4532363 59.6849768,30.4532224 59.6849741,30.4532076 59.6849728,30.4531926 59.6849729,30.4531779 59.6849745,30.4531642 59.6849776,30.4531519 59.6849819,30.4531415 59.6849874,30.4531334 59.6849938,30.4531279 59.6850008,30.4531253 59.6850083)', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8902082167,8902082134,8902082166,8902082133,8902082165,8902082148,8902082164,8902082147,8902082163,8902082146,8902082162,8902082145,8902082161,8902082144,8902082160,8902082143,8902082159,8902082142,8902082158,8902082141,8902082157,8902082140,8902082156,8902082139,8902082155,8902082138,8902082154,8902082137,8902082153,8902082136,8902082152,8902082135,8902082167}'),\n ('SRID=4326;LINESTRING(30.4531956 59.6850267,30.4531801 59.6850762)', 'way', 962382782, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8114975091,8902082168}'),\n ('SRID=4326;LINESTRING(30.452898 59.6850578,30.4529124 59.6850066,30.4529307 59.6850078,30.4529356 59.6849912,30.4529412 59.6849735,30.4529245 59.6849722,30.4529389 59.6849276)', 'way', 962382783, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582241,1738381535,8902082040,8902082170,8902082039,8902082169,1665582237}'),\n ('SRID=4326;LINESTRING(30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877)', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992660,8904992659,8904992658,8904992657,8904992656,8904992655,8904992654,8904992653,8904992652,8904992651,8904992650,8904992649,8904992648,8904992647,8904992646,8904992645,8904992644,8904992643,8904992642,8904992641,8904992640,8904992639,8904992660}'),\n ('SRID=4326;LINESTRING(30.4532432 59.6848971,30.4532493 59.6848954,30.4532531 59.6848924,30.4532538 59.6848889,30.4532511 59.6848856,30.4532457 59.6848833,30.4532389 59.6848826,30.4532321 59.6848835,30.453227 59.684886,30.4532247 59.6848893,30.4532257 59.6848928,30.4532299 59.6848957,30.4532362 59.6848972,30.4532432 59.6848971)', 'way', 962678726, '{\"landuse\": \"grass\"}', '{8904992673,8904992672,8904992671,8904992670,8904992669,8904992668,8904992667,8904992666,8904992665,8904992664,8904992663,8904992662,8904992661,8904992673}'),\n ('SRID=4326;LINESTRING(30.4530998 59.6849248,30.4531105 59.684928,30.4532056 59.6848974,30.4532029 59.6848932,30.4532023 59.6848877,30.4532043 59.6848829,30.4532098 59.6848776,30.4531384 59.6848341,30.4531253 59.6848349,30.4530998 59.6849248)', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992682,8904992681,8904992680,8904992679,8904992637,8904992678,8904992677,8904992676,8904992675,8904992682}'),\n ('SRID=4326;LINESTRING(30.4530724 59.6849262,30.4530868 59.6849239,30.4531127 59.6848333,30.4531034 59.6848301,30.4529683 59.6848711,30.4530724 59.6849262)', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992687,8904992686,8904992685,8904992684,8904992683,8904992687}'),\n ('SRID=4326;LINESTRING(30.4530589 59.6849341,30.4530633 59.6849302,30.452961 59.6848772,30.4529482 59.6849246,30.4530589 59.6849341)', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992691,8904992690,8904992689,8904992688,8904992691}'),\n ('SRID=4326;LINESTRING(30.4531212 59.684939,30.4533222 59.6849516,30.4533269 59.6849477,30.4532581 59.6849071,30.4532455 59.6849087,30.4532339 59.6849085,30.4532243 59.684907,30.4532133 59.6849034,30.4531185 59.6849335,30.4531212 59.684939)', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8904992699,8904992698,8904992697,8904992696,8904992692,8904992638,8904992695,8904992694,8904992693,8904992699}'),\n ('SRID=4326;LINESTRING(30.453536 59.6848401,30.4529797 59.6847958,30.452977 59.6848046,30.4535329 59.6848493,30.453536 59.6848401)', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', '{8905335420,8905335419,8905335418,8905335417,8905335420}'),\n ('SRID=4326;LINESTRING(30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335435,8905335434,8905335433,8905335432,8905335435}'),\n ('SRID=4326;LINESTRING(30.4533819 59.6849565,30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565)', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335439,8905335438,8905335437,8905335436,8905335439}'),\n ('SRID=4326;LINESTRING(30.4533623 59.6849431,30.4533739 59.6849464,30.4534994 59.6849065,30.4534038 59.6848537,30.4533921 59.6848545,30.4533623 59.6849431)', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335444,8905335443,8905335442,8905335441,8905335440,8905335444}'),\n ('SRID=4326;LINESTRING(30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335454,8905335453,8905335452,8905335451,8905335450,8905335449,8905335448,8905335447,8905335446,8905335454}'),\n ('SRID=4326;LINESTRING(30.4529663 59.6848632,30.4530962 59.6848253,30.4530928 59.6848201,30.4529831 59.6848107,30.4529663 59.6848632)', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335458,8905335457,8905335456,8905335455,8905335458}'),\n ('SRID=4326;LINESTRING(30.4532195 59.6848732,30.4532263 59.6848712,30.4532379 59.6848698,30.4532504 59.6848704,30.4532619 59.6848729,30.4532706 59.684876,30.4533642 59.6848467,30.4533614 59.6848416,30.453158 59.6848262,30.4531503 59.6848308,30.4532195 59.6848732)', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8905335467,8905335466,8905335465,8905335464,8905335463,8905335462,8905335461,8905335445,8905335460,8905335459,8905335467}'),\n ('SRID=4326;LINESTRING(30.4532684 59.6848807,30.4533888 59.6848413)', 'way', 962714221, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8904992654,1665582235}'),\n ('SRID=4326;LINESTRING(30.4531238 59.6848204,30.4532177 59.684877)', 'way', 962714222, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{1665582234,8904992660}'),\n ('SRID=4326;LINESTRING(30.4527677 59.6846399,30.4528579 59.6846477)', 'way', 962735606, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8905543613,1198356896}'),\n ('SRID=4326;LINESTRING(30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399)', 'way', 962735608, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8566824026,1198356935,8566824027,8905543613}'),\n ('SRID=4326;LINESTRING(30.4534851 59.684767,30.4534913 59.6847521,30.4534976 59.6847368)', 'way', 962735609, '{\"highway\": \"steps\"}', '{8905543614,12023732271,7927774425}'),\n ('SRID=4326;LINESTRING(30.4529562 59.6847243,30.4529615 59.6847082,30.4529628 59.6847041)', 'way', 962735610, '{\"highway\": \"steps\"}', '{8905543615,12023732270,3968068678}'),\n ('SRID=4326;LINESTRING(30.4526304 59.6847065,30.4525958 59.6847532)', 'way', 962735611, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', '{8905543616,8114975051}'),\n ('SRID=4326;LINESTRING(30.4528676 59.6847547,30.4526341 59.6847357,30.452631 59.6847454,30.4528645 59.6847644,30.4528676 59.6847547)', 'way', 962735612, '{\"landuse\": \"grass\"}', '{8905558220,8905558219,8905558218,8905558217,8905558220}'),\n ('SRID=4326;LINESTRING(30.4535589 59.6848104,30.4530176 59.6847681,30.4530149 59.6847769,30.4535559 59.6848195,30.4535589 59.6848104)', 'way', 962735613, '{\"landuse\": \"grass\"}', '{8905558224,8905558223,8905558222,8905558221,8905558224}'),\n ('SRID=4326;LINESTRING(30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573,30.4530182 59.6847465)', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', '{8905558227,8905558226,8906857476,8906857475,8905558227}'),\n ('SRID=4326;LINESTRING(30.4523152 59.6851448,30.4526116 59.6847664)', 'way', 962869359, '{\"genus\": \"Prunus\", \"taxon\": \"Prunus virginiana\", \"height\": \"1.7\", \"barrier\": \"hedge\", \"genus:ru\": \"Черёмуха\", \"taxon:ru\": \"Черёмуха виргинская\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857452,8906857451}'),\n ('SRID=4326;LINESTRING(30.4526277 59.6846803,30.4526365 59.6846782,30.4526406 59.6846738,30.4526381 59.684669,30.4526302 59.6846662,30.4526205 59.6846666,30.4526137 59.6846701,30.4526128 59.684675,30.4526184 59.684679,30.4526277 59.6846803)', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', '{8906857461,8906857453,8906857460,8906857459,8906857458,8906857457,8906857456,8906857455,8906857454,8906857461}'),\n ('SRID=4326;LINESTRING(30.4535863 59.6847456,30.4535811 59.6847595)', 'way', 962869365, '{\"height\": \"2\", \"barrier\": \"fence\", \"ref:okn\": \"781610399040356\", \"historic\": \"yes\", \"man_made\": \"embankment\"}', '{8906857470,8289295976}'),\n ('SRID=4326;MULTIPOLYGON(((30.4513 59.6845239,30.4513105 59.6845148,30.4513253 59.6844972,30.4513336 59.6844848,30.4513473 59.6844699,30.4513568 59.6844555,30.4513653 59.6844381,30.4513738 59.6844262,30.4513936 59.6844093,30.4514013 59.6843976,30.4514225 59.6843888,30.4514444 59.6843812,30.4514614 59.6843629,30.4514704 59.6843445,30.4514736 59.6843262,30.4514828 59.6842988,30.4514912 59.6842865,30.4514975 59.6842799,30.4515117 59.6842705,30.4515428 59.6842625,30.4516031 59.6842549,30.4518408 59.6843394,30.4519523 59.6843794,30.4520216 59.6844035,30.4520874 59.6844268,30.4521402 59.684444,30.4521943 59.6844606,30.452244 59.6844736,30.4522939 59.6844865,30.4523452 59.6844991,30.4524113 59.6845149,30.4524654 59.6845284,30.4525244 59.6845406,30.4525539 59.6845467,30.452566 59.6845558,30.452571 59.6845656,30.4525675 59.6845745,30.4525615 59.68459,30.4525618 59.6845988,30.4525613 59.6846073,30.4525568 59.6846156,30.4525466 59.6846232,30.4525331 59.6846279,30.4525251 59.684634,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4521768 59.6852884,30.4521573 59.685297,30.4521207 59.6853099,30.4520859 59.6853167,30.4520483 59.6853214,30.4520121 59.6853235,30.4519679 59.6853228,30.4519209 59.685316,30.4518731 59.6853033,30.4518364 59.6852869,30.4518016 59.6852646,30.4517747 59.6852436,30.4517546 59.685224,30.4517399 59.685205,30.4517278 59.6851773,30.4517104 59.6851603,30.4516916 59.6851468,30.4516857 59.6851285,30.4516903 59.6851123,30.4517117 59.6851023,30.4517426 59.685094,30.4517784 59.6850892,30.4518103 59.6850908,30.4518403 59.6851005,30.4518731 59.6850949,30.4518771 59.6850809,30.4518692 59.685051,30.4518777 59.6850294,30.4519043 59.6850131,30.4519376 59.6850028,30.4519737 59.684999,30.4520079 59.6849997,30.4520477 59.685012,30.4520887 59.6850223,30.4521435 59.6850216,30.4521948 59.6850093,30.4522112 59.6849969,30.4522301 59.6849727,30.45222 59.6849586,30.4521979 59.6849496,30.4521524 59.6849328,30.452119 59.6849135,30.452105 59.6848849,30.4521099 59.684868,30.4520932 59.684849,30.4520658 59.6848372,30.4520255 59.6848223,30.4520099 59.6848104,30.4519866 59.6847939,30.4519651 59.6847718,30.4519517 59.6847501,30.4519518 59.6847258,30.4519545 59.6847041,30.4519786 59.6846635,30.4520121 59.6846479,30.452051 59.6846256,30.4520604 59.6846161,30.4520537 59.6846046,30.4520175 59.6845829,30.4519692 59.6845613,30.451933 59.684566,30.4519102 59.6845748,30.4518928 59.6845917,30.4518772 59.6846127,30.4518697 59.684638,30.4518561 59.6846587,30.4518347 59.6846794,30.4518136 59.6846859,30.451785 59.6846963,30.4517612 59.6847117,30.4517363 59.6847257,30.4517004 59.6847328,30.4516678 59.6847376,30.4516243 59.6847395,30.4515783 59.6847426,30.4515624 59.6847383,30.451536 59.6847319,30.4515265 59.6847207,30.4515128 59.6847092,30.4515012 59.6846991,30.4514963 59.6846932,30.4515039 59.6846846,30.4515091 59.6846707,30.4515006 59.6846638,30.4514837 59.6846584,30.4514488 59.6846536,30.4514298 59.6846424,30.4514235 59.6846339,30.451434 59.6846216,30.451452 59.6846104,30.4514721 59.684604,30.4514816 59.6845934,30.4514827 59.6845827,30.4514763 59.6845715,30.4514427 59.6845604,30.4514004 59.6845719,30.4513792 59.6845708,30.451356 59.684566,30.4513317 59.6845601,30.4513137 59.6845489,30.4513042 59.6845393,30.4513 59.6845239)))', 'relation', 12444790, '{\"natural\": \"wood\", \"leaf_type\": \"mixed\", \"leaf_cycle\": \"mixed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523568 59.6851898,30.4523702 59.6851856,30.4524483 59.6851915,30.452456 59.6851977,30.4524419 59.6852441,30.4524248 59.6852328,30.4524088 59.6852218,30.4523826 59.6852055,30.4523568 59.6851898)))', 'way', 961717571, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524524 59.6852459,30.4524673 59.6851987,30.4524824 59.6851946,30.4525509 59.6852001,30.4525595 59.685207,30.4525499 59.6852458,30.4525356 59.685252,30.4524524 59.6852459)))', 'way', 961717572, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523303 59.6851757,30.452333 59.6851663,30.4527521 59.6851991,30.4527487 59.6852082,30.4523303 59.6851757)))', 'way', 961717577, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528543 59.6852169,30.452857 59.6852074,30.4532097 59.6852351,30.4532064 59.6852443,30.4528543 59.6852169)))', 'way', 961717578, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531109 59.6852622,30.4531259 59.6852456,30.4532017 59.6852514,30.4531538 59.6852696,30.4531388 59.6852648,30.4531262 59.6852629,30.4531109 59.6852622)))', 'way', 961717579, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6852802,30.453028 59.6852429,30.4530414 59.6852392,30.4530554 59.6852658,30.453041 59.6852693,30.4530288 59.6852733,30.4530143 59.6852802)))', 'way', 961717580, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530501 59.6852392,30.4531172 59.6852446,30.4531031 59.6852618,30.4530921 59.6852616,30.4530782 59.6852621,30.4530632 59.6852641,30.4530501 59.6852392)))', 'way', 961717581, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.4531138 59.6852988,30.4530897 59.6853096,30.4530682 59.6853211,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168)))', 'relation', 12935642, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530106 59.6853114,30.4530161 59.6853019,30.4530244 59.6852922,30.4530375 59.685285,30.4530534 59.685278,30.4530732 59.685274,30.4530931 59.6852723,30.4531124 59.685272,30.4531329 59.6852751,30.4531443 59.685278,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530111 59.6853217,30.4530106 59.6853114)))', 'relation', 12922491, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530012 59.685359,30.4529724 59.685378,30.4529542 59.6853912,30.4529312 59.685409,30.4529136 59.685403)))', 'relation', 12935641, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527618 59.6854305,30.4527687 59.6854078,30.4527852 59.6854026,30.4528654 59.6854091,30.4528755 59.6854172,30.4528681 59.6854402,30.4528506 59.685445,30.4527747 59.6854387,30.4527618 59.6854305)))', 'way', 961717594, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524557 59.6852538,30.4525351 59.6852597,30.4525442 59.6852666,30.4525328 59.6853069,30.4525201 59.6853123,30.4524969 59.6852906,30.4524775 59.6852724,30.4524557 59.6852538)))', 'way', 961717595, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523226 59.6851969,30.4523418 59.6851889,30.4523598 59.6851989,30.4523808 59.6852109,30.4524103 59.6852297,30.4524317 59.6852443,30.4524536 59.68526,30.4524825 59.6852834,30.4524981 59.6852989,30.4525179 59.6853192,30.452532 59.6853359,30.4525456 59.6853529,30.4525561 59.6853703,30.4525656 59.6853881,30.4525739 59.6854062,30.4525791 59.6854198,30.4525811 59.6854262,30.452574 59.6854304,30.4525626 59.6854314,30.4525546 59.6854286,30.4525509 59.6854228,30.4525457 59.6854094,30.4525376 59.6853916,30.4525283 59.6853742,30.4525181 59.6853572,30.4525048 59.6853406,30.452491 59.6853243,30.4524715 59.6853042,30.4524562 59.6852892,30.452428 59.6852663,30.4524066 59.6852509,30.4523855 59.6852365,30.4523561 59.6852179,30.4523226 59.6851969)))', 'way', 961717596, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522795 59.6852157,30.4522803 59.6851945,30.4523081 59.6852118,30.4523362 59.6852293,30.4523649 59.6852475,30.4523853 59.6852614,30.4524056 59.685276,30.4524322 59.6852976,30.4524465 59.6853116,30.4524653 59.6853309,30.4524785 59.6853465,30.4524909 59.685362,30.4525002 59.6853776,30.4525091 59.6853943,30.4525171 59.6854097,30.4525231 59.6854242,30.4525257 59.6854303,30.4525224 59.6854348,30.4525097 59.6854362,30.452501 59.6854325,30.4524982 59.6854272,30.4524918 59.6854125,30.4524839 59.6853973,30.4524751 59.6853808,30.452466 59.6853657,30.452454 59.6853507,30.4524411 59.6853354,30.4524225 59.6853163,30.4524087 59.6853027,30.4523827 59.6852816,30.4523628 59.6852673,30.4523427 59.6852536,30.4523143 59.6852356,30.4522795 59.6852157)))', 'way', 961717597, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525975 59.6854176,30.4526042 59.6853942,30.4526196 59.6853891,30.4527003 59.6853955,30.4527112 59.6854034,30.4527032 59.6854269,30.4526842 59.6854313,30.4526076 59.685425,30.4525975 59.6854176)))', 'way', 961717598, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527849 59.685488,30.4527911 59.6854671,30.4528702 59.6854731,30.4528639 59.685494,30.4527849 59.685488)))', 'way', 961717599, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525642 59.6854713,30.4525705 59.6854504,30.4526495 59.6854564,30.4526433 59.6854773,30.4525642 59.6854713)))', 'way', 961717600, '{\"genus\": \"Syrínga\", \"taxon\": \"Syringa meyeri\", \"natural\": \"scrub\", \"genus:ru\": \"Сирень\", \"taxon:ru\": \"Сирень Мейера\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529138 59.6853368,30.4529263 59.6852951,30.4529427 59.6852903,30.4529866 59.6852936,30.4529963 59.6853005,30.4529853 59.6853413,30.4529678 59.6853472,30.4529235 59.6853445,30.4529138 59.6853368)))', 'way', 961717602, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452933 59.6852753,30.4529444 59.6852374,30.4529582 59.685233,30.4530088 59.6852371,30.4530171 59.6852433,30.453002 59.6852821,30.4529886 59.6852873,30.4529441 59.6852838,30.452933 59.6852753)))', 'way', 961717603, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525595 59.6852465,30.4525709 59.685208,30.4525847 59.6852036,30.4526353 59.6852076,30.452645 59.6852146,30.4526333 59.6852538,30.4526207 59.6852585,30.4525692 59.6852544,30.4525595 59.6852465)))', 'way', 961717604, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452817 59.6852667,30.452831 59.6852267,30.4528493 59.6852281,30.452851 59.685224,30.4529216 59.6852291,30.4529319 59.6852358,30.45292 59.6852751,30.4529066 59.6852809,30.4528288 59.6852748,30.452817 59.6852667)))', 'way', 961717605, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527946 59.6853272,30.4528087 59.6852864,30.4528247 59.6852816,30.4529042 59.6852874,30.4529154 59.6852941,30.4529031 59.6853359,30.4528878 59.6853416,30.4528053 59.6853349,30.4527946 59.6853272)))', 'way', 961717606, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527745 59.6853889,30.4527899 59.6853454,30.4528052 59.6853419,30.4528845 59.6853477,30.4528953 59.6853552,30.4528839 59.6853982,30.4528677 59.6854032,30.4527865 59.6853969,30.4527745 59.6853889)))', 'way', 961717607, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533349 59.6850974,30.4533424 59.6850906,30.4534424 59.6850974,30.453427 59.6851532,30.4534116 59.6851536,30.4533349 59.6850974)))', 'way', 962062985, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534909 59.6851715,30.4535 59.6851418,30.4535229 59.6851437,30.4535137 59.6851734,30.4534909 59.6851715)))', 'relation', 12925809, '{\"crop\": \"grape\", \"genus\": \"Vitis\", \"taxon\": \"Vitis amurensis\", \"landuse\": \"vineyard\", \"genus:ru\": \"Виноград\", \"taxon:ru\": \"Виноград амурский\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532761 59.6852013,30.4533083 59.6851038,30.4533211 59.6851024,30.4533941 59.6851559,30.453378 59.6851586,30.4533606 59.6851647,30.4533458 59.6851715,30.4533338 59.6851796,30.4533257 59.6851898,30.453319 59.6851999,30.4533137 59.6852128,30.4532761 59.6852013)))', 'way', 962062990, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530768 59.6850789,30.4530825 59.6850727,30.45327 59.6850856,30.4532721 59.6850914,30.4531813 59.685123,30.4531731 59.6851201,30.4531599 59.6851179,30.4531475 59.6851179,30.4531357 59.6851196,30.4530768 59.6850789)))', 'way', 962062993, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530252 59.6851728,30.4530493 59.6850863,30.4530634 59.6850845,30.4531219 59.6851249,30.4531169 59.6851285,30.4531133 59.6851328,30.4531117 59.6851378,30.4531125 59.6851429,30.4531159 59.685148,30.4530357 59.6851757,30.4530252 59.6851728)))', 'way', 962062994, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531381 59.685138,30.4531404 59.6851346,30.4531455 59.6851322,30.4531523 59.6851313,30.4531591 59.685132,30.4531645 59.6851343,30.4531672 59.6851376,30.4531665 59.6851411,30.4531627 59.6851441,30.4531566 59.6851458,30.4531496 59.6851459,30.4531433 59.6851444,30.4531391 59.6851415,30.4531381 59.685138)))', 'way', 962062995, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531836 59.6851532,30.45319 59.6851488,30.4531936 59.6851444,30.453195 59.6851401,30.4531946 59.6851353,30.4531914 59.68513,30.4532804 59.6850981,30.4532923 59.6851023,30.4532587 59.6851977,30.45325 59.6851972,30.4531836 59.6851532)))', 'way', 962062996, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530454 59.6851813,30.4531256 59.6851544,30.4531347 59.6851575,30.4531466 59.6851595,30.4531581 59.6851596,30.4531699 59.6851581,30.4532258 59.6851962,30.4532198 59.6852006,30.4530501 59.6851877,30.4530454 59.6851813)))', 'way', 962062997, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528382 59.6851861,30.4528402 59.6851794,30.452846 59.6851798,30.4528466 59.6851777,30.4532188 59.6852056,30.4532162 59.6852145,30.4528382 59.6851861)))', 'way', 962062998, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528577 59.6851769,30.4529093 59.6850046,30.4529281 59.685006,30.4529375 59.6849752,30.4529207 59.6849738,30.4529724 59.6848063,30.4535349 59.6848517,30.4534357 59.6851637,30.4534213 59.6851644,30.4534075 59.6851668,30.4533894 59.6851708,30.4533747 59.6851759,30.4533579 59.6851844,30.4533479 59.6851932,30.4533405 59.6852038,30.4533345 59.6852155,30.4533291 59.6852257,30.4532627 59.6852077,30.4528577 59.6851769)))', 'way', 962382760, '{\"ref\": \"6\", \"name\": \"Ботанический сад\", \"leisure\": \"garden\", \"name:en\": \"The Botanical Garden\", \"wikidata\": \"Q118122045\", \"garden:type\": \"botanical\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533751 59.6849668,30.453381 59.6849616,30.4534833 59.6849698,30.4534679 59.6850219,30.4533751 59.6849668)))', 'way', 962382761, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529338 59.6849691,30.4529452 59.6849315,30.4530566 59.6849397,30.4530583 59.6849454,30.4529465 59.6849826,30.4529492 59.6849698,30.4529338 59.6849691)))', 'way', 962382762, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529465 59.6849918,30.4530662 59.6849507,30.4530757 59.684955,30.4530456 59.6850508,30.4530344 59.685052,30.4529465 59.6849918)))', 'way', 962382763, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529083 59.6850544,30.4529184 59.6850114,30.4529378 59.6850121,30.4529398 59.6850009,30.4530221 59.685056,30.4530153 59.6850613,30.4529083 59.6850544)))', 'way', 962382764, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528875 59.6851184,30.4529043 59.6850625,30.4530125 59.6850679,30.4530138 59.6850731,30.4528875 59.6851184)))', 'way', 962382765, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528698 59.6851739,30.4528812 59.685135,30.4529823 59.6851789,30.4529779 59.6851826,30.4528698 59.6851739)))', 'way', 962382766, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528885 59.6851275,30.4530206 59.6850798,30.4530311 59.6850841,30.4530072 59.6851719,30.4529896 59.6851748,30.4528885 59.6851275)))', 'way', 962382767, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533227 59.6850682,30.4533546 59.6849733,30.4533655 59.6849715,30.4534612 59.68503,30.4533332 59.6850719,30.4533227 59.6850682)))', 'way', 962382768, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533411 59.685078,30.4534619 59.6850382,30.4534444 59.6850899,30.4533437 59.685083,30.4533411 59.685078)))', 'way', 962382769, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532321 59.6850233,30.4532368 59.6850199,30.4532392 59.6850173,30.4533204 59.6850217,30.4533057 59.6850665,30.4532939 59.6850677,30.4532321 59.6850233)))', 'way', 962382770, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532374 59.6850005,30.4533289 59.6849694,30.4533388 59.6849721,30.4533251 59.6850146,30.4532419 59.6850113,30.4532411 59.6850057,30.4532374 59.6850005)))', 'way', 962382771, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532116 59.6849902,30.4532258 59.6849527,30.4533191 59.6849588,30.4533219 59.6849634,30.4532298 59.6849953,30.4532207 59.684992,30.4532116 59.6849902)))', 'way', 962382772, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453114 59.6849505,30.4531198 59.684945,30.4532124 59.6849517,30.4532004 59.6849896,30.4531904 59.6849904,30.45318 59.6849928,30.453114 59.6849505)))', 'way', 962382773, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530763 59.6850024,30.453091 59.6849565,30.4531032 59.6849548,30.4531695 59.6849976,30.4531647 59.6850018,30.4531619 59.6850065,30.4530763 59.6850024)))', 'way', 962382774, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530603 59.6850515,30.4530743 59.6850085,30.4531615 59.6850116,30.4531626 59.685015,30.4531656 59.685019,30.4530716 59.6850547,30.4530603 59.6850515)))', 'way', 962382775, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530791 59.6850599,30.4531749 59.6850252,30.4531799 59.6850271,30.4531863 59.6850287,30.4531735 59.6850722,30.453083 59.685065,30.4530791 59.6850599)))', 'way', 962382776, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531903 59.6850727,30.453201 59.6850303,30.453211 59.6850297,30.4532223 59.6850274,30.4532816 59.6850715,30.4532727 59.6850781,30.4531903 59.6850727)))', 'way', 962382777, '{\"genus\": \"Rosa\", \"taxon\": \"Rosa spinosissima\", \"natural\": \"scrub\", \"genus:ru\": \"Роза\", \"taxon:ru\": \"Роза колючейшая\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"source:taxon\": \"board\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531253 59.6850083,30.4531279 59.6850008,30.4531334 59.6849938,30.4531415 59.6849874,30.4531519 59.6849819,30.4531642 59.6849776,30.4531779 59.6849745,30.4531926 59.6849729,30.4532076 59.6849728,30.4532224 59.6849741,30.4532363 59.6849768,30.453249 59.6849809,30.4532598 59.6849862,30.4532684 59.6849924,30.4532744 59.6849993,30.4532776 59.6850067,30.4532779 59.6850143,30.4532753 59.6850217,30.4532699 59.6850288,30.4532618 59.6850352,30.4532514 59.6850406,30.4532391 59.685045,30.4532253 59.685048,30.4532107 59.6850496,30.4531957 59.6850498,30.4531809 59.6850485,30.4531669 59.6850457,30.4531543 59.6850416,30.4531434 59.6850364,30.4531349 59.6850302,30.4531288 59.6850232,30.4531256 59.6850158,30.4531253 59.6850083)))', 'way', 962382781, '{\"genus\": \"Tilia\", \"height\": \"6\", \"natural\": \"tree_row\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453207 59.6848903,30.4532078 59.6848854,30.4532114 59.6848808,30.4532177 59.684877,30.4532251 59.6848743,30.4532339 59.6848728,30.4532432 59.6848726,30.4532523 59.6848737,30.4532603 59.6848761,30.4532684 59.6848807,30.4532708 59.6848832,30.4532728 59.6848874,30.4532726 59.6848917,30.4532702 59.6848959,30.4532659 59.6848995,30.4532598 59.6849025,30.4532507 59.684905,30.4532406 59.6849059,30.4532304 59.6849052,30.4532212 59.6849029,30.453213 59.6848988,30.453209 59.6848951,30.453207 59.6848903)))', 'way', 962678725, '{\"highway\": \"footway\", \"surface\": \"fine_gravel\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532247 59.6848893,30.453227 59.684886,30.4532321 59.6848835,30.4532389 59.6848826,30.4532457 59.6848833,30.4532511 59.6848856,30.4532538 59.6848889,30.4532531 59.6848924,30.4532493 59.6848954,30.4532432 59.6848971,30.4532362 59.6848972,30.4532299 59.6848957,30.4532257 59.6848928,30.4532247 59.6848893)))', 'way', 962678726, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530998 59.6849248,30.4531253 59.6848349,30.4531384 59.6848341,30.4532098 59.6848776,30.4532043 59.6848829,30.4532023 59.6848877,30.4532029 59.6848932,30.4532056 59.6848974,30.4531105 59.684928,30.4530998 59.6849248)))', 'way', 962678727, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529683 59.6848711,30.4531034 59.6848301,30.4531127 59.6848333,30.4530868 59.6849239,30.4530724 59.6849262,30.4529683 59.6848711)))', 'way', 962678728, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529482 59.6849246,30.452961 59.6848772,30.4530633 59.6849302,30.4530589 59.6849341,30.4529482 59.6849246)))', 'way', 962678729, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531185 59.6849335,30.4532133 59.6849034,30.4532243 59.684907,30.4532339 59.6849085,30.4532455 59.6849087,30.4532581 59.6849071,30.4533269 59.6849477,30.4533222 59.6849516,30.4531212 59.684939,30.4531185 59.6849335)))', 'way', 962678730, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452977 59.6848046,30.4529797 59.6847958,30.453536 59.6848401,30.4535329 59.6848493,30.452977 59.6848046)))', 'way', 962714214, '{\"landuse\": \"flowerbed\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534135 59.68485,30.4534175 59.684847,30.4535189 59.6848554,30.4535068 59.684899,30.4534135 59.68485)))', 'way', 962714215, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533809 59.6849511,30.4535014 59.6849122,30.4534847 59.684964,30.4533819 59.6849565,30.4533809 59.6849511)))', 'way', 962714216, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533623 59.6849431,30.4533921 59.6848545,30.4534038 59.6848537,30.4534994 59.6849065,30.4533739 59.6849464,30.4533623 59.6849431)))', 'way', 962714217, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532695 59.6849025,30.4532754 59.6848982,30.4532786 59.6848938,30.4532796 59.6848892,30.4532772 59.6848818,30.4533702 59.6848509,30.4533788 59.6848538,30.4533512 59.6849423,30.4533368 59.6849437,30.4532695 59.6849025)))', 'way', 962714218, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529663 59.6848632,30.4529831 59.6848107,30.4530928 59.6848201,30.4530962 59.6848253,30.4529663 59.6848632)))', 'way', 962714219, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4531503 59.6848308,30.453158 59.6848262,30.4533614 59.6848416,30.4533642 59.6848467,30.4532706 59.684876,30.4532619 59.6848729,30.4532504 59.6848704,30.4532379 59.6848698,30.4532263 59.6848712,30.4532195 59.6848732,30.4531503 59.6848308)))', 'way', 962714220, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452631 59.6847454,30.4526341 59.6847357,30.4528676 59.6847547,30.4528645 59.6847644,30.452631 59.6847454)))', 'way', 962735612, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530149 59.6847769,30.4530176 59.6847681,30.4535589 59.6848104,30.4535559 59.6848195,30.4530149 59.6847769)))', 'way', 962735613, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530143 59.6847573,30.4530182 59.6847465,30.4535658 59.6847921,30.4535618 59.6848022,30.4530143 59.6847573)))', 'way', 962735614, '{\"genus\": \"Cotoneaster\", \"taxon\": \"Cotoneaster lucidus\", \"height\": \"0.5\", \"barrier\": \"hedge\", \"landuse\": \"grass\", \"genus:ru\": \"Кизильник\", \"taxon:ru\": \"Кизильник блестящий\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\", \"species:ru\": \"Кизильник блестящий\", \"species:wikidata\": \"Q162750\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523152 59.6851448,30.4526116 59.6847664,30.4528877 59.684789,30.4528309 59.6849691,30.4528148 59.6849678,30.4528061 59.6849952,30.4528221 59.6849965,30.45277 59.6851675,30.4527658 59.68518,30.4523152 59.6851448)))', 'relation', 12933782, '{\"ref\": \"5\", \"name\": \"Кенконс\", \"genus\": \"Tilia\", \"name:en\": \"The Quincunx\", \"natural\": \"wood\", \"genus:ru\": \"Липа\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526128 59.684675,30.4526137 59.6846701,30.4526205 59.6846666,30.4526302 59.6846662,30.4526381 59.684669,30.4526406 59.6846738,30.4526365 59.6846782,30.4526277 59.6846803,30.4526184 59.684679,30.4526128 59.684675)))', 'way', 962869361, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526042 59.6846709,30.4526082 59.6846655,30.452617 59.6846635,30.4528469 59.6846817,30.452843 59.684694,30.4528376 59.6847122,30.4526498 59.6846973,30.4526123 59.6846817,30.4526042 59.6846709)))', 'relation', 12933783, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530629 59.6847308,30.4530706 59.6847131,30.4530752 59.684699,30.4535863 59.6847456,30.4535811 59.6847595,30.4535752 59.6847748,30.4530629 59.6847308)))', 'relation', 12933784, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4534977 59.6852035,30.4534967 59.6852111,30.453492 59.6852191,30.4534813 59.6852261,30.4534692 59.6852309,30.4534524 59.6852342,30.453435 59.6852355,30.4534193 59.6852337,30.4534045 59.6852307,30.4533914 59.6852248,30.4533831 59.6852182,30.4533763 59.68521,30.4533752 59.6852006)))', 'relation', 12935640, '{\"height\": \"5.5\", \"roof:shape\": \"pyramidal\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"0.5\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4526773 59.6854805,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.4527511 59.6854859,30.4526773 59.6854805)))', 'relation', 12987950, '{\"height\": \"1\", \"roof:shape\": \"skillion\", \"roof:colour\": \"grey\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"roof:direction\": \"170\", \"building:colour\": \"#E4C78F\", \"roof:orientation\": \"along\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4526773 59.6854805,30.4527511 59.6854859,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528709 59.6855164,30.4527091 59.6855042,30.4525787 59.6854944)))', 'relation', 12935639, '{\"height\": \"1\", \"roof:shape\": \"flat\", \"roof:colour\": \"grey\", \"building:part\": \"yes\", \"building:colour\": \"#E4C78F\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4524973 59.6846698,30.4526025 59.6847092,30.4522278 59.6851794,30.4522474 59.6851858,30.4522167 59.6853009,30.4522119 59.6853269,30.4521905 59.6853763,30.4521596 59.6854203,30.4521293 59.6854701,30.4520946 59.6855262,30.4520624 59.6855804,30.4520524 59.6856064,30.452047 59.6856386,30.452047 59.6856666,30.4520551 59.685713,30.4520778 59.685798,30.4520997 59.6858613,30.4521127 59.6859046,30.4521047 59.6859432,30.4520825 59.6859825,30.4520478 59.686026,30.4520492 59.6860479,30.4520658 59.6860755,30.4520819 59.6860924,30.4521387 59.6861383,30.4521581 59.6861556,30.4521822 59.6861782,30.45222 59.6862149,30.4522535 59.6862461,30.4522676 59.6862668,30.4522828 59.6862897,30.4522911 59.6863104,30.4522992 59.6863312,30.4523018 59.6863618,30.4522989 59.6863961,30.4522911 59.6864255,30.452286 59.6864496,30.4522787 59.6864747,30.4522743 59.6864925,30.452274 59.6865148,30.4522776 59.6865312,30.4522888 59.6865538,30.4523045 59.686573,30.4523226 59.6865862,30.4523413 59.6865954,30.4523836 59.686613,30.4524214 59.6866244,30.4524614 59.686634,30.4524912 59.6866392,30.4525264 59.6866438,30.4525641 59.6866457,30.4526585 59.6866455,30.4527524 59.6866414,30.4528825 59.6866353,30.4530173 59.6866255,30.4531259 59.6866181,30.4531936 59.6866133,30.453271 59.6866114,30.4533083 59.686614,30.4534028 59.6866228,30.4535229 59.6866363,30.4536201 59.6866455,30.453691 59.6866508,30.4536976 59.6866508,30.4539823 59.6866673,30.4539778 59.6866919,30.4544217 59.6867427,30.4544227 59.6867377,30.4544646 59.686742,30.4544638 59.6867472,30.4545508 59.6867576,30.4545534 59.6867525,30.4545963 59.6867573,30.4546214 59.6867604,30.4546788 59.6867553,30.4548168 59.686752,30.4551163 59.6867835,30.4552388 59.6868093,30.4553945 59.6868602,30.455491 59.6869022,30.4555769 59.68694,30.4556466 59.6869672,30.4557807 59.6870023,30.4558987 59.6870186,30.4559816 59.68702,30.4560875 59.6870601,30.4561508 59.6871091,30.4561831 59.6871675,30.456183 59.687235,30.4561616 59.6872894,30.4561159 59.6873352,30.4560824 59.6873697,30.4560436 59.6874139,30.4560113 59.687453,30.4559765 59.6875127,30.4559804 59.6875356,30.4559953 59.6875601,30.4560395 59.6875816,30.4560838 59.6875938,30.4561467 59.6876019,30.4561991 59.6876021,30.4563573 59.6875979,30.4565289 59.6875961,30.4566782 59.6875933,30.4567611 59.687592,30.4568899 59.687586,30.4570005 59.6875828,30.4570995 59.6875755,30.4572099 59.6875697,30.4573214 59.6875781,30.4574243 59.6875895,30.4575564 59.6876086,30.4576489 59.6876236,30.4577906 59.6876357,30.4578929 59.687656,30.4579737 59.6876911,30.4580413 59.6877282,30.4581225 59.6877678,30.4581817 59.6878027,30.4582341 59.6878291,30.4583152 59.6878863,30.4583478 59.6879193,30.4583877 59.6879673,30.458411 59.6880122,30.4584387 59.6880452,30.4584657 59.6880811,30.4585427 59.6881373,30.4585748 59.6881735,30.4586375 59.6882236,30.4586938 59.6882576,30.4587833 59.6883125,30.45884 59.6883434,30.4588959 59.6883741,30.4589723 59.6884163,30.4590175 59.6884495,30.4590717 59.6884887,30.4591366 59.6885238,30.4591908 59.6885653,30.4592104 59.6886013,30.4592312 59.6886474,30.4592494 59.6886943,30.4592859 59.6887303,30.4593172 59.688773,30.4593556 59.6888131,30.459429 59.6888677,30.459467 59.6889042,30.4594979 59.688929,30.4595172 59.6889694,30.4595266 59.6890044,30.4595285 59.689042,30.4595248 59.6890919,30.4595255 59.6891719,30.4595317 59.6892178,30.4595442 59.6893129,30.4595387 59.689363,30.4595118 59.6894235,30.4594761 59.689469,30.4594014 59.6895068,30.4593069 59.6895588,30.4592476 59.6895966,30.4591945 59.6896312,30.4591511 59.6896562,30.4591092 59.6896944,30.4590843 59.6897378,30.4590826 59.689771,30.4590853 59.6898069,30.4591078 59.6898435,30.4592007 59.6898882,30.4592339 59.6899293,30.4592628 59.6899874,30.4592762 59.6900429,30.45928 59.6901025,30.4592809 59.6901575,30.4592798 59.6902243,30.4593042 59.6902777,30.4593662 59.6903178,30.4594544 59.6903409,30.4595249 59.6903674,30.4595807 59.6903944,30.4596268 59.6904316,30.4596583 59.6904756,30.4596087 59.690551,30.4596006 59.6905905,30.4595977 59.6906403,30.4595904 59.6906903,30.4595826 59.6907418,30.4595821 59.6908019,30.459583 59.6908375,30.459529 59.6908703,30.4594074 59.6909353,30.4592831 59.6909939,30.459213 59.6910431,30.4591817 59.691066,30.4591361 59.6911201,30.4591012 59.6911675,30.4591012 59.691223,30.4591406 59.6912486,30.4592295 59.6912875,30.4592895 59.6913173,30.4593728 59.6913444,30.4594455 59.6913593,30.459517 59.6913682,30.4596037 59.6913935,30.4596491 59.6914211,30.4596908 59.6914522,30.4597319 59.6914924,30.4597559 59.6915361,30.4597745 59.6915821,30.459787 59.6916313,30.4597852 59.6916643,30.4597718 59.6917238,30.4597396 59.6917861,30.4596859 59.6918429,30.4596685 59.6918693,30.4596383 59.6919054,30.4596009 59.6919405,30.4595315 59.6919991,30.4594652 59.6920502,30.4594082 59.6920946,30.4593773 59.6921151,30.4593545 59.6921348,30.4593366 59.6921529,30.4593399 59.6921734,30.4593659 59.6921939,30.4596045 59.6923272,30.4596496 59.6923362,30.4596901 59.6923377,30.4597398 59.6923315,30.4597933 59.6923156,30.4598526 59.6922792,30.4599141 59.692234,30.4600168 59.6921771,30.4600862 59.6921317,30.4601606 59.6921103,30.4602526 59.6920827,30.460323 59.6920633,30.4603814 59.6920333,30.4604812 59.6919715,30.4605362 59.6919506,30.4606073 59.6919499,30.4606743 59.6919675,30.4607467 59.6920081,30.4608017 59.6920284,30.4608728 59.6920473,30.4609935 59.6920595,30.4610726 59.692067,30.4611517 59.6920866,30.4612403 59.6921299,30.4612939 59.6921759,30.4613569 59.6922104,30.4614227 59.6922341,30.4614964 59.6922659,30.4615568 59.6923059,30.4616211 59.6923729,30.4616748 59.6924466,30.4617579 59.6925197,30.4618368 59.6925614,30.461948 59.6926074,30.4620442 59.6926525,30.4621643 59.6927115,30.4622732 59.6927583,30.4623906 59.6927971,30.4625398 59.6928238,30.4626554 59.6928355,30.4627278 59.6928346,30.4627807 59.6928331,30.4629009 59.6928193,30.4629797 59.6928093,30.4630314 59.6928086,30.4630815 59.6928162,30.4631241 59.6928309,30.4631433 59.692849,30.4631354 59.6928782,30.4630918 59.6929178,30.4629933 59.692982,30.4628509 59.6930395,30.4627989 59.693076,30.4627775 59.6931068,30.4627715 59.6931374,30.4627782 59.6931678,30.4628 59.6931938,30.462816 59.6932161,30.4628201 59.6932352,30.4628276 59.6932642,30.4628055 59.6932947,30.462749 59.6933555,30.4627356 59.6934076,30.4627544 59.6934638,30.4627866 59.6935491,30.4628348 59.6936025,30.4628814 59.6936516,30.4629464 59.6936976,30.4630181 59.6937555,30.4631033 59.6938351,30.463194 59.693908,30.4632997 59.6939707,30.4633997 59.6940315,30.4634563 59.6940722,30.4634978 59.6941112,30.4635448 59.6941433,30.4635995 59.6941633,30.4636618 59.6941785,30.4637065 59.6941778,30.4637604 59.694169,30.4638165 59.6941725,30.4638941 59.6941882,30.463945 59.6941973,30.4639826 59.6942136,30.4640155 59.6942304,30.4640341 59.6942422,30.4640539 59.694259,30.4640781 59.6942943,30.4641097 59.6943536,30.4641054 59.6943849,30.4640955 59.6944214,30.4640677 59.6944543,30.4640278 59.694509,30.4639684 59.6945921,30.4639761 59.694632,30.4640196 59.6946691,30.4640928 59.6947215,30.4641504 59.6947644,30.4642414 59.694848,30.4643013 59.6949614,30.4643265 59.6950347,30.4643629 59.6950927,30.464383 59.6951471,30.4644155 59.6951914,30.4644503 59.6952616,30.464467 59.6953187,30.4644779 59.6953885,30.4644493 59.6954307,30.4644137 59.6954645,30.4643477 59.6955048,30.4642827 59.6955528,30.4641331 59.6956106,30.4640324 59.6956546,30.4639589 59.6956973,30.4639054 59.6957548,30.4638826 59.6958068,30.4638917 59.6958626,30.4638959 59.695908,30.4638913 59.6959452,30.4638761 59.6959807,30.4638581 59.6960266,30.4638387 59.6960774,30.4638353 59.6961315,30.4638514 59.6962235,30.4639031 59.6963079,30.4639806 59.6963837,30.4640641 59.696435,30.4641563 59.6964993,30.4642492 59.6965314,30.464353 59.6965624,30.4645112 59.6966079,30.4646909 59.6966431,30.4648519 59.6966796,30.4649082 59.6966992,30.4649645 59.6967256,30.4650316 59.6967635,30.465104 59.6968014,30.4651737 59.6968352,30.4652724 59.696889,30.4653398 59.6969338,30.4653714 59.6969637,30.4653977 59.6970024,30.4654124 59.6970396,30.4654285 59.6970924,30.4654299 59.6971357,30.4654285 59.6971912,30.4654178 59.6972534,30.4654178 59.6973103,30.4654268 59.6973472,30.465443 59.6973849,30.4654739 59.6974306,30.465535 59.6974889,30.4655776 59.6975263,30.4655998 59.6975497,30.4656249 59.6975948,30.4656281 59.6976305,30.4656291 59.6976586,30.465636 59.697698,30.4656478 59.6977439,30.4656559 59.6977839,30.4656639 59.6978247,30.4656741 59.697865,30.4656808 59.6978977,30.4656931 59.6979479,30.4657242 59.6979888,30.4657651 59.6980369,30.4658049 59.6980618,30.4658569 59.6980859,30.4659085 59.6981101,30.4659691 59.6981356,30.4659934 59.6981619,30.4660187 59.6982125,30.4660434 59.6982506,30.4660765 59.6982913,30.46612 59.6983229,30.46618 59.6983645,30.4662324 59.6983954,30.466279 59.6984245,30.4663222 59.6984585,30.4663422 59.6984839,30.4663508 59.6985161,30.466347 59.6985389,30.4663297 59.6985658,30.4662984 59.6986043,30.4662667 59.6986353,30.4662287 59.6986639,30.4662098 59.6986996,30.4662023 59.698738,30.4662177 59.6987814,30.4662476 59.6988217,30.4662941 59.6988595,30.4663218 59.6988897,30.4663703 59.6989336,30.4664066 59.698983,30.4664342 59.6990318,30.46626 59.699006,30.4662245 59.6990009,30.4661986 59.6989985,30.465736 59.6989731,30.465674 59.6989864,30.4656438 59.6989955,30.4656194 59.6990058,30.4655995 59.6990178,30.4655881 59.6990296,30.4655669 59.6990522,30.4655425 59.6990838,30.4655077 59.6991223,30.4654429 59.6991855,30.4653481 59.6992218,30.4652461 59.6992516,30.4651852 59.6992621,30.4651339 59.6992648,30.4650235 59.6992651,30.4649339 59.6992741,30.4648662 59.6992863,30.4647744 59.6993078,30.4647108 59.6993347,30.4646409 59.6993755,30.4645943 59.6994397,30.4645313 59.6994729,30.464447 59.6994976,30.4643342 59.6995189,30.4641272 59.6995513,30.4601 59.6956121,30.4590933 59.6945995,30.4585195 59.6940453,30.4565283 59.6920253,30.4559963 59.6915691,30.455779 59.6913562,30.4555191 59.6911016,30.4536132 59.6892318,30.4533114 59.6893232,30.4532486 59.6892981,30.453085 59.689221,30.4529871 59.689177,30.4528879 59.6891357,30.4528128 59.6891072,30.4524488 59.6889751,30.4524008 59.688958,30.4523038 59.6889045,30.4522723 59.6888961,30.4522552 59.6888858,30.4522361 59.6888724,30.452216 59.68885,30.4521838 59.6888324,30.4521207 59.6887986,30.4520511 59.6887644,30.4518909 59.6886967,30.4517882 59.6886551,30.4516822 59.6886098,30.4515358 59.6885556,30.4514019 59.6885123,30.4513037 59.6884778,30.4512571 59.6884636,30.4512056 59.6884428,30.4511404 59.6884196,30.4510778 59.6883871,30.4510264 59.6883553,30.4509783 59.6883239,30.4508749 59.6882578,30.4508266 59.688226,30.4507678 59.6881981,30.4505943 59.6881208,30.4501869 59.6879433,30.4499736 59.6878632,30.4499334 59.6878503,30.4498881 59.687841,30.4497871 59.6878092,30.4494924 59.6876814,30.4490926 59.6875099,30.4490362 59.6874936,30.4489854 59.6874759,30.4489383 59.6874638,30.448876 59.687449,30.4487626 59.6874338,30.4486346 59.6874221,30.4485214 59.6874142,30.4483648 59.6874032,30.4474691 59.687337,30.4468361 59.6872873,30.4467403 59.6872722,30.446684 59.6872669,30.4463496 59.6872017,30.4463085 59.6871943,30.4462561 59.6871833,30.4462179 59.6871721,30.446187 59.6871613,30.4461557 59.68715,30.4461253 59.6871366,30.4461066 59.6871274,30.4460918 59.6871135,30.4460273 59.6870454,30.4459552 59.6870078,30.4459436 59.6870073,30.4459073 59.6869902,30.4458766 59.6869748,30.445846 59.6869616,30.4458216 59.6869518,30.4457961 59.6869433,30.4457578 59.6869309,30.4457123 59.6869183,30.4456647 59.6869057,30.4455949 59.6868892,30.4455514 59.68688,30.4455232 59.6868726,30.4455129 59.6868665,30.4453868 59.6868434,30.44531 59.6868381,30.4452457 59.6868322,30.44506 59.686812,30.4450028 59.6868076,30.4449557 59.6868041,30.4449237 59.6868029,30.4448943 59.6868019,30.4448734 59.6868039,30.4448512 59.6868054,30.4448212 59.6868026,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017)))', 'relation', 4187886, '{\"ref\": \"II\", \"name\": \"Долина реки Славянки\", \"place\": \"quarter\", \"name:az\": \"Slavyanka çayının vadisi\", \"name:fr\": \"Vallée de la rivière Slavianka\", \"name:hy\": \"Սլավյանկա գետի հովիտ\", \"name:uk\": \"Долина річки Слов''янки\", \"name:zh\": \"谷斯拉维亚卡河\", \"boundary\": \"protected_area\", \"int_name\": \"Vallée de la rivière Slavianka\", \"wikidata\": \"Q121809341\", \"wikipedia\": \"ru:Павловский парк#Долина реки Славянки\", \"description\": \"Район Павловского парка\"}', NULL),\n ('SRID=4326;LINESTRING(30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392)', 'way', 1297781094, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{8289295976,12023732271,12023732270,12023732269,8114975027,12023699867,12023732331,12023732330,12023732337,12023732336}'),\n ('SRID=4326;LINESTRING(30.4528746 59.6855048,30.4528788 59.6854915)', 'way', 1093902027, '{\"height\": \"8\", \"barrier\": \"fence\", \"fence_type\": \"bars\", \"min_height\": \"6.65\"}', '{1439053674,1439053668}'),\n ('SRID=4326;LINESTRING(30.4535894 59.6847601,30.4535811 59.6847595)', 'way', 1297781085, '{\"height\": \"1.5\", \"barrier\": \"fence\", \"fence_type\": \"bars\"}', '{12023732332,8289295976}'),\n ('SRID=4326;LINESTRING(30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601)', 'way', 1297781086, '{\"height\": \"2\", \"barrier\": \"fence\", \"fence_type\": \"metal\"}', '{12023732335,12023732334,12023732333,12023732332}'),\n ('SRID=4326;MULTIPOLYGON(((30.4519927 59.6856654,30.451993 59.6856352,30.4519974 59.6856085,30.4520057 59.6855861,30.452033 59.685533,30.4520717 59.6854725,30.4521073 59.6854196,30.4521538 59.6853554,30.4521646 59.6853419,30.4521729 59.6853289,30.4521751 59.685321,30.4521778 59.6853033,30.4521768 59.6852884,30.4522278 59.6851794,30.4522474 59.6851858,30.4522695 59.6851929,30.4522692 59.6852184,30.452307 59.6852409,30.4523333 59.6852571,30.4523534 59.6852701,30.4523836 59.685295,30.4524088 59.6853175,30.4524395 59.6853504,30.4524616 59.6853789,30.4524735 59.685401,30.4524845 59.6854195,30.4524943 59.6854502,30.452497 59.6854882,30.452346 59.6854768,30.4523217 59.6855588,30.4522802 59.6855556,30.4522258 59.6855515,30.4522191 59.6855742,30.4522002 59.685638,30.4521808 59.6857036,30.4521745 59.6857248,30.4522289 59.6857289,30.4522705 59.6857319,30.4522477 59.6858088,30.4522804 59.6858113,30.4525803 59.6858339,30.4526091 59.6858361,30.4526832 59.6858416,30.4528205 59.685852,30.4528174 59.6858982,30.4527279 59.6859036,30.4527314 59.6859191,30.4527383 59.6859422,30.4527472 59.6859643,30.4527643 59.6859927,30.4527791 59.6860133,30.4527956 59.6860336,30.4528174 59.6860572,30.4528406 59.6860793,30.4528659 59.6861008,30.4528879 59.6861175,30.4529175 59.6861373,30.4529497 59.6861561,30.4529804 59.6861727,30.4530167 59.6861897,30.4530418 59.6861992,30.4530963 59.6861616,30.4531534 59.686184,30.4531278 59.6862023,30.453137 59.6862056,30.4531608 59.6862141,30.4531704 59.6862175,30.453196 59.6861992,30.4531795 59.686249,30.4531642 59.6862975,30.453138 59.686381,30.4531363 59.6863866,30.4532826 59.6863983,30.4532725 59.6864305,30.4532916 59.686432,30.4532869 59.6864462,30.4532998 59.6864473,30.4533248 59.6864494,30.4533485 59.6864515,30.4533611 59.6864525,30.4533659 59.6864383,30.4534768 59.6864467,30.453575 59.6864544,30.4535812 59.6864636,30.4536188 59.68646,30.4536556 59.6864553,30.4536952 59.6864492,30.4537376 59.6864434,30.4537814 59.6864354,30.4538212 59.6864281,30.453863 59.6864194,30.4538817 59.6864353,30.4539287 59.6864214,30.4539454 59.6864356,30.4539576 59.686432,30.4540057 59.6864176,30.4540172 59.6864141,30.4540005 59.6863999,30.4540399 59.6863883,30.4540219 59.6863729,30.4540549 59.6863624,30.4540887 59.6863495,30.4541297 59.6863344,30.4541407 59.6863296,30.4541607 59.6863411,30.4541696 59.6863371,30.4542 59.6863235,30.4542091 59.6863195,30.4541887 59.6863078,30.4541965 59.6863041,30.4542363 59.6862844,30.4542705 59.6862654,30.4542999 59.6862773,30.4544137 59.6862059,30.4543849 59.6861942,30.4544059 59.686181,30.4544395 59.686154,30.4544728 59.6861239,30.4544964 59.6860973,30.4545494 59.6861117,30.4546053 59.6861282,30.4545922 59.6861427,30.4545784 59.6861572,30.4545449 59.6861862,30.4545138 59.6862131,30.4544576 59.6862495,30.4543906 59.6862854,30.4543294 59.6863147,30.4542746 59.6863415,30.454221 59.6863683,30.454115 59.6864133,30.454039 59.6864407,30.4539464 59.6864693,30.4539252 59.6864763,30.4538233 59.6865047,30.4536724 59.6865094,30.4536724 59.6865223,30.4536503 59.6865223,30.4535973 59.686521,30.4535465 59.6865208,30.4535021 59.6865209,30.4534712 59.6865222,30.4534473 59.6865255,30.453429 59.6865331,30.4534215 59.6865438,30.4534132 59.686574,30.4534136 59.6865866,30.453423 59.6865971,30.4534445 59.6866075,30.4534686 59.686613,30.4534579 59.6866461,30.4534073 59.6866421,30.4533332 59.6866345,30.4532837 59.6866305,30.453254 59.6866292,30.4532071 59.6866305,30.4531615 59.686632,30.4531191 59.6866347,30.4531041 59.6865988,30.4531448 59.6865925,30.4531695 59.6865869,30.4531966 59.6865772,30.4532138 59.6865676,30.4532231 59.6865589,30.453199 59.6865568,30.4531811 59.6865532,30.4531596 59.6865468,30.4531373 59.6865396,30.4531219 59.6865326,30.4530964 59.6865196,30.4530733 59.6865042,30.4530555 59.6864887,30.4530367 59.6864681,30.4530227 59.6864499,30.4530105 59.6864274,30.4530012 59.6864103,30.4529945 59.6863933,30.4529919 59.6863759,30.4529905 59.686347,30.4529907 59.6863231,30.4529911 59.6862911,30.4529891 59.686281,30.4529827 59.6862715,30.4529634 59.6862545,30.4529402 59.6862373,30.4529067 59.6862141,30.4528563 59.6861801,30.4528201 59.6861533,30.4527906 59.6861317,30.4527578 59.6861047,30.452731 59.6860823,30.4527092 59.6860609,30.4526947 59.6860457,30.4526816 59.6860278,30.4526652 59.6860011,30.4526541 59.6859782,30.4526337 59.6859283,30.4526256 59.6859159,30.4526103 59.685908,30.4525905 59.6859034,30.4525603 59.6859009,30.452391 59.6858965,30.4523675 59.6858999,30.4523504 59.685904,30.4523333 59.6859114,30.452312 59.685923,30.4522313 59.6859637,30.4521811 59.6859882,30.452085 59.686032,30.4520765 59.6860386,30.4520753 59.6860476,30.4520797 59.6860577,30.4520264 59.6860652,30.4520201 59.6860504,30.4520162 59.6860346,30.4520143 59.6860207,30.4520168 59.6860051,30.4520203 59.685989,30.4520274 59.6859769,30.4520341 59.6859612,30.4520405 59.6859506,30.452047 59.6859415,30.4520537 59.6859259,30.4520544 59.6859134,30.4520523 59.6858956,30.4520465 59.6858708,30.4520254 59.6858069,30.4519995 59.68571,30.4519927 59.6856654),(30.4521704 59.6857398,30.4521704 59.6857513,30.4521744 59.6857635,30.4521811 59.6857763,30.4521945 59.6857899,30.4522187 59.6858021,30.4522414 59.6858088,30.4522629 59.685735,30.4521731 59.6857289,30.4521704 59.6857398),(30.452226 59.6855475,30.4523159 59.6855543,30.4523387 59.6854798,30.4523212 59.6854826,30.4523011 59.6854866,30.452277 59.6854941,30.4522596 59.6855015,30.4522448 59.6855117,30.4522354 59.6855225,30.4522301 59.6855347,30.452226 59.6855475),(30.4522508 59.6858359,30.4525647 59.6858582,30.4525714 59.6858373,30.4522575 59.6858142,30.4522508 59.6858359),(30.4523249 59.685462,30.4523727 59.6854667,30.4523804 59.6854465,30.4523327 59.6854418,30.4523249 59.685462)))', 'relation', 6636677, '{\"surface\": \"fine_gravel\", \"area:highway\": \"footway\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533763 59.68521,30.4534979 59.6851951,30.4535038 59.6852069,30.4534995 59.6852209,30.4533878 59.6852355,30.4533818 59.6852214,30.4533763 59.68521)))', 'relation', 12947389, '{\"height\": \"6\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4523253 59.6851768,30.4523286 59.6851637,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4525881 59.6854311,30.452574 59.6853959,30.4525486 59.6853522,30.4525291 59.6853286,30.4525137 59.6853106,30.452501 59.6852981,30.4524755 59.6852751,30.452455 59.6852592,30.4524366 59.6852453,30.4524178 59.6852321,30.4523994 59.6852201,30.4523706 59.6852014,30.452339 59.6851839,30.4523253 59.6851768)))', 'relation', 5906400, '{\"ref\": \"2\", \"name\": \"Цветочный партер\", \"leisure\": \"garden\", \"name:en\": \"The Flower Parterre\", \"ref:okn\": \"781620399040956\", \"alt_name\": \"Цветники Марии Фёдоровны\", \"wikidata\": \"Q118122045\", \"garden:type\": \"flowerbed\", \"garden:style\": \"french\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.4533268 59.6853074,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532343 59.6853363,30.453156 59.6852825)))', 'relation', 17755883, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4531158 59.6853933,30.4531719 59.6854212,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530216 59.6854636,30.4529242 59.6854401,30.4529045 59.6854337)))', 'relation', 17755885, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4532343 59.6853363,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.453238 59.6853862,30.453207 59.6854026,30.4531719 59.6854212,30.4531158 59.6853933,30.4530217 59.6853466)))', 'relation', 17755884, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4527677 59.6846399,30.4527719 59.6846286,30.4527799 59.6846212,30.4527933 59.6846157,30.4528134 59.6846137,30.4528403 59.6846144,30.4528537 59.6846178,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399)))', 'relation', 12932608, '{\"natural\": \"scrub\", \"leaf_type\": \"broadleaved\", \"leaf_cycle\": \"deciduous\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 1721132, '{\"ref\": \"3\", \"name\": \"Павильон Трёх граций\", \"note\": \"Геометрические теги крыши павильона размещены отдельно\", \"name:es\": \"Pabellón de las tres gracias\", \"name:fr\": \"Pavillon des Trois Grâces\", \"name:pt\": \"Pavilhão das Três Graças\", \"name:zh\": \"三美人亭\", \"ref:okn\": \"781610399040356\", \"tourism\": \"attraction\", \"building\": \"yes\", \"heritage\": \"2\", \"historic\": \"yes\", \"wikidata\": \"Q112716431\", \"addr:city\": \"Павловск\", \"architect\": \"Чарльз Камерон\", \"start_date\": \"1800\", \"addr:street\": \"Садовая улица\", \"architect:en\": \"Charles Cameron\", \"addr:housenumber\": \"20 литЧ\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6514/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12202573, '{\"height\": \"7\", \"min_height\": \"5.5\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"1\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452843 59.684694,30.4528469 59.6846817,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4530752 59.684699,30.4530706 59.6847131,30.4529628 59.6847041,30.452843 59.684694)))', 'relation', 12497925, '{\"height\": \"1.5\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4525466 59.6846232,30.4525568 59.6846156,30.4525613 59.6846073,30.4525618 59.6845988,30.4525615 59.68459,30.4525675 59.6845745,30.452571 59.6845656,30.452566 59.6845558,30.4525539 59.6845467,30.4526659 59.6845694,30.4527826 59.6845897,30.4528946 59.6846069,30.4530012 59.6846212,30.4535732 59.6846878,30.4535916 59.6846905,30.453606 59.6846946,30.4536164 59.684701,30.4536208 59.6847085,30.4536214 59.684718,30.4536181 59.6847274,30.4536067 59.6847614,30.4535894 59.6847601,30.4535811 59.6847595,30.4535863 59.6847456,30.4535923 59.6847296,30.4535925 59.6847224,30.4535886 59.6847164,30.4535807 59.6847121,30.4535698 59.6847103,30.4535555 59.6847085,30.4530859 59.6846667,30.4530887 59.6846582,30.4530942 59.6846416,30.4528639 59.6846231,30.45286 59.6846392,30.4528579 59.6846477,30.4527677 59.6846399,30.4525841 59.6846239,30.4525626 59.6846222,30.4525466 59.6846232)))', 'relation', 12131779, '{\"landuse\": \"grass\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.452047 59.6856386,30.4520524 59.6856064,30.4520624 59.6855804,30.4520946 59.6855262,30.4521293 59.6854701,30.4521596 59.6854203,30.4521905 59.6853763,30.4522119 59.6853269,30.4522167 59.6853009,30.4522474 59.6851858,30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4601554 59.6854805,30.4601767 59.6856005,30.4601793 59.6857568,30.4601468 59.6858374,30.4600081 59.6860973,30.459853 59.68614,30.459704 59.6863415,30.4596832 59.6864086,30.4596712 59.686482,30.4596638 59.6865545,30.459666 59.6866369,30.4596929 59.6867933,30.4597047 59.6868418,30.4597409 59.6869365,30.4598403 59.6871335,30.4599111 59.6872432,30.4599552 59.6873116,30.4600453 59.6874469,30.460134 59.687572,30.4600858 59.6875668,30.4600427 59.6875593,30.4599863 59.6875559,30.4598958 59.6875545,30.4597744 59.6875619,30.4597289 59.6875627,30.4596698 59.687583,30.4596323 59.6876026,30.4595974 59.6876371,30.4595625 59.6876658,30.4595236 59.6876852,30.459478 59.6876967,30.459407 59.6877062,30.4593453 59.6877028,30.4592849 59.6876838,30.4592367 59.6876553,30.4591509 59.6875883,30.4590905 59.6875599,30.4590355 59.6875424,30.4589524 59.6875261,30.4588343 59.6875105,30.4586868 59.6875038,30.4585474 59.6875038,30.4584333 59.6875086,30.4583274 59.6875126,30.4582348 59.6875193,30.4581437 59.6875301,30.4580095 59.6875505,30.4579371 59.6875654,30.4579009 59.6875782,30.4578312 59.6876019,30.4577386 59.6876249,30.4576489 59.6876236,30.4575564 59.6876086,30.4574243 59.6875895,30.4573214 59.6875781,30.4572099 59.6875697,30.4570995 59.6875755,30.4570005 59.6875828,30.4568899 59.687586,30.4567611 59.687592,30.4566782 59.6875933,30.4565289 59.6875961,30.4563573 59.6875979,30.4561991 59.6876021,30.4561467 59.6876019,30.4560838 59.6875938,30.4560395 59.6875816,30.4559953 59.6875601,30.4559804 59.6875356,30.4559765 59.6875127,30.4560113 59.687453,30.4560436 59.6874139,30.4560824 59.6873697,30.4561159 59.6873352,30.4561616 59.6872894,30.456183 59.687235,30.4561831 59.6871675,30.4561508 59.6871091,30.4560875 59.6870601,30.4559816 59.68702,30.4558987 59.6870186,30.4557807 59.6870023,30.4556466 59.6869672,30.4555769 59.68694,30.455491 59.6869022,30.4553945 59.6868602,30.4552388 59.6868093,30.4551163 59.6867835,30.4548168 59.686752,30.4546788 59.6867553,30.4546214 59.6867604,30.4545963 59.6867573,30.4545534 59.6867525,30.4545508 59.6867576,30.4544638 59.6867472,30.4544646 59.686742,30.4544227 59.6867377,30.4544217 59.6867427,30.4539778 59.6866919,30.4539823 59.6866673,30.4536976 59.6866508,30.453691 59.6866508,30.4536201 59.6866455,30.4535229 59.6866363,30.4534028 59.6866228,30.4533083 59.686614,30.453271 59.6866114,30.4531936 59.6866133,30.4531259 59.6866181,30.4530173 59.6866255,30.4528825 59.6866353,30.4527524 59.6866414,30.4526585 59.6866455,30.4525641 59.6866457,30.4525264 59.6866438,30.4524912 59.6866392,30.4524614 59.686634,30.4524214 59.6866244,30.4523836 59.686613,30.4523413 59.6865954,30.4523226 59.6865862,30.4523045 59.686573,30.4522888 59.6865538,30.4522776 59.6865312,30.452274 59.6865148,30.4522743 59.6864925,30.4522787 59.6864747,30.452286 59.6864496,30.4522911 59.6864255,30.4522989 59.6863961,30.4523018 59.6863618,30.4522992 59.6863312,30.4522911 59.6863104,30.4522828 59.6862897,30.4522676 59.6862668,30.4522535 59.6862461,30.45222 59.6862149,30.4521822 59.6861782,30.4521581 59.6861556,30.4521387 59.6861383,30.4520819 59.6860924,30.4520658 59.6860755,30.4520492 59.6860479,30.4520478 59.686026,30.4520825 59.6859825,30.4521047 59.6859432,30.4521127 59.6859046,30.4520997 59.6858613,30.4520778 59.685798,30.4520551 59.685713,30.452047 59.6856666,30.452047 59.6856386)))', 'relation', 4194432, '{\"ref\": \"III\", \"name\": \"Придворцовый район\", \"place\": \"quarter\", \"name:fr\": \"Secteur central\", \"website\": \"https://pavlovskmuseum.ru/about/park/layout/36/\", \"boundary\": \"protected_area\", \"wikidata\": \"Q121809724\", \"wikipedia\": \"ru:Павловский парк#Центральный (Придворцовый) район\", \"description\": \"Район исторического Павловского парка\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4366882 59.6889898,30.4370373 59.6889668,30.4370736 59.6889644,30.4371138 59.6889367,30.4374634 59.6889115,30.4375002 59.6889088,30.4375427 59.6889059,30.4380171 59.6888738,30.438182 59.6888616,30.4383254 59.6888487,30.4384589 59.6888338,30.4385849 59.6888182,30.4388652 59.6887778,30.4389016 59.6887728,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346802 59.6935317,30.4346817 59.6935045,30.4346729 59.6934955,30.4346017 59.6934439,30.4344133 59.6933106,30.4344523 59.6932882,30.4344971 59.6932601,30.4345233 59.6932407,30.4345424 59.6932254,30.4345634 59.6932027,30.4345863 59.693171,30.4345979 59.6931498,30.4346066 59.6931248,30.4346128 59.6930889,30.434612 59.693054,30.4346077 59.6930245,30.4346019 59.6930124,30.4345969 59.693,30.4345757 59.6929702,30.4345621 59.6929518,30.434542 59.6929299,30.4345091 59.6928998,30.4344756 59.6928775,30.4344413 59.6928581,30.4343883 59.6928337,30.4343603 59.6928224,30.4343198 59.692809,30.4342705 59.6927958,30.4342429 59.6927909,30.4341796 59.6927811,30.4341217 59.6927737,30.4340777 59.6927708,30.4340075 59.6927673,30.4339293 59.6927692,30.4338474 59.6927768,30.433767 59.6927902,30.4337225 59.6928016,30.4335043 59.6926756,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)))', 'relation', 1721131, '{\"name\": \"Павловский парк\", \"note\": \"https://wiki.openstreetmap.org/wiki/RU:Павловск/Павловский_парк\", \"leisure\": \"park\", \"name:be\": \"Паўлаўскі парк\", \"name:bg\": \"Павловски парк\", \"name:ca\": \"Parc Pàvlovsk\", \"name:en\": \"Pavlovsk Park\", \"name:es\": \"Parque Pávlovsk\", \"name:fr\": \"Parc de Pavlovsk\", \"name:he\": \"פארק פבלובסק\", \"name:hy\": \"Պավլովսկ պարկը\", \"name:nl\": \"Pavlovskpark\", \"name:ru\": \"Павловский парк\", \"name:zh\": \"巴甫洛夫斯克公园\", \"ref:okn\": \"781720399040986\", \"website\": \"https://pavlovskmuseum.ru/about/park/\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"historic\": \"yes\", \"int_name\": \"Parc de Pavlovsk\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q2506336\", \"wikipedia\": \"ru:Павловский парк\", \"fee:amount\": \"100\", \"start_date\": \"1777\", \"opening_hours\": \"07:00-19:00\", \"protect_class\": \"22\", \"operator:phone\": \"+7 (812) 452-15-36\", \"fee:conditional\": \"yes @ 9:00-17:00\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6407/\", \"operator:tourism\": \"museum\", \"operator:website\": \"http://www.pavlovskmuseum.ru\", \"protection_title\": \"Государственный музей-заповедник\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4324568 59.6916037,30.4324575 59.6915749,30.4324621 59.6915482,30.4324682 59.6915286,30.4324753 59.6915093,30.4324823 59.6914899,30.4324944 59.6914662,30.4325151 59.6914382,30.4329919 59.6909939,30.43335 59.690647,30.4334536 59.6905408,30.4339347 59.6900298,30.4339655 59.689999,30.4340158 59.6899496,30.4340708 59.6898981,30.4341325 59.6898423,30.4342103 59.6897817,30.4348634 59.6892971,30.4350304 59.6891847,30.4350941 59.6891512,30.4351437 59.6891282,30.4352121 59.6891005,30.4352859 59.6890795,30.4353489 59.6890653,30.4354555 59.6890493,30.4355219 59.6890436,30.4355801 59.6890388,30.4357297 59.689028,30.4358183 59.6890226,30.4358639 59.6890281,30.4359047 59.6890265,30.4359108 59.689045,30.4366128 59.6889954,30.4368674 59.6896812,30.4373083 59.6896203,30.4383622 59.6894747,30.4383925 59.6894699,30.4387768 59.6894091,30.4389533 59.6893793,30.4395631 59.6892765,30.4395975 59.6896826,30.43963 59.6897841,30.4411104 59.6895883,30.4411759 59.6892872,30.4412059 59.6891298,30.4412229 59.6890714,30.4402547 59.6891154,30.4398722 59.6891396,30.4395358 59.6891608,30.4394903 59.6891472,30.4392717 59.6889536,30.4391469 59.6889286,30.4391174 59.6889211,30.4390705 59.6889062,30.4390316 59.6888852,30.4390007 59.6888636,30.4389819 59.6888446,30.4389356 59.688768,30.4394909 59.6886943,30.4398543 59.6886325,30.4400071 59.6886046,30.4406955 59.688479,30.4408104 59.688458,30.4414068 59.6883491,30.4414241 59.6883739,30.4414406 59.6883714,30.4414646 59.6883674,30.4414905 59.688363,30.4417352 59.6883072,30.4417808 59.6882913,30.4418344 59.6882694,30.4418821 59.6882476,30.4419664 59.6882073,30.4431861 59.6875688,30.443383 59.6874657,30.4433566 59.6874537,30.4434022 59.6874298,30.4434203 59.6874209,30.4434378 59.6874131,30.4434606 59.6874073,30.4434998 59.6874019,30.4435553 59.6873939,30.4435961 59.6873824,30.4436284 59.6873671,30.4436444 59.6873558,30.4436589 59.687339,30.4436667 59.6873247,30.4436715 59.6873005,30.4436661 59.68728,30.4436564 59.6872675,30.4436464 59.687259,30.4438843 59.6871016,30.4441866 59.6869058,30.4442598 59.6869111,30.4442951 59.6869136,30.4443323 59.6869292,30.4443347 59.6869302,30.4443923 59.6869614,30.4444065 59.6869691,30.444438 59.6869552,30.4445489 59.6869077,30.444645 59.6868671,30.4446626 59.6868597,30.4446945 59.6868462,30.4446194 59.686801,30.4446175 59.6867999,30.4445818 59.68678,30.4445803 59.686779,30.4445518 59.6867606,30.4445169 59.686738,30.4444952 59.6867243,30.4444865 59.6867138,30.4444865 59.6867017,30.4444952 59.6866905,30.4445375 59.6866638,30.444687 59.6865741,30.4448347 59.6864855,30.445096 59.6863422,30.4452308 59.6862691,30.4453607 59.6861984,30.4456533 59.6860464,30.4458048 59.6859713,30.4459528 59.6859038,30.4463406 59.6857168,30.446723 59.6855342,30.447509 59.6851751,30.4477152 59.6850805,30.4478346 59.6850209,30.447946 59.6849604,30.4480438 59.684899,30.4481859 59.6848002,30.4483241 59.6846939,30.4484287 59.68461,30.4484662 59.6845826,30.4485046 59.6845589,30.4486084 59.6844949,30.4486791 59.6844562,30.4488525 59.6843737,30.4490602 59.6842836,30.449236 59.6842106,30.4493951 59.6841491,30.4494519 59.6841382,30.4495136 59.6841273,30.4496558 59.6841097,30.4498549 59.6840882,30.4498949 59.6840845,30.450264 59.6840506,30.4503834 59.6840449,30.4504672 59.684042,30.4505671 59.6840395,30.4506691 59.6840402,30.4507093 59.6840439,30.4507582 59.6840576,30.4508011 59.6840678,30.4508456 59.6840745,30.4510132 59.6840377,30.4511147 59.6840765,30.4511813 59.6841019,30.4512523 59.684129,30.4513511 59.6841667,30.4513385 59.6842533,30.4516531 59.6843525,30.4522364 59.6845601,30.4525041 59.6846527,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540811 59.684801,30.454116 59.6848031,30.4541545 59.6848057,30.4541808 59.6848075,30.4542309 59.6848107,30.4542641 59.6848127,30.4548047 59.6848466,30.4554062 59.6848883,30.4554276 59.6847972,30.4555787 59.6847942,30.4556183 59.6848013,30.45566 59.6848082,30.4556602 59.6848033,30.4557245 59.6848039,30.4557241 59.6848115,30.4558924 59.6848132,30.4558927 59.6848058,30.4559591 59.6848066,30.455968 59.6848067,30.456132 59.6848104,30.4563276 59.6848162,30.4565276 59.684828,30.4567174 59.6848433,30.4568173 59.684855,30.4569112 59.6848679,30.4569916 59.6848814,30.4570788 59.684897,30.4572191 59.6849255,30.4573068 59.6849471,30.4574034 59.6849722,30.4575415 59.6850067,30.4576796 59.6850473,30.4580243 59.6851495,30.458385 59.6852544,30.4585262 59.6852893,30.4586586 59.685316,30.4588062 59.6853451,30.4589376 59.6853682,30.4590725 59.6853866,30.4592621 59.685404,30.4596014 59.6854347,30.4597372 59.6854816,30.4597703 59.6854795,30.4598067 59.6854769,30.4598237 59.6854755,30.4598214 59.6854687,30.4598497 59.6854668,30.4598516 59.685473,30.4598851 59.6854707,30.4599237 59.6854678,30.4599217 59.6854614,30.4599499 59.6854595,30.4599522 59.6854659,30.4599714 59.6854643,30.4600087 59.6854612,30.4600147 59.6854607,30.4600534 59.6854572,30.4601985 59.6854128,30.4638062 59.6851903,30.4654915 59.6850838,30.4656498 59.6850784,30.4657732 59.6850771,30.4659129 59.6850764,30.4672032 59.6851174,30.4675083 59.6851283,30.4688128 59.6851701,30.4688678 59.6851408,30.4688852 59.6851413,30.4688871 59.6851311,30.4689262 59.6851323,30.4689682 59.6851335,30.468967 59.6851443,30.4689863 59.685145,30.4690455 59.6851751,30.4692529 59.685186,30.4712661 59.6852555,30.4717998 59.6852713,30.4721192 59.6852787,30.4728281 59.6852957,30.4729388 59.6852984,30.4730017 59.6852996,30.4730645 59.6853009,30.4731491 59.685303,30.4731729 59.6853036,30.4731946 59.6853042,30.4732094 59.6853046,30.473248 59.6853064,30.4732627 59.685307,30.4733131 59.6853083,30.4735532 59.6853155,30.4738186 59.6853234,30.4747194 59.6853502,30.4760058 59.6853884,30.4760711 59.6853899,30.4767032 59.6854063,30.4769946 59.6854145,30.4770841 59.685417,30.4772286 59.6854211,30.477324 59.6854237,30.4775836 59.6854311,30.4776272 59.6854323,30.4777058 59.6854345,30.477722 59.6854131,30.4778064 59.6854131,30.4778267 59.6854376,30.4782629 59.6854511,30.4803314 59.6855148,30.4804972 59.6855157,30.4806957 59.6855035,30.4809866 59.6854778,30.4813563 59.6854413,30.4816887 59.6854084,30.4829592 59.6852829,30.484201 59.6851595,30.4851027 59.68507,30.4856157 59.685019,30.4859321 59.6849876,30.4860003 59.6849808,30.4860486 59.6850662,30.4861646 59.6852711,30.4863078 59.6855173,30.4864369 59.6857523,30.4864761 59.6858216,30.4866222 59.6860742,30.486646 59.6861155,30.4870343 59.686796,30.4871407 59.6869901,30.4872588 59.6872054,30.4877195 59.6880454,30.487808 59.688202,30.4878204 59.6882235,30.4878635 59.6883002,30.48787 59.6883117,30.4878916 59.6883487,30.4879075 59.6883812,30.4879153 59.6883977,30.4879246 59.6884174,30.4879765 59.6885128,30.4880116 59.6885763,30.4880581 59.6885694,30.4881086 59.6885618,30.4881355 59.6885578,30.4882292 59.6885456,30.4888791 59.6896373,30.489701 59.6924953,30.4896786 59.6925163,30.4908925 59.6968416,30.4908907 59.6969219,30.4908693 59.696978,30.4908278 59.6970308,30.488341 59.6991065,30.4878952 59.6994664,30.4876552 59.6996701,30.4838245 59.7028735,30.4794807 59.706361,30.479376 59.7064476,30.4793425 59.7064936,30.479321 59.7065348,30.4793143 59.7065707,30.479136 59.7066397,30.4791105 59.7067926,30.4790216 59.7067947,30.478967 59.7068115,30.4789214 59.706846,30.4788959 59.7068683,30.4788395 59.706903,30.4787806 59.7069259,30.4787363 59.7069386,30.4786216 59.7069479,30.4779183 59.7069596,30.4736783 59.7070303,30.473675 59.7069867,30.4736739 59.7069694,30.4736706 59.7069389,30.4732464 59.7069452,30.4729689 59.7069493,30.4697965 59.7069962,30.4687773 59.7070136,30.4663413 59.7070601,30.4662337 59.7070622,30.4660736 59.7070633,30.4660557 59.707042,30.4660408 59.7070243,30.4659974 59.7069726,30.4659835 59.7069561,30.4659791 59.7069508,30.4659686 59.7069384,30.4659531 59.70692,30.4658816 59.7068348,30.4656818 59.7065821,30.4655355 59.7065546,30.4652621 59.7065033,30.4651239 59.7064784,30.4650726 59.706474,30.4650016 59.7064692,30.4645828 59.706441,30.4644927 59.7064349,30.4640497 59.7064008,30.4639779 59.7064033,30.4639163 59.7064329,30.4638698 59.7064308,30.4638303 59.7064291,30.4637599 59.7064255,30.4637148 59.7064233,30.4636972 59.706296,30.463669 59.7061547,30.4636421 59.7061131,30.4636191 59.7060776,30.4635652 59.7060291,30.4635492 59.7060147,30.4633455 59.7058911,30.4631782 59.7058035,30.4630326 59.7057228,30.4628485 59.7056506,30.4625988 59.7055749,30.4623338 59.7055117,30.462411 59.7054206,30.4625908 59.7051744,30.4627383 59.705012,30.4627387 59.7049841,30.4628295 59.7048848,30.4629347 59.7048106,30.4631495 59.7046592,30.4632413 59.7045664,30.4632815 59.7037822,30.4635147 59.7033885,30.4635704 59.7031913,30.4635837 59.7031547,30.4637313 59.7028432,30.4638334 59.7024501,30.4638456 59.7023972,30.463836 59.7023848,30.4637361 59.7022574,30.4636905 59.7022019,30.4635064 59.7019706,30.4635161 59.7019493,30.4636111 59.701924,30.463635 59.7019182,30.4637511 59.70189,30.4637308 59.7018637,30.4637092 59.7018342,30.4636851 59.701795,30.4636516 59.7017429,30.4636207 59.7016942,30.4635699 59.7016225,30.4635353 59.7015738,30.4635222 59.7014983,30.4635136 59.701428,30.4635319 59.7013361,30.463663 59.7011745,30.4636393 59.7011294,30.4635985 59.701113,30.4635901 59.7011096,30.4634909 59.7010692,30.4633415 59.7009065,30.4632475 59.7008008,30.4633339 59.7007478,30.463267 59.7007226,30.4631688 59.7006856,30.462726 59.7005187,30.4627839 59.700477,30.4629277 59.700364,30.4628712 59.7003463,30.4628406 59.7003375,30.4628018 59.700329,30.4627324 59.7003133,30.4625437 59.700281,30.4624003 59.7002577,30.4623277 59.7002393,30.4622533 59.7002132,30.462183 59.7001817,30.4620452 59.7000972,30.4619642 59.7000527,30.4618883 59.7000085,30.4617881 59.6999591,30.4616936 59.6999188,30.4615834 59.6998886,30.4615415 59.6998816,30.4614913 59.6998733,30.4614085 59.6998641,30.4612464 59.6998574,30.4611217 59.6998541,30.4608263 59.6998478,30.4607558 59.6996967,30.4607155 59.6996206,30.46063 59.6994896,30.4606032 59.6994485,30.4605319 59.6993425,30.4604507 59.6993266,30.4602215 59.6992772,30.4595558 59.699131,30.4592776 59.699072,30.4575016 59.6986865,30.4562393 59.6984033,30.4559187 59.6983348,30.4558203 59.6983605,30.4557987 59.6983662,30.4557686 59.6983735,30.4549679 59.6985899,30.4541981 59.6988205,30.453899 59.6989058,30.4537918 59.6989356,30.4536794 59.6989629,30.4535557 59.6989856,30.4534511 59.6989991,30.4533251 59.6990121,30.4532188 59.6990257,30.4531097 59.6990384,30.4530898 59.6990411,30.4530456 59.6990471,30.4529483 59.6990428,30.452721 59.6990256,30.4526039 59.6990156,30.4523895 59.6989984,30.4522106 59.6989843,30.4520626 59.698971,30.4518814 59.6989585,30.4516574 59.6989473,30.4515079 59.6989512,30.4513576 59.6989647,30.4511257 59.6989833,30.4507033 59.6990189,30.4498045 59.699093,30.4495902 59.6991095,30.449288 59.6991349,30.4489705 59.699163,30.4487787 59.6991832,30.4486594 59.6992042,30.4485816 59.6992218,30.4483804 59.6992665,30.4483134 59.6992807,30.4482261 59.6992991,30.4480734 59.6993207,30.4478922 59.6993369,30.4476348 59.6993534,30.4474175 59.6993579,30.4472213 59.6993549,30.4470849 59.6993484,30.4469099 59.6993315,30.4465807 59.6992943,30.4463005 59.699266,30.4460455 59.6992334,30.445784 59.6991949,30.4455453 59.6991481,30.4453367 59.6991061,30.4450934 59.6990399,30.4448113 59.6989579,30.4445865 59.6988843,30.4443921 59.6988221,30.4441572 59.6987421,30.4439038 59.6986557,30.4434519 59.6984884,30.4429811 59.6983056,30.4420431 59.6979399,30.4418559 59.6978726,30.4416695 59.6977994,30.441534 59.6977474,30.4414482 59.6977149,30.4413649 59.6976776,30.4412699 59.6976303,30.4411831 59.6975862,30.4411089 59.6975484,30.4410289 59.697504,30.4409815 59.6974727,30.4409212 59.6974328,30.4408374 59.6973571,30.4405993 59.6971268,30.4404411 59.6969686,30.4402828 59.6968116,30.4397464 59.6962404,30.4395909 59.6960983,30.439434 59.6959641,30.4393118 59.695876,30.4392419 59.6958321,30.439177 59.6957928,30.4390738 59.6957339,30.4388879 59.6956351,30.4385161 59.6954393,30.4384468 59.695404,30.438361 59.6953709,30.4382459 59.6953424,30.4380981 59.695312,30.4379144 59.6952822,30.4375067 59.6952213,30.4372801 59.6951739,30.4371808 59.695153,30.4370661 59.695126,30.4369099 59.6950805,30.4367611 59.6950291,30.4366176 59.6949682,30.4364949 59.6948934,30.4362637 59.6947112,30.4359055 59.6944268,30.4355501 59.6941622,30.4351531 59.6938841,30.4347532 59.6936305,30.4346998 59.6935975,30.4346849 59.693577,30.4346174 59.6935301,30.4346147 59.6935224,30.4346086 59.6935129,30.4345932 59.6935014,30.4344744 59.6934215,30.4344752 59.6934118,30.4344684 59.6934032,30.4343048 59.693294,30.4335858 59.6928433,30.4335672 59.6928378,30.4335491 59.692831,30.4335344 59.6928246,30.4335169 59.6928158,30.4334908 59.6928019,30.4334747 59.6927935,30.4334378 59.6927735,30.4334063 59.6927569,30.4333486 59.6927221,30.4332896 59.6926848,30.4333366 59.6926751,30.4332748 59.6926368,30.4332052 59.6925918,30.4331186 59.6925354,30.4330442 59.6924832,30.4329739 59.6924321,30.432891 59.6923692,30.4328383 59.6923262,30.432786 59.6922862,30.4327464 59.6922518,30.4327224 59.6922281,30.4327002 59.692202,30.4326801 59.6921654,30.4326563 59.6921265,30.4326325 59.6920866,30.4326077 59.6920372,30.4325876 59.6920054,30.4325715 59.6919759,30.4325473 59.691936,30.4325252 59.6918893,30.4325105 59.6918548,30.4324944 59.6918145,30.4324776 59.6917472,30.4324681 59.6916959,30.4324608 59.6916494,30.4324568 59.6916037)),((30.4459925 59.6840515,30.4465029 59.6838166,30.4469327 59.6836721,30.4472874 59.6834226,30.4479163 59.6832392,30.4483415 59.6832476,30.4484247 59.6832514,30.4484595 59.6832547,30.4484884 59.6832585,30.4485108 59.6832641,30.4489705 59.6834352,30.4489993 59.6834563,30.4490069 59.6834636,30.4492468 59.6836887,30.4491255 59.6840718,30.4490543 59.6840686,30.4483928 59.684035,30.4478277 59.6840459,30.4469355 59.6841321,30.4462744 59.6842068,30.4459925 59.6840515)))', 'relation', 17990902, '{\"name\": \"Государственный музей-заповедник «Павловск»\", \"note\": \"граница имущественного комплекса организации, не граница парка\", \"boundary\": \"protected_area\", \"operator\": \"Государственный музей-заповедник «Павловск»\", \"wikidata\": \"Q405637\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4524973 59.6846698,30.4525041 59.6846527,30.4525156 59.684624,30.4525454 59.684611,30.4525859 59.6846153,30.45286 59.6846392,30.4528639 59.6846231,30.4530942 59.6846416,30.4530887 59.6846582,30.4535793 59.6847014,30.4536048 59.6847154,30.4535894 59.6847601,30.4535811 59.6847595,30.4534913 59.6847521,30.4529615 59.6847082,30.4525675 59.6846756,30.4524973 59.6846698)))', 'relation', 17786995, '{\"landuse\": \"construction\", \"start_date\": \"06.204\", \"description\": \"реставрация Павильона Трех граций\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522477 59.6858088,30.4522705 59.6857319,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4527091 59.6855042,30.4528709 59.6855164,30.4529043 59.6855189,30.4529835 59.685525,30.4530542 59.6855302,30.4530286 59.6856166,30.4529796 59.6857822,30.4529559 59.6858622,30.4528897 59.6858572,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088)))', 'relation', 6636658, '{\"height\": \"19.650\", \"architect\": \"Чарльз Камерон\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2.45\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\", \"source:building:part\": \"http://pancer.ru/images/project/012/2.jpg\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4530216 59.6854636,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.453064 59.6855044,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 6636659, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528709 59.6855164,30.4528746 59.6855048,30.4528788 59.6854915,30.4529122 59.6854936,30.4529942 59.6854993,30.4529881 59.6855114,30.4529835 59.685525,30.4529043 59.6855189,30.4528709 59.6855164)))', 'relation', 14572596, '{\"height\": \"6.65\", \"roof:shape\": \"flat\", \"roof:colour\": \"gray\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4533818 59.6852214,30.453417 59.6852162,30.4534578 59.6852115,30.4535038 59.6852069,30.4535289 59.6853164,30.4535075 59.6853177,30.4534847 59.6853198,30.4534688 59.6853212,30.4534368 59.6853262,30.453436 59.6853248,30.4534146 59.6852887,30.4533878 59.6852355,30.4533818 59.6852214)))', 'relation', 17755881, '{\"height\": \"13\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.453436 59.6853248,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533268 59.6853074,30.4532684 59.6852465)))', 'relation', 17755882, '{\"height\": \"13\", \"min_height\": \"10\", \"roof:shape\": \"gabled\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529542 59.6853912,30.4529724 59.685378,30.4530012 59.685359,30.4530217 59.6853466,30.4530456 59.6853334,30.4530682 59.6853211,30.4530897 59.6853096,30.4531138 59.6852988,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533878 59.6852355,30.4534146 59.6852887,30.4533836 59.6852944,30.4533532 59.6853009,30.4533268 59.6853074,30.4532946 59.6853162,30.4532665 59.6853249,30.4532343 59.6853363,30.4532132 59.6853445,30.4531881 59.6853553,30.453164 59.6853668,30.4531411 59.6853788,30.4531158 59.6853933,30.4530954 59.6854062,30.4530746 59.6854199,30.4530552 59.6854344,30.4530382 59.6854491,30.4530216 59.6854636,30.4530079 59.6854761,30.4530004 59.6854886,30.4529942 59.6854993,30.4529122 59.6854936,30.4528788 59.6854915)))', 'relation', 17904735, '{\"height\": \"10\", \"roof:shape\": \"flat\", \"building:part\": \"yes\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4522278 59.6851794,30.4526025 59.6847092,30.4524973 59.6846698,30.4525184 59.6846577,30.4525251 59.684634,30.4525331 59.6846279,30.4525466 59.6846232,30.4525626 59.6846222,30.4525841 59.6846239,30.4527677 59.6846399,30.4528579 59.6846477,30.4528469 59.6846817,30.452843 59.684694,30.4529628 59.6847041,30.4530706 59.6847131,30.4530752 59.684699,30.4530859 59.6846667,30.4535555 59.6847085,30.4535698 59.6847103,30.4535807 59.6847121,30.4535886 59.6847164,30.4535925 59.6847224,30.4535923 59.6847296,30.4535863 59.6847456,30.4535811 59.6847595,30.4535894 59.6847601,30.4536067 59.6847614,30.4536193 59.6847624,30.4536402 59.684764,30.4535302 59.6851198,30.4535229 59.6851437,30.4535137 59.6851734,30.4535124 59.6851786,30.4535038 59.6852069,30.4534979 59.6851951,30.4534914 59.6851874,30.4534811 59.6851808,30.4534678 59.6851758,30.4534524 59.6851728,30.453436 59.6851719,30.4534196 59.6851732,30.4534028 59.6851772,30.4533891 59.6851835,30.4533796 59.6851915,30.4533752 59.6852006,30.4533763 59.68521,30.4533818 59.6852214,30.4533524 59.685227,30.4533302 59.6852316,30.453297 59.6852393,30.4532684 59.6852465,30.4532391 59.6852543,30.4531809 59.6852727,30.453156 59.6852825,30.4531357 59.6852905,30.453128 59.6852882,30.4531198 59.6852866,30.4531113 59.6852855,30.4531024 59.685285,30.4530936 59.6852852,30.4530849 59.6852859,30.4530765 59.6852873,30.4530685 59.6852893,30.4530612 59.6852918,30.4530559 59.6852942,30.4530511 59.6852969,30.453047 59.6852998,30.4530436 59.6853029,30.4530408 59.6853062,30.4530389 59.6853097,30.4530377 59.6853132,30.4530373 59.6853168,30.4530377 59.6853204,30.4530387 59.6853245,30.4530402 59.6853274,30.4530424 59.6853304,30.4530456 59.6853334,30.4530217 59.6853466,30.4530053 59.6853403,30.4529809 59.6853554,30.4529707 59.6853538,30.4529621 59.6853543,30.452955 59.6853567,30.4529297 59.6853727,30.4529266 59.6853774,30.4529284 59.6853815,30.4529349 59.6853856,30.4529136 59.685403,30.4529312 59.685409,30.4529147 59.685423,30.4529045 59.6854337,30.4529242 59.6854401,30.452909 59.6854545,30.4528993 59.6854656,30.4528865 59.6854815,30.4528788 59.6854915,30.4528746 59.6855048,30.4527686 59.6854977,30.452777 59.6854654,30.4527565 59.685464,30.4527224 59.6854618,30.4526841 59.6854592,30.4526646 59.6854579,30.4526564 59.6854895,30.4525812 59.6854845,30.4525787 59.6854944,30.452497 59.6854882,30.4524943 59.6854502,30.4524845 59.6854195,30.4524735 59.685401,30.4524616 59.6853789,30.4524395 59.6853504,30.4524088 59.6853175,30.4523836 59.685295,30.4523534 59.6852701,30.4523333 59.6852571,30.452307 59.6852409,30.4522692 59.6852184,30.4522695 59.6851929,30.4522474 59.6851858,30.4522278 59.6851794)))', 'relation', 4274530, '{\"fee\": \"yes\", \"ref\": \"IIIа\", \"name\": \"Собственный сад\", \"leisure\": \"garden\", \"name:fr\": \"Jardin privé\", \"ref:okn\": \"781620399040366\", \"tourism\": \"attraction\", \"alt_name\": \"Собственный садик\", \"boundary\": \"protected_area\", \"heritage\": \"2\", \"wikidata\": \"Q118122043\", \"start_date\": \"1803\", \"garden:style\": \"french\", \"opening_hours\": \"Mo-Su 09:00-21:00; May 08 - Aug 31\", \"heritage:website\": \"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6518/\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4521745 59.6857248,30.4521808 59.6857036,30.4522002 59.685638,30.4522191 59.6855742,30.4522258 59.6855515,30.4522802 59.6855556,30.4523217 59.6855588,30.452346 59.6854768,30.452497 59.6854882,30.4525787 59.6854944,30.4525812 59.6854845,30.4526564 59.6854895,30.4526646 59.6854579,30.4526841 59.6854592,30.4527224 59.6854618,30.4527565 59.685464,30.452777 59.6854654,30.4527686 59.6854977,30.4528746 59.6855048,30.4528788 59.6854915,30.4528865 59.6854815,30.4528993 59.6854656,30.452909 59.6854545,30.4529242 59.6854401,30.4529045 59.6854337,30.4529147 59.685423,30.4529312 59.685409,30.4529136 59.685403,30.4529349 59.6853856,30.4529284 59.6853815,30.4529266 59.6853774,30.4529297 59.6853727,30.452955 59.6853567,30.4529621 59.6853543,30.4529707 59.6853538,30.4529809 59.6853554,30.4530053 59.6853403,30.4530217 59.6853466,30.4530456 59.6853334,30.4530424 59.6853304,30.4530402 59.6853274,30.4530387 59.6853245,30.4530377 59.6853204,30.4530373 59.6853168,30.4530377 59.6853132,30.4530389 59.6853097,30.4530408 59.6853062,30.4530436 59.6853029,30.453047 59.6852998,30.4530511 59.6852969,30.4530559 59.6852942,30.4530612 59.6852918,30.4530685 59.6852893,30.4530765 59.6852873,30.4530849 59.6852859,30.4530936 59.6852852,30.4531024 59.685285,30.4531113 59.6852855,30.4531198 59.6852866,30.453128 59.6852882,30.4531357 59.6852905,30.453156 59.6852825,30.4531809 59.6852727,30.4532391 59.6852543,30.4532684 59.6852465,30.453297 59.6852393,30.4533302 59.6852316,30.4533524 59.685227,30.4533818 59.6852214,30.4533763 59.68521,30.4533752 59.6852006,30.4533796 59.6851915,30.4533891 59.6851835,30.4534028 59.6851772,30.4534196 59.6851732,30.453436 59.6851719,30.4534524 59.6851728,30.4534678 59.6851758,30.4534811 59.6851808,30.4534914 59.6851874,30.4534979 59.6851951,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540229 59.6848667,30.4540358 59.6848708,30.454047 59.6848759,30.4540561 59.6848821,30.454063 59.6848889,30.4540674 59.6848962,30.4540691 59.6849039,30.454068 59.6849115,30.4540643 59.6849189,30.454058 59.6849259,30.4540493 59.6849322,30.4540386 59.6849376,30.4540261 59.684942,30.4540122 59.6849452,30.4539975 59.684947,30.4539823 59.6849475,30.4539763 59.6849646,30.453965 59.6849637,30.4539277 59.6849606,30.4538688 59.6849558,30.4538059 59.6849506,30.4537818 59.6849487,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537483 59.6850789,30.4538612 59.6850876,30.4539247 59.6850925,30.4539406 59.6850424,30.4539786 59.6850519,30.4540221 59.685063,30.4540417 59.6850686,30.4540646 59.6850751,30.4541059 59.6850881,30.4541472 59.6851025,30.4541871 59.685118,30.4542254 59.6851343,30.4542622 59.6851516,30.4542942 59.6851377,30.4544115 59.6852076,30.4543838 59.6852203,30.4544141 59.6852392,30.4544426 59.6852588,30.4544691 59.6852791,30.4544972 59.6853031,30.4545225 59.6853279,30.4545451 59.6853534,30.4545829 59.6853462,30.4546442 59.6854282,30.4546081 59.6854351,30.4546263 59.6854611,30.4546407 59.6854917,30.4546513 59.6855211,30.4546577 59.6855509,30.4545667 59.6855569,30.4545695 59.6855677,30.4545502 59.6855689,30.4545521 59.6855762,30.454475 59.6855814,30.454473 59.685574,30.4544524 59.6855754,30.4544496 59.6855646,30.4544349 59.6855656,30.4543687 59.68557,30.4543619 59.6855441,30.4543522 59.6855184,30.4543439 59.6854971,30.4543247 59.685468,30.454307 59.6854434,30.4542866 59.6854194,30.4542636 59.6853959,30.4542381 59.6853732,30.4542062 59.685347,30.4541753 59.6853248,30.4541426 59.6853062,30.4541083 59.6852876,30.4540689 59.6852681,30.4540273 59.6852498,30.4539837 59.6852328,30.4539382 59.685217,30.4538908 59.6852026,30.4538877 59.6852126,30.4539316 59.6852158,30.4539299 59.6852218,30.4539248 59.68524,30.453923 59.6852463,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536921 59.6853643,30.4536766 59.6853631,30.453626 59.6853592,30.4536111 59.6853581,30.4536187 59.6853329,30.4534688 59.6853212,30.4534368 59.6853262,30.4533983 59.6853338,30.4533609 59.6853429,30.4533196 59.6853548,30.4532989 59.6853612,30.4532797 59.6853674,30.4532663 59.6853726,30.4532524 59.6853786,30.4532824 59.685393,30.4532679 59.6854007,30.4532019 59.6854356,30.4531881 59.6854429,30.4531582 59.6854285,30.453148 59.6854347,30.4531265 59.6854489,30.4531071 59.6854639,30.4530899 59.6854797,30.4530765 59.6854926,30.4530668 59.6855046,30.45306 59.6855156,30.4530542 59.6855302,30.4530286 59.6856166,30.4530752 59.6856201,30.4531272 59.685624,30.4531226 59.6856395,30.4531 59.6857159,30.4530826 59.6857747,30.4530781 59.6857896,30.4530261 59.6857857,30.4529796 59.6857822,30.4529559 59.6858622,30.4529512 59.6858765,30.4529486 59.6858896,30.4529478 59.6859011,30.4529482 59.6859112,30.452952 59.685926,30.4529569 59.6859385,30.4529638 59.6859523,30.4529718 59.6859649,30.4529791 59.6859757,30.4529856 59.6859841,30.4530246 59.6859742,30.4530338 59.6859834,30.4530767 59.6860278,30.4530861 59.6860371,30.4530482 59.6860471,30.4530568 59.6860536,30.4530663 59.6860602,30.4530779 59.6860674,30.4530898 59.6860742,30.4531018 59.6860809,30.4531136 59.6860871,30.4531293 59.6860946,30.453148 59.6861029,30.4531695 59.6861116,30.4532167 59.6861306,30.4533686 59.6861421,30.453376 59.6861189,30.4533898 59.68612,30.4534436 59.6861244,30.453457 59.6861255,30.4534496 59.6861487,30.4536027 59.6861615,30.4535556 59.6863114,30.4535958 59.6863065,30.4536563 59.6862959,30.4537014 59.6862868,30.4537731 59.6862682,30.4538342 59.6862493,30.453879 59.6862345,30.4539364 59.686214,30.4539768 59.686198,30.45402 59.6861768,30.4540703 59.686148,30.4541119 59.6861223,30.4541469 59.6860952,30.4541742 59.6860729,30.4541995 59.6860505,30.4542215 59.6860272,30.4542918 59.6860451,30.4543031 59.6860479,30.4543127 59.6860386,30.45433 59.6860429,30.4543365 59.6860363,30.4544062 59.6860538,30.4543997 59.6860604,30.4544185 59.6860651,30.4544086 59.6860746,30.4544964 59.6860973,30.4544728 59.6861239,30.4544395 59.686154,30.4544059 59.686181,30.4543849 59.6861942,30.4544137 59.6862059,30.4542999 59.6862773,30.4542705 59.6862654,30.4542363 59.6862844,30.4541965 59.6863041,30.4541887 59.6863078,30.4542091 59.6863195,30.4542 59.6863235,30.4541696 59.6863371,30.4541607 59.6863411,30.4541407 59.6863296,30.4541297 59.6863344,30.4540887 59.6863495,30.4540549 59.6863624,30.4540219 59.6863729,30.4540399 59.6863883,30.4540005 59.6863999,30.4540172 59.6864141,30.4540057 59.6864176,30.4539576 59.686432,30.4539454 59.6864356,30.4539287 59.6864214,30.4538817 59.6864353,30.453863 59.6864194,30.4538212 59.6864281,30.4537814 59.6864354,30.4537376 59.6864434,30.4536952 59.6864492,30.4536556 59.6864553,30.4536188 59.68646,30.4535812 59.6864636,30.453575 59.6864544,30.4534768 59.6864467,30.4533659 59.6864383,30.4533611 59.6864525,30.4533485 59.6864515,30.4533248 59.6864494,30.4532998 59.6864473,30.4532869 59.6864462,30.4532916 59.686432,30.4532725 59.6864305,30.4532826 59.6863983,30.4531363 59.6863866,30.453138 59.686381,30.4531642 59.6862975,30.4531215 59.686294,30.4531372 59.6862455,30.4531795 59.686249,30.453196 59.6861992,30.4531704 59.6862175,30.4531608 59.6862141,30.453137 59.6862056,30.4531278 59.6862023,30.4531534 59.686184,30.4530963 59.6861616,30.4530418 59.6861992,30.4530167 59.6861897,30.4529804 59.6861727,30.4529497 59.6861561,30.4529175 59.6861373,30.4528879 59.6861175,30.4528659 59.6861008,30.4528406 59.6860793,30.4528174 59.6860572,30.4527956 59.6860336,30.4527791 59.6860133,30.4527643 59.6859927,30.4527472 59.6859643,30.4527383 59.6859422,30.4527314 59.6859191,30.4527279 59.6859036,30.4528174 59.6858982,30.4528205 59.685852,30.4526832 59.6858416,30.4526091 59.6858361,30.4525803 59.6858339,30.4522804 59.6858113,30.4522477 59.6858088,30.4522705 59.6857319,30.4522289 59.6857289,30.4521745 59.6857248)))', 'relation', 1759666, '{\"name\": \"Павловский дворец\", \"name:ca\": \"Palau Pàvlovsk\", \"name:en\": \"Pavlovsk Palace\", \"name:fi\": \"Pavlovskin_palatsi\", \"name:fr\": \"Palais de Pavlovsk\", \"name:pt\": \"Palácio de Pavlovsk\", \"name:uz\": \"Pavlovsk saroyi\", \"name:zh\": \"巴甫洛夫斯克的宫殿\", \"ref:okn\": \"781610399040316\", \"tourism\": \"museum\", \"building\": \"palace\", \"historic\": \"yes\", \"int_name\": \"Palais de Pavlovsk\", \"wikidata\": \"Q118121947\", \"wikipedia\": \"ru:Павловский дворец\", \"start_date\": \"1782\", \"addr:street\": \"Садовая улица\", \"roof:colour\": \"#DADDE2\", \"building:colour\": \"#FFE19C\", \"addr:housenumber\": \"20 литА\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534688 59.6853212,30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4538454 59.6853506,30.4536997 59.6853392,30.4536666 59.6853366,30.4536187 59.6853329,30.4534688 59.6853212)))', 'relation', 6636665, '{\"name\": \"Южный корпус\", \"height\": \"15\", \"roof:shape\": \"pyramidal\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4534995 59.6852209,30.4535038 59.6852069,30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536141 59.6851263,30.4537003 59.685133,30.4539076 59.685149,30.4538908 59.6852026,30.4538877 59.6852126,30.4538783 59.6852431,30.4538761 59.6852503,30.4534995 59.6852209)))', 'relation', 14572597, '{\"height\": \"15\", \"roof:shape\": \"gabled\", \"start_date\": \"1782\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\", \"roof:orientation\": \"across\"}', NULL),\n ('SRID=4326;MULTIPOLYGON(((30.4535124 59.6851786,30.4535137 59.6851734,30.4535229 59.6851437,30.4535302 59.6851198,30.4536402 59.684764,30.4536417 59.6847593,30.4536451 59.6847596,30.4538117 59.6847727,30.4538368 59.6847747,30.4538611 59.6847766,30.4540318 59.6847901,30.4540295 59.6847972,30.4540145 59.684846,30.4540088 59.6848638,30.4540054 59.6848752,30.4537854 59.6848579,30.4537579 59.6849467,30.4537377 59.6850123,30.4537178 59.6850766,30.4537003 59.685133,30.453682 59.6851921,30.4535124 59.6851786)))', 'relation', 18019154, '{\"height\": \"13\", \"roof:shape\": \"hipped\", \"roof:colour\": \"#DADDE2\", \"roof:height\": \"2\", \"building:part\": \"yes\", \"roof:material\": \"metal\", \"building:colour\": \"#FFE19C\"}', NULL);\n--Testcase 402:\nSELECT count(*) FROM json_osm_test;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 404: オーク / Sồi\nSELECT * FROM json_osm_test WHERE t->>'genus' = 'Quercus';\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 406:\nSELECT * FROM json_osm_test WHERE (t->>'height')::float = 15;\n--Testcase 407:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 408: 落葉性 / Cây rụng lá\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'deciduous';\n--Testcase 409:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n--Testcase 410: 常緑植物 / Cây thường xanh\nSELECT * FROM json_osm_test WHERE t->>'leaf_cycle' = 'evergreen';\n\n--Testcase 411:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n--Testcase 412: XVIII cent.\nSELECT * FROM json_osm_test WHERE t->>'start_date' = 'C18';\n\n--Testcase 413:\nDELETE FROM json_osm_test;\n\n--Testcase 500:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/macaddr.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr) SERVER sqlite_svr OPTIONS (table 'type_MACADDR');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03');\n--Testcase 012:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03');\n--Testcase 013:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (3, '08002b:010203');\n--Testcase 014:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (4, '08002b-010203');\n--Testcase 015:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203');\n--Testcase 016:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203');\n--Testcase 017:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (7, '08002b010203');\n--Testcase 018:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03');\n--Testcase 019:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03');\n--Testcase 020:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (10, '08002F:010203');\n--Testcase 021:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (11, '08002F-010203');\n--Testcase 022:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203');\n--Testcase 023:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203');\n--Testcase 024:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (14, '08002F010203');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (15, decode('08002F010203', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (16, decode('08002b010203', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" TYPE macaddr;\n--Testcase 029:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03');\n--Testcase 030:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03');\n--Testcase 031:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (19, '08002b:010203');\n--Testcase 032:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (20, '08002b-010203');\n--Testcase 033:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203');\n--Testcase 034:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203');\n--Testcase 035:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (23, '08002b010203');\n--Testcase 036:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03');\n--Testcase 037:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03');\n--Testcase 038:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (26, '08002F:010203');\n--Testcase 039:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (27, '08002F-010203');\n--Testcase 040:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203');\n--Testcase 041:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203');\n--Testcase 042:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (30, '08002F010203');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03');\n--Testcase 046:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03');\n--Testcase 047:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (33, '08002b:010203');\n--Testcase 048:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (34, '08002b-010203');\n--Testcase 049:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203');\n--Testcase 050:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203');\n--Testcase 051:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (37, '08002b010203');\n--Testcase 052:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03');\n--Testcase 053:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03');\n--Testcase 054:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (40, '08002F:010203');\n--Testcase 055:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (41, '08002F-010203');\n--Testcase 056:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203');\n--Testcase 057:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203');\n--Testcase 058:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (44, '08002F010203');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03');\n--Testcase 062:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03');\n--Testcase 063:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (47, '08002b:010203');\n--Testcase 064:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (48, '08002b-010203');\n--Testcase 065:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203');\n--Testcase 066:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203');\n--Testcase 067:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (51, '08002b010203');\n--Testcase 068:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03');\n--Testcase 069:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03');\n--Testcase 070:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (54, '08002F:010203');\n--Testcase 071:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (55, '08002F-010203');\n--Testcase 072:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203');\n--Testcase 073:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203');\n--Testcase 074:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (58, '08002F010203');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2b:01:02:03';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR+\" where \"m\" = '08:00:2F:01:02:03';\n--Testcase 091:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17; -- 9527026057731\n--Testcase 098:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR\" WHERE \"m\" = '08:00:2F:01:02:03';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:05' WHERE \"m\" = '08:AA:2F:01:02:04';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:03' WHERE \"m\" = '08:AA:2F:01:02:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR\" SET \"m\" = '08:AA:2F:01:02:02' WHERE \"m\" = '08:AA:2F:01:02:03';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (66, '00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (67, '00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR\" (\"i\", \"m\") VALUES (68, '00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR\" ORDER BY \"m\" DESC;\n\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDRpk\" (col macaddr OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDRpk\" VALUES ('01:02:03:04:05:06');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDRpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDRpk\" VALUES ('01-02-03-04-05-06');\n--Testcase 159:\nSELECT * FROM \"type_MACADDRpk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDRpk\";\n\n--no macaddr operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06' FROM \"type_MACADDR\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06' FROM \"type_MACADDR\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/macaddr8.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_MACADDR8\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (1, '08:00:2b:01:02:03:04:05');\n--Testcase 012:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (2, '08-00-2b-01-02-03-04-05');\n--Testcase 013:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (3, '08002b01:02030405');\n--Testcase 014:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (4, '08002b01-02030405');\n--Testcase 015:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (5, '0800.2b01.0203.0405');\n--Testcase 016:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (6, '0800-2b01-0203-0405');\n--Testcase 017:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (7, '08002b0102030405');\n--Testcase 018:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (8, '08:00:2F:01:02:03:04:05');\n--Testcase 019:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (9, '08-00-2F-01-02-03-04-05');\n--Testcase 020:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (10, '08002F01:02030405');\n--Testcase 021:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (11, '08002F01-02030405');\n--Testcase 022:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (12, '0800.2F01.0203.0405');\n--Testcase 023:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (13, '0800-2F01-0203-0405');\n--Testcase 024:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (14, '08002F0102030405');\n--Testcase 025:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE bytea;\n--Testcase 026:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (15, decode('08002F0102030405', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (16, decode('08002b0102030405', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" TYPE macaddr8;\n--Testcase 029:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (17, '08:00:2b:01:02:03:04:05');\n--Testcase 030:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (18, '08-00-2b-01-02-03-04-05');\n--Testcase 031:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (19, '08002b01:02030405');\n--Testcase 032:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (20, '08002b01-02030405');\n--Testcase 033:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (21, '0800.2b01.0203.0405');\n--Testcase 034:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (22, '0800-2b01-0203-0405');\n--Testcase 035:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (23, '08002b0102030405');\n--Testcase 036:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (24, '08:00:2F:01:02:03:04:05');\n--Testcase 037:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (25, '08-00-2F-01-02-03-04-05');\n--Testcase 038:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (26, '08002F01:02030405');\n--Testcase 039:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (27, '08002F01-02030405');\n--Testcase 040:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (28, '0800.2F01.0203.0405');\n--Testcase 041:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (29, '0800-2F01-0203-0405');\n--Testcase 042:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 043:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (30, '08002F0102030405');\n--Testcase 044:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 045:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (31, '08:00:2b:01:02:03:04:05');\n--Testcase 046:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (32, '08-00-2b-01-02-03-04-05');\n--Testcase 047:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (33, '08002b01:02030405');\n--Testcase 048:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (34, '08002b01-02030405');\n--Testcase 049:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (35, '0800.2b01.0203.0405');\n--Testcase 050:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (36, '0800-2b01-0203-0405');\n--Testcase 051:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (37, '08002b0102030405');\n--Testcase 052:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (38, '08:00:2F:01:02:03:04:05');\n--Testcase 053:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (39, '08-00-2F-01-02-03-04-05');\n--Testcase 054:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (40, '08002F01:02030405');\n--Testcase 055:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (41, '08002F01-02030405');\n--Testcase 056:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (42, '0800.2F01.0203.0405');\n--Testcase 057:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (43, '0800-2F01-0203-0405');\n--Testcase 058:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 059:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (44, '08002F0102030405');\n--Testcase 060:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'text');\n--Testcase 061:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (45, '08:00:2b:01:02:03:04:05');\n--Testcase 062:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (46, '08-00-2b-01-02-03-04-05');\n--Testcase 063:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (47, '08002b01:02030405');\n--Testcase 064:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (48, '08002b01-02030405');\n--Testcase 065:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (49, '0800.2b01.0203.0405');\n--Testcase 066:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (50, '0800-2b01-0203-0405');\n--Testcase 067:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (51, '08002b0102030405');\n--Testcase 068:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (52, '08:00:2F:01:02:03:04:05');\n--Testcase 069:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (53, '08-00-2F-01-02-03-04-05');\n--Testcase 070:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (54, '08002F01:02030405');\n--Testcase 071:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (55, '08002F01-02030405');\n--Testcase 072:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (56, '0800.2F01.0203.0405');\n--Testcase 073:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (57, '0800-2F01-0203-0405');\n--Testcase 074:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 075:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (58, '08002F0102030405');\n--Testcase 076:\nCREATE FOREIGN TABLE \"type_MACADDR8+\"( \"i\" int OPTIONS (key 'true'), \"m\" macaddr8, \"t\" text, \"l\" smallint, \"tx\" varchar(64)) SERVER sqlite_svr OPTIONS (table 'type_MACADDR8+');\n--Testcase 077:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 078:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 079:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 080:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 081:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 082:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 083:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 084:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 086:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 087:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2b:01:02:03:04:05';\n--Testcase 088:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 089:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 090:\nSELECT * FROM \"type_MACADDR8+\" where \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 091:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 092:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 15;\n--Testcase 093:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 094:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 095:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 16;\n--Testcase 096:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 098:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"i\" = 17;\n--Testcase 099:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n\n--Testcase 100:\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 102:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'integer');\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 104:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_MACADDR8\" WHERE \"m\" = '08:00:2F:01:02:03:04:05';\n--Testcase 106:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 107:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (59, '08:AA:2F:01:02:04:04:05');\n--Testcase 108:\nSELECT * FROM \"type_MACADDR8+\" WHERE \"i\" = 59;\n--Testcase 109:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 110: -- text\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:05:04:05' WHERE \"m\" = '08:AA:2F:01:02:04:04:05';\n--Testcase 111:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 112:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 113:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 114: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:03:04:05' WHERE \"m\" = '08:AA:2F:01:02:05:04:05';\n--Testcase 115:\nSELECT * FROM \"type_MACADDR8+\";\n--Testcase 116:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 117:\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 118: -- BLOB\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_MACADDR8\" SET \"m\" = '08:AA:2F:01:02:02:04:05' WHERE \"m\" = '08:AA:2F:01:02:03:04:05';\n--Testcase 119:\nSELECT * FROM \"type_MACADDR8+\";\n\n--Testcase 120:\nDELETE FROM \"type_MACADDR8\";\n\n--Testcase 121: -- sort test\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 122:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (60, '01:00:00:00:00:00:00:00');\n--Testcase 123:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 124:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (61, '02:00:00:00:00:00:00:00');\n--Testcase 125:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 126:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (62, '03:00:00:00:00:00:00:00');\n--Testcase 127:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 128:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (63, '00:00:00:00:00:00:00:01');\n--Testcase 129:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 130:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (64, '00:00:00:00:00:00:00:02');\n--Testcase 131:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 132:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (65, '00:00:00:00:00:00:00:03');\n--Testcase 133:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'TEXT');\n--Testcase 134:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (66, '00:00:00:00:01:00:00:00');\n--Testcase 135:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'BLOB');\n--Testcase 136:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (67, '00:00:00:00:02:00:00:00');\n--Testcase 137:\nALTER FOREIGN TABLE \"type_MACADDR8\" ALTER COLUMN \"m\" OPTIONS (SET column_type 'int');\n--Testcase 138:\nINSERT INTO \"type_MACADDR8\" (\"i\", \"m\") VALUES (68, '00:00:00:00:03:00:00:00');\n--Testcase 139:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" ASC;\n--Testcase 140:\nSELECT * FROM \"type_MACADDR8\" ORDER BY \"m\" DESC;\n\n--Testcase 150:\nCREATE FOREIGN TABLE \"type_MACADDR8pk\" (col macaddr8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 151:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 152:\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 153:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'int');\n--Testcase 154: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 155:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (SET column_type 'text');\n--Testcase 156: NO ERR, but the same semantics!\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01:02:03:04:05:06:07:08');\n--Testcase 157:\nALTER FOREIGN TABLE \"type_MACADDR8pk\" ALTER COLUMN col OPTIONS (ADD column_type 'BLOB');\n--Testcase 158: ERR - primary key\nINSERT INTO \"type_MACADDR8pk\" VALUES ('01-02-03-04-05-06-07-08');\n--Testcase 159:\nSELECT * FROM \"type_MACADDR8pk\";\n--Testcase 160:\nDELETE FROM \"type_MACADDR8pk\";\n\n--no macaddr8 operators pushing down\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" | '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" & '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT ~\"m\" FROM \"type_MACADDR8\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" > '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" < '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" = '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" >= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" <= '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"m\" != '01:02:03:04:05:06:07:08' FROM \"type_MACADDR8\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/numeric.sql",
    "content": "--\n-- NUMERIC\n--\n--Testcase 567:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 568:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 569:\nCREATE FOREIGN TABLE num_data (id int4 OPTIONS (key 'true'), val numeric(210,10)) SERVER sqlite_svr;\n--Testcase 570:\nCREATE FOREIGN TABLE num_exp_add (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 571:\nCREATE FOREIGN TABLE num_exp_sub (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 572:\nCREATE FOREIGN TABLE num_exp_div (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 573:\nCREATE FOREIGN TABLE num_exp_mul (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 574:\nCREATE FOREIGN TABLE num_exp_sqrt (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 575:\nCREATE FOREIGN TABLE num_exp_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 576:\nCREATE FOREIGN TABLE num_exp_log10 (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n--Testcase 577:\nCREATE FOREIGN TABLE num_exp_power_10_ln (id int4 OPTIONS (key 'true'), expected numeric(210,10)) SERVER sqlite_svr;\n\n--Testcase 1556:\nCREATE FOREIGN TABLE num_variance (a numeric) SERVER sqlite_svr;\n\n--Testcase 578:\nCREATE FOREIGN TABLE num_result (id1 int4 OPTIONS (key 'true'), id2 int4 OPTIONS (key 'true'), result numeric(210,10)) SERVER sqlite_svr;\n\n\n-- ******************************\n-- * The following EXPECTED results are computed by bc(1)\n-- * with a scale of 200\n-- ******************************\n\nBEGIN TRANSACTION;\n--Testcase 1:\nINSERT INTO num_exp_add VALUES (0,0,'0');\n--Testcase 2:\nINSERT INTO num_exp_sub VALUES (0,0,'0');\n--Testcase 3:\nINSERT INTO num_exp_mul VALUES (0,0,'0');\n--Testcase 4:\nINSERT INTO num_exp_div VALUES (0,0,'NaN');\n--Testcase 5:\nINSERT INTO num_exp_add VALUES (0,1,'0');\n--Testcase 6:\nINSERT INTO num_exp_sub VALUES (0,1,'0');\n--Testcase 7:\nINSERT INTO num_exp_mul VALUES (0,1,'0');\n--Testcase 8:\nINSERT INTO num_exp_div VALUES (0,1,'NaN');\n--Testcase 9:\nINSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');\n--Testcase 10:\nINSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');\n--Testcase 11:\nINSERT INTO num_exp_mul VALUES (0,2,'0');\n--Testcase 12:\nINSERT INTO num_exp_div VALUES (0,2,'0');\n--Testcase 13:\nINSERT INTO num_exp_add VALUES (0,3,'4.31');\n--Testcase 14:\nINSERT INTO num_exp_sub VALUES (0,3,'-4.31');\n--Testcase 15:\nINSERT INTO num_exp_mul VALUES (0,3,'0');\n--Testcase 16:\nINSERT INTO num_exp_div VALUES (0,3,'0');\n--Testcase 17:\nINSERT INTO num_exp_add VALUES (0,4,'7799461.4119');\n--Testcase 18:\nINSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');\n--Testcase 19:\nINSERT INTO num_exp_mul VALUES (0,4,'0');\n--Testcase 20:\nINSERT INTO num_exp_div VALUES (0,4,'0');\n--Testcase 21:\nINSERT INTO num_exp_add VALUES (0,5,'16397.038491');\n--Testcase 22:\nINSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');\n--Testcase 23:\nINSERT INTO num_exp_mul VALUES (0,5,'0');\n--Testcase 24:\nINSERT INTO num_exp_div VALUES (0,5,'0');\n--Testcase 25:\nINSERT INTO num_exp_add VALUES (0,6,'93901.57763026');\n--Testcase 26:\nINSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');\n--Testcase 27:\nINSERT INTO num_exp_mul VALUES (0,6,'0');\n--Testcase 28:\nINSERT INTO num_exp_div VALUES (0,6,'0');\n--Testcase 29:\nINSERT INTO num_exp_add VALUES (0,7,'-83028485');\n--Testcase 30:\nINSERT INTO num_exp_sub VALUES (0,7,'83028485');\n--Testcase 31:\nINSERT INTO num_exp_mul VALUES (0,7,'0');\n--Testcase 32:\nINSERT INTO num_exp_div VALUES (0,7,'0');\n--Testcase 33:\nINSERT INTO num_exp_add VALUES (0,8,'74881');\n--Testcase 34:\nINSERT INTO num_exp_sub VALUES (0,8,'-74881');\n--Testcase 35:\nINSERT INTO num_exp_mul VALUES (0,8,'0');\n--Testcase 36:\nINSERT INTO num_exp_div VALUES (0,8,'0');\n--Testcase 37:\nINSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');\n--Testcase 38:\nINSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');\n--Testcase 39:\nINSERT INTO num_exp_mul VALUES (0,9,'0');\n--Testcase 40:\nINSERT INTO num_exp_div VALUES (0,9,'0');\n--Testcase 41:\nINSERT INTO num_exp_add VALUES (1,0,'0');\n--Testcase 42:\nINSERT INTO num_exp_sub VALUES (1,0,'0');\n--Testcase 43:\nINSERT INTO num_exp_mul VALUES (1,0,'0');\n--Testcase 44:\nINSERT INTO num_exp_div VALUES (1,0,'NaN');\n--Testcase 45:\nINSERT INTO num_exp_add VALUES (1,1,'0');\n--Testcase 46:\nINSERT INTO num_exp_sub VALUES (1,1,'0');\n--Testcase 47:\nINSERT INTO num_exp_mul VALUES (1,1,'0');\n--Testcase 48:\nINSERT INTO num_exp_div VALUES (1,1,'NaN');\n--Testcase 49:\nINSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');\n--Testcase 50:\nINSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');\n--Testcase 51:\nINSERT INTO num_exp_mul VALUES (1,2,'0');\n--Testcase 52:\nINSERT INTO num_exp_div VALUES (1,2,'0');\n--Testcase 53:\nINSERT INTO num_exp_add VALUES (1,3,'4.31');\n--Testcase 54:\nINSERT INTO num_exp_sub VALUES (1,3,'-4.31');\n--Testcase 55:\nINSERT INTO num_exp_mul VALUES (1,3,'0');\n--Testcase 56:\nINSERT INTO num_exp_div VALUES (1,3,'0');\n--Testcase 57:\nINSERT INTO num_exp_add VALUES (1,4,'7799461.4119');\n--Testcase 58:\nINSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');\n--Testcase 59:\nINSERT INTO num_exp_mul VALUES (1,4,'0');\n--Testcase 60:\nINSERT INTO num_exp_div VALUES (1,4,'0');\n--Testcase 61:\nINSERT INTO num_exp_add VALUES (1,5,'16397.038491');\n--Testcase 62:\nINSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');\n--Testcase 63:\nINSERT INTO num_exp_mul VALUES (1,5,'0');\n--Testcase 64:\nINSERT INTO num_exp_div VALUES (1,5,'0');\n--Testcase 65:\nINSERT INTO num_exp_add VALUES (1,6,'93901.57763026');\n--Testcase 66:\nINSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');\n--Testcase 67:\nINSERT INTO num_exp_mul VALUES (1,6,'0');\n--Testcase 68:\nINSERT INTO num_exp_div VALUES (1,6,'0');\n--Testcase 69:\nINSERT INTO num_exp_add VALUES (1,7,'-83028485');\n--Testcase 70:\nINSERT INTO num_exp_sub VALUES (1,7,'83028485');\n--Testcase 71:\nINSERT INTO num_exp_mul VALUES (1,7,'0');\n--Testcase 72:\nINSERT INTO num_exp_div VALUES (1,7,'0');\n--Testcase 73:\nINSERT INTO num_exp_add VALUES (1,8,'74881');\n--Testcase 74:\nINSERT INTO num_exp_sub VALUES (1,8,'-74881');\n--Testcase 75:\nINSERT INTO num_exp_mul VALUES (1,8,'0');\n--Testcase 76:\nINSERT INTO num_exp_div VALUES (1,8,'0');\n--Testcase 77:\nINSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');\n--Testcase 78:\nINSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');\n--Testcase 79:\nINSERT INTO num_exp_mul VALUES (1,9,'0');\n--Testcase 80:\nINSERT INTO num_exp_div VALUES (1,9,'0');\n--Testcase 81:\nINSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');\n--Testcase 82:\nINSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');\n--Testcase 83:\nINSERT INTO num_exp_mul VALUES (2,0,'0');\n--Testcase 84:\nINSERT INTO num_exp_div VALUES (2,0,'NaN');\n--Testcase 85:\nINSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');\n--Testcase 86:\nINSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');\n--Testcase 87:\nINSERT INTO num_exp_mul VALUES (2,1,'0');\n--Testcase 88:\nINSERT INTO num_exp_div VALUES (2,1,'NaN');\n--Testcase 89:\nINSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');\n--Testcase 90:\nINSERT INTO num_exp_sub VALUES (2,2,'0');\n--Testcase 91:\nINSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');\n--Testcase 92:\nINSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');\n--Testcase 93:\nINSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');\n--Testcase 94:\nINSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');\n--Testcase 95:\nINSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');\n--Testcase 96:\nINSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');\n--Testcase 97:\nINSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');\n--Testcase 98:\nINSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');\n--Testcase 99:\nINSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');\n--Testcase 100:\nINSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');\n--Testcase 101:\nINSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');\n--Testcase 102:\nINSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');\n--Testcase 103:\nINSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');\n--Testcase 104:\nINSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');\n--Testcase 105:\nINSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');\n--Testcase 106:\nINSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');\n--Testcase 107:\nINSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');\n--Testcase 108:\nINSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');\n--Testcase 109:\nINSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');\n--Testcase 110:\nINSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');\n--Testcase 111:\nINSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');\n--Testcase 112:\nINSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');\n--Testcase 113:\nINSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');\n--Testcase 114:\nINSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');\n--Testcase 115:\nINSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');\n--Testcase 116:\nINSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');\n--Testcase 117:\nINSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');\n--Testcase 118:\nINSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');\n--Testcase 119:\nINSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');\n--Testcase 120:\nINSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');\n--Testcase 121:\nINSERT INTO num_exp_add VALUES (3,0,'4.31');\n--Testcase 122:\nINSERT INTO num_exp_sub VALUES (3,0,'4.31');\n--Testcase 123:\nINSERT INTO num_exp_mul VALUES (3,0,'0');\n--Testcase 124:\nINSERT INTO num_exp_div VALUES (3,0,'NaN');\n--Testcase 125:\nINSERT INTO num_exp_add VALUES (3,1,'4.31');\n--Testcase 126:\nINSERT INTO num_exp_sub VALUES (3,1,'4.31');\n--Testcase 127:\nINSERT INTO num_exp_mul VALUES (3,1,'0');\n--Testcase 128:\nINSERT INTO num_exp_div VALUES (3,1,'NaN');\n--Testcase 129:\nINSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');\n--Testcase 130:\nINSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');\n--Testcase 131:\nINSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');\n--Testcase 132:\nINSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');\n--Testcase 133:\nINSERT INTO num_exp_add VALUES (3,3,'8.62');\n--Testcase 134:\nINSERT INTO num_exp_sub VALUES (3,3,'0');\n--Testcase 135:\nINSERT INTO num_exp_mul VALUES (3,3,'18.5761');\n--Testcase 136:\nINSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');\n--Testcase 137:\nINSERT INTO num_exp_add VALUES (3,4,'7799465.7219');\n--Testcase 138:\nINSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');\n--Testcase 139:\nINSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');\n--Testcase 140:\nINSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');\n--Testcase 141:\nINSERT INTO num_exp_add VALUES (3,5,'16401.348491');\n--Testcase 142:\nINSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');\n--Testcase 143:\nINSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');\n--Testcase 144:\nINSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');\n--Testcase 145:\nINSERT INTO num_exp_add VALUES (3,6,'93905.88763026');\n--Testcase 146:\nINSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');\n--Testcase 147:\nINSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');\n--Testcase 148:\nINSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');\n--Testcase 149:\nINSERT INTO num_exp_add VALUES (3,7,'-83028480.69');\n--Testcase 150:\nINSERT INTO num_exp_sub VALUES (3,7,'83028489.31');\n--Testcase 151:\nINSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');\n--Testcase 152:\nINSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');\n--Testcase 153:\nINSERT INTO num_exp_add VALUES (3,8,'74885.31');\n--Testcase 154:\nINSERT INTO num_exp_sub VALUES (3,8,'-74876.69');\n--Testcase 155:\nINSERT INTO num_exp_mul VALUES (3,8,'322737.11');\n--Testcase 156:\nINSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');\n--Testcase 157:\nINSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');\n--Testcase 158:\nINSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');\n--Testcase 159:\nINSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');\n--Testcase 160:\nINSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');\n--Testcase 161:\nINSERT INTO num_exp_add VALUES (4,0,'7799461.4119');\n--Testcase 162:\nINSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');\n--Testcase 163:\nINSERT INTO num_exp_mul VALUES (4,0,'0');\n--Testcase 164:\nINSERT INTO num_exp_div VALUES (4,0,'NaN');\n--Testcase 165:\nINSERT INTO num_exp_add VALUES (4,1,'7799461.4119');\n--Testcase 166:\nINSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');\n--Testcase 167:\nINSERT INTO num_exp_mul VALUES (4,1,'0');\n--Testcase 168:\nINSERT INTO num_exp_div VALUES (4,1,'NaN');\n--Testcase 169:\nINSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');\n--Testcase 170:\nINSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');\n--Testcase 171:\nINSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');\n--Testcase 172:\nINSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');\n--Testcase 173:\nINSERT INTO num_exp_add VALUES (4,3,'7799465.7219');\n--Testcase 174:\nINSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');\n--Testcase 175:\nINSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');\n--Testcase 176:\nINSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');\n--Testcase 177:\nINSERT INTO num_exp_add VALUES (4,4,'15598922.8238');\n--Testcase 178:\nINSERT INTO num_exp_sub VALUES (4,4,'0');\n--Testcase 179:\nINSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');\n--Testcase 180:\nINSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');\n--Testcase 181:\nINSERT INTO num_exp_add VALUES (4,5,'7815858.450391');\n--Testcase 182:\nINSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');\n--Testcase 183:\nINSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');\n--Testcase 184:\nINSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');\n--Testcase 185:\nINSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');\n--Testcase 186:\nINSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');\n--Testcase 187:\nINSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');\n--Testcase 188:\nINSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');\n--Testcase 189:\nINSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');\n--Testcase 190:\nINSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');\n--Testcase 191:\nINSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');\n--Testcase 192:\nINSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');\n--Testcase 193:\nINSERT INTO num_exp_add VALUES (4,8,'7874342.4119');\n--Testcase 194:\nINSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');\n--Testcase 195:\nINSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');\n--Testcase 196:\nINSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');\n--Testcase 197:\nINSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');\n--Testcase 198:\nINSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');\n--Testcase 199:\nINSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');\n--Testcase 200:\nINSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');\n--Testcase 201:\nINSERT INTO num_exp_add VALUES (5,0,'16397.038491');\n--Testcase 202:\nINSERT INTO num_exp_sub VALUES (5,0,'16397.038491');\n--Testcase 203:\nINSERT INTO num_exp_mul VALUES (5,0,'0');\n--Testcase 204:\nINSERT INTO num_exp_div VALUES (5,0,'NaN');\n--Testcase 205:\nINSERT INTO num_exp_add VALUES (5,1,'16397.038491');\n--Testcase 206:\nINSERT INTO num_exp_sub VALUES (5,1,'16397.038491');\n--Testcase 207:\nINSERT INTO num_exp_mul VALUES (5,1,'0');\n--Testcase 208:\nINSERT INTO num_exp_div VALUES (5,1,'NaN');\n--Testcase 209:\nINSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');\n--Testcase 210:\nINSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');\n--Testcase 211:\nINSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');\n--Testcase 212:\nINSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');\n--Testcase 213:\nINSERT INTO num_exp_add VALUES (5,3,'16401.348491');\n--Testcase 214:\nINSERT INTO num_exp_sub VALUES (5,3,'16392.728491');\n--Testcase 215:\nINSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');\n--Testcase 216:\nINSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');\n--Testcase 217:\nINSERT INTO num_exp_add VALUES (5,4,'7815858.450391');\n--Testcase 218:\nINSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');\n--Testcase 219:\nINSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');\n--Testcase 220:\nINSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');\n--Testcase 221:\nINSERT INTO num_exp_add VALUES (5,5,'32794.076982');\n--Testcase 222:\nINSERT INTO num_exp_sub VALUES (5,5,'0');\n--Testcase 223:\nINSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');\n--Testcase 224:\nINSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');\n--Testcase 225:\nINSERT INTO num_exp_add VALUES (5,6,'110298.61612126');\n--Testcase 226:\nINSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');\n--Testcase 227:\nINSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');\n--Testcase 228:\nINSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');\n--Testcase 229:\nINSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');\n--Testcase 230:\nINSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');\n--Testcase 231:\nINSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');\n--Testcase 232:\nINSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');\n--Testcase 233:\nINSERT INTO num_exp_add VALUES (5,8,'91278.038491');\n--Testcase 234:\nINSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');\n--Testcase 235:\nINSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');\n--Testcase 236:\nINSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');\n--Testcase 237:\nINSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');\n--Testcase 238:\nINSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');\n--Testcase 239:\nINSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');\n--Testcase 240:\nINSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');\n--Testcase 241:\nINSERT INTO num_exp_add VALUES (6,0,'93901.57763026');\n--Testcase 242:\nINSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');\n--Testcase 243:\nINSERT INTO num_exp_mul VALUES (6,0,'0');\n--Testcase 244:\nINSERT INTO num_exp_div VALUES (6,0,'NaN');\n--Testcase 245:\nINSERT INTO num_exp_add VALUES (6,1,'93901.57763026');\n--Testcase 246:\nINSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');\n--Testcase 247:\nINSERT INTO num_exp_mul VALUES (6,1,'0');\n--Testcase 248:\nINSERT INTO num_exp_div VALUES (6,1,'NaN');\n--Testcase 249:\nINSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');\n--Testcase 250:\nINSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');\n--Testcase 251:\nINSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');\n--Testcase 252:\nINSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');\n--Testcase 253:\nINSERT INTO num_exp_add VALUES (6,3,'93905.88763026');\n--Testcase 254:\nINSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');\n--Testcase 255:\nINSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');\n--Testcase 256:\nINSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');\n--Testcase 257:\nINSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');\n--Testcase 258:\nINSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');\n--Testcase 259:\nINSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');\n--Testcase 260:\nINSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');\n--Testcase 261:\nINSERT INTO num_exp_add VALUES (6,5,'110298.61612126');\n--Testcase 262:\nINSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');\n--Testcase 263:\nINSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');\n--Testcase 264:\nINSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');\n--Testcase 265:\nINSERT INTO num_exp_add VALUES (6,6,'187803.15526052');\n--Testcase 266:\nINSERT INTO num_exp_sub VALUES (6,6,'0');\n--Testcase 267:\nINSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');\n--Testcase 268:\nINSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');\n--Testcase 269:\nINSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');\n--Testcase 270:\nINSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');\n--Testcase 271:\nINSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');\n--Testcase 272:\nINSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');\n--Testcase 273:\nINSERT INTO num_exp_add VALUES (6,8,'168782.57763026');\n--Testcase 274:\nINSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');\n--Testcase 275:\nINSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');\n--Testcase 276:\nINSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');\n--Testcase 277:\nINSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');\n--Testcase 278:\nINSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');\n--Testcase 279:\nINSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');\n--Testcase 280:\nINSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');\n--Testcase 281:\nINSERT INTO num_exp_add VALUES (7,0,'-83028485');\n--Testcase 282:\nINSERT INTO num_exp_sub VALUES (7,0,'-83028485');\n--Testcase 283:\nINSERT INTO num_exp_mul VALUES (7,0,'0');\n--Testcase 284:\nINSERT INTO num_exp_div VALUES (7,0,'NaN');\n--Testcase 285:\nINSERT INTO num_exp_add VALUES (7,1,'-83028485');\n--Testcase 286:\nINSERT INTO num_exp_sub VALUES (7,1,'-83028485');\n--Testcase 287:\nINSERT INTO num_exp_mul VALUES (7,1,'0');\n--Testcase 288:\nINSERT INTO num_exp_div VALUES (7,1,'NaN');\n--Testcase 289:\nINSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');\n--Testcase 290:\nINSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');\n--Testcase 291:\nINSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');\n--Testcase 292:\nINSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');\n--Testcase 293:\nINSERT INTO num_exp_add VALUES (7,3,'-83028480.69');\n--Testcase 294:\nINSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');\n--Testcase 295:\nINSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');\n--Testcase 296:\nINSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');\n--Testcase 297:\nINSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');\n--Testcase 298:\nINSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');\n--Testcase 299:\nINSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');\n--Testcase 300:\nINSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');\n--Testcase 301:\nINSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');\n--Testcase 302:\nINSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');\n--Testcase 303:\nINSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');\n--Testcase 304:\nINSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');\n--Testcase 305:\nINSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');\n--Testcase 306:\nINSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');\n--Testcase 307:\nINSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');\n--Testcase 308:\nINSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');\n--Testcase 309:\nINSERT INTO num_exp_add VALUES (7,7,'-166056970');\n--Testcase 310:\nINSERT INTO num_exp_sub VALUES (7,7,'0');\n--Testcase 311:\nINSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');\n--Testcase 312:\nINSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');\n--Testcase 313:\nINSERT INTO num_exp_add VALUES (7,8,'-82953604');\n--Testcase 314:\nINSERT INTO num_exp_sub VALUES (7,8,'-83103366');\n--Testcase 315:\nINSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');\n--Testcase 316:\nINSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');\n--Testcase 317:\nINSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');\n--Testcase 318:\nINSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');\n--Testcase 319:\nINSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');\n--Testcase 320:\nINSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');\n--Testcase 321:\nINSERT INTO num_exp_add VALUES (8,0,'74881');\n--Testcase 322:\nINSERT INTO num_exp_sub VALUES (8,0,'74881');\n--Testcase 323:\nINSERT INTO num_exp_mul VALUES (8,0,'0');\n--Testcase 324:\nINSERT INTO num_exp_div VALUES (8,0,'NaN');\n--Testcase 325:\nINSERT INTO num_exp_add VALUES (8,1,'74881');\n--Testcase 326:\nINSERT INTO num_exp_sub VALUES (8,1,'74881');\n--Testcase 327:\nINSERT INTO num_exp_mul VALUES (8,1,'0');\n--Testcase 328:\nINSERT INTO num_exp_div VALUES (8,1,'NaN');\n--Testcase 329:\nINSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');\n--Testcase 330:\nINSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');\n--Testcase 331:\nINSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');\n--Testcase 332:\nINSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');\n--Testcase 333:\nINSERT INTO num_exp_add VALUES (8,3,'74885.31');\n--Testcase 334:\nINSERT INTO num_exp_sub VALUES (8,3,'74876.69');\n--Testcase 335:\nINSERT INTO num_exp_mul VALUES (8,3,'322737.11');\n--Testcase 336:\nINSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');\n--Testcase 337:\nINSERT INTO num_exp_add VALUES (8,4,'7874342.4119');\n--Testcase 338:\nINSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');\n--Testcase 339:\nINSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');\n--Testcase 340:\nINSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');\n--Testcase 341:\nINSERT INTO num_exp_add VALUES (8,5,'91278.038491');\n--Testcase 342:\nINSERT INTO num_exp_sub VALUES (8,5,'58483.961509');\n--Testcase 343:\nINSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');\n--Testcase 344:\nINSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');\n--Testcase 345:\nINSERT INTO num_exp_add VALUES (8,6,'168782.57763026');\n--Testcase 346:\nINSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');\n--Testcase 347:\nINSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');\n--Testcase 348:\nINSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');\n--Testcase 349:\nINSERT INTO num_exp_add VALUES (8,7,'-82953604');\n--Testcase 350:\nINSERT INTO num_exp_sub VALUES (8,7,'83103366');\n--Testcase 351:\nINSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');\n--Testcase 352:\nINSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');\n--Testcase 353:\nINSERT INTO num_exp_add VALUES (8,8,'149762');\n--Testcase 354:\nINSERT INTO num_exp_sub VALUES (8,8,'0');\n--Testcase 355:\nINSERT INTO num_exp_mul VALUES (8,8,'5607164161');\n--Testcase 356:\nINSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');\n--Testcase 357:\nINSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');\n--Testcase 358:\nINSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');\n--Testcase 359:\nINSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');\n--Testcase 360:\nINSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');\n--Testcase 361:\nINSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');\n--Testcase 362:\nINSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');\n--Testcase 363:\nINSERT INTO num_exp_mul VALUES (9,0,'0');\n--Testcase 364:\nINSERT INTO num_exp_div VALUES (9,0,'NaN');\n--Testcase 365:\nINSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');\n--Testcase 366:\nINSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');\n--Testcase 367:\nINSERT INTO num_exp_mul VALUES (9,1,'0');\n--Testcase 368:\nINSERT INTO num_exp_div VALUES (9,1,'NaN');\n--Testcase 369:\nINSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');\n--Testcase 370:\nINSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');\n--Testcase 371:\nINSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');\n--Testcase 372:\nINSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');\n--Testcase 373:\nINSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');\n--Testcase 374:\nINSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');\n--Testcase 375:\nINSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');\n--Testcase 376:\nINSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');\n--Testcase 377:\nINSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');\n--Testcase 378:\nINSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');\n--Testcase 379:\nINSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');\n--Testcase 380:\nINSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');\n--Testcase 381:\nINSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');\n--Testcase 382:\nINSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');\n--Testcase 383:\nINSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');\n--Testcase 384:\nINSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');\n--Testcase 385:\nINSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');\n--Testcase 386:\nINSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');\n--Testcase 387:\nINSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');\n--Testcase 388:\nINSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');\n--Testcase 389:\nINSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');\n--Testcase 390:\nINSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');\n--Testcase 391:\nINSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');\n--Testcase 392:\nINSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');\n--Testcase 393:\nINSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');\n--Testcase 394:\nINSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');\n--Testcase 395:\nINSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');\n--Testcase 396:\nINSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');\n--Testcase 397:\nINSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');\n--Testcase 398:\nINSERT INTO num_exp_sub VALUES (9,9,'0');\n--Testcase 399:\nINSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');\n--Testcase 400:\nINSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 401:\nINSERT INTO num_exp_sqrt VALUES (0,'0');\n--Testcase 402:\nINSERT INTO num_exp_sqrt VALUES (1,'0');\n--Testcase 403:\nINSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');\n--Testcase 404:\nINSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');\n--Testcase 405:\nINSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');\n--Testcase 406:\nINSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');\n--Testcase 407:\nINSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');\n--Testcase 408:\nINSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');\n--Testcase 409:\nINSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');\n--Testcase 410:\nINSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 411:\nINSERT INTO num_exp_ln VALUES (0,'NaN');\n--Testcase 412:\nINSERT INTO num_exp_ln VALUES (1,'NaN');\n--Testcase 413:\nINSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');\n--Testcase 414:\nINSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');\n--Testcase 415:\nINSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');\n--Testcase 416:\nINSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');\n--Testcase 417:\nINSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');\n--Testcase 418:\nINSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');\n--Testcase 419:\nINSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');\n--Testcase 420:\nINSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 421:\nINSERT INTO num_exp_log10 VALUES (0,'NaN');\n--Testcase 422:\nINSERT INTO num_exp_log10 VALUES (1,'NaN');\n--Testcase 423:\nINSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');\n--Testcase 424:\nINSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');\n--Testcase 425:\nINSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');\n--Testcase 426:\nINSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');\n--Testcase 427:\nINSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');\n--Testcase 428:\nINSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');\n--Testcase 429:\nINSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');\n--Testcase 430:\nINSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 431:\nINSERT INTO num_exp_power_10_ln VALUES (0,'NaN');\n--Testcase 432:\nINSERT INTO num_exp_power_10_ln VALUES (1,'NaN');\n--Testcase 433:\nINSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');\n--Testcase 434:\nINSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');\n--Testcase 435:\nINSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');\n--Testcase 436:\nINSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');\n--Testcase 437:\nINSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');\n--Testcase 438:\nINSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');\n--Testcase 439:\nINSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');\n--Testcase 440:\nINSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');\nCOMMIT TRANSACTION;\nBEGIN TRANSACTION;\n--Testcase 441:\nINSERT INTO num_data VALUES (0, '0');\n--Testcase 442:\nINSERT INTO num_data VALUES (1, '0');\n--Testcase 443:\nINSERT INTO num_data VALUES (2, '-34338492.215397047');\n--Testcase 444:\nINSERT INTO num_data VALUES (3, '4.31');\n--Testcase 445:\nINSERT INTO num_data VALUES (4, '7799461.4119');\n--Testcase 446:\nINSERT INTO num_data VALUES (5, '16397.038491');\n--Testcase 447:\nINSERT INTO num_data VALUES (6, '93901.57763026');\n--Testcase 448:\nINSERT INTO num_data VALUES (7, '-83028485');\n--Testcase 449:\nINSERT INTO num_data VALUES (8, '74881');\n--Testcase 450:\nINSERT INTO num_data VALUES (9, '-24926804.045047420');\n\nCOMMIT TRANSACTION;\n\n-- ******************************\n-- * Create indices for faster checks\n-- ******************************\n-- Skip these setting, creating foreign table with primary key already covered.\n--CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);\n--CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);\n--CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);\n--CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);\n--CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);\n--CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);\n--CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);\n--VACUUM ANALYZE num_exp_add;\n--VACUUM ANALYZE num_exp_sub;\n--VACUUM ANALYZE num_exp_div;\n--VACUUM ANALYZE num_exp_mul;\n--VACUUM ANALYZE num_exp_sqrt;\n--VACUUM ANALYZE num_exp_ln;\n--VACUUM ANALYZE num_exp_log10;\n--VACUUM ANALYZE num_exp_power_10_ln;\n\n-- ******************************\n-- * Now check the behaviour of the NUMERIC type\n-- ******************************\n\n-- ******************************\n-- * Addition check\n-- ******************************\n\n--Testcase 451:\nDELETE FROM num_result;\n--Testcase 452:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 453:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 454:\nDELETE FROM num_result;\n--Testcase 455:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)\n    FROM num_data t1, num_data t2;\n--Testcase 456:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected\n    FROM num_result t1, num_exp_add t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 10);\n\n-- ******************************\n-- * Subtraction check\n-- ******************************\n--Testcase 457:\nDELETE FROM num_result;\n--Testcase 458:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 459:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 460:\nDELETE FROM num_result;\n--Testcase 461:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)\n    FROM num_data t1, num_data t2;\n--Testcase 462:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)\n    FROM num_result t1, num_exp_sub t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 40);\n\n-- ******************************\n-- * Multiply check\n-- ******************************\n--Testcase 463:\nDELETE FROM num_result;\n--Testcase 464:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val\n    FROM num_data t1, num_data t2;\n--Testcase 465:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 466:\nDELETE FROM num_result;\n--Testcase 467:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)\n    FROM num_data t1, num_data t2;\n--Testcase 468:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected\n    FROM num_result t1, num_exp_mul t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 30);\n\n-- ******************************\n-- * Division check\n-- ******************************\n--Testcase 469:\nDELETE FROM num_result;\n--Testcase 470:\nINSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 471:\nSELECT t1.id1, t1.id2, t1.result, t2.expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != t2.expected;\n\n--Testcase 472:\nDELETE FROM num_result;\n--Testcase 473:\nINSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)\n    FROM num_data t1, num_data t2\n    WHERE t2.val != '0.0';\n--Testcase 474:\nSELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected\n    FROM num_result t1, num_exp_div t2\n    WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2\n    AND t1.result != round(t2.expected, 80);\n\n-- ******************************\n-- * Square root check\n-- ******************************\n--Testcase 475:\nDELETE FROM num_result;\n--Testcase 476:\nINSERT INTO num_result SELECT id, 0, SQRT(ABS(val))\n    FROM num_data;\n--Testcase 477:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_sqrt t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Natural logarithm check\n-- ******************************\n--Testcase 478:\nDELETE FROM num_result;\n--Testcase 479:\nINSERT INTO num_result SELECT id, 0, LN(ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 480:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Logarithm base 10 check\n-- ******************************\n--Testcase 481:\nDELETE FROM num_result;\n--Testcase 482:\nINSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 483:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_log10 t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * POWER(10, LN(value)) check\n-- ******************************\n--Testcase 484:\nDELETE FROM num_result;\n--Testcase 485:\nINSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))\n    FROM num_data\n    WHERE val != '0.0';\n--Testcase 486:\nSELECT t1.id1, t1.result, t2.expected\n    FROM num_result t1, num_exp_power_10_ln t2\n    WHERE t1.id1 = t2.id\n    AND t1.result != t2.expected;\n\n-- ******************************\n-- * Check behavior with Inf and NaN inputs.  It's easiest to handle these\n-- * separately from the num_data framework used above, because some input\n-- * combinations will throw errors.\n-- ******************************\n--Testcase 1451:\nCREATE FOREIGN TABLE v (id int4 OPTIONS (key 'true'), x numeric, val float8) SERVER sqlite_svr;\n\nBEGIN;\n--Testcase 1452:\nDELETE FROM v;\n--Testcase 1453:\nINSERT INTO v(x) VALUES ('0'::float8),('1'),('-1'),('4.2'),('inf'),('-inf'),('nan');\n--Testcase 1454:\nSELECT x1, x2,\n  x1::numeric + x2::numeric AS sum,\n  x1::numeric - x2::numeric AS diff,\n  x1::numeric * x2::numeric AS prod\nFROM v AS v1(id, x1), v AS v2(id, x2);\n\n--Testcase 1455:\nSELECT x1, x2,\n  x1::numeric / x2::numeric AS quot,\n  x1::numeric % x2::numeric AS mod,\n  div(x1::numeric, x2::numeric) AS div\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x2 != 0;\nROLLBACK;\n\nBEGIN;\n--Testcase 1286:\nDELETE FROM v;\n--Testcase 1287:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1288:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1289:\nDELETE FROM v;\n--Testcase 1290:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1291:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1292:\nDELETE FROM v;\n--Testcase 1293:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1294:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1295:\nDELETE FROM v;\n--Testcase 1296:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1297:\nSELECT x::numeric / '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1298:\nDELETE FROM v;\n--Testcase 1299:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1300:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1301:\nDELETE FROM v;\n--Testcase 1302:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1303:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1304:\nDELETE FROM v;\n--Testcase 1305:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1306:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1307:\nDELETE FROM v;\n--Testcase 1308:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1309:\nSELECT x::numeric % '0' FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1310:\nDELETE FROM v;\n--Testcase 1311:\nINSERT INTO v(x) VALUES ('inf':: float8);\n--Testcase 1312:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1313:\nDELETE FROM v;\n--Testcase 1314:\nINSERT INTO v(x) VALUES ('-inf':: float8);\n--Testcase 1315:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1316:\nDELETE FROM v;\n--Testcase 1317:\nINSERT INTO v(x) VALUES ('nan':: float8);\n--Testcase 1318:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1319:\nDELETE FROM v;\n--Testcase 1320:\nINSERT INTO v(x) VALUES ('0':: float8);\n--Testcase 1321:\nSELECT div(x::numeric, '0') FROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1456:\nDELETE FROM v;\n--Testcase 1457:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1458:\nSELECT x, -x as minusx, abs(x::numeric), floor(x::numeric), ceil(x::numeric), sign(x::numeric), numeric_inc(x::numeric) as inc\nFROM v;\nROLLBACK;\n\nBEGIN;\n--Testcase 1459:\nDELETE FROM v;\n--Testcase 1460:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),('inf'),('-inf'),('nan');\n--Testcase 1461:\nSELECT x, round(x::numeric), round(x::numeric,1) as round1, trunc(x::numeric), trunc(x::numeric,1) as trunc1\nFROM v;\nROLLBACK;\n\n-- the large values fall into the numeric abbreviation code's maximal classes\nBEGIN;\n--Testcase 1462:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('-1'),('4.2'),('-7.777'),\n                        ('inf'),('-inf'),('nan'),\n                        ('inf'),('-inf'),('nan');\n--Testcase 1463:\nSELECT substring(x::text, 1, 32) FROM v ORDER BY x;\nROLLBACK;\n\n--Testcase 1464:\nDELETE FROM v;\n--Testcase 1465:\nINSERT INTO v(x) VALUES('0'::numeric),('1'),('4.2'),('inf'),('nan');\n--Testcase 1466:\nSELECT x, sqrt(x) FROM v;\n\n--Testcase 1333:\nDELETE FROM v;\n--Testcase 1334:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1335:\nSELECT sqrt(x::numeric) FROM v;\n--Testcase 1336:\nDELETE FROM v;\n--Testcase 1337:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1338:\nSELECT sqrt(x::numeric) FROM v;\n\n--Testcase 1467:\nDELETE FROM v;\n--Testcase 1468:\nINSERT INTO v(x) VALUES ('1'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1469:\nSELECT x,\n  log(x::numeric),\n  log10(x::numeric),\n  ln(x::numeric)\nFROM v;\n\n--Testcase 1342:\nDELETE FROM v;\n--Testcase 1343:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1344:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1345:\nDELETE FROM v;\n--Testcase 1346:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1347:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1348:\nDELETE FROM v;\n--Testcase 1349:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1350:\nSELECT ln(x::numeric) FROM v;\n--Testcase 1470:\nDELETE FROM v;\n--Testcase 1471:\nINSERT INTO v(x) VALUES ('2'::numeric),('4.2'),('inf'),('nan');\n--Testcase 1472:\nSELECT x1, x2,\n  log(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2);\n--Testcase 1354:\nDELETE FROM v;\n--Testcase 1355:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1356:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1357:\nDELETE FROM v;\n--Testcase 1358:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1359:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1360:\nDELETE FROM v;\n--Testcase 1361:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1362:\nSELECT log(x::numeric, '10') FROM v;\n--Testcase 1363:\nDELETE FROM v;\n--Testcase 1364:\nINSERT INTO v(x) VALUES ('10'::float8);\n--Testcase 1365:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1366:\nDELETE FROM v;\n--Testcase 1367:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1368:\nSELECT log(x::numeric, '0') FROM v;\n--Testcase 1369:\nDELETE FROM v;\n--Testcase 1370:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1371:\nSELECT log(x::numeric, '-inf') FROM v;\n--Testcase 1372:\nDELETE FROM v;\n--Testcase 1373:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1374:\nSELECT log(x::numeric, 'inf') FROM v;\n\n--Testcase 1473:\nDELETE FROM v;\n--Testcase 1474:\nINSERT INTO v(x) VALUES ('0'::numeric),('1'),('2'),('4.2'),('inf'),('nan');\n--Testcase 1475:\nSELECT x1, x2,\n  power(x1::numeric, x2::numeric)\nFROM v AS v1(id, x1), v AS v2(id, x2) WHERE x1 != 0 OR x2 >= 0;\n\n--Testcase 1378:\nDELETE FROM v;\n--Testcase 1379:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1380:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1381:\nDELETE FROM v;\n--Testcase 1382:\nINSERT INTO v(x) VALUES ('0'::float8);\n--Testcase 1383:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1384:\nDELETE FROM v;\n--Testcase 1385:\nINSERT INTO v(x) VALUES ('-1'::float8);\n--Testcase 1386:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1387:\nDELETE FROM v;\n--Testcase 1388:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1389:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1390:\nDELETE FROM v;\n--Testcase 1391:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1392:\nSELECT power(x::numeric, '3.3') FROM v;\n--Testcase 1393:\nDELETE FROM v;\n--Testcase 1394:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1395:\nSELECT power(x::numeric, '-1') FROM v;\n--Testcase 1396:\nDELETE FROM v;\n--Testcase 1397:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1398:\nSELECT power(x::numeric, '-1.5') FROM v;\n--Testcase 1399:\nDELETE FROM v;\n--Testcase 1400:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1401:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1402:\nDELETE FROM v;\n--Testcase 1403:\nINSERT INTO v(x) VALUES ('-2'::float8);\n--Testcase 1404:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1405:\nDELETE FROM v;\n--Testcase 1406:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1407:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1408:\nDELETE FROM v;\n--Testcase 1409:\nINSERT INTO v(x) VALUES ('inf'::float8);\n--Testcase 1410:\nSELECT power(x::numeric, '-inf') FROM v;\n--Testcase 1411:\nDELETE FROM v;\n--Testcase 1412:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1413:\nSELECT power(x::numeric, '2') FROM v;\n--Testcase 1414:\nDELETE FROM v;\n--Testcase 1415:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1416:\nSELECT power(x::numeric, '3') FROM v;\n--Testcase 1417:\nDELETE FROM v;\n--Testcase 1418:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1419:\nSELECT power(x::numeric, '4.5') FROM v;\n--Testcase 1420:\nDELETE FROM v;\n--Testcase 1421:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1422:\nSELECT power(x::numeric, '-2') FROM v;\n--Testcase 1423:\nDELETE FROM v;\n--Testcase 1424:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1425:\nSELECT power(x::numeric, '-3') FROM v;\n--Testcase 1426:\nDELETE FROM v;\n--Testcase 1427:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1428:\nSELECT power(x::numeric, '0') FROM v;\n--Testcase 1429:\nDELETE FROM v;\n--Testcase 1430:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1431:\nSELECT power(x::numeric, 'inf') FROM v;\n--Testcase 1432:\nDELETE FROM v;\n--Testcase 1433:\nINSERT INTO v(x) VALUES ('-inf'::float8);\n--Testcase 1434:\nSELECT power(x::numeric, '-inf') FROM v;\n\n-- ******************************\n-- * miscellaneous checks for things that have been broken in the past...\n-- ******************************\n-- numeric AVG used to fail on some platforms\n--Testcase 487:\nSELECT AVG(val) FROM num_data;\n--Testcase 1137:\nSELECT MAX(val) FROM num_data;\n--Testcase 1138:\nSELECT MIN(val) FROM num_data;\n--Testcase 488:\nSELECT STDDEV(val) FROM num_data;\n--Testcase 489:\nSELECT VARIANCE(val) FROM num_data;\n\n-- Check for appropriate rounding and overflow\n--Testcase 579:\nCREATE FOREIGN TABLE fract_only (id int, val numeric(4,4)) SERVER sqlite_svr;\n--Testcase 490:\nINSERT INTO fract_only VALUES (1, '0.0');\n--Testcase 491:\nINSERT INTO fract_only VALUES (2, '0.1');\n--Testcase 492:\nINSERT INTO fract_only VALUES (3, '1.0');\t-- should fail\n--Testcase 493:\nINSERT INTO fract_only VALUES (4, '-0.9999');\n--Testcase 494:\nINSERT INTO fract_only VALUES (5, '0.99994');\n--Testcase 495:\nINSERT INTO fract_only VALUES (6, '0.99995');  -- should fail\n--Testcase 496:\nINSERT INTO fract_only VALUES (7, '0.00001');\n--Testcase 497:\nINSERT INTO fract_only VALUES (8, '0.00017');\n--Testcase 1139:\nINSERT INTO fract_only VALUES (9, 'NaN');\n--Testcase 1140:\nINSERT INTO fract_only VALUES (10, 'Inf');\t-- should fail\n--Testcase 1141:\nINSERT INTO fract_only VALUES (11, '-Inf');\t-- should fail\n--Testcase 498:\nSELECT * FROM fract_only;\n--Testcase 580:\nDROP FOREIGN TABLE fract_only;\n\n-- Check conversion to integers\n-- SQLite promises to preserve the first 15 significant decimal digits of the floating point value.\n-- However, it makes no guarantees about the accuracy of computations on floating point values, as no such guarantees are possible.\n-- A floating-point value as written in an SQL statement may not be the same as the value represented internally.\n-- Actual result is different from expected result.\n--Testcase 1485:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n\n--Testcase 1486:\nDELETE FROM num_tmp;\n--Testcase 1487:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.5);\n--Testcase 1488:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1489:\nDELETE FROM num_tmp;\n--Testcase 1490:\nINSERT INTO num_tmp(n1) VALUES (-9223372036854775808.4);\n--Testcase 1491:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1492:\nDELETE FROM num_tmp;\n--Testcase 1493:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.4);\n--Testcase 1494:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1495:\nDELETE FROM num_tmp;\n--Testcase 1496:\nINSERT INTO num_tmp(n1) VALUES (9223372036854775807.5);\n--Testcase 1497:\nSELECT n1::int8 FROM num_tmp; -- should fail\n\n--Testcase 1498:\nDELETE FROM num_tmp;\n--Testcase 1499:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.5);\n--Testcase 1500:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1501:\nDELETE FROM num_tmp;\n--Testcase 1502:\nINSERT INTO num_tmp(n1) VALUES (-2147483648.4);\n--Testcase 1503:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1504:\nDELETE FROM num_tmp;\n--Testcase 1505:\nINSERT INTO num_tmp(n1) VALUES (2147483647.4);\n--Testcase 1506:\nSELECT n1::int4 FROM num_tmp; -- ok\n\n--Testcase 1507:\nDELETE FROM num_tmp;\n--Testcase 1508:\nINSERT INTO num_tmp(n1) VALUES (2147483647.5);\n--Testcase 1509:\nSELECT n1::int4 FROM num_tmp; -- should fail\n\n--Testcase 1510:\nDELETE FROM num_tmp;\n--Testcase 1511:\nINSERT INTO num_tmp(n1) VALUES (-32768.5);\n--Testcase 1512:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1513:\nDELETE FROM num_tmp;\n--Testcase 1514:\nINSERT INTO num_tmp(n1) VALUES (-32768.4);\n--Testcase 1515:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1516:\nDELETE FROM num_tmp;\n--Testcase 1517:\nINSERT INTO num_tmp(n1) VALUES (32767.4);\n--Testcase 1518:\nSELECT n1::int2 FROM num_tmp; -- ok\n\n--Testcase 1519:\nDELETE FROM num_tmp;\n--Testcase 1520:\nINSERT INTO num_tmp(n1) VALUES (32767.5);\n--Testcase 1521:\nSELECT n1::int2 FROM num_tmp; -- should fail\n\n--Testcase 1555:\nDELETE FROM num_tmp;\n--Testcase 1555:\nDROP FOREIGN TABLE num_tmp;\n\n-- Check inf/nan conversion behavior\n--Testcase 581:\nCREATE FOREIGN TABLE FLOAT8_TMP(f1 float8, f2 float8, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 582:\nDELETE FROM FLOAT8_TMP;\n--Testcase 583:\nINSERT INTO FLOAT8_TMP VALUES ('NaN');\n--Testcase 584:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 585:\nDELETE FROM FLOAT8_TMP;\n--Testcase 586:\nINSERT INTO FLOAT8_TMP VALUES ('Infinity');\n--Testcase 587:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 588:\nDELETE FROM FLOAT8_TMP;\n--Testcase 589:\nINSERT INTO FLOAT8_TMP VALUES ('-Infinity');\n--Testcase 590:\nSELECT f1::numeric FROM FLOAT8_TMP;\n\n--Testcase 1142:\nCREATE FOREIGN TABLE NUMERIC_TMP(f1 numeric, f2 numeric, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 1143:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1144:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1145:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1146:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1147:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1148:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 1149:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1150:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1151:\nSELECT f1::float8 FROM NUMERIC_TMP;\n\n--Testcase 591:\nCREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 592:\nDELETE FROM FLOAT4_TMP;\n--Testcase 593:\nINSERT INTO FLOAT4_TMP VALUES ('NaN');\n--Testcase 594:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 595:\nDELETE FROM FLOAT4_TMP;\n--Testcase 596:\nINSERT INTO FLOAT4_TMP VALUES ('Infinity');\n--Testcase 597:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 598:\nDELETE FROM FLOAT4_TMP;\n--Testcase 599:\nINSERT INTO FLOAT4_TMP VALUES ('-Infinity');\n--Testcase 600:\nSELECT f1::numeric FROM FLOAT4_TMP;\n\n--Testcase 1152:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1153:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1154:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1155:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1156:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1157:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1158:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1159:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1160:\nSELECT f1::float4 FROM NUMERIC_TMP;\n\n--Testcase 1161:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1162:\nINSERT INTO NUMERIC_TMP VALUES ('42'::int2);\n--Testcase 1163:\nSELECT f1::numeric FROM NUMERIC_TMP;\n\n--Testcase 1164:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1165:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1166:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1167:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1168:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1169:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1170:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1171:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1172:\nSELECT f1::int2 FROM NUMERIC_TMP;\n\n--Testcase 1173:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1174:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1175:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1176:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1177:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1178:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1179:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1180:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1181:\nSELECT f1::int4 FROM NUMERIC_TMP;\n\n--Testcase 1182:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1183:\nINSERT INTO NUMERIC_TMP VALUES ('NaN');\n--Testcase 1184:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1185:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1186:\nINSERT INTO NUMERIC_TMP VALUES ('Infinity');\n--Testcase 1187:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n--Testcase 1188:\nDELETE FROM NUMERIC_TMP;\n--Testcase 1189:\nINSERT INTO NUMERIC_TMP VALUES ('-Infinity');\n--Testcase 1190:\nSELECT f1::int8 FROM NUMERIC_TMP;\n\n-- Simple check that ceil(), floor(), and round() work correctly\n--Testcase 601:\nCREATE FOREIGN TABLE ceil_floor_round (a numeric OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 499:\nINSERT INTO ceil_floor_round VALUES ('-5.5');\n--Testcase 500:\nINSERT INTO ceil_floor_round VALUES ('-5.499999');\n--Testcase 501:\nINSERT INTO ceil_floor_round VALUES ('9.5');\n--Testcase 502:\nINSERT INTO ceil_floor_round VALUES ('9.4999999');\n--Testcase 503:\nINSERT INTO ceil_floor_round VALUES ('0.0');\n--Testcase 504:\nINSERT INTO ceil_floor_round VALUES ('0.0000001');\n--Testcase 505:\nINSERT INTO ceil_floor_round VALUES ('-0.000001');\n--Testcase 506:\nSELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round ORDER BY a;\n\n-- Check rounding, it should round ties away from zero.\n--Testcase 602:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 603:\nDELETE FROM INT4_TMP;\n--Testcase 604:\nINSERT INTO INT4_TMP SELECT a FROM generate_series(-5,5) a;\n--Testcase 605:\nSELECT f1 as pow,\n\tround((-2.5 * 10 ^ f1)::numeric, -f1),\n\tround((-1.5 * 10 ^ f1)::numeric, -f1),\n\tround((-0.5 * 10 ^ f1)::numeric, -f1),\n\tround((0.5 * 10 ^ f1)::numeric, -f1),\n\tround((1.5 * 10 ^ f1)::numeric, -f1),\n\tround((2.5 * 10 ^ f1)::numeric, -f1)\nFROM INT4_TMP;\n\n-- These cases contain out of range value for type double precision, cannot insert into foreign table.\n-- -- Check limits of rounding before the decimal point\n-- SELECT round(4.4e131071, -131071) = 4e131071;\n-- SELECT round(4.5e131071, -131071) = 5e131071;\n-- SELECT round(4.5e131071, -131072); -- loses all digits\n-- SELECT round(5.5e131071, -131072); -- rounds up and overflows\n-- SELECT round(5.5e131071, -131073); -- loses all digits\n-- SELECT round(5.5e131071, -1000000); -- loses all digits\n\n-- -- Check limits of rounding after the decimal point\n-- SELECT round(5e-16383, 1000000) = 5e-16383;\n-- SELECT round(5e-16383, 16383) = 5e-16383;\n-- SELECT round(5e-16383, 16382) = 1e-16382;\n-- SELECT round(5e-16383, 16381) = 0;\n\n-- -- Check limits of trunc() before the decimal point\n-- SELECT trunc(9.9e131071, -131071) = 9e131071;\n-- SELECT trunc(9.9e131071, -131072); -- loses all digits\n-- SELECT trunc(9.9e131071, -131073);  -- loses all digits\n-- SELECT trunc(9.9e131071, -1000000);  -- loses all digits\n\n-- -- Check limits of trunc() after the decimal point\n-- SELECT trunc(5e-16383, 1000000) = 5e-16383;\n-- SELECT trunc(5e-16383, 16383) = 5e-16383;\n-- SELECT trunc(5e-16383, 16382) = 0;\n\n-- Testing for width_bucket(). For convenience, we test both the\n-- numeric and float8 versions of the function in this file.\n-- errors\n--Testcase 606:\nCREATE FOREIGN TABLE width_bucket_tbl (\n\tid1 numeric,\n\tid2 numeric,\n\tid3 numeric,\n\tid4 int,\n\tid int OPTIONS (key 'true')\n) SERVER sqlite_svr;\n\n--Testcase 607:\nDELETE FROM width_bucket_tbl;\n--Testcase 608:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 609:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 610:\nDELETE FROM width_bucket_tbl;\n--Testcase 611:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 612:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 613:\nDELETE FROM width_bucket_tbl;\n--Testcase 614:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 615:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 616:\nDELETE FROM width_bucket_tbl;\n--Testcase 617:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, 0);\n--Testcase 618:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 619:\nDELETE FROM width_bucket_tbl;\n--Testcase 620:\nINSERT INTO width_bucket_tbl VALUES (5.0, 3.0, 4.0, -5);\n--Testcase 621:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 622:\nDELETE FROM width_bucket_tbl;\n--Testcase 623:\nINSERT INTO width_bucket_tbl VALUES (3.5, 3.0, 3.0, 888);\n--Testcase 624:\nSELECT width_bucket(id1::float8, id2::float8, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 625:\nDELETE FROM width_bucket_tbl;\n--Testcase 626:\nINSERT INTO width_bucket_tbl VALUES ('NaN'::numeric, 3.0, 4.0, 888);\n--Testcase 627:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 628:\nDELETE FROM width_bucket_tbl;\n--Testcase 629:\nINSERT INTO width_bucket_tbl VALUES (0, 'NaN'::numeric, 4.0, 888);\n--Testcase 630:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n--Testcase 1191:\nDELETE FROM width_bucket_tbl;\n--Testcase 1192:\nINSERT INTO width_bucket_tbl VALUES (2.0, 3.0, '-inf'::numeric, 888);\n--Testcase 1193:\nSELECT width_bucket(id1, id2, id3, id4) FROM width_bucket_tbl;\n\n--Testcase 1194:\nDELETE FROM width_bucket_tbl;\n--Testcase 1195:\nINSERT INTO width_bucket_tbl VALUES (0, '-inf'::numeric, 4.0 , 888);\n--Testcase 1196:\nSELECT width_bucket(id1::float8, id2, id3::float8, id4) FROM width_bucket_tbl;\n\n-- normal operation\n--Testcase 631:\nCREATE FOREIGN TABLE width_bucket_test (\n\toperand_num numeric OPTIONS (key 'true'),\n\toperand_f8 float8\n) SERVER sqlite_svr;\n\n--COPY width_bucket_test (operand_num) FROM stdin;\n--Testcase 507:\nINSERT INTO width_bucket_test (operand_num) VALUES\n(-5.2),\n(-0.0000000001),\n(0.000000000001),\n(1),\n(1.99999999999999),\n(2),\n(2.00000000000001),\n(3),\n(4),\n(4.5),\n(5),\n(5.5),\n(6),\n(7),\n(8),\n(9),\n(9.99999999999999),\n(10),\n(10.0000000000001);\n\n--Testcase 508:\nUPDATE width_bucket_test SET operand_f8 = operand_num::float8;\n\n--Testcase 509:\nSELECT\n    operand_num,\n    width_bucket(operand_num, 0, 10, 5) AS wb_1,\n    width_bucket(operand_f8, 0, 10, 5) AS wb_1f,\n    width_bucket(operand_num, 10, 0, 5) AS wb_2,\n    width_bucket(operand_f8, 10, 0, 5) AS wb_2f,\n    width_bucket(operand_num, 2, 8, 4) AS wb_3,\n    width_bucket(operand_f8, 2, 8, 4) AS wb_3f,\n    width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,\n    width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,\n    width_bucket(operand_num, -25, 25, 10) AS wb_5,\n    width_bucket(operand_f8, -25, 25, 10) AS wb_5f\n    FROM width_bucket_test;\n\n-- Check positive and negative infinity: we require\n-- finite bucket bounds, but allow an infinite operand\n--Testcase 1197:\nDELETE FROM width_bucket_tbl;\n--Testcase 1198:\nINSERT INTO width_bucket_tbl VALUES (0.0, 'Infinity'::numeric , 5, 10);\n--Testcase 1199:\nSELECT width_bucket(id1::numeric, 'Infinity'::numeric, id3, id4) FROM width_bucket_tbl; -- error\n--Testcase 1200:\nDELETE FROM width_bucket_tbl;\n--Testcase 1201:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, '-Infinity'::numeric, 20);\n--Testcase 1202:\nSELECT width_bucket(id1::numeric, id2, '-Infinity'::numeric, id4) FROM width_bucket_tbl; -- error\n--Testcase 1203:\nDELETE FROM width_bucket_tbl;\n--Testcase 1204:\nINSERT INTO width_bucket_tbl VALUES ('Infinity'::numeric, 1, 10, 10), ('-Infinity'::numeric, 1, 10, 10);\n--Testcase 1205:\nSELECT width_bucket(id1::numeric, id2, id3, id4) FROM width_bucket_tbl;\n--Testcase 510:\nDELETE FROM width_bucket_tbl;\n-- postgres does not support insert 'Infinity' and '-Infinity' as numeric.\n--Testcase 632:\nINSERT INTO width_bucket_tbl VALUES (0.0, 0.0, 5, 10);\n--Testcase 633:\nSELECT width_bucket(id1::float8, 'Infinity'::float8, id3, id4) FROM width_bucket_tbl;  -- error\n\n--Testcase 511:\nDELETE FROM width_bucket_tbl;\n--Testcase 634:\nINSERT INTO width_bucket_tbl VALUES (0.0, 5, 0.0, 20);\n--Testcase 635:\nSELECT width_bucket(id1::float8, id2, 'Infinity'::float8, id4) FROM width_bucket_tbl; -- error\n--Testcase 512:\nDELETE FROM width_bucket_tbl;\n--Testcase 636:\nINSERT INTO width_bucket_tbl VALUES (0.0, 1, 10, 10);\n--Testcase 637:\nSELECT width_bucket('Infinity'::float8, id2, id3, id4), width_bucket('-Infinity'::float8, id2, id3, id4) FROM width_bucket_tbl;\n\n-- Simple test for roundoff error when results should be exact\n--Testcase 1445:\nDELETE FROM width_bucket_tbl;\n--Testcase 1446:\nINSERT INTO width_bucket_tbl SELECT x, 10, 100, 9 FROM generate_series(0, 110, 10) x;\n--Testcase 1447:\nSELECT id1, width_bucket(id1::float8, id2, id3, id4) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\n--Testcase 1448:\nDELETE FROM width_bucket_tbl;\n--Testcase 1449:\nINSERT INTO width_bucket_tbl SELECT x, 100, 10, 9 FROM generate_series(0, 110, 10) x;       \n--Testcase 1450:\nSELECT id1, width_bucket(id1::float8, 100, 10, 9) as flt,\n       width_bucket(id1::numeric, id2, id3, id4) as num FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(0, -1e100::numeric, 1, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(0, -1e100::float8, 1, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(1, 1e100::numeric, 0, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\nDELETE FROM width_bucket_tbl;\nINSERT INTO width_bucket_tbl VALUES(1, 1e100::float8, 0, 10);\nSELECT width_bucket(id1, id2::numeric, id3, id4) FROM width_bucket_tbl;\n\n-- Check cases that could trigger overflow or underflow within the calculation\nSELECT oper, low, high, cnt, width_bucket(oper, low, high, cnt)\nFROM\n  (SELECT 1.797e+308::float8 AS big, 5e-324::float8 AS tiny) as v,\n  LATERAL (VALUES\n    (10.5::float8, -big, big, 1),\n    (10.5::float8, -big, big, 2),\n    (10.5::float8, -big, big, 3),\n    (big / 4, -big / 2, big / 2, 10),\n    (10.5::float8, big, -big, 1),\n    (10.5::float8, big, -big, 2),\n    (10.5::float8, big, -big, 3),\n    (big / 4, big / 2, -big / 2, 10),\n    (0, 0, tiny, 4),\n    (tiny, 0, tiny, 4),\n    (0, 0, 1, 2147483647),\n    (1, 1, 0, 2147483647)\n  ) as sample(oper, low, high, cnt);\n-- These fail because the result would be out of int32 range:\n-- Do not convert to check right.\nSELECT width_bucket(1::float8, 0, 1, 2147483647);\nSELECT width_bucket(0::float8, 1, 0, 2147483647);\n\n--Testcase 638:\nDROP FOREIGN TABLE width_bucket_test;\n\n-- TO_CHAR()\n--\n--Testcase 513:\nSELECT to_char(val, '9G999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 514:\nSELECT to_char(val, '9G999G999G999G999G999D999G999G999G999G999')\n\tFROM num_data;\n\n--Testcase 515:\nSELECT to_char(val, '9999999999999999.999999999999999PR')\n\tFROM num_data;\n\n--Testcase 516:\nSELECT to_char(val, '9999999999999999.999999999999999S')\n\tFROM num_data;\n\n--Testcase 517:\nSELECT to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;\n--Testcase 518:\nSELECT to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;\n--Testcase 519:\nSELECT to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;\n--Testcase 520:\nSELECT to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;\n--Testcase 521:\nSELECT to_char(val, '0999999999999999.999999999999999')       FROM num_data;\n--Testcase 522:\nSELECT to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;\n--Testcase 523:\nSELECT to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;\n--Testcase 524:\nSELECT to_char(val, 'FM9999999999999999.099999999999999') \tFROM num_data;\n--Testcase 525:\nSELECT to_char(val, 'FM9999999999990999.990999999999999') \tFROM num_data;\n--Testcase 526:\nSELECT to_char(val, 'FM0999999999999999.999909999999999') \tFROM num_data;\n--Testcase 527:\nSELECT to_char(val, 'FM9999999990999999.099999999999999') \tFROM num_data;\n--Testcase 528:\nSELECT to_char(val, 'L9999999999999999.099999999999999')\tFROM num_data;\n--Testcase 529:\nSELECT to_char(val, 'FM9999999999999999.99999999999999')\tFROM num_data;\n--Testcase 530:\nSELECT to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 531:\nSELECT to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;\n--Testcase 532:\nSELECT to_char(val, E'99999 \"text\" 9999 \"9999\" 999 \"\\\\\"text between quote marks\\\\\"\" 9999') FROM num_data;\n--Testcase 533:\nSELECT to_char(val, '999999SG9999999999')\t\t\tFROM num_data;\n--Testcase 534:\nSELECT to_char(val, 'FM9999999999999999.999999999999999')\tFROM num_data;\n--Testcase 535:\nSELECT to_char(val, '9.999EEEE')\t\t\t\tFROM num_data;\n\n--Testcase 1476:\nDELETE FROM v;\n--Testcase 1477:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1478:\nSELECT x,\n  to_char(x, '9.999EEEE') as numeric,\n  to_char(x::float8, '9.999EEEE') as float8,\n  to_char(x::float4, '9.999EEEE') as float4\nFROM v;\n\n--Testcase 1522:\nDELETE FROM v;\n--Testcase 1523:\nINSERT INTO v(x) VALUES (-16379),(-16378),(-1234),(-789),(-45),(-5),(-4),(-3),(-2),(-1),(0),\n                        (1),(2),(3),(4),(5),(38),(275),(2345),(45678),(131070),(131071);\n--Testcase 1524:\nSELECT x,\n  to_char(('1.2345e'||x)::numeric, '9.999EEEE') as numeric\nFROM v;\n\n--Testcase 1479:\nDELETE FROM v;\n--Testcase 1480:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1481:\nSELECT x,\n  to_char(x, 'MI9999999999.99') as numeric,\n  to_char(x::float8, 'MI9999999999.99') as float8,\n  to_char(x::float4, 'MI9999999999.99') as float4\nFROM v;\n\n--Testcase 1482:\nDELETE FROM v;\n--Testcase 1483:\nINSERT INTO v(x) VALUES ('0'::numeric),('-4.2'),('4.2e9'),('1.2e-5'),('inf'),('-inf'),('nan');\n--Testcase 1484:\nSELECT x,\n  to_char(x, 'MI99.99') as numeric,\n  to_char(x::float8, 'MI99.99') as float8,\n  to_char(x::float4, 'MI99.99') as float4\nFROM v;\n\n--Testcase 536:\nDELETE FROM ceil_floor_round;\n--Testcase 537:\nINSERT INTO ceil_floor_round VALUES ('100'::numeric);\n--Testcase 538:\nSELECT to_char(a, 'FM999.9') FROM ceil_floor_round;\n--Testcase 539:\nSELECT to_char(a, 'FM999.') FROM ceil_floor_round;\n--Testcase 540:\nSELECT to_char(a, 'FM999') FROM ceil_floor_round;\n\nCREATE FOREIGN TABLE ceil_round_float8(a float8) SERVER sqlite_svr;\nINSERT INTO ceil_round_float8 VALUES ('12345678901'::float8);\nSELECT to_char(a, 'FM9999999999D9999900000000000000000') FROM ceil_round_float8;\n\n-- Check parsing of literal text in a format string\n--Testcase 541:\nSELECT to_char(a, 'foo999') FROM ceil_floor_round;\n--Testcase 542:\nSELECT to_char(a, 'f\\oo999') FROM ceil_floor_round;\n--Testcase 543:\nSELECT to_char(a, 'f\\\\oo999') FROM ceil_floor_round;\n--Testcase 544:\nSELECT to_char(a, 'f\\\"oo999') FROM ceil_floor_round;\n--Testcase 545:\nSELECT to_char(a, 'f\\\\\"oo999') FROM ceil_floor_round;\n--Testcase 546:\nSELECT to_char(a, 'f\"ool\"999') FROM ceil_floor_round;\n--Testcase 547:\nSELECT to_char(a, 'f\"\\ool\"999') FROM ceil_floor_round;\n--Testcase 548:\nSELECT to_char(a, 'f\"\\\\ool\"999') FROM ceil_floor_round;\n--Testcase 549:\nSELECT to_char(a, 'f\"ool\\\"999') FROM ceil_floor_round;\n--Testcase 550:\nSELECT to_char(a, 'f\"ool\\\\\"999') FROM ceil_floor_round;\n\n-- TO_NUMBER()\n--\n--Testcase 639:\ncreate foreign table to_number_tbl (a text, id int options (key 'true')) server sqlite_svr;\n--Testcase 1211:\nSET lc_numeric = 'C';\n--Testcase 640:\nDELETE FROM to_number_tbl;\n--Testcase 641:\nINSERT INTO to_number_tbl VALUES ('-34,338,492');\n--Testcase 642:\nSELECT to_number(a, '99G999G999') FROM to_number_tbl;\n\n--Testcase 643:\nDELETE FROM to_number_tbl;\n--Testcase 644:\nINSERT INTO to_number_tbl VALUES ('-34,338,492.654,878');\n--Testcase 645:\nSELECT to_number(a, '99G999G999D999G999') FROM to_number_tbl;\n\n--Testcase 646:\nDELETE FROM to_number_tbl;\n--Testcase 647:\nINSERT INTO to_number_tbl VALUES ('<564646.654564>');\n--Testcase 648:\nSELECT to_number(a, '999999.999999PR') FROM to_number_tbl;\n\n--Testcase 649:\nDELETE FROM to_number_tbl;\n--Testcase 650:\nINSERT INTO to_number_tbl VALUES ('0.00001-');\n--Testcase 651:\nSELECT to_number(a, '9.999999S') FROM to_number_tbl;\n\n--Testcase 652:\nDELETE FROM to_number_tbl;\n--Testcase 653:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 654:\nSELECT to_number(a, 'FM9.999999S') FROM to_number_tbl;\n\n--Testcase 655:\nDELETE FROM to_number_tbl;\n--Testcase 656:\nINSERT INTO to_number_tbl VALUES ('5.01-');\n--Testcase 657:\nSELECT to_number(a, 'FM9.999999MI') FROM to_number_tbl;\n\n--Testcase 658:\nDELETE FROM to_number_tbl;\n--Testcase 659:\nINSERT INTO to_number_tbl VALUES ('5 4 4 4 4 8 . 7 8');\n--Testcase 660:\nSELECT to_number(a, '9 9 9 9 9 9 . 9 9') FROM to_number_tbl;\n\n--Testcase 661:\nDELETE FROM to_number_tbl;\n--Testcase 662:\nINSERT INTO to_number_tbl VALUES ('.01');\n--Testcase 663:\nSELECT to_number(a, 'FM9.99') FROM to_number_tbl;\n\n--Testcase 664:\nDELETE FROM to_number_tbl;\n--Testcase 665:\nINSERT INTO to_number_tbl VALUES ('.0');\n--Testcase 666:\nSELECT to_number(a, '99999999.99999999') FROM to_number_tbl;\n\n--Testcase 667:\nDELETE FROM to_number_tbl;\n--Testcase 668:\nINSERT INTO to_number_tbl VALUES ('0');\n--Testcase 669:\nSELECT to_number(a, '99.99') FROM to_number_tbl;\n\n--Testcase 670:\nDELETE FROM to_number_tbl;\n--Testcase 671:\nINSERT INTO to_number_tbl VALUES ('.-01');\n--Testcase 672:\nSELECT to_number(a, 'S99.99') FROM to_number_tbl;\n\n--Testcase 673:\nDELETE FROM to_number_tbl;\n--Testcase 674:\nINSERT INTO to_number_tbl VALUES ('.01-');\n--Testcase 675:\nSELECT to_number(a, '99.99S') FROM to_number_tbl;\n\n--Testcase 676:\nDELETE FROM to_number_tbl;\n--Testcase 677:\nINSERT INTO to_number_tbl VALUES (' . 0 1-');\n--Testcase 678:\nSELECT to_number(a, ' 9 9 . 9 9 S') FROM to_number_tbl;\n\n--Testcase 679:\nDELETE FROM to_number_tbl;\n--Testcase 680:\nINSERT INTO to_number_tbl VALUES ('34,50');\n--Testcase 681:\nSELECT to_number(a,'999,99') FROM to_number_tbl;\n\n--Testcase 682:\nDELETE FROM to_number_tbl;\n--Testcase 683:\nINSERT INTO to_number_tbl VALUES ('123,000');\n--Testcase 684:\nSELECT to_number(a,'999G') FROM to_number_tbl;\n\n--Testcase 685:\nDELETE FROM to_number_tbl;\n--Testcase 686:\nINSERT INTO to_number_tbl VALUES ('123456');\n--Testcase 687:\nSELECT to_number(a,'999G999') FROM to_number_tbl;\n\n--Testcase 688:\nDELETE FROM to_number_tbl;\n--Testcase 689:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 690:\nSELECT to_number(a,'L9,999.99') FROM to_number_tbl;\n\n--Testcase 691:\nDELETE FROM to_number_tbl;\n--Testcase 692:\nINSERT INTO to_number_tbl VALUES ('$1234.56');\n--Testcase 693:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 694:\nDELETE FROM to_number_tbl;\n--Testcase 695:\nINSERT INTO to_number_tbl VALUES ('$1,234.56');\n--Testcase 696:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 697:\nDELETE FROM to_number_tbl;\n--Testcase 698:\nINSERT INTO to_number_tbl VALUES ('1234.56');\n--Testcase 699:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 700:\nDELETE FROM to_number_tbl;\n--Testcase 701:\nINSERT INTO to_number_tbl VALUES ('1,234.56');\n--Testcase 702:\nSELECT to_number(a,'L99,999.99') FROM to_number_tbl;\n\n--Testcase 703:\nDELETE FROM to_number_tbl;\n--Testcase 704:\nINSERT INTO to_number_tbl VALUES ('42nd');\n--Testcase 705:\nSELECT to_number(a, '99th') FROM to_number_tbl;\n\n--Testcase 1212:\nRESET lc_numeric;\n--\n-- Input syntax\n--\n\n--Testcase 706:\nCREATE FOREIGN TABLE num_input_test (n1 numeric) SERVER sqlite_svr;\n\n-- good inputs\n--Testcase 551:\nINSERT INTO num_input_test(n1) VALUES (' 123');\n--Testcase 552:\nINSERT INTO num_input_test(n1) VALUES ('   3245874    ');\n--Testcase 553:\nINSERT INTO num_input_test(n1) VALUES ('  -93853');\n--Testcase 554:\nINSERT INTO num_input_test(n1) VALUES ('555.50');\n--Testcase 555:\nINSERT INTO num_input_test(n1) VALUES ('-555.50');\n--Testcase 556:\nINSERT INTO num_input_test(n1) VALUES ('NaN ');\n--Testcase 557:\nINSERT INTO num_input_test(n1) VALUES ('        nan');\n--Testcase 1213:\nINSERT INTO num_input_test(n1) VALUES (' inf ');\n--Testcase 1214:\nINSERT INTO num_input_test(n1) VALUES (' +inf ');\n--Testcase 1215:\nINSERT INTO num_input_test(n1) VALUES (' -inf ');\n--Testcase 1216:\nINSERT INTO num_input_test(n1) VALUES (' Infinity ');\n--Testcase 1217:\nINSERT INTO num_input_test(n1) VALUES (' +inFinity ');\n--Testcase 1218:\nINSERT INTO num_input_test(n1) VALUES (' -INFINITY ');\nINSERT INTO num_input_test(n1) VALUES ('12_000_000_000');\nINSERT INTO num_input_test(n1) VALUES ('12_000.123_456');\nINSERT INTO num_input_test(n1) VALUES ('23_000_000_000e-1_0');\nINSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e1_0');\nINSERT INTO num_input_test(n1) VALUES ('.000_000_000_123e+1_1');\nINSERT INTO num_input_test(n1) VALUES ('0b10001110111100111100001001010');\nINSERT INTO num_input_test(n1) VALUES ('  -0B_1010_1011_0101_0100_1010_1001_1000_1100_1110_1011_0001_1111_0000_1010_1101_0010  ');\nINSERT INTO num_input_test(n1) VALUES ('  +0o112402761777 ');\nINSERT INTO num_input_test(n1) VALUES ('-0O0012_5524_5230_6334_3167_0261');\nINSERT INTO num_input_test(n1) VALUES ('-0x0000000000000000000000000deadbeef');\nINSERT INTO num_input_test(n1) VALUES (' 0X_30b1_F33a_6DF0_bD4E_64DF_9BdA_7D15 ');\n\n-- bad inputs\n--Testcase 558:\nINSERT INTO num_input_test(n1) VALUES ('     ');\n--Testcase 559:\nINSERT INTO num_input_test(n1) VALUES ('   1234   %');\n--Testcase 560:\nINSERT INTO num_input_test(n1) VALUES ('xyz');\n--Testcase 561:\nINSERT INTO num_input_test(n1) VALUES ('- 1234');\n--Testcase 562:\nINSERT INTO num_input_test(n1) VALUES ('5 . 0');\n--Testcase 563:\nINSERT INTO num_input_test(n1) VALUES ('5. 0   ');\n--Testcase 564:\nINSERT INTO num_input_test(n1) VALUES ('');\n--Testcase 565:\nINSERT INTO num_input_test(n1) VALUES (' N aN ');\nINSERT INTO num_input_test(n1) VALUES ('+NaN');\nINSERT INTO num_input_test(n1) VALUES ('-NaN');\n--Testcase 1219:\nINSERT INTO num_input_test(n1) VALUES ('+ infinity');\nINSERT INTO num_input_test(n1) VALUES ('_123');\nINSERT INTO num_input_test(n1) VALUES ('123_');\nINSERT INTO num_input_test(n1) VALUES ('12__34');\nINSERT INTO num_input_test(n1) VALUES ('123_.456');\nINSERT INTO num_input_test(n1) VALUES ('123._456');\nINSERT INTO num_input_test(n1) VALUES ('1.2e_34');\nINSERT INTO num_input_test(n1) VALUES ('1.2e34_');\nINSERT INTO num_input_test(n1) VALUES ('1.2e3__4');\nINSERT INTO num_input_test(n1) VALUES ('0b1112');\nINSERT INTO num_input_test(n1) VALUES ('0c1112');\nINSERT INTO num_input_test(n1) VALUES ('0o12345678');\nINSERT INTO num_input_test(n1) VALUES ('0x1eg');\nINSERT INTO num_input_test(n1) VALUES ('0x12.34');\nINSERT INTO num_input_test(n1) VALUES ('0x__1234');\nINSERT INTO num_input_test(n1) VALUES ('0x1234_');\nINSERT INTO num_input_test(n1) VALUES ('0x12__34');\n\n--Testcase 566:\nSELECT * FROM num_input_test;\n\n-- Also try it with non-error-throwing API\nCREATE FOREIGN TABLE NON_ERROR_THROWING_API_INT4_NUMERIC(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr;\nINSERT INTO NON_ERROR_THROWING_API_INT4_NUMERIC VALUES ('34.5', 1), ('34xyz', 2), ('1e400000', 3);\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 1;\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 2;\nSELECT pg_input_is_valid(f1, 'numeric') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 3;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 3), 'numeric');\n\nINSERT INTO NON_ERROR_THROWING_API_INT4_NUMERIC VALUES ('1234.567', 4), ('0x1234.567', 5);\nSELECT pg_input_is_valid(f1, 'numeric(8,4)') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4;\nSELECT pg_input_is_valid(f1, 'numeric(7,4)') FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4;\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 4), 'numeric(7,4)');\nSELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_INT4_NUMERIC WHERE id = 5), 'numeric');\n\n--\n-- Test precision and scale typemods\n--\n\n--Testcase 1557:\nCREATE FOREIGN TABLE num_typemod_test (\n  millions numeric(3, -6),\n  thousands numeric(3, -3),\n  units numeric(3, 0),\n  thousandths numeric(3, 3),\n  millionths numeric(3, 6)\n) SERVER sqlite_svr;\n--Testcase 1558:\n\\d num_typemod_test\n\n-- rounding of valid inputs\n--Testcase 1559:\nINSERT INTO num_typemod_test VALUES (123456, 123, 0.123, 0.000123, 0.000000123);\n--Testcase 1560:\nINSERT INTO num_typemod_test VALUES (654321, 654, 0.654, 0.000654, 0.000000654);\n--Testcase 1561:\nINSERT INTO num_typemod_test VALUES (2345678, 2345, 2.345, 0.002345, 0.000002345);\n--Testcase 1562:\nINSERT INTO num_typemod_test VALUES (7654321, 7654, 7.654, 0.007654, 0.000007654);\n--Testcase 1563:\nINSERT INTO num_typemod_test VALUES (12345678, 12345, 12.345, 0.012345, 0.000012345);\n--Testcase 1564:\nINSERT INTO num_typemod_test VALUES (87654321, 87654, 87.654, 0.087654, 0.000087654);\n--Testcase 1565:\nINSERT INTO num_typemod_test VALUES (123456789, 123456, 123.456, 0.123456, 0.000123456);\n--Testcase 1566:\nINSERT INTO num_typemod_test VALUES (987654321, 987654, 987.654, 0.987654, 0.000987654);\n--Testcase 1567:\nINSERT INTO num_typemod_test VALUES ('NaN', 'NaN', 'NaN', 'NaN', 'NaN');\n\n--Testcase 1568:\nSELECT scale(millions), * FROM num_typemod_test ORDER BY millions;\n\n-- invalid inputs\n--Testcase 1569:\nINSERT INTO num_typemod_test (millions) VALUES ('inf');\n--Testcase 1570:\nINSERT INTO num_typemod_test (millions) VALUES (999500000);\n--Testcase 1571:\nINSERT INTO num_typemod_test (thousands) VALUES (999500);\n--Testcase 1572:\nINSERT INTO num_typemod_test (units) VALUES (999.5);\n--Testcase 1573:\nINSERT INTO num_typemod_test (thousandths) VALUES (0.9995);\n--Testcase 1574:\nINSERT INTO num_typemod_test (millionths) VALUES (0.0009995);\n\n--\n-- Test some corner cases for multiplication\n--\n--Testcase 707:\nCREATE FOREIGN TABLE num_tmp (n1 numeric, n2 numeric, id int options (key 'true')) SERVER sqlite_svr;\n--Testcase 708:\nINSERT INTO num_tmp VALUES (4790999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 709:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 710:\nDELETE FROM num_tmp;\n--Testcase 711:\nINSERT INTO num_tmp VALUES (4789999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 712:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 713:\nDELETE FROM num_tmp;\n--Testcase 714:\nINSERT INTO num_tmp VALUES (4770999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 715:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 716:\nDELETE FROM num_tmp;\n--Testcase 717:\nINSERT INTO num_tmp VALUES (4769999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999);\n--Testcase 718:\nSELECT n1 * n2 FROM num_tmp;\n\n--Testcase 1525:\nDELETE FROM num_tmp;\n--Testcase 1526:\nINSERT INTO num_tmp VALUES ((0.1 - 2e-16383), (0.1 - 3e-16383));\n--Testcase 1527:\nSELECT trim_scale(n1 * n2) FROM num_tmp;\n\n--\n-- Test some corner cases for division\n--\n--Testcase 719:\nDELETE FROM num_tmp;\n--Testcase 720:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 721:\nSELECT n1::numeric / n2 FROM num_tmp;\n\n--Testcase 722:\nDELETE FROM num_tmp;\n--Testcase 723:\nINSERT INTO num_tmp VALUES (999999999999999999999, 1000000000000000000000);\n--Testcase 724:\nSELECT div(n1::numeric, n2) FROM num_tmp;\n--Testcase 725:\nSELECT mod(n1::numeric, n2) FROM num_tmp;\n--Testcase 726:\nSELECT div(-n1::numeric, n2) FROM num_tmp;\n--Testcase 727:\nSELECT mod(-n1::numeric, n2) FROM num_tmp;\n--Testcase 728:\nselect div(-n1::numeric,n2)*n2 + mod(-n1::numeric,n2) FROM num_tmp;\n\n--Testcase 729:\nDELETE FROM num_tmp;\n--Testcase 730:\nINSERT INTO num_tmp VALUES (70.0,70);\n--Testcase 731:\nselect mod (n1, n2) FROM num_tmp;\n--Testcase 732:\nselect div (n1, n2) FROM num_tmp;\n--Testcase 733:\nselect n1 / n2 FROM num_tmp;\n\n--Testcase 734:\nDELETE FROM num_tmp;\n--Testcase 735:\nINSERT INTO num_tmp VALUES (12345678901234567890, 123);\n--Testcase 736:\nselect n1 % n2 FROM num_tmp;\n--Testcase 737:\nselect n1 / n2 FROM num_tmp;\n--Testcase 738:\nselect div(n1, n2) FROM num_tmp;\n--Testcase 739:\nselect div(n1, n2) * n2 + n1 % n2 FROM num_tmp;\n\n--\n-- Test some corner cases for square root\n--\n--Testcase 740:\nDELETE FROM num_tmp;\n--Testcase 741:\nINSERT INTO num_tmp VALUES (1.000000000000003::numeric);\n--Testcase 742:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 743:\nDELETE FROM num_tmp;\n--Testcase 744:\nINSERT INTO num_tmp VALUES (1.000000000000004::numeric);\n--Testcase 745:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 746:\nDELETE FROM num_tmp;\n--Testcase 747:\nINSERT INTO num_tmp VALUES (96627521408608.56340355805::numeric);\n--Testcase 748:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 749:\nDELETE FROM num_tmp;\n--Testcase 750:\nINSERT INTO num_tmp VALUES (96627521408608.56340355806::numeric);\n--Testcase 751:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 752:\nDELETE FROM num_tmp;\n--Testcase 753:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290367::numeric);\n--Testcase 754:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 755:\nDELETE FROM num_tmp;\n--Testcase 756:\nINSERT INTO num_tmp VALUES (515549506212297735.073688290368::numeric);\n--Testcase 757:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 758:\nDELETE FROM num_tmp;\n--Testcase 759:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900306::numeric);\n--Testcase 760:\nSELECT sqrt(n1) FROM num_tmp;\n\n--Testcase 761:\nDELETE FROM num_tmp;\n--Testcase 762:\nINSERT INTO num_tmp VALUES (8015491789940783531003294973900307::numeric);\n--Testcase 763:\nSELECT sqrt(n1) FROM num_tmp;\n\n--\n-- Test code path for raising to integer powers\n--\n--Testcase 764:\nDELETE FROM num_tmp;\n--Testcase 765:\nINSERT INTO num_tmp VALUES (10.0, -2147483648);\n--Testcase 766:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 767:\nDELETE FROM num_tmp;\n--Testcase 768:\nINSERT INTO num_tmp VALUES (10.0, -2147483647);\n--Testcase 769:\nSELECT n1 ^ n2 as rounds_to_zero FROM num_tmp;\n\n--Testcase 770:\nDELETE FROM num_tmp;\n--Testcase 771:\nINSERT INTO num_tmp VALUES (10.0, 2147483647);\n--Testcase 772:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n--Testcase 773:\nDELETE FROM num_tmp;\n--Testcase 774:\nINSERT INTO num_tmp VALUES (117743296169.0, -1000000000);\n--Testcase 775:\nSELECT n1 ^ n2 as overflows FROM num_tmp;\n\n-- cases that used to return inaccurate results\n--Testcase 776:\nDELETE FROM num_tmp;\n--Testcase 777:\nINSERT INTO num_tmp VALUES (3.789, 21.0000000000000000);\n--Testcase 778:\nSELECT n1 ^ n2 FROM num_tmp;\n\n\n--Testcase 779:\nDELETE FROM num_tmp;\n--Testcase 780:\nINSERT INTO num_tmp VALUES (3.789, 35.0000000000000000);\n--Testcase 781:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 782:\nDELETE FROM num_tmp;\n--Testcase 783:\nINSERT INTO num_tmp VALUES (1.2, 345);\n--Testcase 784:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 785:\nDELETE FROM num_tmp;\n--Testcase 786:\nINSERT INTO num_tmp VALUES (0.12, (-20));\n--Testcase 787:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1220:\nDELETE FROM num_tmp;\n--Testcase 1221:\nINSERT INTO num_tmp VALUES (1.000000000123, (-2147483648));\n--Testcase 1222:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1528:\nDELETE FROM num_tmp;\n--Testcase 1529:\nINSERT INTO num_tmp VALUES (0.9999999999, 23300000000000);\n--Testcase 1530:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n--Testcase 1575:\nDELETE FROM num_tmp;\n--Testcase 1576:\nINSERT INTO num_tmp VALUES ((1 - 1.500012345678e-1000), 1.45e1003);\n--Testcase 1577:\nSELECT round(((1 - 1.500012345678e-1000) ^ 1.45e1003) * 1e1000) FROM num_tmp;\n\n-- cases that used to error out\n--Testcase 788:\nDELETE FROM num_tmp;\n--Testcase 789:\nINSERT INTO num_tmp VALUES (0.12, (-25));\n--Testcase 790:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 791:\nDELETE FROM num_tmp;\n--Testcase 792:\nINSERT INTO num_tmp VALUES (0.5678, (-85));\n--Testcase 793:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1531:\nDELETE FROM num_tmp;\n--Testcase 1532:\nINSERT INTO num_tmp VALUES (0.9999999999, 70000000000000);\n--Testcase 1533:\nSELECT coalesce(nullif(n1 ^ n2, 0), 0) FROM num_tmp;\n\n-- negative base to integer powers\n--Testcase 1534:\nDELETE FROM num_tmp;\n--Testcase 1535:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483646);\n--Testcase 1536:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1537:\nDELETE FROM num_tmp;\n--Testcase 1538:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483647);\n--Testcase 1539:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1540:\nDELETE FROM num_tmp;\n--Testcase 1541:\nINSERT INTO num_tmp VALUES ((-1.0), 2147483648);\n--Testcase 1542:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1543:\nDELETE FROM num_tmp;\n--Testcase 1544:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000000);\n--Testcase 1545:\nSELECT n1 ^ n2 FROM num_tmp;\n\n--Testcase 1546:\nDELETE FROM num_tmp;\n--Testcase 1547:\nINSERT INTO num_tmp VALUES ((-1.0), 1000000000000001);\n--Testcase 1548:\nSELECT n1 ^ n2 FROM num_tmp;\n\n-- integer powers of 10\nDELETE FROM num_tmp;\nINSERT INTO num_tmp(n1) SELECT n FROM generate_series(-20,20) n;\nSELECT n1, 10.0 ^ n1 as \"10^n\", (10.0 ^ n1) * (10.0 ^ (-n1)) = 1 as ok FROM num_tmp;\n\n--\n-- Tests for raising to non-integer powers\n--\n\n-- special cases\n--Testcase 794:\nDELETE FROM num_tmp;\n--Testcase 795:\nINSERT INTO num_tmp VALUES (0.0, 0.0);\n--Testcase 796:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 797:\nDELETE FROM num_tmp;\n--Testcase 798:\nINSERT INTO num_tmp VALUES ((-12.34), 0.0);\n--Testcase 799:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 800:\nDELETE FROM num_tmp;\n--Testcase 801:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 802:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 803:\nDELETE FROM num_tmp;\n--Testcase 804:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 805:\nselect n1 ^ n2 FROM num_tmp;\n\n-- NaNs\n--Testcase 806:\nDELETE FROM num_tmp;\n--Testcase 807:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 'NaN'::numeric);\n--Testcase 808:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 809:\nDELETE FROM num_tmp;\n--Testcase 810:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 0);\n--Testcase 811:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 812:\nDELETE FROM num_tmp;\n--Testcase 813:\nINSERT INTO num_tmp VALUES ('NaN'::numeric, 1);\n--Testcase 814:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 815:\nDELETE FROM num_tmp;\n--Testcase 816:\nINSERT INTO num_tmp VALUES (0, 'NaN'::numeric);\n--Testcase 817:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 818:\nDELETE FROM num_tmp;\n--Testcase 819:\nINSERT INTO num_tmp VALUES (1, 'NaN'::numeric);\n--Testcase 820:\nselect n1 ^ n2 FROM num_tmp;\n\n-- invalid inputs\n--Testcase 821:\nDELETE FROM num_tmp;\n--Testcase 822:\nINSERT INTO num_tmp VALUES (0.0, (-12.34));\n--Testcase 823:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 824:\nDELETE FROM num_tmp;\n--Testcase 825:\nINSERT INTO num_tmp VALUES ((-12.34), 1.2);\n--Testcase 826:\nselect n1 ^ n2 FROM num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 827:\nDELETE FROM num_tmp;\n--Testcase 828:\nINSERT INTO num_tmp VALUES (32.1, 9.8);\n--Testcase 829:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 830:\nDELETE FROM num_tmp;\n--Testcase 831:\nINSERT INTO num_tmp VALUES (32.1, (-9.8));\n--Testcase 832:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 833:\nDELETE FROM num_tmp;\n--Testcase 834:\nINSERT INTO num_tmp VALUES (12.3, 45.6);\n--Testcase 835:\nselect n1 ^ n2 FROM num_tmp;\n\n--Testcase 836:\nDELETE FROM num_tmp;\n--Testcase 837:\nINSERT INTO num_tmp VALUES (12.3, (-45.6));\n--Testcase 838:\nselect n1 ^ n2 FROM num_tmp;\n\n-- big test\n--Testcase 839:\nDELETE FROM num_tmp;\n--Testcase 840:\nINSERT INTO num_tmp VALUES (1.234, 5678);\n--Testcase 841:\nselect n1 ^ n2 FROM num_tmp;\n\n--\n-- Tests for EXP()\n--\n\n-- special cases\n--Testcase 842:\nDELETE FROM num_tmp;\n--Testcase 843:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 844:\nselect exp(n1) from num_tmp;\n\n--Testcase 845:\nDELETE FROM num_tmp;\n--Testcase 846:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 847:\nselect exp(n1) from num_tmp;\n\n--Testcase 848:\nDELETE FROM num_tmp;\n--Testcase 849:\nINSERT INTO num_tmp VALUES (1.0::numeric(71,70));\n--Testcase 850:\nselect exp(n1) from num_tmp;\n\n--Testcase 1223:\nDELETE FROM num_tmp;\n--Testcase 1224:\nINSERT INTO num_tmp VALUES ('nan'::numeric);\n--Testcase 1225:\nselect exp(n1) from num_tmp;\n\n--Testcase 1226:\nDELETE FROM num_tmp;\n--Testcase 1227:\nINSERT INTO num_tmp VALUES ('inf'::numeric);\n--Testcase 1228:\nselect exp(n1) from num_tmp;\n\n--Testcase 1229:\nDELETE FROM num_tmp;\n--Testcase 1230:\nINSERT INTO num_tmp VALUES ('-inf'::numeric);\n--Testcase 1231:\nselect exp(n1) from num_tmp;\n\n--Testcase 1549:\nDELETE FROM num_tmp;\n--Testcase 1550:\nINSERT INTO num_tmp VALUES ('-5000'::numeric);\n--Testcase 1551:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n--Testcase 1552:\nDELETE FROM num_tmp;\n--Testcase 1553:\nINSERT INTO num_tmp VALUES ('-10000'::numeric);\n--Testcase 1554:\nselect coalesce(nullif(exp(n1), 0), 0) from num_tmp;\n\n-- cases that used to generate inaccurate results\n--Testcase 851:\nDELETE FROM num_tmp;\n--Testcase 852:\nINSERT INTO num_tmp VALUES (32.999);\n--Testcase 853:\nselect exp(n1) from num_tmp;\n\n--Testcase 854:\nDELETE FROM num_tmp;\n--Testcase 855:\nINSERT INTO num_tmp VALUES (-32.999);\n--Testcase 856:\nselect exp(n1) from num_tmp;\n\n--Testcase 857:\nDELETE FROM num_tmp;\n--Testcase 858:\nINSERT INTO num_tmp VALUES (123.456);\n--Testcase 859:\nselect exp(n1) from num_tmp;\n\n--Testcase 860:\nDELETE FROM num_tmp;\n--Testcase 861:\nINSERT INTO num_tmp VALUES (-123.456);\n--Testcase 862:\nselect exp(n1) from num_tmp;\n\n-- big test\n--Testcase 863:\nDELETE FROM num_tmp;\n--Testcase 864:\nINSERT INTO num_tmp VALUES (1234.5678);\n--Testcase 865:\nselect exp(n1) from num_tmp;\n\n--\n-- Tests for generate_series\n--\n--Testcase 866:\nDELETE FROM num_tmp;\n--Testcase 867:\nINSERT INTO num_tmp select * from generate_series(0.0::numeric, 4.0::numeric);\n--Testcase 868:\nSELECT n1 FROM num_tmp;\n\n--Testcase 869:\nDELETE FROM num_tmp;\n--Testcase 870:\nINSERT INTO num_tmp select * from generate_series(0.1::numeric, 4.0::numeric, 1.3::numeric);\n--Testcase 871:\nSELECT n1 FROM num_tmp;\n\n--Testcase 872:\nDELETE FROM num_tmp;\n--Testcase 873:\nINSERT INTO num_tmp select * from generate_series(4.0::numeric, -1.5::numeric, -2.2::numeric);\n--Testcase 874:\nSELECT n1 FROM num_tmp;\n\n-- Trigger errors\n--Testcase 875:\nDELETE FROM num_tmp;\n--Testcase 876:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 0::numeric);\n--Testcase 877:\nSELECT n1 FROM num_tmp;\n\n--Testcase 878:\nDELETE FROM num_tmp;\n--Testcase 879:\nINSERT INTO num_tmp select * from generate_series(-100::numeric, 100::numeric, 'nan'::numeric);\n--Testcase 880:\nSELECT n1 FROM num_tmp;\n\n--Testcase 881:\nDELETE FROM num_tmp;\n--Testcase 882:\nINSERT INTO num_tmp select * from generate_series('nan'::numeric, 100::numeric, 10::numeric);\n--Testcase 883:\nSELECT n1 FROM num_tmp;\n\n--Testcase 884:\nDELETE FROM num_tmp;\n--Testcase 885:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'nan'::numeric, 10::numeric);\n--Testcase 886:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1232:\nDELETE FROM num_tmp;\n--Testcase 1233:\nINSERT INTO num_tmp select * from generate_series('inf'::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1234:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1235:\nDELETE FROM num_tmp;\n--Testcase 1236:\nINSERT INTO num_tmp select * from generate_series(0::numeric, 'inf'::numeric, 10::numeric);\n--Testcase 1237:\nSELECT n2 FROM num_tmp;\n\n--Testcase 1238:\nDELETE FROM num_tmp;\n--Testcase 1239:\nINSERT INTO num_tmp select * from generate_series(0::numeric, '42'::numeric, '-inf'::numeric);\n--Testcase 1240:\nSELECT n2 FROM num_tmp;\n\n-- Checks maximum, output is truncated\n--Testcase 887:\nDELETE FROM num_tmp;\n--Testcase 888:\nINSERT INTO num_tmp select (i / (10::numeric ^ 131071))::numeric(1,0)\n        from generate_series(6 * (10::numeric ^ 131071),\n                             9 * (10::numeric ^ 131071),\n                             10::numeric ^ 131071) i;\n--Testcase 889:\nSELECT n1 FROM num_tmp;\n                            \n-- Check usage with variables\n--Testcase 890:\nDELETE FROM num_tmp;\n--Testcase 891:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;\n--Testcase 892:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 893:\nDELETE FROM num_tmp;\n--Testcase 894:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;\n--Testcase 895:\nSELECT n1, n2 FROM num_tmp;\n\n--Testcase 896:\nDELETE FROM num_tmp;\n--Testcase 897:\nINSERT INTO num_tmp select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;\n--Testcase 898:\nSELECT n1, n2 FROM num_tmp;\n\n--\n-- Tests for LN()\n--\n\n-- Invalid inputs\n--Testcase 899:\nDELETE FROM num_tmp;\n--Testcase 900:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 901:\nselect ln(n1) from num_tmp;\n\n--Testcase 902:\nDELETE FROM num_tmp;\n--Testcase 903:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 904:\nselect ln(n1) from num_tmp;\n\n-- Some random tests\n--Testcase 905:\nDELETE FROM num_tmp;\n--Testcase 906:\nINSERT INTO num_tmp VALUES (1.2345678e-28);\n--Testcase 907:\nselect ln(n1) from num_tmp;\n\n--Testcase 908:\nDELETE FROM num_tmp;\n--Testcase 909:\nINSERT INTO num_tmp VALUES (0.0456789);\n--Testcase 910:\nselect ln(n1) from num_tmp;\n\n--Testcase 911:\nDELETE FROM num_tmp;\n--Testcase 912:\nINSERT INTO num_tmp VALUES (0.349873948359354029493948309745709580730482050975);\n--Testcase 913:\nselect ln(n1) from num_tmp;\n\n--Testcase 914:\nDELETE FROM num_tmp;\n--Testcase 915:\nINSERT INTO num_tmp VALUES (0.99949452);\n--Testcase 916:\nselect ln(n1) from num_tmp;\n\n--Testcase 917:\nDELETE FROM num_tmp;\n--Testcase 918:\nINSERT INTO num_tmp VALUES (1.00049687395);\n--Testcase 919:\nselect ln(n1) from num_tmp;\n\n--Testcase 920:\nDELETE FROM num_tmp;\n--Testcase 921:\nINSERT INTO num_tmp VALUES (1234.567890123456789);\n--Testcase 922:\nselect ln(n1) from num_tmp;\n\n--Testcase 923:\nDELETE FROM num_tmp;\n--Testcase 924:\nINSERT INTO num_tmp VALUES (5.80397490724e5);\n--Testcase 925:\nselect ln(n1) from num_tmp;\n\n--Testcase 926:\nDELETE FROM num_tmp;\n--Testcase 927:\nINSERT INTO num_tmp VALUES (9.342536355e34);\n--Testcase 928:\nselect ln(n1) from num_tmp;\n\n--\n-- Tests for LOG() (base 10)\n--\n\n-- invalid inputs\n--Testcase 929:\nDELETE FROM num_tmp;\n--Testcase 930:\nINSERT INTO num_tmp VALUES (-12.34);\n--Testcase 931:\nselect log(n1) from num_tmp;\n\n--Testcase 932:\nDELETE FROM num_tmp;\n--Testcase 933:\nINSERT INTO num_tmp VALUES (0.0);\n--Testcase 934:\nselect log(n1) from num_tmp;\n\n-- some random tests\n--Testcase 935:\nDELETE FROM num_tmp;\n--Testcase 936:\nINSERT INTO num_tmp VALUES (1.234567e-89);\n--Testcase 937:\nselect log(n1) from num_tmp;\n\n--Testcase 938:\nDELETE FROM num_tmp;\n--Testcase 939:\nINSERT INTO num_tmp VALUES (3.4634998359873254962349856073435545);\n--Testcase 940:\nselect log(n1) from num_tmp;\n\n--Testcase 941:\nDELETE FROM num_tmp;\n--Testcase 942:\nINSERT INTO num_tmp VALUES (9.999999999999999999);\n--Testcase 943:\nselect log(n1) from num_tmp;\n\n--Testcase 944:\nDELETE FROM num_tmp;\n--Testcase 945:\nINSERT INTO num_tmp VALUES (10.00000000000000000);\n--Testcase 946:\nselect log(n1) from num_tmp;\n\n--Testcase 947:\nDELETE FROM num_tmp;\n--Testcase 948:\nINSERT INTO num_tmp VALUES (10.00000000000000001);\n--Testcase 949:\nselect log(n1) from num_tmp;\n\n--Testcase 950:\nDELETE FROM num_tmp;\n--Testcase 951:\nINSERT INTO num_tmp VALUES (590489.45235237);\n--Testcase 952:\nselect log(n1) from num_tmp;\n\n--\n-- Tests for LOG() (arbitrary base)\n--\n\n-- invalid inputs\n--Testcase 953:\nDELETE FROM num_tmp;\n--Testcase 954:\nINSERT INTO num_tmp VALUES (-12.34, 56.78);\n--Testcase 955:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 956:\nDELETE FROM num_tmp;\n--Testcase 957:\nINSERT INTO num_tmp VALUES (-12.34, -56.78);\n--Testcase 958:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 959:\nDELETE FROM num_tmp;\n--Testcase 960:\nINSERT INTO num_tmp VALUES (12.34, -56.78);\n--Testcase 961:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 962:\nDELETE FROM num_tmp;\n--Testcase 963:\nINSERT INTO num_tmp VALUES (0.0, 12.34);\n--Testcase 964:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 965:\nDELETE FROM num_tmp;\n--Testcase 966:\nINSERT INTO num_tmp VALUES (12.34, 0.0);\n--Testcase 967:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 968:\nDELETE FROM num_tmp;\n--Testcase 969:\nINSERT INTO num_tmp VALUES (.0, 12.34);\n--Testcase 970:\nselect log(n1, n2) from num_tmp;\n\n-- some random tests\n--Testcase 971:\nDELETE FROM num_tmp;\n--Testcase 972:\nINSERT INTO num_tmp VALUES (1.23e-89, 6.4689e45);\n--Testcase 973:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 974:\nDELETE FROM num_tmp;\n--Testcase 975:\nINSERT INTO num_tmp VALUES (0.99923, 4.58934e34);\n--Testcase 976:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 977:\nDELETE FROM num_tmp;\n--Testcase 978:\nINSERT INTO num_tmp VALUES (1.000016, 8.452010e18);\n--Testcase 979:\nselect log(n1, n2) from num_tmp;\n\n--Testcase 980:\nDELETE FROM num_tmp;\n--Testcase 981:\nINSERT INTO num_tmp VALUES (3.1954752e47, 9.4792021e-73);\n--Testcase 982:\nselect log(n1, n2) from num_tmp;\n\n--\n-- Tests for scale()\n--\n--Testcase 983:\nDELETE FROM num_tmp;\n--Testcase 984:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 985:\nselect scale(n1) from num_tmp;\n\n--Testcase 1241:\nDELETE FROM num_tmp;\n--Testcase 1242:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1243:\nselect scale(n1) from num_tmp;\n\n--Testcase 986:\nDELETE FROM num_tmp;\n--Testcase 987:\nINSERT INTO num_tmp VALUES (NULL::numeric);\n--Testcase 988:\nselect scale(n1) from num_tmp;\n\n--Testcase 989:\nDELETE FROM num_tmp;\n--Testcase 990:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 991:\nselect scale(n1) from num_tmp;\n\n--Testcase 992:\nDELETE FROM num_tmp;\n--Testcase 993:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 994:\nselect scale(n1) from num_tmp;\n\n--Testcase 995:\nDELETE FROM num_tmp;\n--Testcase 996:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 997:\nselect scale(n1) from num_tmp;\n\n--Testcase 998:\nDELETE FROM num_tmp;\n--Testcase 999:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1000:\nselect scale(n1) from num_tmp;\n\n--Testcase 1001:\nDELETE FROM num_tmp;\n--Testcase 1002:\nINSERT INTO num_tmp VALUES (110123.12475871856128);\n--Testcase 1003:\nselect scale(n1) from num_tmp;\n\n--Testcase 1004:\nDELETE FROM num_tmp;\n--Testcase 1005:\nINSERT INTO num_tmp VALUES (-1123.12471856128);\n--Testcase 1006:\nselect scale(n1) from num_tmp;\n\n--Testcase 1007:\nDELETE FROM num_tmp;\n--Testcase 1008:\nINSERT INTO num_tmp VALUES (-13.000000000000000);\n--Testcase 1009:\nselect scale(n1) from num_tmp;\n\n--\n-- Tests for min_scale()\n--\n--Testcase 1010:\nDELETE FROM num_tmp;\n--Testcase 1011:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1012:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1244:\nDELETE FROM num_tmp;\n--Testcase 1245:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1246:\nselect min_scale(n1) is NULL from num_tmp; -- should be true\n\n--Testcase 1013:\nDELETE FROM num_tmp;\n--Testcase 1014:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1015:\nselect min_scale(n1) from num_tmp;                     -- no digits\n\n--Testcase 1016:\nDELETE FROM num_tmp;\n--Testcase 1017:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1018:\nselect min_scale(n1) from num_tmp;                  -- no digits again\n\n--Testcase 1019:\nDELETE FROM num_tmp;\n--Testcase 1020:\nINSERT INTO num_tmp VALUES (1.0);\n--Testcase 1021:\nselect min_scale(n1) from num_tmp;                   -- no scale\n\n--Testcase 1022:\nDELETE FROM num_tmp;\n--Testcase 1023:\nINSERT INTO num_tmp VALUES (1.1);\n--Testcase 1024:\nselect min_scale(n1) from num_tmp;                   -- scale 1\n\n--Testcase 1025:\nDELETE FROM num_tmp;\n--Testcase 1026:\nINSERT INTO num_tmp VALUES (1.12);\n--Testcase 1027:\nselect min_scale(n1) from num_tmp;                  -- scale 2\n\n--Testcase 1028:\nDELETE FROM num_tmp;\n--Testcase 1029:\nINSERT INTO num_tmp VALUES (1.123);\n--Testcase 1030:\nselect min_scale(n1) from num_tmp;                 -- scale 3\n\n--Testcase 1031:\nDELETE FROM num_tmp;\n--Testcase 1032:\nINSERT INTO num_tmp VALUES (1.1234);\n--Testcase 1033:\nselect min_scale(n1) from num_tmp;                -- scale 4, filled digit\n\n--Testcase 1034:\nDELETE FROM num_tmp;\n--Testcase 1035:\nINSERT INTO num_tmp VALUES (1.12345);\n--Testcase 1036:\nselect min_scale(n1) from num_tmp;               -- scale 5, 2 NDIGITS\n\n--Testcase 1037:\nDELETE FROM num_tmp;\n--Testcase 1038:\nINSERT INTO num_tmp VALUES (1.1000);\n--Testcase 1039:\nselect min_scale(n1) from num_tmp;                -- 1 pos in NDIGITS\n\n--Testcase 1040:\nDELETE FROM num_tmp;\n--Testcase 1041:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1042:\nselect min_scale(n1) from num_tmp;                 -- very big number\n\n--\n-- Tests for trim_scale()\n--\n--Testcase 1043:\nDELETE FROM num_tmp;\n--Testcase 1044:\nINSERT INTO num_tmp VALUES (numeric 'NaN');\n--Testcase 1045:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1247:\nDELETE FROM num_tmp;\n--Testcase 1248:\nINSERT INTO num_tmp VALUES (numeric 'inf');\n--Testcase 1249:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1046:\nDELETE FROM num_tmp;\n--Testcase 1047:\nINSERT INTO num_tmp VALUES (1.120);\n--Testcase 1048:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1049:\nDELETE FROM num_tmp;\n--Testcase 1050:\nINSERT INTO num_tmp VALUES (0);\n--Testcase 1051:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1052:\nDELETE FROM num_tmp;\n--Testcase 1053:\nINSERT INTO num_tmp VALUES (0.00);\n--Testcase 1054:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1055:\nDELETE FROM num_tmp;\n--Testcase 1056:\nINSERT INTO num_tmp VALUES (1.1234500);\n--Testcase 1057:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1058:\nDELETE FROM num_tmp;\n--Testcase 1059:\nINSERT INTO num_tmp VALUES (110123.12475871856128000);\n--Testcase 1060:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1061:\nDELETE FROM num_tmp;\n--Testcase 1062:\nINSERT INTO num_tmp VALUES (-123.124718561280000000);\n--Testcase 1063:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1064:\nDELETE FROM num_tmp;\n--Testcase 1065:\nINSERT INTO num_tmp VALUES (-13.00000000000000000000);\n--Testcase 1066:\nselect trim_scale(n1) from num_tmp;\n\n--Testcase 1067:\nDELETE FROM num_tmp;\n--Testcase 1068:\nINSERT INTO num_tmp VALUES (1e100);\n--Testcase 1069:\nselect trim_scale(n1) from num_tmp;\n\n--\n-- Tests for SUM()\n--\n\n-- cases that need carry propagation\n--Testcase 1070:\nDELETE FROM num_tmp;\n--Testcase 1071:\nINSERT INTO num_tmp SELECT * FROM generate_series(1, 100000);\n--Testcase 1072:\nSELECT SUM(9999::numeric) FROM num_tmp;\n--Testcase 1073:\nSELECT SUM((-9999)::numeric) FROM num_tmp;\n\n--\n-- Tests for VARIANCE()\n--\n--Testcase 1578:\nINSERT INTO num_variance VALUES (0);\n--Testcase 1579:\nINSERT INTO num_variance VALUES (3e-500);\n--Testcase 1580:\nINSERT INTO num_variance VALUES (-3e-500);\n--Testcase 1581:\nINSERT INTO num_variance VALUES (4e-500 - 1e-16383);\n--Testcase 1582:\nINSERT INTO num_variance VALUES (-4e-500 + 1e-16383);\n-- variance is just under 12.5e-1000 and so should round down to 12e-1000\n--Testcase 1583:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1584:\nSELECT trim_scale(variance(a) * 1e1000) FROM num_variance;\nROLLBACK;\n\n-- case where sum of squares would overflow but variance does not\n--Testcase 1585:\nDELETE FROM num_variance;\n--Testcase 1586:\nINSERT INTO num_variance SELECT 9e131071 + x FROM generate_series(1, 5) x;\n--Testcase 1587:\nSELECT variance(a) FROM num_variance;\n\n-- check that parallel execution produces the same result\nBEGIN;\n-- ALTER TABLE num_variance SET (parallel_workers = 4);\nSET LOCAL parallel_setup_cost = 0;\nSET LOCAL max_parallel_workers_per_gather = 4;\n--Testcase 1588:\nSELECT variance(a) FROM num_variance;\nROLLBACK;\n\n--\n-- Tests for GCD()\n--\n--Testcase 1074:\nDELETE FROM num_tmp;\n--Testcase 1075:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 46375::numeric),\n             (433125::numeric, 46375::numeric),\n             (43312.5::numeric, 4637.5::numeric),\n             (4331.250::numeric, 463.75000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n\n--Testcase 1076:\nSELECT n1 as a, n2 as b, gcd(n1, n2), gcd(n1, -n2), gcd(-n2, n1), gcd(-n2, -n1) FROM num_tmp;\n--\n-- Tests for LCM()\n--\n--Testcase 1077:\nDELETE FROM num_tmp;\n--Testcase 1078:\nINSERT INTO num_tmp VALUES \n             (0::numeric, 0::numeric),\n             (0::numeric, numeric 'NaN'),\n             (0::numeric, 13272::numeric),\n             (13272::numeric, 13272::numeric),\n             (423282::numeric, 13272::numeric),\n             (42328.2::numeric, 1327.2::numeric),\n             (4232.820::numeric, 132.72000::numeric),\n             ('Infinity', '0'),\n             ('Infinity', '42'),\n             ('Infinity', 'Infinity');\n--Testcase 1079:\nSELECT n1 as a, n2 as b, lcm(n1, n2), lcm(n1, -n2), lcm(-n2, n1), lcm(-n2, -n1) FROM num_tmp;\n\n--Testcase 1080:\nDELETE FROM num_tmp;\n--Testcase 1081:\nINSERT INTO num_tmp VALUES (10::numeric, 131068); \n--Testcase 1082:\nSELECT lcm(9999 * (n1)^n2 + (n1^n2 - 1), 2) FROM num_tmp; -- overflow\n\n--\n-- Tests for factorial\n--\n--Testcase 1250:\nDELETE FROM num_tmp;\n--Testcase 1251:\nINSERT INTO num_tmp VALUES (4); \n--Testcase 1252:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1253:\nDELETE FROM num_tmp;\n--Testcase 1254:\nINSERT INTO num_tmp VALUES (15); \n--Testcase 1255:\nSELECT factorial(n1::int4) FROM num_tmp;\n\n--Testcase 1256:\nDELETE FROM num_tmp;\n--Testcase 1257:\nINSERT INTO num_tmp VALUES (100000); \n--Testcase 1258:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1259:\nDELETE FROM num_tmp;\n--Testcase 1260:\nINSERT INTO num_tmp VALUES (0); \n--Testcase 1261:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--Testcase 1262:\nDELETE FROM num_tmp;\n--Testcase 1263:\nINSERT INTO num_tmp VALUES (-4); \n--Testcase 1264:\nSELECT factorial(n1::int4) FROM num_tmp; \n\n--\n-- Tests for pg_lsn()\n--\n--Testcase 1265:\nDELETE FROM num_tmp;\n--Testcase 1266:\nINSERT INTO num_tmp VALUES (23783416::numeric); \n--Testcase 1267:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1268:\nDELETE FROM num_tmp;\n--Testcase 1269:\nINSERT INTO num_tmp VALUES (0::numeric); \n--Testcase 1270:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1271:\nDELETE FROM num_tmp;\n--Testcase 1272:\nINSERT INTO num_tmp VALUES (18446744073709551615::numeric); \n--Testcase 1273:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1274:\nDELETE FROM num_tmp;\n--Testcase 1275:\nINSERT INTO num_tmp VALUES (-1::numeric); \n--Testcase 1276:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1277:\nDELETE FROM num_tmp;\n--Testcase 1278:\nINSERT INTO num_tmp VALUES (18446744073709551616::numeric); \n--Testcase 1279:\nSELECT pg_lsn(n1) FROM num_tmp; \n\n--Testcase 1280:\nDELETE FROM num_tmp;\n--Testcase 1281:\nINSERT INTO num_tmp VALUES ('NaN'::numeric); \n--Testcase 1282:\nSELECT pg_lsn(n1) FROM num_tmp; \n\nDO $d$\ndeclare\n  l_rec record;\nbegin\n  for l_rec in (select foreign_table_schema, foreign_table_name \n                from information_schema.foreign_tables) loop\n     execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name);\n  end loop;\nend;\n$d$;\n--Testcase 1083:\nDROP SERVER sqlite_svr;\n--Testcase 1084:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/out_of_range.sql",
    "content": "--\n-- INT4 + INT2\n--\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n\n--Testcase 01:\nCREATE FOREIGN TABLE INT4_TBL(f1 int4 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 02:\nCREATE FOREIGN TABLE INT4_TMP(f1 int4, f2 int4, id int OPTIONS (key 'true')) SERVER sqlite_svr; \n\n--Testcase 03:\nDELETE FROM INT4_TMP;\n--Testcase 04:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 05:\nINSERT INTO INT4_TMP VALUES (x'7FFFFFFF'::int8 + 1, 0);\n--Testcase 06:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 07:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 08:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 09:\nDELETE FROM INT4_TMP;\n--Testcase 10:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int8;\n--Testcase 11:\nINSERT INTO INT4_TMP VALUES (-(x'7FFFFFFF'::int8) - 2, 0);\n--Testcase 12:\nALTER FOREIGN TABLE INT4_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 13:\nSELECT * FROM INT4_TMP; -- overflow\n--Testcase 14:\nSELECT f1 FROM INT4_TMP; -- overflow\n\n--Testcase 15:\nCREATE FOREIGN TABLE INT2_TBL(f1 int2 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 16:\nCREATE FOREIGN TABLE INT2_TMP(f1 int2, f2 int2, id int OPTIONS (key 'true')) SERVER sqlite_svr;\n\n--Testcase 17:\nDELETE FROM INT2_TMP;\n--Testcase 18:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 19:\nINSERT INTO INT2_TMP VALUES (x'7FFF'::int8 + 1, 0);\n--Testcase 20:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 21:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 22:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 23:\nDELETE FROM INT2_TMP;\n--Testcase 24:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int4;\n--Testcase 25:\nINSERT INTO INT2_TMP VALUES (-(x'7FFF'::int8) - 2, 0);\n--Testcase 26:\nALTER FOREIGN TABLE INT2_TMP ALTER COLUMN f1 TYPE int2;\n--Testcase 27:\nSELECT * FROM INT2_TMP; -- overflow\n--Testcase 28:\nSELECT f1 FROM INT2_TMP; -- overflow\n\n--Testcase 29:\nCREATE FOREIGN TABLE INT8_TBL(q1 int8 OPTIONS (key 'true'), q2 int8 OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 31:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 32:\nINSERT INTO INT8_TBL VALUES (-9223372036854775810, 0);\n--Testcase 33:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 34:\nSELECT * FROM INT8_TBL; -- NO overflow\n--Testcase 35:\nSELECT q1 FROM INT8_TBL; -- NO overflow\n--Testcase 36:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 37:\nDELETE FROM INT8_TBL WHERE q1 = -9223372036854775810;\n--Testcase 38:\nINSERT INTO INT8_TBL VALUES (9223372036854775809, 0);\n--Testcase 39:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 40:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 41:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 42:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 43:\nDELETE FROM INT8_TBL WHERE q1 = 9223372036854775809;\n--Testcase 44:\nINSERT INTO INT8_TBL VALUES (10 * -9223372036854775810, 0);\n--Testcase 45:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n--Testcase 46:\nSELECT * FROM INT8_TBL; -- overflow\n--Testcase 47:\nSELECT q1 FROM INT8_TBL; -- overflow\n--Testcase 48:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE double precision;\n--Testcase 49:\nDELETE FROM INT8_TBL WHERE q1 = 10 * -9223372036854775810;\n--Testcase 50:\nALTER FOREIGN TABLE INT8_TBL ALTER COLUMN q1 TYPE int8;\n\n--Testcase 003:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 004:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/timestamp.sql",
    "content": "--\n-- TIMESTAMP\n--\n--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/core.db');\n--Testcase 3:\nCREATE FOREIGN TABLE dates1 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number timestamp without time zone OPTIONS (column_type 'INT'))\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n--Testcase 4:\nCREATE FOREIGN TABLE dates2 (\n\tname varchar(20),\n\tdate_as_text timestamp without time zone,\n\tdate_as_number double precision)\nSERVER sqlite_svr\nOPTIONS (table 'dates');\n\n-- Showing timestamp column from SQLite value as TEXT and as INTEGER/FLOAT has same value\n--Testcase 5:\nSELECT name,\n\tto_char(date_as_text, \t'YYYY-MM-DD HH24:MI:SS.MS') as date_as_text, \n\tto_char(date_as_number, 'YYYY-MM-DD HH24:MI:SS.MS') as date_as_number\nFROM dates1;\n--Testcase 6:\nSELECT * FROM dates2;\n\n-- Comparing exact values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 7:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 8:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 9:\nSELECT * FROM dates1\nWHERE date_as_text = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 10:\nSELECT * FROM dates1\nWHERE date_as_number = to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n-- Comparing greater values showing same results even comparing to a text source sqlite column or numerical source sqlite column\n--Testcase 11:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 12:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 13:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 14:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29.000', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 15:\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 16:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 17:\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--Testcase 18:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > to_timestamp('2020-05-10 10:45:29', 'YYYY-MM-DD HH24:MI:SS.MS');\n\n--- Comparing without using to_timestamp\n--Testcase 19:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 20:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 21:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 22:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 23:\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 24:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 25:\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 26:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number = (('2020-05-10 10:45:29')::timestamp);\n\n-- Comparing greater values  without using to_timestamp\n\n\n--Testcase 27:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 28:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 29:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 30:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29.000')::timestamp);\n\n--Testcase 31:\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 32:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_text > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 33:\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n--Testcase 34:\nexplain (verbose, costs off)\nSELECT * FROM dates1\nWHERE date_as_number > (('2020-05-10 10:45:29')::timestamp);\n\n-- test arithmetic with infinite timestamps\n--Testcase 39:\nCREATE FOREIGN TABLE inf_timestamp (\n\tt1\tTIMESTAMP ,\n\tt2\tTIMESTAMP,\n\tid \tint OPTIONS (key 'true'))\nSERVER sqlite_svr OPTIONS (table 'infinite_timestamp');;\n\n--Testcase 40:\nINSERT INTO inf_timestamp VALUES ('infinity'::timestamp, 'infinity'::timestamp);\n--Testcase 41:\nSELECT t1 - t2 FROM inf_timestamp;\n\n--Testcase 42:\nDELETE FROM inf_timestamp;\n--Testcase 43:\nINSERT INTO inf_timestamp VALUES ('infinity'::timestamp, '-infinity'::timestamp);\n--Testcase 44:\nSELECT t1 - t2 FROM inf_timestamp;\n\n--Testcase 45:\nDELETE FROM inf_timestamp;\n--Testcase 46:\nINSERT INTO inf_timestamp VALUES ('-infinity'::timestamp, 'infinity'::timestamp);\n--Testcase 47:\nSELECT t1 - t2 FROM inf_timestamp;\n\n--Testcase 48:\nDELETE FROM inf_timestamp;\n--Testcase 49:\nINSERT INTO inf_timestamp VALUES ('-infinity'::timestamp, '-infinity'::timestamp);\n--Testcase 50:\nSELECT t1 - t2 FROM inf_timestamp;\n\n--Testcase 51:\nDELETE FROM inf_timestamp;\n--Testcase 52:\nINSERT INTO inf_timestamp VALUES ('infinity'::timestamp, '1995-08-06 12:12:12'::timestamp);\n--Testcase 53:\nSELECT t1 - t2 FROM inf_timestamp;\n\n--Testcase 54:\nDELETE FROM inf_timestamp;\n--Testcase 55:\nINSERT INTO inf_timestamp VALUES ('-infinity'::timestamp, '1995-08-06 12:12:12'::timestamp);\n--Testcase 56:\nSELECT t1 - t2 FROM inf_timestamp;\n\n-- test age() with infinite timestamps\n--Testcase 58:\nDELETE FROM inf_timestamp;\n--Testcase 59:\nINSERT INTO inf_timestamp(t1) VALUES ('infinity'::timestamp);\n--Testcase 60:\nSELECT age(t1) FROM inf_timestamp;\n\n--Testcase 61:\nDELETE FROM inf_timestamp;\n--Testcase 62:\nINSERT INTO inf_timestamp(t1) VALUES ('-infinity'::timestamp);\n--Testcase 63:\nSELECT age(t1) FROM inf_timestamp;\n\n--Testcase 64:\nDELETE FROM inf_timestamp;\n--Testcase 65:\nINSERT INTO inf_timestamp VALUES ('infinity'::timestamp, 'infinity':: timestamp);\n--Testcase 66:\nSELECT age(t1, t2) FROM inf_timestamp;\n\n--Testcase 67:\nDELETE FROM inf_timestamp;\n--Testcase 68:\nINSERT INTO inf_timestamp VALUES ('infinity'::timestamp, '-infinity':: timestamp);\n--Testcase 69:\nSELECT age(t1, t2) FROM inf_timestamp;\n\n--Testcase 70:\nDELETE FROM inf_timestamp;\n--Testcase 71:\nINSERT INTO inf_timestamp VALUES ('-infinity'::timestamp, 'infinity':: timestamp);\n--Testcase 72:\nSELECT age(t1, t2) FROM inf_timestamp;\n\n--Testcase 73:\nDELETE FROM inf_timestamp;\n--Testcase 74:\nINSERT INTO inf_timestamp VALUES ('-infinity'::timestamp, '-infinity':: timestamp);\n--Testcase 75:\nSELECT age(t1, t2) FROM inf_timestamp;\n\n--Testcase 35:\nDROP FOREIGN TABLE dates1;\n--Testcase 36:\nDROP FOREIGN TABLE dates2;\n\n--Testcase 57:\nDROP FOREIGN TABLE inf_timestamp;\n--Testcase 37:\nDROP SERVER sqlite_svr;\n--Testcase 38:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/types/uuid.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 001:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 002:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 009:\nCREATE FOREIGN TABLE \"type_UUID\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid) SERVER sqlite_svr OPTIONS (table 'type_UUID');\n--Testcase 010:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE text;\n--Testcase 011:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (1, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 012:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 013:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 014:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 015:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 016:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (6, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 017:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (7, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 018:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (8, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 019:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (9, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 020:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (10, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 021:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (11, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 022:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (12, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 023:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 024:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (13, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 025:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (14, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 026:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (15, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11', 'hex'));\n--Testcase 027:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (16, decode('b0eebc999c0b4ef8bb6d6bb9bd380a12', 'hex'));\n--Testcase 028:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 029:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (17, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 030:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (18, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 031:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (19, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 032:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (20, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 033:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (21, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 034:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (22, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 035:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (23, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 036:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (24, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 037:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (25, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 038:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (26, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 039:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (27, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 040:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 041:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (28, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 042:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (ADD column_type 'BLOB');\n--Testcase 043:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (29, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');\n--Testcase 044:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (30, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11');\n--Testcase 045:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (31, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}');\n--Testcase 046:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (32, 'a0eebc999c0b4ef8bb6d6bb9bd380a11');\n--Testcase 047:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (33, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11');\n--Testcase 048:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (34, '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 049:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (35, 'b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12');\n--Testcase 050:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (36, 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12');\n--Testcase 051:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (37, '{b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12}');\n--Testcase 052:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (38, 'b0eebc999c0b4ef8bb6d6bb9bd380a12');\n--Testcase 053:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 054:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (40, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 055:\nEXPLAIN (VERBOSE, COSTS OFF)\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (39, 'b0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a12');\n--Testcase 056:\nCREATE FOREIGN TABLE \"type_UUID+\"( \"i\" int OPTIONS (key 'true'), \"u\" uuid, \"t\" text, \"l\" smallint) SERVER sqlite_svr OPTIONS (table 'type_UUID+');\n--Testcase 057:\nSELECT * FROM \"type_UUID+\";\n--Testcase 058:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 059:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 060:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 061:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 062:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 063:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" where \"u\" = 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11';\n--Testcase 064:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 065:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 066:\nSELECT * FROM \"type_UUID+\" where \"u\" = 'B0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A12';\n--Testcase 067:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 068:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 069:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 070:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"i\" = 25;\n--Testcase 071:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 072:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 073:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a12';\n--Testcase 074:\nSELECT * FROM \"type_UUID+\";\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11';\n--Testcase 076:\nSELECT * FROM \"type_UUID+\";\n--Testcase 077:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'TEXT');\n--Testcase 075:\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 076:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"u\" = 'b0eebc999c0b4ef8bb6d6bb9bd380a15';\n--Testcase 077:\nSELECT * FROM \"type_UUID+\";\n--Testcase 078:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (41, '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}');\n--Testcase 079:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 41;\n--Testcase 080:\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 081:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}';\n--Testcase 082:\nSELECT * FROM \"type_UUID+\";\n--Testcase 083:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" OPTIONS (SET column_type 'BLOB');\n--Testcase 084:\nEXPLAIN (VERBOSE, COSTS OFF)\nUPDATE \"type_UUID\" SET \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a15}' WHERE \"u\" = '{b0eebc99-9c0b4ef8-bb6d6bb9-00000a15}';\n--Testcase 085:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE bytea;\n--Testcase 086:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (42, decode('a0eebc999c0b4ef8bb6d6bb9bd380a11f1', 'hex'));\n--Testcase 087:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (43, decode('b0eebc999c0b4ef8bb6d6bb9bd380a', 'hex'));\n--Testcase 088:\nALTER FOREIGN TABLE \"type_UUID\" ALTER COLUMN \"u\" TYPE uuid;\n--Testcase 089:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 42;\n--Testcase 090:\nSELECT * FROM \"type_UUID+\" WHERE \"i\" = 43;\n--Testcase 091:\nEXPLAIN (VERBOSE, COSTS OFF)\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 092:\nDELETE FROM \"type_UUID\" WHERE \"i\" IN (42, 43);\n--Testcase 093:\nINSERT INTO \"type_UUID\" (\"i\", \"u\") VALUES (44, NULL);\n--Testcase 094:\nSELECT * FROM \"type_UUID+\";\n--Testcase 095:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 096:\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n--Testcase 097:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NULL;\n--Testcase 098:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT * FROM \"type_UUID+\" WHERE \"u\" IS NOT NULL;\n\n--Testcase 100:\nCREATE FOREIGN TABLE \"type_UUIDpk\" (col uuid OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 101:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (ADD column_type 'TEXT');\n--Testcase 102:\nINSERT INTO \"type_UUIDpk\" VALUES ('{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}');\n--Testcase 103:\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 104:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 105: ERR - primary key\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 106:\nALTER FOREIGN TABLE \"type_UUIDpk\" ALTER COLUMN col OPTIONS (SET column_type 'BLOB');\n--Testcase 107: NO ERR, but the same semantics!\nINSERT INTO \"type_UUIDpk\" VALUES ('{b0eebc99-9c0b4ef8-bb6d6bb9-bd380a12}');\n--Testcase 108:\nSELECT * FROM \"type_UUIDpk\";\n--Testcase 109:\nDELETE FROM \"type_UUIDpk\";\n\n--Testcase 200:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/with_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/with_gis_support/postgis.sql",
    "content": "--Testcase 2:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 3:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 4:\nCREATE EXTENSION IF NOT EXISTS postgis;\n--Testcase 5:\nCREATE EXTENSION postgis_raster;\n--Testcase 6:\nCREATE EXTENSION postgis_topology;\n\n-- TEST GIS DATA FROM UNION ASTRONOMIQUE INTERNATIONAL (国際天文学連合): MARS, Olympus mons\n--Testcase 11:\nCREATE SCHEMA \"♂\";\n--Testcase 12:\nCREATE TABLE \"♂\".\"テスト\" (\n\tid int4 NULL,\n\t\"UAI\" varchar(254) NULL,\n\t\"⌖\" public.geometry(point, 104904) NULL,\n\tgeom public.geometry(geometry, 104904) NULL,\n\t\"t₀\" date NULL,\n\t\"class\" text NULL,\n\t\"URL\" varchar(80) NULL\n);\n--Testcase 13: ETC...\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(991, 'Olympus Mons', 'SRID=104904;POINT (226.19749330952843 18.652758890345698)'::geometry, 'SRID=104904;MULTIPOLYGON (((223.78717231750488 23.3314151763916, 224.22803688049316 23.324007034301758, 224.32436180114746 23.5648136138916, 224.7186985015869 23.593564987182617, 224.79486274719238 23.45737648010254, 225.06530570983887 23.238798141479492, 225.67255210876465 23.437196731567383, 226.2211856842041 23.6611385345459, 226.5472011566162 23.65372657775879, 227.6215763092041 23.435148239135742, 228.19009590148926 23.390283584594727, 228.753023147583 23.24955177307129, 228.90711784362793 23.1943416595459, 229.23219108581543 23.004926681518555, 229.5288143157959 22.75514030456543, 229.87227058410645 22.442903518676758, 230.2469539642334 22.14628028869629, 230.7309169769287 21.927717208862305, 231.30854988098145 21.64670753479004, 231.85495948791504 21.084684371948242, 232.19841957092285 19.88258171081543, 231.88618278503418 18.47752571105957, 231.30854988098145 17.743772506713867, 231.21887397766113 17.218599319458008, 231.17812156677246 16.751802444458008, 230.97346687316895 16.353670120239258, 230.8327350616455 15.947111129760742, 230.62945365905762 15.478002548217773, 230.4574489593506 15.352907180786133, 230.20748329162598 15.29954719543457, 229.99631309509277 15.036508560180664, 229.72586631774902 14.640104293823242, 229.41096305847168 14.377065658569336, 228.98862266540527 14.10291862487793, 228.74040412902832 13.854700088500977, 228.5107135772705 13.83247184753418, 228.31806755065918 13.962137222290039, 227.93990516662598 13.929948806762695, 227.36133766174316 13.883039474487305, 227.04734230041504 13.813947677612305, 226.68895149230957 13.851762771606445, 226.4101276397705 13.839879989624023, 226.06347465515137 13.632848739624023, 225.7766170501709 13.617597579956055, 225.32925987243652 13.481771469116211, 224.76723670959473 13.591054916381836, 224.15838050842285 13.731557846069336, 223.12800407409668 14.106241226196289, 222.39425468444824 14.402864456176758, 221.67611503601074 14.918050765991211, 221.434663772583 15.403280258178711, 221.30129432678223 16.051607131958008, 221.0864200592041 16.410966873168945, 221.09012413024902 16.6591854095459, 221.1975612640381 17.09263801574707, 220.9971103668213 17.32316017150879, 220.75670051574707 17.422361373901367, 220.82338523864746 17.844701766967773, 221.18475532531738 18.073732376098633, 221.3567600250244 18.5584774017334, 221.40367317199707 19.10576820373535, 221.3567600250244 19.90325355529785, 221.42725563049316 20.59361457824707, 221.778959274292 21.40439796447754, 222.34188652038574 22.201879501342773, 223.01658821105957 23.272138595581055, 223.3759479522705 23.668546676635742, 223.3722438812256 23.675954818725586, 223.57600212097168 23.675954818725586, 223.70566749572754 23.542585372924805, 223.78717231750488 23.3314151763916)))'::geometry, '1973-01-01', 'mo', 'http://planetarynames.wr.usgs.gov/Feature/4453');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(248, 'Karzok', 'SRID=104904;POINT (228.262902951161 18.4035270924109)'::geometry, 'SRID=104904;MULTIPOLYGON (((228.269330978394 18.2748584747314, 228.266962051392 18.2748394012451, 228.264589309692 18.2748584747314, 228.26222038269 18.2749156951904, 228.259851455688 18.2750148773193, 228.257482528687 18.2751522064209, 228.255121231079 18.2753276824951, 228.252759933472 18.2755451202393, 228.250402450562 18.2757968902588, 228.248052597046 18.2760906219482, 228.245706558228 18.2764263153076, 228.243368148804 18.2767963409424, 228.241037368774 18.2772083282471, 228.23871421814 18.2776546478271, 228.236398696899 18.2781429290771, 228.234094619751 18.2786655426025, 228.231798171997 18.2792301177979, 228.229513168335 18.2798328399658, 228.227239608765 18.2804698944092, 228.224977493286 18.2811489105225, 228.222726821899 18.2818622589111, 228.220491409302 18.2826137542725, 228.218271255493 18.2833995819092, 228.216066360474 18.2842235565186, 228.213872909546 18.2850856781006, 228.211698532104 18.285982131958, 228.209539413452 18.2869167327881, 228.207399368286 18.2878856658936, 228.205278396606 18.2888889312744, 228.203172683716 18.2899265289307, 228.201089859009 18.2910022735596, 228.199026107788 18.2921085357666, 228.196981430054 18.2932529449463, 228.194959640503 18.2944278717041, 228.192956924438 18.2956371307373, 228.190980911255 18.2968769073486, 228.189023971558 18.2981548309326, 228.187093734741 18.2994594573975, 228.185186386108 18.3007984161377, 228.183305740356 18.3021678924561, 228.181447982788 18.3035678863525, 228.179616928101 18.3050022125244, 228.177812576294 18.3064632415771, 228.176038742065 18.307954788208, 228.174287796021 18.3094730377197, 228.172567367554 18.3110218048096, 228.170873641968 18.3126010894775, 228.16921043396 18.3142032623291, 228.16757774353 18.3158359527588, 228.165975570679 18.3174953460693, 228.164403915405 18.3191814422607, 228.162858963013 18.320894241333, 228.161352157593 18.3226299285889, 228.159872055054 18.3243923187256, 228.158430099487 18.3261775970459, 228.157014846802 18.3279857635498, 228.155637741089 18.3298168182373, 228.154294967651 18.3316707611084, 228.152982711792 18.3335475921631, 228.151708602905 18.3354473114014, 228.150468826294 18.337366104126, 228.149263381958 18.3393039703369, 228.148092269897 18.3412647247314, 228.14695930481 18.343240737915, 228.145864486694 18.3452396392822, 228.144804000854 18.3472537994385, 228.143781661987 18.3492832183838, 228.142793655396 18.3513317108154, 228.141847610474 18.3533954620361, 228.140939712524 18.3554744720459, 228.140066146851 18.3575687408447, 228.139234542847 18.3596782684326, 228.138441085815 18.3617992401123, 228.137685775757 18.3639354705811, 228.136972427368 18.3660831451416, 228.136297225952 18.3682422637939, 228.135660171509 18.3704090118408, 228.135065078735 18.3725872039795, 228.134511947632 18.37477684021, 228.133996963501 18.376974105835, 228.133520126343 18.3791828155518, 228.133085250854 18.3813953399658, 228.132692337036 18.3836154937744, 228.132341384888 18.3858432769775, 228.132028579712 18.3880748748779, 228.131757736206 18.3903102874756, 228.13152885437 18.3925533294678, 228.131341934204 18.39479637146, 228.131196975708 18.3970432281494, 228.131090164185 18.3992938995361, 228.131025314331 18.4015445709229, 228.131002426147 18.4037952423096, 228.131021499634 18.4060459136963, 228.13108253479 18.408296585083, 228.131185531616 18.4105472564697, 228.131326675415 18.4127941131592, 228.131513595581 18.4150371551514, 228.13173866272 18.4172801971436, 228.132005691528 18.4195156097412, 228.132314682007 18.4217510223389, 228.132661819458 18.4239749908447, 228.133054733276 18.4261989593506, 228.13348197937 18.4284114837646, 228.133955001831 18.4306163787842, 228.134466171265 18.4328174591064, 228.135019302368 18.4350070953369, 228.135610580444 18.4371852874756, 228.13624382019 18.4393558502197, 228.136919021606 18.4415149688721, 228.137628555298 18.4436626434326, 228.138380050659 18.4457988739014, 228.13917350769 18.4479236602783, 228.140001296997 18.4500331878662, 228.140871047974 18.452127456665, 228.141775131226 18.4542064666748, 228.142721176147 18.4562740325928, 228.143705368042 18.4583225250244, 228.144723892212 18.460355758667, 228.145784378052 18.4623699188232, 228.146879196167 18.4643688201904, 228.148008346558 18.4663486480713, 228.149175643921 18.4683094024658, 228.150381088257 18.4702472686768, 228.151620864868 18.4721698760986, 228.152894973755 18.4740695953369, 228.154203414917 18.4759464263916, 228.155546188354 18.47780418396, 228.156923294067 18.4796352386475, 228.158334732056 18.4814472198486, 228.159776687622 18.4832363128662, 228.161256790161 18.4849987030029, 228.162763595581 18.4867343902588, 228.164304733276 18.4884471893311, 228.16587638855 18.4901371002197, 228.167478561401 18.4917964935303, 228.169115066528 18.49342918396, 228.170778274536 18.4950351715088, 228.172468185425 18.4966144561768, 228.174192428589 18.4981670379639, 228.175939559937 18.4996891021729, 228.177717208862 18.5011806488037, 228.179521560669 18.5026454925537, 228.181352615356 18.5040760040283, 228.183210372925 18.5054798126221, 228.185094833374 18.5068492889404, 228.187002182007 18.5081920623779, 228.188936233521 18.50950050354, 228.190893173218 18.5107746124268, 228.192869186401 18.5120182037354, 228.194871902466 18.5132274627686, 228.196897506714 18.5144062042236, 228.198942184448 18.5155506134033, 228.201009750366 18.5166568756104, 228.203096389771 18.5177326202393, 228.205202102661 18.5187740325928, 228.207326889038 18.5197811126709, 228.209466934204 18.5207500457764, 228.211629867554 18.5216846466064, 228.213804244995 18.5225811004639, 228.21600151062 18.5234432220459, 228.218210220337 18.5242710113525, 228.220434188843 18.5250568389893, 228.22266960144 18.5258121490479, 228.224924087524 18.5265254974365, 228.227186203003 18.5272045135498, 228.229463577271 18.5278415679932, 228.23175239563 18.5284442901611, 228.234052658081 18.5290088653564, 228.236360549927 18.5295352935791, 228.238679885864 18.5300235748291, 228.241006851196 18.5304698944092, 228.243341445923 18.5308818817139, 228.245683670044 18.5312557220459, 228.248029708862 18.531587600708, 228.250383377075 18.5318813323975, 228.252744674683 18.5321369171143, 228.255109786987 18.5323505401611, 228.257474899292 18.5325298309326, 228.259847640991 18.5326671600342, 228.262216567993 18.5327663421631, 228.26459312439 18.5328235626221, 228.266965866089 18.5328426361084, 228.269342422485 18.5328235626221, 228.271715164185 18.5327625274658, 228.274087905884 18.5326671600342, 228.276456832886 18.5325298309326, 228.278825759888 18.5323505401611, 228.281187057495 18.5321369171143, 228.283548355103 18.5318813323975, 228.285902023315 18.531587600708, 228.288251876831 18.5312519073486, 228.290594100952 18.5308818817139, 228.292928695679 18.5304698944092, 228.295255661011 18.5300197601318, 228.297574996948 18.5295352935791, 228.299882888794 18.5290088653564, 228.302179336548 18.5284442901611, 228.304468154907 18.5278415679932, 228.306745529175 18.5272006988525, 228.309011459351 18.5265254974365, 228.311262130737 18.5258083343506, 228.313501358032 18.5250568389893, 228.315725326538 18.5242671966553, 228.317934036255 18.5234432220459, 228.320127487183 18.5225811004639, 228.322305679321 18.5216808319092, 228.324464797974 18.5207462310791, 228.326608657837 18.5197772979736, 228.328733444214 18.5187702178955, 228.330839157104 18.5177326202393, 228.332925796509 18.5166568756104, 228.334989547729 18.5155467987061, 228.337034225464 18.5144023895264, 228.339059829712 18.5132274627686, 228.341062545776 18.5120143890381, 228.343042373657 18.5107707977295, 228.344995498657 18.5094966888428, 228.346929550171 18.5081882476807, 228.348836898804 18.5068454742432, 228.350721359253 18.5054759979248, 228.352579116821 18.5040721893311, 228.354410171509 18.5026416778564, 228.356214523315 18.5011768341064, 228.357992172241 18.4996852874756, 228.359739303589 18.4981632232666, 228.361463546753 18.4966106414795, 228.363153457642 18.4950313568115, 228.364816665649 18.4934253692627, 228.366449356079 18.491792678833, 228.368055343628 18.4901294708252, 228.369626998901 18.4884433746338, 228.371168136597 18.4867305755615, 228.372674942017 18.4849910736084, 228.374151229858 18.4832286834717, 228.375597000122 18.4814434051514, 228.37700843811 18.4796314239502, 228.378385543823 18.4778003692627, 228.379728317261 18.4759426116943, 228.381036758423 18.4740619659424, 228.38231086731 18.4721660614014, 228.383550643921 18.4702434539795, 228.38475227356 18.4683017730713, 228.385919570923 18.4663410186768, 228.387052536011 18.4643650054932, 228.388147354126 18.462366104126, 228.389204025269 18.4603481292725, 228.390226364136 18.4583187103271, 228.391206741333 18.4562664031982, 228.392152786255 18.4542026519775, 228.393060684204 18.4521198272705, 228.393926620483 18.4500255584717, 228.394758224487 18.4479160308838, 228.395547866821 18.4457950592041, 228.396299362183 18.4436588287354, 228.397012710571 18.4415111541748, 228.39768409729 18.4393520355225, 228.398317337036 18.4371814727783, 228.398908615112 18.4349994659424, 228.399461746216 18.4328098297119, 228.399972915649 18.4306125640869, 228.40044593811 18.4284076690674, 228.400876998901 18.4261913299561, 228.401266098022 18.4239711761475, 228.401613235474 18.4217433929443, 228.401922225952 18.4195117950439, 228.402189254761 18.417272567749, 228.402414321899 18.4150333404541, 228.402597427368 18.4127864837646, 228.402742385864 18.4105396270752, 228.40284538269 18.4082927703857, 228.402902603149 18.406042098999, 228.402921676636 18.403787612915, 228.402898788452 18.4015369415283, 228.402837753296 18.3992862701416, 228.402730941772 18.3970394134521, 228.402585983276 18.3947887420654, 228.402395248413 18.3925457000732, 228.402166366577 18.3903064727783, 228.401895523071 18.3880672454834, 228.401586532593 18.385835647583, 228.401231765747 18.3836116790771, 228.400838851929 18.3813877105713, 228.40040397644 18.3791751861572, 228.399930953979 18.3769702911377, 228.399415969849 18.3747730255127, 228.398859024048 18.3725833892822, 228.398263931274 18.3704051971436, 228.397626876831 18.3682346343994, 228.396951675415 18.3660755157471, 228.396238327026 18.3639316558838, 228.395483016968 18.361795425415, 228.394689559937 18.3596744537354, 228.393857955933 18.3575649261475, 228.392988204956 18.3554706573486, 228.39207649231 18.3533916473389, 228.391130447388 18.3513278961182, 228.390146255493 18.3492794036865, 228.389120101929 18.3472461700439, 228.388063430786 18.3452320098877, 228.386964797974 18.3432369232178, 228.385831832886 18.3412609100342, 228.384660720825 18.3393001556396, 228.383455276489 18.3373622894287, 228.382215499878 18.3354434967041, 228.380941390991 18.3335437774658, 228.379629135132 18.3316669464111, 228.378286361694 18.32981300354, 228.376905441284 18.3279819488525, 228.375494003296 18.3261699676514, 228.374048233032 18.3243846893311, 228.37257194519 18.3226261138916, 228.371061325073 18.3208866119385, 228.369520187378 18.3191776275635, 228.367948532104 18.3174915313721, 228.366346359253 18.3158321380615, 228.364709854126 18.3141994476318, 228.363046646118 18.3125972747803, 228.361356735229 18.3110179901123, 228.359636306763 18.3094692230225, 228.357885360718 18.3079509735107, 228.356107711792 18.3064594268799, 228.354303359985 18.3049983978271, 228.352472305298 18.3035640716553, 228.350618362427 18.3021640777588, 228.348733901978 18.3007946014404, 228.346826553345 18.2994556427002, 228.344896316528 18.2981510162354, 228.342943191528 18.2968769073486, 228.340963363647 18.29563331604, 228.33896446228 18.2944240570068, 228.336938858032 18.293249130249, 228.334897994995 18.2921085357666, 228.332830429077 18.2909984588623, 228.33074760437 18.2899265289307, 228.328645706177 18.2888851165771, 228.3265209198 18.2878818511963, 228.324380874634 18.2869129180908, 228.322221755981 18.285982131958, 228.32004737854 18.2850856781006, 228.31785774231 18.2842235565186, 228.315649032593 18.2833995819092, 228.313428878784 18.2826099395752, 228.311193466187 18.2818584442139, 228.3089427948 18.2811450958252, 228.306684494019 18.2804698944092, 228.304410934448 18.2798290252686, 228.302125930786 18.2792301177979, 228.299829483032 18.2786655426025, 228.297521591187 18.2781391143799, 228.295206069946 18.2776546478271, 228.292882919312 18.2772045135498, 228.290552139282 18.2767963409424, 228.288213729858 18.2764225006104, 228.28586769104 18.2760906219482, 228.283517837524 18.2757968902588, 228.281160354614 18.2755451202393, 228.278802871704 18.2753276824951, 228.276437759399 18.2751522064209, 228.274072647095 18.2750148773193, 228.271703720093 18.2749156951904, 228.269330978394 18.2748584747314)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14144');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(249, 'Pangboche', 'SRID=104904;POINT (226.595873773026 17.2783598670807)'::geometry, 'SRID=104904;MULTIPOLYGON (((226.601442337036 17.1929302215576, 226.599878311157 17.1929187774658, 226.598310470581 17.1929302215576, 226.596746444702 17.1929721832275, 226.595178604126 17.1930370330811, 226.593618392944 17.1931285858154, 226.592054367065 17.1932430267334, 226.590497970581 17.1933879852295, 226.588941574097 17.1935558319092, 226.587385177612 17.193754196167, 226.585836410522 17.1939754486084, 226.58429145813 17.1942195892334, 226.582754135132 17.1944942474365, 226.581216812134 17.1947917938232, 226.57968711853 17.1951160430908, 226.578165054321 17.195463180542, 226.576650619507 17.195837020874, 226.57513999939 17.1962375640869, 226.573637008667 17.1966648101807, 226.572145462036 17.197114944458, 226.570657730103 17.1975879669189, 226.569181442261 17.1980876922607, 226.567712783813 17.1986103057861, 226.566255569458 17.1991596221924, 226.564809799194 17.1997318267822, 226.563371658325 17.2003269195557, 226.561948776245 17.20094871521, 226.56053352356 17.2015933990479, 226.559129714966 17.2022609710693, 226.557741165161 17.2029514312744, 226.556364059448 17.2036647796631, 226.555002212524 17.2044010162354, 226.553651809692 17.2051601409912, 226.552316665649 17.2059421539307, 226.550992965698 17.2067432403564, 226.549688339233 17.2075710296631, 226.54839515686 17.2084178924561, 226.547121047974 17.2092876434326, 226.545862197876 17.2101764678955, 226.544618606567 17.211088180542, 226.543394088745 17.2120189666748, 226.542184829712 17.2129688262939, 226.540990829468 17.2139415740967, 226.539819717407 17.2149333953857, 226.538663864136 17.2159404754639, 226.537527084351 17.2169704437256, 226.536409378052 17.2180194854736, 226.535310745239 17.219087600708, 226.534231185913 17.2201709747314, 226.533174514771 17.2212734222412, 226.532133102417 17.2223949432373, 226.531118392944 17.2235317230225, 226.530118942261 17.2246875762939, 226.529146194458 17.2258586883545, 226.528188705444 17.2270450592041, 226.527257919312 17.2282466888428, 226.526346206665 17.2294635772705, 226.525461196899 17.2306995391846, 226.52459526062 17.2319469451904, 226.523752212524 17.2332057952881, 226.522932052612 17.2344837188721, 226.522138595581 17.2357730865479, 226.521364212036 17.2370738983154, 226.520616531372 17.2383899688721, 226.519891738892 17.2397136688232, 226.519193649292 17.2410526275635, 226.518518447876 17.2424030303955, 226.517869949341 17.2437648773193, 226.517244338989 17.245138168335, 226.516641616821 17.2465190887451, 226.516069412231 17.2479114532471, 226.515520095825 17.2493152618408, 226.514993667603 17.2507228851318, 226.514497756958 17.2521419525146, 226.514024734497 17.253568649292, 226.513578414917 17.2550029754639, 226.513158798218 17.2564449310303, 226.512765884399 17.2578945159912, 226.512399673462 17.2593479156494, 226.512060165405 17.2608089447021, 226.511747360229 17.2622776031494, 226.511461257935 17.2637462615967, 226.511201858521 17.2652225494385, 226.510969161987 17.2667026519775, 226.510766983032 17.2681865692139, 226.510587692261 17.2696743011475, 226.51043510437 17.2711620330811, 226.510313034058 17.2726535797119, 226.510217666626 17.27414894104, 226.510149002075 17.2756404876709, 226.510107040405 17.277135848999, 226.510091781616 17.2786350250244, 226.510103225708 17.2801303863525, 226.510145187378 17.2816257476807, 226.510213851929 17.2831211090088, 226.510305404663 17.2846164703369, 226.510431289673 17.2861080169678, 226.510580062866 17.2875957489014, 226.51075553894 17.289083480835, 226.510957717896 17.2905673980713, 226.511190414429 17.2920475006104, 226.511449813843 17.2935237884521, 226.51173210144 17.2949924468994, 226.512044906616 17.2964611053467, 226.512384414673 17.2979221343994, 226.51275062561 17.2993755340576, 226.513139724731 17.3008251190186, 226.513559341431 17.302267074585, 226.514001846313 17.3037014007568, 226.514474868774 17.3051280975342, 226.514970779419 17.306547164917, 226.515493392944 17.3079586029053, 226.516042709351 17.309362411499, 226.51661491394 17.310754776001, 226.517213821411 17.3121356964111, 226.517839431763 17.3135089874268, 226.518487930298 17.3148708343506, 226.519163131714 17.3162212371826, 226.519861221313 17.3175601959229, 226.520586013794 17.3188877105713, 226.521333694458 17.3202037811279, 226.522104263306 17.3215045928955, 226.522897720337 17.3227939605713, 226.523717880249 17.3240718841553, 226.524557113647 17.3253345489502, 226.525423049927 17.3265819549561, 226.52631187439 17.3278141021729, 226.527219772339 17.3290348052979, 226.528150558472 17.3302364349365, 226.529108047485 17.3314228057861, 226.530080795288 17.3325939178467, 226.531076431274 17.3337497711182, 226.532094955444 17.3348903656006, 226.533132553101 17.3360080718994, 226.53419303894 17.3371143341064, 226.535272598267 17.3381977081299, 226.536371231079 17.3392658233643, 226.537488937378 17.3403148651123, 226.538625717163 17.341344833374, 226.539781570435 17.3423557281494, 226.540952682495 17.3433475494385, 226.542146682739 17.3443202972412, 226.543355941772 17.3452739715576, 226.544580459595 17.3462047576904, 226.545824050903 17.3471164703369, 226.547082901001 17.3480052947998, 226.548360824585 17.3488750457764, 226.549654006958 17.3497219085693, 226.550958633423 17.350549697876, 226.552282333374 17.351354598999, 226.553617477417 17.3521366119385, 226.554967880249 17.3528957366943, 226.55633354187 17.3536319732666, 226.557710647583 17.3543453216553, 226.559099197388 17.3550395965576, 226.560503005981 17.3557071685791, 226.561918258667 17.356351852417, 226.563344955444 17.356969833374, 226.564783096313 17.3575687408447, 226.566232681274 17.3581409454346, 226.56768989563 17.3586902618408, 226.569158554077 17.3592128753662, 226.570634841919 17.359712600708, 226.572122573853 17.3601894378662, 226.573617935181 17.3606395721436, 226.575120925903 17.36106300354, 226.576631546021 17.3614635467529, 226.578149795532 17.361837387085, 226.579675674438 17.3621883392334, 226.581205368042 17.362512588501, 226.58274269104 17.3628101348877, 226.584283828735 17.3630847930908, 226.585828781128 17.3633289337158, 226.587377548218 17.3635501861572, 226.588933944702 17.363748550415, 226.590490341187 17.3639163970947, 226.592050552368 17.3640613555908, 226.593614578247 17.3641757965088, 226.595178604126 17.3642673492432, 226.596746444702 17.3643321990967, 226.598314285278 17.3643741607666, 226.599882125854 17.3643856048584, 226.601449966431 17.3643741607666, 226.603017807007 17.3643321990967, 226.604581832886 17.3642673492432, 226.606145858765 17.3641757965088, 226.607709884644 17.3640613555908, 226.609270095825 17.3639163970947, 226.610830307007 17.3637447357178, 226.612382888794 17.3635501861572, 226.613931655884 17.3633289337158, 226.615480422974 17.3630809783936, 226.617021560669 17.3628101348877, 226.618558883667 17.362512588501, 226.620088577271 17.3621883392334, 226.621610641479 17.361837387085, 226.623128890991 17.3614635467529, 226.624639511108 17.36106300354, 226.626142501831 17.3606395721436, 226.627637863159 17.3601856231689, 226.629125595093 17.359712600708, 226.630601882935 17.3592128753662, 226.632070541382 17.3586902618408, 226.633531570435 17.3581409454346, 226.634977340698 17.3575687408447, 226.636415481567 17.356969833374, 226.637842178345 17.3563480377197, 226.63925743103 17.3557033538818, 226.640661239624 17.3550357818604, 226.642049789429 17.3543453216553, 226.643426895142 17.3536319732666, 226.644792556763 17.3528957366943, 226.646142959595 17.3521327972412, 226.647478103638 17.3513507843018, 226.648801803589 17.3505458831787, 226.650110244751 17.3497219085693, 226.651399612427 17.3488750457764, 226.652677536011 17.3480052947998, 226.653936386108 17.3471126556396, 226.655179977417 17.3462009429932, 226.656408309937 17.3452701568604, 226.65761756897 17.3443202972412, 226.658807754517 17.3433475494385, 226.659982681274 17.3423557281494, 226.661138534546 17.341344833374, 226.662275314331 17.3403148651123, 226.66339302063 17.3392658233643, 226.664487838745 17.3381977081299, 226.665567398071 17.3371105194092, 226.666627883911 17.3360080718994, 226.667665481567 17.3348865509033, 226.668684005737 17.3337459564209, 226.669679641724 17.3325939178467, 226.670656204224 17.3314228057861, 226.67160987854 17.3302326202393, 226.672540664673 17.3290309906006, 226.673448562622 17.3278141021729, 226.674337387085 17.3265781402588, 226.675203323364 17.3253307342529, 226.676042556763 17.324068069458, 226.676862716675 17.3227939605713, 226.677656173706 17.3215007781982, 226.678426742554 17.3201999664307, 226.679174423218 17.318883895874, 226.679899215698 17.3175563812256, 226.680597305298 17.3162174224854, 226.681272506714 17.3148670196533, 226.681921005249 17.3135051727295, 226.682546615601 17.3121318817139, 226.683145523071 17.3107509613037, 226.683717727661 17.3093585968018, 226.684267044067 17.307954788208, 226.684789657593 17.3065433502197, 226.685285568237 17.3051242828369, 226.685754776001 17.3036975860596, 226.686201095581 17.3022632598877, 226.686616897583 17.3008213043213, 226.687009811401 17.2993717193604, 226.687376022339 17.2979183197021, 226.687715530396 17.2964572906494, 226.688024520874 17.2949886322021, 226.688310623169 17.2935199737549, 226.688570022583 17.2920436859131, 226.688798904419 17.290563583374, 226.689004898071 17.2890796661377, 226.689180374146 17.2875919342041, 226.689329147339 17.2861042022705, 226.689451217651 17.2846126556396, 226.689546585083 17.2831172943115, 226.689615249634 17.2816219329834, 226.689653396606 17.2801265716553, 226.689668655396 17.2786312103271, 226.689653396606 17.277135848999, 226.689611434937 17.2756366729736, 226.689542770386 17.2741451263428, 226.689443588257 17.2726497650146, 226.689321517944 17.2711582183838, 226.689168930054 17.2696704864502, 226.688993453979 17.2681827545166, 226.688787460327 17.2666988372803, 226.688554763794 17.2652187347412, 226.68829536438 17.2637424468994, 226.688009262085 17.2622737884521, 226.687696456909 17.2608051300049, 226.687356948853 17.2593441009521, 226.686990737915 17.2578907012939, 226.686597824097 17.256441116333, 226.686178207397 17.2549991607666, 226.685731887817 17.2535648345947, 226.685258865356 17.2521381378174, 226.684762954712 17.2507190704346, 226.684236526489 17.2493114471436, 226.683687210083 17.2479076385498, 226.683115005493 17.2465152740479, 226.682512283325 17.2451343536377, 226.681886672974 17.2437610626221, 226.681238174438 17.2424030303955, 226.680562973022 17.2410526275635, 226.679864883423 17.2397136688232, 226.679140090942 17.2383861541748, 226.678392410278 17.2370700836182, 226.677618026733 17.2357692718506, 226.676824569702 17.2344799041748, 226.67600440979 17.2332057952881, 226.675161361694 17.2319431304932, 226.674295425415 17.2306957244873, 226.673410415649 17.2294635772705, 226.672498703003 17.2282428741455, 226.671564102173 17.2270412445068, 226.670610427856 17.2258548736572, 226.669637680054 17.2246837615967, 226.66863822937 17.2235317230225, 226.6676197052 17.22239112854, 226.666582107544 17.2212734222412, 226.665525436401 17.2201709747314, 226.664445877075 17.2190837860107, 226.663347244263 17.2180194854736, 226.662229537964 17.2169704437256, 226.661092758179 17.2159404754639, 226.659936904907 17.2149295806885, 226.658761978149 17.2139377593994, 226.657571792603 17.2129650115967, 226.656362533569 17.2120151519775, 226.655138015747 17.2110843658447, 226.653894424438 17.2101726531982, 226.652635574341 17.2092838287354, 226.651357650757 17.2084140777588, 226.650068283081 17.2075672149658, 226.648759841919 17.2067432403564, 226.647439956665 17.2059383392334, 226.646104812622 17.2051563262939, 226.64475440979 17.2043972015381, 226.643388748169 17.2036609649658, 226.642011642456 17.2029476165771, 226.640623092651 17.2022571563721, 226.639223098755 17.2015895843506, 226.637807846069 17.2009449005127, 226.636381149292 17.2003269195557, 226.63494682312 17.1997318267822, 226.633497238159 17.1991558074951, 226.632040023804 17.1986103057861, 226.630575180054 17.1980838775635, 226.629095077515 17.1975879669189, 226.627611160278 17.1971111297607, 226.62611579895 17.1966609954834, 226.624616622925 17.1962375640869, 226.623106002808 17.195837020874, 226.621587753296 17.195463180542, 226.620065689087 17.1951160430908, 226.618535995483 17.1947917938232, 226.617002487183 17.1944942474365, 226.615461349487 17.1942195892334, 226.613916397095 17.1939716339111, 226.612367630005 17.1937503814697, 226.610815048218 17.1935558319092, 226.609258651733 17.1933879852295, 226.607698440552 17.1932430267334, 226.60613822937 17.1931285858154, 226.604574203491 17.1930370330811, 226.603010177612 17.1929721832275, 226.601442337036 17.1929302215576)))'::geometry, '2006-01-01', 'aa', 'http://planetarynames.wr.usgs.gov/Feature/14145');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1849, 'Hermes Patera', 'SRID=104904;POINT (226.57 18.33)'::geometry, 'SRID=104904;POLYGON ((226.27743530274 18.067016601562, 226.25820922852 18.135681152343, 226.255462646485 18.216705322265124, 226.26507568359813 18.293609619139627, 226.25614929199594 18.331375122069314, 226.26095581055 18.369140624999, 226.28842163086 18.465270996093, 226.35159301758 18.528442382812, 226.44772338867 18.577880859374, 226.48480224609438 18.594360351561626, 226.52462768555 18.6026000976555, 226.57955932617 18.608093261718, 226.68118286133 18.586120605468, 226.70590209961 18.569641113281, 226.74435424805 18.539428710937, 226.78555297852 18.514709472656, 226.83224487305 18.498229980468, 226.86932373046687 18.488616943359126, 226.89404296875 18.4721374511715, 226.90090942383 18.451538085937, 226.90640258789 18.410339355468, 226.91189575195 18.380126953124, 226.92013549805 18.322448730468, 226.90640258789 18.251037597656, 226.87344360352 18.187866210937, 226.82949829102 18.146667480468, 226.79379272461 18.113708496093, 226.77456665039 18.102722167968, 226.72787475586 18.119201660156, 226.68392944336 18.141174316406, 226.63723754883125 18.15490722656175, 226.58779907226562 18.14254760742125, 226.56033325195 18.121948242187, 226.52188110352 18.088989257812, 226.48617553711 18.067016601562, 226.45321655274 18.083496093749, 226.38729858399 18.086242675781, 226.32412719727 18.078002929687, 226.27743530274 18.067016601562))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15690');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1688, 'Olympus Rupes', 'SRID=104904;POINT (226.43548539543502 18.401964175317982)'::geometry, 'SRID=104904;MULTILINESTRING ((227.42951774597168 22.934080123901367, 227.93671226501465 22.65593910217285, 228.34573936462402 22.4268856048584, 228.52571296691895 22.295995712280273, 228.67296028137207 22.099660873413086, 228.96746253967285 22.099660873413086, 229.62190437316895 21.739717483520508, 230.1290988922119 21.477941513061523, 230.35815620422363 21.26524543762207, 230.38258171081543 21.086992263793945, 230.2117748260498 20.55558967590332, 230.71787071228027 19.182798385620117, 230.8653507232666 18.500219345092773, 230.8653507232666 18.058469772338867, 230.8653507232666 17.96030616760254, 230.88171195983887 16.978639602661133, 230.9144344329834 16.635053634643555, 230.73446083068848 16.389638900756836, 230.6690158843994 16.242387771606445, 230.55448722839355 15.980611801147461, 230.45632362365723 15.816999435424805, 230.35815620422363 15.506139755249023, 230.0472927093506 15.457056045532227, 229.83220100402832 15.140348434448242, 229.54010200500488 14.73716926574707, 229.22923851013184 14.442667007446289, 228.86929512023926 14.213613510131836, 228.5420742034912 14.05000114440918, 228.2148494720459 14.148168563842773, 227.8221836090088 14.148168563842773, 227.2168254852295 13.984556198120117, 226.85687828063965 13.968194961547852, 226.49693489074707 14.05000114440918, 226.0879077911377 13.77186393737793, 225.80977058410645 13.755502700805664, 225.55567741394043 13.881429672241211, 225.3911952972412 14.058565139770508, 224.9426326751709 14.73716926574707, 224.76265907287598 14.73716926574707, 224.36999320983887 14.573556900024414, 223.97732734680176 14.802610397338867, 223.29015922546387 15.12983512878418, 222.70116233825684 15.391611099243164, 222.4393825531006 15.40797233581543, 221.93218803405762 15.40797233581543, 221.57224464416504 15.66975212097168, 221.4413547515869 16.09514045715332, 221.3431911468506 16.700498580932617, 221.39227104187012 17.07680320739746, 221.16321754455566 17.404027938842773, 220.89009284973145 17.53165626525879, 220.90144157409668 17.84577751159668, 221.14274787902832 17.76296043395996, 221.52316093444824 17.61672019958496, 221.86674308776855 18.074831008911133, 222.06307792663574 18.614748001098633, 221.8994655609131 18.860166549682617, 221.6376895904541 19.252832412719727, 221.62132835388184 19.59641456604004, 221.7358570098877 20.185415267944336, 221.94854927062988 20.774412155151367, 222.079439163208 21.26524543762207, 222.48846626281738 21.854246139526367, 222.99566078186035 22.508691787719727, 223.43741035461426 22.934080123901367, 223.78099250793457 23.13041114807129, 224.04277229309082 23.064966201782227, 224.3045482635498 22.999521255493164, 224.72993659973145 22.934080123901367, 224.9917163848877 22.88499641418457, 225.2862148284912 22.934080123901367, 225.72796440124512 23.01588249206543, 226.2351589202881 23.146772384643555, 226.61146354675293 23.27766227722168, 227.05321311950684 23.097688674926758, 227.42951774597168 22.934080123901367))'::geometry, '1976-01-01', 'ru', 'http://planetarynames.wr.usgs.gov/Feature/4454');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1847, 'Zeus Patera', 'SRID=104904;POINT (227.07 18.39)'::geometry, 'SRID=104904;POLYGON ((226.50457763673 18.675384521485, 226.51556396485 18.70834350586, 226.55401611329 18.766021728516, 226.6254272461 18.820953369141, 226.71881103516 18.853912353516, 226.82043457032 18.886871337891, 226.91107177735 18.886871337891, 226.99621582032 18.875885009766, 227.03741455079 18.873138427735, 226.99346923829 18.831939697266, 226.97973632813 18.77426147461, 226.99896240235 18.702850341797, 227.06213378907 18.631439208985, 227.15002441407 18.584747314454, 227.23516845704 18.568267822266, 227.30383300781875 18.59024047851625, 227.33404541016 18.628692626954, 227.34503173829 18.658905029297, 227.39721679688 18.587493896485, 227.42742919923 18.494110107422, 227.42193603516 18.408966064454, 227.39996337891 18.315582275391, 227.39172363282 18.227691650391, 227.34228515626 18.123321533204, 227.29559326173 18.018951416016, 227.21319580079 17.942047119141, 227.15551757813 17.903594970704, 227.09783935548 17.876129150391, 227.00170898438 17.845916748047, 226.9330444336 17.840423583985, 226.88635253907 17.840423583985, 226.90832519532 17.876129150391, 226.91381835938 17.925567626954, 226.90283203126 17.972259521485, 226.87536621094 18.021697998047, 226.82318115235 18.062896728516, 226.77923583985 18.098602294922, 226.83691406251 18.156280517579, 226.88360595704 18.233184814454, 226.91107177735 18.315582275391, 226.8890991211 18.40072631836, 226.88085937501 18.474884033204, 226.83142089844 18.507843017579, 226.72430419923 18.546295166016, 226.67761230469 18.584747314454, 226.6254272461 18.614959716797, 226.58972167969 18.617706298829, 226.62817382813 18.645172119141, 226.67761230469 18.650665283204, 226.61993408204 18.661651611329, 226.56500244141 18.64242553711, 226.4935913086 18.653411865235, 226.50457763673 18.675384521485))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15689');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1848, 'Athena Patera', 'SRID=104904;POINT (227.18 18.74)'::geometry, 'SRID=104904;POLYGON ((227.0290374756 18.766021728515, 227.04002380372 18.807220458984, 227.06062316896 18.840179443359, 227.08259582521 18.867645263671, 227.12928771974 18.880004882812, 227.17597961427 18.877258300781, 227.22541809083 18.866271972656, 227.28172302247 18.825073242187, 227.31605529786 18.775634765624, 227.328414917 18.731689453124, 227.33116149903 18.691864013671, 227.30369567872 18.656158447265, 227.2844696045 18.619079589843, 227.23915100099 18.599853515624, 227.18147277833 18.599853515624, 227.10594177247 18.624572753906, 227.05513000489 18.665771484374, 227.02491760255 18.705596923828, 227.0207977295 18.744049072265, 227.0290374756 18.766021728515))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15693');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1850, 'Apollo Patera', 'SRID=104904;POINT (226.45 17.94)'::geometry, 'SRID=104904;POLYGON ((226.28540039064 17.909774780272, 226.27441406252 17.938613891601, 226.26754760744 17.981185913085, 226.27716064455 18.027877807616, 226.30325317385 18.074569702147, 226.35818481447 18.091049194335, 226.40075683596 18.091049194335, 226.46804809572 18.073196411132, 226.52572631838 18.045730590819, 226.56967163088 18.023757934569, 226.63146972658 17.946853637694, 226.63558959963 17.878189086913, 226.62185668947 17.83836364746, 226.61911010744 17.806777954101, 226.59439086916 17.788925170897, 226.52847290041 17.780685424804, 226.45980834963 17.808151245116, 226.40899658205 17.832870483397, 226.37878417971 17.841110229491, 226.33758544924 17.864456176757, 226.30462646486 17.887802124022, 226.28540039064 17.909774780272))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15694');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1851, 'Olympus Paterae', 'SRID=104904;POINT (226.81 18.32)'::geometry, 'SRID=104904;POLYGON ((226.14367675781 18.452911376953, 226.16564941406 18.513336181641, 226.2041015625 18.554534912109, 226.23431396484 18.592987060547, 226.30572509766 18.625946044922, 226.36889648438 18.650665283203, 226.42108154297 18.653411865234, 226.45678710938 18.642425537109, 226.49249267578 18.700103759766, 226.54193115234 18.755035400391, 226.58312988281 18.809967041016, 226.65454101563 18.845672607422, 226.72320556641 18.870391845703, 226.82757568359 18.895111083984, 226.88525390625 18.911590576172, 226.96545410157 18.900604248046, 227.0121459961 18.900604248046, 227.04785156251 18.889617919921, 227.08355712891 18.906097412109, 227.13299560548 18.917083740234, 227.21813964844 18.911590576171, 227.28405761719 18.875885009765, 227.33349609376 18.829193115234, 227.37194824219 18.771514892578, 227.37744140626 18.735809326171, 227.38156127930375 18.711776733397812, 227.3808746337928 18.69255065917931, 227.37469482423 18.675384521484, 227.40216064454 18.620452880859, 227.43237304688 18.571014404296, 227.4515991211 18.496856689453, 227.45709228516 18.441925048828, 227.44885253907 18.38150024414, 227.44061279298 18.323822021484, 227.43237304688 18.277130126953, 227.41589355469 18.202972412109, 227.38018798829 18.120574951171, 227.34448242188 18.05191040039, 227.31701660157 17.999725341796, 227.26757812501 17.950286865234, 227.22088623048 17.911834716796, 227.17419433594 17.870635986328, 227.12475585938 17.848663330078, 227.03686523438 17.821197509765, 226.97918701173 17.801971435546, 226.88580322266 17.815704345703, 226.85009765626 17.790985107421, 226.81439208985 17.769012451171, 226.7484741211 17.741546630859, 226.68530273438 17.733306884765, 226.62762451173 17.738800048828, 226.57543945313 17.736053466796, 226.50128173829 17.72232055664, 226.39416503907 17.758026123046, 226.32550048829 17.78823852539, 226.29803466798 17.823944091796, 226.27056884766 17.843170166015, 226.21289062501 17.89810180664, 226.20465087891 17.966766357421, 226.22937011719 18.035430908203, 226.20465087891 18.084869384765, 226.18267822266 18.13980102539, 226.17169189454 18.18374633789, 226.17993164063 18.20571899414, 226.15795898438 18.252410888671, 226.13873291016 18.318328857421, 226.13049316407 18.389739990234, 226.14367675781 18.452911376953))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15695');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1870, 'Dionysus Patera', 'SRID=104904;POINT (226.77 17.96)'::geometry, 'SRID=104904;POLYGON ((226.53973388672 18.046417236328, 226.564453125 18.082122802735, 226.60015869141 18.11508178711, 226.64410400391 18.134307861328, 226.71826171875 18.117828369141, 226.77868652344 18.09310913086, 226.83361816406 18.043670654297, 226.87756347656 17.988739013672, 226.89129638672 17.936553955078, 226.8720703125 17.870635986328, 226.828125 17.82943725586, 226.7484741211 17.799224853516, 226.68530273438 17.793731689453, 226.64959716797 17.78549194336, 226.61389160156 17.782745361328, 226.63037109375 17.848663330078, 226.63037109375 17.914581298828, 226.62213134766 17.972259521485, 226.58093261719 18.021697998047, 226.53973388672 18.046417236328))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15692');\nINSERT INTO \"♂\".\"テスト\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(1871, 'Hera Patera', 'SRID=104904;POINT (226.23 18.45)'::geometry, 'SRID=104904;POLYGON ((226.21000671387 18.244171142578, 226.18116760254063 18.30047607421875, 226.17567443848188 18.347167968749623, 226.17155456543125 18.41445922851525, 226.19902038575 18.489990234375377, 226.24021911621563 18.549041748046875, 226.32124328613438 18.602600097655873, 226.37892150879125 18.616333007812376, 226.44209289551 18.61083984375, 226.396774292 18.582000732422, 226.3610687255875 18.55316162109375, 226.31986999512 18.511962890625, 226.2827911377 18.474884033203, 226.27043151856 18.428192138672, 226.24845886231 18.367767333984, 226.24021911621 18.21533203125, 226.21000671387 18.244171142578))'::geometry, '2017-10-16', 'pe', 'http://planetarynames.wr.usgs.gov/Feature/15691');\n\n-- TEST GIS DATA FROM OPENSTREETMAP: EARTH, Ancienne Sylvie\n--Testcase 14:\nCREATE TABLE \"♁\" (\n\tgeom public.geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int8 NOT NULL,\n\tver int2 NOT NULL,\n\tarr _int8 NULL,\n\tt json NULL\n);\n--Testcase 15: ETC...\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4596087 59.6907755)'::geometry, 'node', 1621246531, 4, NULL, '{\"drain\":\"disperse\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601391 59.6904673)'::geometry, 'node', 1621246620, 24, NULL, '{\"access\":\"yes\",\"addr:housenumber\":\"20 литВЕ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Ж.-Ф. Тома де Томон\",\"barrier\":\"gate\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6458/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Ворота памятника Любезным родителям\",\"ref:okn\":\"781610399040286\",\"start_date\":\"1807\",\"tourism\":\"attraction\",\"wikidata\":\"Q118122048\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617098 59.6910199)'::geometry, 'node', 1632220259, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617672 59.6909141)'::geometry, 'node', 1632220283, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461757 59.6909696)'::geometry, 'node', 1632220292, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614802 59.6907676)'::geometry, 'node', 1632220315, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615866 59.6907823)'::geometry, 'node', 1632220319, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611444 59.6908848)'::geometry, 'node', 1632220350, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611916 59.6908345)'::geometry, 'node', 1632220355, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.46127 59.6907954)'::geometry, 'node', 1632220358, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611342 59.6909402)'::geometry, 'node', 1632220359, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614212 59.6910868)'::geometry, 'node', 1632220364, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611621 59.6909941)'::geometry, 'node', 1632220366, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616766 59.6908145)'::geometry, 'node', 1632220378, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616314 59.691059)'::geometry, 'node', 1632220590, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613148 59.6910721)'::geometry, 'node', 1632220686, 4, NULL, '{\"genus\":\"Quercus\",\"height\":\"18\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\",\"natural\":\"tree\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613385 59.6907988)'::geometry, 'node', 1632497609, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6476/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Euterpe\",\"material\":\"metal\",\"name\":\"Эвтерпа\",\"name:el\":\"Εὐτέρπη\",\"name:la\":\"Euterpē\",\"name:uk\":\"Евтерпа\",\"name:zh\":\"欧忒耳佩\",\"note\":\"Ошибочно подписано «Clio»\",\"ref\":\"П-61/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614438 59.6907856)'::geometry, 'node', 1632497610, 30, NULL, '{\"alt_name:el\":\"Χλωρίς\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1796\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6475/\",\"historic\":\"yes\",\"historic:start_date\":\"1796\",\"int_name\":\"Flore\",\"material\":\"metal\",\"name\":\"Флора\",\"name:el\":\"Φλόρα\",\"name:en\":\"Flora\",\"ref\":\"П-62/1\",\"ref:okn\":\"781610399040456\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461244 59.690833)'::geometry, 'node', 1632497611, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6470/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Melpomene\",\"material\":\"metal\",\"name\":\"Мельпомена\",\"name:el\":\"Μελπομένη\",\"name:en\":\"Melpomene\",\"name:la\":\"Melpomenē\",\"name:uk\":\"Мельпомена\",\"name:zh\":\"墨爾波墨涅\",\"ref\":\"П-60/1\",\"ref:okn\":\"781610399040376\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617227 59.6909514)'::geometry, 'node', 1632497612, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6468/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Caliope\",\"material\":\"metal\",\"name\":\"Калиопа\",\"name:el\":\"Καλλιόπη\",\"name:la\":\"Calliopē\",\"name:uk\":\"Калліопа\",\"name:zh\":\"卡利俄佩\",\"ref\":\"П-65/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q120979306\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615805 59.6907985)'::geometry, 'node', 1632497613, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1795\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6474/\",\"historic\":\"yes\",\"historic:start_date\":\"1795\",\"int_name\":\"Uranie\",\"material\":\"metal\",\"name\":\"Урания\",\"name:el\":\"Οὐρανία\",\"name:la\":\"Ūrania\",\"ref\":\"П-63/1\",\"ref:okn\":\"78161039904044\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616825 59.6908428)'::geometry, 'node', 1632497614, 29, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6469/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"material\":\"metal\",\"name\":\"Клио\",\"name:el\":\"Κλειώ\",\"name:la\":\"Clīō\",\"note\":\"Подписано «Euterpe»\",\"ref\":\"П-64/1\",\"ref:okn\":\"781610399040466\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614541 59.6909278)'::geometry, 'node', 1632497615, 34, NULL, '{\"alt_name\":\"Аполлон Бельведерский\",\"artist_name\":\"Леохар;модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1782\",\"artwork_type\":\"statue\",\"description\":\"Иконография Бельведерского типа. В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"5\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6466/\",\"historic\":\"yes\",\"historic:start_date\":\"1782\",\"material\":\"metal\",\"name\":\"Аполлон\",\"name:en\":\"Apollo\",\"name:zh\":\"阿波罗神像\",\"ref\":\"П-71/1\",\"ref:okn\":\"781610399040386\",\"start_date\":\"1817\",\"tourism\":\"artwork\",\"wikidata\":\"Q118122062\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616021 59.6910564)'::geometry, 'node', 1632497616, 26, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1780\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"historic\":\"yes\",\"historic:start_date\":\"1780\",\"material\":\"metal\",\"name\":\"Венера Каллипиги\",\"ref\":\"П-67/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616651 59.6910293)'::geometry, 'node', 1632497617, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6471/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Polymnia\",\"material\":\"metal\",\"name\":\"Полигимния\",\"name:el\":\"Πολύμνια\",\"name:la\":\"Polyhymnia\",\"name:uk\":\"Полігімнія\",\"name:zh\":\"波吕许谟尼亚\",\"ref\":\"П-66/1\",\"ref:okn\":\"781610399040726\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395079\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614666 59.6910732)'::geometry, 'node', 1632497618, 30, NULL, '{\"alt_name\":\"Гермес Флорентийский\",\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6467/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Hermes\",\"material\":\"metal\",\"name\":\"Меркурий\",\"name:en\":\"Mercury\",\"ref\":\"П-68/1\",\"ref:okn\":\"781610399040396\",\"start_date\":\"1810\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395060\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613231 59.6910597)'::geometry, 'node', 1632497619, 30, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1793\",\"artwork_subject:wikidata\":\"Q104413\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6477/\",\"historic\":\"yes\",\"historic:start_date\":\"1793\",\"int_name\":\"Erato\",\"material\":\"metal\",\"name\":\"Эрато\",\"name:el\":\"Ἐρατώ\",\"name:ka\":\"ერატო\",\"name:ko\":\"에라토\",\"name:la\":\"Eratō\",\"name:uk\":\"Ерато\",\"name:zh\":\"厄剌托\",\"ref\":\"П-69/1\",\"ref:okn\":\"781610399040476\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395110\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612077 59.691005)'::geometry, 'node', 1632497620, 31, NULL, '{\"artist_name\":\"модель П.П. Соколов;отливка Э. Гастклу\",\"artwork:start_date\":\"1794\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6473/\",\"historic\":\"yes\",\"historic:start_date\":\"1794\",\"int_name\":\"Terpsichore\",\"material\":\"metal\",\"name\":\"Терпсихора\",\"name:el\":\"Τερψιχόρη\",\"name:en\":\"Terpsichore\",\"name:la\":\"Terpsichore\",\"ref\":\"П-70/1\",\"ref:okn\":\"781610399040436\",\"start_date\":\"1798\",\"tourism\":\"artwork\",\"wikidata\":\"Q121395096\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611782 59.690902)'::geometry, 'node', 1632497621, 29, NULL, '{\"artist_name\":\"модель Ф.Г. Гордеев;отливка Э. Гастклу\",\"artwork:start_date\":\"1792\",\"artwork_type\":\"statue\",\"description\":\"В годы ВОВ находилась в захоронении, заново установлена в 1946 г.\",\"height\":\"4\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6472/\",\"historic\":\"yes\",\"historic:start_date\":\"1792\",\"int_name\":\"Thalie\",\"material\":\"metal\",\"name\":\"Талия\",\"name:el\":\"Θαλία\",\"name:la\":\"Thalīa\",\"name:uk\":\"Талія\",\"name:zh\":\"塔利亚\",\"ref\":\"П-59/1\",\"start_date\":\"1798\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612041 59.6907321)'::geometry, 'node', 1632503254, 6, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.462536 59.6908707)'::geometry, 'node', 1652587953, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4619277 59.6908578)'::geometry, 'node', 1652587958, 5, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617256 59.6909215)'::geometry, 'node', 3177639362, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612018 59.6909805)'::geometry, 'node', 3188928044, 4, NULL, '{\"colour\":\"brown\",\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\",\"material\":\"metal\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613001 59.6906759)'::geometry, 'node', 3218618266, 4, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614144 59.6907882)'::geometry, 'node', 4912277772, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Флора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615482 59.6907937)'::geometry, 'node', 4912277773, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Урания\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613145 59.6908057)'::geometry, 'node', 4912277774, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эвтерпа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616653 59.6908341)'::geometry, 'node', 4912277775, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Клио\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612216 59.6908451)'::geometry, 'node', 4912277776, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Мельпомена\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4611751 59.690919)'::geometry, 'node', 4912277777, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Талия\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4617272 59.6909351)'::geometry, 'node', 4912277778, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Калиопа\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612298 59.691015)'::geometry, 'node', 4912277779, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Терпсихора\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4616819 59.6910157)'::geometry, 'node', 4912277780, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Полигимния\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.461621 59.6910498)'::geometry, 'node', 4912277781, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Венера Каллипиги\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613548 59.6910624)'::geometry, 'node', 4912277782, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Эрато\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4615016 59.6910712)'::geometry, 'node', 4912277783, 4, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Меркурий\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608954 59.6897746)'::geometry, 'node', 5251698420, 25, NULL, '{\"access\":\"permissive\",\"addr:housenumber\":\"20 литББ\",\"addr:street\":\"Садовая улица\",\"architect\":\"Винченцо Бренна\",\"barrier\":\"gate\",\"description:access\":\"Ворота можно закрывать и открывать руками\",\"heritage\":\"2\",\"heritage:website\":\"https://kgiop.gov.spb.ru/deyatelnost/uchet/list_objects/6459/\",\"historic\":\"yes\",\"locked\":\"no\",\"name\":\"Большие Старосильвийские ворота\",\"ref\":\"1\",\"ref:okn\":\"781620399040626\",\"start_date\":\"1786..1793\",\"tourism\":\"attraction\",\"website\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"wheelchair\":\"yes\",\"wikidata\":\"Q118122050\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460198 59.6905729)'::geometry, 'node', 6758903438, 6, NULL, '{\"artist_name\":\"И.П. Мартос\",\"artwork_type\":\"sculpture\",\"height\":\"4\",\"tourism\":\"artwork\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4625734 59.6908311)'::geometry, 'node', 8331430683, 3, NULL, '{\"inlet\":\"grate\",\"manhole\":\"drain\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4614743 59.690923)'::geometry, 'node', 8530936200, 1, NULL, '{\"board_type\":\"history\",\"information\":\"board\",\"name\":\"Аполлон\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4597619 59.6907527)'::geometry, 'node', 9140565043, 1, NULL, '{\"ford\":\"yes\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4606891 59.6906687)'::geometry, 'node', 9140576937, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4608515 59.6907117)'::geometry, 'node', 9140576938, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4613945 59.6911519)'::geometry, 'node', 9143069530, 5, NULL, '{\"drain\":\"no\",\"source:direction\":\"survey\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('POINT (30.4615903 59.6911716)'::geometry, 'node', 9143069534, 1, NULL, '{\"amenity\":\"bench\",\"backrest\":\"yes\",\"material\":\"wood\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460339 59.6906064)'::geometry, 'node', 9143093777, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4601191 59.6906349)'::geometry, 'node', 9143093778, 1, NULL, '{\"manhole\":\"telecom\",\"man_made\":\"manhole\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610445 59.6908345)'::geometry, 'node', 9143093802, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4610243 59.6909861)'::geometry, 'node', 9143093804, 3, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.4612126 59.691117)'::geometry, 'node', 9143093806, 4, NULL, '{\"drain\":\"no\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;POINT (30.460445 59.6910504)'::geometry, 'node', 9656736571, 2, NULL, '{\"colour\":\"#4e3a39\",\"description\":\"Веломаршрут №4\",\"height\":\"4\",\"information\":\"guidepost\",\"material\":\"metal\",\"start_date\":\"2021-03..2021-10\",\"tourism\":\"information\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4608056 59.6895935, 30.4608954 59.6897746, 30.4609447 59.6898691, 30.4614541 59.6909278)'::geometry, 'way', 30995960, 42, '{9140727117,5251698420,1518870630,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Центральная аллея\",\"ref\":\"VII\",\"source:name\":\"https://pavlovskmuseum.ru/expert/restoration/62/1779/\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605616 59.6906319, 30.4597619 59.6907527, 30.4596087 59.6907755)'::geometry, 'way', 149099000, 6, '{1621246509,9140565043,1621246531}', '{\"intermittent\":\"yes\",\"source:direction\":\"isoline\",\"start_date\":\"1786\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604741 59.6903357, 30.4604598 59.6904575, 30.4604646 59.6905099, 30.4604784 59.6905443, 30.4604933 59.6905665, 30.4605321 59.6905996, 30.4605616 59.6906319)'::geometry, 'way', 149099004, 8, '{1621246503,9140576877,1621246482,1621246465,1621246454,9140576939,1621246509}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601177 59.6905796, 30.4600903 59.6905709, 30.4600721 59.6905605, 30.4600579 59.6905458, 30.4600519 59.6905296, 30.4600545 59.6905133, 30.4600656 59.6904979, 30.4600844 59.6904845, 30.4601095 59.690474, 30.4601391 59.6904673, 30.460169 59.6904648, 30.4601991 59.6904661, 30.4602277 59.6904711, 30.4602498 59.6904787, 30.4602686 59.6904892, 30.4602829 59.6905018, 30.4602918 59.6905174, 30.4602917 59.6905327, 30.4602881 59.6905462, 30.4602793 59.6905579)'::geometry, 'way', 149099028, 5, '{9140576951,9140576902,9140576952,1621246602,1621246607,1621246668,1621246614,1621246615,1621246618,1621246620,1621246630,1621246244,1621246631,1621246224,1621246250,1621246635,1621246647,9140576950,9140576903,9140576949}', '{\"barrier\":\"fence\",\"colour\":\"green\",\"fence_type\":\"wood\",\"height\":\"2\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4603352 59.6911039, 30.460353 59.6910638, 30.4603719 59.6910414, 30.4603979 59.691021, 30.4604807 59.6909761, 30.460577 59.6909284, 30.4606406 59.6908886, 30.460669 59.6908562, 30.460673 59.6908234, 30.4606633 59.6907504, 30.4606582 59.6907286, 30.4606491 59.6907025, 30.4606314 59.690668, 30.460609 59.690636, 30.4605858 59.6906064, 30.4605578 59.6905735, 30.4605362 59.6905385, 30.4605214 59.6905022, 30.4605119 59.6904644, 30.4605095 59.6904098, 30.460512 59.6903499, 30.4605096 59.6903011)'::geometry, 'way', 149099029, 36, '{9140727237,4260007753,9140727241,8650331583,1621246592,1621246588,1621246578,1652603857,9140727240,8650331584,1621246577,9143093738,1621246419,9140576875,1652603906,9140576876,1621246542,8650331586,9140576874,8650331585,1621246403,9140576873,1239612684}', '{\"alt_name\":\"Окружная дорожка\",\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"Круговая дорожка\",\"start_date\":\"1789.1793\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610979 59.6907799, 30.4608515 59.6907117)'::geometry, 'way', 149099034, 9, '{1632503255,9140576938}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4629005 59.6913411, 30.4614541 59.6909278)'::geometry, 'way', 150294524, 8, '{1239612692,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"III\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613148 59.6910721, 30.4613667 59.6910818, 30.4614212 59.6910868, 30.4614766 59.6910869, 30.4615311 59.6910822, 30.4615833 59.6910728, 30.4616314 59.691059, 30.461674 59.6910412, 30.4617098 59.6910199, 30.4617378 59.6909958, 30.461757 59.6909696, 30.4617669 59.6909421, 30.4617672 59.6909141, 30.4617579 59.6908866, 30.4617393 59.6908603, 30.4617119 59.690836, 30.4616766 59.6908145, 30.4616343 59.6907964, 30.4615866 59.6907823, 30.4615347 59.6907726, 30.4614802 59.6907676, 30.4614248 59.6907674, 30.4613703 59.6907721, 30.4613181 59.6907815, 30.46127 59.6907954, 30.4612274 59.6908132, 30.4611916 59.6908345, 30.4611636 59.6908586, 30.4611444 59.6908848, 30.4611345 59.6909123, 30.4611342 59.6909402, 30.4611435 59.6909678, 30.4611621 59.6909941, 30.4611895 59.6910184, 30.4612248 59.6910399, 30.461267 59.6910579, 30.4613148 59.6910721)'::geometry, 'way', 150294525, 6, '{1632220686,9143093824,1632220364,9143093807,1632220588,9143093808,1632220590,9143093809,1632220259,9143093810,1632220292,9143093811,1632220283,9143093812,1632220296,9143093813,1632220378,9143093814,1632220319,9143093815,1632220315,9143093816,1632220323,9143093817,1632220358,9143093818,1632220355,9143093819,1632220350,9143093820,1632220359,9143093821,1632220366,9143093822,1632220374,9143093823,1632220686}', '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.460726 59.6910052, 30.460614 59.6910145, 30.4605241 59.69102, 30.4604597 59.691022, 30.4603979 59.691021)'::geometry, 'way', 150294532, 30, '{1632497615,1632220252,9140727238,9140727242,9140727239,1621246592}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"ref\":\"X\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605096 59.6903011, 30.4614541 59.6909278)'::geometry, 'way', 150294541, 8, '{1239612684,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VIII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4617339 59.6901702)'::geometry, 'way', 150294547, 9, '{1632497615,1518870645}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"VI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461819 59.6910085, 30.4618473 59.6909863, 30.4618928 59.6909647, 30.461951 59.6909401, 30.4620356 59.6909251, 30.462536 59.6908707)'::geometry, 'way', 152440395, 6, '{1652587944,1652587948,1652587950,9143093800,1652587952,1652587953}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613063 59.6907075, 30.4612631 59.6907161, 30.4612041 59.6907321)'::geometry, 'way', 152442436, 10, '{1652605207,9143204222,1632503254}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4617627 59.6907689, 30.4618218 59.6907946, 30.4618794 59.6908253, 30.4619277 59.6908578)'::geometry, 'way', 152442438, 8, '{1652605205,1652605201,1652605200,1652587958}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4612018 59.6909805, 30.4617256 59.6909215, 30.4625734 59.6908311, 30.4628306 59.6908088)'::geometry, 'way', 311975108, 20, '{3188928044,3177639362,8331430683,7911801321}', '{\"layer\":\"-1\",\"name\":\"Старосильвийская дождевая канализация\",\"source:direction\":\"survey\",\"tunnel\":\"yes\",\"waterway\":\"drain\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611708 59.6911018, 30.4611289 59.6910829, 30.4610793 59.6910531, 30.4610552 59.6910294, 30.4610432 59.6910153, 30.4610243 59.6909861)'::geometry, 'way', 313051687, 8, '{1632503180,9143069533,9143093805,9143069532,1632503185,9143093804}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061)'::geometry, 'way', 426269715, 5, '{4255746051,4255746033,9140576943,9140576942,9140576941,9140576940,4255746057,4255746007,9140576945,9140576946,9140576944,4255746054,4255745992,4255746051}', '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603979 59.691021, 30.4603224 59.6910067, 30.4602382 59.6909843, 30.4601137 59.6909482, 30.4600256 59.6909178, 30.4599203 59.6908773, 30.4597958 59.6908259, 30.4597422 59.6908088, 30.4596966 59.6907997, 30.4596501 59.6907961, 30.4596189 59.6907966, 30.4595885 59.6908005, 30.4595518 59.6908091, 30.4595101 59.6908241)'::geometry, 'way', 438780267, 20, '{1621246592,1621246561,1622496989,8850590008,1621246248,1621246252,8650331580,8849369897,9140576840,8650331579,9140576841,8650331578,9140576842,1622496957}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"loc_name\":\"Спуск у места домика Крик\",\"name\":\"Криковская дорога\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4625498 59.6908065, 30.4614541 59.6909278)'::geometry, 'way', 750779153, 4, '{1632220250,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IV\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4631938 59.6918756)'::geometry, 'way', 750779155, 5, '{1632497615,1195120146}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"II\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4606491 59.6907025)'::geometry, 'way', 750779156, 5, '{1632497615,1621246419}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"IX\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4625914 59.6924527)'::geometry, 'way', 750779157, 4, '{1632497615,1652587960}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"I\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\",\"width\":\"3.5\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611165 59.6918779, 30.46118 59.6916919, 30.4614541 59.6909278)'::geometry, 'way', 750779158, 4, '{9159459639,1239612686,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"XII\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4596189 59.6907966, 30.4596712 59.6907865, 30.4597275 59.6907729, 30.459757 59.6907607, 30.4597619 59.6907527, 30.4597677 59.6907431, 30.4597919 59.6907269, 30.4598455 59.6907093, 30.459934 59.6906931, 30.4600118 59.6906782, 30.4600467 59.690666, 30.4600681 59.6906484, 30.4600725 59.6906275, 30.4600655 59.6906044, 30.4600295 59.6905552, 30.4600066 59.6905268, 30.4600031 59.690512, 30.4600111 59.6904995, 30.460044 59.6904799, 30.4600789 59.6904629, 30.4601241 59.6904473)'::geometry, 'way', 988944864, 2, '{9140576841,9140565053,9140565052,9140565051,9140565043,9140565050,9140565049,9140565048,9140565047,9140565046,9140565045,9140565044,1621246253,9140565042,1621246302,1621246323,9140576899,9140576892,9143093786,9143093785,1621246340}', '{\"highway\":\"path\",\"surface\":\"ground\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4607784 59.690696, 30.4606891 59.6906687)'::geometry, 'way', 988944880, 3, '{9140576936,9140576937}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601316 59.6905738, 30.4601383 59.6905745, 30.460144 59.6905725, 30.4601453 59.6905691, 30.4601415 59.6905663, 30.4601348 59.6905656, 30.4601291 59.6905676, 30.4601278 59.6905709, 30.4601316 59.6905738)'::geometry, 'way', 989184163, 1, '{9142788307,9142788306,9142788305,9142788304,9142788303,9142788302,9142788301,9142788300,9142788307}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601637 59.6905695, 30.4601704 59.6905701, 30.4601761 59.6905682, 30.4601774 59.6905648, 30.4601736 59.6905619, 30.4601668 59.6905613, 30.4601612 59.6905632, 30.4601599 59.6905666, 30.4601637 59.6905695)'::geometry, 'way', 989184166, 1, '{9142819031,9142819030,9142819029,9142819028,9142819027,9142819026,9142819025,9142819024,9142819031}', '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4615026 59.6911479, 30.4614481 59.6911519, 30.4613945 59.6911519)'::geometry, 'way', 989211851, 4, '{1652605211,9143069529,9143069530}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603719 59.6910414, 30.4597387 59.6911122)'::geometry, 'way', 989211857, 12, '{8650331583,4260007752}', '{\"highway\":\"path\",\"historic\":\"yes\",\"name\":\"луч домика Крик\",\"start_date\":\"1780.1785\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4603446 59.6911727, 30.4603806 59.6910714, 30.4603967 59.691047, 30.4604235 59.6910376, 30.4604664 59.6910348, 30.4605415 59.6910308)'::geometry, 'way', 989211858, 1, '{9143069609,9143069608,9143069607,9143069606,9143069605,9143069604}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613583 59.6906799, 30.4614025 59.6907746, 30.461428 59.6907726, 30.4614548 59.6907726, 30.4614763 59.6907739)'::geometry, 'way', 989211859, 1, '{9143093728,9143093727,9143093726,9143093725,9143093724}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461314 59.6906832, 30.461361 59.6907794, 30.4613301 59.6907854, 30.4613033 59.6907929, 30.4612845 59.690799, 30.4609841 59.6905973)'::geometry, 'way', 989211860, 1, '{9143093729,9143093730,9143093731,9143093732,9143093734,9143093733}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611484 59.6909364, 30.4611471 59.6909174, 30.4611497 59.6909005, 30.4611578 59.6908836, 30.4611645 59.6908714, 30.4611739 59.6908606, 30.4606917 59.6907283, 30.460681 59.6907283, 30.460677 59.6907337, 30.460685 59.6907601, 30.4606891 59.6907817, 30.4606917 59.6908129, 30.4606944 59.6908426, 30.4606837 59.6908656, 30.4606596 59.6908927, 30.4606247 59.6909184, 30.460563 59.6909523, 30.460453 59.6910064)'::geometry, 'way', 989211861, 1, '{9143093739,9143093740,9143093741,9143093742,9143093743,9143093744,9143093755,9143093737,9143093736,9143093754,9143093753,9143093722,9143093721,9143093720,9143093719,9143093718,9143093717,9143069616}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4605335 59.6903364, 30.4605335 59.6903946, 30.4605308 59.6904501, 30.4605348 59.6904813, 30.4605442 59.6905137, 30.4605576 59.6905394, 30.4605818 59.6905773, 30.4606193 59.6906247, 30.4606408 59.6906545, 30.4606596 59.6906856, 30.4606716 59.6906958, 30.4606958 59.6907039, 30.4611947 59.6908433, 30.4612155 59.6908301, 30.4612369 59.6908166, 30.461253 59.6908098, 30.4609492 59.6906112)'::geometry, 'way', 989211862, 1, '{9143093764,9143093763,9143093762,9143093748,9143093761,9143093760,9143093759,9143093758,9143093757,9143093756,9143093752,9143093751,9143093750,9143093747,9143093746,9143093745,9143093735}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4604919 59.6903357, 30.4604919 59.690398, 30.4604892 59.6904494, 30.4604946 59.690486, 30.4605053 59.6905157, 30.4605161 59.6905387, 30.4605402 59.6905766, 30.4605778 59.690624, 30.4605992 59.6906538, 30.460626 59.6906931, 30.4606368 59.6907255, 30.4606448 59.6907574, 30.4606502 59.6907871, 30.4606542 59.6908196, 30.4606502 59.6908494, 30.4606327 59.6908751, 30.4606059 59.6908927, 30.4605496 59.6909266, 30.4604128 59.6909942)'::geometry, 'way', 989211863, 1, '{9143093776,9143093775,9143093774,9143093773,9143093749,9143093772,9143093771,9143093770,9143093769,9143093768,9143093767,9143093765,9143093766,9143069615,9143069610,9143069614,9143069613,9143069612,9143069611}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619893 59.6908956, 30.4620356 59.6909251)'::geometry, 'way', 989211867, 2, '{1652587955,1652587952}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4610753 59.6908007, 30.4610979 59.6907799)'::geometry, 'way', 989211868, 4, '{9143093801,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4611491 59.6907553, 30.4610979 59.6907799)'::geometry, 'way', 989211869, 4, '{1632503177,1632503255}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.461012 59.6909572, 30.4610056 59.6909157, 30.4610163 59.6908698, 30.4610445 59.6908345)'::geometry, 'way', 989211870, 4, '{1632503179,9143093803,1632503181,9143093802}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4613456 59.6911475, 30.46131 59.6911438, 30.4612696 59.6911343, 30.4612126 59.691117)'::geometry, 'way', 989211871, 4, '{1652605209,9143069531,1632503237,9143093806}', '{\"intermittent\":\"yes\",\"source:direction\":\"survey\",\"start_date\":\"1789.1793\",\"waterway\":\"ditch\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4614541 59.6909278, 30.4622826 59.6903796)'::geometry, 'way', 991343632, 2, '{1632497615,1518870652}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"ref\":\"V\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4620021 59.690877, 30.4617551 59.6909043, 30.4617579 59.690914, 30.4617593 59.6909255, 30.4617606 59.6909377)'::geometry, 'way', 991343633, 1, '{9159456550,9159456549,9159456545,9159456544,9159456543}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4619941 59.6908547, 30.4617471 59.690882, 30.4617392 59.6908714, 30.4617298 59.6908606, 30.4617164 59.6908491)'::geometry, 'way', 991343634, 1, '{9159456552,9159456551,9159456548,9159456547,9159456546}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4602794 59.6911745, 30.4603083 59.6910871)'::geometry, 'way', 991343661, 1, '{9159459675,9159459674}', '{\"barrier\":\"hedge\",\"height\":\"1.5\",\"leaf_cycle\":\"deciduous\",\"leaf_type\":\"broadleaved\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;LINESTRING (30.4601396 59.6918144, 30.4614541 59.6909278)'::geometry, 'way', 1042527594, 11, '{9140727237,1632497615}', '{\"highway\":\"footway\",\"historic\":\"yes\",\"name\":\"луч Амфитеатра\",\"ref\":\"XI\",\"start_date\":\"1789.1791\",\"surface\":\"fine_gravel\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4611342 59.6909402, 30.4611345 59.6909123, 30.4611444 59.6908848, 30.4611636 59.6908586, 30.4611916 59.6908345, 30.4612274 59.6908132, 30.46127 59.6907954, 30.4613181 59.6907815, 30.4613703 59.6907721, 30.4614248 59.6907674, 30.4614802 59.6907676, 30.4615347 59.6907726, 30.4615866 59.6907823, 30.4616343 59.6907964, 30.4616766 59.6908145, 30.4617119 59.690836, 30.4617393 59.6908603, 30.4617579 59.6908866, 30.4617672 59.6909141, 30.4617669 59.6909421, 30.461757 59.6909696, 30.4617378 59.6909958, 30.4617098 59.6910199, 30.461674 59.6910412, 30.4616314 59.691059, 30.4615833 59.6910728, 30.4615311 59.6910822, 30.4614766 59.6910869, 30.4614212 59.6910868, 30.4613667 59.6910818, 30.4613148 59.6910721, 30.461267 59.6910579, 30.4612248 59.6910399, 30.4611895 59.6910184, 30.4611621 59.6909941, 30.4611435 59.6909678, 30.4611342 59.6909402)))'::geometry, 'way', 150294525, 6, NULL, '{\"name\":\"Дубовое кольцо\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4604209 59.6905034, 30.460432 59.6903065, 30.4604493 59.6903061, 30.4604387 59.6904982, 30.4604437 59.6905232, 30.460449 59.6905388, 30.4604611 59.6905564, 30.4604745 59.6905713, 30.4605038 59.6906061, 30.4604844 59.6906116, 30.4604557 59.6905794, 30.4604396 59.6905543, 30.4604303 59.6905334, 30.4604209 59.6905034)))'::geometry, 'way', 426269715, 5, NULL, '{\"man_made\":\"embankment\",\"name\":\"Старосильвийский вал\",\"start_date\":\"1789.1793\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\nINSERT INTO \"♁\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601599 59.6905666, 30.4601612 59.6905632, 30.4601668 59.6905613, 30.4601736 59.6905619, 30.4601774 59.6905648, 30.4601761 59.6905682, 30.4601704 59.6905701, 30.4601637 59.6905695, 30.4601599 59.6905666)))'::geometry, 'way', 989184166, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography) SERVER sqlite_svr;\n\n--Testcase 41: ERR - raster\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, read PostGOS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49: ERR, no SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 50: ERR, no SRID\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('POINT (30.4648224 59.687941)'::geometry);\n--Testcase 51:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 52:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = ('SRID=4326;POINT (30.4648224 59.687941)'::geometry);\n--Testcase 53: ERR damaged, but there is SRID\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = (decode('0101000020e6100000bf72ce99fe76', 'hex')::geometry);\n\n-- Insert PostGIS/GEOS BLOB, read SpatiaLite BLOB\n--Testcase 54: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 55:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 56:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 57: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 58:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 59:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 60:  ERR damaged geometry, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (3, decode('0101000020e6100000bf72ce99fe76', 'hex'),  NULL, '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 61:  ERR damaged geography, but there is SRID\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (4, NULL, decode('0101000020e6100000bf72ce99fe76', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n\n--Testcase 62:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 63:\nINSERT INTO \"♂\" SELECT * FROM \"♂\".\"テスト\";\n--Testcase 64:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 65:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 66:\nSELECT * FROM \"♂\";\n--Testcase 67:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 69:\nSELECT * FROM \"♂\";\n\n--Testcase 70:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL ,\n\tosm_id bigint OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt text\n) SERVER sqlite_svr OPTIONS (table '♁');\n\n--Testcase 71: ERR - No SRID\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\";\n--Testcase 72: OK\nSELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 73:\nUPDATE \"♁\" SET geom = ST_SetSRID(geom, 4326);\n--Testcase 74:\nINSERT INTO \"♁ FDW\" SELECT * FROM \"♁\" WHERE ST_SRID(geom) IS NOT NULL;\n--Testcase 75:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 76:\nSELECT * FROM \"♁ FDW\";\n--Testcase 77:\nALTER FOREIGN TABLE \"♁ FDW\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 78:\nSELECT * FROM \"♁ FDW\";\n\n--Testcase 79:\nDROP FOREIGN TABLE \"♂\";\n--Testcase 80:\nDROP FOREIGN TABLE \"♁ FDW\";\n--Testcase 81:\nDROP TABLE \"♁\";\n--Testcase 82:\nDROP TABLE \"♂\".\"テスト\";\n--Testcase 83:\nDROP SCHEMA \"♂\";\n\n-- Test operators implemented in PostGIS 3.4.2, other are not tested\n-- SELECT testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 100   -> TC 150                 -> TC200     -> TC250\n-- WHERE testing group\n-- geometry -> geometry + bytea const -> geography -> geography + bytea const\n-- TC 300   -> TC 350                 -> TC400     -> TC450\n\n--Testcase 100:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ gm1 g FROM \"types_PostGIS\";\n--Testcase 101:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && gm1 g FROM \"types_PostGIS\";\n--Testcase 102:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << gm1 g FROM \"types_PostGIS\";\n--Testcase 103:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> gm1 g FROM \"types_PostGIS\";\n--Testcase 104:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< gm1 g FROM \"types_PostGIS\";\n--Testcase 105:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> gm1 g FROM \"types_PostGIS\";\n--Testcase 106:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| gm1 g FROM \"types_PostGIS\";\n--Testcase 107:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> gm1 g FROM \"types_PostGIS\";\n--Testcase 108:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| gm1 g FROM \"types_PostGIS\";\n--Testcase 109:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> gm1 g FROM \"types_PostGIS\";\n--Testcase 110:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= gm1 g FROM \"types_PostGIS\";\n--Testcase 111:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm = gm1 g FROM \"types_PostGIS\";\n--Testcase 112:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 113:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& gm1 g FROM \"types_PostGIS\";\n--Testcase 114:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| gm1 g FROM \"types_PostGIS\";\n--Testcase 115\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> gm1 g FROM \"types_PostGIS\";\n--Testcase 116:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> gm1 g FROM \"types_PostGIS\";\n--Testcase 117:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ gm1 g FROM \"types_PostGIS\";\n--Testcase 118:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ gm1 g FROM \"types_PostGIS\";\n\n--Testcase 150:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 151:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 152:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 153:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 154:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 155:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 156:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 157:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 158:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 159:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 160:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 161:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 162:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 163:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 164:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 165:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 166:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 167:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 168:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 169:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 170:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 200:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> gg1 g FROM \"types_PostGIS\";\n--Testcase 201:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && gg1 g FROM \"types_PostGIS\";\n--Testcase 202:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> gg1 g FROM \"types_PostGIS\";\n--Testcase 203:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg = gg1 g FROM \"types_PostGIS\";\n--Testcase 204\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != gg1 g FROM \"types_PostGIS\";\n\n--Testcase 250:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 251:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 252:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n--Testcase 253:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') g FROM \"types_PostGIS\";\n\n--Testcase 300:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ gm1 IS NOT NULL;\n--Testcase 301:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && gm1 IS NOT NULL;\n--Testcase 302:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << gm1 IS NOT NULL;\n--Testcase 303:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> gm1 IS NOT NULL;\n--Testcase 304:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< gm1 IS NOT NULL;\n--Testcase 305:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> gm1 IS NOT NULL;\n--Testcase 306:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| gm1 IS NOT NULL;\n--Testcase 307:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> gm1 IS NOT NULL;\n--Testcase 308:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| gm1 IS NOT NULL;\n--Testcase 309:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> gm1 IS NOT NULL;\n--Testcase 310:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= gm1 IS NOT NULL;\n--Testcase 311:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm = gm1 IS NOT NULL;\n--Testcase 312:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& gm1 IS NOT NULL;\n--Testcase 313:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| gm1 IS NOT NULL;\n--Testcase 314:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> gm1 IS NOT NULL;\n--Testcase 315:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> gm1 IS NOT NULL;\n--Testcase 316:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ gm1 IS NOT NULL;\n--Testcase 317:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ gm1 IS NOT NULL;\n\n--Testcase 350:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @@ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 351:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 352:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 353:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm << decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 354:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm >> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 355:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 356:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &< decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 357:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 358:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 359:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |>> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 360:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 361:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &<| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 362:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |&> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 363:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~= decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 364:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 365:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm &&& decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 366:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm |=| decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 367:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <#> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 368:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm <<->> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 369:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm @ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 370:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gm, gm1 FROM \"types_PostGIS\" WHERE gm ~ decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 400:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> gg1 IS NOT NULL;\n--Testcase 401:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && gg1 IS NOT NULL;\n--Testcase 402:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 403:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> gg1 IS NOT NULL;\n--Testcase 404:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg = gg1 IS NOT NULL;\n--Testcase 405:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != gg1 IS NOT NULL;\n\n--Testcase 450:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <-> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 451:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg && decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 452:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 453:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg <> decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n--Testcase 454:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT gg, gg1 FROM \"types_PostGIS\" WHERE gg != decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex') IS NOT NULL;\n\n\n--Testcase 500:\nDROP FOREIGN TABLE \"types_PostGIS\";\n--Testcase 501:\nDROP EXTENSION sqlite_fdw CASCADE;\n--Testcase 502:\nDROP EXTENSION postgis CASCADE;\n"
  },
  {
    "path": "sql/17.0/with_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 47:\nCREATE EXTENSION postgis;\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/without_gis_support/auto_import.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 01:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 02:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 04:\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 05:\nCREATE VIEW ft AS (\nSELECT *, row_number() OVER () n\nFROM information_schema.foreign_tables\nWHERE foreign_table_catalog = current_database()\nAND foreign_table_schema = 'public'\n);\n--Testcase 06:\nSELECT * FROM ft;\n\n--Testcase 07:\nCREATE VIEW fc AS (\nSELECT ft.n, table_name, column_name, ordinal_position tab_no, column_default def, is_nullable \"null\", data_type, character_maximum_length c_max_len, character_octet_length c_oct_len, numeric_precision num_pr, numeric_precision_radix num_rdx, numeric_scale num_sc, datetime_precision dtp, interval_type it, interval_precision ip, udt_schema, udt_name, maximum_cardinality max_crd, dtd_identifier dtdid, is_self_referencing sref, is_identity ididt,  is_generated isgen\nFROM information_schema.columns c\nINNER JOIN ft\nON (c.table_catalog, c.table_schema, c.table_name) = (ft.foreign_table_catalog, ft.foreign_table_schema, ft.foreign_table_name)\n) order by n, tab_no;\n--Testcase 08: base metadata\nSELECT n, table_name, column_name, tab_no, def, \"null\", data_type, udt_schema, udt_name FROM fc;\n--Testcase 09: size/length/presision metadata\nSELECT n, table_name, column_name, tab_no, c_max_len, c_oct_len, num_pr, num_rdx, num_sc, dtp FROM fc;\n--Testcase 10: other metadata\nSELECT n, table_name, column_name, tab_no, it, ip, max_crd, dtdid, sref, ididt, isgen FROM fc;\n\n--Testcase 11:\nSELECT * FROM information_schema.column_options\nWHERE (table_catalog, table_schema, table_name)\nIN (SELECT foreign_table_catalog, foreign_table_schema, foreign_table_name FROM ft);\n\n--Testcase 11:\nDROP VIEW fc;\n--Testcase 12:\nDROP VIEW ft;\n\n--Testcase 20:\nSET client_min_messages TO ERROR;\n--Testcase 21: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/without_gis_support/nogis.sql",
    "content": "--Testcase 1:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 2:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\n--Testcase 10:\nCREATE DOMAIN geometry AS bytea;\n--Testcase 11:\nCREATE DOMAIN geography AS bytea;\n--Testcase 12:\nCREATE DOMAIN addbandarg AS bytea;\n--Testcase 13:\nCREATE DOMAIN box2d AS bytea;\n--Testcase 14:\nCREATE DOMAIN box3d AS bytea;\n--Testcase 15:\nCREATE DOMAIN geometry_dump AS bytea;\n--Testcase 16:\nCREATE DOMAIN geomval AS bytea;\n--Testcase 17:\nCREATE DOMAIN getfaceedges_returntype AS bytea;\n--Testcase 18:\nCREATE DOMAIN rastbandarg AS bytea;\n--Testcase 19:\nCREATE DOMAIN raster AS bytea;\n--Testcase 20:\nCREATE DOMAIN reclassarg AS bytea;\n--Testcase 21:\nCREATE DOMAIN summarystats AS bytea;\n--Testcase 22:\nCREATE DOMAIN topoelement AS bytea;\n--Testcase 23:\nCREATE DOMAIN topoelementarray AS bytea;\n--Testcase 24:\nCREATE DOMAIN topogeometry AS bytea;\n--Testcase 25:\nCREATE DOMAIN unionarg AS bytea;\n--Testcase 26:\nCREATE DOMAIN validatetopology_returntype AS bytea;\n\n--Testcase 40:\nCREATE FOREIGN TABLE \"types_PostGIS\"( \"i\" int OPTIONS (key 'true'), gm geometry, gg geography, r raster, t text) SERVER sqlite_svr;\n\n--Testcase 41: ERR unable to convert to unsupported PostGIS specific data type\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, r, t ) VALUES (1, decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('0101000020e6100000fd5aa846f9733e406c054d4bacd74d40', 'hex'),  decode('1223456890', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 42:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 43:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n\n-- Insert SpatiaLite BLOB, but CANNOT read PostGIS/GEOS BLOB\n--Testcase 44: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (1, decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'),  decode('0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\", \"natural\": \"shrub\", \"genus:ru\": \"Рододендрон\", \"taxon:ru\": \"Рододендрон Ледебура\", \"source:taxon\": \"board\"}');\n--Testcase 45:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE geometry;\n--Testcase 46:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE geography;\n--Testcase 47: read the same BLOBs\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 48:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n--Testcase 49:\nEXPLAIN (VERBOSE, COSTS OFF)\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n--Testcase 50:\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\" WHERE gm = '\\x0001e6100000bf72ce99fe763e40ed4960730ed84d40bf72ce99fe763e40ed4960730ed84d407c01000000bf72ce99fe763e40ed4960730ed84d40fe'::geometry;\n\n-- Insert a BLOB, read SpatiaLite BLOB without any transformations\n--Testcase 51: OK\nINSERT INTO \"types_PostGIS\" ( \"i\", gm, gg, t ) VALUES (2, decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'),  decode('0101000020e6100000bf72ce99fe763e40ed4960730ed84d40', 'hex'), '{\"genus\": \"Rhododendron\", \"taxon\": \"Rhododendron ledebourii\"}');\n--Testcase 52:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gm\" TYPE bytea;\n--Testcase 53:\nALTER FOREIGN TABLE \"types_PostGIS\" ALTER COLUMN \"gg\" TYPE bytea;\n--Testcase 54: OK\nSELECT \"i\", gm, gg, t FROM \"types_PostGIS\";\n\n--Testcase 55:\nCREATE FOREIGN TABLE \"♂\" (\n\tid int4 OPTIONS (key 'true'),\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n) SERVER sqlite_svr;\n\n--Testcase 56:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE bytea;\n--Testcase 57:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE bytea;\n--Testcase 58:\nSELECT * FROM \"♂\";\n--Testcase 59:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"⌖\" TYPE geometry;\n--Testcase 60:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 61:\nINSERT INTO \"♂\" (id, \"UAI\", \"⌖\", geom, \"t₀\", \"class\", \"URL\") VALUES(301, 'Nix Olympica', 'SRID=104904;POINT (230 19.7835659606)'::geometry, NULL, '1958-01-01', 'al', 'http://planetarynames.wr.usgs.gov/Feature/4314');\n--Testcase 62:\nSELECT * FROM \"♂\";\n\n--Testcase 63:\nCREATE FOREIGN TABLE \"♁ FDW\"(\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) OPTIONS (key 'true') NOT NULL,\n\tosm_id int OPTIONS (key 'true') NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt json\n) SERVER sqlite_svr\nOPTIONS (table '♁');\n\n--Testcase 55:\nINSERT INTO \"♁ FDW\" (geom, osm_type, osm_id, ver, arr, t) VALUES('SRID=4326;MULTIPOLYGON (((30.4601278 59.6905709, 30.4601291 59.6905676, 30.4601348 59.6905656, 30.4601415 59.6905663, 30.4601453 59.6905691, 30.460144 59.6905725, 30.4601383 59.6905745, 30.4601316 59.6905738, 30.4601278 59.6905709)))'::geometry, 'way', 989184163, 1, NULL, '{\"building:colour\":\"white\",\"building:part\":\"yes\",\"height\":\"6\",\"roof:shape\":\"flat\"}');\n\n--Testcase 67:\nSELECT * FROM \"♁ FDW\";\n\n-- PostGIS specific data types, but SpatiaLite or sqlite_fdw unsupported \n--Testcase 68:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box2d;\n--Testcase 69: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 70:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE box3d;\n--Testcase 71: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 72:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry_dump;\n--Testcase 73: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 74:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geomval;\n--Testcase 75: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 76:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE getfaceedges_returntype;\n--Testcase 77: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 78:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE rastbandarg;\n--Testcase 79: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 80:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE raster;\n--Testcase 81: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 82:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE reclassarg;\n--Testcase 83: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 84:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE summarystats;\n--Testcase 85: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 86:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelement;\n--Testcase 87: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 88:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topoelementarray;\n--Testcase 89: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 90:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE topogeometry;\n--Testcase 91: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 92:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE unionarg;\n--Testcase 93: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 94:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE validatetopology_returntype;\n--Testcase 95: -- ERR\nSELECT * FROM \"♂\";\n\n-- PostGIS specific data types, not bytea mode, hence error\n--Testcase 96:\nALTER DOMAIN geometry RENAME TO geom0;\n--Testcase 97:\nALTER DOMAIN geography RENAME TO geog0;\n--Testcase 98:\nCREATE DOMAIN geometry AS text;\n--Testcase 99:\nCREATE DOMAIN geography AS text;\n\n--Testcase 100:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geometry;\n--Testcase 101: -- ERR\nSELECT * FROM \"♂\";\n--Testcase 102:\nALTER FOREIGN TABLE \"♂\" ALTER COLUMN \"geom\" TYPE geography;\n--Testcase 102: -- ERR\nSELECT * FROM \"♂\";\n\n--Testcase 103:\nDROP DOMAIN geometry CASCADE;\n--Testcase 104:\nDROP DOMAIN geography CASCADE;\n--Testcase 105:\nDROP DOMAIN addbandarg;\n--Testcase 106:\nDROP DOMAIN box2d;\n--Testcase 107:\nDROP DOMAIN box3d;\n--Testcase 108:\nDROP DOMAIN geometry_dump;\n--Testcase 109:\nDROP DOMAIN geomval;\n--Testcase 110:\nDROP DOMAIN getfaceedges_returntype;\n--Testcase 111:\nDROP DOMAIN rastbandarg;\n--Testcase 112:\nDROP DOMAIN raster CASCADE;\n--Testcase 113:\nDROP DOMAIN reclassarg;\n--Testcase 114:\nDROP DOMAIN summarystats;\n--Testcase 115:\nDROP DOMAIN topoelement;\n--Testcase 116:\nDROP DOMAIN topoelementarray;\n--Testcase 117:\nDROP DOMAIN topogeometry;\n--Testcase 118:\nDROP DOMAIN unionarg;\n--Testcase 119:\nDROP DOMAIN validatetopology_returntype;\n--Testcase 120:\nDROP DOMAIN geom0 CASCADE;\n--Testcase 121:\nDROP DOMAIN geog0 CASCADE;\n\n--Testcase 122:\nDROP SERVER sqlite_svr CASCADE;\n--Testcase 123:\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/17.0/without_gis_support/type.sql",
    "content": "--SET log_min_messages  TO DEBUG1;\n--SET client_min_messages  TO DEBUG1;\n--Testcase 44:\nCREATE EXTENSION sqlite_fdw;\n--Testcase 45:\nCREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw\nOPTIONS (database '/tmp/sqlite_fdw_test/common.db');\n\nIMPORT FOREIGN SCHEMA main FROM SERVER sqlite_svr INTO public;\n\n--Testcase 1:\nINSERT INTO \"type_STRING\"(col) VALUES ('string');\n--Testcase 4:\nINSERT INTO \"type_BYTE\"(col) VALUES ('c');\n--Testcase 5:\nINSERT INTO \"type_SINT\"(col) VALUES (32767);\n--Testcase 6:\nINSERT INTO \"type_SINT\"(col) VALUES (-32768);\n--Testcase 7:\nINSERT INTO \"type_BINT\"(col) VALUES (9223372036854775807);\n--Testcase 8:\nINSERT INTO \"type_BINT\"(col) VALUES (-9223372036854775808);\n--Testcase 9:\nINSERT INTO \"type_INTEGER\"(col) VALUES (9223372036854775807);\n\n--Testcase 10:\nINSERT INTO \"type_FLOAT\"(col) VALUES (3.1415);\n--Testcase 11:\nINSERT INTO \"type_DOUBLE\"(col) VALUES (3.14159265);\n--Testcase 12:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 12:34:56.789', '2017.11.06');\n--Testcase 13:\nINSERT INTO \"type_TIMESTAMP\" VALUES ('2017.11.06 1:3:0', '2017.11.07');\n--Testcase 14:\nINSERT INTO \"type_BLOB\"(col) VALUES (bytea('\\xDEADBEEF'));\n--Testcase 15:\nINSERT INTO typetest VALUES(1,'a', 'b', 'c','2017.11.06 12:34:56.789', '2017.11.06 12:34:56.789' ) ;\n\n--Testcase 16:\nSELECT * FROM \"type_STRING\";\n--Testcase 18:\nSELECT * FROM \"type_BYTE\";\n--Testcase 19:\nSELECT * FROM \"type_SINT\";\n--Testcase 20:\nSELECT * FROM \"type_BINT\";\n--Testcase 21:\nSELECT * FROM \"type_INTEGER\";\n--Testcase 22:\nSELECT * FROM \"type_FLOAT\";\n--Testcase 23:\nSELECT * FROM \"type_DOUBLE\";\nset datestyle=ISO;\n--Testcase 24:\nSELECT * FROM \"type_TIMESTAMP\";\n--Testcase 25:\nSELECT * FROM \"type_BLOB\";\n--Testcase 26:\nSELECT * FROM typetest;\n\n--Testcase 27:\ninsert into \"type_STRING\" values('TYPE');\n--Testcase 28:\ninsert into \"type_STRING\" values('type');\n\n-- not pushdown\n--Testcase 29:\nSELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n--Testcase 30:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col like 'TYP%';\n-- pushdown\n--Testcase 31:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n--Testcase 32:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%';\n\n--Testcase 33:\nSELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n--Testcase 34:\nEXPLAIN SELECT  *FROM \"type_STRING\" WHERE col ilike 'typ%' and col like 'TYPE';\n\n--Testcase 35:\nSELECT * FROM \"type_TIMESTAMP\";\n\n--Testcase 36:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n--Testcase 37:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > date ('2017.11.06 12:34:56.789') ;\n\n--Testcase 38:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n--Testcase 39:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col::text > date ('2017.11.06 12:34:56.789')::text ;\n\n--Testcase 40:\nEXPLAIN  (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour'; \n--Testcase 41:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b - interval '1 hour';\n\n--Testcase 42:\nEXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n--Testcase 43:\nSELECT * FROM  \"type_TIMESTAMP\" WHERE col > b;\n\n--Testcase 48:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021.02.23');\n--Testcase 49:\nINSERT INTO \"type_DATE\"(col) VALUES ('2021/03/08');\n--Testcase 50:\nINSERT INTO \"type_DATE\"(col) VALUES ('9999-12-30');\n--Testcase 58:\nSELECT * FROM \"type_DATE\";\n\n--Testcase 51:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45');\n--Testcase 52:\nINSERT INTO \"type_TIME\"(col) VALUES ('01:23:45.6789');\n--Testcase 59:\nSELECT * FROM \"type_TIME\";\n\n--Testcase 60:\nEXPLAIN VERBOSE\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n--Testcase 61:\nSELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,  c17, c18, c19, c2, c21, c22, c23, c24 FROM alltypetest;\n\n--Testcase 53:\nCREATE FOREIGN TABLE type_JSON(col JSON OPTIONS (key 'true')) SERVER sqlite_svr OPTIONS (table 'type_TEXT');\n--Testcase 54:\nINSERT INTO type_JSON(col) VALUES ('[1, 2, \"foo\", null]');\n--Testcase 55:\nINSERT INTO type_JSON(col) VALUES ('{\"bar\": \"baz\", \"balance\": 7.77, \"active\": false}'::json);\n--Testcase 56\nSELECT * FROM type_JSON;\n--Testcase 57\nDELETE FROM type_JSON;\n\n--Testcase 60:\nDROP FOREIGN TABLE IF EXISTS \"type_BOOLEAN\";\n--Testcase 61:\nCREATE FOREIGN TABLE \"type_BOOLEAN\" (i int, b boolean OPTIONS (key 'true')) SERVER sqlite_svr;\n--Testcase 62:\nINSERT INTO \"type_BOOLEAN\" (i, b) VALUES (1, 'on'), (2, false);\n--Testcase 63:\nALTER FOREIGN TABLE \"type_BOOLEAN\" DROP COLUMN i;\n--Testcase 64:\nSELECT * FROM \"type_BOOLEAN\"; -- OK\n--Testcase 65:\nDELETE FROM \"type_BOOLEAN\";\n\n-- define INTEGER as TEXT column\n--Testcase 67:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE text;\n--Testcase 68:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as bpchar\n--Testcase 69:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE char(30);\n--Testcase 70:\nSELECT * FROM \"type_INTEGER\"; -- OK\n-- define INTEGER as varchar\n--Testcase 71:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 72:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as name\n--Testcase 73:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE name;\n--Testcase 74:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as json\n--Testcase 75:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE json;\n--Testcase 76:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as time\n--Testcase 77:\nDELETE FROM \"type_INTEGER\";\n--Testcase 78:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n--Testcase 79:\nINSERT INTO \"type_INTEGER\" VALUES (120506);\n--Testcase 80:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE time;\n--Testcase 81:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n-- define INTEGER as date\n--Testcase 82:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE date;\n--Testcase 83:\nSELECT * FROM \"type_INTEGER\"; -- OK\n\n--Testcase 84:\nALTER FOREIGN TABLE \"type_INTEGER\" ALTER COLUMN col TYPE int;\n\n--Testcase 85:\nINSERT INTO \"type_DOUBLE\" VALUES (1.3e-5);\n--Testcase 86:\nSELECT * FROM \"type_DOUBLE\";\n\n-- define DOUBLE as TEXT column\n--Testcase 87:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE text;\n--Testcase 88:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as bpchar\n--Testcase 89:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE char(30);\n--Testcase 90:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n-- define DOUBLE as varchar\n--Testcase 91:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE varchar(30);\n--Testcase 92:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as name\n--Testcase 93:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE name;\n--Testcase 94:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n-- define DOUBLE as json\n--Testcase 95:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE json;\n--Testcase 96:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 97:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 98:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 99:\nINSERT INTO \"type_DOUBLE\" VALUES (120506.12);\n\n-- define DOUBLE as time\n--Testcase 100:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE time;\n--Testcase 101:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 102:\nDELETE FROM \"type_DOUBLE\";\n--Testcase 103:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n--Testcase 104:\nINSERT INTO \"type_DOUBLE\" VALUES (1999.012);\n-- define DOUBLE as date\n--Testcase 105:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE date;\n--Testcase 106:\nSELECT * FROM \"type_DOUBLE\"; -- OK\n\n--Testcase 107:\nALTER FOREIGN TABLE \"type_DOUBLE\" ALTER COLUMN col TYPE float8;\n\n--Testcase 108:\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 109: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES (PI());\n--Testcase 110:\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 111:\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 113:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n--Testcase 114: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('Infinity');\n--Testcase 115: ERR primary key\nINSERT INTO \"type_DOUBLE\" VALUES ('-Infinity');\n--Testcase 116:\nSELECT * FROM \"type_DOUBLE\"; -- OK, +- Inf\n\n--Testcase 300:\nSET client_min_messages TO ERROR;\n--Testcase 301: no details\nDROP EXTENSION sqlite_fdw CASCADE;\n"
  },
  {
    "path": "sql/init_data/agg.data",
    "content": "56\t7.8\n100\t99.097\n0\t0.09561\n42\t324.78\n"
  },
  {
    "path": "sql/init_data/datetimes.data",
    "content": "FirstDate\t2020-05-12 11:45:31\t1589283931\r\nSecondDate\t2020-05-12 13:32:31\t1589290351\r\nThirdDate\t2020-05-10 10:45:29\t1589107529\r\n"
  },
  {
    "path": "sql/init_data/init.sql",
    "content": "\nDROP TABLE IF EXISTS department;\nDROP TABLE IF EXISTS employee;\nDROP TABLE IF EXISTS empdata;\nDROP TABLE IF EXISTS numbers;\nDROP TABLE IF EXISTS limittest;\nDROP TABLE IF EXISTS grem1_1;\nDROP TABLE IF EXISTS grem1_2;\nDROP TABLE IF EXISTS case_exp;\n\nCREATE TABLE department(department_id int primary key, department_name text);\nCREATE TABLE employee(emp_id int primary key, emp_name text, emp_dept_id int);\nCREATE TABLE empdata(emp_id int primary key, emp_dat bytea);\nCREATE TABLE numbers(a int primary key, b varchar(255) unique);\nCREATE TABLE t(a integer primary key, b integer);\nCREATE TABLE multiprimary(a integer, b integer, c integer, primary key(b,c));\nCREATE TABLE columntest(\"a a\" integer, \"b b\" integer,\"c c\" integer, primary key(\"a a\",\"b b\") );\nCREATE TABLE noprimary(a integer, b text);\nCREATE TABLE limittest(id int primary key, x integer, y text);\ncreate table grem1_1 (a int primary key, b int generated always as (a * 2) stored);\ncreate table grem1_2 (a int primary key, b int generated always as (a * 2) stored, c int generated always as (a * 3) stored, d int generated always as (a * 4) stored);\nCREATE TABLE case_exp(c1 int primary key, c3 text, c6 varchar(10));\n\nCREATE TABLE \"type_STRING\" (col text primary key);\nCREATE TABLE \"type_BOOLEANpk\" (col boolean primary key);\nCREATE TABLE \"type_BOOLEAN\" (i int primary key, b boolean);\nCREATE VIEW  \"type_BOOLEAN+\" AS SELECT *, typeof(\"b\") t, length(\"b\") l FROM \"type_BOOLEAN\";\nCREATE TABLE \"type_BYTE\" (col char(1) primary key);\nCREATE TABLE \"type_SINT\" (col smallint primary key);\nCREATE TABLE \"type_BINT\" (col bigint primary key);\nCREATE TABLE \"type_INTEGER\" (col integer primary key); -- convert to bigint\nCREATE TABLE \"type_FLOAT\" (col float primary key);\nCREATE TABLE \"type_DOUBLE\" (col double primary key);\nCREATE TABLE \"type_TIMESTAMP\" (col timestamp primary key, b timestamp);--, c date);\nCREATE TABLE \"type_BLOB\" (col blob primary key);\nCREATE TABLE \"type_DATE\" (col date primary key);\nCREATE TABLE \"type_TIME\" (col time primary key);\nCREATE TABLE \"type_BIT\" (i int, b bit);\nCREATE VIEW  \"type_BIT+\" AS SELECT *, typeof(b) t, length(b) l FROM \"type_BIT\";\nCREATE TABLE \"type_VARBIT\" (i int, b bit);\nCREATE VIEW  \"type_VARBIT+\" AS SELECT *, typeof(b) t, length(b) l FROM \"type_VARBIT\";\nCREATE TABLE \"type_UUIDpk\" (col uuid primary key);\nCREATE TABLE \"type_UUID\" (i int, u uuid);\nCREATE VIEW  \"type_UUID+\" AS SELECT\n\t*,\n\ttypeof(u) t,\n\tlength(u) l\n\t-- blob affinity normalization form for \"type_UUID+\" view for better visual comparing during uuid test output, will be used later\n\t-- case when typeof(u) = 'blob' then substr(lower(hex(u)),1,8) || '-' || substr(lower(hex(u)),9,4) || '-' || substr(lower(hex(u)),13,4) || '-' || substr(lower(hex(u)),17,4) || '-' || substr(lower(hex(u)),21,12) else null end uuid_blob_canon\nFROM \"type_UUID\";\nCREATE TABLE \"type_MACADDRpk\" (col macaddr primary key);\nCREATE TABLE \"type_MACADDR\" (i int, m macaddr);\nCREATE VIEW  \"type_MACADDR+\" AS SELECT *, typeof(\"m\") t, length(\"m\") l, cast(\"m\" as text) tx FROM \"type_macaddr\";\nCREATE TABLE \"type_MACADDR8pk\" (col macaddr8 primary key);\nCREATE TABLE \"type_MACADDR8\" (i int, m macaddr8);\nCREATE VIEW  \"type_MACADDR8+\" AS SELECT *, typeof(\"m\") t, length(\"m\") l, cast(\"m\" as text) tx FROM \"type_macaddr8\";\nCREATE TABLE \"types_PostGIS\" (i int, gm geometry, gg geography, r raster, t text, gm1 geometry, gg1 geography);\nCREATE TABLE \"type_JSON\" (i int, j json, ot varchar(8), oi int, q text[], j1 json, ot1 text, oi1 int2);\nCREATE TABLE \"type_JSONB\" (i int, j jsonb, ot varchar(8), oi int, q text[], j1 jsonb, ot1 text, oi1 int2);\nCREATE VIEW  \"type_JSONB+\" AS SELECT\n\t*,\n\ttypeof(\"j\") t,\n\tlength(\"j\") l,\n\tsubstr(hex(cast(\"j\" as text)), 1, 16) || '...' tx\nFROM \"type_JSONB\";\nCREATE TABLE BitT (p integer primary key, a BIT(3), b BIT VARYING(5));\nCREATE TABLE notype (a);\nCREATE TABLE typetest (i integer, v varchar(10) , c char(10), t text, d datetime, ti timestamp);\nCREATE TABLE type_TEXT (col text primary key);\nCREATE TABLE alltypetest (\n\tc1 int,\n\tc2 tinyint,\n\tc3 smallint,\n\tc4 mediumint,\n\tc5 bigint,\n\tc6 unsign big int,\n\tc7 int8,\n\tc8 character(10),\n\tc9 varchar(255),\n\tc10 character varying(255),\n\tc11 nchar(55),\n\tc12 native character(70),\n\tc13 nvarchar(100),\n\tc14 text,\n\tc15 clob,\n\tc16 blob,\n\tc17 real,\n\tc18 double,\n\tc19 double precision,\n\tc20 float,\n\tc21 numeric,\n\tc22 decimal(10,5),\n\tc23 date,\n\tc24 datetime);\nINSERT INTO  alltypetest VALUES (583647,   127,        12767,       388607,      2036854775807,          573709551615,      2036854775807,             'abcdefghij',       'abcdefghijjhgfjfuafh',       'Côte dIvoire Fijifoxju',        'Hôm nay tôi rất vui',                 'I am happy today',              '今日はとても幸せです 今日はとても幸せです',            'The quick brown fox jumps o'       ,  'ABCDEFGHIJKLMNOPQRSTUVWX',          x'4142434445',                       3.40E+18,          1.79769E+108,          1.79769E+88,          1.79E+108,          1234,        99999.99999,        '9999-12-31',         '9999-12-31 23:59:59');\n\nCREATE TABLE json_osm_test (\n\twkt text NULL,\n\tosm_type varchar(8) NULL,\n\tosm_id int8 NULL,\n\ttags json NULL,\n\tway_nodes int8[] NULL\n);\n\n-- a table that is missing some fields\nCREATE TABLE shorty (\n   id  integer primary key,\n   c   character(10)\n);\n\nCREATE TABLE \"A a\" (col int primary key);\n\n-- test for issue #44 github\nCREATE VIRTUAL TABLE fts_table USING fts5(name, description, tokenize = porter);\n\n-- updatable option test (github pull 59)\nCREATE TABLE RO_RW_test (\n    i   int primary key not null,\n    a   text,\n    b   float,\n    c   int\n);\n\nINSERT INTO RO_RW_test (i, a, b, c) VALUES (1, 'A',1.001, 0);\n\n-- test for PR #76 github\nCREATE TABLE \"Unicode data\" (i text primary key, t text);\n\nINSERT INTO \"Unicode data\" (i, t) VALUES ('jap', 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bul', 'Ах, чудна българска земьо, полюшвай цъфтящи жита.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('rus', 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('aze', 'Zəfər, jaketini də, papağını da götür, bu axşam hava çox soyuq olacaq.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('arm', 'Բել դղյակի ձախ ժամն օֆ ազգությանը ցպահանջ չճշտած վնաս էր եւ փառք։');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ukr', 'Гей, хлопці, не вспію — на ґанку ваша файна їжа знищується бурундучком.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('eus', 'Permin gox dabiltzu yoskiñ.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('bel', 'У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gre', 'Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('gle', 'Chuaigh bé mhórshách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('spa', 'Quiere la boca exhausta vid, kiwi, piña y fugaz jamón.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('kor', '키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('lav', 'Ķieģeļu cepējs Edgars Buls fraku un hūti žāvē uz čīkstošām eņģēm.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('pol', 'Pchnąć w tę łódź jeża lub ośm skrzyń fig.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('fra', 'Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('srp', 'Ljubavi, Olga, hajde pođi u Fudži i čut ćeš nježnu muziku srca.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('epo', 'Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('cze', 'Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů.');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('ara', 'أبجد هوَّز حُطّي كلَمُن سَعْفَص قُرِشَت ثَخَدٌ ضَظَغ');\nINSERT INTO \"Unicode data\" (i, t) VALUES ('heb', 'עטלף אבק נס דרך מזגן שהתפוצץ כי חם');\n\n\nCREATE TABLE \"type_BOOLEAN_oper\" AS\nWITH booldata AS (\n\tSELECT row_number() over () i, column1 AS b\n\t  FROM ( VALUES\n\t('Yes'), ('YeS'), ('yes'), ('on'),  ('ON'),  ('t'), ('T'), ('Y'), ('y'), (1), ('1'), ('true'),  ('tRuE'),\n\t('no'),  ('No'),  ('nO'),  ('off'), ('oFf'), ('f'), ('F'), ('N'), ('n'), (0), ('0'), ('false'), ('fALsE'),\n\t(NULL) )\n\t\t\t\t )\nSELECT ROW_NUMBER() OVER () i, t1.i i1, t1.b b1, t2.i i2, t2.b b2 FROM booldata t1 INNER JOIN booldata t2 ON 1;\n\n-- SpatiaLite/PostGIS test\n-- This table name also tests SpatiaLite and PostGIS metadata functions. Made as analog of the next \"martian\" table.\nCREATE TABLE \"♁\" (\n\tgeom geometry NOT NULL,\n\tosm_type varchar(16) NOT NULL,\n\tosm_id int NOT NULL,\n\tver int NOT NULL,\n\tarr text,\n\tt jsonb\n);\n\n-- SpatiaLite/PostGIS test\n-- This table and column names also tests SpatiaLite and PostGIS metadata functions. Any geometry or geography column declaration cause some actions inside of spatial metadata storage or journals of SpatiaLite and PostGIS.\n-- This is real table and column names from one of DBs of Union Astronomique International.\nCREATE TABLE \"♂\" (\n\tid int4,\n\t\"UAI\" varchar(254),\n\t\"⌖\" geometry,\n\tgeom geometry,\n\t\"t₀\" date,\n\t\"class\" text,\n\t\"URL\" varchar(80)\n);\n\nanalyze;\n"
  },
  {
    "path": "sql/init_data/init_core.sql",
    "content": ".mode csv\n\nDROP TABLE IF EXISTS FLOAT4_TBL;\nDROP TABLE IF EXISTS FLOAT4_TMP;\nDROP TABLE IF EXISTS FLOAT8_TBL;\nDROP TABLE IF EXISTS FLOAT8_TMP;\nDROP TABLE IF EXISTS \"type_FLOAT_INF\";\nDROP VIEW  IF EXISTS \"type_FLOAT_INF+\";\nDROP TABLE IF EXISTS INT2_TBL;\nDROP TABLE IF EXISTS INT2_TMP;\nDROP TABLE IF EXISTS INT4_TBL;\nDROP TABLE IF EXISTS INT4_TMP;\nDROP TABLE IF EXISTS INT8_TBL;\nDROP TABLE IF EXISTS test_having;\nDROP TABLE IF EXISTS onek;\nDROP TABLE IF EXISTS tenk1;\nDROP TABLE IF EXISTS btg;\nDROP TABLE IF EXISTS btg_groupby;\nDROP TABLE IF EXISTS group_agg_pk;\nDROP TABLE IF EXISTS num_typemod_test;\nDROP TABLE IF EXISTS t;\nDROP TABLE IF EXISTS RO_RW_test;\n\nCREATE TABLE FLOAT4_TBL (f1  REAL);\nCREATE TABLE FLOAT4_TMP (f1  REAL, id integer primary key autoincrement);\nCREATE TABLE FLOAT8_TBL(f1 DOUBLE PRECISION);\nCREATE TABLE FLOAT8_TMP (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION, id integer primary key autoincrement);\nCREATE TABLE INT2_TBL(f1 int2);\nCREATE TABLE INT2_TMP (f1 int2, f2 smallint, id integer primary key autoincrement);\nCREATE TABLE INT4_TBL(f1 int4);\nCREATE TABLE INT4_TMP (f1 int4, f2 int, id integer primary key autoincrement);\nCREATE TABLE INT8_TBL(\n\tq1 int8,\n\tq2 int8,\n\tCONSTRAINT t1_pkey PRIMARY KEY (q1, q2)\n);\nCREATE TABLE INT8_TMP(\n\tq1 int8,\n\tq2 int8,\n\tq3 int4,\n\tq4 int2,\n\tq5 text,\n\tid integer primary key autoincrement\n);\n\n--Testcase 1:\nINSERT INTO INT2_TBL(f1) VALUES ('0   ');\n--Testcase 2:\nINSERT INTO INT2_TBL(f1) VALUES ('  1234 ');\n--Testcase 3:\nINSERT INTO INT2_TBL(f1) VALUES ('    -1234');\n-- largest and smallest values\n--Testcase 5:\nINSERT INTO INT2_TBL(f1) VALUES ('32767');\n--Testcase 6:\nINSERT INTO INT2_TBL(f1) VALUES ('-32767');\n\nCREATE TABLE test_having (a int, b int, c char(8), d char);\nCREATE TABLE onek (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\nCREATE TABLE onek2 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\nCREATE TABLE tenk1 (\n\tunique1\t\tint4,\n\tunique2\t\tint4,\n\ttwo\t\t\tint4,\n\tfour\t\tint4,\n\tten\t\t\tint4,\n\ttwenty\t\tint4,\n\thundred\t\tint4,\n\tthousand\tint4,\n\ttwothousand\tint4,\n\tfivethous\tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\nCREATE TABLE tenk2 (\n\tunique1 \tint4,\n\tunique2 \tint4,\n\ttwo \t \tint4,\n\tfour \t\tint4,\n\tten\t\t\tint4,\n\ttwenty \t\tint4,\n\thundred \tint4,\n\tthousand \tint4,\n\ttwothousand int4,\n\tfivethous \tint4,\n\ttenthous\tint4,\n\todd\t\t\tint4,\n\teven\t\tint4,\n\tstringu1\tname,\n\tstringu2\tname,\n\tstring4\t\tname\n);\n\nCREATE TABLE aggtest (\n\ta \t\t\tint2,\n\tb\t\t\tfloat4\n);\n\nCREATE TABLE student (\n\tname \t\ttext,\n\tage\t\t\tint4,\n\tlocation \tpoint,\n\tgpa \t\tfloat8\n);\n\nCREATE TABLE person (\n\tname \t\ttext,\n\tage\t\t\tint4,\n\tlocation \tpoint\n);\n\n-- FOR prepare.sql\n\nCREATE TABLE road (\n\tname\t\ttext,\n\tthepath \tpath\n);\n\ncreate table road_tmp (a int, b int, id integer primary key autoincrement);\n\nCREATE TABLE dates (\n\tname\t\t\tTEXT,\n\tdate_as_text\tTEXT,\n\tdate_as_number\tFLOAT8\n);\n\nCREATE TABLE btg(id int primary key, p int, v text, c float, d float, e int);\nCREATE TABLE btg_groupby(x int, y int, z text, w int);\nCREATE TABLE group_agg_pk (x int, y int, z int, w int, f int);\n\n.separator \"\\t\"\n.import /tmp/sqlite_fdw_test/onek.data onek\n.import /tmp/sqlite_fdw_test/onek.data onek2\n.import /tmp/sqlite_fdw_test/tenk.data tenk1\n.import /tmp/sqlite_fdw_test/agg.data aggtest\n.import /tmp/sqlite_fdw_test/student.data student\n.import /tmp/sqlite_fdw_test/person.data person\n.import /tmp/sqlite_fdw_test/streets.data road\n.import /tmp/sqlite_fdw_test/datetimes.data dates\n\n--Testcase 7:\nINSERT INTO tenk2 SELECT * FROM tenk1;\n\nCREATE TABLE bitwise_test(\n  i2 INT2,\n  i4 INT4,\n  i8 INT8,\n  i INTEGER,\n  x INT2\n);\n\nCREATE TABLE bool_test(\n  b1 BOOL,\n  b2 BOOL,\n  b3 BOOL,\n  b4 BOOL);\n\nCREATE TABLE bool_test_tmp(\n  b1 BOOL,\n  b2 BOOL, primary key (b1, b2));\n\n-- FOR AGGREGATEQ.SQL\n\ncreate table minmaxtest(f1 int);\ncreate table agg_tb(v int, id integer primary key autoincrement);\ncreate table agg_tb2(v text);\ncreate table agg_t1 (a int, b int, c int, d int, primary key (a, b));\ncreate table agg_t2 (x int, y int, z int, primary key (x, y));\ncreate table agg_t3 (a float8, b float8, id integer primary key autoincrement);\ncreate table agg_t4 (a float4, b float4, id integer primary key autoincrement);\ncreate table agg_t5 (a numeric, b numeric, id integer primary key autoincrement);\ncreate table agg_t6 (a float8, id integer primary key autoincrement);\ncreate table agg_t7 (a float8, b float8, c float8, d float8, id integer primary key autoincrement);\ncreate table agg_t8 (a text, b text, primary key (a));\nCREATE TABLE regr_test (x float8, y float8, id integer primary key autoincrement);\ncreate table agg_t9 (a int, b int, c int, primary key (a, b));\ncreate table agg_t10(one int, id integer primary key autoincrement);\ncreate table agg_t11(one int, two int, id integer primary key autoincrement);\ncreate table agg_t12(a int, id integer primary key autoincrement);\ncreate table agg_t13(x int, id integer primary key autoincrement);\ncreate table agg_t14(x int, y int, id integer primary key autoincrement);\ncreate table agg_data_2k(g int , id integer primary key autoincrement);\ncreate table agg_data_20k(g int , id integer primary key autoincrement);\ncreate table t1(f1 int4, f2 int8);\ncreate table t2(f1 int8, f2 int8);\ncreate table agg_t15(a text, b int, c int, id integer primary key autoincrement);\ncreate table agg_t16(a text, b text, id integer primary key autoincrement);\ncreate table agg_t17(foo text, bar text);\ncreate table agg_t170(v int);\ncreate table agg_t18 (inner_c int);\ncreate table agg_t19 (outer_c int);\ncreate table agg_t20 (x text);\ncreate table agg_t21 (x int);\ncreate table agg_t22 (c1 text, id int);\ncreate table agg_t23 (id int);\nCREATE TABLE float_tb(f real);\n\n-- multi-arg aggs\ncreate table multi_arg_agg (a int, b int, c text);\n\ncreate table agg_group_1 (c1 int, c2 numeric, c3 int);\ncreate table agg_group_2 (a int , c1 numeric, c2 text, c3 int);\ncreate table agg_group_3 (c1 numeric, c2 int, c3 int);\ncreate table agg_group_4 (c1 numeric, c2 text, c3 int);\n\ncreate table agg_hash_1 (c1 int, c2 numeric, c3 int);\ncreate table agg_hash_2 (a int , c1 numeric, c2 text, c3 int);\ncreate table agg_hash_3 (c1 numeric, c2 int, c3 int);\ncreate table agg_hash_4 (c1 numeric, c2 text, c3 int);\n\n-- FOR float4.sql\ncreate table testdata(bits text, id integer primary key autoincrement);\nCREATE TABLE NON_ERROR_THROWING_API_FLOAT4(f1 text, id serial);\n\n-- FOR float8.sql\nCREATE TABLE NON_ERROR_THROWING_API_FLOAT8(f1 text, id serial);\n\n-- FOR int4.sql\ncreate table numeric_tmp(f1 numeric, f2 numeric , id integer primary key autoincrement);\nCREATE TABLE NON_ERROR_THROWING_API_INT4(f1 text, id serial);\nCREATE TABLE special_case_int4 (f1 text, id integer primary key autoincrement);\n\nCREATE TABLE VARCHAR_TBL(f1 varchar(4));\n\n-- FOR int8.sql\nCREATE TABLE NON_ERROR_THROWING_API_INT8(f1 text, id serial);\nCREATE TABLE special_case_int8 (f1 text, id integer primary key autoincrement);\n\n--Testcase 8:\nINSERT INTO VARCHAR_TBL (f1) VALUES ('a');\n--Testcase 9:\nINSERT INTO VARCHAR_TBL (f1) VALUES ('ab');\n--Testcase 10:\nINSERT INTO VARCHAR_TBL (f1) VALUES ('abcd');\n\ncreate table bytea_test_table(v bytea);\ncreate table pagg_test (x int, y int);\n\n-- FOR numeric.sql\n\nCREATE TABLE num_data (id int4, val numeric, primary key (id));\nCREATE TABLE num_exp_add (id1 int4, id2 int4, expected numeric, primary key (id1, id2));\nCREATE TABLE num_exp_sub (id1 int4, id2 int4, expected numeric, primary key (id1, id2));\nCREATE TABLE num_exp_div (id1 int4, id2 int4, expected numeric, primary key (id1, id2));\nCREATE TABLE num_exp_mul (id1 int4, id2 int4, expected numeric, primary key (id1, id2));\nCREATE TABLE num_exp_sqrt (id int4, expected numeric, primary key (id));\nCREATE TABLE num_exp_ln (id int4, expected numeric, primary key (id));\nCREATE TABLE num_exp_log10 (id int4, expected numeric, primary key (id));\nCREATE TABLE num_exp_power_10_ln (id int4, expected numeric, primary key (id));\nCREATE TABLE num_variance (a numeric);\n\nCREATE TABLE num_result (id1 int4, id2 int4, result numeric, primary key (id1, id2));\nCREATE TABLE v (id int4, x numeric, val float8, primary key (id));\nINSERT INTO v(x) VALUES ('1e340'), ('-1e340');\nCREATE TABLE fract_only (id int, val numeric(4,4));\nCREATE TABLE ceil_floor_round (a numeric primary key);\nCREATE TABLE ceil_round_float8(a float8);\nCREATE TABLE width_bucket_tbl (id1 numeric, id2 numeric, id3 numeric, id4 int, id integer primary key autoincrement);\nCREATE TABLE width_bucket_test (operand_num numeric, operand_f8 float8);\nCREATE TABLE num_input_test (n1 numeric);\nCREATE TABLE num_trigger_test(n1 float8);\n\nCREATE TABLE num_tmp (n1 numeric, n2 numeric, id integer primary key autoincrement);\n\nCREATE TABLE to_number_tbl(a text, id integer primary key autoincrement);\nCREATE TABLE num_typemod_test (\n  millions numeric(3, -6),\n  thousands numeric(3, -3),\n  units numeric(3, 0),\n  thousandths numeric(3, 3),\n  millionths numeric(3, 6)\n);\n\nCREATE TABLE NON_ERROR_THROWING_API_INT4_NUMERIC(f1 text, id serial);\n\n-- FOR join.sql\n\ncreate table q1 (i int);\ncreate table q2 (i int);\nCREATE TABLE foo (f1 int);\n\nCREATE TABLE J1_TBL (\n  i integer,\n  j integer,\n  t text\n);\n\nCREATE TABLE J2_TBL (\n  i integer,\n  k integer\n);\n\ncreate table sub_tbl (key1 int, key3 int, key5 int, key6 int, value1 int, id integer primary key autoincrement);\n\nCREATE TABLE t11 (name TEXT, n INTEGER);\nCREATE TABLE t21 (name TEXT, n INTEGER);\nCREATE TABLE t31 (name TEXT, n INTEGER);\ncreate table x (x1 int, x2 int);\ncreate table y (y1 int, y2 int);\n\nCREATE TABLE t12 (a int, b int);\nCREATE TABLE t22 (a int, b int);\nCREATE TABLE t32 (x int, y int);\n\nCREATE TABLE tt1 ( tt1_id int4, joincol int4 );\nCREATE TABLE tt2 ( tt2_id int4, joincol int4 );\ncreate table tt3(f1 int, f2 text);\ncreate table tt4(f1 int);\ncreate table tt4x(c1 int, c2 int, c3 int);\ncreate table tt5(f1 int, f2 int);\ncreate table tt6(f1 int, f2 int);\ncreate table xx (pkxx int);\ncreate table yy (pkyy int, pkxx int);\ncreate table zt1 (f1 int primary key);\ncreate table zt2 (f2 int primary key);\ncreate table zt3 (f3 int primary key);\n\ncreate table a1 (i integer);\ncreate table b1 (x integer, y integer);\n\ncreate table a2 (\n     code char not null,\n     primary key (code)\n);\ncreate table b2 (\n     a char not null,\n     num integer not null,\n     primary key (a, num)\n);\ncreate table c2 (\n     name char not null,\n     a char,\n     primary key (name)\n);\n\ncreate table nt1 (\n  id int primary key,\n  a1 boolean,\n  a2 boolean\n);\ncreate table nt2 (\n  id int primary key,\n  nt1_id int,\n  b1 boolean,\n  b2 boolean,\n  foreign key (nt1_id) references nt1(id)\n);\ncreate table nt3 (\n  id int primary key,\n  nt2_id int,\n  c1 boolean,\n  foreign key (nt2_id) references nt2(id)\n);\n\nCREATE TABLE TEXT_TBL (f1 text);\n\n--Testcase 11:\nINSERT INTO TEXT_TBL VALUES ('doh!');\n--Testcase 12:\nINSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');\n\nCREATE TABLE a3 (id int PRIMARY KEY, b_id int);\nCREATE TABLE b3 (id int PRIMARY KEY, c_id int);\nCREATE TABLE c3 (id int PRIMARY KEY);\nCREATE TABLE d3 (a int, b int);\n\ncreate table parent (k int primary key, pd int);\ncreate table child (k int unique, cd int);\n\nCREATE TABLE a4 (id int PRIMARY KEY);\nCREATE TABLE b4 (id int PRIMARY KEY, a_id int);\n\ncreate table innertab (id int8 primary key, dat1 int8);\ncreate table uniquetbl (f1 text unique);\n\ncreate table join_pt1 (a int, b int, c varchar);\n\ncreate table fkest (a int, b int, c int unique, primary key(a,b));\ncreate table fkest1 (a int, b int, primary key(a,b) foreign key (a,b) references fkest);\n\ncreate table j11 (id int primary key);\ncreate table j21 (id int primary key);\ncreate table j31 (id int);\n\ncreate table j12 (id1 int, id2 int, primary key(id1,id2));\ncreate table j22 (id1 int, id2 int, primary key(id1,id2));\ncreate table j32 (id1 int, id2 int, primary key(id1,id2));\n\ncreate table inserttest01 (col1 int4, col2 int4 NOT NULL, col3 text default 'testing');\n\nCREATE TABLE update_test (\n    i   INT PRIMARY KEY,\n    a   INT DEFAULT 10,\n    b   INT,\n    c   TEXT\n);\n\ncreate table upsert_test (a int primary key, b text);\n\ncreate table t (a int unique);\ncreate table tbl_ra(a int unique, b int);\n\nCREATE TABLE \"type_FLOAT_INF\" (i int primary key, f float);\nCREATE VIEW  \"type_FLOAT_INF+\" AS SELECT *, typeof(\"f\") t, length(\"f\") l FROM \"type_FLOAT_INF\";\n-- In PostgreSQL some of this valus causes error but is infinity representation in SQLite\nINSERT INTO  \"type_FLOAT_INF\" VALUES (1, -1e999),(2, 1e999),(3, -9e999),(4, 9e999),(5,-1e308),(6, 0),(7, 1e308);\n\n-- FOR timestamp.sql\nCREATE TABLE infinite_timestamp (\n\tt1\tTIMESTAMP,\n\tt2\tTIMESTAMP,\n\tid integer primary key autoincrement\n);\n"
  },
  {
    "path": "sql/init_data/init_post.sql",
    "content": "DROP TABLE IF EXISTS \"T 0\";\nDROP TABLE IF EXISTS \"T 1\";\nDROP TABLE IF EXISTS \"T 2\";\nDROP TABLE IF EXISTS \"T 3\";\nDROP TABLE IF EXISTS \"T 4\";\nDROP TABLE IF EXISTS base_tbl;\nDROP TABLE IF EXISTS local_tbl;\nDROP TABLE IF EXISTS ft3;\nDROP TABLE IF EXISTS foreign_tbl;\nDROP TABLE IF EXISTS grem1;\nDROP TABLE IF EXISTS grem1_post14;\nDROP TABLE IF EXISTS loc1;\nDROP TABLE IF EXISTS loct;\nDROP TABLE IF EXISTS loct1;\nDROP TABLE IF EXISTS loct2;\nDROP TABLE IF EXISTS loct3;\nDROP TABLE IF EXISTS loct4;\nDROP TABLE IF EXISTS loct4_2;\nDROP TABLE IF EXISTS loct5;\nDROP TABLE IF EXISTS loct6;\nDROP TABLE IF EXISTS loct7;\nDROP TABLE IF EXISTS t1_constraint;\nDROP TABLE IF EXISTS tru_rtable0;\nDROP TABLE IF EXISTS tru_pk_table;\nDROP TABLE IF EXISTS tru_fk_table;\nDROP TABLE IF EXISTS tru_rtable_parent;\nDROP TABLE IF EXISTS tru_rtable_child;\nDROP TABLE IF EXISTS loct_empty;\nDROP TABLE IF EXISTS batch_table;\nDROP TABLE IF EXISTS loct1_rescan;\nDROP TABLE IF EXISTS loct2_rescan;\n\nCREATE TABLE \"T 0\" (\n\t\"C 1\" int,\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10),\n\tc8 text check (c8 IN ('foo', 'bar', 'buz')),\n\tCONSTRAINT t1_pkey PRIMARY KEY (\"C 1\")\n);\nCREATE TABLE \"T 1\" (\n\t\"C 1\" int,\n\tc2 int NOT NULL,\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10),\n\tc8 text check (c8 IN ('foo', 'bar', 'buz')),\n\tCONSTRAINT t1_pkey PRIMARY KEY (\"C 1\")\n);\nCREATE TABLE \"T 2\" (\n\tc1 int,\n\tc2 text,\n\tCONSTRAINT t2_pkey PRIMARY KEY (c1)\n);\nCREATE TABLE \"T 3\" (\n\tc1 int,\n\tc2 int NOT NULL,\n\tc3 text,\n\tCONSTRAINT t3_pkey PRIMARY KEY (c1)\n);\nCREATE TABLE \"T 4\" (\n\tc1 int,\n\tc2 int NOT NULL,\n\tc3 text,\n\tCONSTRAINT t4_pkey PRIMARY KEY (c1)\n);\nCREATE TABLE base_tbl (a int, b int);\nCREATE TABLE loc1 (f1 INTEGER, f2 text, id integer primary key autoincrement);\nCREATE TABLE loct (aa TEXT, bb TEXT);\nCREATE TABLE loct1 (f1 int, f2 int, f3 int);\nCREATE TABLE loct2 (f1 int, f2 int, f3 int);\ncreate table loct3 (a int, b text);\ncreate table loct4 (a int, b text);\ncreate table loct4_2 (f1 int, f2 int, f3 int);\ncreate table loct5 (a int check (a in (1)), b text);\ncreate table loct6 (a int check (a in (2)), b text);\ncreate table loct7 (a int check (a in (1)), b text);\n\ncreate table local_tbl (c1 int primary key, c2 int, c3 text);\ncreate table ft3 (f1 text, f2 text, f3 text, primary key (f1, f2, f3));\n\ncreate table foreign_tbl (a int primary key, b int);\ncreate table grem1 (a int primary key, b int);\ncreate table grem1_post14 (a int primary key, b int generated always as (a * 2) stored);\n\ncreate table loct1_rescan (c1 int);\ncreate table loct2_rescan (c1 int, c2 text);\n\nCREATE TABLE t1_constraint (\n\tc1 int primary key,\n\tc2 int NOT NULL check (c2 >= 0),\n\tc3 text,\n\tc4 timestamptz,\n\tc5 timestamp,\n\tc6 varchar(10),\n\tc7 char(10),\n\tc8 text check (c8 IN ('foo', 'bar', 'buz'))\n);\nCREATE TABLE tru_rtable0 (id int primary key);\nCREATE TABLE tru_pk_table(id int primary key);\nCREATE TABLE tru_fk_table(fkey int, CONSTRAINT tfk_pkey FOREIGN KEY (fkey) REFERENCES tru_pk_table(id) ON DELETE CASCADE);\nCREATE TABLE tru_rtable_parent (id int);\nCREATE TABLE tru_rtable_child (id int);\nCREATE TABLE loct_empty (c1 int NOT NULL, c2 text, CONSTRAINT tloct_pkey PRIMARY KEY (c1));\nCREATE TABLE batch_table ( x int );\nanalyze;\n"
  },
  {
    "path": "sql/init_data/init_selectfunc.sql",
    "content": "\nDROP TABLE IF EXISTS s3;\nCREATE TABLE s3(id text primary key, time timestamp, tag1 text, value1 float, value2 int, value3 float, value4 int, str1 text, str2 text);\nINSERT INTO 's3' VALUES (0, DATETIME('1970-01-01 00:00:00'), 'a', 0.1, 100, -0.1, -100, '---XYZ---', '   XYZ   ');\nINSERT INTO 's3' VALUES (1, DATETIME('1970-01-01 00:00:01'), 'a', 0.2, 100, -0.2, -100, '---XYZ---', '   XYZ   ');\nINSERT INTO 's3' VALUES (2, DATETIME('1970-01-01 00:00:02'), 'a', 0.3, 100, -0.3, -100, '---XYZ---', '   XYZ   ');\nINSERT INTO 's3' VALUES (3, DATETIME('1970-01-01 00:00:03'), 'b', 1.1, 200, -1.1, -200, '---XYZ---', '   XYZ   ');\nINSERT INTO 's3' VALUES (4, DATETIME('1970-01-01 00:00:04'), 'b', 2.2, 200, -2.2, -200, '---XYZ---', '   XYZ   ');\nINSERT INTO 's3' VALUES (5, DATETIME('1970-01-01 00:00:05'), 'b', 3.3, 200, -3.3, -200, '---XYZ---', '   XYZ   ');\n\nanalyze;\n"
  },
  {
    "path": "sql/init_data/onek.data",
    "content": "147\t0\t1\t3\t7\t7\t7\t47\t147\t147\t147\t14\t15\tRFAAAA\tAAAAAA\tAAAAxx\n931\t1\t1\t3\t1\t11\t1\t31\t131\t431\t931\t2\t3\tVJAAAA\tBAAAAA\tHHHHxx\n714\t2\t0\t2\t4\t14\t4\t14\t114\t214\t714\t8\t9\tMBAAAA\tCAAAAA\tOOOOxx\n711\t3\t1\t3\t1\t11\t1\t11\t111\t211\t711\t2\t3\tJBAAAA\tDAAAAA\tVVVVxx\n883\t4\t1\t3\t3\t3\t3\t83\t83\t383\t883\t6\t7\tZHAAAA\tEAAAAA\tAAAAxx\n439\t5\t1\t3\t9\t19\t9\t39\t39\t439\t439\t18\t19\tXQAAAA\tFAAAAA\tHHHHxx\n670\t6\t0\t2\t0\t10\t0\t70\t70\t170\t670\t0\t1\tUZAAAA\tGAAAAA\tOOOOxx\n543\t7\t1\t3\t3\t3\t3\t43\t143\t43\t543\t6\t7\tXUAAAA\tHAAAAA\tVVVVxx\n425\t8\t1\t1\t5\t5\t5\t25\t25\t425\t425\t10\t11\tJQAAAA\tIAAAAA\tAAAAxx\n800\t9\t0\t0\t0\t0\t0\t0\t0\t300\t800\t0\t1\tUEAAAA\tJAAAAA\tHHHHxx\n489\t10\t1\t1\t9\t9\t9\t89\t89\t489\t489\t18\t19\tVSAAAA\tKAAAAA\tOOOOxx\n494\t11\t0\t2\t4\t14\t4\t94\t94\t494\t494\t8\t9\tATAAAA\tLAAAAA\tVVVVxx\n880\t12\t0\t0\t0\t0\t0\t80\t80\t380\t880\t0\t1\tWHAAAA\tMAAAAA\tAAAAxx\n611\t13\t1\t3\t1\t11\t1\t11\t11\t111\t611\t2\t3\tNXAAAA\tNAAAAA\tHHHHxx\n226\t14\t0\t2\t6\t6\t6\t26\t26\t226\t226\t12\t13\tSIAAAA\tOAAAAA\tOOOOxx\n774\t15\t0\t2\t4\t14\t4\t74\t174\t274\t774\t8\t9\tUDAAAA\tPAAAAA\tVVVVxx\n298\t16\t0\t2\t8\t18\t8\t98\t98\t298\t298\t16\t17\tMLAAAA\tQAAAAA\tAAAAxx\n682\t17\t0\t2\t2\t2\t2\t82\t82\t182\t682\t4\t5\tGAAAAA\tRAAAAA\tHHHHxx\n864\t18\t0\t0\t4\t4\t4\t64\t64\t364\t864\t8\t9\tGHAAAA\tSAAAAA\tOOOOxx\n183\t19\t1\t3\t3\t3\t3\t83\t183\t183\t183\t6\t7\tBHAAAA\tTAAAAA\tVVVVxx\n885\t20\t1\t1\t5\t5\t5\t85\t85\t385\t885\t10\t11\tBIAAAA\tUAAAAA\tAAAAxx\n997\t21\t1\t1\t7\t17\t7\t97\t197\t497\t997\t14\t15\tJMAAAA\tVAAAAA\tHHHHxx\n966\t22\t0\t2\t6\t6\t6\t66\t166\t466\t966\t12\t13\tELAAAA\tWAAAAA\tOOOOxx\n389\t23\t1\t1\t9\t9\t9\t89\t189\t389\t389\t18\t19\tZOAAAA\tXAAAAA\tVVVVxx\n846\t24\t0\t2\t6\t6\t6\t46\t46\t346\t846\t12\t13\tOGAAAA\tYAAAAA\tAAAAxx\n206\t25\t0\t2\t6\t6\t6\t6\t6\t206\t206\t12\t13\tYHAAAA\tZAAAAA\tHHHHxx\n239\t26\t1\t3\t9\t19\t9\t39\t39\t239\t239\t18\t19\tFJAAAA\tABAAAA\tOOOOxx\n365\t27\t1\t1\t5\t5\t5\t65\t165\t365\t365\t10\t11\tBOAAAA\tBBAAAA\tVVVVxx\n204\t28\t0\t0\t4\t4\t4\t4\t4\t204\t204\t8\t9\tWHAAAA\tCBAAAA\tAAAAxx\n690\t29\t0\t2\t0\t10\t0\t90\t90\t190\t690\t0\t1\tOAAAAA\tDBAAAA\tHHHHxx\n69\t30\t1\t1\t9\t9\t9\t69\t69\t69\t69\t18\t19\tRCAAAA\tEBAAAA\tOOOOxx\n358\t31\t0\t2\t8\t18\t8\t58\t158\t358\t358\t16\t17\tUNAAAA\tFBAAAA\tVVVVxx\n269\t32\t1\t1\t9\t9\t9\t69\t69\t269\t269\t18\t19\tJKAAAA\tGBAAAA\tAAAAxx\n663\t33\t1\t3\t3\t3\t3\t63\t63\t163\t663\t6\t7\tNZAAAA\tHBAAAA\tHHHHxx\n608\t34\t0\t0\t8\t8\t8\t8\t8\t108\t608\t16\t17\tKXAAAA\tIBAAAA\tOOOOxx\n398\t35\t0\t2\t8\t18\t8\t98\t198\t398\t398\t16\t17\tIPAAAA\tJBAAAA\tVVVVxx\n330\t36\t0\t2\t0\t10\t0\t30\t130\t330\t330\t0\t1\tSMAAAA\tKBAAAA\tAAAAxx\n529\t37\t1\t1\t9\t9\t9\t29\t129\t29\t529\t18\t19\tJUAAAA\tLBAAAA\tHHHHxx\n555\t38\t1\t3\t5\t15\t5\t55\t155\t55\t555\t10\t11\tJVAAAA\tMBAAAA\tOOOOxx\n746\t39\t0\t2\t6\t6\t6\t46\t146\t246\t746\t12\t13\tSCAAAA\tNBAAAA\tVVVVxx\n558\t40\t0\t2\t8\t18\t8\t58\t158\t58\t558\t16\t17\tMVAAAA\tOBAAAA\tAAAAxx\n574\t41\t0\t2\t4\t14\t4\t74\t174\t74\t574\t8\t9\tCWAAAA\tPBAAAA\tHHHHxx\n343\t42\t1\t3\t3\t3\t3\t43\t143\t343\t343\t6\t7\tFNAAAA\tQBAAAA\tOOOOxx\n120\t43\t0\t0\t0\t0\t0\t20\t120\t120\t120\t0\t1\tQEAAAA\tRBAAAA\tVVVVxx\n461\t44\t1\t1\t1\t1\t1\t61\t61\t461\t461\t2\t3\tTRAAAA\tSBAAAA\tAAAAxx\n754\t45\t0\t2\t4\t14\t4\t54\t154\t254\t754\t8\t9\tADAAAA\tTBAAAA\tHHHHxx\n772\t46\t0\t0\t2\t12\t2\t72\t172\t272\t772\t4\t5\tSDAAAA\tUBAAAA\tOOOOxx\n749\t47\t1\t1\t9\t9\t9\t49\t149\t249\t749\t18\t19\tVCAAAA\tVBAAAA\tVVVVxx\n386\t48\t0\t2\t6\t6\t6\t86\t186\t386\t386\t12\t13\tWOAAAA\tWBAAAA\tAAAAxx\n9\t49\t1\t1\t9\t9\t9\t9\t9\t9\t9\t18\t19\tJAAAAA\tXBAAAA\tHHHHxx\n771\t50\t1\t3\t1\t11\t1\t71\t171\t271\t771\t2\t3\tRDAAAA\tYBAAAA\tOOOOxx\n470\t51\t0\t2\t0\t10\t0\t70\t70\t470\t470\t0\t1\tCSAAAA\tZBAAAA\tVVVVxx\n238\t52\t0\t2\t8\t18\t8\t38\t38\t238\t238\t16\t17\tEJAAAA\tACAAAA\tAAAAxx\n86\t53\t0\t2\t6\t6\t6\t86\t86\t86\t86\t12\t13\tIDAAAA\tBCAAAA\tHHHHxx\n56\t54\t0\t0\t6\t16\t6\t56\t56\t56\t56\t12\t13\tECAAAA\tCCAAAA\tOOOOxx\n767\t55\t1\t3\t7\t7\t7\t67\t167\t267\t767\t14\t15\tNDAAAA\tDCAAAA\tVVVVxx\n363\t56\t1\t3\t3\t3\t3\t63\t163\t363\t363\t6\t7\tZNAAAA\tECAAAA\tAAAAxx\n655\t57\t1\t3\t5\t15\t5\t55\t55\t155\t655\t10\t11\tFZAAAA\tFCAAAA\tHHHHxx\n394\t58\t0\t2\t4\t14\t4\t94\t194\t394\t394\t8\t9\tEPAAAA\tGCAAAA\tOOOOxx\n223\t59\t1\t3\t3\t3\t3\t23\t23\t223\t223\t6\t7\tPIAAAA\tHCAAAA\tVVVVxx\n946\t60\t0\t2\t6\t6\t6\t46\t146\t446\t946\t12\t13\tKKAAAA\tICAAAA\tAAAAxx\n863\t61\t1\t3\t3\t3\t3\t63\t63\t363\t863\t6\t7\tFHAAAA\tJCAAAA\tHHHHxx\n913\t62\t1\t1\t3\t13\t3\t13\t113\t413\t913\t6\t7\tDJAAAA\tKCAAAA\tOOOOxx\n737\t63\t1\t1\t7\t17\t7\t37\t137\t237\t737\t14\t15\tJCAAAA\tLCAAAA\tVVVVxx\n65\t64\t1\t1\t5\t5\t5\t65\t65\t65\t65\t10\t11\tNCAAAA\tMCAAAA\tAAAAxx\n251\t65\t1\t3\t1\t11\t1\t51\t51\t251\t251\t2\t3\tRJAAAA\tNCAAAA\tHHHHxx\n686\t66\t0\t2\t6\t6\t6\t86\t86\t186\t686\t12\t13\tKAAAAA\tOCAAAA\tOOOOxx\n971\t67\t1\t3\t1\t11\t1\t71\t171\t471\t971\t2\t3\tJLAAAA\tPCAAAA\tVVVVxx\n775\t68\t1\t3\t5\t15\t5\t75\t175\t275\t775\t10\t11\tVDAAAA\tQCAAAA\tAAAAxx\n577\t69\t1\t1\t7\t17\t7\t77\t177\t77\t577\t14\t15\tFWAAAA\tRCAAAA\tHHHHxx\n830\t70\t0\t2\t0\t10\t0\t30\t30\t330\t830\t0\t1\tYFAAAA\tSCAAAA\tOOOOxx\n787\t71\t1\t3\t7\t7\t7\t87\t187\t287\t787\t14\t15\tHEAAAA\tTCAAAA\tVVVVxx\n898\t72\t0\t2\t8\t18\t8\t98\t98\t398\t898\t16\t17\tOIAAAA\tUCAAAA\tAAAAxx\n588\t73\t0\t0\t8\t8\t8\t88\t188\t88\t588\t16\t17\tQWAAAA\tVCAAAA\tHHHHxx\n872\t74\t0\t0\t2\t12\t2\t72\t72\t372\t872\t4\t5\tOHAAAA\tWCAAAA\tOOOOxx\n397\t75\t1\t1\t7\t17\t7\t97\t197\t397\t397\t14\t15\tHPAAAA\tXCAAAA\tVVVVxx\n51\t76\t1\t3\t1\t11\t1\t51\t51\t51\t51\t2\t3\tZBAAAA\tYCAAAA\tAAAAxx\n381\t77\t1\t1\t1\t1\t1\t81\t181\t381\t381\t2\t3\tROAAAA\tZCAAAA\tHHHHxx\n632\t78\t0\t0\t2\t12\t2\t32\t32\t132\t632\t4\t5\tIYAAAA\tADAAAA\tOOOOxx\n31\t79\t1\t3\t1\t11\t1\t31\t31\t31\t31\t2\t3\tFBAAAA\tBDAAAA\tVVVVxx\n855\t80\t1\t3\t5\t15\t5\t55\t55\t355\t855\t10\t11\tXGAAAA\tCDAAAA\tAAAAxx\n699\t81\t1\t3\t9\t19\t9\t99\t99\t199\t699\t18\t19\tXAAAAA\tDDAAAA\tHHHHxx\n562\t82\t0\t2\t2\t2\t2\t62\t162\t62\t562\t4\t5\tQVAAAA\tEDAAAA\tOOOOxx\n681\t83\t1\t1\t1\t1\t1\t81\t81\t181\t681\t2\t3\tFAAAAA\tFDAAAA\tVVVVxx\n585\t84\t1\t1\t5\t5\t5\t85\t185\t85\t585\t10\t11\tNWAAAA\tGDAAAA\tAAAAxx\n35\t85\t1\t3\t5\t15\t5\t35\t35\t35\t35\t10\t11\tJBAAAA\tHDAAAA\tHHHHxx\n962\t86\t0\t2\t2\t2\t2\t62\t162\t462\t962\t4\t5\tALAAAA\tIDAAAA\tOOOOxx\n282\t87\t0\t2\t2\t2\t2\t82\t82\t282\t282\t4\t5\tWKAAAA\tJDAAAA\tVVVVxx\n254\t88\t0\t2\t4\t14\t4\t54\t54\t254\t254\t8\t9\tUJAAAA\tKDAAAA\tAAAAxx\n514\t89\t0\t2\t4\t14\t4\t14\t114\t14\t514\t8\t9\tUTAAAA\tLDAAAA\tHHHHxx\n406\t90\t0\t2\t6\t6\t6\t6\t6\t406\t406\t12\t13\tQPAAAA\tMDAAAA\tOOOOxx\n544\t91\t0\t0\t4\t4\t4\t44\t144\t44\t544\t8\t9\tYUAAAA\tNDAAAA\tVVVVxx\n704\t92\t0\t0\t4\t4\t4\t4\t104\t204\t704\t8\t9\tCBAAAA\tODAAAA\tAAAAxx\n948\t93\t0\t0\t8\t8\t8\t48\t148\t448\t948\t16\t17\tMKAAAA\tPDAAAA\tHHHHxx\n412\t94\t0\t0\t2\t12\t2\t12\t12\t412\t412\t4\t5\tWPAAAA\tQDAAAA\tOOOOxx\n200\t95\t0\t0\t0\t0\t0\t0\t0\t200\t200\t0\t1\tSHAAAA\tRDAAAA\tVVVVxx\n583\t96\t1\t3\t3\t3\t3\t83\t183\t83\t583\t6\t7\tLWAAAA\tSDAAAA\tAAAAxx\n486\t97\t0\t2\t6\t6\t6\t86\t86\t486\t486\t12\t13\tSSAAAA\tTDAAAA\tHHHHxx\n666\t98\t0\t2\t6\t6\t6\t66\t66\t166\t666\t12\t13\tQZAAAA\tUDAAAA\tOOOOxx\n436\t99\t0\t0\t6\t16\t6\t36\t36\t436\t436\t12\t13\tUQAAAA\tVDAAAA\tVVVVxx\n842\t100\t0\t2\t2\t2\t2\t42\t42\t342\t842\t4\t5\tKGAAAA\tWDAAAA\tAAAAxx\n99\t101\t1\t3\t9\t19\t9\t99\t99\t99\t99\t18\t19\tVDAAAA\tXDAAAA\tHHHHxx\n656\t102\t0\t0\t6\t16\t6\t56\t56\t156\t656\t12\t13\tGZAAAA\tYDAAAA\tOOOOxx\n673\t103\t1\t1\t3\t13\t3\t73\t73\t173\t673\t6\t7\tXZAAAA\tZDAAAA\tVVVVxx\n371\t104\t1\t3\t1\t11\t1\t71\t171\t371\t371\t2\t3\tHOAAAA\tAEAAAA\tAAAAxx\n869\t105\t1\t1\t9\t9\t9\t69\t69\t369\t869\t18\t19\tLHAAAA\tBEAAAA\tHHHHxx\n569\t106\t1\t1\t9\t9\t9\t69\t169\t69\t569\t18\t19\tXVAAAA\tCEAAAA\tOOOOxx\n616\t107\t0\t0\t6\t16\t6\t16\t16\t116\t616\t12\t13\tSXAAAA\tDEAAAA\tVVVVxx\n612\t108\t0\t0\t2\t12\t2\t12\t12\t112\t612\t4\t5\tOXAAAA\tEEAAAA\tAAAAxx\n505\t109\t1\t1\t5\t5\t5\t5\t105\t5\t505\t10\t11\tLTAAAA\tFEAAAA\tHHHHxx\n922\t110\t0\t2\t2\t2\t2\t22\t122\t422\t922\t4\t5\tMJAAAA\tGEAAAA\tOOOOxx\n221\t111\t1\t1\t1\t1\t1\t21\t21\t221\t221\t2\t3\tNIAAAA\tHEAAAA\tVVVVxx\n388\t112\t0\t0\t8\t8\t8\t88\t188\t388\t388\t16\t17\tYOAAAA\tIEAAAA\tAAAAxx\n567\t113\t1\t3\t7\t7\t7\t67\t167\t67\t567\t14\t15\tVVAAAA\tJEAAAA\tHHHHxx\n58\t114\t0\t2\t8\t18\t8\t58\t58\t58\t58\t16\t17\tGCAAAA\tKEAAAA\tOOOOxx\n316\t115\t0\t0\t6\t16\t6\t16\t116\t316\t316\t12\t13\tEMAAAA\tLEAAAA\tVVVVxx\n659\t116\t1\t3\t9\t19\t9\t59\t59\t159\t659\t18\t19\tJZAAAA\tMEAAAA\tAAAAxx\n501\t117\t1\t1\t1\t1\t1\t1\t101\t1\t501\t2\t3\tHTAAAA\tNEAAAA\tHHHHxx\n815\t118\t1\t3\t5\t15\t5\t15\t15\t315\t815\t10\t11\tJFAAAA\tOEAAAA\tOOOOxx\n638\t119\t0\t2\t8\t18\t8\t38\t38\t138\t638\t16\t17\tOYAAAA\tPEAAAA\tVVVVxx\n696\t120\t0\t0\t6\t16\t6\t96\t96\t196\t696\t12\t13\tUAAAAA\tQEAAAA\tAAAAxx\n734\t121\t0\t2\t4\t14\t4\t34\t134\t234\t734\t8\t9\tGCAAAA\tREAAAA\tHHHHxx\n237\t122\t1\t1\t7\t17\t7\t37\t37\t237\t237\t14\t15\tDJAAAA\tSEAAAA\tOOOOxx\n816\t123\t0\t0\t6\t16\t6\t16\t16\t316\t816\t12\t13\tKFAAAA\tTEAAAA\tVVVVxx\n917\t124\t1\t1\t7\t17\t7\t17\t117\t417\t917\t14\t15\tHJAAAA\tUEAAAA\tAAAAxx\n844\t125\t0\t0\t4\t4\t4\t44\t44\t344\t844\t8\t9\tMGAAAA\tVEAAAA\tHHHHxx\n657\t126\t1\t1\t7\t17\t7\t57\t57\t157\t657\t14\t15\tHZAAAA\tWEAAAA\tOOOOxx\n952\t127\t0\t0\t2\t12\t2\t52\t152\t452\t952\t4\t5\tQKAAAA\tXEAAAA\tVVVVxx\n519\t128\t1\t3\t9\t19\t9\t19\t119\t19\t519\t18\t19\tZTAAAA\tYEAAAA\tAAAAxx\n792\t129\t0\t0\t2\t12\t2\t92\t192\t292\t792\t4\t5\tMEAAAA\tZEAAAA\tHHHHxx\n275\t130\t1\t3\t5\t15\t5\t75\t75\t275\t275\t10\t11\tPKAAAA\tAFAAAA\tOOOOxx\n319\t131\t1\t3\t9\t19\t9\t19\t119\t319\t319\t18\t19\tHMAAAA\tBFAAAA\tVVVVxx\n487\t132\t1\t3\t7\t7\t7\t87\t87\t487\t487\t14\t15\tTSAAAA\tCFAAAA\tAAAAxx\n945\t133\t1\t1\t5\t5\t5\t45\t145\t445\t945\t10\t11\tJKAAAA\tDFAAAA\tHHHHxx\n584\t134\t0\t0\t4\t4\t4\t84\t184\t84\t584\t8\t9\tMWAAAA\tEFAAAA\tOOOOxx\n765\t135\t1\t1\t5\t5\t5\t65\t165\t265\t765\t10\t11\tLDAAAA\tFFAAAA\tVVVVxx\n814\t136\t0\t2\t4\t14\t4\t14\t14\t314\t814\t8\t9\tIFAAAA\tGFAAAA\tAAAAxx\n359\t137\t1\t3\t9\t19\t9\t59\t159\t359\t359\t18\t19\tVNAAAA\tHFAAAA\tHHHHxx\n548\t138\t0\t0\t8\t8\t8\t48\t148\t48\t548\t16\t17\tCVAAAA\tIFAAAA\tOOOOxx\n811\t139\t1\t3\t1\t11\t1\t11\t11\t311\t811\t2\t3\tFFAAAA\tJFAAAA\tVVVVxx\n531\t140\t1\t3\t1\t11\t1\t31\t131\t31\t531\t2\t3\tLUAAAA\tKFAAAA\tAAAAxx\n104\t141\t0\t0\t4\t4\t4\t4\t104\t104\t104\t8\t9\tAEAAAA\tLFAAAA\tHHHHxx\n33\t142\t1\t1\t3\t13\t3\t33\t33\t33\t33\t6\t7\tHBAAAA\tMFAAAA\tOOOOxx\n404\t143\t0\t0\t4\t4\t4\t4\t4\t404\t404\t8\t9\tOPAAAA\tNFAAAA\tVVVVxx\n995\t144\t1\t3\t5\t15\t5\t95\t195\t495\t995\t10\t11\tHMAAAA\tOFAAAA\tAAAAxx\n408\t145\t0\t0\t8\t8\t8\t8\t8\t408\t408\t16\t17\tSPAAAA\tPFAAAA\tHHHHxx\n93\t146\t1\t1\t3\t13\t3\t93\t93\t93\t93\t6\t7\tPDAAAA\tQFAAAA\tOOOOxx\n794\t147\t0\t2\t4\t14\t4\t94\t194\t294\t794\t8\t9\tOEAAAA\tRFAAAA\tVVVVxx\n833\t148\t1\t1\t3\t13\t3\t33\t33\t333\t833\t6\t7\tBGAAAA\tSFAAAA\tAAAAxx\n615\t149\t1\t3\t5\t15\t5\t15\t15\t115\t615\t10\t11\tRXAAAA\tTFAAAA\tHHHHxx\n333\t150\t1\t1\t3\t13\t3\t33\t133\t333\t333\t6\t7\tVMAAAA\tUFAAAA\tOOOOxx\n357\t151\t1\t1\t7\t17\t7\t57\t157\t357\t357\t14\t15\tTNAAAA\tVFAAAA\tVVVVxx\n999\t152\t1\t3\t9\t19\t9\t99\t199\t499\t999\t18\t19\tLMAAAA\tWFAAAA\tAAAAxx\n515\t153\t1\t3\t5\t15\t5\t15\t115\t15\t515\t10\t11\tVTAAAA\tXFAAAA\tHHHHxx\n685\t154\t1\t1\t5\t5\t5\t85\t85\t185\t685\t10\t11\tJAAAAA\tYFAAAA\tOOOOxx\n692\t155\t0\t0\t2\t12\t2\t92\t92\t192\t692\t4\t5\tQAAAAA\tZFAAAA\tVVVVxx\n627\t156\t1\t3\t7\t7\t7\t27\t27\t127\t627\t14\t15\tDYAAAA\tAGAAAA\tAAAAxx\n654\t157\t0\t2\t4\t14\t4\t54\t54\t154\t654\t8\t9\tEZAAAA\tBGAAAA\tHHHHxx\n115\t158\t1\t3\t5\t15\t5\t15\t115\t115\t115\t10\t11\tLEAAAA\tCGAAAA\tOOOOxx\n75\t159\t1\t3\t5\t15\t5\t75\t75\t75\t75\t10\t11\tXCAAAA\tDGAAAA\tVVVVxx\n14\t160\t0\t2\t4\t14\t4\t14\t14\t14\t14\t8\t9\tOAAAAA\tEGAAAA\tAAAAxx\n148\t161\t0\t0\t8\t8\t8\t48\t148\t148\t148\t16\t17\tSFAAAA\tFGAAAA\tHHHHxx\n201\t162\t1\t1\t1\t1\t1\t1\t1\t201\t201\t2\t3\tTHAAAA\tGGAAAA\tOOOOxx\n862\t163\t0\t2\t2\t2\t2\t62\t62\t362\t862\t4\t5\tEHAAAA\tHGAAAA\tVVVVxx\n634\t164\t0\t2\t4\t14\t4\t34\t34\t134\t634\t8\t9\tKYAAAA\tIGAAAA\tAAAAxx\n589\t165\t1\t1\t9\t9\t9\t89\t189\t89\t589\t18\t19\tRWAAAA\tJGAAAA\tHHHHxx\n142\t166\t0\t2\t2\t2\t2\t42\t142\t142\t142\t4\t5\tMFAAAA\tKGAAAA\tOOOOxx\n545\t167\t1\t1\t5\t5\t5\t45\t145\t45\t545\t10\t11\tZUAAAA\tLGAAAA\tVVVVxx\n983\t168\t1\t3\t3\t3\t3\t83\t183\t483\t983\t6\t7\tVLAAAA\tMGAAAA\tAAAAxx\n87\t169\t1\t3\t7\t7\t7\t87\t87\t87\t87\t14\t15\tJDAAAA\tNGAAAA\tHHHHxx\n335\t170\t1\t3\t5\t15\t5\t35\t135\t335\t335\t10\t11\tXMAAAA\tOGAAAA\tOOOOxx\n915\t171\t1\t3\t5\t15\t5\t15\t115\t415\t915\t10\t11\tFJAAAA\tPGAAAA\tVVVVxx\n286\t172\t0\t2\t6\t6\t6\t86\t86\t286\t286\t12\t13\tALAAAA\tQGAAAA\tAAAAxx\n361\t173\t1\t1\t1\t1\t1\t61\t161\t361\t361\t2\t3\tXNAAAA\tRGAAAA\tHHHHxx\n97\t174\t1\t1\t7\t17\t7\t97\t97\t97\t97\t14\t15\tTDAAAA\tSGAAAA\tOOOOxx\n98\t175\t0\t2\t8\t18\t8\t98\t98\t98\t98\t16\t17\tUDAAAA\tTGAAAA\tVVVVxx\n377\t176\t1\t1\t7\t17\t7\t77\t177\t377\t377\t14\t15\tNOAAAA\tUGAAAA\tAAAAxx\n525\t177\t1\t1\t5\t5\t5\t25\t125\t25\t525\t10\t11\tFUAAAA\tVGAAAA\tHHHHxx\n448\t178\t0\t0\t8\t8\t8\t48\t48\t448\t448\t16\t17\tGRAAAA\tWGAAAA\tOOOOxx\n154\t179\t0\t2\t4\t14\t4\t54\t154\t154\t154\t8\t9\tYFAAAA\tXGAAAA\tVVVVxx\n866\t180\t0\t2\t6\t6\t6\t66\t66\t366\t866\t12\t13\tIHAAAA\tYGAAAA\tAAAAxx\n741\t181\t1\t1\t1\t1\t1\t41\t141\t241\t741\t2\t3\tNCAAAA\tZGAAAA\tHHHHxx\n172\t182\t0\t0\t2\t12\t2\t72\t172\t172\t172\t4\t5\tQGAAAA\tAHAAAA\tOOOOxx\n843\t183\t1\t3\t3\t3\t3\t43\t43\t343\t843\t6\t7\tLGAAAA\tBHAAAA\tVVVVxx\n378\t184\t0\t2\t8\t18\t8\t78\t178\t378\t378\t16\t17\tOOAAAA\tCHAAAA\tAAAAxx\n804\t185\t0\t0\t4\t4\t4\t4\t4\t304\t804\t8\t9\tYEAAAA\tDHAAAA\tHHHHxx\n596\t186\t0\t0\t6\t16\t6\t96\t196\t96\t596\t12\t13\tYWAAAA\tEHAAAA\tOOOOxx\n77\t187\t1\t1\t7\t17\t7\t77\t77\t77\t77\t14\t15\tZCAAAA\tFHAAAA\tVVVVxx\n572\t188\t0\t0\t2\t12\t2\t72\t172\t72\t572\t4\t5\tAWAAAA\tGHAAAA\tAAAAxx\n444\t189\t0\t0\t4\t4\t4\t44\t44\t444\t444\t8\t9\tCRAAAA\tHHAAAA\tHHHHxx\n47\t190\t1\t3\t7\t7\t7\t47\t47\t47\t47\t14\t15\tVBAAAA\tIHAAAA\tOOOOxx\n274\t191\t0\t2\t4\t14\t4\t74\t74\t274\t274\t8\t9\tOKAAAA\tJHAAAA\tVVVVxx\n40\t192\t0\t0\t0\t0\t0\t40\t40\t40\t40\t0\t1\tOBAAAA\tKHAAAA\tAAAAxx\n339\t193\t1\t3\t9\t19\t9\t39\t139\t339\t339\t18\t19\tBNAAAA\tLHAAAA\tHHHHxx\n13\t194\t1\t1\t3\t13\t3\t13\t13\t13\t13\t6\t7\tNAAAAA\tMHAAAA\tOOOOxx\n878\t195\t0\t2\t8\t18\t8\t78\t78\t378\t878\t16\t17\tUHAAAA\tNHAAAA\tVVVVxx\n53\t196\t1\t1\t3\t13\t3\t53\t53\t53\t53\t6\t7\tBCAAAA\tOHAAAA\tAAAAxx\n939\t197\t1\t3\t9\t19\t9\t39\t139\t439\t939\t18\t19\tDKAAAA\tPHAAAA\tHHHHxx\n928\t198\t0\t0\t8\t8\t8\t28\t128\t428\t928\t16\t17\tSJAAAA\tQHAAAA\tOOOOxx\n886\t199\t0\t2\t6\t6\t6\t86\t86\t386\t886\t12\t13\tCIAAAA\tRHAAAA\tVVVVxx\n267\t200\t1\t3\t7\t7\t7\t67\t67\t267\t267\t14\t15\tHKAAAA\tSHAAAA\tAAAAxx\n105\t201\t1\t1\t5\t5\t5\t5\t105\t105\t105\t10\t11\tBEAAAA\tTHAAAA\tHHHHxx\n312\t202\t0\t0\t2\t12\t2\t12\t112\t312\t312\t4\t5\tAMAAAA\tUHAAAA\tOOOOxx\n552\t203\t0\t0\t2\t12\t2\t52\t152\t52\t552\t4\t5\tGVAAAA\tVHAAAA\tVVVVxx\n918\t204\t0\t2\t8\t18\t8\t18\t118\t418\t918\t16\t17\tIJAAAA\tWHAAAA\tAAAAxx\n114\t205\t0\t2\t4\t14\t4\t14\t114\t114\t114\t8\t9\tKEAAAA\tXHAAAA\tHHHHxx\n805\t206\t1\t1\t5\t5\t5\t5\t5\t305\t805\t10\t11\tZEAAAA\tYHAAAA\tOOOOxx\n875\t207\t1\t3\t5\t15\t5\t75\t75\t375\t875\t10\t11\tRHAAAA\tZHAAAA\tVVVVxx\n225\t208\t1\t1\t5\t5\t5\t25\t25\t225\t225\t10\t11\tRIAAAA\tAIAAAA\tAAAAxx\n495\t209\t1\t3\t5\t15\t5\t95\t95\t495\t495\t10\t11\tBTAAAA\tBIAAAA\tHHHHxx\n150\t210\t0\t2\t0\t10\t0\t50\t150\t150\t150\t0\t1\tUFAAAA\tCIAAAA\tOOOOxx\n759\t211\t1\t3\t9\t19\t9\t59\t159\t259\t759\t18\t19\tFDAAAA\tDIAAAA\tVVVVxx\n149\t212\t1\t1\t9\t9\t9\t49\t149\t149\t149\t18\t19\tTFAAAA\tEIAAAA\tAAAAxx\n480\t213\t0\t0\t0\t0\t0\t80\t80\t480\t480\t0\t1\tMSAAAA\tFIAAAA\tHHHHxx\n1\t214\t1\t1\t1\t1\t1\t1\t1\t1\t1\t2\t3\tBAAAAA\tGIAAAA\tOOOOxx\n557\t215\t1\t1\t7\t17\t7\t57\t157\t57\t557\t14\t15\tLVAAAA\tHIAAAA\tVVVVxx\n295\t216\t1\t3\t5\t15\t5\t95\t95\t295\t295\t10\t11\tJLAAAA\tIIAAAA\tAAAAxx\n854\t217\t0\t2\t4\t14\t4\t54\t54\t354\t854\t8\t9\tWGAAAA\tJIAAAA\tHHHHxx\n420\t218\t0\t0\t0\t0\t0\t20\t20\t420\t420\t0\t1\tEQAAAA\tKIAAAA\tOOOOxx\n414\t219\t0\t2\t4\t14\t4\t14\t14\t414\t414\t8\t9\tYPAAAA\tLIAAAA\tVVVVxx\n758\t220\t0\t2\t8\t18\t8\t58\t158\t258\t758\t16\t17\tEDAAAA\tMIAAAA\tAAAAxx\n879\t221\t1\t3\t9\t19\t9\t79\t79\t379\t879\t18\t19\tVHAAAA\tNIAAAA\tHHHHxx\n332\t222\t0\t0\t2\t12\t2\t32\t132\t332\t332\t4\t5\tUMAAAA\tOIAAAA\tOOOOxx\n78\t223\t0\t2\t8\t18\t8\t78\t78\t78\t78\t16\t17\tADAAAA\tPIAAAA\tVVVVxx\n851\t224\t1\t3\t1\t11\t1\t51\t51\t351\t851\t2\t3\tTGAAAA\tQIAAAA\tAAAAxx\n592\t225\t0\t0\t2\t12\t2\t92\t192\t92\t592\t4\t5\tUWAAAA\tRIAAAA\tHHHHxx\n979\t226\t1\t3\t9\t19\t9\t79\t179\t479\t979\t18\t19\tRLAAAA\tSIAAAA\tOOOOxx\n989\t227\t1\t1\t9\t9\t9\t89\t189\t489\t989\t18\t19\tBMAAAA\tTIAAAA\tVVVVxx\n752\t228\t0\t0\t2\t12\t2\t52\t152\t252\t752\t4\t5\tYCAAAA\tUIAAAA\tAAAAxx\n214\t229\t0\t2\t4\t14\t4\t14\t14\t214\t214\t8\t9\tGIAAAA\tVIAAAA\tHHHHxx\n453\t230\t1\t1\t3\t13\t3\t53\t53\t453\t453\t6\t7\tLRAAAA\tWIAAAA\tOOOOxx\n540\t231\t0\t0\t0\t0\t0\t40\t140\t40\t540\t0\t1\tUUAAAA\tXIAAAA\tVVVVxx\n597\t232\t1\t1\t7\t17\t7\t97\t197\t97\t597\t14\t15\tZWAAAA\tYIAAAA\tAAAAxx\n356\t233\t0\t0\t6\t16\t6\t56\t156\t356\t356\t12\t13\tSNAAAA\tZIAAAA\tHHHHxx\n720\t234\t0\t0\t0\t0\t0\t20\t120\t220\t720\t0\t1\tSBAAAA\tAJAAAA\tOOOOxx\n367\t235\t1\t3\t7\t7\t7\t67\t167\t367\t367\t14\t15\tDOAAAA\tBJAAAA\tVVVVxx\n762\t236\t0\t2\t2\t2\t2\t62\t162\t262\t762\t4\t5\tIDAAAA\tCJAAAA\tAAAAxx\n986\t237\t0\t2\t6\t6\t6\t86\t186\t486\t986\t12\t13\tYLAAAA\tDJAAAA\tHHHHxx\n924\t238\t0\t0\t4\t4\t4\t24\t124\t424\t924\t8\t9\tOJAAAA\tEJAAAA\tOOOOxx\n779\t239\t1\t3\t9\t19\t9\t79\t179\t279\t779\t18\t19\tZDAAAA\tFJAAAA\tVVVVxx\n684\t240\t0\t0\t4\t4\t4\t84\t84\t184\t684\t8\t9\tIAAAAA\tGJAAAA\tAAAAxx\n413\t241\t1\t1\t3\t13\t3\t13\t13\t413\t413\t6\t7\tXPAAAA\tHJAAAA\tHHHHxx\n479\t242\t1\t3\t9\t19\t9\t79\t79\t479\t479\t18\t19\tLSAAAA\tIJAAAA\tOOOOxx\n731\t243\t1\t3\t1\t11\t1\t31\t131\t231\t731\t2\t3\tDCAAAA\tJJAAAA\tVVVVxx\n409\t244\t1\t1\t9\t9\t9\t9\t9\t409\t409\t18\t19\tTPAAAA\tKJAAAA\tAAAAxx\n372\t245\t0\t0\t2\t12\t2\t72\t172\t372\t372\t4\t5\tIOAAAA\tLJAAAA\tHHHHxx\n139\t246\t1\t3\t9\t19\t9\t39\t139\t139\t139\t18\t19\tJFAAAA\tMJAAAA\tOOOOxx\n717\t247\t1\t1\t7\t17\t7\t17\t117\t217\t717\t14\t15\tPBAAAA\tNJAAAA\tVVVVxx\n539\t248\t1\t3\t9\t19\t9\t39\t139\t39\t539\t18\t19\tTUAAAA\tOJAAAA\tAAAAxx\n318\t249\t0\t2\t8\t18\t8\t18\t118\t318\t318\t16\t17\tGMAAAA\tPJAAAA\tHHHHxx\n208\t250\t0\t0\t8\t8\t8\t8\t8\t208\t208\t16\t17\tAIAAAA\tQJAAAA\tOOOOxx\n797\t251\t1\t1\t7\t17\t7\t97\t197\t297\t797\t14\t15\tREAAAA\tRJAAAA\tVVVVxx\n661\t252\t1\t1\t1\t1\t1\t61\t61\t161\t661\t2\t3\tLZAAAA\tSJAAAA\tAAAAxx\n50\t253\t0\t2\t0\t10\t0\t50\t50\t50\t50\t0\t1\tYBAAAA\tTJAAAA\tHHHHxx\n102\t254\t0\t2\t2\t2\t2\t2\t102\t102\t102\t4\t5\tYDAAAA\tUJAAAA\tOOOOxx\n484\t255\t0\t0\t4\t4\t4\t84\t84\t484\t484\t8\t9\tQSAAAA\tVJAAAA\tVVVVxx\n108\t256\t0\t0\t8\t8\t8\t8\t108\t108\t108\t16\t17\tEEAAAA\tWJAAAA\tAAAAxx\n140\t257\t0\t0\t0\t0\t0\t40\t140\t140\t140\t0\t1\tKFAAAA\tXJAAAA\tHHHHxx\n996\t258\t0\t0\t6\t16\t6\t96\t196\t496\t996\t12\t13\tIMAAAA\tYJAAAA\tOOOOxx\n687\t259\t1\t3\t7\t7\t7\t87\t87\t187\t687\t14\t15\tLAAAAA\tZJAAAA\tVVVVxx\n241\t260\t1\t1\t1\t1\t1\t41\t41\t241\t241\t2\t3\tHJAAAA\tAKAAAA\tAAAAxx\n923\t261\t1\t3\t3\t3\t3\t23\t123\t423\t923\t6\t7\tNJAAAA\tBKAAAA\tHHHHxx\n500\t262\t0\t0\t0\t0\t0\t0\t100\t0\t500\t0\t1\tGTAAAA\tCKAAAA\tOOOOxx\n536\t263\t0\t0\t6\t16\t6\t36\t136\t36\t536\t12\t13\tQUAAAA\tDKAAAA\tVVVVxx\n490\t264\t0\t2\t0\t10\t0\t90\t90\t490\t490\t0\t1\tWSAAAA\tEKAAAA\tAAAAxx\n773\t265\t1\t1\t3\t13\t3\t73\t173\t273\t773\t6\t7\tTDAAAA\tFKAAAA\tHHHHxx\n19\t266\t1\t3\t9\t19\t9\t19\t19\t19\t19\t18\t19\tTAAAAA\tGKAAAA\tOOOOxx\n534\t267\t0\t2\t4\t14\t4\t34\t134\t34\t534\t8\t9\tOUAAAA\tHKAAAA\tVVVVxx\n941\t268\t1\t1\t1\t1\t1\t41\t141\t441\t941\t2\t3\tFKAAAA\tIKAAAA\tAAAAxx\n477\t269\t1\t1\t7\t17\t7\t77\t77\t477\t477\t14\t15\tJSAAAA\tJKAAAA\tHHHHxx\n173\t270\t1\t1\t3\t13\t3\t73\t173\t173\t173\t6\t7\tRGAAAA\tKKAAAA\tOOOOxx\n113\t271\t1\t1\t3\t13\t3\t13\t113\t113\t113\t6\t7\tJEAAAA\tLKAAAA\tVVVVxx\n526\t272\t0\t2\t6\t6\t6\t26\t126\t26\t526\t12\t13\tGUAAAA\tMKAAAA\tAAAAxx\n727\t273\t1\t3\t7\t7\t7\t27\t127\t227\t727\t14\t15\tZBAAAA\tNKAAAA\tHHHHxx\n302\t274\t0\t2\t2\t2\t2\t2\t102\t302\t302\t4\t5\tQLAAAA\tOKAAAA\tOOOOxx\n789\t275\t1\t1\t9\t9\t9\t89\t189\t289\t789\t18\t19\tJEAAAA\tPKAAAA\tVVVVxx\n447\t276\t1\t3\t7\t7\t7\t47\t47\t447\t447\t14\t15\tFRAAAA\tQKAAAA\tAAAAxx\n884\t277\t0\t0\t4\t4\t4\t84\t84\t384\t884\t8\t9\tAIAAAA\tRKAAAA\tHHHHxx\n718\t278\t0\t2\t8\t18\t8\t18\t118\t218\t718\t16\t17\tQBAAAA\tSKAAAA\tOOOOxx\n818\t279\t0\t2\t8\t18\t8\t18\t18\t318\t818\t16\t17\tMFAAAA\tTKAAAA\tVVVVxx\n466\t280\t0\t2\t6\t6\t6\t66\t66\t466\t466\t12\t13\tYRAAAA\tUKAAAA\tAAAAxx\n131\t281\t1\t3\t1\t11\t1\t31\t131\t131\t131\t2\t3\tBFAAAA\tVKAAAA\tHHHHxx\n503\t282\t1\t3\t3\t3\t3\t3\t103\t3\t503\t6\t7\tJTAAAA\tWKAAAA\tOOOOxx\n364\t283\t0\t0\t4\t4\t4\t64\t164\t364\t364\t8\t9\tAOAAAA\tXKAAAA\tVVVVxx\n934\t284\t0\t2\t4\t14\t4\t34\t134\t434\t934\t8\t9\tYJAAAA\tYKAAAA\tAAAAxx\n542\t285\t0\t2\t2\t2\t2\t42\t142\t42\t542\t4\t5\tWUAAAA\tZKAAAA\tHHHHxx\n146\t286\t0\t2\t6\t6\t6\t46\t146\t146\t146\t12\t13\tQFAAAA\tALAAAA\tOOOOxx\n652\t287\t0\t0\t2\t12\t2\t52\t52\t152\t652\t4\t5\tCZAAAA\tBLAAAA\tVVVVxx\n566\t288\t0\t2\t6\t6\t6\t66\t166\t66\t566\t12\t13\tUVAAAA\tCLAAAA\tAAAAxx\n788\t289\t0\t0\t8\t8\t8\t88\t188\t288\t788\t16\t17\tIEAAAA\tDLAAAA\tHHHHxx\n168\t290\t0\t0\t8\t8\t8\t68\t168\t168\t168\t16\t17\tMGAAAA\tELAAAA\tOOOOxx\n736\t291\t0\t0\t6\t16\t6\t36\t136\t236\t736\t12\t13\tICAAAA\tFLAAAA\tVVVVxx\n795\t292\t1\t3\t5\t15\t5\t95\t195\t295\t795\t10\t11\tPEAAAA\tGLAAAA\tAAAAxx\n103\t293\t1\t3\t3\t3\t3\t3\t103\t103\t103\t6\t7\tZDAAAA\tHLAAAA\tHHHHxx\n763\t294\t1\t3\t3\t3\t3\t63\t163\t263\t763\t6\t7\tJDAAAA\tILAAAA\tOOOOxx\n256\t295\t0\t0\t6\t16\t6\t56\t56\t256\t256\t12\t13\tWJAAAA\tJLAAAA\tVVVVxx\n63\t296\t1\t3\t3\t3\t3\t63\t63\t63\t63\t6\t7\tLCAAAA\tKLAAAA\tAAAAxx\n702\t297\t0\t2\t2\t2\t2\t2\t102\t202\t702\t4\t5\tABAAAA\tLLAAAA\tHHHHxx\n390\t298\t0\t2\t0\t10\t0\t90\t190\t390\t390\t0\t1\tAPAAAA\tMLAAAA\tOOOOxx\n116\t299\t0\t0\t6\t16\t6\t16\t116\t116\t116\t12\t13\tMEAAAA\tNLAAAA\tVVVVxx\n354\t300\t0\t2\t4\t14\t4\t54\t154\t354\t354\t8\t9\tQNAAAA\tOLAAAA\tAAAAxx\n162\t301\t0\t2\t2\t2\t2\t62\t162\t162\t162\t4\t5\tGGAAAA\tPLAAAA\tHHHHxx\n71\t302\t1\t3\t1\t11\t1\t71\t71\t71\t71\t2\t3\tTCAAAA\tQLAAAA\tOOOOxx\n916\t303\t0\t0\t6\t16\t6\t16\t116\t416\t916\t12\t13\tGJAAAA\tRLAAAA\tVVVVxx\n565\t304\t1\t1\t5\t5\t5\t65\t165\t65\t565\t10\t11\tTVAAAA\tSLAAAA\tAAAAxx\n509\t305\t1\t1\t9\t9\t9\t9\t109\t9\t509\t18\t19\tPTAAAA\tTLAAAA\tHHHHxx\n20\t306\t0\t0\t0\t0\t0\t20\t20\t20\t20\t0\t1\tUAAAAA\tULAAAA\tOOOOxx\n813\t307\t1\t1\t3\t13\t3\t13\t13\t313\t813\t6\t7\tHFAAAA\tVLAAAA\tVVVVxx\n80\t308\t0\t0\t0\t0\t0\t80\t80\t80\t80\t0\t1\tCDAAAA\tWLAAAA\tAAAAxx\n400\t309\t0\t0\t0\t0\t0\t0\t0\t400\t400\t0\t1\tKPAAAA\tXLAAAA\tHHHHxx\n888\t310\t0\t0\t8\t8\t8\t88\t88\t388\t888\t16\t17\tEIAAAA\tYLAAAA\tOOOOxx\n825\t311\t1\t1\t5\t5\t5\t25\t25\t325\t825\t10\t11\tTFAAAA\tZLAAAA\tVVVVxx\n401\t312\t1\t1\t1\t1\t1\t1\t1\t401\t401\t2\t3\tLPAAAA\tAMAAAA\tAAAAxx\n158\t313\t0\t2\t8\t18\t8\t58\t158\t158\t158\t16\t17\tCGAAAA\tBMAAAA\tHHHHxx\n973\t314\t1\t1\t3\t13\t3\t73\t173\t473\t973\t6\t7\tLLAAAA\tCMAAAA\tOOOOxx\n324\t315\t0\t0\t4\t4\t4\t24\t124\t324\t324\t8\t9\tMMAAAA\tDMAAAA\tVVVVxx\n873\t316\t1\t1\t3\t13\t3\t73\t73\t373\t873\t6\t7\tPHAAAA\tEMAAAA\tAAAAxx\n676\t317\t0\t0\t6\t16\t6\t76\t76\t176\t676\t12\t13\tAAAAAA\tFMAAAA\tHHHHxx\n199\t318\t1\t3\t9\t19\t9\t99\t199\t199\t199\t18\t19\tRHAAAA\tGMAAAA\tOOOOxx\n304\t319\t0\t0\t4\t4\t4\t4\t104\t304\t304\t8\t9\tSLAAAA\tHMAAAA\tVVVVxx\n338\t320\t0\t2\t8\t18\t8\t38\t138\t338\t338\t16\t17\tANAAAA\tIMAAAA\tAAAAxx\n743\t321\t1\t3\t3\t3\t3\t43\t143\t243\t743\t6\t7\tPCAAAA\tJMAAAA\tHHHHxx\n730\t322\t0\t2\t0\t10\t0\t30\t130\t230\t730\t0\t1\tCCAAAA\tKMAAAA\tOOOOxx\n130\t323\t0\t2\t0\t10\t0\t30\t130\t130\t130\t0\t1\tAFAAAA\tLMAAAA\tVVVVxx\n224\t324\t0\t0\t4\t4\t4\t24\t24\t224\t224\t8\t9\tQIAAAA\tMMAAAA\tAAAAxx\n216\t325\t0\t0\t6\t16\t6\t16\t16\t216\t216\t12\t13\tIIAAAA\tNMAAAA\tHHHHxx\n2\t326\t0\t2\t2\t2\t2\t2\t2\t2\t2\t4\t5\tCAAAAA\tOMAAAA\tOOOOxx\n836\t327\t0\t0\t6\t16\t6\t36\t36\t336\t836\t12\t13\tEGAAAA\tPMAAAA\tVVVVxx\n443\t328\t1\t3\t3\t3\t3\t43\t43\t443\t443\t6\t7\tBRAAAA\tQMAAAA\tAAAAxx\n777\t329\t1\t1\t7\t17\t7\t77\t177\t277\t777\t14\t15\tXDAAAA\tRMAAAA\tHHHHxx\n126\t330\t0\t2\t6\t6\t6\t26\t126\t126\t126\t12\t13\tWEAAAA\tSMAAAA\tOOOOxx\n117\t331\t1\t1\t7\t17\t7\t17\t117\t117\t117\t14\t15\tNEAAAA\tTMAAAA\tVVVVxx\n633\t332\t1\t1\t3\t13\t3\t33\t33\t133\t633\t6\t7\tJYAAAA\tUMAAAA\tAAAAxx\n310\t333\t0\t2\t0\t10\t0\t10\t110\t310\t310\t0\t1\tYLAAAA\tVMAAAA\tHHHHxx\n622\t334\t0\t2\t2\t2\t2\t22\t22\t122\t622\t4\t5\tYXAAAA\tWMAAAA\tOOOOxx\n268\t335\t0\t0\t8\t8\t8\t68\t68\t268\t268\t16\t17\tIKAAAA\tXMAAAA\tVVVVxx\n384\t336\t0\t0\t4\t4\t4\t84\t184\t384\t384\t8\t9\tUOAAAA\tYMAAAA\tAAAAxx\n460\t337\t0\t0\t0\t0\t0\t60\t60\t460\t460\t0\t1\tSRAAAA\tZMAAAA\tHHHHxx\n475\t338\t1\t3\t5\t15\t5\t75\t75\t475\t475\t10\t11\tHSAAAA\tANAAAA\tOOOOxx\n624\t339\t0\t0\t4\t4\t4\t24\t24\t124\t624\t8\t9\tAYAAAA\tBNAAAA\tVVVVxx\n826\t340\t0\t2\t6\t6\t6\t26\t26\t326\t826\t12\t13\tUFAAAA\tCNAAAA\tAAAAxx\n680\t341\t0\t0\t0\t0\t0\t80\t80\t180\t680\t0\t1\tEAAAAA\tDNAAAA\tHHHHxx\n306\t342\t0\t2\t6\t6\t6\t6\t106\t306\t306\t12\t13\tULAAAA\tENAAAA\tOOOOxx\n896\t343\t0\t0\t6\t16\t6\t96\t96\t396\t896\t12\t13\tMIAAAA\tFNAAAA\tVVVVxx\n30\t344\t0\t2\t0\t10\t0\t30\t30\t30\t30\t0\t1\tEBAAAA\tGNAAAA\tAAAAxx\n576\t345\t0\t0\t6\t16\t6\t76\t176\t76\t576\t12\t13\tEWAAAA\tHNAAAA\tHHHHxx\n551\t346\t1\t3\t1\t11\t1\t51\t151\t51\t551\t2\t3\tFVAAAA\tINAAAA\tOOOOxx\n639\t347\t1\t3\t9\t19\t9\t39\t39\t139\t639\t18\t19\tPYAAAA\tJNAAAA\tVVVVxx\n975\t348\t1\t3\t5\t15\t5\t75\t175\t475\t975\t10\t11\tNLAAAA\tKNAAAA\tAAAAxx\n882\t349\t0\t2\t2\t2\t2\t82\t82\t382\t882\t4\t5\tYHAAAA\tLNAAAA\tHHHHxx\n160\t350\t0\t0\t0\t0\t0\t60\t160\t160\t160\t0\t1\tEGAAAA\tMNAAAA\tOOOOxx\n522\t351\t0\t2\t2\t2\t2\t22\t122\t22\t522\t4\t5\tCUAAAA\tNNAAAA\tVVVVxx\n620\t352\t0\t0\t0\t0\t0\t20\t20\t120\t620\t0\t1\tWXAAAA\tONAAAA\tAAAAxx\n719\t353\t1\t3\t9\t19\t9\t19\t119\t219\t719\t18\t19\tRBAAAA\tPNAAAA\tHHHHxx\n88\t354\t0\t0\t8\t8\t8\t88\t88\t88\t88\t16\t17\tKDAAAA\tQNAAAA\tOOOOxx\n614\t355\t0\t2\t4\t14\t4\t14\t14\t114\t614\t8\t9\tQXAAAA\tRNAAAA\tVVVVxx\n54\t356\t0\t2\t4\t14\t4\t54\t54\t54\t54\t8\t9\tCCAAAA\tSNAAAA\tAAAAxx\n209\t357\t1\t1\t9\t9\t9\t9\t9\t209\t209\t18\t19\tBIAAAA\tTNAAAA\tHHHHxx\n67\t358\t1\t3\t7\t7\t7\t67\t67\t67\t67\t14\t15\tPCAAAA\tUNAAAA\tOOOOxx\n809\t359\t1\t1\t9\t9\t9\t9\t9\t309\t809\t18\t19\tDFAAAA\tVNAAAA\tVVVVxx\n982\t360\t0\t2\t2\t2\t2\t82\t182\t482\t982\t4\t5\tULAAAA\tWNAAAA\tAAAAxx\n817\t361\t1\t1\t7\t17\t7\t17\t17\t317\t817\t14\t15\tLFAAAA\tXNAAAA\tHHHHxx\n187\t362\t1\t3\t7\t7\t7\t87\t187\t187\t187\t14\t15\tFHAAAA\tYNAAAA\tOOOOxx\n992\t363\t0\t0\t2\t12\t2\t92\t192\t492\t992\t4\t5\tEMAAAA\tZNAAAA\tVVVVxx\n580\t364\t0\t0\t0\t0\t0\t80\t180\t80\t580\t0\t1\tIWAAAA\tAOAAAA\tAAAAxx\n658\t365\t0\t2\t8\t18\t8\t58\t58\t158\t658\t16\t17\tIZAAAA\tBOAAAA\tHHHHxx\n222\t366\t0\t2\t2\t2\t2\t22\t22\t222\t222\t4\t5\tOIAAAA\tCOAAAA\tOOOOxx\n667\t367\t1\t3\t7\t7\t7\t67\t67\t167\t667\t14\t15\tRZAAAA\tDOAAAA\tVVVVxx\n715\t368\t1\t3\t5\t15\t5\t15\t115\t215\t715\t10\t11\tNBAAAA\tEOAAAA\tAAAAxx\n990\t369\t0\t2\t0\t10\t0\t90\t190\t490\t990\t0\t1\tCMAAAA\tFOAAAA\tHHHHxx\n22\t370\t0\t2\t2\t2\t2\t22\t22\t22\t22\t4\t5\tWAAAAA\tGOAAAA\tOOOOxx\n362\t371\t0\t2\t2\t2\t2\t62\t162\t362\t362\t4\t5\tYNAAAA\tHOAAAA\tVVVVxx\n376\t372\t0\t0\t6\t16\t6\t76\t176\t376\t376\t12\t13\tMOAAAA\tIOAAAA\tAAAAxx\n246\t373\t0\t2\t6\t6\t6\t46\t46\t246\t246\t12\t13\tMJAAAA\tJOAAAA\tHHHHxx\n300\t374\t0\t0\t0\t0\t0\t0\t100\t300\t300\t0\t1\tOLAAAA\tKOAAAA\tOOOOxx\n231\t375\t1\t3\t1\t11\t1\t31\t31\t231\t231\t2\t3\tXIAAAA\tLOAAAA\tVVVVxx\n151\t376\t1\t3\t1\t11\t1\t51\t151\t151\t151\t2\t3\tVFAAAA\tMOAAAA\tAAAAxx\n29\t377\t1\t1\t9\t9\t9\t29\t29\t29\t29\t18\t19\tDBAAAA\tNOAAAA\tHHHHxx\n297\t378\t1\t1\t7\t17\t7\t97\t97\t297\t297\t14\t15\tLLAAAA\tOOAAAA\tOOOOxx\n403\t379\t1\t3\t3\t3\t3\t3\t3\t403\t403\t6\t7\tNPAAAA\tPOAAAA\tVVVVxx\n716\t380\t0\t0\t6\t16\t6\t16\t116\t216\t716\t12\t13\tOBAAAA\tQOAAAA\tAAAAxx\n260\t381\t0\t0\t0\t0\t0\t60\t60\t260\t260\t0\t1\tAKAAAA\tROAAAA\tHHHHxx\n170\t382\t0\t2\t0\t10\t0\t70\t170\t170\t170\t0\t1\tOGAAAA\tSOAAAA\tOOOOxx\n285\t383\t1\t1\t5\t5\t5\t85\t85\t285\t285\t10\t11\tZKAAAA\tTOAAAA\tVVVVxx\n82\t384\t0\t2\t2\t2\t2\t82\t82\t82\t82\t4\t5\tEDAAAA\tUOAAAA\tAAAAxx\n958\t385\t0\t2\t8\t18\t8\t58\t158\t458\t958\t16\t17\tWKAAAA\tVOAAAA\tHHHHxx\n175\t386\t1\t3\t5\t15\t5\t75\t175\t175\t175\t10\t11\tTGAAAA\tWOAAAA\tOOOOxx\n671\t387\t1\t3\t1\t11\t1\t71\t71\t171\t671\t2\t3\tVZAAAA\tXOAAAA\tVVVVxx\n822\t388\t0\t2\t2\t2\t2\t22\t22\t322\t822\t4\t5\tQFAAAA\tYOAAAA\tAAAAxx\n573\t389\t1\t1\t3\t13\t3\t73\t173\t73\t573\t6\t7\tBWAAAA\tZOAAAA\tHHHHxx\n723\t390\t1\t3\t3\t3\t3\t23\t123\t223\t723\t6\t7\tVBAAAA\tAPAAAA\tOOOOxx\n195\t391\t1\t3\t5\t15\t5\t95\t195\t195\t195\t10\t11\tNHAAAA\tBPAAAA\tVVVVxx\n197\t392\t1\t1\t7\t17\t7\t97\t197\t197\t197\t14\t15\tPHAAAA\tCPAAAA\tAAAAxx\n755\t393\t1\t3\t5\t15\t5\t55\t155\t255\t755\t10\t11\tBDAAAA\tDPAAAA\tHHHHxx\n42\t394\t0\t2\t2\t2\t2\t42\t42\t42\t42\t4\t5\tQBAAAA\tEPAAAA\tOOOOxx\n897\t395\t1\t1\t7\t17\t7\t97\t97\t397\t897\t14\t15\tNIAAAA\tFPAAAA\tVVVVxx\n309\t396\t1\t1\t9\t9\t9\t9\t109\t309\t309\t18\t19\tXLAAAA\tGPAAAA\tAAAAxx\n724\t397\t0\t0\t4\t4\t4\t24\t124\t224\t724\t8\t9\tWBAAAA\tHPAAAA\tHHHHxx\n474\t398\t0\t2\t4\t14\t4\t74\t74\t474\t474\t8\t9\tGSAAAA\tIPAAAA\tOOOOxx\n345\t399\t1\t1\t5\t5\t5\t45\t145\t345\t345\t10\t11\tHNAAAA\tJPAAAA\tVVVVxx\n678\t400\t0\t2\t8\t18\t8\t78\t78\t178\t678\t16\t17\tCAAAAA\tKPAAAA\tAAAAxx\n757\t401\t1\t1\t7\t17\t7\t57\t157\t257\t757\t14\t15\tDDAAAA\tLPAAAA\tHHHHxx\n600\t402\t0\t0\t0\t0\t0\t0\t0\t100\t600\t0\t1\tCXAAAA\tMPAAAA\tOOOOxx\n184\t403\t0\t0\t4\t4\t4\t84\t184\t184\t184\t8\t9\tCHAAAA\tNPAAAA\tVVVVxx\n155\t404\t1\t3\t5\t15\t5\t55\t155\t155\t155\t10\t11\tZFAAAA\tOPAAAA\tAAAAxx\n136\t405\t0\t0\t6\t16\t6\t36\t136\t136\t136\t12\t13\tGFAAAA\tPPAAAA\tHHHHxx\n889\t406\t1\t1\t9\t9\t9\t89\t89\t389\t889\t18\t19\tFIAAAA\tQPAAAA\tOOOOxx\n95\t407\t1\t3\t5\t15\t5\t95\t95\t95\t95\t10\t11\tRDAAAA\tRPAAAA\tVVVVxx\n549\t408\t1\t1\t9\t9\t9\t49\t149\t49\t549\t18\t19\tDVAAAA\tSPAAAA\tAAAAxx\n81\t409\t1\t1\t1\t1\t1\t81\t81\t81\t81\t2\t3\tDDAAAA\tTPAAAA\tHHHHxx\n679\t410\t1\t3\t9\t19\t9\t79\t79\t179\t679\t18\t19\tDAAAAA\tUPAAAA\tOOOOxx\n27\t411\t1\t3\t7\t7\t7\t27\t27\t27\t27\t14\t15\tBBAAAA\tVPAAAA\tVVVVxx\n748\t412\t0\t0\t8\t8\t8\t48\t148\t248\t748\t16\t17\tUCAAAA\tWPAAAA\tAAAAxx\n107\t413\t1\t3\t7\t7\t7\t7\t107\t107\t107\t14\t15\tDEAAAA\tXPAAAA\tHHHHxx\n870\t414\t0\t2\t0\t10\t0\t70\t70\t370\t870\t0\t1\tMHAAAA\tYPAAAA\tOOOOxx\n848\t415\t0\t0\t8\t8\t8\t48\t48\t348\t848\t16\t17\tQGAAAA\tZPAAAA\tVVVVxx\n764\t416\t0\t0\t4\t4\t4\t64\t164\t264\t764\t8\t9\tKDAAAA\tAQAAAA\tAAAAxx\n535\t417\t1\t3\t5\t15\t5\t35\t135\t35\t535\t10\t11\tPUAAAA\tBQAAAA\tHHHHxx\n211\t418\t1\t3\t1\t11\t1\t11\t11\t211\t211\t2\t3\tDIAAAA\tCQAAAA\tOOOOxx\n625\t419\t1\t1\t5\t5\t5\t25\t25\t125\t625\t10\t11\tBYAAAA\tDQAAAA\tVVVVxx\n96\t420\t0\t0\t6\t16\t6\t96\t96\t96\t96\t12\t13\tSDAAAA\tEQAAAA\tAAAAxx\n828\t421\t0\t0\t8\t8\t8\t28\t28\t328\t828\t16\t17\tWFAAAA\tFQAAAA\tHHHHxx\n229\t422\t1\t1\t9\t9\t9\t29\t29\t229\t229\t18\t19\tVIAAAA\tGQAAAA\tOOOOxx\n602\t423\t0\t2\t2\t2\t2\t2\t2\t102\t602\t4\t5\tEXAAAA\tHQAAAA\tVVVVxx\n742\t424\t0\t2\t2\t2\t2\t42\t142\t242\t742\t4\t5\tOCAAAA\tIQAAAA\tAAAAxx\n451\t425\t1\t3\t1\t11\t1\t51\t51\t451\t451\t2\t3\tJRAAAA\tJQAAAA\tHHHHxx\n991\t426\t1\t3\t1\t11\t1\t91\t191\t491\t991\t2\t3\tDMAAAA\tKQAAAA\tOOOOxx\n301\t427\t1\t1\t1\t1\t1\t1\t101\t301\t301\t2\t3\tPLAAAA\tLQAAAA\tVVVVxx\n510\t428\t0\t2\t0\t10\t0\t10\t110\t10\t510\t0\t1\tQTAAAA\tMQAAAA\tAAAAxx\n299\t429\t1\t3\t9\t19\t9\t99\t99\t299\t299\t18\t19\tNLAAAA\tNQAAAA\tHHHHxx\n961\t430\t1\t1\t1\t1\t1\t61\t161\t461\t961\t2\t3\tZKAAAA\tOQAAAA\tOOOOxx\n3\t431\t1\t3\t3\t3\t3\t3\t3\t3\t3\t6\t7\tDAAAAA\tPQAAAA\tVVVVxx\n106\t432\t0\t2\t6\t6\t6\t6\t106\t106\t106\t12\t13\tCEAAAA\tQQAAAA\tAAAAxx\n591\t433\t1\t3\t1\t11\t1\t91\t191\t91\t591\t2\t3\tTWAAAA\tRQAAAA\tHHHHxx\n700\t434\t0\t0\t0\t0\t0\t0\t100\t200\t700\t0\t1\tYAAAAA\tSQAAAA\tOOOOxx\n841\t435\t1\t1\t1\t1\t1\t41\t41\t341\t841\t2\t3\tJGAAAA\tTQAAAA\tVVVVxx\n829\t436\t1\t1\t9\t9\t9\t29\t29\t329\t829\t18\t19\tXFAAAA\tUQAAAA\tAAAAxx\n508\t437\t0\t0\t8\t8\t8\t8\t108\t8\t508\t16\t17\tOTAAAA\tVQAAAA\tHHHHxx\n750\t438\t0\t2\t0\t10\t0\t50\t150\t250\t750\t0\t1\tWCAAAA\tWQAAAA\tOOOOxx\n665\t439\t1\t1\t5\t5\t5\t65\t65\t165\t665\t10\t11\tPZAAAA\tXQAAAA\tVVVVxx\n157\t440\t1\t1\t7\t17\t7\t57\t157\t157\t157\t14\t15\tBGAAAA\tYQAAAA\tAAAAxx\n694\t441\t0\t2\t4\t14\t4\t94\t94\t194\t694\t8\t9\tSAAAAA\tZQAAAA\tHHHHxx\n176\t442\t0\t0\t6\t16\t6\t76\t176\t176\t176\t12\t13\tUGAAAA\tARAAAA\tOOOOxx\n950\t443\t0\t2\t0\t10\t0\t50\t150\t450\t950\t0\t1\tOKAAAA\tBRAAAA\tVVVVxx\n970\t444\t0\t2\t0\t10\t0\t70\t170\t470\t970\t0\t1\tILAAAA\tCRAAAA\tAAAAxx\n496\t445\t0\t0\t6\t16\t6\t96\t96\t496\t496\t12\t13\tCTAAAA\tDRAAAA\tHHHHxx\n429\t446\t1\t1\t9\t9\t9\t29\t29\t429\t429\t18\t19\tNQAAAA\tERAAAA\tOOOOxx\n907\t447\t1\t3\t7\t7\t7\t7\t107\t407\t907\t14\t15\tXIAAAA\tFRAAAA\tVVVVxx\n72\t448\t0\t0\t2\t12\t2\t72\t72\t72\t72\t4\t5\tUCAAAA\tGRAAAA\tAAAAxx\n186\t449\t0\t2\t6\t6\t6\t86\t186\t186\t186\t12\t13\tEHAAAA\tHRAAAA\tHHHHxx\n713\t450\t1\t1\t3\t13\t3\t13\t113\t213\t713\t6\t7\tLBAAAA\tIRAAAA\tOOOOxx\n432\t451\t0\t0\t2\t12\t2\t32\t32\t432\t432\t4\t5\tQQAAAA\tJRAAAA\tVVVVxx\n735\t452\t1\t3\t5\t15\t5\t35\t135\t235\t735\t10\t11\tHCAAAA\tKRAAAA\tAAAAxx\n516\t453\t0\t0\t6\t16\t6\t16\t116\t16\t516\t12\t13\tWTAAAA\tLRAAAA\tHHHHxx\n964\t454\t0\t0\t4\t4\t4\t64\t164\t464\t964\t8\t9\tCLAAAA\tMRAAAA\tOOOOxx\n840\t455\t0\t0\t0\t0\t0\t40\t40\t340\t840\t0\t1\tIGAAAA\tNRAAAA\tVVVVxx\n550\t456\t0\t2\t0\t10\t0\t50\t150\t50\t550\t0\t1\tEVAAAA\tORAAAA\tAAAAxx\n360\t457\t0\t0\t0\t0\t0\t60\t160\t360\t360\t0\t1\tWNAAAA\tPRAAAA\tHHHHxx\n827\t458\t1\t3\t7\t7\t7\t27\t27\t327\t827\t14\t15\tVFAAAA\tQRAAAA\tOOOOxx\n959\t459\t1\t3\t9\t19\t9\t59\t159\t459\t959\t18\t19\tXKAAAA\tRRAAAA\tVVVVxx\n454\t460\t0\t2\t4\t14\t4\t54\t54\t454\t454\t8\t9\tMRAAAA\tSRAAAA\tAAAAxx\n819\t461\t1\t3\t9\t19\t9\t19\t19\t319\t819\t18\t19\tNFAAAA\tTRAAAA\tHHHHxx\n745\t462\t1\t1\t5\t5\t5\t45\t145\t245\t745\t10\t11\tRCAAAA\tURAAAA\tOOOOxx\n279\t463\t1\t3\t9\t19\t9\t79\t79\t279\t279\t18\t19\tTKAAAA\tVRAAAA\tVVVVxx\n426\t464\t0\t2\t6\t6\t6\t26\t26\t426\t426\t12\t13\tKQAAAA\tWRAAAA\tAAAAxx\n70\t465\t0\t2\t0\t10\t0\t70\t70\t70\t70\t0\t1\tSCAAAA\tXRAAAA\tHHHHxx\n637\t466\t1\t1\t7\t17\t7\t37\t37\t137\t637\t14\t15\tNYAAAA\tYRAAAA\tOOOOxx\n417\t467\t1\t1\t7\t17\t7\t17\t17\t417\t417\t14\t15\tBQAAAA\tZRAAAA\tVVVVxx\n586\t468\t0\t2\t6\t6\t6\t86\t186\t86\t586\t12\t13\tOWAAAA\tASAAAA\tAAAAxx\n314\t469\t0\t2\t4\t14\t4\t14\t114\t314\t314\t8\t9\tCMAAAA\tBSAAAA\tHHHHxx\n101\t470\t1\t1\t1\t1\t1\t1\t101\t101\t101\t2\t3\tXDAAAA\tCSAAAA\tOOOOxx\n205\t471\t1\t1\t5\t5\t5\t5\t5\t205\t205\t10\t11\tXHAAAA\tDSAAAA\tVVVVxx\n969\t472\t1\t1\t9\t9\t9\t69\t169\t469\t969\t18\t19\tHLAAAA\tESAAAA\tAAAAxx\n217\t473\t1\t1\t7\t17\t7\t17\t17\t217\t217\t14\t15\tJIAAAA\tFSAAAA\tHHHHxx\n281\t474\t1\t1\t1\t1\t1\t81\t81\t281\t281\t2\t3\tVKAAAA\tGSAAAA\tOOOOxx\n984\t475\t0\t0\t4\t4\t4\t84\t184\t484\t984\t8\t9\tWLAAAA\tHSAAAA\tVVVVxx\n366\t476\t0\t2\t6\t6\t6\t66\t166\t366\t366\t12\t13\tCOAAAA\tISAAAA\tAAAAxx\n483\t477\t1\t3\t3\t3\t3\t83\t83\t483\t483\t6\t7\tPSAAAA\tJSAAAA\tHHHHxx\n838\t478\t0\t2\t8\t18\t8\t38\t38\t338\t838\t16\t17\tGGAAAA\tKSAAAA\tOOOOxx\n64\t479\t0\t0\t4\t4\t4\t64\t64\t64\t64\t8\t9\tMCAAAA\tLSAAAA\tVVVVxx\n981\t480\t1\t1\t1\t1\t1\t81\t181\t481\t981\t2\t3\tTLAAAA\tMSAAAA\tAAAAxx\n538\t481\t0\t2\t8\t18\t8\t38\t138\t38\t538\t16\t17\tSUAAAA\tNSAAAA\tHHHHxx\n39\t482\t1\t3\t9\t19\t9\t39\t39\t39\t39\t18\t19\tNBAAAA\tOSAAAA\tOOOOxx\n60\t483\t0\t0\t0\t0\t0\t60\t60\t60\t60\t0\t1\tICAAAA\tPSAAAA\tVVVVxx\n874\t484\t0\t2\t4\t14\t4\t74\t74\t374\t874\t8\t9\tQHAAAA\tQSAAAA\tAAAAxx\n955\t485\t1\t3\t5\t15\t5\t55\t155\t455\t955\t10\t11\tTKAAAA\tRSAAAA\tHHHHxx\n347\t486\t1\t3\t7\t7\t7\t47\t147\t347\t347\t14\t15\tJNAAAA\tSSAAAA\tOOOOxx\n227\t487\t1\t3\t7\t7\t7\t27\t27\t227\t227\t14\t15\tTIAAAA\tTSAAAA\tVVVVxx\n44\t488\t0\t0\t4\t4\t4\t44\t44\t44\t44\t8\t9\tSBAAAA\tUSAAAA\tAAAAxx\n446\t489\t0\t2\t6\t6\t6\t46\t46\t446\t446\t12\t13\tERAAAA\tVSAAAA\tHHHHxx\n605\t490\t1\t1\t5\t5\t5\t5\t5\t105\t605\t10\t11\tHXAAAA\tWSAAAA\tOOOOxx\n570\t491\t0\t2\t0\t10\t0\t70\t170\t70\t570\t0\t1\tYVAAAA\tXSAAAA\tVVVVxx\n895\t492\t1\t3\t5\t15\t5\t95\t95\t395\t895\t10\t11\tLIAAAA\tYSAAAA\tAAAAxx\n760\t493\t0\t0\t0\t0\t0\t60\t160\t260\t760\t0\t1\tGDAAAA\tZSAAAA\tHHHHxx\n428\t494\t0\t0\t8\t8\t8\t28\t28\t428\t428\t16\t17\tMQAAAA\tATAAAA\tOOOOxx\n628\t495\t0\t0\t8\t8\t8\t28\t28\t128\t628\t16\t17\tEYAAAA\tBTAAAA\tVVVVxx\n933\t496\t1\t1\t3\t13\t3\t33\t133\t433\t933\t6\t7\tXJAAAA\tCTAAAA\tAAAAxx\n263\t497\t1\t3\t3\t3\t3\t63\t63\t263\t263\t6\t7\tDKAAAA\tDTAAAA\tHHHHxx\n729\t498\t1\t1\t9\t9\t9\t29\t129\t229\t729\t18\t19\tBCAAAA\tETAAAA\tOOOOxx\n860\t499\t0\t0\t0\t0\t0\t60\t60\t360\t860\t0\t1\tCHAAAA\tFTAAAA\tVVVVxx\n76\t500\t0\t0\t6\t16\t6\t76\t76\t76\t76\t12\t13\tYCAAAA\tGTAAAA\tAAAAxx\n293\t501\t1\t1\t3\t13\t3\t93\t93\t293\t293\t6\t7\tHLAAAA\tHTAAAA\tHHHHxx\n296\t502\t0\t0\t6\t16\t6\t96\t96\t296\t296\t12\t13\tKLAAAA\tITAAAA\tOOOOxx\n124\t503\t0\t0\t4\t4\t4\t24\t124\t124\t124\t8\t9\tUEAAAA\tJTAAAA\tVVVVxx\n568\t504\t0\t0\t8\t8\t8\t68\t168\t68\t568\t16\t17\tWVAAAA\tKTAAAA\tAAAAxx\n337\t505\t1\t1\t7\t17\t7\t37\t137\t337\t337\t14\t15\tZMAAAA\tLTAAAA\tHHHHxx\n464\t506\t0\t0\t4\t4\t4\t64\t64\t464\t464\t8\t9\tWRAAAA\tMTAAAA\tOOOOxx\n582\t507\t0\t2\t2\t2\t2\t82\t182\t82\t582\t4\t5\tKWAAAA\tNTAAAA\tVVVVxx\n207\t508\t1\t3\t7\t7\t7\t7\t7\t207\t207\t14\t15\tZHAAAA\tOTAAAA\tAAAAxx\n518\t509\t0\t2\t8\t18\t8\t18\t118\t18\t518\t16\t17\tYTAAAA\tPTAAAA\tHHHHxx\n513\t510\t1\t1\t3\t13\t3\t13\t113\t13\t513\t6\t7\tTTAAAA\tQTAAAA\tOOOOxx\n127\t511\t1\t3\t7\t7\t7\t27\t127\t127\t127\t14\t15\tXEAAAA\tRTAAAA\tVVVVxx\n396\t512\t0\t0\t6\t16\t6\t96\t196\t396\t396\t12\t13\tGPAAAA\tSTAAAA\tAAAAxx\n781\t513\t1\t1\t1\t1\t1\t81\t181\t281\t781\t2\t3\tBEAAAA\tTTAAAA\tHHHHxx\n233\t514\t1\t1\t3\t13\t3\t33\t33\t233\t233\t6\t7\tZIAAAA\tUTAAAA\tOOOOxx\n709\t515\t1\t1\t9\t9\t9\t9\t109\t209\t709\t18\t19\tHBAAAA\tVTAAAA\tVVVVxx\n325\t516\t1\t1\t5\t5\t5\t25\t125\t325\t325\t10\t11\tNMAAAA\tWTAAAA\tAAAAxx\n143\t517\t1\t3\t3\t3\t3\t43\t143\t143\t143\t6\t7\tNFAAAA\tXTAAAA\tHHHHxx\n824\t518\t0\t0\t4\t4\t4\t24\t24\t324\t824\t8\t9\tSFAAAA\tYTAAAA\tOOOOxx\n122\t519\t0\t2\t2\t2\t2\t22\t122\t122\t122\t4\t5\tSEAAAA\tZTAAAA\tVVVVxx\n10\t520\t0\t2\t0\t10\t0\t10\t10\t10\t10\t0\t1\tKAAAAA\tAUAAAA\tAAAAxx\n41\t521\t1\t1\t1\t1\t1\t41\t41\t41\t41\t2\t3\tPBAAAA\tBUAAAA\tHHHHxx\n618\t522\t0\t2\t8\t18\t8\t18\t18\t118\t618\t16\t17\tUXAAAA\tCUAAAA\tOOOOxx\n161\t523\t1\t1\t1\t1\t1\t61\t161\t161\t161\t2\t3\tFGAAAA\tDUAAAA\tVVVVxx\n801\t524\t1\t1\t1\t1\t1\t1\t1\t301\t801\t2\t3\tVEAAAA\tEUAAAA\tAAAAxx\n768\t525\t0\t0\t8\t8\t8\t68\t168\t268\t768\t16\t17\tODAAAA\tFUAAAA\tHHHHxx\n642\t526\t0\t2\t2\t2\t2\t42\t42\t142\t642\t4\t5\tSYAAAA\tGUAAAA\tOOOOxx\n803\t527\t1\t3\t3\t3\t3\t3\t3\t303\t803\t6\t7\tXEAAAA\tHUAAAA\tVVVVxx\n317\t528\t1\t1\t7\t17\t7\t17\t117\t317\t317\t14\t15\tFMAAAA\tIUAAAA\tAAAAxx\n938\t529\t0\t2\t8\t18\t8\t38\t138\t438\t938\t16\t17\tCKAAAA\tJUAAAA\tHHHHxx\n649\t530\t1\t1\t9\t9\t9\t49\t49\t149\t649\t18\t19\tZYAAAA\tKUAAAA\tOOOOxx\n738\t531\t0\t2\t8\t18\t8\t38\t138\t238\t738\t16\t17\tKCAAAA\tLUAAAA\tVVVVxx\n344\t532\t0\t0\t4\t4\t4\t44\t144\t344\t344\t8\t9\tGNAAAA\tMUAAAA\tAAAAxx\n399\t533\t1\t3\t9\t19\t9\t99\t199\t399\t399\t18\t19\tJPAAAA\tNUAAAA\tHHHHxx\n609\t534\t1\t1\t9\t9\t9\t9\t9\t109\t609\t18\t19\tLXAAAA\tOUAAAA\tOOOOxx\n677\t535\t1\t1\t7\t17\t7\t77\t77\t177\t677\t14\t15\tBAAAAA\tPUAAAA\tVVVVxx\n478\t536\t0\t2\t8\t18\t8\t78\t78\t478\t478\t16\t17\tKSAAAA\tQUAAAA\tAAAAxx\n452\t537\t0\t0\t2\t12\t2\t52\t52\t452\t452\t4\t5\tKRAAAA\tRUAAAA\tHHHHxx\n261\t538\t1\t1\t1\t1\t1\t61\t61\t261\t261\t2\t3\tBKAAAA\tSUAAAA\tOOOOxx\n449\t539\t1\t1\t9\t9\t9\t49\t49\t449\t449\t18\t19\tHRAAAA\tTUAAAA\tVVVVxx\n433\t540\t1\t1\t3\t13\t3\t33\t33\t433\t433\t6\t7\tRQAAAA\tUUAAAA\tAAAAxx\n5\t541\t1\t1\t5\t5\t5\t5\t5\t5\t5\t10\t11\tFAAAAA\tVUAAAA\tHHHHxx\n664\t542\t0\t0\t4\t4\t4\t64\t64\t164\t664\t8\t9\tOZAAAA\tWUAAAA\tOOOOxx\n887\t543\t1\t3\t7\t7\t7\t87\t87\t387\t887\t14\t15\tDIAAAA\tXUAAAA\tVVVVxx\n546\t544\t0\t2\t6\t6\t6\t46\t146\t46\t546\t12\t13\tAVAAAA\tYUAAAA\tAAAAxx\n253\t545\t1\t1\t3\t13\t3\t53\t53\t253\t253\t6\t7\tTJAAAA\tZUAAAA\tHHHHxx\n235\t546\t1\t3\t5\t15\t5\t35\t35\t235\t235\t10\t11\tBJAAAA\tAVAAAA\tOOOOxx\n258\t547\t0\t2\t8\t18\t8\t58\t58\t258\t258\t16\t17\tYJAAAA\tBVAAAA\tVVVVxx\n621\t548\t1\t1\t1\t1\t1\t21\t21\t121\t621\t2\t3\tXXAAAA\tCVAAAA\tAAAAxx\n998\t549\t0\t2\t8\t18\t8\t98\t198\t498\t998\t16\t17\tKMAAAA\tDVAAAA\tHHHHxx\n236\t550\t0\t0\t6\t16\t6\t36\t36\t236\t236\t12\t13\tCJAAAA\tEVAAAA\tOOOOxx\n537\t551\t1\t1\t7\t17\t7\t37\t137\t37\t537\t14\t15\tRUAAAA\tFVAAAA\tVVVVxx\n769\t552\t1\t1\t9\t9\t9\t69\t169\t269\t769\t18\t19\tPDAAAA\tGVAAAA\tAAAAxx\n921\t553\t1\t1\t1\t1\t1\t21\t121\t421\t921\t2\t3\tLJAAAA\tHVAAAA\tHHHHxx\n951\t554\t1\t3\t1\t11\t1\t51\t151\t451\t951\t2\t3\tPKAAAA\tIVAAAA\tOOOOxx\n240\t555\t0\t0\t0\t0\t0\t40\t40\t240\t240\t0\t1\tGJAAAA\tJVAAAA\tVVVVxx\n644\t556\t0\t0\t4\t4\t4\t44\t44\t144\t644\t8\t9\tUYAAAA\tKVAAAA\tAAAAxx\n352\t557\t0\t0\t2\t12\t2\t52\t152\t352\t352\t4\t5\tONAAAA\tLVAAAA\tHHHHxx\n613\t558\t1\t1\t3\t13\t3\t13\t13\t113\t613\t6\t7\tPXAAAA\tMVAAAA\tOOOOxx\n784\t559\t0\t0\t4\t4\t4\t84\t184\t284\t784\t8\t9\tEEAAAA\tNVAAAA\tVVVVxx\n61\t560\t1\t1\t1\t1\t1\t61\t61\t61\t61\t2\t3\tJCAAAA\tOVAAAA\tAAAAxx\n144\t561\t0\t0\t4\t4\t4\t44\t144\t144\t144\t8\t9\tOFAAAA\tPVAAAA\tHHHHxx\n94\t562\t0\t2\t4\t14\t4\t94\t94\t94\t94\t8\t9\tQDAAAA\tQVAAAA\tOOOOxx\n270\t563\t0\t2\t0\t10\t0\t70\t70\t270\t270\t0\t1\tKKAAAA\tRVAAAA\tVVVVxx\n942\t564\t0\t2\t2\t2\t2\t42\t142\t442\t942\t4\t5\tGKAAAA\tSVAAAA\tAAAAxx\n756\t565\t0\t0\t6\t16\t6\t56\t156\t256\t756\t12\t13\tCDAAAA\tTVAAAA\tHHHHxx\n321\t566\t1\t1\t1\t1\t1\t21\t121\t321\t321\t2\t3\tJMAAAA\tUVAAAA\tOOOOxx\n36\t567\t0\t0\t6\t16\t6\t36\t36\t36\t36\t12\t13\tKBAAAA\tVVAAAA\tVVVVxx\n232\t568\t0\t0\t2\t12\t2\t32\t32\t232\t232\t4\t5\tYIAAAA\tWVAAAA\tAAAAxx\n430\t569\t0\t2\t0\t10\t0\t30\t30\t430\t430\t0\t1\tOQAAAA\tXVAAAA\tHHHHxx\n177\t570\t1\t1\t7\t17\t7\t77\t177\t177\t177\t14\t15\tVGAAAA\tYVAAAA\tOOOOxx\n220\t571\t0\t0\t0\t0\t0\t20\t20\t220\t220\t0\t1\tMIAAAA\tZVAAAA\tVVVVxx\n109\t572\t1\t1\t9\t9\t9\t9\t109\t109\t109\t18\t19\tFEAAAA\tAWAAAA\tAAAAxx\n419\t573\t1\t3\t9\t19\t9\t19\t19\t419\t419\t18\t19\tDQAAAA\tBWAAAA\tHHHHxx\n135\t574\t1\t3\t5\t15\t5\t35\t135\t135\t135\t10\t11\tFFAAAA\tCWAAAA\tOOOOxx\n610\t575\t0\t2\t0\t10\t0\t10\t10\t110\t610\t0\t1\tMXAAAA\tDWAAAA\tVVVVxx\n956\t576\t0\t0\t6\t16\t6\t56\t156\t456\t956\t12\t13\tUKAAAA\tEWAAAA\tAAAAxx\n626\t577\t0\t2\t6\t6\t6\t26\t26\t126\t626\t12\t13\tCYAAAA\tFWAAAA\tHHHHxx\n375\t578\t1\t3\t5\t15\t5\t75\t175\t375\t375\t10\t11\tLOAAAA\tGWAAAA\tOOOOxx\n976\t579\t0\t0\t6\t16\t6\t76\t176\t476\t976\t12\t13\tOLAAAA\tHWAAAA\tVVVVxx\n152\t580\t0\t0\t2\t12\t2\t52\t152\t152\t152\t4\t5\tWFAAAA\tIWAAAA\tAAAAxx\n308\t581\t0\t0\t8\t8\t8\t8\t108\t308\t308\t16\t17\tWLAAAA\tJWAAAA\tHHHHxx\n445\t582\t1\t1\t5\t5\t5\t45\t45\t445\t445\t10\t11\tDRAAAA\tKWAAAA\tOOOOxx\n326\t583\t0\t2\t6\t6\t6\t26\t126\t326\t326\t12\t13\tOMAAAA\tLWAAAA\tVVVVxx\n422\t584\t0\t2\t2\t2\t2\t22\t22\t422\t422\t4\t5\tGQAAAA\tMWAAAA\tAAAAxx\n972\t585\t0\t0\t2\t12\t2\t72\t172\t472\t972\t4\t5\tKLAAAA\tNWAAAA\tHHHHxx\n45\t586\t1\t1\t5\t5\t5\t45\t45\t45\t45\t10\t11\tTBAAAA\tOWAAAA\tOOOOxx\n725\t587\t1\t1\t5\t5\t5\t25\t125\t225\t725\t10\t11\tXBAAAA\tPWAAAA\tVVVVxx\n753\t588\t1\t1\t3\t13\t3\t53\t153\t253\t753\t6\t7\tZCAAAA\tQWAAAA\tAAAAxx\n493\t589\t1\t1\t3\t13\t3\t93\t93\t493\t493\t6\t7\tZSAAAA\tRWAAAA\tHHHHxx\n601\t590\t1\t1\t1\t1\t1\t1\t1\t101\t601\t2\t3\tDXAAAA\tSWAAAA\tOOOOxx\n463\t591\t1\t3\t3\t3\t3\t63\t63\t463\t463\t6\t7\tVRAAAA\tTWAAAA\tVVVVxx\n303\t592\t1\t3\t3\t3\t3\t3\t103\t303\t303\t6\t7\tRLAAAA\tUWAAAA\tAAAAxx\n59\t593\t1\t3\t9\t19\t9\t59\t59\t59\t59\t18\t19\tHCAAAA\tVWAAAA\tHHHHxx\n595\t594\t1\t3\t5\t15\t5\t95\t195\t95\t595\t10\t11\tXWAAAA\tWWAAAA\tOOOOxx\n807\t595\t1\t3\t7\t7\t7\t7\t7\t307\t807\t14\t15\tBFAAAA\tXWAAAA\tVVVVxx\n424\t596\t0\t0\t4\t4\t4\t24\t24\t424\t424\t8\t9\tIQAAAA\tYWAAAA\tAAAAxx\n521\t597\t1\t1\t1\t1\t1\t21\t121\t21\t521\t2\t3\tBUAAAA\tZWAAAA\tHHHHxx\n341\t598\t1\t1\t1\t1\t1\t41\t141\t341\t341\t2\t3\tDNAAAA\tAXAAAA\tOOOOxx\n571\t599\t1\t3\t1\t11\t1\t71\t171\t71\t571\t2\t3\tZVAAAA\tBXAAAA\tVVVVxx\n165\t600\t1\t1\t5\t5\t5\t65\t165\t165\t165\t10\t11\tJGAAAA\tCXAAAA\tAAAAxx\n908\t601\t0\t0\t8\t8\t8\t8\t108\t408\t908\t16\t17\tYIAAAA\tDXAAAA\tHHHHxx\n351\t602\t1\t3\t1\t11\t1\t51\t151\t351\t351\t2\t3\tNNAAAA\tEXAAAA\tOOOOxx\n334\t603\t0\t2\t4\t14\t4\t34\t134\t334\t334\t8\t9\tWMAAAA\tFXAAAA\tVVVVxx\n636\t604\t0\t0\t6\t16\t6\t36\t36\t136\t636\t12\t13\tMYAAAA\tGXAAAA\tAAAAxx\n138\t605\t0\t2\t8\t18\t8\t38\t138\t138\t138\t16\t17\tIFAAAA\tHXAAAA\tHHHHxx\n438\t606\t0\t2\t8\t18\t8\t38\t38\t438\t438\t16\t17\tWQAAAA\tIXAAAA\tOOOOxx\n391\t607\t1\t3\t1\t11\t1\t91\t191\t391\t391\t2\t3\tBPAAAA\tJXAAAA\tVVVVxx\n395\t608\t1\t3\t5\t15\t5\t95\t195\t395\t395\t10\t11\tFPAAAA\tKXAAAA\tAAAAxx\n502\t609\t0\t2\t2\t2\t2\t2\t102\t2\t502\t4\t5\tITAAAA\tLXAAAA\tHHHHxx\n85\t610\t1\t1\t5\t5\t5\t85\t85\t85\t85\t10\t11\tHDAAAA\tMXAAAA\tOOOOxx\n786\t611\t0\t2\t6\t6\t6\t86\t186\t286\t786\t12\t13\tGEAAAA\tNXAAAA\tVVVVxx\n619\t612\t1\t3\t9\t19\t9\t19\t19\t119\t619\t18\t19\tVXAAAA\tOXAAAA\tAAAAxx\n440\t613\t0\t0\t0\t0\t0\t40\t40\t440\t440\t0\t1\tYQAAAA\tPXAAAA\tHHHHxx\n949\t614\t1\t1\t9\t9\t9\t49\t149\t449\t949\t18\t19\tNKAAAA\tQXAAAA\tOOOOxx\n691\t615\t1\t3\t1\t11\t1\t91\t91\t191\t691\t2\t3\tPAAAAA\tRXAAAA\tVVVVxx\n348\t616\t0\t0\t8\t8\t8\t48\t148\t348\t348\t16\t17\tKNAAAA\tSXAAAA\tAAAAxx\n506\t617\t0\t2\t6\t6\t6\t6\t106\t6\t506\t12\t13\tMTAAAA\tTXAAAA\tHHHHxx\n192\t618\t0\t0\t2\t12\t2\t92\t192\t192\t192\t4\t5\tKHAAAA\tUXAAAA\tOOOOxx\n369\t619\t1\t1\t9\t9\t9\t69\t169\t369\t369\t18\t19\tFOAAAA\tVXAAAA\tVVVVxx\n311\t620\t1\t3\t1\t11\t1\t11\t111\t311\t311\t2\t3\tZLAAAA\tWXAAAA\tAAAAxx\n273\t621\t1\t1\t3\t13\t3\t73\t73\t273\t273\t6\t7\tNKAAAA\tXXAAAA\tHHHHxx\n770\t622\t0\t2\t0\t10\t0\t70\t170\t270\t770\t0\t1\tQDAAAA\tYXAAAA\tOOOOxx\n191\t623\t1\t3\t1\t11\t1\t91\t191\t191\t191\t2\t3\tJHAAAA\tZXAAAA\tVVVVxx\n90\t624\t0\t2\t0\t10\t0\t90\t90\t90\t90\t0\t1\tMDAAAA\tAYAAAA\tAAAAxx\n163\t625\t1\t3\t3\t3\t3\t63\t163\t163\t163\t6\t7\tHGAAAA\tBYAAAA\tHHHHxx\n350\t626\t0\t2\t0\t10\t0\t50\t150\t350\t350\t0\t1\tMNAAAA\tCYAAAA\tOOOOxx\n55\t627\t1\t3\t5\t15\t5\t55\t55\t55\t55\t10\t11\tDCAAAA\tDYAAAA\tVVVVxx\n488\t628\t0\t0\t8\t8\t8\t88\t88\t488\t488\t16\t17\tUSAAAA\tEYAAAA\tAAAAxx\n215\t629\t1\t3\t5\t15\t5\t15\t15\t215\t215\t10\t11\tHIAAAA\tFYAAAA\tHHHHxx\n732\t630\t0\t0\t2\t12\t2\t32\t132\t232\t732\t4\t5\tECAAAA\tGYAAAA\tOOOOxx\n688\t631\t0\t0\t8\t8\t8\t88\t88\t188\t688\t16\t17\tMAAAAA\tHYAAAA\tVVVVxx\n520\t632\t0\t0\t0\t0\t0\t20\t120\t20\t520\t0\t1\tAUAAAA\tIYAAAA\tAAAAxx\n62\t633\t0\t2\t2\t2\t2\t62\t62\t62\t62\t4\t5\tKCAAAA\tJYAAAA\tHHHHxx\n423\t634\t1\t3\t3\t3\t3\t23\t23\t423\t423\t6\t7\tHQAAAA\tKYAAAA\tOOOOxx\n242\t635\t0\t2\t2\t2\t2\t42\t42\t242\t242\t4\t5\tIJAAAA\tLYAAAA\tVVVVxx\n193\t636\t1\t1\t3\t13\t3\t93\t193\t193\t193\t6\t7\tLHAAAA\tMYAAAA\tAAAAxx\n648\t637\t0\t0\t8\t8\t8\t48\t48\t148\t648\t16\t17\tYYAAAA\tNYAAAA\tHHHHxx\n459\t638\t1\t3\t9\t19\t9\t59\t59\t459\t459\t18\t19\tRRAAAA\tOYAAAA\tOOOOxx\n196\t639\t0\t0\t6\t16\t6\t96\t196\t196\t196\t12\t13\tOHAAAA\tPYAAAA\tVVVVxx\n476\t640\t0\t0\t6\t16\t6\t76\t76\t476\t476\t12\t13\tISAAAA\tQYAAAA\tAAAAxx\n903\t641\t1\t3\t3\t3\t3\t3\t103\t403\t903\t6\t7\tTIAAAA\tRYAAAA\tHHHHxx\n974\t642\t0\t2\t4\t14\t4\t74\t174\t474\t974\t8\t9\tMLAAAA\tSYAAAA\tOOOOxx\n603\t643\t1\t3\t3\t3\t3\t3\t3\t103\t603\t6\t7\tFXAAAA\tTYAAAA\tVVVVxx\n12\t644\t0\t0\t2\t12\t2\t12\t12\t12\t12\t4\t5\tMAAAAA\tUYAAAA\tAAAAxx\n599\t645\t1\t3\t9\t19\t9\t99\t199\t99\t599\t18\t19\tBXAAAA\tVYAAAA\tHHHHxx\n914\t646\t0\t2\t4\t14\t4\t14\t114\t414\t914\t8\t9\tEJAAAA\tWYAAAA\tOOOOxx\n7\t647\t1\t3\t7\t7\t7\t7\t7\t7\t7\t14\t15\tHAAAAA\tXYAAAA\tVVVVxx\n213\t648\t1\t1\t3\t13\t3\t13\t13\t213\t213\t6\t7\tFIAAAA\tYYAAAA\tAAAAxx\n174\t649\t0\t2\t4\t14\t4\t74\t174\t174\t174\t8\t9\tSGAAAA\tZYAAAA\tHHHHxx\n392\t650\t0\t0\t2\t12\t2\t92\t192\t392\t392\t4\t5\tCPAAAA\tAZAAAA\tOOOOxx\n674\t651\t0\t2\t4\t14\t4\t74\t74\t174\t674\t8\t9\tYZAAAA\tBZAAAA\tVVVVxx\n650\t652\t0\t2\t0\t10\t0\t50\t50\t150\t650\t0\t1\tAZAAAA\tCZAAAA\tAAAAxx\n8\t653\t0\t0\t8\t8\t8\t8\t8\t8\t8\t16\t17\tIAAAAA\tDZAAAA\tHHHHxx\n492\t654\t0\t0\t2\t12\t2\t92\t92\t492\t492\t4\t5\tYSAAAA\tEZAAAA\tOOOOxx\n322\t655\t0\t2\t2\t2\t2\t22\t122\t322\t322\t4\t5\tKMAAAA\tFZAAAA\tVVVVxx\n315\t656\t1\t3\t5\t15\t5\t15\t115\t315\t315\t10\t11\tDMAAAA\tGZAAAA\tAAAAxx\n380\t657\t0\t0\t0\t0\t0\t80\t180\t380\t380\t0\t1\tQOAAAA\tHZAAAA\tHHHHxx\n353\t658\t1\t1\t3\t13\t3\t53\t153\t353\t353\t6\t7\tPNAAAA\tIZAAAA\tOOOOxx\n892\t659\t0\t0\t2\t12\t2\t92\t92\t392\t892\t4\t5\tIIAAAA\tJZAAAA\tVVVVxx\n932\t660\t0\t0\t2\t12\t2\t32\t132\t432\t932\t4\t5\tWJAAAA\tKZAAAA\tAAAAxx\n993\t661\t1\t1\t3\t13\t3\t93\t193\t493\t993\t6\t7\tFMAAAA\tLZAAAA\tHHHHxx\n859\t662\t1\t3\t9\t19\t9\t59\t59\t359\t859\t18\t19\tBHAAAA\tMZAAAA\tOOOOxx\n806\t663\t0\t2\t6\t6\t6\t6\t6\t306\t806\t12\t13\tAFAAAA\tNZAAAA\tVVVVxx\n145\t664\t1\t1\t5\t5\t5\t45\t145\t145\t145\t10\t11\tPFAAAA\tOZAAAA\tAAAAxx\n373\t665\t1\t1\t3\t13\t3\t73\t173\t373\t373\t6\t7\tJOAAAA\tPZAAAA\tHHHHxx\n418\t666\t0\t2\t8\t18\t8\t18\t18\t418\t418\t16\t17\tCQAAAA\tQZAAAA\tOOOOxx\n865\t667\t1\t1\t5\t5\t5\t65\t65\t365\t865\t10\t11\tHHAAAA\tRZAAAA\tVVVVxx\n462\t668\t0\t2\t2\t2\t2\t62\t62\t462\t462\t4\t5\tURAAAA\tSZAAAA\tAAAAxx\n24\t669\t0\t0\t4\t4\t4\t24\t24\t24\t24\t8\t9\tYAAAAA\tTZAAAA\tHHHHxx\n920\t670\t0\t0\t0\t0\t0\t20\t120\t420\t920\t0\t1\tKJAAAA\tUZAAAA\tOOOOxx\n672\t671\t0\t0\t2\t12\t2\t72\t72\t172\t672\t4\t5\tWZAAAA\tVZAAAA\tVVVVxx\n92\t672\t0\t0\t2\t12\t2\t92\t92\t92\t92\t4\t5\tODAAAA\tWZAAAA\tAAAAxx\n721\t673\t1\t1\t1\t1\t1\t21\t121\t221\t721\t2\t3\tTBAAAA\tXZAAAA\tHHHHxx\n646\t674\t0\t2\t6\t6\t6\t46\t46\t146\t646\t12\t13\tWYAAAA\tYZAAAA\tOOOOxx\n910\t675\t0\t2\t0\t10\t0\t10\t110\t410\t910\t0\t1\tAJAAAA\tZZAAAA\tVVVVxx\n909\t676\t1\t1\t9\t9\t9\t9\t109\t409\t909\t18\t19\tZIAAAA\tAABAAA\tAAAAxx\n630\t677\t0\t2\t0\t10\t0\t30\t30\t130\t630\t0\t1\tGYAAAA\tBABAAA\tHHHHxx\n482\t678\t0\t2\t2\t2\t2\t82\t82\t482\t482\t4\t5\tOSAAAA\tCABAAA\tOOOOxx\n559\t679\t1\t3\t9\t19\t9\t59\t159\t59\t559\t18\t19\tNVAAAA\tDABAAA\tVVVVxx\n853\t680\t1\t1\t3\t13\t3\t53\t53\t353\t853\t6\t7\tVGAAAA\tEABAAA\tAAAAxx\n141\t681\t1\t1\t1\t1\t1\t41\t141\t141\t141\t2\t3\tLFAAAA\tFABAAA\tHHHHxx\n266\t682\t0\t2\t6\t6\t6\t66\t66\t266\t266\t12\t13\tGKAAAA\tGABAAA\tOOOOxx\n835\t683\t1\t3\t5\t15\t5\t35\t35\t335\t835\t10\t11\tDGAAAA\tHABAAA\tVVVVxx\n164\t684\t0\t0\t4\t4\t4\t64\t164\t164\t164\t8\t9\tIGAAAA\tIABAAA\tAAAAxx\n629\t685\t1\t1\t9\t9\t9\t29\t29\t129\t629\t18\t19\tFYAAAA\tJABAAA\tHHHHxx\n203\t686\t1\t3\t3\t3\t3\t3\t3\t203\t203\t6\t7\tVHAAAA\tKABAAA\tOOOOxx\n411\t687\t1\t3\t1\t11\t1\t11\t11\t411\t411\t2\t3\tVPAAAA\tLABAAA\tVVVVxx\n930\t688\t0\t2\t0\t10\t0\t30\t130\t430\t930\t0\t1\tUJAAAA\tMABAAA\tAAAAxx\n435\t689\t1\t3\t5\t15\t5\t35\t35\t435\t435\t10\t11\tTQAAAA\tNABAAA\tHHHHxx\n563\t690\t1\t3\t3\t3\t3\t63\t163\t63\t563\t6\t7\tRVAAAA\tOABAAA\tOOOOxx\n960\t691\t0\t0\t0\t0\t0\t60\t160\t460\t960\t0\t1\tYKAAAA\tPABAAA\tVVVVxx\n733\t692\t1\t1\t3\t13\t3\t33\t133\t233\t733\t6\t7\tFCAAAA\tQABAAA\tAAAAxx\n967\t693\t1\t3\t7\t7\t7\t67\t167\t467\t967\t14\t15\tFLAAAA\tRABAAA\tHHHHxx\n668\t694\t0\t0\t8\t8\t8\t68\t68\t168\t668\t16\t17\tSZAAAA\tSABAAA\tOOOOxx\n994\t695\t0\t2\t4\t14\t4\t94\t194\t494\t994\t8\t9\tGMAAAA\tTABAAA\tVVVVxx\n129\t696\t1\t1\t9\t9\t9\t29\t129\t129\t129\t18\t19\tZEAAAA\tUABAAA\tAAAAxx\n954\t697\t0\t2\t4\t14\t4\t54\t154\t454\t954\t8\t9\tSKAAAA\tVABAAA\tHHHHxx\n68\t698\t0\t0\t8\t8\t8\t68\t68\t68\t68\t16\t17\tQCAAAA\tWABAAA\tOOOOxx\n79\t699\t1\t3\t9\t19\t9\t79\t79\t79\t79\t18\t19\tBDAAAA\tXABAAA\tVVVVxx\n121\t700\t1\t1\t1\t1\t1\t21\t121\t121\t121\t2\t3\tREAAAA\tYABAAA\tAAAAxx\n740\t701\t0\t0\t0\t0\t0\t40\t140\t240\t740\t0\t1\tMCAAAA\tZABAAA\tHHHHxx\n902\t702\t0\t2\t2\t2\t2\t2\t102\t402\t902\t4\t5\tSIAAAA\tABBAAA\tOOOOxx\n695\t703\t1\t3\t5\t15\t5\t95\t95\t195\t695\t10\t11\tTAAAAA\tBBBAAA\tVVVVxx\n455\t704\t1\t3\t5\t15\t5\t55\t55\t455\t455\t10\t11\tNRAAAA\tCBBAAA\tAAAAxx\n89\t705\t1\t1\t9\t9\t9\t89\t89\t89\t89\t18\t19\tLDAAAA\tDBBAAA\tHHHHxx\n893\t706\t1\t1\t3\t13\t3\t93\t93\t393\t893\t6\t7\tJIAAAA\tEBBAAA\tOOOOxx\n202\t707\t0\t2\t2\t2\t2\t2\t2\t202\t202\t4\t5\tUHAAAA\tFBBAAA\tVVVVxx\n132\t708\t0\t0\t2\t12\t2\t32\t132\t132\t132\t4\t5\tCFAAAA\tGBBAAA\tAAAAxx\n782\t709\t0\t2\t2\t2\t2\t82\t182\t282\t782\t4\t5\tCEAAAA\tHBBAAA\tHHHHxx\n512\t710\t0\t0\t2\t12\t2\t12\t112\t12\t512\t4\t5\tSTAAAA\tIBBAAA\tOOOOxx\n857\t711\t1\t1\t7\t17\t7\t57\t57\t357\t857\t14\t15\tZGAAAA\tJBBAAA\tVVVVxx\n248\t712\t0\t0\t8\t8\t8\t48\t48\t248\t248\t16\t17\tOJAAAA\tKBBAAA\tAAAAxx\n858\t713\t0\t2\t8\t18\t8\t58\t58\t358\t858\t16\t17\tAHAAAA\tLBBAAA\tHHHHxx\n527\t714\t1\t3\t7\t7\t7\t27\t127\t27\t527\t14\t15\tHUAAAA\tMBBAAA\tOOOOxx\n450\t715\t0\t2\t0\t10\t0\t50\t50\t450\t450\t0\t1\tIRAAAA\tNBBAAA\tVVVVxx\n712\t716\t0\t0\t2\t12\t2\t12\t112\t212\t712\t4\t5\tKBAAAA\tOBBAAA\tAAAAxx\n153\t717\t1\t1\t3\t13\t3\t53\t153\t153\t153\t6\t7\tXFAAAA\tPBBAAA\tHHHHxx\n587\t718\t1\t3\t7\t7\t7\t87\t187\t87\t587\t14\t15\tPWAAAA\tQBBAAA\tOOOOxx\n593\t719\t1\t1\t3\t13\t3\t93\t193\t93\t593\t6\t7\tVWAAAA\tRBBAAA\tVVVVxx\n249\t720\t1\t1\t9\t9\t9\t49\t49\t249\t249\t18\t19\tPJAAAA\tSBBAAA\tAAAAxx\n128\t721\t0\t0\t8\t8\t8\t28\t128\t128\t128\t16\t17\tYEAAAA\tTBBAAA\tHHHHxx\n675\t722\t1\t3\t5\t15\t5\t75\t75\t175\t675\t10\t11\tZZAAAA\tUBBAAA\tOOOOxx\n929\t723\t1\t1\t9\t9\t9\t29\t129\t429\t929\t18\t19\tTJAAAA\tVBBAAA\tVVVVxx\n156\t724\t0\t0\t6\t16\t6\t56\t156\t156\t156\t12\t13\tAGAAAA\tWBBAAA\tAAAAxx\n415\t725\t1\t3\t5\t15\t5\t15\t15\t415\t415\t10\t11\tZPAAAA\tXBBAAA\tHHHHxx\n28\t726\t0\t0\t8\t8\t8\t28\t28\t28\t28\t16\t17\tCBAAAA\tYBBAAA\tOOOOxx\n18\t727\t0\t2\t8\t18\t8\t18\t18\t18\t18\t16\t17\tSAAAAA\tZBBAAA\tVVVVxx\n255\t728\t1\t3\t5\t15\t5\t55\t55\t255\t255\t10\t11\tVJAAAA\tACBAAA\tAAAAxx\n793\t729\t1\t1\t3\t13\t3\t93\t193\t293\t793\t6\t7\tNEAAAA\tBCBAAA\tHHHHxx\n554\t730\t0\t2\t4\t14\t4\t54\t154\t54\t554\t8\t9\tIVAAAA\tCCBAAA\tOOOOxx\n467\t731\t1\t3\t7\t7\t7\t67\t67\t467\t467\t14\t15\tZRAAAA\tDCBAAA\tVVVVxx\n410\t732\t0\t2\t0\t10\t0\t10\t10\t410\t410\t0\t1\tUPAAAA\tECBAAA\tAAAAxx\n651\t733\t1\t3\t1\t11\t1\t51\t51\t151\t651\t2\t3\tBZAAAA\tFCBAAA\tHHHHxx\n287\t734\t1\t3\t7\t7\t7\t87\t87\t287\t287\t14\t15\tBLAAAA\tGCBAAA\tOOOOxx\n640\t735\t0\t0\t0\t0\t0\t40\t40\t140\t640\t0\t1\tQYAAAA\tHCBAAA\tVVVVxx\n245\t736\t1\t1\t5\t5\t5\t45\t45\t245\t245\t10\t11\tLJAAAA\tICBAAA\tAAAAxx\n21\t737\t1\t1\t1\t1\t1\t21\t21\t21\t21\t2\t3\tVAAAAA\tJCBAAA\tHHHHxx\n83\t738\t1\t3\t3\t3\t3\t83\t83\t83\t83\t6\t7\tFDAAAA\tKCBAAA\tOOOOxx\n228\t739\t0\t0\t8\t8\t8\t28\t28\t228\t228\t16\t17\tUIAAAA\tLCBAAA\tVVVVxx\n323\t740\t1\t3\t3\t3\t3\t23\t123\t323\t323\t6\t7\tLMAAAA\tMCBAAA\tAAAAxx\n594\t741\t0\t2\t4\t14\t4\t94\t194\t94\t594\t8\t9\tWWAAAA\tNCBAAA\tHHHHxx\n528\t742\t0\t0\t8\t8\t8\t28\t128\t28\t528\t16\t17\tIUAAAA\tOCBAAA\tOOOOxx\n276\t743\t0\t0\t6\t16\t6\t76\t76\t276\t276\t12\t13\tQKAAAA\tPCBAAA\tVVVVxx\n598\t744\t0\t2\t8\t18\t8\t98\t198\t98\t598\t16\t17\tAXAAAA\tQCBAAA\tAAAAxx\n635\t745\t1\t3\t5\t15\t5\t35\t35\t135\t635\t10\t11\tLYAAAA\tRCBAAA\tHHHHxx\n868\t746\t0\t0\t8\t8\t8\t68\t68\t368\t868\t16\t17\tKHAAAA\tSCBAAA\tOOOOxx\n290\t747\t0\t2\t0\t10\t0\t90\t90\t290\t290\t0\t1\tELAAAA\tTCBAAA\tVVVVxx\n468\t748\t0\t0\t8\t8\t8\t68\t68\t468\t468\t16\t17\tASAAAA\tUCBAAA\tAAAAxx\n689\t749\t1\t1\t9\t9\t9\t89\t89\t189\t689\t18\t19\tNAAAAA\tVCBAAA\tHHHHxx\n799\t750\t1\t3\t9\t19\t9\t99\t199\t299\t799\t18\t19\tTEAAAA\tWCBAAA\tOOOOxx\n210\t751\t0\t2\t0\t10\t0\t10\t10\t210\t210\t0\t1\tCIAAAA\tXCBAAA\tVVVVxx\n346\t752\t0\t2\t6\t6\t6\t46\t146\t346\t346\t12\t13\tINAAAA\tYCBAAA\tAAAAxx\n957\t753\t1\t1\t7\t17\t7\t57\t157\t457\t957\t14\t15\tVKAAAA\tZCBAAA\tHHHHxx\n905\t754\t1\t1\t5\t5\t5\t5\t105\t405\t905\t10\t11\tVIAAAA\tADBAAA\tOOOOxx\n523\t755\t1\t3\t3\t3\t3\t23\t123\t23\t523\t6\t7\tDUAAAA\tBDBAAA\tVVVVxx\n899\t756\t1\t3\t9\t19\t9\t99\t99\t399\t899\t18\t19\tPIAAAA\tCDBAAA\tAAAAxx\n867\t757\t1\t3\t7\t7\t7\t67\t67\t367\t867\t14\t15\tJHAAAA\tDDBAAA\tHHHHxx\n11\t758\t1\t3\t1\t11\t1\t11\t11\t11\t11\t2\t3\tLAAAAA\tEDBAAA\tOOOOxx\n320\t759\t0\t0\t0\t0\t0\t20\t120\t320\t320\t0\t1\tIMAAAA\tFDBAAA\tVVVVxx\n766\t760\t0\t2\t6\t6\t6\t66\t166\t266\t766\t12\t13\tMDAAAA\tGDBAAA\tAAAAxx\n84\t761\t0\t0\t4\t4\t4\t84\t84\t84\t84\t8\t9\tGDAAAA\tHDBAAA\tHHHHxx\n507\t762\t1\t3\t7\t7\t7\t7\t107\t7\t507\t14\t15\tNTAAAA\tIDBAAA\tOOOOxx\n471\t763\t1\t3\t1\t11\t1\t71\t71\t471\t471\t2\t3\tDSAAAA\tJDBAAA\tVVVVxx\n517\t764\t1\t1\t7\t17\t7\t17\t117\t17\t517\t14\t15\tXTAAAA\tKDBAAA\tAAAAxx\n234\t765\t0\t2\t4\t14\t4\t34\t34\t234\t234\t8\t9\tAJAAAA\tLDBAAA\tHHHHxx\n988\t766\t0\t0\t8\t8\t8\t88\t188\t488\t988\t16\t17\tAMAAAA\tMDBAAA\tOOOOxx\n473\t767\t1\t1\t3\t13\t3\t73\t73\t473\t473\t6\t7\tFSAAAA\tNDBAAA\tVVVVxx\n66\t768\t0\t2\t6\t6\t6\t66\t66\t66\t66\t12\t13\tOCAAAA\tODBAAA\tAAAAxx\n530\t769\t0\t2\t0\t10\t0\t30\t130\t30\t530\t0\t1\tKUAAAA\tPDBAAA\tHHHHxx\n834\t770\t0\t2\t4\t14\t4\t34\t34\t334\t834\t8\t9\tCGAAAA\tQDBAAA\tOOOOxx\n894\t771\t0\t2\t4\t14\t4\t94\t94\t394\t894\t8\t9\tKIAAAA\tRDBAAA\tVVVVxx\n481\t772\t1\t1\t1\t1\t1\t81\t81\t481\t481\t2\t3\tNSAAAA\tSDBAAA\tAAAAxx\n280\t773\t0\t0\t0\t0\t0\t80\t80\t280\t280\t0\t1\tUKAAAA\tTDBAAA\tHHHHxx\n705\t774\t1\t1\t5\t5\t5\t5\t105\t205\t705\t10\t11\tDBAAAA\tUDBAAA\tOOOOxx\n218\t775\t0\t2\t8\t18\t8\t18\t18\t218\t218\t16\t17\tKIAAAA\tVDBAAA\tVVVVxx\n560\t776\t0\t0\t0\t0\t0\t60\t160\t60\t560\t0\t1\tOVAAAA\tWDBAAA\tAAAAxx\n123\t777\t1\t3\t3\t3\t3\t23\t123\t123\t123\t6\t7\tTEAAAA\tXDBAAA\tHHHHxx\n289\t778\t1\t1\t9\t9\t9\t89\t89\t289\t289\t18\t19\tDLAAAA\tYDBAAA\tOOOOxx\n189\t779\t1\t1\t9\t9\t9\t89\t189\t189\t189\t18\t19\tHHAAAA\tZDBAAA\tVVVVxx\n541\t780\t1\t1\t1\t1\t1\t41\t141\t41\t541\t2\t3\tVUAAAA\tAEBAAA\tAAAAxx\n876\t781\t0\t0\t6\t16\t6\t76\t76\t376\t876\t12\t13\tSHAAAA\tBEBAAA\tHHHHxx\n504\t782\t0\t0\t4\t4\t4\t4\t104\t4\t504\t8\t9\tKTAAAA\tCEBAAA\tOOOOxx\n643\t783\t1\t3\t3\t3\t3\t43\t43\t143\t643\t6\t7\tTYAAAA\tDEBAAA\tVVVVxx\n73\t784\t1\t1\t3\t13\t3\t73\t73\t73\t73\t6\t7\tVCAAAA\tEEBAAA\tAAAAxx\n465\t785\t1\t1\t5\t5\t5\t65\t65\t465\t465\t10\t11\tXRAAAA\tFEBAAA\tHHHHxx\n861\t786\t1\t1\t1\t1\t1\t61\t61\t361\t861\t2\t3\tDHAAAA\tGEBAAA\tOOOOxx\n355\t787\t1\t3\t5\t15\t5\t55\t155\t355\t355\t10\t11\tRNAAAA\tHEBAAA\tVVVVxx\n441\t788\t1\t1\t1\t1\t1\t41\t41\t441\t441\t2\t3\tZQAAAA\tIEBAAA\tAAAAxx\n219\t789\t1\t3\t9\t19\t9\t19\t19\t219\t219\t18\t19\tLIAAAA\tJEBAAA\tHHHHxx\n839\t790\t1\t3\t9\t19\t9\t39\t39\t339\t839\t18\t19\tHGAAAA\tKEBAAA\tOOOOxx\n271\t791\t1\t3\t1\t11\t1\t71\t71\t271\t271\t2\t3\tLKAAAA\tLEBAAA\tVVVVxx\n212\t792\t0\t0\t2\t12\t2\t12\t12\t212\t212\t4\t5\tEIAAAA\tMEBAAA\tAAAAxx\n904\t793\t0\t0\t4\t4\t4\t4\t104\t404\t904\t8\t9\tUIAAAA\tNEBAAA\tHHHHxx\n244\t794\t0\t0\t4\t4\t4\t44\t44\t244\t244\t8\t9\tKJAAAA\tOEBAAA\tOOOOxx\n751\t795\t1\t3\t1\t11\t1\t51\t151\t251\t751\t2\t3\tXCAAAA\tPEBAAA\tVVVVxx\n944\t796\t0\t0\t4\t4\t4\t44\t144\t444\t944\t8\t9\tIKAAAA\tQEBAAA\tAAAAxx\n305\t797\t1\t1\t5\t5\t5\t5\t105\t305\t305\t10\t11\tTLAAAA\tREBAAA\tHHHHxx\n617\t798\t1\t1\t7\t17\t7\t17\t17\t117\t617\t14\t15\tTXAAAA\tSEBAAA\tOOOOxx\n891\t799\t1\t3\t1\t11\t1\t91\t91\t391\t891\t2\t3\tHIAAAA\tTEBAAA\tVVVVxx\n653\t800\t1\t1\t3\t13\t3\t53\t53\t153\t653\t6\t7\tDZAAAA\tUEBAAA\tAAAAxx\n845\t801\t1\t1\t5\t5\t5\t45\t45\t345\t845\t10\t11\tNGAAAA\tVEBAAA\tHHHHxx\n936\t802\t0\t0\t6\t16\t6\t36\t136\t436\t936\t12\t13\tAKAAAA\tWEBAAA\tOOOOxx\n91\t803\t1\t3\t1\t11\t1\t91\t91\t91\t91\t2\t3\tNDAAAA\tXEBAAA\tVVVVxx\n442\t804\t0\t2\t2\t2\t2\t42\t42\t442\t442\t4\t5\tARAAAA\tYEBAAA\tAAAAxx\n498\t805\t0\t2\t8\t18\t8\t98\t98\t498\t498\t16\t17\tETAAAA\tZEBAAA\tHHHHxx\n987\t806\t1\t3\t7\t7\t7\t87\t187\t487\t987\t14\t15\tZLAAAA\tAFBAAA\tOOOOxx\n194\t807\t0\t2\t4\t14\t4\t94\t194\t194\t194\t8\t9\tMHAAAA\tBFBAAA\tVVVVxx\n927\t808\t1\t3\t7\t7\t7\t27\t127\t427\t927\t14\t15\tRJAAAA\tCFBAAA\tAAAAxx\n607\t809\t1\t3\t7\t7\t7\t7\t7\t107\t607\t14\t15\tJXAAAA\tDFBAAA\tHHHHxx\n119\t810\t1\t3\t9\t19\t9\t19\t119\t119\t119\t18\t19\tPEAAAA\tEFBAAA\tOOOOxx\n182\t811\t0\t2\t2\t2\t2\t82\t182\t182\t182\t4\t5\tAHAAAA\tFFBAAA\tVVVVxx\n606\t812\t0\t2\t6\t6\t6\t6\t6\t106\t606\t12\t13\tIXAAAA\tGFBAAA\tAAAAxx\n849\t813\t1\t1\t9\t9\t9\t49\t49\t349\t849\t18\t19\tRGAAAA\tHFBAAA\tHHHHxx\n34\t814\t0\t2\t4\t14\t4\t34\t34\t34\t34\t8\t9\tIBAAAA\tIFBAAA\tOOOOxx\n683\t815\t1\t3\t3\t3\t3\t83\t83\t183\t683\t6\t7\tHAAAAA\tJFBAAA\tVVVVxx\n134\t816\t0\t2\t4\t14\t4\t34\t134\t134\t134\t8\t9\tEFAAAA\tKFBAAA\tAAAAxx\n331\t817\t1\t3\t1\t11\t1\t31\t131\t331\t331\t2\t3\tTMAAAA\tLFBAAA\tHHHHxx\n808\t818\t0\t0\t8\t8\t8\t8\t8\t308\t808\t16\t17\tCFAAAA\tMFBAAA\tOOOOxx\n703\t819\t1\t3\t3\t3\t3\t3\t103\t203\t703\t6\t7\tBBAAAA\tNFBAAA\tVVVVxx\n669\t820\t1\t1\t9\t9\t9\t69\t69\t169\t669\t18\t19\tTZAAAA\tOFBAAA\tAAAAxx\n264\t821\t0\t0\t4\t4\t4\t64\t64\t264\t264\t8\t9\tEKAAAA\tPFBAAA\tHHHHxx\n277\t822\t1\t1\t7\t17\t7\t77\t77\t277\t277\t14\t15\tRKAAAA\tQFBAAA\tOOOOxx\n877\t823\t1\t1\t7\t17\t7\t77\t77\t377\t877\t14\t15\tTHAAAA\tRFBAAA\tVVVVxx\n783\t824\t1\t3\t3\t3\t3\t83\t183\t283\t783\t6\t7\tDEAAAA\tSFBAAA\tAAAAxx\n791\t825\t1\t3\t1\t11\t1\t91\t191\t291\t791\t2\t3\tLEAAAA\tTFBAAA\tHHHHxx\n171\t826\t1\t3\t1\t11\t1\t71\t171\t171\t171\t2\t3\tPGAAAA\tUFBAAA\tOOOOxx\n564\t827\t0\t0\t4\t4\t4\t64\t164\t64\t564\t8\t9\tSVAAAA\tVFBAAA\tVVVVxx\n230\t828\t0\t2\t0\t10\t0\t30\t30\t230\t230\t0\t1\tWIAAAA\tWFBAAA\tAAAAxx\n881\t829\t1\t1\t1\t1\t1\t81\t81\t381\t881\t2\t3\tXHAAAA\tXFBAAA\tHHHHxx\n890\t830\t0\t2\t0\t10\t0\t90\t90\t390\t890\t0\t1\tGIAAAA\tYFBAAA\tOOOOxx\n374\t831\t0\t2\t4\t14\t4\t74\t174\t374\t374\t8\t9\tKOAAAA\tZFBAAA\tVVVVxx\n697\t832\t1\t1\t7\t17\t7\t97\t97\t197\t697\t14\t15\tVAAAAA\tAGBAAA\tAAAAxx\n4\t833\t0\t0\t4\t4\t4\t4\t4\t4\t4\t8\t9\tEAAAAA\tBGBAAA\tHHHHxx\n385\t834\t1\t1\t5\t5\t5\t85\t185\t385\t385\t10\t11\tVOAAAA\tCGBAAA\tOOOOxx\n739\t835\t1\t3\t9\t19\t9\t39\t139\t239\t739\t18\t19\tLCAAAA\tDGBAAA\tVVVVxx\n623\t836\t1\t3\t3\t3\t3\t23\t23\t123\t623\t6\t7\tZXAAAA\tEGBAAA\tAAAAxx\n547\t837\t1\t3\t7\t7\t7\t47\t147\t47\t547\t14\t15\tBVAAAA\tFGBAAA\tHHHHxx\n532\t838\t0\t0\t2\t12\t2\t32\t132\t32\t532\t4\t5\tMUAAAA\tGGBAAA\tOOOOxx\n383\t839\t1\t3\t3\t3\t3\t83\t183\t383\t383\t6\t7\tTOAAAA\tHGBAAA\tVVVVxx\n181\t840\t1\t1\t1\t1\t1\t81\t181\t181\t181\t2\t3\tZGAAAA\tIGBAAA\tAAAAxx\n327\t841\t1\t3\t7\t7\t7\t27\t127\t327\t327\t14\t15\tPMAAAA\tJGBAAA\tHHHHxx\n701\t842\t1\t1\t1\t1\t1\t1\t101\t201\t701\t2\t3\tZAAAAA\tKGBAAA\tOOOOxx\n111\t843\t1\t3\t1\t11\t1\t11\t111\t111\t111\t2\t3\tHEAAAA\tLGBAAA\tVVVVxx\n977\t844\t1\t1\t7\t17\t7\t77\t177\t477\t977\t14\t15\tPLAAAA\tMGBAAA\tAAAAxx\n431\t845\t1\t3\t1\t11\t1\t31\t31\t431\t431\t2\t3\tPQAAAA\tNGBAAA\tHHHHxx\n456\t846\t0\t0\t6\t16\t6\t56\t56\t456\t456\t12\t13\tORAAAA\tOGBAAA\tOOOOxx\n368\t847\t0\t0\t8\t8\t8\t68\t168\t368\t368\t16\t17\tEOAAAA\tPGBAAA\tVVVVxx\n32\t848\t0\t0\t2\t12\t2\t32\t32\t32\t32\t4\t5\tGBAAAA\tQGBAAA\tAAAAxx\n125\t849\t1\t1\t5\t5\t5\t25\t125\t125\t125\t10\t11\tVEAAAA\tRGBAAA\tHHHHxx\n847\t850\t1\t3\t7\t7\t7\t47\t47\t347\t847\t14\t15\tPGAAAA\tSGBAAA\tOOOOxx\n485\t851\t1\t1\t5\t5\t5\t85\t85\t485\t485\t10\t11\tRSAAAA\tTGBAAA\tVVVVxx\n387\t852\t1\t3\t7\t7\t7\t87\t187\t387\t387\t14\t15\tXOAAAA\tUGBAAA\tAAAAxx\n288\t853\t0\t0\t8\t8\t8\t88\t88\t288\t288\t16\t17\tCLAAAA\tVGBAAA\tHHHHxx\n919\t854\t1\t3\t9\t19\t9\t19\t119\t419\t919\t18\t19\tJJAAAA\tWGBAAA\tOOOOxx\n393\t855\t1\t1\t3\t13\t3\t93\t193\t393\t393\t6\t7\tDPAAAA\tXGBAAA\tVVVVxx\n953\t856\t1\t1\t3\t13\t3\t53\t153\t453\t953\t6\t7\tRKAAAA\tYGBAAA\tAAAAxx\n798\t857\t0\t2\t8\t18\t8\t98\t198\t298\t798\t16\t17\tSEAAAA\tZGBAAA\tHHHHxx\n940\t858\t0\t0\t0\t0\t0\t40\t140\t440\t940\t0\t1\tEKAAAA\tAHBAAA\tOOOOxx\n198\t859\t0\t2\t8\t18\t8\t98\t198\t198\t198\t16\t17\tQHAAAA\tBHBAAA\tVVVVxx\n25\t860\t1\t1\t5\t5\t5\t25\t25\t25\t25\t10\t11\tZAAAAA\tCHBAAA\tAAAAxx\n190\t861\t0\t2\t0\t10\t0\t90\t190\t190\t190\t0\t1\tIHAAAA\tDHBAAA\tHHHHxx\n820\t862\t0\t0\t0\t0\t0\t20\t20\t320\t820\t0\t1\tOFAAAA\tEHBAAA\tOOOOxx\n15\t863\t1\t3\t5\t15\t5\t15\t15\t15\t15\t10\t11\tPAAAAA\tFHBAAA\tVVVVxx\n427\t864\t1\t3\t7\t7\t7\t27\t27\t427\t427\t14\t15\tLQAAAA\tGHBAAA\tAAAAxx\n349\t865\t1\t1\t9\t9\t9\t49\t149\t349\t349\t18\t19\tLNAAAA\tHHBAAA\tHHHHxx\n785\t866\t1\t1\t5\t5\t5\t85\t185\t285\t785\t10\t11\tFEAAAA\tIHBAAA\tOOOOxx\n340\t867\t0\t0\t0\t0\t0\t40\t140\t340\t340\t0\t1\tCNAAAA\tJHBAAA\tVVVVxx\n292\t868\t0\t0\t2\t12\t2\t92\t92\t292\t292\t4\t5\tGLAAAA\tKHBAAA\tAAAAxx\n17\t869\t1\t1\t7\t17\t7\t17\t17\t17\t17\t14\t15\tRAAAAA\tLHBAAA\tHHHHxx\n985\t870\t1\t1\t5\t5\t5\t85\t185\t485\t985\t10\t11\tXLAAAA\tMHBAAA\tOOOOxx\n645\t871\t1\t1\t5\t5\t5\t45\t45\t145\t645\t10\t11\tVYAAAA\tNHBAAA\tVVVVxx\n631\t872\t1\t3\t1\t11\t1\t31\t31\t131\t631\t2\t3\tHYAAAA\tOHBAAA\tAAAAxx\n761\t873\t1\t1\t1\t1\t1\t61\t161\t261\t761\t2\t3\tHDAAAA\tPHBAAA\tHHHHxx\n707\t874\t1\t3\t7\t7\t7\t7\t107\t207\t707\t14\t15\tFBAAAA\tQHBAAA\tOOOOxx\n776\t875\t0\t0\t6\t16\t6\t76\t176\t276\t776\t12\t13\tWDAAAA\tRHBAAA\tVVVVxx\n856\t876\t0\t0\t6\t16\t6\t56\t56\t356\t856\t12\t13\tYGAAAA\tSHBAAA\tAAAAxx\n978\t877\t0\t2\t8\t18\t8\t78\t178\t478\t978\t16\t17\tQLAAAA\tTHBAAA\tHHHHxx\n710\t878\t0\t2\t0\t10\t0\t10\t110\t210\t710\t0\t1\tIBAAAA\tUHBAAA\tOOOOxx\n604\t879\t0\t0\t4\t4\t4\t4\t4\t104\t604\t8\t9\tGXAAAA\tVHBAAA\tVVVVxx\n291\t880\t1\t3\t1\t11\t1\t91\t91\t291\t291\t2\t3\tFLAAAA\tWHBAAA\tAAAAxx\n747\t881\t1\t3\t7\t7\t7\t47\t147\t247\t747\t14\t15\tTCAAAA\tXHBAAA\tHHHHxx\n837\t882\t1\t1\t7\t17\t7\t37\t37\t337\t837\t14\t15\tFGAAAA\tYHBAAA\tOOOOxx\n722\t883\t0\t2\t2\t2\t2\t22\t122\t222\t722\t4\t5\tUBAAAA\tZHBAAA\tVVVVxx\n925\t884\t1\t1\t5\t5\t5\t25\t125\t425\t925\t10\t11\tPJAAAA\tAIBAAA\tAAAAxx\n49\t885\t1\t1\t9\t9\t9\t49\t49\t49\t49\t18\t19\tXBAAAA\tBIBAAA\tHHHHxx\n832\t886\t0\t0\t2\t12\t2\t32\t32\t332\t832\t4\t5\tAGAAAA\tCIBAAA\tOOOOxx\n336\t887\t0\t0\t6\t16\t6\t36\t136\t336\t336\t12\t13\tYMAAAA\tDIBAAA\tVVVVxx\n185\t888\t1\t1\t5\t5\t5\t85\t185\t185\t185\t10\t11\tDHAAAA\tEIBAAA\tAAAAxx\n434\t889\t0\t2\t4\t14\t4\t34\t34\t434\t434\t8\t9\tSQAAAA\tFIBAAA\tHHHHxx\n284\t890\t0\t0\t4\t4\t4\t84\t84\t284\t284\t8\t9\tYKAAAA\tGIBAAA\tOOOOxx\n812\t891\t0\t0\t2\t12\t2\t12\t12\t312\t812\t4\t5\tGFAAAA\tHIBAAA\tVVVVxx\n810\t892\t0\t2\t0\t10\t0\t10\t10\t310\t810\t0\t1\tEFAAAA\tIIBAAA\tAAAAxx\n252\t893\t0\t0\t2\t12\t2\t52\t52\t252\t252\t4\t5\tSJAAAA\tJIBAAA\tHHHHxx\n965\t894\t1\t1\t5\t5\t5\t65\t165\t465\t965\t10\t11\tDLAAAA\tKIBAAA\tOOOOxx\n110\t895\t0\t2\t0\t10\t0\t10\t110\t110\t110\t0\t1\tGEAAAA\tLIBAAA\tVVVVxx\n698\t896\t0\t2\t8\t18\t8\t98\t98\t198\t698\t16\t17\tWAAAAA\tMIBAAA\tAAAAxx\n283\t897\t1\t3\t3\t3\t3\t83\t83\t283\t283\t6\t7\tXKAAAA\tNIBAAA\tHHHHxx\n533\t898\t1\t1\t3\t13\t3\t33\t133\t33\t533\t6\t7\tNUAAAA\tOIBAAA\tOOOOxx\n662\t899\t0\t2\t2\t2\t2\t62\t62\t162\t662\t4\t5\tMZAAAA\tPIBAAA\tVVVVxx\n329\t900\t1\t1\t9\t9\t9\t29\t129\t329\t329\t18\t19\tRMAAAA\tQIBAAA\tAAAAxx\n250\t901\t0\t2\t0\t10\t0\t50\t50\t250\t250\t0\t1\tQJAAAA\tRIBAAA\tHHHHxx\n407\t902\t1\t3\t7\t7\t7\t7\t7\t407\t407\t14\t15\tRPAAAA\tSIBAAA\tOOOOxx\n823\t903\t1\t3\t3\t3\t3\t23\t23\t323\t823\t6\t7\tRFAAAA\tTIBAAA\tVVVVxx\n852\t904\t0\t0\t2\t12\t2\t52\t52\t352\t852\t4\t5\tUGAAAA\tUIBAAA\tAAAAxx\n871\t905\t1\t3\t1\t11\t1\t71\t71\t371\t871\t2\t3\tNHAAAA\tVIBAAA\tHHHHxx\n118\t906\t0\t2\t8\t18\t8\t18\t118\t118\t118\t16\t17\tOEAAAA\tWIBAAA\tOOOOxx\n912\t907\t0\t0\t2\t12\t2\t12\t112\t412\t912\t4\t5\tCJAAAA\tXIBAAA\tVVVVxx\n458\t908\t0\t2\t8\t18\t8\t58\t58\t458\t458\t16\t17\tQRAAAA\tYIBAAA\tAAAAxx\n926\t909\t0\t2\t6\t6\t6\t26\t126\t426\t926\t12\t13\tQJAAAA\tZIBAAA\tHHHHxx\n328\t910\t0\t0\t8\t8\t8\t28\t128\t328\t328\t16\t17\tQMAAAA\tAJBAAA\tOOOOxx\n980\t911\t0\t0\t0\t0\t0\t80\t180\t480\t980\t0\t1\tSLAAAA\tBJBAAA\tVVVVxx\n259\t912\t1\t3\t9\t19\t9\t59\t59\t259\t259\t18\t19\tZJAAAA\tCJBAAA\tAAAAxx\n900\t913\t0\t0\t0\t0\t0\t0\t100\t400\t900\t0\t1\tQIAAAA\tDJBAAA\tHHHHxx\n137\t914\t1\t1\t7\t17\t7\t37\t137\t137\t137\t14\t15\tHFAAAA\tEJBAAA\tOOOOxx\n159\t915\t1\t3\t9\t19\t9\t59\t159\t159\t159\t18\t19\tDGAAAA\tFJBAAA\tVVVVxx\n243\t916\t1\t3\t3\t3\t3\t43\t43\t243\t243\t6\t7\tJJAAAA\tGJBAAA\tAAAAxx\n472\t917\t0\t0\t2\t12\t2\t72\t72\t472\t472\t4\t5\tESAAAA\tHJBAAA\tHHHHxx\n796\t918\t0\t0\t6\t16\t6\t96\t196\t296\t796\t12\t13\tQEAAAA\tIJBAAA\tOOOOxx\n382\t919\t0\t2\t2\t2\t2\t82\t182\t382\t382\t4\t5\tSOAAAA\tJJBAAA\tVVVVxx\n911\t920\t1\t3\t1\t11\t1\t11\t111\t411\t911\t2\t3\tBJAAAA\tKJBAAA\tAAAAxx\n179\t921\t1\t3\t9\t19\t9\t79\t179\t179\t179\t18\t19\tXGAAAA\tLJBAAA\tHHHHxx\n778\t922\t0\t2\t8\t18\t8\t78\t178\t278\t778\t16\t17\tYDAAAA\tMJBAAA\tOOOOxx\n405\t923\t1\t1\t5\t5\t5\t5\t5\t405\t405\t10\t11\tPPAAAA\tNJBAAA\tVVVVxx\n265\t924\t1\t1\t5\t5\t5\t65\t65\t265\t265\t10\t11\tFKAAAA\tOJBAAA\tAAAAxx\n556\t925\t0\t0\t6\t16\t6\t56\t156\t56\t556\t12\t13\tKVAAAA\tPJBAAA\tHHHHxx\n16\t926\t0\t0\t6\t16\t6\t16\t16\t16\t16\t12\t13\tQAAAAA\tQJBAAA\tOOOOxx\n706\t927\t0\t2\t6\t6\t6\t6\t106\t206\t706\t12\t13\tEBAAAA\tRJBAAA\tVVVVxx\n497\t928\t1\t1\t7\t17\t7\t97\t97\t497\t497\t14\t15\tDTAAAA\tSJBAAA\tAAAAxx\n708\t929\t0\t0\t8\t8\t8\t8\t108\t208\t708\t16\t17\tGBAAAA\tTJBAAA\tHHHHxx\n46\t930\t0\t2\t6\t6\t6\t46\t46\t46\t46\t12\t13\tUBAAAA\tUJBAAA\tOOOOxx\n901\t931\t1\t1\t1\t1\t1\t1\t101\t401\t901\t2\t3\tRIAAAA\tVJBAAA\tVVVVxx\n416\t932\t0\t0\t6\t16\t6\t16\t16\t416\t416\t12\t13\tAQAAAA\tWJBAAA\tAAAAxx\n307\t933\t1\t3\t7\t7\t7\t7\t107\t307\t307\t14\t15\tVLAAAA\tXJBAAA\tHHHHxx\n166\t934\t0\t2\t6\t6\t6\t66\t166\t166\t166\t12\t13\tKGAAAA\tYJBAAA\tOOOOxx\n178\t935\t0\t2\t8\t18\t8\t78\t178\t178\t178\t16\t17\tWGAAAA\tZJBAAA\tVVVVxx\n499\t936\t1\t3\t9\t19\t9\t99\t99\t499\t499\t18\t19\tFTAAAA\tAKBAAA\tAAAAxx\n257\t937\t1\t1\t7\t17\t7\t57\t57\t257\t257\t14\t15\tXJAAAA\tBKBAAA\tHHHHxx\n342\t938\t0\t2\t2\t2\t2\t42\t142\t342\t342\t4\t5\tENAAAA\tCKBAAA\tOOOOxx\n850\t939\t0\t2\t0\t10\t0\t50\t50\t350\t850\t0\t1\tSGAAAA\tDKBAAA\tVVVVxx\n313\t940\t1\t1\t3\t13\t3\t13\t113\t313\t313\t6\t7\tBMAAAA\tEKBAAA\tAAAAxx\n831\t941\t1\t3\t1\t11\t1\t31\t31\t331\t831\t2\t3\tZFAAAA\tFKBAAA\tHHHHxx\n57\t942\t1\t1\t7\t17\t7\t57\t57\t57\t57\t14\t15\tFCAAAA\tGKBAAA\tOOOOxx\n37\t943\t1\t1\t7\t17\t7\t37\t37\t37\t37\t14\t15\tLBAAAA\tHKBAAA\tVVVVxx\n511\t944\t1\t3\t1\t11\t1\t11\t111\t11\t511\t2\t3\tRTAAAA\tIKBAAA\tAAAAxx\n578\t945\t0\t2\t8\t18\t8\t78\t178\t78\t578\t16\t17\tGWAAAA\tJKBAAA\tHHHHxx\n100\t946\t0\t0\t0\t0\t0\t0\t100\t100\t100\t0\t1\tWDAAAA\tKKBAAA\tOOOOxx\n935\t947\t1\t3\t5\t15\t5\t35\t135\t435\t935\t10\t11\tZJAAAA\tLKBAAA\tVVVVxx\n821\t948\t1\t1\t1\t1\t1\t21\t21\t321\t821\t2\t3\tPFAAAA\tMKBAAA\tAAAAxx\n294\t949\t0\t2\t4\t14\t4\t94\t94\t294\t294\t8\t9\tILAAAA\tNKBAAA\tHHHHxx\n575\t950\t1\t3\t5\t15\t5\t75\t175\t75\t575\t10\t11\tDWAAAA\tOKBAAA\tOOOOxx\n272\t951\t0\t0\t2\t12\t2\t72\t72\t272\t272\t4\t5\tMKAAAA\tPKBAAA\tVVVVxx\n491\t952\t1\t3\t1\t11\t1\t91\t91\t491\t491\t2\t3\tXSAAAA\tQKBAAA\tAAAAxx\n43\t953\t1\t3\t3\t3\t3\t43\t43\t43\t43\t6\t7\tRBAAAA\tRKBAAA\tHHHHxx\n167\t954\t1\t3\t7\t7\t7\t67\t167\t167\t167\t14\t15\tLGAAAA\tSKBAAA\tOOOOxx\n457\t955\t1\t1\t7\t17\t7\t57\t57\t457\t457\t14\t15\tPRAAAA\tTKBAAA\tVVVVxx\n647\t956\t1\t3\t7\t7\t7\t47\t47\t147\t647\t14\t15\tXYAAAA\tUKBAAA\tAAAAxx\n180\t957\t0\t0\t0\t0\t0\t80\t180\t180\t180\t0\t1\tYGAAAA\tVKBAAA\tHHHHxx\n48\t958\t0\t0\t8\t8\t8\t48\t48\t48\t48\t16\t17\tWBAAAA\tWKBAAA\tOOOOxx\n553\t959\t1\t1\t3\t13\t3\t53\t153\t53\t553\t6\t7\tHVAAAA\tXKBAAA\tVVVVxx\n188\t960\t0\t0\t8\t8\t8\t88\t188\t188\t188\t16\t17\tGHAAAA\tYKBAAA\tAAAAxx\n262\t961\t0\t2\t2\t2\t2\t62\t62\t262\t262\t4\t5\tCKAAAA\tZKBAAA\tHHHHxx\n728\t962\t0\t0\t8\t8\t8\t28\t128\t228\t728\t16\t17\tACAAAA\tALBAAA\tOOOOxx\n581\t963\t1\t1\t1\t1\t1\t81\t181\t81\t581\t2\t3\tJWAAAA\tBLBAAA\tVVVVxx\n937\t964\t1\t1\t7\t17\t7\t37\t137\t437\t937\t14\t15\tBKAAAA\tCLBAAA\tAAAAxx\n370\t965\t0\t2\t0\t10\t0\t70\t170\t370\t370\t0\t1\tGOAAAA\tDLBAAA\tHHHHxx\n590\t966\t0\t2\t0\t10\t0\t90\t190\t90\t590\t0\t1\tSWAAAA\tELBAAA\tOOOOxx\n421\t967\t1\t1\t1\t1\t1\t21\t21\t421\t421\t2\t3\tFQAAAA\tFLBAAA\tVVVVxx\n693\t968\t1\t1\t3\t13\t3\t93\t93\t193\t693\t6\t7\tRAAAAA\tGLBAAA\tAAAAxx\n906\t969\t0\t2\t6\t6\t6\t6\t106\t406\t906\t12\t13\tWIAAAA\tHLBAAA\tHHHHxx\n802\t970\t0\t2\t2\t2\t2\t2\t2\t302\t802\t4\t5\tWEAAAA\tILBAAA\tOOOOxx\n38\t971\t0\t2\t8\t18\t8\t38\t38\t38\t38\t16\t17\tMBAAAA\tJLBAAA\tVVVVxx\n790\t972\t0\t2\t0\t10\t0\t90\t190\t290\t790\t0\t1\tKEAAAA\tKLBAAA\tAAAAxx\n726\t973\t0\t2\t6\t6\t6\t26\t126\t226\t726\t12\t13\tYBAAAA\tLLBAAA\tHHHHxx\n23\t974\t1\t3\t3\t3\t3\t23\t23\t23\t23\t6\t7\tXAAAAA\tMLBAAA\tOOOOxx\n641\t975\t1\t1\t1\t1\t1\t41\t41\t141\t641\t2\t3\tRYAAAA\tNLBAAA\tVVVVxx\n524\t976\t0\t0\t4\t4\t4\t24\t124\t24\t524\t8\t9\tEUAAAA\tOLBAAA\tAAAAxx\n169\t977\t1\t1\t9\t9\t9\t69\t169\t169\t169\t18\t19\tNGAAAA\tPLBAAA\tHHHHxx\n6\t978\t0\t2\t6\t6\t6\t6\t6\t6\t6\t12\t13\tGAAAAA\tQLBAAA\tOOOOxx\n943\t979\t1\t3\t3\t3\t3\t43\t143\t443\t943\t6\t7\tHKAAAA\tRLBAAA\tVVVVxx\n26\t980\t0\t2\t6\t6\t6\t26\t26\t26\t26\t12\t13\tABAAAA\tSLBAAA\tAAAAxx\n469\t981\t1\t1\t9\t9\t9\t69\t69\t469\t469\t18\t19\tBSAAAA\tTLBAAA\tHHHHxx\n968\t982\t0\t0\t8\t8\t8\t68\t168\t468\t968\t16\t17\tGLAAAA\tULBAAA\tOOOOxx\n947\t983\t1\t3\t7\t7\t7\t47\t147\t447\t947\t14\t15\tLKAAAA\tVLBAAA\tVVVVxx\n133\t984\t1\t1\t3\t13\t3\t33\t133\t133\t133\t6\t7\tDFAAAA\tWLBAAA\tAAAAxx\n52\t985\t0\t0\t2\t12\t2\t52\t52\t52\t52\t4\t5\tACAAAA\tXLBAAA\tHHHHxx\n660\t986\t0\t0\t0\t0\t0\t60\t60\t160\t660\t0\t1\tKZAAAA\tYLBAAA\tOOOOxx\n780\t987\t0\t0\t0\t0\t0\t80\t180\t280\t780\t0\t1\tAEAAAA\tZLBAAA\tVVVVxx\n963\t988\t1\t3\t3\t3\t3\t63\t163\t463\t963\t6\t7\tBLAAAA\tAMBAAA\tAAAAxx\n561\t989\t1\t1\t1\t1\t1\t61\t161\t61\t561\t2\t3\tPVAAAA\tBMBAAA\tHHHHxx\n402\t990\t0\t2\t2\t2\t2\t2\t2\t402\t402\t4\t5\tMPAAAA\tCMBAAA\tOOOOxx\n437\t991\t1\t1\t7\t17\t7\t37\t37\t437\t437\t14\t15\tVQAAAA\tDMBAAA\tVVVVxx\n112\t992\t0\t0\t2\t12\t2\t12\t112\t112\t112\t4\t5\tIEAAAA\tEMBAAA\tAAAAxx\n247\t993\t1\t3\t7\t7\t7\t47\t47\t247\t247\t14\t15\tNJAAAA\tFMBAAA\tHHHHxx\n579\t994\t1\t3\t9\t19\t9\t79\t179\t79\t579\t18\t19\tHWAAAA\tGMBAAA\tOOOOxx\n379\t995\t1\t3\t9\t19\t9\t79\t179\t379\t379\t18\t19\tPOAAAA\tHMBAAA\tVVVVxx\n74\t996\t0\t2\t4\t14\t4\t74\t74\t74\t74\t8\t9\tWCAAAA\tIMBAAA\tAAAAxx\n744\t997\t0\t0\t4\t4\t4\t44\t144\t244\t744\t8\t9\tQCAAAA\tJMBAAA\tHHHHxx\n0\t998\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\tAAAAAA\tKMBAAA\tOOOOxx\n278\t999\t0\t2\t8\t18\t8\t78\t78\t278\t278\t16\t17\tSKAAAA\tLMBAAA\tVVVVxx\n"
  },
  {
    "path": "sql/init_data/person.data",
    "content": "mike\t40\t(3.1,6.2)\njoe\t20\t(5.5,2.5)\nsally\t34\t(3.8,45.8)\nsandra\t19\t(9.345,09.6)\nalex\t30\t(1.352,8.2)\nsue\t50\t(8.34,7.375)\ndenise\t24\t(3.78,87.90)\nsarah\t88\t(8.4,2.3)\nteresa\t38\t(7.7,1.8)\nnan\t28\t(6.35,0.43)\nleah\t68\t(0.6,3.37)\nwendy\t78\t(2.62,03.3)\nmelissa\t28\t(3.089,087.23)\njoan\t18\t(9.4,47.04)\nmary\t08\t(3.7,39.20)\njane\t58\t(1.34,0.44)\nliza\t38\t(9.76,6.90)\njean\t28\t(8.561,7.3)\njenifer\t38\t(6.6,23.3)\njuanita\t58\t(4.57,35.8)\nsusan\t78\t(6.579,3)\nzena\t98\t(0.35,0)\nmartie\t88\t(8.358,.93)\nchris\t78\t(9.78,2)\npat\t18\t(1.19,0.6)\nzola\t58\t(2.56,4.3)\nlouise\t98\t(5.0,8.7)\nedna\t18\t(1.53,3.5)\nbertha\t88\t(2.75,9.4)\nsumi\t38\t(1.15,0.6)\nkoko\t88\t(1.7,5.5)\ngina\t18\t(9.82,7.5)\nrean\t48\t(8.5,5.0)\nsharon\t78\t(9.237,8.8)\npaula\t68\t(0.5,0.5)\njulie\t68\t(3.6,7.2)\nbelinda\t38\t(8.9,1.7)\nkaren\t48\t(8.73,0.0)\ncarina\t58\t(4.27,8.8)\ndiane\t18\t(5.912,5.3)\nesther\t98\t(5.36,7.6)\ntrudy\t88\t(6.01,0.5)\nfanny\t08\t(1.2,0.9)\ncarmen\t78\t(3.8,8.2)\nlita\t25\t(1.3,8.7)\npamela\t48\t(8.21,9.3)\nsandy\t38\t(3.8,0.2)\ntrisha\t88\t(1.29,2.2)\numa\t78\t(9.73,6.4)\nvelma\t68\t(8.8,8.9)\n"
  },
  {
    "path": "sql/init_data/streets.data",
    "content": "A                             St  \t[(-122.0265,37.049),(-122.0271,37.045)]\nA                             St  \t[(-122.089,37.71),(-122.0886,37.711)]\nA                             St  \t[(-122.0985,37.671),(-122.0981,37.674)]\nA                             St  \t[(-122.0991,37.668),(-122.0988,37.669)]\nA                             St  \t[(-122.103419,37.667),(-122.103439,37.667)]\nA                             St  \t[(-122.103913,37.66632),(-122.104037,37.66611),(-122.104051,37.66609)]\nA                             St  \t[(-122.106469,37.66446),(-122.1067,37.664)]\nA                             St  \t[(-122.107,37.664),(-122.107101,37.66425),(-122.1074,37.665)]\nA                             St  \t[(-122.1172,37.659),(-122.119506,37.65661)]\nAbbie                         St  \t[(-121.867486,37.54243),(-121.868,37.545)]\nAcacia                        Ave \t[(-122.2353,37.457),(-122.2344,37.461)]\nAcacia                        Ave \t[(-122.2364,37.436),(-122.2364,37.443)]\nAcacia                        Ave \t[(-122.2415,37.435),(-122.2407,37.437)]\nAcadia                        Ct  \t[(-121.9007,37.773),(-121.9016,37.768)]\nAcapulco                      Way \t[(-122.0517,37.91),(-122.0519,37.911)]\nAccess Rd 162                     \t[(-121.9469,37.993),(-121.9475,37.993)]\nAccess Rd 25                      \t[(-121.9283,37.894),(-121.9283,37.9)]\nAccess Rd 29                      \t[(-121.9339,37.854),(-121.9343,37.85)]\nActon                         Cir \t[(-122.2824,37.681),(-122.2824,37.688)]\nAda                           St  \t[(-122.2487,37.398),(-122.2496,37.401)]\nAda                           St  \t[(-122.2807,37.807),(-122.2797,37.811)]\nAdams                         Ave \t[(-121.742,37.829),(-121.742,37.822)]\nAdams                         Ave \t[(-122.1906,37.253),(-122.1893,37.272)]\nAdams                         St  \t[(-122.2349,37.542),(-122.2341,37.537)]\nAdams                         St  \t[(-122.2364,37.553),(-122.2357,37.548)]\nAdason                        Dr  \t[(-122.1315,37.016),(-122.1288,37.009)]\nAddison                       St  \t[(-122.2735,37.705),(-122.2722,37.707)]\nAddison                       St  \t[(-122.2856,37.688),(-122.2854,37.689)]\nAddison                       St  \t[(-122.2874,37.686),(-122.2864,37.688)]\nAddison                       Way \t[(-121.9044,37.881),(-121.9044,37.889)]\nAddison                       Way \t[(-121.9044,37.895),(-121.9044,37.899)]\nAdelina Common                    \t[(-121.925847,37.29985),(-121.925765,37.29493)]\nAdeline                       St  \t[(-122.2728,37.442),(-122.2725,37.451)]\nAdeline                       St  \t[(-122.2785,37.291),(-122.2783,37.296)]\nAdelle                        St  \t[(-121.7793,37.841),(-121.7797,37.849)]\nAdmirality                    Lane\t[(-122.2424,37.323),(-122.2429,37.318)]\nAdobe                         Dr  \t[(-122.0304,37.579),(-122.0278,37.592)]\nAdrian                        Ave \t[(-122.1019,37.389),(-122.1019,37.369)]\nAdriano                       St  \t[(-122.032,37.663),(-122.0312,37.653)]\nAgate                         Ct  \t[(-121.801,37.653),(-121.8008,37.649)]\nAgena                         Cir \t[(-122.0694,37.847),(-122.0696,37.839)]\nAgua Fria Creek                   \t[(-121.909487,37.94485),(-121.910653,37.94809)]\nAgua Fria Creek                   \t[(-121.9125,37.95367),(-121.9138,37.958)]\nAgua Fria Creek                   \t[(-121.9254,37.922),(-121.9281,37.889)]\nAgua Fria Creek                   \t[(-121.935,37.828),(-121.9356,37.826)]\nAgua Vista                        \t[(-122.0796,37.896),(-122.0792,37.896)]\nAgua Vista                    St  \t[(-122.2089,37.839),(-122.2069,37.819)]\nAileen                        St  \t[(-122.2612,37.42),(-122.2622,37.421)]\nAirport                       Road\t[(-122.2085,37.147),(-122.2101,37.154)]\nAladdin                       Ave \t[(-122.1532,37.088),(-122.1577,37.068)]\nAlameda                       Ave \t[(-122.2197,37.68),(-122.2192,37.68)]\nAlameda                       Ave \t[(-122.2555,37.689),(-122.2534,37.68)]\nAlameda                       Ave \t[(-122.2605,37.713),(-122.2588,37.704)]\nAlameda                       Dr  \t[(-121.8756,37.746),(-121.8763,37.746)]\nAlameda                       Road\t[(-122.2955,37.875),(-122.2963,37.871)]\nAlameda Belt Line Railroad        \t[(-122.2586,37.769),(-122.2624,37.784)]\nAlameda Belt Line Railroad        \t[(-122.2697,37.798),(-122.2709,37.797)]\nAlameda Creek                     \t[(-121.8283,37.151),(-121.8273,37.142)]\nAlameda Creek                     \t[(-121.909502,37.93892),(-121.909,37.94)]\nAlameda Creek                     \t[(-121.930593,37.93785),(-121.930096,37.94011)]\nAlameda Creek                     \t[(-121.9466,37.974),(-121.9503,37.973)]\nAlameda Creek                     \t[(-121.9691,37.748),(-121.97,37.73)]\nAlameda Creek                     \t[(-121.9724,37.727),(-121.9738,37.726)]\nAlameda Creek                     \t[(-121.978805,37.72143),(-121.9839,37.717)]\nAlameda Creek                     \t[(-122.0136,37.734),(-122.0165,37.748)]\nAlameda Creek                     \t[(-122.022956,37.77306),(-122.025,37.781)]\nAlameda Creek                     \t[(-122.038,37.877),(-122.0446,37.873)]\nAlameda Creek                     \t[(-122.0513,37.248),(-122.0556,37.215)]\nAlameda Diversion                 \t[(-121.774647,37.97333),(-121.772718,37.98591)]\nAlamo Canal                       \t[(-121.910434,37.73476),(-121.9101,37.726)]\nAlamo Canal                       \t[(-121.9117,37.768),(-121.911261,37.75648)]\nAlamo Creek                       \t[(-121.910523,37.2611),(-121.910923,37.26374)]\nAlbany                        St  \t[(-122.0327,37.129),(-122.0326,37.115)]\nAlbany                        Ter \t[(-122.2864,37.868),(-122.2856,37.867)]\nAlborg                        Ct  \t[(-122.0492,37.154),(-122.0484,37.15)]\nAlcatraz                      Ave \t[(-122.2525,37.515),(-122.2531,37.514)]\nAlcatraz                      Ave \t[(-122.2617,37.502),(-122.2624,37.501)]\nAlcatraz                      Ave \t[(-122.279,37.479),(-122.2773,37.482)]\nAlcatraz                      Ave \t[(-122.2817,37.475),(-122.2825,37.475)]\nAlcosta                       Blvd\t[(-121.938,37.237),(-121.9392,37.235)]\nAlden                         Lane\t[(-121.786092,37.56057),(-121.7837,37.56)]\nAlden                         Lane\t[(-121.7978,37.561),(-121.795183,37.561)]\nAlden                         Road\t[(-122.1116,37.817),(-122.110686,37.81989),(-122.1097,37.823)]\nAlder                         Ct  \t[(-122.0117,37.66),(-122.0109,37.653)]\nAlexander                     Ct  \t[(-121.8708,37.845),(-121.8706,37.841)]\nAlexander                     St  \t[(-121.7888,37.724),(-121.7874,37.724)]\nAlexandria                    St  \t[(-122.1411,37.892),(-122.1417,37.892)]\nAlgonquin                     Ave \t[(-121.7851,37.888),(-121.7852,37.891)]\nAlhambra                      Lane\t[(-122.2107,37.368),(-122.2102,37.367)]\nAlicante                      Dr  \t[(-122.0211,37.587),(-122.0198,37.582)]\nAlice                         St  \t[(-122.086,37.644),(-122.0848,37.625)]\nAlice                         St  \t[(-122.2696,37.967),(-122.2695,37.969)]\nAlice                         St  \t[(-122.2722,37.927),(-122.2714,37.94)]\nAlice                         Way \t[(-121.7968,37.718),(-121.7958,37.718)]\nAlice                         Way \t[(-122.0715,37.836),(-122.072,37.833)]\nAlida                         St  \t[(-122.2025,37.06),(-122.2019,37.056)]\nAlisal                        St  \t[(-121.86925,37.34979),(-121.8685,37.326)]\nAlisal                        St  \t[(-121.87,37.382),(-121.8695,37.35)]\nAliso                         Ave \t[(-122.1809,37.953),(-122.18,37.946)]\nAllegro                       Ct  \t[(-121.9755,37.201),(-121.9764,37.201)]\nAllen                         Ct  \t[(-122.0131,37.602),(-122.0117,37.597)]\nAllendale                     Ave \t[(-122.2048,37.863),(-122.2041,37.858),(-122.2035,37.851)]\nAllendale                     Ave \t[(-122.2067,37.882),(-122.2065,37.879)]\nAllison                       Dr  \t[(-122.0748,37.863),(-122.073,37.855)]\nAllston                       Way \t[(-122.2799,37.677),(-122.2787,37.681)]\nAlma                          Ct  \t[(-121.9087,37.799),(-121.9089,37.814)]\nAlmaden                       Blvd\t[(-122.0551,37.008),(-122.0551,37.016)]\nAlmaden                       Pl  \t[(-121.9603,37.697),(-121.9601,37.693)]\nAlmeria                       Dr  \t[(-122.0711,37.224),(-122.0736,37.224)]\nAlmond                        Ave \t[(-121.7387,37.75527),(-121.7387,37.74118)]\nAlmond                        Ave \t[(-121.7388,37.778),(-121.7387,37.772)]\nAlmond                        Road\t[(-122.0818,37.132),(-122.0831,37.116)]\nAloe                          Ct  \t[(-121.9158,37.922),(-121.9152,37.927)]\nAlpine                        Ter \t[(-122.2374,37.445),(-122.2377,37.459)]\nAlta                          Dr  \t[(-122.0109,37.424),(-122.0101,37.419)]\nAlta Vista                    Ave \t[(-122.2483,37.174),(-122.2473,37.167)]\nAltamont Creek                    \t[(-121.7422,37.178),(-121.7413,37.203)]\nAltamont Creek                    \t[(-121.7509,37.149),(-121.7474,37.154)]\nAltamont Pass                 Road\t[(-121.659901,37.44449),(-121.666828,37.41016)]\nAltimirano                    Dr  \t[(-121.8781,37.0193),(-121.8713,37.01707)]\nAlton                         Ct  \t[(-121.9977,37.581),(-121.9981,37.576)]\nAlvarado                      Blvd\t[(-122.0562,37.829),(-122.055814,37.82723)]\nAlvarado                      Road\t[(-122.2339,37.608),(-122.2322,37.616)]\nAlvarado                      Road\t[(-122.2391,37.573),(-122.2397,37.58)]\nAlvarado                      St  \t[(-122.1505,37.05),(-122.1494,37.03)]\nAlvarado Niles                Road\t[(-122.0325,37.903),(-122.0316,37.9)]\nAlvarado Niles                Road\t[(-122.049848,37.95115),(-122.0473,37.945)]\nAlvord                        Way \t[(-121.9085,37.891),(-121.9093,37.889)]\nAmador                        St  \t[(-122.0963,37.614),(-122.0962,37.609)]\nAmador                        St  \t[(-122.0981,37.647),(-122.0966,37.635)]\nAmador                        St  \t[(-122.0999,37.664),(-122.099,37.655)]\nAmador Valley                 Blvd\t[(-121.9198,37.146),(-121.9211,37.138)]\nAmador Valley                 Ct  \t[(-121.9365,37.068),(-121.937909,37.06375)]\nAmarillo                      Ct  \t[(-121.9439,37.044),(-121.9432,37.046)]\nAmbar                         Pl  \t[(-121.9494,37.482),(-121.9479,37.474)]\nAmber                         Ct  \t[(-121.7997,37.708),(-121.7997,37.704)]\nAmber                         Way \t[(-121.8025,37.707),(-121.8015,37.708)]\nAmerican                      Ave \t[(-122.1271,37.478),(-122.1281,37.489)]\nAmes                          Ter \t[(-121.9962,37.763),(-121.9955,37.762)]\nAmherst                       Ct  \t[(-122.1571,37.036),(-122.1575,37.034)]\nAnchor                        Dr  \t[(-122.3027,37.374),(-122.3032,37.383)]\nAndrade                       Road\t[(-121.8842,37.741),(-121.8841,37.738)]\nAndrade                       Road\t[(-121.8853,37.565),(-121.8855,37.564)]\nAndrea                        Cir \t[(-121.733218,37.88641),(-121.733286,37.90617)]\nAndrews                       St  \t[(-121.7814,37.834),(-121.7814,37.829)]\nAngela                        St  \t[(-121.865522,37.55324),(-121.8652,37.552)]\nAngela                        St  \t[(-121.8795,37.607),(-121.8798,37.608)]\nAngus                         Way \t[(-122.098774,37.86535),(-122.0986,37.861)]\nAnita                         Ct  \t[(-121.9655,37.744),(-121.9653,37.738)]\nAnn                           St  \t[(-121.9888,37.604),(-121.9894,37.603)]\nAnna Maria                    St  \t[(-121.7957,37.756),(-121.7958,37.725)]\nAnnerley                      Road\t[(-122.2328,37.168),(-122.2325,37.17)]\nAntelope                      Ct  \t[(-122.0653,37.773),(-122.0648,37.773)]\nAntonio                       St  \t[(-122.1642,37.251),(-122.1653,37.247)]\nAnza                          St  \t[(-121.9184,37.306),(-121.9197,37.304)]\nAnza                          Way \t[(-121.7794,37.714),(-121.7788,37.714)]\nApgar                         St  \t[(-122.2709,37.288),(-122.2719,37.29)]\nApgar                         St  \t[(-122.278,37.291),(-122.2785,37.291)]\nApollo                        Cir \t[(-122.068531,37.87654),(-122.0686,37.877)]\nAppian                        Way \t[(-122.0022,37.98),(-122.0019,37.983)]\nApple                         Ave \t[(-122.0909,37.85),(-122.0901,37.857)]\nApplewood                     St  \t[(-121.9629,37.192),(-121.9616,37.168)]\nApricot                       Lane\t[(-121.9471,37.401),(-121.9456,37.392)]\nAquarius                      Cir \t[(-122.0669,37.877),(-122.0674,37.88)]\nArbor                         Dr  \t[(-121.8506,37.576),(-121.8521,37.578)]\nArbor                         St  \t[(-122.2587,37.758),(-122.2582,37.765)]\nArcade                        Lane\t[(-122.2514,37.865),(-122.251558,37.86316)]\nArch                          St  \t[(-122.2639,37.79),(-122.2638,37.782)]\nArch                          St  \t[(-122.2647,37.846),(-122.2646,37.844)]\nArcher                        Ave \t[(-121.9879,37.627),(-121.9888,37.626)]\nArden                         Road\t[(-122.0978,37.177),(-122.1,37.177)]\nArdenwood                     Blvd\t[(-122.063701,37.59653),(-122.063302,37.58815)]\nArdmore                       Dr  \t[(-122.1308,37.211),(-122.1293,37.212)]\nArdo                          St  \t[(-122.0295,37.682),(-122.0302,37.674)]\nArdo                          St  \t[(-122.0306,37.659),(-122.0312,37.653)]\nArena                         St  \t[(-122.155014,37.82347),(-122.1559,37.82)]\nArendt                        Way \t[(-121.8717,37.606),(-121.871,37.602)]\nArgonaut                      Way \t[(-121.993,37.475),(-121.9926,37.473)]\nArgonne                       St  \t[(-122.146,37.806),(-122.1455,37.801),(-122.1451,37.796)]\nArizona                       St  \t[(-122.0381,37.901),(-122.0367,37.898)]\nArizona                       St  \t[(-122.044507,37.905),(-122.0443,37.904)]\nArizona                       St  \t[(-122.1985,37.978),(-122.1981,37.974)]\nArk                           Dr  \t[(-122.1313,37.029),(-122.1313,37.036)]\nArkansas                      Pl  \t[(-121.9148,37.696),(-121.9149,37.699)]\nArlington                     Ave \t[(-122.2699,37.43),(-122.2719,37.428)]\nArlington                     Ave \t[(-122.276,37.024),(-122.276,37.014)]\nArlington                     Ave \t[(-122.276,37.988),(-122.2753,37.974)]\nArlington                     Dr  \t[(-121.8802,37.408),(-121.8807,37.394)]\nArlington                     Road\t[(-121.7957,37.898),(-121.7956,37.906)]\nArmata                        St  \t[(-121.9236,37.858),(-121.9232,37.853)]\nArnold                        Ct  \t[(-122.0887,37.669),(-122.0894,37.666)]\nArnold                        Road\t[(-121.8923,37.113),(-121.8924,37.111)]\nArnold                        Road\t[(-121.8924,37.06),(-121.8924,37.062)]\nArrowhead                     Dr  \t[(-122.1943,37.389),(-122.1908,37.366)]\nArroyo                        Dr  \t[(-121.9049,37.509),(-121.9029,37.516)]\nArroyo                        Road\t[(-121.749307,37.14717),(-121.7481,37.14957)]\nArroyo                        Road\t[(-121.7506,37.189),(-121.75,37.18541)]\nArroyo                        Road\t[(-121.7555,37.258),(-121.7556,37.251)]\nArroyo                        Road\t[(-121.76696,37.7112),(-121.76687,37.7094)]\nArroyo                        Road\t[(-121.7671,37.654),(-121.767086,37.65214),(-121.767,37.641)]\nArroyo de la Laguna               \t[(-121.9064,37.612),(-121.9047,37.551)]\nArroyo del Valle                  \t[(-121.607487,37.89841),(-121.612773,37.92638)]\nArroyo del Valle                  \t[(-121.654588,37.36507),(-121.656972,37.4088)]\nArroyo del Valle                  \t[(-121.75,37.20484),(-121.7584,37.208)]\nArroyo del Valle                  \t[(-121.8049,37.539),(-121.7856,37.463)]\nArroyo del Valle                  \t[(-121.8751,37.656),(-121.8731,37.646)]\nArroyo Las Positas                \t[(-121.7308,37.87),(-121.72772,37.85435)]\nArroyo Las Positas                \t[(-121.7349,37.943),(-121.734048,37.9262)]\nArroyo Las Positas                \t[(-121.7836,37.997),(-121.783492,37.99605)]\nArroyo Las Positas                \t[(-121.7973,37.997),(-121.7957,37.005)]\nArroyo Las Positas                \t[(-121.8473,37.965),(-121.8312,37.992)]\nArroyo Las Positas                \t[(-121.858962,37.94925),(-121.858919,37.95878)]\nArroyo Mocho                      \t[(-121.553409,37.25257),(-121.565204,37.37327)]\nArroyo Mocho                      \t[(-121.625,37.83316),(-121.624698,37.83019)]\nArroyo Mocho                      \t[(-121.660579,37.01388),(-121.668949,37.027),(-121.682578,37.10817)]\nArroyo Mocho                      \t[(-121.7316,37.595),(-121.7186,37.466)]\nArroyo Mocho Canal                \t[(-121.90854,37.78099),(-121.907797,37.78392)]\nArroyo Seco                       \t[(-121.655796,37.50684),(-121.657215,37.51096)]\nArroyo Seco                       \t[(-121.7073,37.766),(-121.6997,37.729)]\nArroyuelo                     Ave \t[(-122.2496,37.271),(-122.249564,37.2728)]\nAscot                         Dr  \t[(-122.1934,37.217),(-122.1926,37.219)]\nAscot                         Dr  \t[(-122.1969,37.211),(-122.1951,37.207)]\nAsh                           St  \t[(-122.0384,37.259),(-122.0388,37.276)]\nAsh                           St  \t[(-122.0408,37.31),(-122.04,37.292)]\nAshby                         Ave \t[(-122.2494,37.579),(-122.2485,37.579)]\nAshby                         Ave \t[(-122.2526,37.574),(-122.2518,37.574)]\nAshby                         Ave \t[(-122.264,37.557),(-122.263,37.559)]\nAshland                       Ave \t[(-122.1178,37.941),(-122.1178,37.93)]\nAshland                       Ave \t[(-122.1179,37.914),(-122.1179,37.913)]\nAshwood Common                    \t[(-121.962832,37.21086),(-121.963052,37.21067)]\nAsilomar                      Dr  \t[(-122.2028,37.298),(-122.20355,37.2905)]\nAsilomar                      Dr  \t[(-122.2041,37.333),(-122.204,37.312)]\nAspinwall                     Road\t[(-122.2074,37.39),(-122.2068,37.39)]\nAster                         Ct  \t[(-121.9125,37.72),(-121.9129,37.719)]\nAt and Sf Railroad                \t[(-122.2765,37.347),(-122.2768,37.339)]\nAt and Sf Railroad                \t[(-122.2767,37.463),(-122.2766,37.454)]\nAt and Sf Railroad                \t[(-122.2785,37.544),(-122.2784,37.535)]\nAt and Sf Railroad                \t[(-122.281389,37.30695),(-122.282488,37.30491)]\nAt and Sf Railroad                \t[(-122.2827,37.611),(-122.2821,37.603)]\nAt and Sf Railroad                \t[(-122.2844,37.293),(-122.2848,37.291)]\nAt and Sf Railroad                \t[(-122.2878,37.788),(-122.2874,37.783)]\nAt and Sf Railroad                \t[(-122.288,37.3),(-122.288,37.294)]\nAtherton                      St  \t[(-122.0819,37.68),(-122.0809,37.669)]\nAtherton                      St  \t[(-122.0838,37.7),(-122.0829,37.69)]\nAtherton                      St  \t[(-122.1701,37.612),(-122.1696,37.606)]\nAthol                         Ave \t[(-122.2535,37.01),(-122.2523,37.016)]\nAtlantic                      Ave \t[(-122.2831,37.804),(-122.2816,37.803)]\nAtlantic                      St  \t[(-122.0371,37.018),(-122.0382,37.018)]\nAtlas                         Ave \t[(-122.1889,37.964),(-122.1882,37.966)]\nAtwater                       Ct  \t[(-122.0076,37.662),(-122.0084,37.654)]\nAuburn                        Ave \t[(-122.25,37.489),(-122.25035,37.4945)]\nAudrey                        Dr  \t[(-122.069,37.13),(-122.0683,37.131)]\nAudubon                       St  \t[(-122.0388,37.261),(-122.0383,37.258)]\nAughinbaugh                   Way \t[(-122.2491,37.473),(-122.249,37.471)]\nAugustine                     Pl  \t[(-122.0169,37.732),(-122.0163,37.725)]\nAurora                        Dr  \t[(-122.1804,37.973),(-122.18,37.966)]\nAuseon                        Ave \t[(-122.1653,37.565),(-122.165,37.567)]\nAustin                        St  \t[(-121.943,37.422),(-121.9435,37.425)]\nAutumn Oak                    Dr  \t[(-121.749435,37.09187),(-121.749806,37.10065)]\nAvalon                        Ave \t[(-122.2477,37.597),(-122.246,37.598)]\nAvenue 130th                      \t[(-122.1851,37.044),(-122.1872,37.036)]\nAvenue 134th                      \t[(-122.1823,37.002),(-122.1851,37.992)]\nAvenue 140th                      \t[(-122.1656,37.003),(-122.1691,37.988)]\nAvenue A                          \t[(-122.3005,37.885),(-122.3024,37.885)]\nAvenue A                          \t[(-122.3035,37.885),(-122.3076,37.886)]\nAvenue D                          \t[(-122.298,37.848),(-122.3024,37.849)]\nAvenue F                          \t[(-122.2943,37.831),(-122.2971,37.832)]\nAvenue L                          \t[(-122.296,37.757),(-122.2985,37.757)]\nAvoca                         Ave \t[(-122.2211,37.413),(-122.2204,37.416)]\nAyala                         Ave \t[(-122.2587,37.429),(-122.2584,37.435)]\nAzalea                        Ct  \t[(-121.7365,37.13),(-121.7357,37.136)]\nAzevedo                       Ave \t[(-122.0639,37.756),(-122.0641,37.75)]\nAztec                         Ct  \t[(-121.922,37.92),(-121.921,37.92)]\nB                             St  \t[(-121.8924,37.95133),(-121.8924,37.952)]\nB                             St  \t[(-122.0241,37.05),(-122.0248,37.045)]\nB                             St  \t[(-122.0531,37.434),(-122.0537,37.434)]\nB                             St  \t[(-122.0656,37.823),(-122.0652,37.825)]\nB                             St  \t[(-122.0799,37.742),(-122.0782,37.753)]\nB                             St  \t[(-122.087,37.707),(-122.0863,37.709)]\nB                             St  \t[(-122.0955,37.673),(-122.0944,37.677)]\nB                             St  \t[(-122.1749,37.451),(-122.1743,37.443)]\nBach                          Ct  \t[(-121.9778,37.295),(-121.9769,37.292)]\nBahama                        Ave \t[(-122.1039,37.335),(-122.1031,37.321)]\nBahama Com                        \t[(-122.0361,37.72),(-122.036031,37.72046),(-122.0358,37.722)]\nBaine                         Ave \t[(-122.0089,37.565),(-122.0104,37.546)]\nBairo                         Ct  \t[(-121.9505,37.398),(-121.9498,37.393)]\nBaker                         St  \t[(-122.2792,37.495),(-122.2791,37.488)]\nBalboa                        Dr  \t[(-122.1982,37.319),(-122.1971,37.333)]\nBalboa                        Way \t[(-122.0205,37.519),(-122.0207,37.517)]\nBaldwin                       Pl  \t[(-122.0274,37.697),(-122.0265,37.692)]\nBallantyne                    Dr  \t[(-121.858907,37.985),(-121.8585,37.985)]\nBallantyne                    Dr  \t[(-121.8611,37.986),(-121.8605,37.985)]\nBallena                       Blvd\t[(-122.2854,37.691),(-122.285393,37.68924)]\nBallentine                    Dr  \t[(-121.859765,37.96825),(-121.860477,37.96784)]\nBalmoral                      Dr  \t[(-122.1639,37.981),(-122.1635,37.988)]\nBalmoral                      Dr  \t[(-122.1658,37.027),(-122.1656,37.042)]\nBalmoral                      St  \t[(-122.055,37.971),(-122.0555,37.979)]\nBanbury                       St  \t[(-122.0943,37.495),(-122.0949,37.493)]\nBancroft                      Ave \t[(-122.1475,37.288),(-122.147,37.276)]\nBancroft                      Ave \t[(-122.1485,37.311),(-122.1481,37.303)]\nBancroft                      Ave \t[(-122.1518,37.358),(-122.1511,37.349)]\nBancroft                      Ave \t[(-122.15714,37.4242),(-122.156,37.409)]\nBancroft                      Ave \t[(-122.1585,37.445),(-122.1583,37.441)]\nBancroft                      Ave \t[(-122.1643,37.523),(-122.1631,37.508),(-122.1621,37.493)]\nBancroft                      Ave \t[(-122.1718,37.62),(-122.1715,37.617)]\nBancroft                      Ave \t[(-122.1796,37.689),(-122.1792,37.684)]\nBancroft                      Ave \t[(-122.1903,37.706),(-122.189,37.705)]\nBancroft                      Ave \t[(-122.2041,37.716),(-122.202,37.716)]\nBancroft                      Ct  \t[(-122.1329,37.109),(-122.1322,37.116)]\nBancroft                      Way \t[(-122.2753,37.667),(-122.2742,37.668)]\nBancroft                      Way \t[(-122.2846,37.654),(-122.283747,37.655)]\nBancroft                      Way \t[(-122.291,37.644),(-122.2899,37.647)]\nBandon                        Dr  \t[(-121.9311,37.234),(-121.931,37.237)]\nBanyan Tree                   Road\t[(-121.9901,37.317),(-121.9877,37.304)]\nBarbers Point                 Road\t[(-122.2957,37.896),(-122.2965,37.894)]\nBarcelona                     Ave \t[(-122.0896,37.276),(-122.0894,37.253)]\nBarcelona                     St  \t[(-122.1459,37.639),(-122.1445,37.623)]\nBarcelona                     Way \t[(-122.0787,37.86),(-122.0783,37.858)]\nBardolph                      Cir \t[(-122.0583,37.718),(-122.0586,37.726)]\nBarlow                        Dr  \t[(-122.0891,37.034),(-122.088,37.037),(-122.086558,37.03988)]\nBarlow                        Dr  \t[(-122.0915,37.03),(-122.0903,37.032)]\nBart                          Ramp\t[(-122.0495,37.208),(-122.0473,37.196)]\nBart Access                   Road\t[(-122.0346,37.081),(-122.0329,37.057)]\nBartlett                      Lane\t[(-122.111062,37.71771),(-122.10988,37.70276)]\nBartlett                      St  \t[(-122.2071,37.902),(-122.2053,37.913)]\nBarton                        Dr  \t[(-121.9655,37.744),(-121.9644,37.749)]\nBates                         Dr  \t[(-122.0328,37.748),(-122.0322,37.745)]\nBaumberg                      Ave \t[(-122.0987,37.241),(-122.0985,37.237)]\nBautista                      St  \t[(-121.9227,37.29),(-121.9225,37.284)]\nBay                           St  \t[(-121.9611,37.33),(-121.9627,37.329)]\nBay                           St  \t[(-122.2642,37.732),(-122.2641,37.751)]\nBay Area Rapid Transit            \t[(-121.983355,37.64329),(-121.982907,37.63842)]\nBay Area Rapid Transit            \t[(-122.0049,37.816),(-122.004,37.809)]\nBay Area Rapid Transit            \t[(-122.007,37.833),(-122.0062,37.827)]\nBay Area Rapid Transit            \t[(-122.02,37.935),(-122.0193,37.926)]\nBay Area Rapid Transit            \t[(-122.0309,37.057),(-122.0281,37.027),(-122.0262,37.001)]\nBay Area Rapid Transit            \t[(-122.0813,37.661),(-122.0806,37.654)]\nBay Area Rapid Transit            \t[(-122.0981,37.779),(-122.0963,37.767)]\nBay Area Rapid Transit            \t[(-122.1694,37.311),(-122.1679,37.3)]\nBay Area Rapid Transit            \t[(-122.2086,37.641),(-122.2061,37.619)]\nBay Area Rapid Transit            \t[(-122.2129,37.676),(-122.212,37.668)]\nBay Area Rapid Transit            \t[(-122.2172,37.713),(-122.2184,37.719)]\nBay Area Rapid Transit            \t[(-122.231147,37.54912),(-122.229,37.562)]\nBay Area Rapid Transit            \t[(-122.2349,37.525),(-122.2339,37.532)]\nBay Area Rapid Transit            \t[(-122.2571,37.427),(-122.2563,37.431)]\nBay Area Rapid Transit            \t[(-122.2658,37.337),(-122.2644,37.38)]\nBay Area Rapid Transit            \t[(-122.267508,37.25368),(-122.2674,37.258)]\nBay Forest                    Dr  \t[(-122.2139,37.561),(-122.2142,37.565)]\nBay Walk                      Road\t[(-122.2471,37.389),(-122.2462,37.389)]\nBayfield                      Pl  \t[(-121.9665,37.204),(-121.9664,37.196)]\nBaylor                        St  \t[(-122.0272,37.93),(-122.0284,37.903)]\nBayview                       Ave \t[(-122.0584,37.864),(-122.0581,37.855)]\nBayview                       Dr  \t[(-122.2386,37.511),(-122.2379,37.514)]\nBeachwood                     Way \t[(-121.8817,37.731),(-121.8807,37.731)]\nBeacon                        St  \t[(-122.2484,37.09),(-122.2472,37.088)]\nBeard                         Road\t[(-122.0417,37.819),(-122.0424,37.81)]\nBeard                         Road\t[(-122.0447,37.778),(-122.045,37.775)]\nBeaumont                      Ave \t[(-122.2263,37.033),(-122.2262,37.04)]\nBecket                        Dr  \t[(-122.0509,37.005),(-122.0509,37.033)]\nBedelio                       Ter \t[(-122.019,37.579),(-122.018,37.574)]\nBedford                       St  \t[(-121.9333,37.403),(-121.9338,37.402)]\nBedford                       Way \t[(-121.928,37.149),(-121.9288,37.15)]\nBeecham                       Ct  \t[(-121.8693,37.959),(-121.8704,37.959)]\nBeechmont                     Lane\t[(-122.0971,37.558),(-122.0984,37.555)]\nBegier                        Ave \t[(-122.15,37.314),(-122.1488,37.317)]\nBegonia                       Dr  \t[(-122.1334,37.01),(-122.1342,37.01)]\nBegonia                       St  \t[(-122.0153,37.785),(-122.0156,37.772)]\nBegonia                       St  \t[(-122.0218,37.797),(-122.022,37.789)]\nBel Aire                      St  \t[(-122.0717,37.726),(-122.0714,37.725)]\nBell                          St  \t[(-121.99126,37.4916),(-121.991407,37.49215)]\nBelleview                     Dr  \t[(-122.1626,37.325),(-122.1635,37.32)]\nBellevue                      Ave \t[(-122.2529,37.13),(-122.2521,37.111)]\nBellflower                    Dr  \t[(-122.0103,37.317),(-122.009979,37.31387)]\nBellhaven                     Ave \t[(-122.0354,37.414),(-122.0364,37.405)]\nBelmont                       Ave \t[(-122.0708,37.588),(-122.0703,37.582)]\nBelvedere                     Ave \t[(-122.1768,37.918),(-122.1772,37.918)]\nBelvedere                     Ave \t[(-122.2892,37.767),(-122.2888,37.759)]\nBenecia                       Ave \t[(-122.0077,37.222),(-122.0076,37.225)]\nBenedict                      Dr  \t[(-122.1326,37.204),(-122.1323,37.199)]\nBenner                        Ct  \t[(-121.9063,37.891),(-121.9076,37.888)]\nBennington                    Lane\t[(-122.103818,37.36136),(-122.1045,37.361)]\nBenson                        Road\t[(-122.083217,37.94765),(-122.0891,37.928)]\nBenton                        St  \t[(-122.2605,37.713),(-122.2605,37.731)]\nBerkeley                      Way \t[(-122.2747,37.722),(-122.2726,37.725)]\nBerlin                        Way \t[(-121.7774,37.649),(-121.7766,37.649)]\nBernal                        Ave \t[(-121.8556,37.668),(-121.85626,37.68656)]\nBernal                        Ave \t[(-121.895208,37.57837),(-121.884914,37.57603)]\nBernhardt                     Dr  \t[(-122.1852,37.297),(-122.1847,37.292)]\nBernhardt                     St  \t[(-122.1326,37.399),(-122.1322,37.449)]\nBerwind                       Ave \t[(-121.7308,37.183),(-121.7303,37.181)]\nBesco                         Dr  \t[(-121.9764,37.32),(-121.9761,37.311)]\nBess                          Ave \t[(-121.765239,37.625),(-121.763602,37.625)]\nBest                          Ave \t[(-122.1622,37.284),(-122.1636,37.278)]\nBetlen                        Dr  \t[(-121.9407,37.026),(-121.9397,37.029)]\nBetlen                        Dr  \t[(-121.9507,37.018),(-121.950121,37.01678)]\nBettencourt                   St  \t[(-122.0479,37.34),(-122.0473,37.337)]\nBeverly                       Ave \t[(-122.1578,37.382),(-122.1572,37.375)]\nBeverly                       Ave \t[(-122.1586,37.395),(-122.1582,37.388)]\nBeverly                       St  \t[(-121.736023,37.85177),(-121.737956,37.84632)]\nBianca                        Way \t[(-121.7244,37.946),(-121.7257,37.945)]\nBianca                        Way \t[(-121.7281,37.939),(-121.729,37.937)]\nBiddle                        Ave \t[(-122.0317,37.425),(-122.0329,37.417)]\nBidwell                       Dr  \t[(-121.9748,37.448),(-121.9763,37.427)]\nBidwell                       Dr  \t[(-121.9763,37.422),(-121.9764,37.42)]\nBiehs                         Ct  \t[(-122.2289,37.386),(-122.2283,37.391)]\nBig Burn                      Road\t[(-122.0918,37.802),(-122.1091,37.788)]\nBinnacle Hill                     \t[(-122.2269,37.533),(-122.2274,37.523)]\nBirch                         St  \t[(-122.0269,37.368),(-122.0254,37.36)]\nBirch                         St  \t[(-122.1617,37.425),(-122.1614,37.417)]\nBirch                         St  \t[(-122.1653,37.478),(-122.1641,37.464)]\nBirch                         St  \t[(-122.1673,37.509),(-122.1661,37.492)]\nBirch Creek                   Dr  \t[(-121.8641,37.629),(-121.8642,37.64)]\nBirdsall                      Ave \t[(-122.1907,37.774),(-122.1907,37.781)]\nBirdsall                      Ave \t[(-122.191,37.789),(-122.1911,37.796)]\nBirkdale                      Dr  \t[(-122.0515,37.373),(-122.0521,37.368)]\nBirkdale                      Way \t[(-122.0406,37.17),(-122.0386,37.153)]\nBiscayne                      Ave \t[(-122.0734,37.278),(-122.0734,37.274)]\nBishop                        Ave \t[(-121.9911,37.635),(-121.9921,37.632)]\nBitterroot                    Ave \t[(-122.0091,37.276),(-122.0087,37.282)]\nBlack                         Ave \t[(-121.8816,37.721),(-121.8826,37.721)]\nBlack                         Ave \t[(-121.8909,37.704),(-121.892,37.698)]\nBlack                         Ave \t[(-121.8964,37.701),(-121.8967,37.706)]\nBlackbird                     Way \t[(-121.8867,37.801),(-121.8876,37.801),(-121.8882,37.801)]\nBlackstone                    Way \t[(-122.0393,37.724),(-122.0388,37.721)]\nBlackstone                    Way \t[(-122.0418,37.736),(-122.043,37.743)]\nBlacow                        Road\t[(-121.9909,37.33),(-121.9895,37.324)]\nBlacow                        Road\t[(-122.0061,37.409),(-122.0053,37.405)]\nBlacow                        Road\t[(-122.0179,37.469),(-122.0167,37.465)]\nBlair                         Ave \t[(-122.2225,37.27),(-122.2217,37.276)]\nBlair                         Ave \t[(-122.2364,37.263),(-122.2359,37.267)]\nBlaisdell                     Way \t[(-121.9858,37.816),(-121.9853,37.811)]\nBlake                         St  \t[(-122.2622,37.639),(-122.2599,37.642)]\nBlake                         St  \t[(-122.2864,37.605),(-122.2845,37.608)]\nBlanchard                     St  \t[(-121.97,37.382),(-121.9693,37.382)]\nBlanchard                     St  \t[(-121.9729,37.38),(-121.9709,37.383)]\nBlanding                      Ave \t[(-122.2313,37.68),(-122.2328,37.686)]\nBlewett                       St  \t[(-121.9732,37.373),(-121.9733,37.369)]\nBloomington                   Way \t[(-121.9448,37.205),(-121.9434,37.204)]\nBlossom                       Ct  \t[(-121.8766,37.395),(-121.876493,37.39469)]\nBlossom                       Ct  \t[(-122.0212,37.772),(-122.0213,37.769)]\nBlossom                       Way \t[(-122.1096,37.758),(-122.1087,37.764),(-122.1057,37.774)]\nBlue Coral                        \t[(-121.965392,37.69509),(-121.965261,37.70132)]\nBluebell                      Dr  \t[(-121.74,37.151),(-121.7411,37.161)]\nBluefield                     Lane\t[(-122.1024,37.584),(-122.1033,37.561)]\nBlythe                        St  \t[(-122.0704,37.745),(-122.0711,37.739)]\nBoar                          Cir \t[(-121.912463,37.08667),(-121.912335,37.09052)]\nBobwhite                      Ter \t[(-122.046797,37.80224),(-122.046672,37.80179)]\nBockman                       Road\t[(-122.1206,37.713),(-122.122,37.712)]\nBodie                         Ter \t[(-121.9253,37.884),(-121.9247,37.887)]\nBoeing                        St  \t[(-122.2122,37.34),(-122.2112,37.322)]\nBolero                        Ave \t[(-122.0904,37.297),(-122.0913,37.297)]\nBonar                         St  \t[(-122.2857,37.653),(-122.2856,37.642)]\nBond                          St  \t[(-122.2071,37.718),(-122.2067,37.716)]\nBond                          St  \t[(-122.2126,37.75),(-122.2116,37.739)]\nBonde                         Way \t[(-122.0077,37.59),(-122.0084,37.58)]\nBonita                        Ave \t[(-122.2355,37.306),(-122.235,37.296)]\nBonita                        Ave \t[(-122.2727,37.843),(-122.2725,37.835)]\nBonner                        Ave \t[(-121.9748,37.635),(-121.976,37.631)]\nBonnie                        St  \t[(-122.0332,37.381),(-122.0324,37.378)]\nBooker                        Way \t[(-122.0898,37.464),(-122.0902,37.454)]\nBoone                         Dr  \t[(-121.9825,37.329),(-121.9829,37.324)]\nBoone                         Dr  \t[(-122.0271,37.151),(-122.02815,37.14124)]\nBordeaux                      St  \t[(-121.7685,37.688),(-121.7687,37.664)]\nBoston                        Ave \t[(-122.2132,37.961),(-122.2129,37.969)]\nBoulevard                     Way \t[(-122.2427,37.18),(-122.2423,37.181)]\nBourbon                       Dr  \t[(-122.0869,37.194),(-122.0878,37.192)]\nBowditch                      St  \t[(-122.2559,37.665),(-122.2557,37.656)]\nBowie Common                      \t[(-122.042847,37.64532),(-122.042808,37.64484)]\nBoxwood                       Way \t[(-121.9329,37.094),(-121.9335,37.096)]\nBradrick                      Dr  \t[(-122.138,37.962),(-122.1361,37.963)]\nBradshire                     Road\t[(-122.0885,37.204),(-122.0883,37.2)]\nBramble                       Ct  \t[(-122.0944,37.941),(-122.0951,37.94)]\nBrann                         St  \t[(-122.1806,37.709),(-122.1785,37.705)]\nBrayton                       Ct  \t[(-122.0123,37.423),(-122.0114,37.418)]\nBreakwater                    Ave \t[(-122.1196,37.294),(-122.1203,37.282)]\nBrentford                     St  \t[(-122.1965,37.581),(-122.1964,37.564)]\nBreton                        Dr  \t[(-122.0435,37.463),(-122.043,37.458)]\nBrian                         St  \t[(-122.0686,37.348),(-122.0693,37.344)]\nBriar Cliff                   Road\t[(-122.1409,37.647),(-122.1382,37.658)]\nBriarwood                     Dr  \t[(-121.7663,37.915),(-121.7652,37.916)]\nBrickell                      Way \t[(-122.067,37.104),(-122.067,37.101)]\nBridge                        Ct  \t[(-122.0879,37.848),(-122.0874,37.844)]\nBridgepointe                  Dr  \t[(-122.0514,37.305),(-122.0509,37.299)]\nBridgeview                    Dr  \t[(-122.2112,37.133),(-122.21,37.138)]\nBridgewood                    Ter \t[(-122.0042,37.639),(-122.0047,37.632)]\nBrier                         St  \t[(-122.0806,37.959),(-122.0805,37.963)]\nBrighton                      Ave \t[(-122.2944,37.979),(-122.2934,37.979)]\nBrighton                      Dr  \t[(-121.9263,37.188),(-121.9277,37.189),(-121.9285,37.19)]\nBrighton                      Dr  \t[(-121.931,37.198),(-121.9312,37.197)]\nBriscoe                       Ter \t[(-121.948491,37.4184),(-121.948634,37.41645)]\nBristol                       Blvd\t[(-122.1674,37.353),(-122.1698,37.342)]\nBristolwood                   Road\t[(-121.9165,37.78),(-121.9164,37.787)]\nBroadmoor                     Blvd\t[(-122.147,37.397),(-122.1466,37.399)]\nBroadmoor                     Blvd\t[(-122.156,37.358),(-122.1546,37.364)]\nBroadmoor                     St  \t[(-121.7313,37.257),(-121.7313,37.263)]\nBroadmoor                     St  \t[(-121.7314,37.194),(-121.7314,37.199)]\nBroadmoor                     St  \t[(-121.7314,37.213),(-121.7314,37.221)]\nBroadmore                     Ave \t[(-122.095,37.522),(-122.0936,37.497)]\nBroadway                          \t[(-122.2212,37.5),(-122.2204,37.517)]\nBroadway                          \t[(-122.2372,37.631),(-122.236753,37.63675)]\nBroadway                          \t[(-122.2391,37.493),(-122.2386,37.495)]\nBroadway                          \t[(-122.2409,37.586),(-122.2395,37.601)]\nBroadway                          \t[(-122.243008,37.55961),(-122.2427,37.563)]\nBroadway                          \t[(-122.245,37.45),(-122.2443,37.46),(-122.2436,37.469)]\nBroadway                          \t[(-122.2457,37.528),(-122.2455,37.529)]\nBroadway                          \t[(-122.2472,37.418),(-122.2468,37.426)]\nBroadway                          \t[(-122.2539,37.316),(-122.2525,37.337)]\nBroadway                          \t[(-122.2598,37.222),(-122.2596,37.227)]\nBroadway                          \t[(-122.2632,37.167),(-122.2626,37.177),(-122.2617,37.19)]\nBroadway                          \t[(-122.2719,37.028),(-122.2714,37.036)]\nBroadway                          \t[(-122.2727,37.015),(-122.2723,37.021)]\nBroadway                      Ter \t[(-122.2429,37.393),(-122.2413,37.397)]\nBrookdale                     Ave \t[(-122.2043,37.834),(-122.2032,37.824)]\nBrookdale                     Ave \t[(-122.2092,37.878),(-122.208568,37.87208)]\nBrookdale                     Ave \t[(-122.2095,37.888),(-122.2088,37.882)]\nBrookdale                     Blvd\t[(-122.0915,37.164),(-122.0912,37.166)]\nBrookdale                     Blvd\t[(-122.0965,37.123),(-122.0958,37.133)]\nBrooklyn                      Ave \t[(-122.2425,37.029),(-122.2416,37.026)]\nBrooklyn                      Ave \t[(-122.2455,37.04),(-122.2445,37.036)]\nBrooklyn                      Ave \t[(-122.2502,37.055),(-122.2495,37.053)]\nBrookside                     Ct  \t[(-121.9218,37.902),(-121.9213,37.908)]\nBrowning                      Ct  \t[(-122.037289,37.766),(-122.038366,37.76228)]\nBrowning                      St  \t[(-122.2874,37.686),(-122.2872,37.669)]\nBruce                         Ct  \t[(-122.0595,37.084),(-122.0588,37.076)]\nBruce                         Dr  \t[(-121.9442,37.309),(-121.945,37.312)]\nBrunetti                      Lane\t[(-122.136,37.91),(-122.1351,37.906)]\nBruns                         Road\t[(-121.603992,37.95307),(-121.6046,37.049)]\nBrush                         St  \t[(-122.2788,37.065),(-122.2784,37.07)]\nBrush                         St  \t[(-122.283,37.989),(-122.2827,37.994)]\nBrush Ramp                    St  \t[(-122.2758,37.107),(-122.27511,37.11304),(-122.275,37.114)]\nBryant                        St  \t[(-121.9216,37.321),(-121.9213,37.316)]\nBryce Canyon                  Ct  \t[(-121.9008,37.78),(-121.9017,37.78)]\nBuchanan                      St  \t[(-122.3022,37.877),(-122.3014,37.878)]\nBuckeye                       Pl  \t[(-122.0448,37.336),(-122.0452,37.332)]\nBuckingham                    Blvd\t[(-122.2231,37.59),(-122.2214,37.606)]\nBuckingham                    Way \t[(-122.0647,37.214),(-122.0653,37.214)]\nBuckingham                    Way \t[(-122.0689,37.208),(-122.0693,37.207)]\nBuckner                       Ter \t[(-122.060105,37.62504),(-122.059743,37.62326)]\nBucks Lake                    St  \t[(-122.0559,37.882),(-122.0546,37.874)]\nBuckskin                      Road\t[(-121.7421,37.213),(-121.7421,37.22)]\nBudwing                       Ter \t[(-121.9516,37.136),(-121.951826,37.13555)]\nBuena                         Ave \t[(-122.2786,37.792),(-122.2773,37.797)]\nBuena                         Ave \t[(-122.2813,37.781),(-122.2807,37.782)]\nBuena Vista                   Ave \t[(-122.2301,37.437),(-122.2295,37.424)]\nBuena Vista                   Ave \t[(-122.2337,37.651),(-122.2328,37.645)]\nBuena Vista                   Ave \t[(-122.2359,37.47),(-122.2353,37.468)]\nBuena Vista                   Ave \t[(-122.251,37.735),(-122.2499,37.73)]\nBuena Vista                   Ave \t[(-122.2687,37.774),(-122.2673,37.773)]\nBuena Vista                   Ave \t[(-122.271,37.774),(-122.2698,37.774)]\nBuena Vista                   Way \t[(-122.2609,37.805),(-122.2597,37.809)]\nBullard                       Dr  \t[(-122.2157,37.297),(-122.2138,37.276)]\nBullard                       St  \t[(-121.9694,37.355),(-121.97,37.349)]\nBurdeck                       Dr  \t[(-122.1939,37.099),(-122.1932,37.091)]\nBurdette                      St  \t[(-121.9789,37.609),(-121.9795,37.611)]\nBurdette                      St  \t[(-121.98,37.62),(-121.9801,37.626)]\nBurdick                       St  \t[(-122.0273,37.421),(-122.0266,37.418)]\nBurk                          St  \t[(-122.2501,37.101),(-122.2502,37.106)]\nBurkhart                      Ave \t[(-122.1422,37.856),(-122.1431,37.859)]\nBurlington                    St  \t[(-122.2046,37.057),(-122.2042,37.058)]\nBurnett                       St  \t[(-122.2823,37.539),(-122.281,37.541)]\nBurnham                       Way \t[(-121.9242,37.176),(-121.9243,37.183)]\nBurnside                      Ct  \t[(-122.0063,37.345),(-122.0069,37.338)]\nBusby                         Ave \t[(-122.1545,37.79),(-122.154983,37.78916)]\nButte                         Ct  \t[(-121.783,37.938),(-121.783,37.934)]\nButterfield                   Dr  \t[(-122.0838,37.002),(-122.0834,37.987)]\nC                             St  \t[(-122.0218,37.05),(-122.0224,37.045)]\nC                             St  \t[(-122.0737,37.767),(-122.0722,37.778)]\nC                             St  \t[(-122.0773,37.742),(-122.0756,37.754)]\nC                             St  \t[(-122.0906,37.681),(-122.0896,37.684)]\nC                             St  \t[(-122.1737,37.418),(-122.1723,37.399),(-122.1716,37.393)]\nC                             St  \t[(-122.1768,37.46),(-122.1749,37.435)]\nCabello                       St  \t[(-122.078,37.811),(-122.0783,37.807)]\nCabernet                      Ct  \t[(-121.8636,37.593),(-121.8641,37.582)]\nCabot                         Blvd\t[(-122.1334,37.412),(-122.1326,37.399)]\nCabot                         Ct  \t[(-121.9848,37.583),(-121.9833,37.583)]\nCabral                        Dr  \t[(-122.0294,37.569),(-122.0288,37.563)]\nCabral                        Dr  \t[(-122.0348,37.648),(-122.035,37.643)]\nCabrillo                      Dr  \t[(-122.0153,37.515),(-122.0144,37.511)]\nCabrillo                      Dr  \t[(-122.0325,37.637),(-122.0318,37.633)]\nCabrillo                      Dr  \t[(-122.091,37.218),(-122.0932,37.222)]\nCadiz                         Dr  \t[(-122.0239,37.655),(-122.0235,37.653)]\nCalaroga                      Ave \t[(-122.0886,37.297),(-122.0885,37.276)]\nCalaroga                      Ave \t[(-122.0892,37.374),(-122.0888,37.361)]\nCalaroga                      Ave \t[(-122.09,37.386),(-122.0897,37.38)]\nCalaroga                      Ave \t[(-122.101,37.493),(-122.1006,37.487)]\nCalaveras                     Ave \t[(-121.9924,37.364),(-121.9927,37.359)]\nCalaveras                     Ave \t[(-122.1864,37.845),(-122.1854,37.841)]\nCalaveras                     Road\t[(-121.8389,37.143),(-121.8338,37.128)]\nCalaveras                     Road\t[(-121.8476,37.209),(-121.8431,37.178)]\nCalaveras Creek                   \t[(-121.8203,37.035),(-121.8207,37.931)]\nCalaveras Creek                   \t[(-121.8531,37.337),(-121.8517,37.316)]\nCalaveras Creek                   \t[(-121.8637,37.611),(-121.8628,37.587)]\nCalcott                       Ct  \t[(-122.0306,37.822),(-122.0311,37.817)]\nCaldecott                     Lane\t[(-122.2312,37.512),(-122.2261,37.491)]\nCalhoun                       St  \t[(-122.0542,37.43),(-122.0521,37.428)]\nCalhoun                       St  \t[(-122.2409,37.553),(-122.2405,37.551)]\nCaliban                       Dr  \t[(-122.0553,37.765),(-122.053955,37.75806)]\nCaliente                      Dr  \t[(-122.1393,37.993),(-122.1409,37.99),(-122.1417,37.993)]\nCalifornia                    St  \t[(-122.1952,37.942),(-122.1946,37.935)]\nCalifornia                    St  \t[(-122.2032,37.005),(-122.2016,37.996)]\nCalifornia                    St  \t[(-122.2767,37.563),(-122.2767,37.554)]\nCalifornia                    St  \t[(-122.2791,37.698),(-122.2787,37.681)]\nCalifornia                    St  \t[(-122.2793,37.743),(-122.2794,37.733)]\nCalifornia                    St  \t[(-122.2795,37.761),(-122.2795,37.751)]\nCalifornia Aqueduct               \t[(-121.587742,37.65201),(-121.600239,37.70939)]\nCalifornia Aqueduct               \t[(-121.622944,37.98443),(-121.622669,37.98611)]\nCall                          Ave \t[(-122.0435,37.56),(-122.0436,37.566)]\nCalle Alegre                      \t[(-121.895178,37.71975),(-121.8946,37.725)]\nCalle Altamira                    \t[(-121.8994,37.669),(-121.8988,37.656)]\nCalle de la Mesa                  \t[(-121.905106,37.71532),(-121.906643,37.69977)]\nCalle de Monte                    \t[(-122.2452,37.344),(-122.2456,37.34)]\nCalle Morelia                     \t[(-121.9003,37.684),(-121.9006,37.691)]\nCalmar                        Ave \t[(-122.2384,37.105),(-122.2381,37.113)]\nCamanoe                       Lane\t[(-122.2339,37.33),(-122.2334,37.326)]\nCambio                        Ct  \t[(-122.0217,37.558),(-122.0226,37.552)]\nCambridge                     Ave \t[(-122.1616,37.335),(-122.1575,37.353)]\nCambridge                     Way \t[(-122.2442,37.231),(-122.2419,37.244)]\nCamden                        St  \t[(-121.9932,37.571),(-121.992,37.564)]\nCamden                        St  \t[(-121.9956,37.603),(-121.9955,37.598)]\nCamden                        St  \t[(-122.1823,37.735),(-122.1817,37.73)]\nCamelford                     Pl  \t[(-122.1933,37.211),(-122.1919,37.216)]\nCamelia                       Dr  \t[(-121.7852,37.695),(-121.7852,37.686)]\nCamelia                       St  \t[(-122.2928,37.792),(-122.2916,37.792)]\nCamero                        Pl  \t[(-121.9461,37.463),(-121.9453,37.454)]\nCamero                        Way \t[(-121.9481,37.459),(-121.9488,37.456)]\nCameron                       Ave \t[(-121.86732,37.8431),(-121.865836,37.84371)]\nCameron                       Ave \t[(-122.1316,37.502),(-122.1327,37.481)]\nCamino del Valle                  \t[(-122.2431,37.343),(-122.2437,37.334)]\nCamino Santa Barbara              \t[(-121.9314,37.446),(-121.9303,37.436)]\nCamino Segura                     \t[(-121.900094,37.71647),(-121.9002,37.726)]\nCampbell                      St  \t[(-122.2941,37.123),(-122.2936,37.129)]\nCampbell                      St  \t[(-122.2985,37.066),(-122.2981,37.077)]\nCampus                        Dr  \t[(-122.0578,37.665),(-122.0545,37.66)]\nCampus                        Dr  \t[(-122.1626,37.858),(-122.1611,37.843)]\nCampus                        Dr  \t[(-122.1704,37.905),(-122.1678,37.868),(-122.1671,37.865)]\nCanary                        Ct  \t[(-122.019,37.856),(-122.0192,37.85)]\nCanfield                      Dr  \t[(-121.9952,37.488),(-121.9955,37.482)]\nCanon                         Ave \t[(-122.21715,37.01951),(-122.2151,37.053)]\nCanterbury                    Lane\t[(-121.9277,37.141),(-121.9276,37.149)]\nCanterbury                    St  \t[(-121.995,37.573),(-121.9948,37.57)]\nCanyon Heights                Dr  \t[(-121.9431,37.568),(-121.9433,37.571)]\nCanyon Heights                Dr  \t[(-121.9513,37.618),(-121.9528,37.627)]\nCanyon Heights                Dr  \t[(-121.9595,37.76),(-121.9596,37.753)]\nCape Cod                      Dr  \t[(-122.1351,37.928),(-122.1331,37.928)]\nCapella                       Lane\t[(-122.2345,37.322),(-122.2352,37.326)]\nCapitan                       Dr  \t[(-121.84488,37.65695),(-121.84458,37.65195)]\nCapricorn                     Ave \t[(-122.2176,37.404),(-122.2164,37.384)]\nCapulet                       Cir \t[(-122.057612,37.69268),(-122.0578,37.7)]\nCardinal                      Dr  \t[(-121.7865,37.805),(-121.7858,37.805)]\nCaribbean Com                     \t[(-122.0361,37.73),(-122.0366,37.724)]\nCarleton                      St  \t[(-122.2641,37.617),(-122.2619,37.62)]\nCarlos Bee                    Blvd\t[(-122.065049,37.59928),(-122.0639,37.596)]\nCarlston                      Ave \t[(-122.23,37.132),(-122.2307,37.141)]\nCarmel                        Ave \t[(-122.2891,37.979),(-122.2893,37.968),(-122.2893,37.95)]\nCarmel                        Dr  \t[(-122.0965,37.135),(-122.0958,37.133)]\nCarmel                        Way \t[(-122.1394,37.979),(-122.1386,37.98)]\nCarmel                        Way \t[(-122.1419,37.98),(-122.1411,37.98)]\nCarmen                        St  \t[(-121.9501,37.38),(-121.9484,37.369)]\nCarnation                     Way \t[(-121.9975,37.775),(-121.996,37.773)]\nCarol                         Ave \t[(-121.9537,37.283),(-121.955,37.282)]\nCarol                         Ave \t[(-121.9574,37.279),(-121.959,37.277)]\nCarol                         Ave \t[(-121.9657,37.27),(-121.9679,37.268)]\nCaroline                      St  \t[(-122.2676,37.695),(-122.2676,37.706)]\nCarolyn                       St  \t[(-122.1108,37.038),(-122.1091,37.028)]\nCarpentier                    St  \t[(-122.1567,37.203),(-122.1561,37.194)]\nCarriage Circle Com               \t[(-122.0128,37.433),(-122.0129,37.431)]\nCarrol                        Road\t[(-121.659839,37.19494),(-121.659626,37.19326)]\nCarson                        St  \t[(-122.1846,37.9),(-122.1843,37.901)]\nCarver                        Lane\t[(-121.877,37.057),(-121.8811,37.068)]\nCascade                       Road\t[(-122.1832,37.241),(-122.1808,37.216)]\nCascade                       St  \t[(-122.0839,37.416),(-122.0831,37.416)]\nCascade                       St  \t[(-122.0894,37.448),(-122.0887,37.431)]\nCassiopia                     St  \t[(-121.735979,37.18311),(-121.735979,37.19069)]\nCastilian                     Road\t[(-121.9447,37.135),(-121.9445,37.14)]\nCastille                      Lane\t[(-122.0826,37.811),(-122.082655,37.8124)]\nCastillejo                    Road\t[(-121.9397,37.313),(-121.9396,37.304)]\nCastle Park                   Way \t[(-122.1936,37.15),(-122.1933,37.151)]\nCastlewood                    Dr  \t[(-121.8895,37.376),(-121.8902,37.373)]\nCastro                        St  \t[(-122.1629,37.144),(-122.1636,37.141)]\nCastro                        St  \t[(-122.2739,37.114),(-122.2735,37.121)]\nCastro                        St  \t[(-122.2749,37.1),(-122.2746,37.103)]\nCastro                        St  \t[(-122.2757,37.084),(-122.2753,37.091)]\nCastro                        St  \t[(-122.2782,37.045),(-122.2778,37.052)]\nCastro                        St  \t[(-122.2787,37.03),(-122.2785,37.038)]\nCastro Valley                 Blvd\t[(-122.0478,37.966),(-122.047,37.969)]\nCastro Valley                 Blvd\t[(-122.049131,37.96068),(-122.048358,37.96377)]\nCastro Valley                 Blvd\t[(-122.0604,37.92),(-122.0585,37.925)]\nCastro Valley                 Blvd\t[(-122.081,37.954),(-122.0801,37.955)]\nCastro Valley                 Blvd\t[(-122.086,37.939),(-122.0853,37.942)]\nCatalina                      Ave \t[(-122.2458,37.329),(-122.246102,37.33109)]\nCatalina                      Dr  \t[(-121.7837,37.628),(-121.7834,37.628)]\nCatalina                      Dr  \t[(-121.7892,37.66),(-121.7896,37.649)]\nCatalpa                       Way \t[(-122.0852,37.218),(-122.088,37.207)]\nCato                          Ct  \t[(-122.0691,37.944),(-122.0694,37.938)]\nCatron                        Dr  \t[(-122.1716,37.27),(-122.1711,37.275)]\nCavalier                      Lane\t[(-121.9361,37.175),(-121.9363,37.189)]\nCavendish                     Dr  \t[(-122.0477,37.158),(-122.0475,37.151)]\nCavour                        St  \t[(-122.2555,37.375),(-122.2561,37.379)]\nCayuga                        Pl  \t[(-121.9205,37.023),(-121.9218,37.02)]\nCayuga                        Way \t[(-121.9233,37.013),(-121.9239,37.008)]\nCedar                         Blvd\t[(-122.0214,37.402),(-122.0193,37.391)]\nCedar                         Blvd\t[(-122.0282,37.446),(-122.0265,37.43)]\nCedar                         Dr  \t[(-121.7964,37.859),(-121.7941,37.858),(-121.7931,37.858)]\nCedar                         Lane\t[(-121.9173,37.08),(-121.9183,37.083),(-121.9196,37.089),(-121.92,37.098)]\nCedar                         St  \t[(-121.9188,37.277),(-121.92,37.276)]\nCedar                         St  \t[(-122.260055,37.79558),(-122.2582,37.798)]\nCedar                         St  \t[(-122.2841,37.764),(-122.2818,37.766)]\nCedar                         St  \t[(-122.2864,37.76),(-122.2858,37.762)]\nCedar                         St  \t[(-122.2913,37.755),(-122.2905,37.756)]\nCedar                         St  \t[(-122.2945,37.75),(-122.2934,37.753)]\nCedar                         St  \t[(-122.3011,37.737),(-122.2999,37.739)]\nCedar                         St  \t[(-122.3043,37.729),(-122.3032,37.732)]\nCedar                         St  \t[(-122.3045,37.078),(-122.3041,37.087)]\nCedarwood                     Lane\t[(-121.8746,37.706),(-121.8746,37.721)]\nCelia                         St  \t[(-122.0611,37.3),(-122.0616,37.299)]\nCelia                         St  \t[(-122.0623,37.297),(-122.0631,37.296)]\nCenter                        St  \t[(-122.0598,37.052),(-122.0593,37.046)]\nCenter                        St  \t[(-122.0599,37.111),(-122.06,37.106)]\nCenter                        St  \t[(-122.0606,37.968),(-122.0608,37.958)]\nCenter                        St  \t[(-122.2674,37.704),(-122.267,37.704)]\nCentral                       Ave \t[(-122.0064,37.524),(-122.0079,37.505)]\nCentral                       Ave \t[(-122.0118,37.455),(-122.0129,37.443)]\nCentral                       Ave \t[(-122.0148,37.415),(-122.0157,37.404)]\nCentral                       Ave \t[(-122.0302,37.226),(-122.0325,37.196)]\nCentral                       Ave \t[(-122.0487,37.144),(-122.0452,37.158)]\nCentral                       Ave \t[(-122.2309,37.579),(-122.2276,37.557)]\nCentral                       Ave \t[(-122.2343,37.602),(-122.2331,37.595)]\nCentral                       Ave \t[(-122.27,37.715),(-122.2685,37.714)]\nCentral                       Ave \t[(-122.2787,37.718),(-122.2777,37.717),(-122.2762,37.717)]\nCentral                       Ave \t[(-122.2906,37.769),(-122.2905,37.756)]\nCentral                       Blvd\t[(-122.0643,37.553),(-122.0633,37.552),(-122.0622,37.545)]\nCentral                       Blvd\t[(-122.0703,37.582),(-122.0697,37.586)]\nCerrito                       St  \t[(-122.3023,37.93),(-122.3018,37.918)]\nCerro Vista                   Pl  \t[(-121.73402,37.74008),(-121.735461,37.73955)]\nChabolyn                      Ter \t[(-122.242959,37.5192),(-122.2429,37.519)]\nChabot                        Ct  \t[(-122.2432,37.489),(-122.2439,37.5)]\nChabot Canal                      \t[(-121.9027,37.804),(-121.9027,37.812)]\nChabot Canal                      \t[(-121.9036,37.013),(-121.9044,37.017)]\nChabot Canal                      \t[(-121.9044,37.017),(-121.9037,37.02)]\nChabot Crest                      \t[(-122.2425,37.504),(-122.2427,37.514)]\nChambers                      Dr  \t[(-122.2004,37.352),(-122.1972,37.368)]\nChambers                      Lane\t[(-122.2001,37.359),(-122.1975,37.371)]\nChampagne                     Pl  \t[(-121.950378,37.11376),(-121.949579,37.11174)]\nChampion                      St  \t[(-122.214,37.991),(-122.2147,37.002)]\nChampion                      St  \t[(-122.2146,37.977),(-122.2145,37.982)]\nChance                        St  \t[(-122.0536,37.259),(-122.0534,37.256)]\nChandler                      Road\t[(-122.10851,37.48139),(-122.108787,37.48677)]\nChannel                       St  \t[(-122.1372,37.71),(-122.1369,37.706)]\nChanning                      Way \t[(-122.2453,37.425),(-122.2466,37.408)]\nChanning                      Way \t[(-122.2638,37.664),(-122.2629,37.665),(-122.2606,37.669)]\nChanning                      Way \t[(-122.2695,37.657),(-122.2669,37.66)]\nChanning                      Way \t[(-122.2727,37.652),(-122.2717,37.653)]\nChanning                      Way \t[(-122.2806,37.641),(-122.2795,37.641)]\nChanning                      Way \t[(-122.2842,37.636),(-122.2835,37.637)]\nChanning                      Way \t[(-122.292641,37.62357),(-122.2925,37.624)]\nChapel                        Ct  \t[(-122.1508,37.897),(-122.1508,37.894)]\nChapman                       Dr  \t[(-122.0421,37.504),(-122.0414,37.498)]\nChardonnay                    Dr  \t[(-121.846993,37.64201),(-121.846448,37.64146)]\nCharles                       St  \t[(-122.0255,37.505),(-122.0252,37.499)]\nCharlotte                     Way \t[(-121.7247,37.839),(-121.7246,37.836)]\nCharlotte                     Way \t[(-121.7261,37.856),(-121.7254,37.851)]\nCharlotte                     Way \t[(-121.733871,37.88044),(-121.734295,37.88051)]\nCharter Oaks                  Dr  \t[(-122.0574,37.212),(-122.0568,37.22)]\nChateau                       Way \t[(-121.7627,37.727),(-121.7627,37.723)]\nChateau Park                  Ct  \t[(-121.9658,37.196),(-121.966,37.193)]\nChatsworth                    St  \t[(-121.7766,37.502),(-121.7766,37.496)]\nChaucer                       Dr  \t[(-122.0339,37.813),(-122.0342,37.812)]\nChaucer                       Dr  \t[(-122.0357,37.794),(-122.0362,37.788)]\nChelsea                       Dr  \t[(-122.03044,37.5228),(-122.0303,37.522)]\nChelsea                       Way \t[(-122.068,37.224),(-122.0686,37.223)]\nChelton                       Dr  \t[(-122.189,37.293),(-122.1887,37.304)]\nChemult Com                       \t[(-121.9254,37.878),(-121.9255,37.881)]\nCherry                        Lane\t[(-121.966799,37.63085),(-121.966874,37.63373)]\nCherry                        St  \t[(-122.0266,37.297),(-122.0258,37.294)]\nCherry                        St  \t[(-122.040954,37.37918),(-122.04,37.369)]\nCherry                        St  \t[(-122.0429,37.396),(-122.0424,37.392)]\nCherry                        St  \t[(-122.0437,37.42),(-122.0434,37.413)]\nCherry                        St  \t[(-122.1511,37.161),(-122.1503,37.149)]\nCherry                        St  \t[(-122.1671,37.488),(-122.1661,37.474)]\nCherry                        St  \t[(-122.1691,37.512),(-122.1684,37.502)]\nCherrywood                    Dr  \t[(-122.023,37.838),(-122.0237,37.82)]\nCheryl                        Cir \t[(-121.8979,37.8),(-121.8957,37.794)]\nCheryl Ann                    Cir \t[(-122.0754,37.352),(-122.076,37.358)]\nChester                       St  \t[(-122.0791,37.955),(-122.079,37.932)]\nChester                       St  \t[(-122.2949,37.07),(-122.2946,37.078)]\nChestnut                      St  \t[(-122.2482,37.733),(-122.2475,37.742)]\nChestnut                      St  \t[(-122.2853,37.069),(-122.2848,37.084)]\nChestnut                      St  \t[(-122.2873,37.722),(-122.2873,37.711)]\nChetwood                      Ave \t[(-121.9591,37.232),(-121.960057,37.23087)]\nChetwood                      St  \t[(-122.2521,37.167),(-122.2513,37.169)]\nCheyenne River Com                \t[(-122.0521,37.779),(-122.0524,37.775)]\nChiltern                      Dr  \t[(-121.9414,37.433),(-121.9412,37.424)]\nChiltern                      Dr  \t[(-121.9447,37.457),(-121.9442,37.454)]\nChimney Rock                      \t[(-122.13,37.701),(-122.12905,37.70195)]\nChippendale                   Dr  \t[(-122.0665,37.843),(-122.068,37.828)]\nChisholm                      Ct  \t[(-122.0773,37.42),(-122.077,37.409)]\nChoctaw                       Dr  \t[(-121.9179,37.87),(-121.9172,37.876)]\nChris Commons                     \t[(-121.73647,37.89437),(-121.736359,37.88665)]\nChrisholm                     Pl  \t[(-121.9599,37.726),(-121.9592,37.732)]\nChristensen                   Ct  \t[(-122.0863,37.074),(-122.0863,37.065)]\nChristensen                   Lane\t[(-122.085026,37.06463),(-122.0844,37.064)]\nChristensen                   Road\t[(-121.625309,37.79774),(-121.621265,37.83993)]\nChristina                     Ct  \t[(-121.8654,37.629),(-121.8651,37.616)]\nChristine                     Dr  \t[(-122.0759,37.739),(-122.0756,37.734)]\nChristine                     St  \t[(-122.0364,37.385),(-122.0357,37.379)]\nChristy                       St  \t[(-121.9662,37.022),(-121.9658,37.019)]\nChurch                        St  \t[(-122.179,37.675),(-122.1785,37.678)]\nCindy                         Lane\t[(-121.7346,37.8244),(-121.734673,37.83042)]\nCircle                        Way \t[(-121.9418,37.013),(-121.9422,37.02)]\nCitron                        Way \t[(-122.1008,37.461),(-122.1017,37.46)]\nCivic Terrace                 Ave \t[(-122.0251,37.389),(-122.0263,37.374)]\nClara                         St  \t[(-122.1855,37.377),(-122.1851,37.381)]\nClara                         St  \t[(-122.187,37.339),(-122.1865,37.357)]\nClaremont                     Ave \t[(-122.2429,37.607),(-122.2421,37.609)]\nClaremont                     Ave \t[(-122.243294,37.59318),(-122.2434,37.59)]\nClaremont                     Ave \t[(-122.246,37.565),(-122.2461,37.562)]\nClaremont                     Ave \t[(-122.2508,37.509),(-122.2505,37.514)]\nClaremont                     Ave \t[(-122.2591,37.408),(-122.2586,37.413)]\nClaremont                     Ave \t[(-122.2612,37.386),(-122.2604,37.393)]\nClaremont                     Pl  \t[(-122.0542,37.995),(-122.0542,37.008)]\nClarendon                     Cres\t[(-122.2278,37.126),(-122.2266,37.119)]\nClaret                        Road\t[(-121.757012,37.72568),(-121.757266,37.71391)]\nClarewood                     Lane\t[(-122.2343,37.393),(-122.232365,37.38802)]\nClarke                        Lane\t[(-122.236271,37.29202),(-122.236552,37.28906)]\nClarke                        St  \t[(-122.1568,37.225),(-122.1562,37.217)]\nClausen                       Ct  \t[(-122.040846,37.6758),(-122.040845,37.66913)]\nClawiter                      Road\t[(-122.1186,37.321),(-122.1186,37.308)]\nClawiter                      Road\t[(-122.1187,37.442),(-122.1188,37.435)]\nClay                          St  \t[(-122.2733,37.051),(-122.2729,37.059)]\nClay                          St  \t[(-122.2755,37.017),(-122.2751,37.024)]\nClement                       Ave \t[(-122.2525,37.765),(-122.252147,37.76429)]\nCleveland                     Ave \t[(-122.3061,37.895),(-122.3058,37.889)]\nCleveland                     St  \t[(-122.2435,37.048),(-122.2418,37.042)]\nClifton                       St  \t[(-122.2526,37.383),(-122.2533,37.388)]\nClipper                       Dr  \t[(-122.2438,37.42),(-122.2437,37.406)]\nClover                        St  \t[(-122.023,37.805),(-122.0217,37.801)]\nClubhouse                     Dr  \t[(-121.8179,37.971),(-121.8181,37.972)]\nClubhouse                     Dr  \t[(-122.121,37.67),(-122.1215,37.671)]\nClubhouse                     Dr  \t[(-122.1227,37.671),(-122.1234,37.67)]\nCluny                         Pl  \t[(-122.0438,37.432),(-122.0433,37.432)]\nCoach                         Dr  \t[(-122.1383,37.735),(-122.1355,37.706)]\nCobblestone                   Dr  \t[(-122.00122,37.8492),(-122.000944,37.84795)]\nCoco Palm                     Dr  \t[(-121.9905,37.311),(-121.991,37.305)]\nCodornices Creek                  \t[(-122.2986,37.83),(-122.2994,37.828)]\nCodornices Creek                  \t[(-122.3069,37.818),(-122.3074,37.817)]\nCody                          Ct  \t[(-121.9853,37.324),(-121.986,37.316)]\nCoit                          Ave \t[(-121.9244,37.346),(-121.9244,37.338)]\nCoit                          Ave \t[(-121.9245,37.352),(-121.924594,37.362)]\nColby                         St  \t[(-122.1282,37.959),(-122.1279,37.959)]\nCold Water                    Dr  \t[(-122.0403,37.068),(-122.041,37.069)]\nCole                          Pl  \t[(-122.057,37.343),(-122.0564,37.334)]\nCole                          St  \t[(-122.1974,37.724),(-122.1975,37.716)]\nCole                          St  \t[(-122.1975,37.749),(-122.1962,37.76)]\nColeen                        St  \t[(-121.79,37.763),(-121.7892,37.744)]\nColeport Landing                  \t[(-122.2374,37.426),(-122.2378,37.42)]\nColeport Landing                  \t[(-122.237889,37.41293),(-122.2379,37.412)]\nColette                       St  \t[(-122.063,37.46),(-122.0623,37.451)]\nColette                       St  \t[(-122.06565,37.4825),(-122.0646,37.479)]\nColgate                       Dr  \t[(-122.0271,37.94),(-122.0249,37.933)]\nColgate                       St  \t[(-122.1545,37.019),(-122.1538,37.014)]\nColima                        Ct  \t[(-122.0251,37.664),(-122.0245,37.661)]\nColiseum                      Way \t[(-122.19759,37.4533),(-122.1948,37.444)]\nColiseum                      Way \t[(-122.2001,37.47),(-122.1978,37.516)]\nColiseum                      Way \t[(-122.2113,37.626),(-122.2085,37.592),(-122.2063,37.568)]\nCollege                       Ave \t[(-121.7675,37.745),(-121.7658,37.745)]\nCollege                       Ave \t[(-121.7693,37.744),(-121.769,37.744)]\nCollege                       Ave \t[(-122.2506,37.367),(-122.2508,37.374)]\nCollege                       Ave \t[(-122.2511,37.421),(-122.2512,37.429)]\nCollege                       Ave \t[(-122.2516,37.474),(-122.2518,37.483)]\nCollier                       Dr  \t[(-122.1409,37.299),(-122.14,37.302)]\nColonial Loma Verde           Dr  \t[(-122.1184,37.849),(-122.117278,37.85528)]\nColony                        Ct  \t[(-122.061894,37.27773),(-122.061805,37.27497)]\nColorados                     Dr  \t[(-122.1757,37.281),(-122.1748,37.301)]\nColumbia                      Dr  \t[(-122.0574,37.168),(-122.0568,37.183)]\nColumbia                      Dr  \t[(-122.057463,37.28811),(-122.057463,37.28593)]\nColumbian                     Dr  \t[(-122.1635,37.727),(-122.1627,37.734)]\nColumbine                     Pl  \t[(-122.0122,37.321),(-122.013,37.33)]\nColumbus                      Ave \t[(-121.776,37.679),(-121.7753,37.682)]\nColumbus                      Ave \t[(-121.7786,37.68),(-121.7777,37.681)]\nColusa                        Ave \t[(-122.2786,37.835),(-122.2784,37.831)]\nColusa                        Ave \t[(-122.2794,37.922),(-122.2793,37.916)]\nColusa                        Ave \t[(-122.2812,37.943),(-122.2805,37.939)]\nColusa                        Ave \t[(-122.2847,37.973),(-122.2846,37.967)]\nColville                      Pl  \t[(-122.0419,37.709),(-122.0402,37.702)]\nConcannon                     Blvd\t[(-121.7804,37.608),(-121.779,37.608)]\nConcord                       St  \t[(-121.8551,37.602),(-121.856,37.593)]\nConstitution                  Dr  \t[(-121.816179,37.01178),(-121.816179,37.01023)]\nContra Costa                  Ave \t[(-122.0153,37.551),(-122.0141,37.545)]\nContra Costa                  Ave \t[(-122.2754,37.944),(-122.2754,37.918)]\nContreras                     Pl  \t[(-122.0386,37.553),(-122.0387,37.55)]\nConway                        Ter \t[(-122.044884,37.64441),(-122.04466,37.64514)]\nCoolidge                      Ave \t[(-122.2007,37.058),(-122.1992,37.06)]\nCoolidge                      Ave \t[(-122.2104,37.957),(-122.2099,37.962)]\nCoolidge                      Ave \t[(-122.2171,37.872),(-122.2169,37.875)]\nCoral                         Road\t[(-122.1907,37.34),(-122.1902,37.334)]\nCore                          Ter \t[(-122.047353,37.65391),(-122.047303,37.65185)]\nCorey                         Way \t[(-122.0699,37.054),(-122.0698,37.046)]\nCormorant                     Ter \t[(-122.045468,37.80753),(-122.044829,37.80392)]\nCornell                       Ave \t[(-122.2956,37.925),(-122.2949,37.906),(-122.2939,37.875)]\nCorning                       Ct  \t[(-122.0689,37.688),(-122.0685,37.68)]\nCornish                       Dr  \t[(-122.0228,37.75),(-122.0225,37.754)]\nCoronado                      Lane\t[(-121.9026,37.843),(-121.9028,37.843)]\nCorral Hollow Creek               \t[(-121.590572,37.01116),(-121.599735,37.10676)]\nCorriea                       Way \t[(-121.9501,37.402),(-121.9505,37.398)]\nCorte de Flores                   \t[(-121.908126,37.71073),(-121.90924,37.71391)]\nCorte Eulalia                     \t[(-122.1142,37.78),(-122.1154,37.776)]\nCorte Munras                      \t[(-121.900576,37.74452),(-121.900804,37.74889)]\nCorte Vera Cruz                   \t[(-121.9036,37.639),(-121.9038,37.642)]\nCorte Yolanda                     \t[(-122.1426,37.753),(-122.1423,37.749)]\nCortland                      Way \t[(-121.7892,37.934),(-121.7885,37.939)]\nCorvair                       St  \t[(-122.2126,37.364),(-122.2132,37.36)]\nCorvallis                     St  \t[(-122.1527,37.974),(-122.1521,37.97)]\nCosgrave                      Ave \t[(-122.1621,37.62),(-122.1616,37.626)]\nCosmic                        Way \t[(-121.9659,37.423),(-121.9666,37.414)]\nCottage                       St  \t[(-122.2593,37.713),(-122.258931,37.71803)]\nCotter                        Way \t[(-122.0904,37.818),(-122.0882,37.829)]\nCotton                        Ct  \t[(-122.0462,37.123),(-122.0469,37.117)]\nCottonwood                    St  \t[(-121.9116,37.732),(-121.9115,37.725)]\nCottonwood                    St  \t[(-121.912,37.74),(-121.9118,37.735)]\nCountry                       Dr  \t[(-121.9903,37.52),(-121.9916,37.506)]\nCourt                         St  \t[(-122.2331,37.583),(-122.2324,37.589),(-122.2314,37.598)]\nCourtland                     Ave \t[(-122.2041,37.801),(-122.2032,37.815)]\nCourtland                     Ave \t[(-122.2084,37.76),(-122.2068,37.772)]\nCove                          Road\t[(-122.2468,37.425),(-122.2474,37.408)]\nCovington                     Way \t[(-121.7935,37.936),(-121.7911,37.942)]\nCowing                        Road\t[(-122.0002,37.934),(-121.9772,37.782)]\nCowper                        St  \t[(-122.2908,37.673),(-122.2894,37.675)]\nCoyote Hills Slough               \t[(-122.0904,37.85),(-122.0953,37.829)]\nCoyote Hills Slough               \t[(-122.1075,37.687),(-122.1285,37.643)]\nCoyote River                      \t[(-121.931582,37.60707),(-121.932309,37.60824)]\nCoyote River                      \t[(-121.9505,37.629),(-121.9582,37.646)]\nCoyote River                      \t[(-121.9746,37.617),(-121.9863,37.648)]\nCragmont                      Ave \t[(-122.2616,37.921),(-122.2603,37.911)]\nCragmont                      Ave \t[(-122.266,37.95),(-122.2656,37.943)]\nCraig                         St  \t[(-121.9869,37.61),(-121.9864,37.601)]\nCrane                         Ave \t[(-122.0578,37.103),(-122.058,37.086)]\nCreed                         Road\t[(-122.2249,37.094),(-122.2256,37.101)]\nCreekside                     Dr  \t[(-121.924308,37.89385),(-121.925368,37.89008)]\nCreekside                     Dr  \t[(-121.926024,37.88774),(-121.926337,37.88663)]\nCreekside                     Ter \t[(-121.997958,37.64593),(-121.998047,37.63504)]\nCreekwood                     Dr  \t[(-122.043309,37.66911),(-122.041422,37.66099)]\nCrellin                       Road\t[(-121.846446,37.59189),(-121.846,37.591),(-121.845775,37.59073)]\nCrest                         Ave \t[(-122.1039,37.067),(-122.1038,37.066)]\nCrest                         Ave \t[(-122.162,37.699),(-122.1568,37.664)]\nCrest                         Ct  \t[(-122.0566,37.049),(-122.0571,37.05)]\nCrest                         Lane\t[(-122.0558,37.047),(-122.0546,37.047)]\nCrest                         Road\t[(-122.2149,37.216),(-122.2153,37.221)]\nCrestline                     Road\t[(-121.887,37.789),(-121.8846,37.793)]\nCrestmont                     Dr  \t[(-122.1775,37.029),(-122.1798,37.044)]\nCreston                       Road\t[(-122.2639,37.002),(-122.2613,37.986),(-122.2602,37.978),(-122.2598,37.973)]\nCrestwood                     St  \t[(-121.9589,37.159),(-121.961,37.156)]\nCrisfield                     Lane\t[(-121.871,37.814),(-121.8718,37.813)]\nCrocker                       Ave \t[(-122.2242,37.186),(-122.2243,37.171)]\nCrockwood                     Ter \t[(-122.045255,37.66569),(-122.045487,37.66262)]\nCromwell                      Way \t[(-121.7723,37.932),(-121.7713,37.933)]\nCrosby                        St  \t[(-122.146,37.96),(-122.145,37.953)]\nCross                         Road\t[(-121.666843,37.7387),(-121.664768,37.7474)]\nCrow                          Ct  \t[(-121.8797,37.911),(-121.8801,37.91)]\nCrow Canyon                   Road\t[(-122.0106,37.674),(-122.0102,37.675)]\nCrow Canyon                   Road\t[(-122.0497,37.029),(-122.0479,37.028)]\nCrow Canyon                   Road\t[(-122.0552,37.938),(-122.0545,37.967)]\nCrow Canyon Creek                 \t[(-122.0425,37.051),(-122.0426,37.049)]\nCrow Canyon Creek                 \t[(-122.043,37.905),(-122.0368,37.71)]\nCrow Canyon Creek                 \t[(-122.046308,37.0015),(-122.046833,37.00133)]\nCroxton                       Ave \t[(-122.2591,37.219),(-122.2584,37.211)]\nCryer                         St  \t[(-122.1024,37.357),(-122.1035,37.351)]\nCrystal                       Lane\t[(-121.868866,37.50763),(-121.870709,37.51024)]\nCrystaline                    Dr  \t[(-121.925856,37),(-121.925869,37.00527)]\nCull Canyon                   Road\t[(-122.0536,37.435),(-122.0499,37.315)]\nCull Canyon Reservoir             \t[(-122.0546,37.039),(-122.0553,37.089)]\nCull Creek                        \t[(-122.0624,37.875),(-122.0582,37.527)]\nCulver                        St  \t[(-122.1998,37.865),(-122.1996,37.862)]\nCumberland                    Ave \t[(-122.1467,37.945),(-122.1507,37.944)]\nCurran                        Way \t[(-122.2074,37.96),(-122.207,37.966)]\nCurtis                        St  \t[(-121.9765,37.246),(-121.9778,37.229)]\nCurtis                        St  \t[(-122.2866,37.981),(-122.2866,37.968),(-122.2867,37.949)]\nCurtis                        St  \t[(-122.2877,37.65),(-122.2877,37.639)]\nCurtis                        St  \t[(-122.2881,37.848),(-122.2883,37.831)]\nCurtner                       Road\t[(-121.909,37.928),(-121.9084,37.928)]\nCurtner                       Road\t[(-121.9117,37.939),(-121.9105,37.93)]\nCutler                        Ave \t[(-122.013942,37.74913),(-122.0142,37.745)]\nCypress                       St  \t[(-122.2883,37.177),(-122.2884,37.184)]\nCypress                       St  \t[(-122.2886,37.241),(-122.2883,37.247)]\nCypress                       St  \t[(-122.2899,37.142),(-122.2894,37.156)]\nCypress                       St  \t[(-122.2908,37.104),(-122.2905,37.113)]\nCypress                       St  \t[(-122.2931,37.047),(-122.2928,37.055)]\nCypress Point                 Dr  \t[(-121.7251,37.24),(-121.724,37.24)]\nD                             St  \t[(-122.0239,37.017),(-122.0242,37.015)]\nD                             St  \t[(-122.0529,37.421),(-122.0534,37.42)]\nD                             St  \t[(-122.055,37.798),(-122.0541,37.796),(-122.0529,37.794)]\nD                             St  \t[(-122.056892,37.79896),(-122.0564,37.8)]\nD                             St  \t[(-122.0746,37.745),(-122.0741,37.749)]\nD                             St  \t[(-122.179,37.476),(-122.1785,37.47)]\nD                             St  \t[(-122.1811,37.505),(-122.1805,37.497)]\nDagnino                       Road\t[(-121.7462,37.306),(-121.7461,37.379)]\nDaisy                         St  \t[(-122.1817,37.843),(-122.18,37.848),(-122.179,37.851)]\nDaisy                         St  \t[(-122.1857,37.858),(-122.185,37.851)]\nDalgo                         Road\t[(-121.947,37.529),(-121.9475,37.524)]\nDalton                        Way \t[(-122.0293,37.927),(-122.0297,37.915)]\nDalton Com                        \t[(-121.994,37.555),(-121.9944,37.556)]\nDamon Slough                      \t[(-122.2057,37.533),(-122.2063,37.531)]\nDana                          St  \t[(-122.2578,37.501),(-122.2579,37.507)]\nDana                          St  \t[(-122.2583,37.548),(-122.2582,37.541)]\nDaniels                       Dr  \t[(-122.1346,37.317),(-122.1335,37.323)]\nDarius                        Way \t[(-122.1272,37.18),(-122.1267,37.164)]\nDarwin                        Dr  \t[(-122.0335,37.776),(-122.0349,37.767)]\nDarwin                        Dr  \t[(-122.0359,37.763),(-122.0366,37.755)]\nDarwin                        St  \t[(-122.0996,37.317),(-122.1024,37.311)]\nDaryl                         Ave \t[(-122.115,37.883),(-122.1149,37.866)]\nDashwood                      Ave \t[(-122.177,37.618),(-122.1755,37.627)]\nDavenport                     Ave \t[(-122.1827,37.892),(-122.1823,37.872)]\nDavid                         St  \t[(-122.0637,37.958),(-122.0608,37.958)]\nDavis                         St  \t[(-122.1624,37.225),(-122.1632,37.222),(-122.1647,37.218)]\nDavis                         St  \t[(-122.1702,37.203),(-122.171,37.201)]\nDavis                         St  \t[(-122.1719,37.199),(-122.1725,37.198)]\nDavis                         St  \t[(-122.1831,37.165),(-122.1835,37.165)]\nDavis                         St  \t[(-122.1857,37.158),(-122.1921,37.139)]\nDavis                         St  \t[(-122.217903,37.89337),(-122.216,37.885)]\nDavona                        Dr  \t[(-121.9261,37.222),(-121.9278,37.218)]\nDavy                          Ct  \t[(-121.9902,37.629),(-121.99,37.623)]\nDawe                          Ave \t[(-122.0783,37.927),(-122.0783,37.912)]\nDawes                         St  \t[(-122.2122,37.24),(-122.2112,37.226)]\nDawn View                     Ct  \t[(-122.041,37.144),(-122.0403,37.143)]\nDayle                         Ct  \t[(-121.943,37.37),(-121.9421,37.369)]\nDe Brum Commons                   \t[(-121.924934,37.30872),(-121.924728,37.30014)]\nDe la Cruz                    Road\t[(-122.0554,37.305),(-122.055,37.301)]\nDearborn                      St  \t[(-122.0274,37.107),(-122.0275,37.101)]\nDecatur                       Way \t[(-122.0868,37.296),(-122.0863,37.267)]\nDecoto                        Road\t[(-122.0159,37.006),(-122.016,37.002),(-122.0164,37.993)]\nDecoto                        Road\t[(-122.0175,37.961),(-122.0177,37.955)]\nDecoto                        Road\t[(-122.0189,37.925),(-122.019,37.921)]\nDecoto                        Road\t[(-122.0292,37.733),(-122.0315,37.707)]\nDecoto                        Road\t[(-122.0361,37.656),(-122.0364,37.652)]\nDeep Creek                    Road\t[(-122.049391,37.64053),(-122.04928,37.63888)]\nDeep Creek                    Road\t[(-122.0533,37.749),(-122.053709,37.74218)]\nDeep Creek                    Road\t[(-122.0536,37.697),(-122.0517,37.674),(-122.0513,37.668)]\nDeer Oaks                     Dr  \t[(-121.909133,37.54092),(-121.907389,37.54544)]\nDeer Park                     Way \t[(-122.0279,37.526),(-122.0266,37.524)]\nDeer Trail                    Pl  \t[(-122.0455,37.669),(-122.044472,37.66938)]\nDeering                       St  \t[(-122.2146,37.904),(-122.2126,37.897)]\nDeervale                      Road\t[(-121.9376,37.178),(-121.9374,37.184)]\nDeerwood                      St  \t[(-122.1775,37.623),(-122.177,37.618)]\nDel Valle                     Pkwy\t[(-121.875441,37.66004),(-121.874759,37.65728)]\nDel Valle                     Road\t[(-121.688828,37.70896),(-121.691152,37.7458)]\nDelaware                      Dr  \t[(-121.951,37.203),(-121.9517,37.201)]\nDelaware                      St  \t[(-122.2016,37.926),(-122.2015,37.925)]\nDelaware                      Way \t[(-121.786362,37.92959),(-121.7863,37.93)]\nDelmar                        Ave \t[(-121.7889,37.693),(-121.787,37.704)]\nDelmar                        Ave \t[(-122.2453,37.545),(-122.2444,37.556)]\nDelores                       Dr  \t[(-122.0742,37.735),(-122.0752,37.727)]\nDelta                         Ter \t[(-121.9592,37.113),(-121.959,37.111)]\nDelta Mendota Canal               \t[(-121.562031,37.5571),(-121.573749,37.57374)]\nDelta Mendota Canal               \t[(-121.57819,37.7187),(-121.578403,37.71976)]\nDelta Mendota Canal               \t[(-121.589243,37.84355),(-121.589222,37.84389)]\nDenise                        Ct  \t[(-121.9418,37.142),(-121.9414,37.127)]\nDenise                        St  \t[(-121.9469,37.37),(-121.945,37.359)]\nDenker                        Dr  \t[(-121.9086,37.861),(-121.9082,37.863),(-121.9079,37.864)]\nDennison                      St  \t[(-122.2379,37.796),(-122.2374,37.796)]\nDennison                      St  \t[(-122.2428,37.791),(-122.2412,37.793),(-122.239,37.795)]\nDenslowe                      St  \t[(-122.1851,37.336),(-122.1847,37.332)]\nDenton                        Ave \t[(-122.1118,37.467),(-122.108659,37.47689)]\nDenton                        Ave \t[(-122.1118,37.467),(-122.112277,37.46666)]\nDepot                         Road\t[(-122.127518,37.3808),(-122.1284,37.38)]\nDepot                         Road\t[(-122.1302,37.38),(-122.1323,37.379)]\nDerby                         St  \t[(-122.246,37.628),(-122.2451,37.629)]\nDerby                         St  \t[(-122.2617,37.612),(-122.2595,37.615)]\nDerby                         St  \t[(-122.2688,37.602),(-122.2663,37.606)]\nDering                        Pl  \t[(-122.0192,37.701),(-122.0183,37.693)]\nDevonshire                    Ave \t[(-122.1466,37.926),(-122.1498,37.924)]\nDevonshire                    Ave \t[(-122.1507,37.924),(-122.1517,37.924)]\nDewey                         St  \t[(-122.1483,37.862),(-122.1482,37.857)]\nDiablo                        Ave \t[(-122.1186,37.358),(-122.1236,37.358)]\nDiablo                        Pl  \t[(-122.0543,37.973),(-122.0534,37.974)]\nDiamond                       Dr  \t[(-121.8008,37.669),(-121.7988,37.682)]\nDiana Common                      \t[(-122.056116,37.61386),(-122.056337,37.62065)]\nDichondra                     Pl  \t[(-122.009872,37.31128),(-122.009205,37.31438)]\nDillo                         St  \t[(-122.1303,37.024),(-122.1303,37.016)]\nDimond                        Ave \t[(-122.2167,37.994),(-122.2162,37.006)]\nDixon                         St  \t[(-122.0524,37.32),(-122.0514,37.311)]\nDoane                         St  \t[(-121.9531,37.149),(-121.9562,37.14)]\nDoane                         St  \t[(-121.9581,37.135),(-121.9597,37.13)]\nDobbel                        Ave \t[(-122.0319,37.46),(-122.0328,37.463)]\nDobbel                        Ave \t[(-122.0417,37.52),(-122.0408,37.515)]\nDohr                          St  \t[(-122.2805,37.56),(-122.2804,37.548)]\nDolores                       Ave \t[(-122.1517,37.224),(-122.1498,37.229)]\nDolores                       Dr  \t[(-121.8732,37.524),(-121.8724,37.519)]\nDolores                       Dr  \t[(-121.875651,37.52705),(-121.87384,37.52324)]\nDolores                       St  \t[(-122.078,37.842),(-122.0779,37.833)]\nDominici                      Dr  \t[(-122.0149,37.756),(-122.0151,37.75)]\nDonalban                      Cir \t[(-122.0464,37.71),(-122.0475,37.709)]\nDonegal                       Ct  \t[(-122.0433,37.549),(-122.0421,37.543)]\nDonlan Canyon Creek               \t[(-121.9687,37.097),(-121.9584,37.101)]\nDonna                         Way \t[(-122.1333,37.606),(-122.1316,37.599)]\nDonner                        Way \t[(-121.9969,37.37),(-121.9945,37.357)]\nDonohue                       Dr  \t[(-121.932,37.091),(-121.9327,37.106)]\nDoolittle                     Dr  \t[(-122.174643,37.98341),(-122.1735,37.965)]\nDoolittle                     Dr  \t[(-122.1793,37.052),(-122.1787,37.043)]\nDoolittle                     Dr  \t[(-122.193162,37.21747),(-122.193,37.216)]\nDoolittle                     Dr  \t[(-122.224088,37.448),(-122.2226,37.448)]\nDorisa                        Ave \t[(-122.1462,37.555),(-122.1448,37.572)]\nDorman                        Road\t[(-121.9061,37.834),(-121.9063,37.841)]\nDorne                         Pl  \t[(-121.9455,37.397),(-121.9456,37.392)]\nDorothy                       Pl  \t[(-122.2301,37.566),(-122.2302,37.571)]\nDorsey                        Ave \t[(-121.9992,37.495),(-121.9997,37.489)]\nDorthea                       Ct  \t[(-121.9064,37.519),(-121.908617,37.52369)]\nDougherty                     Road\t[(-121.908447,37.2552),(-121.90838,37.2379)]\nDougherty                     Road\t[(-121.9093,37.127),(-121.9093,37.15418)]\nDougherty                     Road\t[(-121.909939,37.28669),(-121.909373,37.30234),(-121.9092,37.305)]\nDouglas                       Dr  \t[(-122.1705,37.227),(-122.1698,37.214)]\nDover                         Way \t[(-121.7929,37.906),(-121.7917,37.906)]\nDowe                          Ave \t[(-122.0439,37.903),(-122.04363,37.91098)]\nDowling                       Blvd\t[(-122.1467,37.359),(-122.1447,37.359)]\nDowling                       Blvd\t[(-122.1552,37.323),(-122.1542,37.335)]\nDowning                       Pl  \t[(-122.0549,37.035),(-122.0546,37.041)]\nDoyle                         St  \t[(-122.2835,37.337),(-122.2836,37.344)]\nDrake                         Dr  \t[(-122.2056,37.311),(-122.2043,37.302)]\nDrew                          St  \t[(-122.1288,37.938),(-122.1281,37.939)]\nDrew                          Ter \t[(-121.956729,37.21923),(-121.956991,37.21808)]\nDriftwood                     Dr  \t[(-122.0109,37.482),(-122.0113,37.477)]\nDriftwood                     Way \t[(-121.919,37.794),(-121.92,37.795)]\nDriftwood                     Way \t[(-122.1726,37.924),(-122.1734,37.924)]\nDriscoll                      Road\t[(-121.9482,37.403),(-121.948451,37.39995)]\nDry Creek                         \t[(-121.706461,37.12006),(-121.708998,37.15525)]\nDry Creek                         \t[(-122.0367,37.88386),(-122.038,37.877)]\nDublin                        Blvd\t[(-121.9096,37.047),(-121.9115,37.034)]\nDublin                        Blvd\t[(-121.945852,37.98712),(-121.944625,37.99187)]\nDublin                        Road\t[(-121.955087,37.97529),(-121.946646,37.94858)]\nDublin                        Way \t[(-122.251,37.425),(-122.2513,37.43)]\nDublin Canyon                 Road\t[(-121.94428,37.95399),(-121.943721,37.95527)]\nDublin Creek                      \t[(-121.9422,37.974),(-121.955,37.984)]\nDublin Green                  Dr  \t[(-121.939669,37.10516),(-121.9384,37.097)]\nDudley                        Ave \t[(-122.222,37.241),(-122.2221,37.234)]\nDuffel                        Pl  \t[(-122.0641,37.434),(-122.0637,37.429)]\nDunbar                        Pl  \t[(-122.011,37.632),(-122.0121,37.621)]\nDundee                        Ct  \t[(-122.1458,37.166),(-122.1451,37.16)]\nDunkirk                       Ave \t[(-122.1254,37.526),(-122.1228,37.531)]\nDunn                          Road\t[(-122.1195,37.452),(-122.1211,37.451)]\nDurant                        Ave \t[(-122.2603,37.678),(-122.2584,37.68)]\nDurant                        Ave \t[(-122.2671,37.669),(-122.2652,37.67)]\nDurham                        Road\t[(-121.9216,37.146),(-121.9234,37.149)]\nDurham                        Road\t[(-121.957278,37.10033),(-121.957885,37.09857)]\nDurham                        Road\t[(-121.9605,37.091),(-121.9616,37.087)]\nDurham                        Road\t[(-121.9634,37.081),(-121.9642,37.078)]\nDurham                        Way \t[(-122.0321,37.656),(-122.0311,37.642)]\nDurillo                       Dr  \t[(-121.9464,37.446),(-121.9457,37.441)]\nDurk                          Way \t[(-122.097393,37.57955),(-122.097541,37.58144)]\nDusterberry                   Way \t[(-122.0141,37.565),(-122.0135,37.562)]\nDutton                        Ave \t[(-122.1403,37.339),(-122.1394,37.34)]\nDutton                        Ave \t[(-122.155,37.319),(-122.1534,37.323)]\nDwight                        Way \t[(-122.2483,37.662),(-122.2472,37.661)]\nDwight                        Way \t[(-122.2546,37.657),(-122.2533,37.659)]\nDwight                        Way \t[(-122.2573,37.654),(-122.256,37.656)]\nDwight                        Way \t[(-122.286,37.616),(-122.2851,37.617)]\nDwight                        Way \t[(-122.2933,37.602),(-122.292,37.605),(-122.291,37.607)]\nDyer                          St  \t[(-122.0684,37.028),(-122.0691,37.005)]\nDyer                          St  \t[(-122.0701,37.969),(-122.0703,37.965)]\nE                             St  \t[(-122.019,37.037),(-122.0195,37.032),(-122.0203,37.027),(-122.0208,37.022)]\nE                             St  \t[(-122.1832,37.505),(-122.1826,37.498),(-122.182,37.49)]\nEagle                         Ave \t[(-122.2342,37.668),(-122.2335,37.664)]\nEagle                         Ave \t[(-122.2539,37.76),(-122.253215,37.75657)]\nEarhart                       Road\t[(-122.2004,37.256),(-122.2004,37.259)]\nEarhart                       Road\t[(-122.2086,37.296),(-122.2012,37.255)]\nEarhart                       Road\t[(-122.2186,37.394),(-122.2181,37.389)]\nEarl                          St  \t[(-122.1564,37.709),(-122.1552,37.697)]\nEast                          Ave \t[(-121.7203,37.799),(-121.7176,37.801)]\nEast                          Ave \t[(-121.7296,37.8),(-121.7251,37.8)]\nEast                          Ave \t[(-121.7424,37.799),(-121.7416,37.799)]\nEast                          Ave \t[(-121.7597,37.798),(-121.7558,37.8)]\nEast                          Ave \t[(-121.7641,37.8),(-121.763,37.8)]\nEast                          Ave \t[(-122.0361,37.719),(-122.0352,37.733)]\nEasterday                     Way \t[(-121.9916,37.829),(-121.9899,37.814)]\nEastlawn                      St  \t[(-122.1989,37.629),(-122.1982,37.623)]\nEastlawn                      St  \t[(-122.2005,37.644),(-122.2,37.638)]\nEastman                       Ave \t[(-122.20024,37.86217),(-122.1998,37.865)]\nEastman                       Ave \t[(-122.2028,37.845),(-122.2012,37.856)]\nEastman                       Ct  \t[(-122.0732,37.492),(-122.0722,37.486)]\nEastpark                      Ter \t[(-122.041182,37.77686),(-122.042271,37.78226)]\nEastshore                     Hwy \t[(-122.3057,37.785),(-122.3051,37.755)]\nEbbetts                       St  \t[(-122.0061,37.205),(-122.005,37.203)]\nEden                          Ave \t[(-122.1143,37.505),(-122.1142,37.491)]\nEden Creek                        \t[(-122.0218,37.996),(-122.0222,37.961)]\nEden Creek                        \t[(-122.022037,37.00675),(-122.0221,37.998)]\nEden Landing                  Road\t[(-122.1204,37.268),(-122.1204,37.267)]\nEden Landing                  Road\t[(-122.1213,37.226),(-122.1213,37.223)]\nEdenberry                     St  \t[(-121.9347,37.23),(-121.9349,37.235)]\nEdes                          Ave \t[(-122.1833,37.363),(-122.1821,37.359)]\nEdes                          Ave \t[(-122.1948,37.444),(-122.1941,37.444)]\nEdgebrook                     Dr  \t[(-122.057639,37.71523),(-122.057506,37.72472)]\nEdgehill                      Ct  \t[(-122.1305,37.239),(-122.1304,37.232)]\nEdgemoor                      St  \t[(-122.1492,37.918),(-122.1492,37.91)]\nEdgewater                     Dr  \t[(-122.0285,37.526),(-122.028611,37.52295)]\nEdgewater                     Dr  \t[(-122.0306,37.542),(-122.0298,37.538)]\nEdgewater                     Dr  \t[(-122.0327,37.552),(-122.0315,37.546)]\nEdgewater                     Dr  \t[(-122.0387,37.579),(-122.038315,37.57785)]\nEdgewater                     Dr  \t[(-122.0401,37.57),(-122.0405,37.565)]\nEdgewater                     Dr  \t[(-122.201,37.379),(-122.2042,37.41)]\nEdison                        Way \t[(-121.9443,37.098),(-121.9473,37.084)]\nEdith                         St  \t[(-122.02,37.43),(-122.0197,37.429)]\nEdith                         St  \t[(-122.077,37.638),(-122.0764,37.631)]\nEdith                         St  \t[(-122.2764,37.774),(-122.2763,37.765)]\nEdith                         Way \t[(-122.0733,37.825),(-122.0716,37.804)]\nEdwards                       Ave \t[(-122.1652,37.749),(-122.1638,37.759)]\nEdwards                       Lane\t[(-122.0599,37.016),(-122.058514,37.01551)]\nEggers                        Ct  \t[(-121.9924,37.585),(-121.991,37.576)]\nEggers                        Dr  \t[(-122.0002,37.465),(-122.0017,37.451)]\nEhle                          St  \t[(-122.103,37.973),(-122.1017,37.959)]\nEilene                        Dr  \t[(-121.869254,37.87019),(-121.869113,37.87253)]\nEilene                        Dr  \t[(-121.869618,37.86592),(-121.869389,37.86861)]\nEl Caminito                       \t[(-121.7883,37.673),(-121.7852,37.67)]\nEl Caminito                       \t[(-121.7922,37.696),(-121.7907,37.685),(-121.7898,37.681)]\nEl Camino Real                    \t[(-122.2409,37.559),(-122.2407,37.556)]\nEl Centro                     Ave \t[(-122.2191,37.116),(-122.2185,37.118)]\nEl Dorado                     Dr  \t[(-121.7803,37.659),(-121.7801,37.647)]\nEl Monte                      Ave \t[(-122.1594,37.624),(-122.1591,37.63)]\nEl Paseo                          \t[(-122.244718,37.33016),(-122.2454,37.333)]\nEl Portal                         \t[(-122.2429,37.359),(-122.2434,37.361)]\nEl Portal                     Ave \t[(-121.9993,37.83),(-121.9997,37.817)]\nEl Portal                     Ct  \t[(-122.2554,37.844),(-122.2552,37.85)]\nEl Rey                        Ave \t[(-122.0219,37.536),(-122.0225,37.53)]\nElba                          Way \t[(-121.9223,37.143),(-121.923,37.139)]\nElbert                        St  \t[(-122.2205,37.107),(-122.2195,37.095)]\nElder                         Way \t[(-122.0819,37.229),(-122.0827,37.229)]\nEldridge                      Ave \t[(-122.0883,37.402),(-122.0878,37.395)]\nEldridge                      Ave \t[(-122.0896,37.423),(-122.0888,37.408)]\nElgin                         St  \t[(-122.1106,37.911),(-122.1102,37.911)]\nElgin                         St  \t[(-122.113,37.911),(-122.1119,37.911)]\nElgin                         St  \t[(-122.1222,37.95),(-122.1213,37.945)]\nElk                           Ct  \t[(-121.912463,37.08667),(-121.913575,37.09125)]\nElko                          Ct  \t[(-122.1499,37.778),(-122.1496,37.773)]\nEllen                         Way \t[(-122.0685,37.83),(-122.0687,37.828)]\nEllen                         Way \t[(-122.0711,37.801),(-122.0716,37.796)]\nEllis                         St  \t[(-122.2726,37.542),(-122.2723,37.524)]\nEllsworth                     St  \t[(-122.2611,37.575),(-122.2608,37.57)]\nElm                           St  \t[(-121.7815,37.865),(-121.7807,37.865)]\nElm                           St  \t[(-122.04,37.27),(-122.0392,37.254)]\nElmhurst                      St  \t[(-122.0916,37.568),(-122.0918,37.564)]\nElmridge                      Ct  \t[(-121.8867,37.707),(-121.8871,37.702)]\nElsie                         Ave \t[(-122.1497,37.21),(-122.1447,37.223)]\nElverton                      Dr  \t[(-122.2028,37.487),(-122.2017,37.471)]\nElvessa                       St  \t[(-122.1296,37.528),(-122.129,37.522)]\nElysian Fields                Dr  \t[(-122.1275,37.646),(-122.1275,37.649)]\nElysian Fields                Dr  \t[(-122.1336,37.595),(-122.133,37.594)]\nElysian Fields                Dr  \t[(-122.1369,37.589),(-122.1361,37.595)]\nEmbarcadero                       \t[(-122.2527,37.894),(-122.246486,37.86908)]\nEmbarcadero                       \t[(-122.276,37.961),(-122.2747,37.956)]\nEmbarcadero                       \t[(-122.2836,37.99),(-122.283,37.989)]\nEmerald                       Ave \t[(-121.9247,37.13),(-121.925,37.136)]\nEmerald                       St  \t[(-122.2557,37.309),(-122.2557,37.315)]\nEmerson                       St  \t[(-121.9276,37.345),(-121.9284,37.347)]\nEmerson                       St  \t[(-122.2688,37.543),(-122.2678,37.544)]\nEmily                         Ct  \t[(-122.0726,37.121),(-122.0712,37.124)]\nEmpire                        Road\t[(-122.1873,37.278),(-122.1858,37.277)]\nEncinitas                     Way \t[(-122.0759,37.917),(-122.0756,37.911)]\nEncino                        Dr  \t[(-121.7959,37.688),(-121.7947,37.688)]\nEndeavour                     Way \t[(-122.0655,37.842),(-122.0647,37.84)]\nEndicott                      St  \t[(-122.1436,37.931),(-122.1435,37.911)]\nEnfield                       Dr  \t[(-122.0273,37.519),(-122.0277,37.507)]\nEnos                          Way \t[(-121.7677,37.896),(-121.7673,37.91)]\nEnsenada                      Ave \t[(-122.2833,37.933),(-122.2825,37.928)]\nEnterprise                    Pl  \t[(-121.9568,37.009),(-121.9558,37.002)]\nErica                         Pl  \t[(-122.0299,37.165),(-122.0293,37.169)]\nErie                          St  \t[(-122.2419,37.122),(-122.2408,37.134)]\nEscher                        Dr  \t[(-122.1962,37.258),(-122.1988,37.302)]\nEssex                         St  \t[(-122.2677,37.537),(-122.2657,37.539)]\nEssex                         Way \t[(-121.9735,37.257),(-121.9749,37.249)]\nEstabrook                     St  \t[(-122.1527,37.164),(-122.1535,37.161)]\nEstabrook                     St  \t[(-122.1539,37.16),(-122.1547,37.156)]\nEstates                       Dr  \t[(-122.2136,37.158),(-122.2126,37.169)]\nEstates                       Dr  \t[(-122.2139,37.272),(-122.2135,37.26)]\nEstates                       Dr  \t[(-122.2178,37.33),(-122.2183,37.325)]\nEstates                       Dr  \t[(-122.2225,37.37),(-122.218617,37.34167)]\nEstudillo                     Ave \t[(-122.1446,37.274),(-122.1425,37.28)]\nEstudillo                     Ave \t[(-122.1509,37.256),(-122.1498,37.26)]\nEstudillo                     Ave \t[(-122.1547,37.245),(-122.1551,37.244)]\nEstudillo                     Ave \t[(-122.1584,37.229),(-122.1595,37.225)]\nEstudillo                     Ave \t[(-122.1608,37.22),(-122.1621,37.214)]\nEstudillo Canal                   \t[(-122.1282,37.969),(-122.1288,37.964)]\nEstudillo Canal                   \t[(-122.1323,37.929),(-122.1363,37.924),(-122.1369,37.924)]\nEstudillo Canal                   \t[(-122.1397,37.923),(-122.14066,37.92204)]\nEstudillo Canal                   \t[(-122.1569,37.861),(-122.1587,37.858)]\nEucalyptus                    Ct  \t[(-122.064324,37.37425),(-122.064548,37.37733)]\nEuclid                        Ave \t[(-122.2618,37.893),(-122.2612,37.887)]\nEuclid                        Ave \t[(-122.2627,37.907),(-122.2621,37.902)]\nEuclid                        Ave \t[(-122.2632,37.942),(-122.2644,37.93)]\nEuclid                        Ave \t[(-122.2671,37.009),(-122.2666,37.987)]\nEugene                        St  \t[(-121.963937,37.38628),(-121.9642,37.383)]\nEugene                        St  \t[(-121.9659,37.364),(-121.9664,37.358)]\nEvans                         St  \t[(-121.7778,37.607),(-121.7777,37.602)]\nEvelyn                        Ave \t[(-122.2906,37.814),(-122.2903,37.807)]\nEvelyn                        Ave \t[(-122.2919,37.843),(-122.2909,37.83)]\nEverett                       Ave \t[(-122.2182,37.02),(-122.2172,37.05)]\nEverett                       Ave \t[(-122.219,37.094),(-122.218,37.087)]\nEverett                       St  \t[(-122.236,37.678),(-122.2353,37.687)]\nEverett                       St  \t[(-122.2385,37.647),(-122.238,37.653)]\nEverglade                     St  \t[(-122.0822,37.275),(-122.083,37.272)]\nEverglades                    Lane\t[(-121.8005,37.87),(-121.800259,37.87469)]\nEverglades Park               Dr  \t[(-121.9703,37.175),(-121.9718,37.164)]\nEvergreen                     Ave \t[(-122.1367,37.234),(-122.1361,37.224)]\nEvergreen                     St  \t[(-122.0877,37.458),(-122.087,37.455)]\nExcelsior                     Ave \t[(-122.2224,37.019),(-122.2215,37.016)]\nExcelsior                     Ave \t[(-122.2338,37.059),(-122.2312,37.051)]\nF                             St  \t[(-122.0191,37.017),(-122.0198,37.013)]\nF                             St  \t[(-122.0223,37.993),(-122.0225,37.993)]\nF                             St  \t[(-122.0246,37.976),(-122.0247,37.974)]\nF Bay                             \t[(-122.152,37.358),(-122.150473,37.24998)]\nF Bay                             \t[(-122.2842,37.681),(-122.2841,37.68)]\nF Bay                             \t[(-122.3138,37.645),(-122.3154,37.643)]\nFaber                         St  \t[(-122.0694,37.105),(-122.075,37.106)]\nFabian                        Way \t[(-122.0703,37.27),(-122.0684,37.269)]\nFabian Com                        \t[(-121.9951,37.537),(-121.9947,37.534)]\nFair                          Ave \t[(-122.0298,37.395),(-122.0304,37.386)]\nFairbrook                     Ct  \t[(-121.9207,37.829),(-121.9218,37.826)]\nFairfax                       Ave \t[(-122.1997,37.733),(-122.1997,37.724)]\nFairfax                       Ave \t[(-122.2022,37.784),(-122.2015,37.778)]\nFairlands                     Dr  \t[(-121.871,37.976),(-121.8719,37.961)]\nFairlands                     Dr  \t[(-121.8731,37.956),(-121.8738,37.952)]\nFairlands                     Road\t[(-122.0583,37.784),(-122.059,37.781)]\nFairmont                      Dr  \t[(-122.1135,37.144),(-122.1109,37.143)]\nFairmount                     Ave \t[(-122.2525,37.23),(-122.2511,37.234)]\nFairmount                     Ave \t[(-122.2561,37.194),(-122.2553,37.202)]\nFairview                      Ave \t[(-121.999,37.428),(-121.9863,37.351)]\nFairview                      Ave \t[(-122.0165,37.549),(-122.016,37.525)]\nFairview                      Ave \t[(-122.02765,37.68521),(-122.0274,37.669),(-122.0267,37.646)]\nFairview                      Ave \t[(-122.038562,37.76258),(-122.0379,37.762)]\nFairview                      Ave \t[(-122.0418,37.748),(-122.0402,37.764)]\nFairview                      Ave \t[(-122.0432,37.752),(-122.0428,37.751)]\nFairview                      Ave \t[(-122.049,37.788),(-122.0482,37.775)]\nFairview                      Ave \t[(-122.2404,37.22),(-122.2401,37.227)]\nFairview                      St  \t[(-122.2792,37.495),(-122.2776,37.498)]\nFairway                       Ct  \t[(-122.0536,37.334),(-122.0539,37.33)]\nFairway                       Dr  \t[(-122.1753,37.994),(-122.176433,37.98933)]\nFairway                       St  \t[(-122.0353,37.237),(-122.0343,37.238)]\nFairway                       St  \t[(-122.0375,37.221),(-122.0368,37.226)]\nFairwood                      St  \t[(-121.9539,37.183),(-121.9573,37.178)]\nFall Creek                    Road\t[(-121.910898,37.2702),(-121.909729,37.25584)]\nFallbrook                     Way \t[(-122.1285,37.533),(-122.1278,37.522)]\nFallon                        St  \t[(-122.2637,37.969),(-122.2633,37.977)]\nFallon                        St  \t[(-122.2661,37.931),(-122.2658,37.935)]\nFalls                         Ter \t[(-122.048735,37.61624),(-122.048402,37.60954)]\nFalmouth                      Pl  \t[(-122.0301,37.513),(-122.031,37.502)]\nFarallon                      Dr  \t[(-122.1681,37.938),(-122.1698,37.937)]\nFargo                         Ave \t[(-122.1468,37.881),(-122.1476,37.887)]\nFarm Hill                     Dr  \t[(-122.0328,37.523),(-122.0333,37.511)]\nFarnsworth                    St  \t[(-122.1507,37.952),(-122.1507,37.944)]\nFarwell                       Dr  \t[(-121.9867,37.255),(-121.9841,37.264)]\nFarwell                       Dr  \t[(-121.996,37.291),(-121.9952,37.287)]\nFarwell                       Dr  \t[(-121.9966,37.316),(-121.9962,37.314)]\nFarwell                       Dr  \t[(-122.0133,37.392),(-122.0125,37.389),(-122.01186,37.3858)]\nFaulkner                      Dr  \t[(-122.0034,37.53),(-122.0049,37.515)]\nFeldspar                      Ct  \t[(-122.0722,37.874),(-122.0734,37.87)]\nFellows                       St  \t[(-122.0652,37.814),(-122.066,37.805)]\nFellows                       St  \t[(-122.0682,37.78),(-122.0687,37.775)]\nFenico                        Ter \t[(-122.0166,37.562),(-122.0168,37.559)]\nFenwick                       Way \t[(-121.947144,37.20116),(-121.9451,37.202)]\nFenwick                       Way \t[(-121.9473,37.192),(-121.9472,37.199)]\nFernside                      Ave \t[(-122.2337,37.514),(-122.2343,37.509)]\nFernside                      Blvd\t[(-122.2256,37.575),(-122.2249,37.581)]\nFernside                      Blvd\t[(-122.2271,37.645),(-122.2265,37.64)]\nFerro                         St  \t[(-122.2996,37.975),(-122.3025,37.968)]\nFerry                         St  \t[(-122.3128,37.147),(-122.3113,37.159)]\nFerry                         St  \t[(-122.3185,37.097),(-122.3155,37.122)]\nField                         St  \t[(-122.1604,37.721),(-122.1596,37.728)]\nFielding                      Ct  \t[(-122.0393,37.689),(-122.0384,37.688)]\nFiji                          Way \t[(-122.1747,37.968),(-122.1753,37.965)]\nFilbert                       St  \t[(-122.036,37.259),(-122.0356,37.252)]\nFilbert                       St  \t[(-122.2779,37.215),(-122.2772,37.233)]\nFilbert                       St  \t[(-122.2802,37.151),(-122.2796,37.168)]\nFinback                       Way \t[(-122.1783,37.934),(-122.1776,37.936)]\nFindlay                       Way \t[(-121.7463,37.753),(-121.7454,37.753)]\nFir                           Ave \t[(-122.2385,37.318),(-122.2379,37.314)]\nFirestone                     Ct  \t[(-122.1246,37.671),(-122.1246,37.666)]\nFirst                         St  \t[(-121.7572,37.875),(-121.7576,37.863)]\nFirst                         St  \t[(-121.7636,37.843),(-121.7644,37.84)]\nFirth                         Ct  \t[(-122.1359,37.93),(-122.1363,37.924)]\nFisk                          Ct  \t[(-122.155,37.972),(-122.1545,37.968)]\nFitzerald                     St  \t[(-122.28185,37.26208),(-122.282237,37.26273)]\nFlagg                         St  \t[(-122.0921,37.71),(-122.0914,37.7)]\nFleet                         Road\t[(-122.2235,37.085),(-122.2229,37.078)]\nFleming                       Ave \t[(-122.1949,37.791),(-122.1948,37.783)]\nFletcher                      Lane\t[(-122.0779,37.668),(-122.0762,37.683)]\nFlint                         Ct  \t[(-122.1074,37.711),(-122.1085,37.704)]\nFlint River                   Ter \t[(-122.054,37.78),(-122.0536,37.778)]\nFlora                         St  \t[(-122.1882,37.625),(-122.1879,37.622)]\nFlorence                      Ave \t[(-122.2253,37.376),(-122.225,37.373)]\nFlorence                      Road\t[(-121.7743,37.711),(-121.7743,37.687)]\nFloresta                      Blvd\t[(-122.146,37.994),(-122.1478,37.98)]\nFlorio                        St  \t[(-122.2504,37.502),(-122.2494,37.504)]\nFlynn                         Road\t[(-121.657764,37.18891),(-121.657276,37.18952)]\nFolsom                        Ave \t[(-122.0587,37.271),(-122.0596,37.269)]\nFolsom                        Ave \t[(-122.0628,37.259),(-122.062855,37.25882)]\nFontaine                      Ct  \t[(-122.1525,37.685),(-122.1517,37.688)]\nFontana                       Dr  \t[(-122.2458,37.36),(-122.2463,37.354)]\nFontes                        Dr  \t[(-121.933352,37.40768),(-121.93251,37.40887)]\nFontonett                     Ave \t[(-121.795158,37.619),(-121.7947,37.619)]\nFoothill                      Blvd\t[(-122.0798,37.709),(-122.0798,37.688)]\nFoothill                      Blvd\t[(-122.0882,37.829),(-122.0869,37.822)]\nFoothill                      Blvd\t[(-122.0926,37.862),(-122.0918,37.857)]\nFoothill                      Blvd\t[(-122.0983,37.907),(-122.0981,37.905)]\nFoothill                      Blvd\t[(-122.1455,37.421),(-122.145202,37.41752)]\nFoothill                      Blvd\t[(-122.1775,37.697),(-122.1764,37.696)]\nFoothill                      Blvd\t[(-122.1948,37.725),(-122.1928,37.721)]\nFoothill                      Blvd\t[(-122.2018,37.724),(-122.2008,37.724)]\nFoothill                      Blvd\t[(-122.2136,37.77),(-122.2129,37.763)]\nFoothill                      Blvd\t[(-122.2216,37.837),(-122.2206,37.833)]\nFoothill                      Blvd\t[(-122.2289,37.846),(-122.2278,37.845)]\nFoothill                      Blvd\t[(-122.2414,37.9),(-122.2403,37.893)]\nFoothill                      Blvd\t[(-122.2454,37.921),(-122.2442,37.91)]\nFoothill                      Lane\t[(-121.905417,37.52303),(-121.905087,37.51659)]\nFoothill                      Road\t[(-121.8956,37.413),(-121.8967,37.419)]\nFoothill                      Road\t[(-121.9075,37.547),(-121.907696,37.55141)]\nFoothill                      Road\t[(-121.923245,37.81689),(-121.9236,37.82)]\nFoothill                      Road\t[(-121.932,37.93),(-121.9335,37.958)]\nFoothill Knolls               Dr  \t[(-121.909407,37.65999),(-121.9094,37.657)]\nFordham                       Way \t[(-121.7488,37.869),(-121.7481,37.869),(-121.7472,37.868)]\nForest                        Pl  \t[(-122.0672,37.051),(-122.0673,37.044)]\nForest                        St  \t[(-122.2541,37.443),(-122.2547,37.445)]\nForest Glen                   Pl  \t[(-122.067707,37.01875),(-122.068338,37.01945),(-122.068308,37.0263)]\nForest Hill                   Ave \t[(-122.2118,37.034),(-122.2086,37.069)]\nForestland                    Way \t[(-122.1886,37.334),(-122.1901,37.329)]\nFortune                       Way \t[(-122.1877,37.693),(-122.187,37.688)]\nFoster                        Ct  \t[(-122.0745,37.396),(-122.074447,37.39388)]\nFoster                        St  \t[(-121.9683,37.367),(-121.9664,37.358)]\nFountain                      St  \t[(-122.2306,37.593),(-122.2293,37.605)]\nFoxfire                       Pl  \t[(-122.063987,37.27349),(-122.064027,37.27459)]\nFoxswallow                    Road\t[(-121.8776,37.793),(-121.8796,37.794)]\nFraga                         Road\t[(-122.0397,37.975),(-122.0393,37.987)]\nFrance                        Road\t[(-122.045563,37.6829),(-122.045452,37.68292)]\nFrancisco                     St  \t[(-121.8687,37.749),(-121.8696,37.75)]\nFrancisco                     St  \t[(-122.286,37.733),(-122.285,37.735),(-122.2839,37.737)]\nFranklin                      Ave \t[(-122.0605,37.028),(-122.0614,37.039)]\nFranklin                      Dr  \t[(-121.9049,37.954),(-121.9084,37.934)]\nFranklin                      St  \t[(-122.2687,37.055),(-122.2679,37.068)]\nFranklin                      St  \t[(-122.2702,37.03),(-122.2698,37.037)]\nFranklin                      St  \t[(-122.2719,37.003),(-122.2715,37.009)]\nFranklin                      St  \t[(-122.2744,37.961),(-122.2741,37.968)]\nFrederick                     Road\t[(-122.174,37.244),(-122.1735,37.225)]\nFrederiksen                   Lane\t[(-121.9251,37.162),(-121.9256,37.162)]\nFredi                         St  \t[(-122.0764,37.934),(-122.0767,37.93)]\nFreedom                       Ave \t[(-122.1219,37.081),(-122.1215,37.075)]\nFreeman                       Pl  \t[(-122.0375,37.866),(-122.037548,37.86536)]\nFremont                       Ave \t[(-122.1429,37.008),(-122.145652,37.04405)]\nFremont                       Blvd\t[(-121.9347,37.663),(-121.9324,37.65)]\nFremont                       Blvd\t[(-121.955914,37.22071),(-121.9556,37.213)]\nFremont                       Blvd\t[(-121.960056,37.3392),(-121.9584,37.33)]\nFremont                       Blvd\t[(-121.964,37.362),(-121.9632,37.357)]\nFremont                       Blvd\t[(-122.0043,37.573),(-122.0038,37.57)]\nFremont                       Blvd\t[(-122.006647,37.58506),(-122.0071,37.587)]\nFremont                       Blvd\t[(-122.02826,37.6908),(-122.02694,37.6842)]\nFremont                       Blvd\t[(-122.0348,37.724),(-122.0315,37.707)]\nFremont                       Blvd\t[(-122.0373,37.736),(-122.0361,37.73)]\nFremont                       Blvd\t[(-122.0392,37.746),(-122.039154,37.74569)]\nFremont                       St  \t[(-122.284,37.403),(-122.2841,37.407)]\nFrontage                      Road\t[(-122.3051,37.664),(-122.2994,37.5)]\nFrontage                      Road\t[(-122.3074,37.781),(-122.3048,37.71)]\nFruitvale                     Ave \t[(-122.2158,37.985),(-122.2157,37.987)]\nFruitvale                     Ave \t[(-122.2166,37.966),(-122.2163,37.97)]\nFruitvale                     Ave \t[(-122.2182,37.923),(-122.218,37.929)]\nFruitvale                     Ave \t[(-122.2257,37.754),(-122.2256,37.756)]\nFruitvale                     Ave \t[(-122.2272,37.719),(-122.2269,37.725)]\nFruitvale                     Ave \t[(-122.2285,37.693),(-122.227522,37.71256)]\nFulmar                        Ter \t[(-122.045623,37.80299),(-122.045824,37.80101)]\nFunston Gate                  Ct  \t[(-121.8824,37.847),(-121.883,37.842)]\nFuschia                       Ct  \t[(-122.0204,37.325),(-122.0199,37.323)]\nG                             St  \t[(-122.0167,37.018),(-122.0174,37.013)]\nGable                         Dr  \t[(-121.9178,37.798),(-121.9175,37.799)]\nGading                        Road\t[(-122.0801,37.343),(-122.08,37.336)]\nGading                        Road\t[(-122.0802,37.388),(-122.0802,37.38)]\nGail                          Dr  \t[(-122.0853,37.858),(-122.0854,37.853)]\nGainsborough                  Ct  \t[(-122.2448,37.473),(-122.2447,37.461)]\nGainsborough                  Ter \t[(-122.0369,37.764),(-122.0369,37.756)]\nGalaxy                        Dr  \t[(-122.0675,37.866),(-122.068,37.86)]\nGalindo                       Dr  \t[(-121.9071,37.895),(-121.9041,37.891)]\nGalindo                       St  \t[(-122.2158,37.84),(-122.2149,37.837)]\nGallegos                      Ave \t[(-121.9286,37.324),(-121.9285,37.318)]\nGalleon                       Pl  \t[(-122.178053,37.9223),(-122.177578,37.92252)]\nGalloway                      St  \t[(-121.7473,37.177),(-121.7459,37.18)]\nGalloway Common                   \t[(-121.7459,37.18),(-121.745647,37.17049)]\nGalsworthy                    Ct  \t[(-121.995,37.586),(-121.9955,37.585)]\nGalt                          St  \t[(-122.1507,37.886),(-122.1507,37.88)]\nGalway Bay                        \t[(-122.2473,37.389),(-122.2475,37.384)]\nGamay                         Dr  \t[(-121.9093,37.676),(-121.909,37.67)]\nGanet                         Ter \t[(-122.045424,37.79478),(-122.04533,37.79418)]\nGanton                        Ct  \t[(-122.0379,37.146),(-122.038,37.152)]\nGarden                        Ave \t[(-122.1077,37.626),(-122.1075,37.61)]\nGarfield                      Ave \t[(-122.1718,37.638),(-122.1713,37.632)]\nGarfield                      Ave \t[(-122.1746,37.664),(-122.174,37.66)]\nGarin                         Ave \t[(-122.033003,37.2842),(-122.032,37.282)]\nGarland                       Ct  \t[(-122.0924,37.192),(-122.0926,37.177)]\nGarrison                      Ave \t[(-122.0785,37.075),(-122.0785,37.051)]\nGarrone                       Ave \t[(-122.0498,37.437),(-122.0513,37.434)]\nGarwood Glenn                 Dr  \t[(-122.06406,37.68946),(-122.064269,37.68336)]\nGateview                      Ave \t[(-122.3047,37.921),(-122.3033,37.9)]\nGatewood                      St  \t[(-121.9574,37.185),(-121.9573,37.178)]\nGawain                        Ct  \t[(-122.0251,37.745),(-122.02374,37.7382)]\nGeary                         Road\t[(-121.770923,37.99805),(-121.770222,37.9976)]\nGeary                         Road\t[(-121.7784,37.014),(-121.7986,37.06)]\nGeary                         Road\t[(-121.8277,37.073),(-121.8279,37.082)]\nGem                           Ave \t[(-122.0167,37.823),(-122.0171,37.809)]\nGenoa                         St  \t[(-122.2725,37.46),(-122.2727,37.467)]\nGeorgean                      St  \t[(-122.1024,37.877),(-122.1006,37.892)]\nGertrude                      Dr  \t[(-121.996,37.398),(-121.9966,37.39)]\nGettysburg                    Ave \t[(-122.1089,37.366),(-122.1089,37.357)]\nGiannini                      Ct  \t[(-122.0254,37.16),(-122.0256,37.157)]\nGibbons                       Dr  \t[(-122.2289,37.633),(-122.2283,37.633)]\nGibbons                       Dr  \t[(-122.2325,37.625),(-122.2317,37.629)]\nGibraltar                     Dr  \t[(-121.9025,37.96),(-121.9008,37.96)]\nGibraltar                     Dr  \t[(-122.0202,37.624),(-122.0207,37.619)]\nGibraltar                     Dr  \t[(-122.0242,37.603),(-122.0252,37.608)]\nGibraltar                     Dr  \t[(-122.026,37.613),(-122.026476,37.61522)]\nGilbert                       Pl  \t[(-121.9823,37.655),(-121.9836,37.653)]\nGilman                        St  \t[(-122.2883,37.813),(-122.2877,37.812)]\nGilman                        St  \t[(-122.2942,37.808),(-122.2933,37.81)]\nGilman                        St  \t[(-122.2962,37.803),(-122.2951,37.806)]\nGirvin                        Dr  \t[(-122.1957,37.291),(-122.1904,37.299)]\nGisler                        Way \t[(-122.042,37.285),(-122.0392,37.298)]\nGlacier                       Dr  \t[(-121.8016,37.804),(-121.8017,37.809)]\nGlade                         St  \t[(-122.0819,37.592),(-122.08171,37.5977)]\nGlen                          Ave \t[(-122.2514,37.257),(-122.2505,37.258)]\nGlen                          Dr  \t[(-122.1459,37.316),(-122.1422,37.315)]\nGlen Alpine                   Road\t[(-122.2198,37.223),(-122.2185,37.239),(-122.217349,37.236)]\nGlen Ellen                    Dr  \t[(-122.0479,37.85),(-122.0475,37.851)]\nGlendale                      Dr  \t[(-122.0074,37.46),(-122.0067,37.456)]\nGlenmoor                      Dr  \t[(-122.0046,37.466),(-122.0038,37.461)]\nGlenora                       Way \t[(-121.9143,37.317),(-121.9146,37.316)]\nGlenview                      Dr  \t[(-122.001,37.413),(-122.0002,37.409)]\nGlenwood                      St  \t[(-121.7799,37.771),(-121.7794,37.771)]\nGliddon                       St  \t[(-122.0575,37.066),(-122.058,37.045)]\nGodwit                        Ct  \t[(-122.0141,37.84),(-122.0141,37.845)]\nGold Creek                        \t[(-121.922096,37.88859),(-121.920744,37.88463)]\nGoldcrest                     Cir \t[(-121.8909,37.725),(-121.8917,37.73)]\nGolden Gate                   Way \t[(-122.2378,37.497),(-122.238055,37.49522)]\nGoldengate                    Ave \t[(-122.2324,37.451),(-122.232584,37.45192)]\nGolf                          Dr  \t[(-121.7449,37.136),(-121.7443,37.142)]\nGolf Links                    Road\t[(-122.1425,37.565),(-122.1415,37.569)]\nGolf Links                    Road\t[(-122.1491,37.533),(-122.1482,37.536)]\nGomes                         Road\t[(-121.949156,37.42192),(-121.9493,37.42)]\nGordon                        St  \t[(-122.0405,37.752),(-122.0408,37.748)]\nGordon                        St  \t[(-122.2001,37.788),(-122.1998,37.785)]\nGotubin Common                    \t[(-122.053546,37.59037),(-122.054013,37.58887)]\nGrace                         Ave \t[(-122.276,37.431),(-122.2764,37.43)]\nGraffian                      St  \t[(-122.16774,37.3758),(-122.1677,37.375)]\nGraham                        Ave \t[(-122.0311,37.321),(-122.032,37.31)]\nGraham                        Way \t[(-122.1328,37.128),(-122.1321,37.134)]\nGranada                       Cir \t[(-122.0734,37.229),(-122.0736,37.228)]\nGranada                       Cir \t[(-122.0741,37.234),(-122.0742,37.23)]\nGranada                       Dr  \t[(-122.0734,37.212),(-122.0734,37.207)]\nGranada                       Dr  \t[(-122.0738,37.22),(-122.0736,37.216)]\nGrand                         Ave \t[(-122.2442,37.18),(-122.244,37.184)]\nGrand                         Ave \t[(-122.2479,37.111),(-122.2478,37.115)]\nGrand                         Ave \t[(-122.2684,37.123),(-122.269233,37.12388)]\nGrand                         Ave \t[(-122.2722,37.128),(-122.2729,37.129)]\nGrand                         Ave \t[(-122.2812,37.154),(-122.2823,37.156),(-122.2834,37.159)]\nGrand                         St  \t[(-122.2612,37.637),(-122.2609,37.643)]\nGrand Lake                    Dr  \t[(-122.0553,37.89),(-122.056,37.894)]\nGrand Lake                    Dr  \t[(-122.0591,37.864),(-122.0587,37.861)]\nGrandbrook Park               Ct  \t[(-121.9661,37.136),(-121.9658,37.14)]\nGrandview                     Dr  \t[(-122.229712,37.58234),(-122.230071,37.57618)]\nGrange                        Ter \t[(-122.04547,37.62805),(-122.045749,37.62695)]\nGranger                       Ave \t[(-122.0778,37.984),(-122.0784,37.985)]\nGrant                         Ave \t[(-122.1491,37.732),(-122.1512,37.722)]\nGrant                         Ave \t[(-122.1523,37.717),(-122.1535,37.712)]\nGrant                         Ave \t[(-122.1545,37.703),(-122.1567,37.683)]\nGrant                         St  \t[(-122.2725,37.579),(-122.2723,37.57)]\nGrant                         St  \t[(-122.2729,37.597),(-122.2727,37.588)]\nGrant                         St  \t[(-122.2738,37.632),(-122.2735,37.623)]\nGrant Line                    Road\t[(-121.583469,37.45746),(-121.583118,37.4641)]\nGranville                     Dr  \t[(-122.0105,37.357),(-122.01,37.354)]\nGrass Valley                  Ct  \t[(-122.1194,37.518),(-122.1187,37.516)]\nGrass Valley                  Road\t[(-122.1246,37.764),(-122.1176,37.634)]\nGray Fox                      Cir \t[(-121.84122,37.60072),(-121.841235,37.60161)]\nGrayson                       St  \t[(-122.2883,37.56),(-122.2871,37.563)]\nGrayson                       St  \t[(-122.2916,37.553),(-122.2906,37.556)]\nGreenhills                        \t[(-122.082437,37.05551),(-122.08375,37.05557)]\nGreenly                       Dr  \t[(-122.1595,37.704),(-122.1578,37.696)]\nGreenly                       Dr  \t[(-122.1635,37.727),(-122.161,37.716)]\nGreenridge                    Road\t[(-122.0454,37.151),(-122.043982,37.1588),(-122.0441,37.178)]\nGreens                        Lane\t[(-121.8938,37.339),(-121.894,37.311)]\nGreentree                     Ct  \t[(-121.8851,37.696),(-121.8855,37.692)]\nGreenview                     Dr  \t[(-122.0652,37.907),(-122.064379,37.90817)]\nGreenview                     Dr  \t[(-122.0688,37.905),(-122.0683,37.905),(-122.0663,37.907)]\nGreenville                    Road\t[(-121.6957,37.798),(-121.6956,37.778)]\nGreenville                    Road\t[(-121.6959,37.044),(-121.6959,37.034)]\nGreenville                    Road\t[(-121.6999,37.175),(-121.6993,37.169)]\nGreenwood                     Road\t[(-121.8795,37.705),(-121.8795,37.721)]\nGreenwood                     Road\t[(-121.8795,37.745),(-121.8796,37.766)]\nGreenwood                     Road\t[(-121.8796,37.801),(-121.8796,37.802)]\nGreer                         Ave \t[(-122.1393,37.889),(-122.1401,37.889)]\nGresel                        St  \t[(-122.0345,37.178),(-122.0338,37.182)]\nGresham                       Ct  \t[(-121.8752,37.943),(-121.8754,37.946)]\nGrimmer                       Blvd\t[(-121.9555,37.054),(-121.9534,37.05)]\nGrimmer                       Blvd\t[(-121.9625,37.394),(-121.9633,37.383)]\nGrimmer                       Blvd\t[(-121.9636,37.133),(-121.962341,37.11577)]\nGrimmer                       Blvd\t[(-121.966619,37.178),(-121.966,37.165)]\nGrimmer                       Blvd\t[(-121.967,37.332),(-121.9682,37.315)]\nGrizzly Peak                  Blvd\t[(-122.2112,37.568),(-122.2105,37.561)]\nGrizzly Peak                  Blvd\t[(-122.2213,37.638),(-122.2127,37.581)]\nGrizzly Peak                  Blvd\t[(-122.254,37.915),(-122.2536,37.912)]\nGrizzly Peak                  Blvd\t[(-122.26,37.965),(-122.259,37.952)]\nGrizzly Peak                  Blvd\t[(-122.2689,37.035),(-122.2667,37.02)]\nGrouse                        Way \t[(-122.0136,37.821),(-122.013412,37.83099)]\nGrove                         St  \t[(-122.2364,37.582),(-122.2357,37.59)]\nGrove                         Way \t[(-122.0643,37.884),(-122.062679,37.89162),(-122.061796,37.89578),(-122.0609,37.9)]\nGrove                         Way \t[(-122.078,37.842),(-122.0759,37.843)]\nGrove                         Way \t[(-122.1041,37.76),(-122.102947,37.76318)]\nGrovenor                      Dr  \t[(-122.0893,37.224),(-122.0887,37.209)]\nGulfstream                    St  \t[(-121.8645,37.976),(-121.8645,37.993)]\nGull                          Ct  \t[(-122.0594,37.775),(-122.0595,37.782)]\nGull                          Way \t[(-121.8004,37.846),(-121.7996,37.845)]\nGunn                          Dr  \t[(-122.1902,37.347),(-122.190933,37.35637),(-122.192,37.357)]\nGuthrie                       St  \t[(-121.861539,37.97796),(-121.860503,37.97781)]\nH                             St  \t[(-121.7625,37.766),(-121.7621,37.756)]\nH                             St  \t[(-122.0204,37.974),(-122.0207,37.972)]\nHacienda                      Ave \t[(-122.1192,37.754),(-122.1214,37.746)]\nHacienda                      Ave \t[(-122.1225,37.742),(-122.1235,37.738)]\nHacienda                      Ave \t[(-122.125,37.729),(-122.1259,37.719)]\nHackamore                     Lane\t[(-121.922474,37.86233),(-121.9223,37.863)]\nHackamore                     Lane\t[(-121.924324,37.85594),(-121.9239,37.857)]\nHackamore Com                     \t[(-121.9233,37.864),(-121.922542,37.86411)]\nHaddon                        Pl  \t[(-122.2416,37.099),(-122.2411,37.103)]\nHagemann                      Dr  \t[(-121.79953,37.88118),(-121.7995,37.883)]\nHaight                        Ave \t[(-122.2881,37.767),(-122.2883,37.756)]\nHaley                         St  \t[(-122.0444,37.367),(-122.042309,37.35074)]\nHaley                         St  \t[(-122.0585,37.436),(-122.0579,37.432)]\nHalkin                        Lane\t[(-122.2684,37.983),(-122.2677,37.985)]\nHalliday                      Ave \t[(-122.175147,37.63369),(-122.1747,37.629)]\nHamilton                      Pl  \t[(-122.2592,37.151),(-122.2604,37.16)]\nHamilton                      St  \t[(-122.188,37.549),(-122.1875,37.544)]\nHamlin                        St  \t[(-122.009871,37.36805),(-122.0092,37.365)]\nHampel                        St  \t[(-122.2248,37.078),(-122.2244,37.073)]\nHampton                       Road\t[(-122.1086,37.838),(-122.1073,37.84)]\nHampton                       Road\t[(-122.2146,37.189),(-122.2139,37.183)]\nHampton                       Road\t[(-122.222,37.177),(-122.2209,37.179)]\nHamrick                       Lane\t[(-122.0831,37.344),(-122.0839,37.342)]\nHancock                       Dr  \t[(-121.9569,37.419),(-121.957,37.413)]\nHanly                         Road\t[(-122.2137,37.067),(-122.2135,37.075)]\nHannah                        St  \t[(-122.2854,37.216),(-122.2861,37.237)]\nHanover                       Ave \t[(-122.2488,37.034),(-122.2477,37.037)]\nHanover                       Ave \t[(-122.2536,37.031),(-122.253,37.031)]\nHanover                       St  \t[(-121.789629,37.92481),(-121.7892,37.934)]\nHanover                       St  \t[(-121.7911,37.942),(-121.7923,37.95)]\nHanover                       St  \t[(-121.7939,37.918),(-121.7928,37.918)]\nHansen                        Ave \t[(-122.0121,37.523),(-122.0124,37.519)]\nHansen                        Dr  \t[(-121.8984,37.7),(-121.898897,37.69774)]\nHansen                        Road\t[(-122.0551,37.706),(-122.055,37.712)]\nHansom                        Dr  \t[(-122.1369,37.75),(-122.1354,37.726)]\nHappy Valley                  Road\t[(-121.877541,37.35652),(-121.871788,37.33636)]\nHappy Valley                  Road\t[(-121.879849,37.36461),(-121.877975,37.35804)]\nHappyland                     Ave \t[(-122.1044,37.666),(-122.104441,37.66152)]\nHarbor Bay                    Pkwy\t[(-122.233076,37.25225),(-122.236357,37.2515),(-122.2385,37.251)]\nHarbor Light                  Road\t[(-122.2667,37.606),(-122.2651,37.631)]\nHarbor View                   Ave \t[(-122.1872,37.927),(-122.1866,37.921)]\nHarder                        Road\t[(-122.0693,37.506),(-122.0688,37.506)]\nHarder                        Road\t[(-122.0793,37.489),(-122.0802,37.488)]\nHarlan                        St  \t[(-122.1477,37.195),(-122.151,37.182)]\nHarlon                        Ct  \t[(-122.0223,37.447),(-122.0229,37.445)]\nHarmon                        Ave \t[(-122.194,37.68),(-122.1924,37.664),(-122.1911,37.652)]\nHarpers Ferry                 Ct  \t[(-121.9019,37.758),(-121.902271,37.7633)]\nHarrington                    Ave \t[(-122.2115,37.847),(-122.2108,37.851)]\nHarris                        Road\t[(-122.0659,37.372),(-122.0675,37.363)]\nHarris                        Road\t[(-122.0681,37.36),(-122.0705,37.347)]\nHarrisburg                    Ave \t[(-122.011,37.776),(-122.0113,37.773)]\nHarrison                      St  \t[(-122.1539,37.268),(-122.1535,37.259)]\nHarrison                      St  \t[(-122.2544,37.197),(-122.2542,37.199)]\nHarrison                      St  \t[(-122.2577,37.172),(-122.2569,37.176)]\nHarrison                      St  \t[(-122.2621,37.108),(-122.262,37.11)]\nHarrison                      St  \t[(-122.2722,37.952),(-122.2717,37.958)]\nHarrison St                   Ramp\t[(-122.262,37.11),(-122.2613,37.114)]\nHartford                      Dr  \t[(-122.0297,37.94),(-122.0295,37.944)]\nHartley Gate                  Ct  \t[(-121.8803,37.863),(-121.8812,37.871)]\nHartman                       Road\t[(-121.7876,37.217),(-121.7953,37.211)]\nHarvard                       Way \t[(-121.754,37.805),(-121.7508,37.806)]\nHarvest                       Road\t[(-121.8797,37.687),(-121.8807,37.691)]\nHarwood                       Ave \t[(-122.2471,37.497),(-122.2466,37.498)]\nHarwood                       Ave \t[(-122.25,37.489),(-122.2475,37.495)]\nHaskell                       St  \t[(-122.2825,37.512),(-122.2805,37.516)]\nHathaway                      Ave \t[(-122.1109,37.742),(-122.1105,37.739)]\nHavasu                        St  \t[(-121.9209,37.887),(-121.9204,37.878)]\nHavenscourt                   Blvd\t[(-122.1891,37.634),(-122.1888,37.638),(-122.1882,37.643)]\nHaverhill                     Dr  \t[(-122.1938,37.246),(-122.1915,37.242)]\nHawkins                       St  \t[(-121.969533,37.36702),(-121.9703,37.358)]\nHawley                        St  \t[(-122.1921,37.531),(-122.1915,37.526)]\nHawthorne                     Ter \t[(-122.261,37.825),(-122.262,37.823)]\nHayfield                      Road\t[(-121.8292,37.314),(-121.8281,37.295)]\nHays                          St  \t[(-122.1538,37.203),(-122.1533,37.194)]\nHayward                       Blvd\t[(-122.0224,37.563),(-122.0179,37.544)]\nHayward                       Blvd\t[(-122.0335,37.552),(-122.032996,37.55094)]\nHayward                       Blvd\t[(-122.03757,37.5596),(-122.033997,37.55449)]\nHayward                       Blvd\t[(-122.0383,37.556),(-122.0381,37.557)]\nHayward                       Blvd\t[(-122.050043,37.58583),(-122.0484,37.574),(-122.047,37.556)]\nHearst                        Ave \t[(-122.2551,37.757),(-122.2545,37.758)]\nHearst                        Ave \t[(-122.2691,37.738),(-122.268,37.74)]\nHearst                        Ave \t[(-122.2726,37.734),(-122.2715,37.735)]\nHearst                        Ave \t[(-122.277,37.727),(-122.2748,37.731)]\nHearst                        Ave \t[(-122.2858,37.714),(-122.2847,37.715)]\nHearst                        Ave \t[(-122.2918,37.704),(-122.2887,37.709)]\nHearst                        Ave \t[(-122.3027,37.682),(-122.3019,37.685)]\nHeartwood                     Dr  \t[(-122.2006,37.341),(-122.1992,37.338)]\nHeathrow                      Ter \t[(-122.057185,37.55699),(-122.056911,37.55223)]\nHebrides                      Ct  \t[(-122.0343,37.529),(-122.034,37.531)]\nHegenberger                   Exwy\t[(-122.1874,37.572),(-122.1891,37.56)]\nHegenberger                   Exwy\t[(-122.1946,37.52),(-122.1947,37.497)]\nHegenberger                   Road\t[(-122.1953,37.401),(-122.1953,37.404)]\nHegenberger                   Road\t[(-122.1955,37.378),(-122.1954,37.385)]\nHeidelberg                    Dr  \t[(-121.7692,37.638),(-121.7714,37.645)]\nHeidelberg                    Dr  \t[(-121.7761,37.614),(-121.7751,37.614)]\nHeinz                         Ave \t[(-122.2953,37.527),(-122.2912,37.536)]\nHellman                       St  \t[(-122.1403,37.471),(-122.1406,37.464)]\nHelsinki                      Way \t[(-121.7753,37.659),(-121.7744,37.658)]\nHemlock                       Ter \t[(-121.986875,37.25649),(-121.986744,37.25571)]\nHenry                         St  \t[(-122.2706,37.857),(-122.2704,37.843)]\nHeritage                      Ter \t[(-121.997217,37.55076),(-121.997913,37.54319)]\nHerman                        Ave \t[(-121.7163,37.123),(-121.7164,37.142)]\nHermes                        Ct  \t[(-122.0786,37.516),(-122.0784,37.514)]\nHermitage                     Ave \t[(-122.0542,37.384),(-122.0566,37.368)]\nHermitage                     Ct  \t[(-121.7295,37.263),(-121.729426,37.26819)]\nHermitage                     Lane\t[(-122.0362,37.137),(-122.0354,37.136)]\nHermosa                       Ave \t[(-122.2309,37.415),(-122.231,37.404),(-122.2301,37.404)]\nHerrier                       St  \t[(-122.1943,37.006),(-122.1936,37.998)]\nHerrin                        Way \t[(-121.9098,37.888),(-121.91,37.893)]\nHesperian                     Blvd\t[(-122.0878,37.182),(-122.0873,37.174)]\nHesperian                     Blvd\t[(-122.088064,37.18684),(-122.087886,37.18358)]\nHesperian                     Blvd\t[(-122.0916,37.245),(-122.0896,37.214)]\nHesperian                     Blvd\t[(-122.097,37.333),(-122.0956,37.31),(-122.0946,37.293)]\nHesperian                     Blvd\t[(-122.1079,37.513),(-122.1076,37.507)]\nHesperian                     Blvd\t[(-122.1102,37.551),(-122.1091,37.534)]\nHesperian                     Blvd\t[(-122.1132,37.6),(-122.1123,37.586)]\nHesperian                     Blvd\t[(-122.1257,37.792),(-122.1251,37.781)]\nHesperian                     Blvd\t[(-122.1287,37.989),(-122.1287,37.984)]\nHesperian                     Blvd\t[(-122.1288,37.922),(-122.1288,37.913)]\nHesse                         Dr  \t[(-122.0782,37.208),(-122.0782,37.204)]\nHetch Hetchy Aqueduct             \t[(-121.635378,37.0634),(-121.630012,37.07482)]\nHetch Hetchy Aqueduct             \t[(-121.687586,37.92102),(-121.686938,37.92241)]\nHetch Hetchy Aqueduct             \t[(-121.74008,37.81072),(-121.739425,37.81211)]\nHetch Hetchy Aqueduct             \t[(-121.9355,37.477),(-121.9169,37.53)]\nHetch Hetchy Aqueduct             \t[(-121.9465,37.448),(-121.945888,37.4496)]\nHetch Hetchy Aqueduct             \t[(-121.94968,37.4388),(-121.9488,37.441)]\nHetch Hetchy Aqueduct             \t[(-121.9615,37.407),(-121.960853,37.40854)]\nHetch Hetchy Aqueduct             \t[(-122.0007,37.313),(-122.0005,37.313)]\nHetch Hetchy Aqueduct             \t[(-122.0233,37.291),(-122.020432,37.29388)]\nHetch Hetchy Aqueduct             \t[(-122.0255,37.283),(-122.0245,37.286)]\nHetch Hetchy Aqueduct             \t[(-122.039,37.25),(-122.0404,37.247)]\nHeyer                         Ave \t[(-122.0673,37.044),(-122.0657,37.044)]\nHibiscus                      Ave \t[(-121.999801,37.80223),(-121.9993,37.8)]\nHickory                       Lane\t[(-121.9163,37.102),(-121.91604,37.1072)]\nHickory                       St  \t[(-122.0524,37.214),(-122.0523,37.211)]\nHidalgo                       Ct  \t[(-121.9505,37.614),(-121.9512,37.608)]\nHidden                        Lane\t[(-122.0553,37.757),(-122.05301,37.75242),(-122.0503,37.747)]\nHiggins                       Way \t[(-121.9433,37.392),(-121.9424,37.392)]\nHigh                          St  \t[(-121.9601,37.381),(-121.95938,37.3774)]\nHigh                          St  \t[(-122.1901,37.889),(-122.1899,37.891)]\nHigh                          St  \t[(-122.199,37.845),(-122.1983,37.849)]\nHigh                          St  \t[(-122.2007,37.837),(-122.1997,37.842)]\nHigh                          St  \t[(-122.2151,37.712),(-122.2145,37.716)]\nHigh                          St  \t[(-122.2233,37.647),(-122.2226,37.652)]\nHigh                          St  \t[(-122.2281,37.605),(-122.2273,37.611),(-122.2267,37.618)]\nHigh                          St  \t[(-122.2295,37.592),(-122.2288,37.597)]\nHigh                          St  \t[(-122.2379,37.514),(-122.2367,37.526)]\nHighland                      Ave \t[(-122.2286,37.21),(-122.2285,37.2)]\nHilgard                       Ave \t[(-122.2603,37.787),(-122.2585,37.789)]\nHilgard                       Ave \t[(-122.2638,37.782),(-122.2624,37.783)]\nHill                          Road\t[(-122.2498,37.881),(-122.2486,37.868)]\nHillcrest                     Ave \t[(-121.7472,37.839),(-121.7473,37.834)]\nHillcrest                     Ave \t[(-122.0492,37.591),(-122.0485,37.587)]\nHillcroft                     Cir \t[(-122.2304,37.089),(-122.2301,37.093)]\nHilldale                      Ave \t[(-122.2629,37.96),(-122.2624,37.956)]\nHillegass                     Ave \t[(-122.2541,37.503),(-122.2543,37.513)]\nHillegass                     Ave \t[(-122.2545,37.561),(-122.2541,37.539)]\nHillegass                     Ave \t[(-122.2557,37.619),(-122.2554,37.601)]\nHiller                        Dr  \t[(-122.2275,37.551),(-122.2263,37.542)]\nHiller                        Dr  \t[(-122.228415,37.50849),(-122.2284,37.508)]\nHillgirt                      Cir \t[(-122.2429,37.079),(-122.2424,37.076)]\nHillside                      Ave \t[(-121.997183,37.84571),(-121.998118,37.83759),(-121.9983,37.836)]\nHillside                      Ct  \t[(-122.2345,37.231),(-122.2342,37.225)]\nHillside                      St  \t[(-122.1628,37.561),(-122.1625,37.553)]\nHilltop                       Cres\t[(-122.2256,37.329),(-122.2246,37.319)]\nHillview                      Ct  \t[(-121.9178,37.841),(-121.9191,37.838)]\nHillview                      Road\t[(-122.253,37.934),(-122.25,37.92)]\nHilsadne                      Ter \t[(-122.046919,37.64183),(-122.04699,37.6443)]\nHilton                        St  \t[(-122.03,37.877),(-122.0305,37.864)]\nHobart                        Ct  \t[(-121.9108,37.709),(-121.9102,37.711)]\nHochler                       Dr  \t[(-121.9111,37.317),(-121.9099,37.305)]\nHogan                         Pl  \t[(-121.7696,37.507),(-121.7689,37.502)]\nHoliday                       St  \t[(-122.0421,37.306),(-122.0418,37.304)]\nHolladay                      Ct  \t[(-121.7773,37.842),(-121.778,37.841)]\nHolland                       Dr  \t[(-121.9115,37.798),(-121.9118,37.801)]\nHolland                       Dr  \t[(-121.9124,37.814),(-121.9126,37.821)]\nHolland                       St  \t[(-122.2038,37.688),(-122.2016,37.677)]\nHollis                        St  \t[(-122.2851,37.314),(-122.2857,37.332)]\nHollis                        St  \t[(-122.2866,37.355),(-122.2869,37.362)]\nHollis                        St  \t[(-122.2885,37.397),(-122.289,37.414)]\nHollis                        St  \t[(-122.2894,37.428),(-122.2895,37.433)]\nHollis                        St  \t[(-122.2901,37.45),(-122.2903,37.458)]\nHollis                        St  \t[(-122.291,37.48),(-122.2913,37.49)]\nHolly                         St  \t[(-122.1715,37.488),(-122.1704,37.472)]\nHolly                         St  \t[(-122.1742,37.532),(-122.1737,37.526)]\nHolly                         St  \t[(-122.2393,37.3),(-122.2395,37.297)]\nHollyhock                     Dr  \t[(-122.131813,37.99633),(-122.1306,37.997)]\nHolmes                        St  \t[(-121.7784,37.776),(-121.778512,37.7704)]\nHolmes                        St  \t[(-121.7789,37.751),(-121.7789,37.747)]\nHolmes                        St  \t[(-121.7794,37.697),(-121.7794,37.67)]\nHolmes                        St  \t[(-121.7816,37.566),(-121.7818,37.56)]\nHolt                          St  \t[(-122.063,37.813),(-122.063508,37.80257)]\nHoneysuckle                   Road\t[(-121.7458,37.102),(-121.745,37.096)]\nHooper                        St  \t[(-121.955964,37.28079),(-121.95582,37.27507)]\nHoover                        Ave \t[(-122.2088,37.116),(-122.2086,37.115)]\nHop Ranch                     Road\t[(-122.0461,37.942),(-122.045974,37.92945)]\nHopkins                       Ct  \t[(-122.2829,37.819),(-122.2822,37.822)]\nHopkins                       St  \t[(-122.0778,37.184),(-122.0775,37.159)]\nHopkins                       St  \t[(-122.284,37.802),(-122.2834,37.805)]\nHopyard                       Road\t[(-121.8828,37.674),(-121.8833,37.678)]\nHopyard                       Road\t[(-121.9026,37.975),(-121.9033,37.985)]\nHoratio                       Way \t[(-122.0499,37.781),(-122.0505,37.774)]\nHospital                      Dr  \t[(-122.257,37.548),(-122.2559,37.549)]\nHotchkiss                     St  \t[(-121.9283,37.947),(-121.9287,37.958)]\nHowe                          Ct  \t[(-121.9514,37.252),(-121.9544,37.25)]\nHowe                          St  \t[(-122.2541,37.265),(-122.2537,37.267)]\nHoyt                          St  \t[(-121.9195,37.842),(-121.9184,37.824)]\nHubbard                       Ave \t[(-122.1585,37.914),(-122.1602,37.914)]\nHuber                         Dr  \t[(-122.0904,37.09),(-122.09042,37.0804),(-122.0901,37.074)]\nHudson                        Lane\t[(-122.1483,37.14),(-122.149,37.137)]\nHugh                          Way \t[(-122.0322,37.185),(-122.0317,37.18)]\nHula                          Cir \t[(-122.0465,37.869),(-122.0468,37.875)]\nHumboldt                      Ave \t[(-122.2145,37.872),(-122.2133,37.879)]\nHummingbird                   Road\t[(-121.8824,37.777),(-121.8853,37.773)]\nHummingbird                   Road\t[(-121.8862,37.774),(-121.8871,37.774)]\nHunter                        Ave \t[(-122.1824,37.312),(-122.1816,37.339)]\nHuntington                    St  \t[(-122.1866,37.895),(-122.186,37.899)]\nHuntwood                      Ave \t[(-122.0531,37.093),(-122.0531,37.078)]\nHuntwood                      Ave \t[(-122.06,37.279),(-122.0598,37.273)]\nHuntwood                      Ave \t[(-122.0641,37.336),(-122.063367,37.32585),(-122.0628,37.318)]\nHuntwood                      Ave \t[(-122.0781,37.48),(-122.0774,37.473)]\nHutton                        Ct  \t[(-121.9826,37.274),(-121.9822,37.272)]\nHyde                          St  \t[(-122.2198,37.883),(-122.2171,37.872)]\nI                             St  \t[(-121.7655,37.798),(-121.7652,37.791)]\nI                             St  \t[(-121.7675,37.848),(-121.7682,37.857)]\nI- 205                            \t((-121.573292,37.41726),(-121.571644,37.42),(-121.563557,37.42641))\nI- 205                            \t[(-121.572819,37.42107),(-121.571705,37.42168),(-121.563557,37.42641),(-121.560856,37.42885),(-121.559467,37.42946),(-121.559055,37.42939),(-121.558781,37.42992),(-121.556644,37.43214),(-121.5559,37.434)]\nI- 580                            \t((-121.628147,37.33089),(-121.605091,37.3605),(-121.589344,37.3946),(-121.58118,37.41062),(-121.573292,37.41726),(-121.571644,37.41779),(-121.55843,37.40406))\nI- 580                            \t((-121.628147,37.33089),(-121.629246,37.32464),(-121.644337,37.2411),(-121.654377,37.20798),(-121.654356,37.20723),(-121.654926,37.20531),(-121.658827,37.19552))\nI- 580                            \t((-121.727,37.074),(-121.7255,37.083),(-121.7234,37.092),(-121.723,37.095),(-121.721995,37.09859),(-121.7216,37.1),(-121.7211,37.102),(-121.7188,37.109))\nI- 580                            \t((-122.1752,37.826),(-122.177,37.833))\nI- 580                            \t((-122.2029,37.928),(-122.2036,37.933),(-122.2043,37.938))\nI- 580                            \t((-122.2535,37.196),(-122.2539,37.2))\nI- 580                            \t((-122.2744,37.262),(-122.2746,37.263),(-122.2774,37.27),(-122.278,37.271),(-122.2792,37.274),(-122.2806,37.275),(-122.2817,37.276),(-122.2828,37.276),(-122.2837,37.276))\nI- 580                            \t((-122.2837,37.276),(-122.2849,37.273),(-122.286,37.27),(-122.2868,37.269),(-122.2871,37.266),(-122.2882,37.265),(-122.2893,37.266))\nI- 580                            \t[(-121.560856,37.42885),(-121.55843,37.40406),(-121.557655,37.39926),(-121.556,37.389)]\nI- 580                            \t[(-121.628757,37.34287),(-121.600742,37.38407),(-121.588856,37.40124),(-121.580494,37.41451),(-121.572819,37.42107)]\nI- 580                            \t[(-121.628757,37.34287),(-121.630009,37.33791),(-121.657688,37.20089),(-121.658827,37.19552),(-121.659626,37.19326),(-121.660816,37.18952)]\nI- 580                            \t[(-121.664341,37.1822),(-121.662081,37.18693),(-121.661812,37.18746),(-121.660816,37.18952)]\nI- 580                            \t[(-121.664341,37.1822),(-121.666965,37.18166),(-121.6697,37.185)]\nI- 580                            \t[(-121.727,37.074),(-121.7229,37.093),(-121.722301,37.09522),(-121.721001,37.10005),(-121.7194,37.106),(-121.7188,37.109),(-121.7168,37.12),(-121.7163,37.123),(-121.7145,37.127),(-121.7096,37.148),(-121.707731,37.1568),(-121.7058,37.166),(-121.7055,37.168),(-121.7044,37.174),(-121.7038,37.172),(-121.7037,37.172),(-121.7027,37.175),(-121.7001,37.181),(-121.6957,37.191),(-121.6948,37.192),(-121.6897,37.204),(-121.6697,37.185)]\nI- 580                            \t[(-121.727,37.074),(-121.7275,37.072),(-121.7331,37.046)]\nI- 580                            \t[(-121.7705,37.013),(-121.769039,37.01504),(-121.7583,37.03),(-121.7557,37.03),(-121.754805,37.02966),(-121.750803,37.02812),(-121.75,37.02738),(-121.7489,37.026),(-121.7453,37.024),(-121.7438,37.024),(-121.7411,37.024),(-121.740416,37.02505),(-121.739035,37.02719),(-121.7379,37.028),(-121.736275,37.03278),(-121.7362,37.033),(-121.7358,37.034),(-121.7331,37.046)]\nI- 580                            \t[(-121.8585,37.013),(-121.8521,37.011),(-121.8485,37.011),(-121.8463,37.011),(-121.8455,37.011),(-121.8416,37.011),(-121.8414,37.011),(-121.834001,37.0104),(-121.8292,37.01),(-121.8288,37.009),(-121.82332,37.00833),(-121.8206,37.008)]\nI- 580                            \t[(-121.8585,37.013),(-121.863393,37.01213),(-121.8641,37.012)]\nI- 580                            \t[(-121.9214,37.015),(-121.9189,37.02),(-121.918,37.02),(-121.9087,37.017),(-121.90609,37.01797),(-121.906,37.018)]\nI- 580                            \t[(-121.9214,37.015),(-121.9217,37.014)]\nI- 580                            \t[(-121.9322,37.989),(-121.9243,37.006),(-121.9217,37.014)]\nI- 580                            \t[(-122.018,37.019),(-122.0009,37.032),(-121.9787,37.983),(-121.958,37.984),(-121.9571,37.986)]\nI- 580                            \t[(-122.0911,37.906),(-122.09,37.908),(-122.0882,37.908),(-122.0856,37.909),(-122.078489,37.909),(-122.0726,37.909),(-122.0711,37.91),(-122.068287,37.91137),(-122.0649,37.914)]\nI- 580                            \t[(-122.098,37.908),(-122.0965,37.904),(-122.095586,37.903),(-122.0953,37.903),(-122.0943,37.902),(-122.0938,37.903),(-122.093241,37.90351)]\nI- 580                            \t[(-122.1108,37.023),(-122.1101,37.02),(-122.108103,37.00764),(-122.108,37.007),(-122.1069,37.998),(-122.1064,37.994),(-122.1053,37.982),(-122.1048,37.977),(-122.1032,37.958),(-122.1026,37.953),(-122.1013,37.938),(-122.0989,37.911),(-122.0984,37.91),(-122.098,37.908)]\nI- 580                            \t[(-122.1306,37.157),(-122.1298,37.147),(-122.1277,37.122),(-122.126709,37.11468),(-122.1254,37.105),(-122.125,37.103),(-122.1237,37.096),(-122.1231,37.093),(-122.1214,37.082),(-122.1183,37.066),(-122.116,37.052),(-122.1153,37.048),(-122.1108,37.023)]\nI- 580                            \t[(-122.1543,37.703),(-122.1535,37.694),(-122.1512,37.655),(-122.1475,37.603),(-122.1468,37.583),(-122.1472,37.569),(-122.149044,37.54874),(-122.1493,37.546),(-122.1501,37.532),(-122.1506,37.509),(-122.1495,37.482),(-122.1487,37.467),(-122.1477,37.447),(-122.1414,37.383),(-122.1404,37.376),(-122.1398,37.372),(-122.139,37.356),(-122.1388,37.353),(-122.1385,37.34),(-122.1382,37.33),(-122.1378,37.316)]\nI- 580                            \t[(-122.1716,37.805),(-122.1703,37.799),(-122.170042,37.79758),(-122.169413,37.79411),(-122.167295,37.78244),(-122.166339,37.77717),(-122.165224,37.77112),(-122.1648,37.769)]\nI- 580                            \t[(-122.1716,37.805),(-122.1728,37.811),(-122.1742,37.817)]\nI- 580                            \t[(-122.177,37.833),(-122.1789,37.838)]\nI- 580                            \t[(-122.2043,37.938),(-122.204734,37.94074),(-122.2062,37.95),(-122.207492,37.95608),(-122.2079,37.958),(-122.2085,37.962)]\nI- 580                            \t[(-122.2197,37.99),(-122.22,37.99),(-122.222092,37.99523),(-122.2232,37.998),(-122.224146,37.99963),(-122.2261,37.003),(-122.2278,37.007),(-122.2302,37.026),(-122.2323,37.043),(-122.2344,37.059),(-122.235405,37.06427),(-122.2365,37.07)]\nI- 580                            \t[(-122.2535,37.196),(-122.2533,37.196)]\nI- 580                            \t[(-122.2539,37.2),(-122.2541,37.201)]\nI- 580                            \t[(-122.2613,37.23),(-122.2601,37.22833),(-122.2611,37.231),(-122.2639,37.238),(-122.2646,37.241),(-122.2654,37.242)]\nI- 580                            \t[(-122.2613,37.23),(-122.263448,37.23307),(-122.2647,37.23486),(-122.2655,37.236),(-122.2664,37.238)]\nI- 580                            \t[(-122.2664,37.238),(-122.2675,37.243)]\nI- 580                            \t[(-122.2675,37.243),(-122.2677,37.243),(-122.2681,37.244)]\nI- 580                            \t[(-122.2679,37.248),(-122.2681,37.248)]\nI- 580                            \t[(-122.2744,37.262),(-122.2734,37.259),(-122.2695,37.247),(-122.268532,37.2449),(-122.268237,37.24426),(-122.2681,37.244)]\nI- 580                            \t[(-122.2893,37.266),(-122.2904,37.27),(-122.2909,37.273)]\nI- 580                            \t[(-122.2901,37.274),(-122.2905,37.278),(-122.2921,37.286),(-122.2927,37.299)]\nI- 580                            \t[(-122.2909,37.273),(-122.2918,37.279),(-122.2923,37.282)]\nI- 580                            \t[(-122.2928,37.293),(-122.2931,37.301)]\nI- 580                        Ramp\t((-121.74,37.036),(-121.7393,37.033),(-121.7384,37.032))\nI- 580                        Ramp\t((-121.7843,37.996),(-121.784294,37.99539),(-121.7842,37.985))\nI- 580                        Ramp\t((-121.818,37.011),(-121.8187,37.014))\nI- 580                        Ramp\t((-121.8185,37.008),(-121.8187,37.001))\nI- 580                        Ramp\t((-121.9025,37.018),(-121.9037,37.022),(-121.9059,37.029))\nI- 580                        Ramp\t((-121.9335,37.987),(-121.9331,37.979))\nI- 580                        Ramp\t((-122.0206,37.007),(-122.0203,37.015))\nI- 580                        Ramp\t((-122.1202,37.085),(-122.1203,37.083))\nI- 580                        Ramp\t((-122.1522,37.526),(-122.1514,37.524))\nI- 580                        Ramp\t((-122.2541,37.201),(-122.254,37.205))\nI- 580                        Ramp\t((-122.2646,37.241),(-122.2653,37.244),(-122.266,37.245))\nI- 580                        Ramp\t((-122.2654,37.242),(-122.266,37.245),(-122.2671,37.245))\nI- 580                        Ramp\t((-122.2786,37.288),(-122.2798,37.286),(-122.2804,37.285),(-122.2814,37.282),(-122.2818,37.28))\nI- 580                        Ramp\t((-122.2796,37.289),(-122.2818,37.283),(-122.2822,37.281))\nI- 580                        Ramp\t[(-121.657688,37.20089),(-121.658176,37.20089),(-121.659977,37.19715),(-121.660232,37.1965),(-121.661524,37.18996),(-121.662081,37.18693)]\nI- 580                        Ramp\t[(-121.660816,37.18952),(-121.659428,37.19105),(-121.658115,37.19272),(-121.657078,37.19639),(-121.654926,37.20531)]\nI- 580                        Ramp\t[(-121.7218,37.088),(-121.722301,37.09522)]\nI- 580                        Ramp\t[(-121.7231,37.108),(-121.7211,37.102)]\nI- 580                        Ramp\t[(-121.7232,37.103),(-121.7222,37.103),(-121.721995,37.09859)]\nI- 580                        Ramp\t[(-121.7232,37.103),(-121.7234,37.092)]\nI- 580                        Ramp\t[(-121.7255,37.083),(-121.7232,37.114)]\nI- 580                        Ramp\t[(-121.727,37.074),(-121.7237,37.084),(-121.723311,37.0823),(-121.7221,37.077),(-121.7219,37.081),(-121.720744,37.09257),(-121.7194,37.106)]\nI- 580                        Ramp\t[(-121.739,37.02),(-121.738298,37.02506),(-121.737988,37.02686),(-121.7379,37.028)]\nI- 580                        Ramp\t[(-121.739,37.02),(-121.7402,37.015)]\nI- 580                        Ramp\t[(-121.74,37.034),(-121.7409,37.034),(-121.7401,37.029),(-121.7384,37.032),(-121.7358,37.034)]\nI- 580                        Ramp\t[(-121.7411,37.024),(-121.7401,37.018),(-121.7401,37.024)]\nI- 580                        Ramp\t[(-121.7438,37.024),(-121.742961,37.02896),(-121.7416,37.037),(-121.74,37.039)]\nI- 580                        Ramp\t[(-121.7743,37.006),(-121.7729,37.006),(-121.7705,37.013)]\nI- 580                        Ramp\t[(-121.7743,37.006),(-121.7729,37.013),(-121.7705,37.013)]\nI- 580                        Ramp\t[(-121.7865,37.995),(-121.7852,37.992),(-121.7842,37.985),(-121.7838,37.966),(-121.7834,37.957)]\nI- 580                        Ramp\t[(-121.7891,37.998),(-121.7854,37.999),(-121.78441,37.9963),(-121.7843,37.996)]\nI- 580                        Ramp\t[(-121.8195,37.007),(-121.8187,37.014),(-121.8179,37.015)]\nI- 580                        Ramp\t[(-121.8206,37.008),(-121.8187,37.001),(-121.8179,37.005)]\nI- 580                        Ramp\t[(-121.8454,37.01),(-121.8455,37.011)]\nI- 580                        Ramp\t[(-121.8463,37.011),(-121.8496,37.025)]\nI- 580                        Ramp\t[(-121.8521,37.011),(-121.8479,37.999),(-121.8476,37.999),(-121.8456,37.01),(-121.8455,37.011)]\nI- 580                        Ramp\t[(-121.8521,37.011),(-121.8496,37.025)]\nI- 580                        Ramp\t[(-121.866951,37.01385),(-121.871381,37.02608)]\nI- 580                        Ramp\t[(-121.8695,37.013),(-121.8712,37.011),(-121.8717,37.001),(-121.8714,37.001)]\nI- 580                        Ramp\t[(-121.8713,37.014),(-121.871352,37.02321)]\nI- 580                        Ramp\t[(-121.8743,37.014),(-121.8722,37.999),(-121.8714,37.999)]\nI- 580                        Ramp\t[(-121.9043,37.998),(-121.9036,37.013),(-121.902632,37.0174),(-121.9025,37.018)]\nI- 580                        Ramp\t[(-121.906,37.018),(-121.9056,37.011)]\nI- 580                        Ramp\t[(-121.906,37.018),(-121.905635,37.0239),(-121.9065,37.023)]\nI- 580                        Ramp\t[(-121.906,37.018),(-121.906044,37.02416),(-121.906177,37.02331),(-121.906315,37.02115)]\nI- 580                        Ramp\t[(-121.9068,37.027),(-121.9059,37.029),(-121.9078,37.04)]\nI- 580                        Ramp\t[(-121.9087,37.017),(-121.9056,37.003),(-121.905,37.004)]\nI- 580                        Ramp\t[(-121.9087,37.017),(-121.907194,37.02619),(-121.9071,37.029),(-121.9072,37.033)]\nI- 580                        Ramp\t[(-121.9335,37.987),(-121.9341,37.991),(-121.9345,37.985)]\nI- 580                        Ramp\t[(-121.9345,37.985),(-121.9341,37.978)]\nI- 580                        Ramp\t[(-121.9364,37.986),(-121.9338,37.971),(-121.9331,37.979),(-121.9322,37.989)]\nI- 580                        Ramp\t[(-121.9368,37.986),(-121.936483,37.98832),(-121.9353,37.997),(-121.93504,37.00035),(-121.9346,37.006),(-121.933764,37.00031),(-121.9333,37.997),(-121.9322,37.989)]\nI- 580                        Ramp\t[(-121.9562,37.984),(-121.9565,37.98)]\nI- 580                        Ramp\t[(-121.9571,37.986),(-121.9565,37.98)]\nI- 580                        Ramp\t[(-121.958,37.984),(-121.9565,37.98)]\nI- 580                        Ramp\t[(-122.0195,37.012),(-122.0184,37.009),(-122.018,37.019)]\nI- 580                        Ramp\t[(-122.0195,37.012),(-122.0203,37.015),(-122.0212,37.02)]\nI- 580                        Ramp\t[(-122.0531,37.932),(-122.0544,37.941)]\nI- 580                        Ramp\t[(-122.0649,37.914),(-122.0618,37.916),(-122.0604,37.92)]\nI- 580                        Ramp\t[(-122.0649,37.914),(-122.0639,37.92),(-122.063,37.923)]\nI- 580                        Ramp\t[(-122.0884,37.911),(-122.0856,37.909)]\nI- 580                        Ramp\t[(-122.093241,37.90351),(-122.09364,37.89634),(-122.093788,37.89212)]\nI- 580                        Ramp\t[(-122.0934,37.896),(-122.09257,37.89961),(-122.0911,37.906)]\nI- 580                        Ramp\t[(-122.0941,37.897),(-122.0943,37.902)]\nI- 580                        Ramp\t[(-122.0953,37.903),(-122.0971,37.911),(-122.0943,37.902)]\nI- 580                        Ramp\t[(-122.096,37.888),(-122.0962,37.891),(-122.0964,37.9)]\nI- 580                        Ramp\t[(-122.101,37.898),(-122.1005,37.902),(-122.0989,37.911)]\nI- 580                        Ramp\t[(-122.108,37.007),(-122.1093,37.02)]\nI- 580                        Ramp\t[(-122.1086,37.003),(-122.1068,37.993),(-122.1066,37.992),(-122.1053,37.982)]\nI- 580                        Ramp\t[(-122.1086,37.003),(-122.1103,37.018),(-122.1108,37.023),(-122.1093,37.02)]\nI- 580                        Ramp\t[(-122.1206,37.088),(-122.1203,37.083),(-122.1183,37.066)]\nI- 580                        Ramp\t[(-122.1215,37.075),(-122.1183,37.066)]\nI- 580                        Ramp\t[(-122.1226,37.099),(-122.1238,37.102),(-122.1254,37.105)]\nI- 580                        Ramp\t[(-122.1237,37.096),(-122.1234,37.09)]\nI- 580                        Ramp\t[(-122.1311,37.177),(-122.1306,37.157)]\nI- 580                        Ramp\t[(-122.1338,37.222),(-122.135,37.227)]\nI- 580                        Ramp\t[(-122.1362,37.248),(-122.1374,37.249)]\nI- 580                        Ramp\t[(-122.1371,37.279),(-122.1367,37.264)]\nI- 580                        Ramp\t[(-122.1371,37.279),(-122.1381,37.262)]\nI- 580                        Ramp\t[(-122.1378,37.316),(-122.1374,37.311),(-122.1373,37.307),(-122.1367,37.296)]\nI- 580                        Ramp\t[(-122.1379,37.282),(-122.1371,37.279)]\nI- 580                        Ramp\t[(-122.1391,37.367),(-122.1388,37.353)]\nI- 580                        Ramp\t[(-122.1414,37.383),(-122.1407,37.376),(-122.1403,37.372),(-122.139,37.356)]\nI- 580                        Ramp\t[(-122.1487,37.467),(-122.1476,37.454)]\nI- 580                        Ramp\t[(-122.1493,37.546),(-122.1508,37.535)]\nI- 580                        Ramp\t[(-122.1495,37.482),(-122.1489,37.452)]\nI- 580                        Ramp\t[(-122.1521,37.529),(-122.1514,37.524),(-122.1506,37.509)]\nI- 580                        Ramp\t[(-122.1521,37.682),(-122.151,37.659),(-122.1512,37.655)]\nI- 580                        Ramp\t[(-122.1539,37.707),(-122.1535,37.694)]\nI- 580                        Ramp\t[(-122.1553,37.706),(-122.1543,37.703)]\nI- 580                        Ramp\t[(-122.1567,37.727),(-122.156,37.71)]\nI- 580                        Ramp\t[(-122.1648,37.769),(-122.16472,37.7682),(-122.1638,37.759)]\nI- 580                        Ramp\t[(-122.1716,37.805),(-122.1725,37.816)]\nI- 580                        Ramp\t[(-122.1729,37.803),(-122.1716,37.801),(-122.1703,37.799)]\nI- 580                        Ramp\t[(-122.1742,37.817),(-122.1752,37.822),(-122.177,37.833)]\nI- 580                        Ramp\t[(-122.1764,37.839),(-122.1756,37.838),(-122.1743,37.833)]\nI- 580                        Ramp\t[(-122.1773,37.839),(-122.1764,37.839)]\nI- 580                        Ramp\t[(-122.1789,37.838),(-122.1773,37.839)]\nI- 580                        Ramp\t[(-122.1823,37.838),(-122.182011,37.83754),(-122.180678,37.83541),(-122.1798,37.834),(-122.1798,37.838)]\nI- 580                        Ramp\t[(-122.1873,37.838),(-122.1868,37.841),(-122.1866,37.844),(-122.1854,37.841),(-122.1847,37.84)]\nI- 580                        Ramp\t[(-122.1895,37.844),(-122.1886,37.845)]\nI- 580                        Ramp\t[(-122.1909,37.85),(-122.1892,37.848),(-122.1879,37.844)]\nI- 580                        Ramp\t[(-122.1917,37.853),(-122.1927,37.863)]\nI- 580                        Ramp\t[(-122.1924,37.854),(-122.189775,37.84425),(-122.1889,37.841)]\nI- 580                        Ramp\t[(-122.1975,37.878),(-122.196458,37.87516),(-122.1964,37.875),(-122.1951,37.871),(-122.1942,37.869)]\nI- 580                        Ramp\t[(-122.2017,37.923),(-122.2029,37.928)]\nI- 580                        Ramp\t[(-122.2027,37.918),(-122.2037,37.93),(-122.2043,37.938)]\nI- 580                        Ramp\t[(-122.2079,37.958),(-122.2099,37.962)]\nI- 580                        Ramp\t[(-122.2085,37.962),(-122.209,37.966)]\nI- 580                        Ramp\t[(-122.2158,37.985),(-122.2173,37.989),(-122.2178,37.991),(-122.218357,37.99071),(-122.219392,37.99016),(-122.2197,37.99)]\nI- 580                        Ramp\t[(-122.2161,37.976),(-122.218,37.982),(-122.218481,37.98426),(-122.2197,37.99)]\nI- 580                        Ramp\t[(-122.2271,37.001),(-122.2261,37.003)]\nI- 580                        Ramp\t[(-122.2278,37.013),(-122.2261,37.003)]\nI- 580                        Ramp\t[(-122.2365,37.07),(-122.2346,37.052),(-122.2338,37.044)]\nI- 580                        Ramp\t[(-122.2428,37.096),(-122.2414,37.091),(-122.241182,37.09018),(-122.2406,37.088)]\nI- 580                        Ramp\t[(-122.2453,37.095),(-122.2414,37.089)]\nI- 580                        Ramp\t[(-122.249,37.121),(-122.2476,37.12)]\nI- 580                        Ramp\t[(-122.2491,37.115),(-122.2489,37.113)]\nI- 580                        Ramp\t[(-122.2494,37.125),(-122.2489,37.113)]\nI- 580                        Ramp\t[(-122.2501,37.148),(-122.249485,37.14041),(-122.2484,37.127)]\nI- 580                        Ramp\t[(-122.2529,37.197),(-122.2525,37.192),(-122.2517,37.174)]\nI- 580                        Ramp\t[(-122.2535,37.192),(-122.253,37.182)]\nI- 580                        Ramp\t[(-122.2535,37.192),(-122.2539,37.2)]\nI- 580                        Ramp\t[(-122.2547,37.205),(-122.254,37.205),(-122.2538,37.202),(-122.2535,37.196)]\nI- 580                        Ramp\t[(-122.2564,37.213),(-122.2542,37.199),(-122.2538,37.19)]\nI- 580                        Ramp\t[(-122.2564,37.213),(-122.2544,37.197),(-122.2538,37.19)]\nI- 580                        Ramp\t[(-122.2604,37.222),(-122.2613,37.23)]\nI- 580                        Ramp\t[(-122.2639,37.238),(-122.2659,37.239),(-122.2664,37.238),(-122.2676,37.231),(-122.268,37.227)]\nI- 580                        Ramp\t[(-122.267,37.261),(-122.2671,37.263)]\nI- 580                        Ramp\t[(-122.2671,37.245),(-122.2673,37.248)]\nI- 580                        Ramp\t[(-122.2671,37.245),(-122.2675,37.243)]\nI- 580                        Ramp\t[(-122.2673,37.248),(-122.2676,37.25),(-122.2677,37.252)]\nI- 580                        Ramp\t[(-122.2676,37.273),(-122.267231,37.28349),(-122.266927,37.29214)]\nI- 580                        Ramp\t[(-122.2676,37.273),(-122.2679,37.264),(-122.2677,37.252)]\nI- 580                        Ramp\t[(-122.2677,37.242),(-122.2675,37.243)]\nI- 580                        Ramp\t[(-122.2677,37.242),(-122.2681,37.238),(-122.2678,37.233)]\nI- 580                        Ramp\t[(-122.2677,37.242),(-122.2681,37.244)]\nI- 580                        Ramp\t[(-122.2677,37.242),(-122.2683,37.243)]\nI- 580                        Ramp\t[(-122.2677,37.252),(-122.267508,37.25368),(-122.267,37.261)]\nI- 580                        Ramp\t[(-122.2683,37.243),(-122.2685,37.243)]\nI- 580                        Ramp\t[(-122.268532,37.2449),(-122.2685,37.243)]\nI- 580                        Ramp\t[(-122.2686,37.249),(-122.2682,37.245),(-122.2681,37.244)]\nI- 580                        Ramp\t[(-122.2686,37.249),(-122.268532,37.2449)]\nI- 580                        Ramp\t[(-122.2686,37.249),(-122.2701,37.255)]\nI- 580                        Ramp\t[(-122.2695,37.247),(-122.2686,37.249),(-122.2677,37.252)]\nI- 580                        Ramp\t[(-122.2695,37.247),(-122.2692,37.244),(-122.2684,37.234)]\nI- 580                        Ramp\t[(-122.2716,37.259),(-122.2734,37.259)]\nI- 580                        Ramp\t[(-122.2806,37.275),(-122.2818,37.28),(-122.2822,37.281),(-122.2837,37.276)]\nI- 580                        Ramp\t[(-122.2913,37.278),(-122.2917,37.282)]\nI- 580                        Ramp\t[(-122.2917,37.282),(-122.2921,37.286)]\nI- 580/I-680                  Ramp\t((-121.9207,37.988),(-121.9192,37.016))\nI- 580/I-680                  Ramp\t((-121.9218,37.021),(-121.9237,37.017))\nI- 580/I-680                  Ramp\t[(-121.9213,37.005),(-121.9203,37.013),(-121.9192,37.016),(-121.918,37.02)]\nI- 580/I-680                  Ramp\t[(-121.922017,37.02317),(-121.9212,37.021)]\nI- 580/I-680                  Ramp\t[(-121.9225,37.034),(-121.9218,37.031),(-121.9213,37.026),(-121.919443,37.02043),(-121.921326,37.01739)]\nI- 580/I-680                  Ramp\t[(-121.9243,37.006),(-121.9238,37.005),(-121.9225,37.008),(-121.92154,37.0104)]\nI- 580/I-680                  Ramp\t[(-121.9243,37.006),(-121.924389,37.00779),(-121.9237,37.017),(-121.9231,37.022),(-121.9227,37.029),(-121.9229,37.039)]\nI- 680                            \t((-121.8706,37.038),(-121.8709,37.047))\nI- 680                            \t((-121.939,37.15),(-121.9387,37.145),(-121.9373,37.125),(-121.934242,37.07643),(-121.933886,37.0709),(-121.9337,37.068),(-121.933122,37.06139),(-121.932736,37.05698),(-121.93222,37.05108),(-121.931844,37.04678),(-121.930113,37.027),(-121.926829,37),(-121.9265,37.998),(-121.9217,37.96),(-121.9203,37.949),(-121.9184,37.934))\nI- 680                            \t[(-121.8709,37.047),(-121.8831,37.366),(-121.8833,37.376)]\nI- 680                            \t[(-121.8852,37.422),(-121.8874,37.444),(-121.8902,37.47),(-121.8905,37.472),(-121.8907,37.474),(-121.8985,37.545),(-121.8994,37.553),(-121.9007,37.565)]\nI- 680                            \t[(-121.8867,37.732),(-121.8845,37.744),(-121.8818,37.756),(-121.8761,37.781),(-121.8712,37.857)]\nI- 680                            \t[(-121.902447,37.64695),(-121.903435,37.65882)]\nI- 680                            \t[(-121.9101,37.715),(-121.909801,37.70519),(-121.909562,37.69734),(-121.909493,37.69507),(-121.9094,37.692),(-121.909295,37.68862),(-121.909145,37.6838),(-121.909103,37.68245),(-121.908715,37.66995),(-121.908524,37.6638),(-121.9082,37.653)]\nI- 680                            \t[(-121.9101,37.715),(-121.911269,37.74682),(-121.9119,37.764),(-121.9124,37.776),(-121.9174,37.905),(-121.9194,37.957),(-121.9207,37.988)]\nI- 680                            \t[(-121.9139,37.562),(-121.9077,37.609)]\nI- 680                            \t[(-121.9139,37.562),(-121.915,37.54),(-121.9156,37.532),(-121.9165,37.519),(-121.9174,37.504),(-121.918,37.493),(-121.92,37.438),(-121.9202,37.435),(-121.9233,37.404),(-121.9238,37.402)]\nI- 680                            \t[(-121.9184,37.934),(-121.917,37.913),(-121.9122,37.83),(-121.9052,37.702)]\nI- 680                            \t[(-121.92154,37.0104),(-121.9217,37.014)]\nI- 680                            \t[(-121.9217,37.014),(-121.9218,37.021)]\nI- 680                            \t[(-121.9229,37.039),(-121.9243,37.057),(-121.9286,37.106),(-121.929195,37.11329),(-121.929661,37.119),(-121.932027,37.148),(-121.93391,37.17107),(-121.9357,37.193),(-121.936421,37.20193),(-121.9378,37.219)]\nI- 680                            \t[(-121.939,37.15),(-121.9418,37.195)]\nI- 680                        Ramp\t((-121.9007,37.565),(-121.9008,37.558))\nI- 680                        Ramp\t((-121.921,37.965),(-121.9198,37.96),(-121.9208,37.957),(-121.9199,37.951),(-121.9187,37.941))\nI- 680                        Ramp\t((-121.9247,37.932),(-121.9211,37.944),(-121.9201,37.944))\nI- 680                        Ramp\t((-121.9368,37.149),(-121.937,37.144))\nI- 680                        Ramp\t((-121.9372,37.335),(-121.938,37.32))\nI- 680                        Ramp\t((-121.9402,37.143),(-121.94,37.139))\nI- 680                        Ramp\t((-121.9418,37.314),(-121.9414,37.32))\nI- 680                        Ramp\t((-121.9422,37.314),(-121.9423,37.318))\nI- 680                        Ramp\t[(-121.8698,37.01),(-121.8706,37.038)]\nI- 680                        Ramp\t[(-121.8701,37.878),(-121.8681,37.881)]\nI- 680                        Ramp\t[(-121.8703,37.891),(-121.8712,37.857),(-121.8678,37.875)]\nI- 680                        Ramp\t[(-121.8709,37.924),(-121.8686,37.925)]\nI- 680                        Ramp\t[(-121.8712,37.01),(-121.8709,37.047)]\nI- 680                        Ramp\t[(-121.8818,37.756),(-121.8842,37.741),(-121.8867,37.732)]\nI- 680                        Ramp\t[(-121.8833,37.376),(-121.8833,37.392),(-121.883,37.4),(-121.8835,37.402),(-121.8852,37.422)]\nI- 680                        Ramp\t[(-121.8839,37.397),(-121.8847,37.394),(-121.884,37.399)]\nI- 680                        Ramp\t[(-121.8985,37.545),(-121.9001,37.565),(-121.8999,37.571),(-121.9008,37.572),(-121.903,37.586)]\nI- 680                        Ramp\t[(-121.8994,37.553),(-121.9008,37.558),(-121.9014,37.565)]\nI- 680                        Ramp\t[(-121.9027,37.672),(-121.902847,37.6715),(-121.90161,37.64898)]\nI- 680                        Ramp\t[(-121.905,37.699),(-121.9004,37.677),(-121.90161,37.64898)]\nI- 680                        Ramp\t[(-121.9052,37.702),(-121.9047,37.667),(-121.903435,37.65882)]\nI- 680                        Ramp\t[(-121.9077,37.609),(-121.9036,37.614)]\nI- 680                        Ramp\t[(-121.9077,37.609),(-121.9053,37.625)]\nI- 680                        Ramp\t[(-121.9167,37.5),(-121.9174,37.504)]\nI- 680                        Ramp\t[(-121.92,37.438),(-121.9218,37.424),(-121.9238,37.408),(-121.9252,37.392)]\nI- 680                        Ramp\t[(-121.921,37.965),(-121.922,37.966),(-121.9214,37.961)]\nI- 680                        Ramp\t[(-121.9226,37.394),(-121.9232,37.392),(-121.9252,37.392)]\nI- 680                        Ramp\t[(-121.9238,37.402),(-121.9234,37.395),(-121.923,37.399)]\nI- 680                        Ramp\t[(-121.9265,37.998),(-121.9242,37.983),(-121.922383,37.9786),(-121.9198,37.975),(-121.9195,37.954),(-121.9187,37.941),(-121.9184,37.934)]\nI- 680                        Ramp\t[(-121.9265,37.998),(-121.9249,37.98),(-121.9227,37.963),(-121.9221,37.959),(-121.9214,37.954),(-121.9206,37.947),(-121.9201,37.944),(-121.9184,37.934)]\nI- 680                        Ramp\t[(-121.9373,37.148),(-121.937,37.144),(-121.9373,37.125)]\nI- 680                        Ramp\t[(-121.9387,37.145),(-121.9376,37.147)]\nI- 680                        Ramp\t[(-121.9394,37.144),(-121.9387,37.145)]\nI- 680                        Ramp\t[(-121.9401,37.233),(-121.9378,37.219),(-121.937899,37.22791),(-121.938,37.237)]\nI- 680                        Ramp\t[(-121.9406,37.142),(-121.94,37.139),(-121.9373,37.125)]\nI- 680                        Ramp\t[(-121.9426,37.315),(-121.9423,37.318),(-121.9414,37.32),(-121.9394,37.324),(-121.938,37.32),(-121.9368,37.313)]\nI- 80                             \t((-122.2927,37.299),(-122.2928,37.293),(-122.2932,37.284))\nI- 80                             \t((-122.2931,37.301),(-122.2949,37.279))\nI- 80                             \t((-122.2937,37.277),(-122.3016,37.262))\nI- 80                             \t((-122.2949,37.279),(-122.2962,37.273))\nI- 80                             \t((-122.2962,37.273),(-122.3004,37.264))\nI- 80                             \t((-122.3004,37.264),(-122.3016,37.262),(-122.3051,37.254),(-122.3083,37.249))\nI- 80                             \t((-122.307,37.902),(-122.3074,37.896),(-122.307512,37.89327),(-122.3081,37.879),(-122.3077,37.861))\nI- 80                             \t[(-122.2932,37.284),(-122.2934,37.28)]\nI- 80                             \t[(-122.2981,37.492),(-122.2978,37.48),(-122.2976,37.473),(-122.2971,37.452),(-122.2962,37.413)]\nI- 80                             \t[(-122.3023,37.644),(-122.2988,37.518)]\nI- 80                             \t[(-122.3062,37.774),(-122.3038,37.695)]\nI- 80                             \t[(-122.3065,37.935),(-122.3065,37.913),(-122.3067,37.905),(-122.307,37.902)]\nI- 80                             \t[(-122.3075,37.828),(-122.3076,37.831)]\nI- 80                             \t[(-122.3075,37.828),(-122.3077,37.822),(-122.3074,37.817),(-122.3069,37.801),(-122.3068,37.795)]\nI- 80                             \t[(-122.308,37.98),(-122.3066,37.943),(-122.3056,37.912),(-122.3057,37.908),(-122.305805,37.90511),(-122.3061,37.897),(-122.3064,37.893),(-122.3073,37.881),(-122.3073,37.877),(-122.3077,37.861),(-122.3076,37.831)]\nI- 80                             \t[(-122.3083,37.249),(-122.3281,37.216),(-122.348,37.175)]\nI- 80                         Ramp\t((-122.2944,37.491),(-122.2956,37.484),(-122.2965,37.478))\nI- 80                         Ramp\t((-122.2983,37.501),(-122.2979,37.499))\nI- 80                         Ramp\t((-122.3017,37.67),(-122.3022,37.662))\nI- 80                         Ramp\t[(-122.2871,37.266),(-122.2901,37.274)]\nI- 80                         Ramp\t[(-122.2883,37.247),(-122.2904,37.267),(-122.2909,37.273),(-122.2918,37.275),(-122.2937,37.277)]\nI- 80                         Ramp\t[(-122.2885,37.254),(-122.2883,37.247)]\nI- 80                         Ramp\t[(-122.2885,37.254),(-122.2893,37.266)]\nI- 80                         Ramp\t[(-122.2918,37.279),(-122.2926,37.281)]\nI- 80                         Ramp\t[(-122.2923,37.282),(-122.2926,37.283),(-122.2932,37.284)]\nI- 80                         Ramp\t[(-122.2934,37.28),(-122.2926,37.281)]\nI- 80                         Ramp\t[(-122.2934,37.28),(-122.2962,37.273)]\nI- 80                         Ramp\t[(-122.2957,37.396),(-122.2946,37.384),(-122.2948,37.367)]\nI- 80                         Ramp\t[(-122.2962,37.413),(-122.2959,37.382),(-122.2951,37.372)]\nI- 80                         Ramp\t[(-122.2984,37.506),(-122.2977,37.502),(-122.2979,37.499),(-122.2956,37.489),(-122.2962,37.483),(-122.2965,37.478),(-122.2971,37.452)]\nI- 80                         Ramp\t[(-122.2988,37.518),(-122.299,37.5),(-122.2994,37.488),(-122.2995,37.477),(-122.2971,37.452)]\nI- 80                         Ramp\t[(-122.3038,37.695),(-122.3021,37.67),(-122.3022,37.662),(-122.3023,37.644)]\nI- 80                         Ramp\t[(-122.3038,37.695),(-122.3036,37.674),(-122.3034,37.667),(-122.3033,37.661),(-122.3023,37.644)]\nI- 80                         Ramp\t[(-122.3044,37.25),(-122.3051,37.254)]\nI- 80                         Ramp\t[(-122.3044,37.25),(-122.3083,37.249)]\nI- 80                         Ramp\t[(-122.3051,37.254),(-122.3083,37.249)]\nI- 80                         Ramp\t[(-122.3051,37.91),(-122.3056,37.912)]\nI- 80                         Ramp\t[(-122.3051,37.91),(-122.3057,37.908)]\nI- 80                         Ramp\t[(-122.306,37.876),(-122.3066,37.869),(-122.3067,37.843),(-122.3069,37.818)]\nI- 80                         Ramp\t[(-122.3068,37.795),(-122.306,37.783),(-122.3062,37.774)]\nI- 80                         Ramp\t[(-122.3068,37.795),(-122.3069,37.782),(-122.3062,37.774)]\nI- 80                         Ramp\t[(-122.3069,37.925),(-122.3065,37.935)]\nI- 80                         Ramp\t[(-122.307,37.902),(-122.3073,37.881)]\nI- 80                         Ramp\t[(-122.3072,37.916),(-122.3074,37.896)]\nI- 80                         Ramp\t[(-122.307624,37.87781),(-122.307512,37.89327)]\nI- 80                         Ramp\t[(-122.3078,37.93),(-122.3081,37.879)]\nI- 80                         Ramp\t[(-122.3088,37.885),(-122.3076,37.831)]\nI- 880                            \t((-121.9669,37.075),(-121.9663,37.071),(-121.9656,37.065),(-121.9618,37.037),(-121.95689,37),(-121.948,37.933))\nI- 880                            \t[(-121.9357,37.83),(-121.9356,37.826),(-121.9351,37.819),(-121.9349,37.813),(-121.9337,37.788),(-121.9327,37.767),(-121.9232,37.57),(-121.9229,37.563),(-121.9229,37.561),(-121.922487,37.55412)]\nI- 880                            \t[(-121.937,37.852),(-121.9368,37.848)]\nI- 880                            \t[(-121.948,37.933),(-121.9471,37.925),(-121.9467,37.923),(-121.946,37.918),(-121.9452,37.912),(-121.937,37.852)]\nI- 880                            \t[(-121.9995,37.289),(-121.998758,37.28558),(-121.998013,37.282),(-121.996913,37.27613),(-121.9929,37.255),(-121.9919,37.252),(-121.991111,37.24795),(-121.990277,37.24367),(-121.989597,37.24018),(-121.9882,37.233),(-121.9871,37.229),(-121.9865,37.226),(-121.9848,37.216),(-121.982,37.196),(-121.9805,37.186),(-121.975936,37.14723),(-121.9712,37.107)]\nI- 880                            \t[(-122.0219,37.466),(-122.0205,37.447),(-122.020331,37.44447),(-122.020008,37.43962),(-122.0195,37.432),(-122.0193,37.429),(-122.0164,37.393),(-122.010219,37.34771),(-122.0041,37.313)]\nI- 880                            \t[(-122.0375,37.632),(-122.0359,37.619),(-122.0358,37.616),(-122.034514,37.60409),(-122.031876,37.57965),(-122.031193,37.57332),(-122.03016,37.56375),(-122.02943,37.55698),(-122.028689,37.54929),(-122.027833,37.53908),(-122.025979,37.51698),(-122.0238,37.491)]\nI- 880                            \t[(-122.0469,37.774),(-122.0466,37.765),(-122.0465,37.761),(-122.045041,37.72234),(-122.0445,37.708),(-122.0426,37.686),(-122.041515,37.67425),(-122.0414,37.673),(-122.0398,37.656)]\nI- 880                            \t[(-122.0612,37.003),(-122.0604,37.991),(-122.0596,37.982),(-122.0585,37.967),(-122.0583,37.961),(-122.0553,37.918),(-122.053635,37.89475),(-122.050759,37.8546),(-122.05,37.844),(-122.0485,37.817),(-122.0483,37.813),(-122.0482,37.811)]\nI- 880                            \t[(-122.0666,37.085),(-122.0656,37.067),(-122.0653,37.062),(-122.0644,37.049),(-122.0635,37.036),(-122.0618,37.011)]\nI- 880                            \t[(-122.0831,37.312),(-122.0819,37.296),(-122.081,37.285),(-122.0786,37.248),(-122.078,37.24),(-122.077642,37.23496),(-122.076983,37.22567),(-122.076599,37.22026),(-122.076229,37.21505),(-122.0758,37.209)]\nI- 880                            \t[(-122.0978,37.528),(-122.096,37.496),(-122.0931,37.453),(-122.09277,37.4496),(-122.090189,37.41442),(-122.0896,37.405),(-122.085,37.34)]\nI- 880                            \t[(-122.1048,37.638),(-122.1045,37.633),(-122.1042,37.63),(-122.1033,37.617),(-122.1029,37.61)]\nI- 880                            \t[(-122.1365,37.902),(-122.1358,37.898),(-122.1333,37.881),(-122.1323,37.874),(-122.1311,37.866),(-122.1308,37.865),(-122.1307,37.864),(-122.1289,37.851),(-122.1277,37.843),(-122.1264,37.834),(-122.1231,37.812),(-122.1165,37.766),(-122.1104,37.72),(-122.109695,37.71094),(-122.109,37.702),(-122.108312,37.69168),(-122.1076,37.681)]\nI- 880                            \t[(-122.1365,37.902),(-122.1376,37.91)]\nI- 880                            \t[(-122.1755,37.185),(-122.1747,37.178),(-122.1742,37.173),(-122.1692,37.126),(-122.167792,37.11594),(-122.16757,37.11435),(-122.1671,37.111),(-122.1655,37.1),(-122.165169,37.09811),(-122.1641,37.092),(-122.1596,37.061),(-122.158381,37.05275),(-122.155991,37.03657),(-122.1531,37.017),(-122.1478,37.98),(-122.1407,37.932),(-122.1394,37.924),(-122.1389,37.92),(-122.1376,37.91)]\nI- 880                            \t[(-122.1761,37.191),(-122.1757,37.187)]\nI- 880                            \t[(-122.1947,37.394),(-122.194,37.385),(-122.1933,37.378),(-122.1882,37.32),(-122.1879,37.317),(-122.1877,37.315),(-122.1876,37.312),(-122.1873,37.309),(-122.1829,37.26),(-122.1818,37.249),(-122.1804,37.234),(-122.1802,37.231),(-122.1776,37.206),(-122.1768,37.197)]\nI- 880                            \t[(-122.2068,37.534),(-122.2066,37.53),(-122.206,37.522),(-122.2005,37.46),(-122.1967,37.418),(-122.1959,37.407)]\nI- 880                            \t[(-122.2214,37.711),(-122.2202,37.699),(-122.2199,37.695),(-122.219,37.682),(-122.2184,37.672),(-122.2173,37.652),(-122.2159,37.638),(-122.2144,37.616),(-122.2138,37.612),(-122.2135,37.609),(-122.212,37.592),(-122.2116,37.586),(-122.2111,37.581)]\nI- 880                            \t[(-122.236,37.783),(-122.2352,37.767),(-122.2348,37.764),(-122.2339,37.758),(-122.2329,37.752),(-122.2323,37.748),(-122.2319,37.746),(-122.2316,37.746),(-122.2312,37.744),(-122.2301,37.743),(-122.2269,37.73),(-122.2267,37.73),(-122.222,37.713)]\nI- 880                            \t[(-122.2707,37.975),(-122.2693,37.972),(-122.2681,37.966),(-122.267,37.962),(-122.2659,37.957),(-122.2648,37.952),(-122.2636,37.946),(-122.2625,37.935),(-122.2617,37.927),(-122.2607,37.921),(-122.2593,37.916),(-122.258,37.911),(-122.2536,37.898),(-122.2432,37.858),(-122.2408,37.845),(-122.2386,37.827),(-122.2374,37.811)]\nI- 880                            \t[(-122.291,37.052),(-122.2898,37.042),(-122.2888,37.038),(-122.2878,37.036),(-122.2863,37.032)]\nI- 880                        Ramp\t((-121.9349,37.813),(-121.935,37.828))\nI- 880                        Ramp\t((-121.9351,37.819),(-121.935,37.828),(-121.9339,37.847))\nI- 880                        Ramp\t((-121.936,37.837),(-121.9351,37.835))\nI- 880                        Ramp\t((-121.9368,37.848),(-121.9362,37.835))\nI- 880                        Ramp\t((-121.9376,37.834),(-121.937,37.836))\nI- 880                        Ramp\t((-121.9477,37.91),(-121.9469,37.911),(-121.9463,37.911))\nI- 880                        Ramp\t((-121.9682,37.065),(-121.9686,37.066))\nI- 880                        Ramp\t((-122.0008,37.31),(-122.0002,37.308))\nI- 880                        Ramp\t((-122.0013,37.298),(-122.0013,37.287))\nI- 880                        Ramp\t((-122.0369,37.645),(-122.0364,37.646))\nI- 880                        Ramp\t((-122.0477,37.798),(-122.0466,37.789),(-122.0461,37.785))\nI- 880                        Ramp\t((-122.0477,37.798),(-122.0482,37.8))\nI- 880                        Ramp\t((-122.0585,37.967),(-122.0577,37.974),(-122.0548,37.966),(-122.055168,37.96828),(-122.0577,37.984))\nI- 880                        Ramp\t((-122.0919,37.465),(-122.0931,37.461))\nI- 880                        Ramp\t((-122.0932,37.439),(-122.0922,37.437),(-122.0915,37.427))\nI- 880                        Ramp\t((-122.1005,37.571),(-122.1003,37.565),(-122.0997,37.548))\nI- 880                        Ramp\t((-122.1286,37.836),(-122.1283,37.839))\nI- 880                        Ramp\t((-122.1335,37.901),(-122.1358,37.905))\nI- 880                        Ramp\t((-122.1378,37.923),(-122.1374,37.925))\nI- 880                        Ramp\t((-122.1757,37.187),(-122.1754,37.191))\nI- 880                        Ramp\t((-122.1863,37.322),(-122.187,37.322))\nI- 880                        Ramp\t((-122.1876,37.312),(-122.1877,37.309))\nI- 880                        Ramp\t((-122.2054,37.542),(-122.2057,37.533),(-122.2059,37.526))\nI- 880                        Ramp\t((-122.2091,37.532),(-122.2089,37.535),(-122.2072,37.535))\nI- 880                        Ramp\t((-122.2187,37.684),(-122.219,37.688),(-122.2194,37.697))\nI- 880                        Ramp\t((-122.2301,37.743),(-122.2316,37.751))\nI- 880                        Ramp\t((-122.2352,37.767),(-122.2356,37.768),(-122.236,37.768))\nI- 880                        Ramp\t[(-121.9215,37.556),(-121.92179,37.55745),(-121.9229,37.563)]\nI- 880                        Ramp\t[(-121.9232,37.57),(-121.9234,37.559),(-121.9229,37.561)]\nI- 880                        Ramp\t[(-121.9335,37.851),(-121.9339,37.847),(-121.9351,37.835),(-121.9357,37.83)]\nI- 880                        Ramp\t[(-121.9343,37.85),(-121.937,37.852),(-121.937,37.836),(-121.9362,37.835),(-121.9359,37.826),(-121.9349,37.813)]\nI- 880                        Ramp\t[(-121.946,37.918),(-121.9463,37.911),(-121.9452,37.912)]\nI- 880                        Ramp\t[(-121.9612,37.099),(-121.9615,37.09),(-121.9616,37.087)]\nI- 880                        Ramp\t[(-121.9618,37.037),(-121.961998,37.05205),(-121.962212,37.06831),(-121.9623,37.075),(-121.9616,37.087)]\nI- 880                        Ramp\t[(-121.9656,37.065),(-121.9678,37.061),(-121.9676,37.065)]\nI- 880                        Ramp\t[(-121.9688,37.061),(-121.9686,37.066),(-121.9669,37.075)]\nI- 880                        Ramp\t[(-121.9712,37.107),(-121.9643,37.087),(-121.9623,37.085)]\nI- 880                        Ramp\t[(-121.986,37.239),(-121.9865,37.236),(-121.9861,37.234)]\nI- 880                        Ramp\t[(-121.9865,37.226),(-121.9872,37.22)]\nI- 880                        Ramp\t[(-121.9871,37.229),(-121.9863,37.232)]\nI- 880                        Ramp\t[(-121.9885,37.211),(-121.9848,37.216)]\nI- 880                        Ramp\t[(-122.0019,37.301),(-122.002,37.293)]\nI- 880                        Ramp\t[(-122.0041,37.313),(-122.0018,37.315),(-122.0007,37.315),(-122.0005,37.313),(-122.0002,37.308),(-121.9995,37.289)]\nI- 880                        Ramp\t[(-122.0041,37.313),(-122.0038,37.308),(-122.0039,37.284),(-122.0013,37.287),(-121.9995,37.289)]\nI- 880                        Ramp\t[(-122.0226,37.474),(-122.0214,37.473),(-122.0219,37.466)]\nI- 880                        Ramp\t[(-122.0236,37.488),(-122.0231,37.458),(-122.0227,37.458),(-122.0223,37.452),(-122.0205,37.447)]\nI- 880                        Ramp\t[(-122.0238,37.491),(-122.0215,37.483),(-122.0211,37.477),(-122.0205,37.447)]\nI- 880                        Ramp\t[(-122.0364,37.652),(-122.0364,37.646),(-122.03618,37.63412),(-122.036027,37.62586),(-122.0359,37.619)]\nI- 880                        Ramp\t[(-122.0374,37.639),(-122.0375,37.632)]\nI- 880                        Ramp\t[(-122.0383,37.64),(-122.0387,37.636),(-122.0387,37.633),(-122.038,37.632)]\nI- 880                        Ramp\t[(-122.0392,37.65),(-122.0389,37.625),(-122.0391,37.617),(-122.036099,37.6161),(-122.0358,37.616)]\nI- 880                        Ramp\t[(-122.0398,37.656),(-122.0361,37.656)]\nI- 880                        Ramp\t[(-122.0482,37.811),(-122.0461,37.785),(-122.0453,37.778),(-122.045,37.775)]\nI- 880                        Ramp\t[(-122.0485,37.817),(-122.0484,37.813),(-122.0482,37.8),(-122.0481,37.794),(-122.0478,37.781),(-122.0469,37.774)]\nI- 880                        Ramp\t[(-122.059,37.982),(-122.0577,37.984),(-122.0612,37.003)]\nI- 880                        Ramp\t[(-122.0604,37.991),(-122.06,37.983),(-122.0605,37.983)]\nI- 880                        Ramp\t[(-122.0618,37.011),(-122.0631,37.982),(-122.0585,37.967)]\nI- 880                        Ramp\t[(-122.0635,37.036),(-122.064,37.049),(-122.0648,37.069)]\nI- 880                        Ramp\t[(-122.0642,37.073),(-122.0648,37.076),(-122.0666,37.085)]\nI- 880                        Ramp\t[(-122.0653,37.062),(-122.0663,37.064)]\nI- 880                        Ramp\t[(-122.0758,37.209),(-122.073269,37.18911),(-122.073,37.187),(-122.0723,37.183)]\nI- 880                        Ramp\t[(-122.0758,37.209),(-122.075697,37.2063),(-122.075,37.188),(-122.0749,37.184)]\nI- 880                        Ramp\t[(-122.0837,37.322),(-122.0822,37.316),(-122.0831,37.312)]\nI- 880                        Ramp\t[(-122.0837,37.322),(-122.0843,37.316)]\nI- 880                        Ramp\t[(-122.085,37.34),(-122.0801,37.316),(-122.081,37.285)]\nI- 880                        Ramp\t[(-122.085,37.34),(-122.0866,37.316),(-122.0819,37.296)]\nI- 880                        Ramp\t[(-122.0918,37.466),(-122.0896,37.405)]\nI- 880                        Ramp\t[(-122.092,37.461),(-122.0923,37.457)]\nI- 880                        Ramp\t[(-122.0931,37.453),(-122.0937,37.469),(-122.0931,37.461),(-122.0923,37.457)]\nI- 880                        Ramp\t[(-122.096,37.496),(-122.0941,37.464),(-122.0943,37.421),(-122.0915,37.427),(-122.0896,37.405)]\nI- 880                        Ramp\t[(-122.0985,37.574),(-122.0986,37.567),(-122.0978,37.528)]\nI- 880                        Ramp\t[(-122.0993,37.571),(-122.0999,37.569)]\nI- 880                        Ramp\t[(-122.1005,37.571),(-122.1009,37.568)]\nI- 880                        Ramp\t[(-122.1022,37.597),(-122.102055,37.59178),(-122.1019,37.562)]\nI- 880                        Ramp\t[(-122.1029,37.61),(-122.1013,37.587),(-122.0999,37.569)]\nI- 880                        Ramp\t[(-122.1032,37.557),(-122.0997,37.548),(-122.0978,37.528)]\nI- 880                        Ramp\t[(-122.1076,37.681),(-122.106243,37.66549),(-122.1062,37.665),(-122.106043,37.66186),(-122.105869,37.65838),(-122.1048,37.638)]\nI- 880                        Ramp\t[(-122.1076,37.681),(-122.107021,37.6646),(-122.107,37.664),(-122.106808,37.66184),(-122.1048,37.638)]\nI- 880                        Ramp\t[(-122.1287,37.842),(-122.1283,37.839),(-122.1264,37.834)]\nI- 880                        Ramp\t[(-122.1289,37.861),(-122.1284,37.855),(-122.1277,37.843)]\nI- 880                        Ramp\t[(-122.1296,37.865),(-122.1299,37.866),(-122.1323,37.874)]\nI- 880                        Ramp\t[(-122.1318,37.865),(-122.1319,37.866),(-122.1333,37.881)]\nI- 880                        Ramp\t[(-122.1376,37.91),(-122.1379,37.909),(-122.1376,37.907),(-122.1365,37.902)]\nI- 880                        Ramp\t[(-122.1379,37.891),(-122.1383,37.897),(-122.1377,37.902)]\nI- 880                        Ramp\t[(-122.1379,37.931),(-122.137597,37.92736),(-122.1374,37.925),(-122.1373,37.924),(-122.1369,37.914),(-122.1358,37.905),(-122.1365,37.908),(-122.1358,37.898)]\nI- 880                        Ramp\t[(-122.1407,37.932),(-122.1397,37.923),(-122.1389,37.917),(-122.1383,37.913)]\nI- 880                        Ramp\t[(-122.164,37.106),(-122.1653,37.113),(-122.1651,37.101)]\nI- 880                        Ramp\t[(-122.164188,37.10514),(-122.1641,37.092)]\nI- 880                        Ramp\t[(-122.1646,37.113),(-122.163,37.111)]\nI- 880                        Ramp\t[(-122.1646,37.113),(-122.165458,37.11379),(-122.167792,37.11594)]\nI- 880                        Ramp\t[(-122.165757,37.09059),(-122.165169,37.09811)]\nI- 880                        Ramp\t[(-122.165757,37.09059),(-122.16635,37.09559)]\nI- 880                        Ramp\t[(-122.1675,37.09),(-122.1666,37.089),(-122.165804,37.08972),(-122.1655,37.09),(-122.1641,37.092)]\nI- 880                        Ramp\t[(-122.1675,37.09),(-122.16757,37.11435)]\nI- 880                        Ramp\t[(-122.173,37.194),(-122.1742,37.173)]\nI- 880                        Ramp\t[(-122.1763,37.184),(-122.1761,37.191)]\nI- 880                        Ramp\t[(-122.1763,37.193),(-122.1754,37.191),(-122.1745,37.194),(-122.1743,37.192),(-122.1737,37.196),(-122.1725,37.198)]\nI- 880                        Ramp\t[(-122.1768,37.197),(-122.1774,37.182),(-122.1769,37.18),(-122.1758,37.181),(-122.1747,37.178)]\nI- 880                        Ramp\t[(-122.1868,37.32),(-122.187,37.322),(-122.1873,37.321),(-122.1877,37.319),(-122.1879,37.317)]\nI- 880                        Ramp\t[(-122.1893,37.303),(-122.1888,37.305),(-122.1885,37.307),(-122.1877,37.309),(-122.1873,37.309)]\nI- 880                        Ramp\t[(-122.1946,37.405),(-122.1942,37.411),(-122.1951,37.411)]\nI- 880                        Ramp\t[(-122.1946,37.405),(-122.1947,37.394)]\nI- 880                        Ramp\t[(-122.1952,37.418),(-122.1967,37.418)]\nI- 880                        Ramp\t[(-122.1954,37.372),(-122.1957,37.378)]\nI- 880                        Ramp\t[(-122.1959,37.407),(-122.1958,37.396),(-122.1953,37.396),(-122.1947,37.394)]\nI- 880                        Ramp\t[(-122.2065,37.54),(-122.2066,37.535),(-122.2063,37.531),(-122.2059,37.526),(-122.206,37.522)]\nI- 880                        Ramp\t[(-122.2092,37.535),(-122.2074,37.536),(-122.2072,37.535),(-122.2066,37.53)]\nI- 880                        Ramp\t[(-122.2096,37.565),(-122.2079,37.549),(-122.2061,37.541)]\nI- 880                        Ramp\t[(-122.2111,37.581),(-122.2108,37.535)]\nI- 880                        Ramp\t[(-122.2176,37.65),(-122.2173,37.652)]\nI- 880                        Ramp\t[(-122.2177,37.668),(-122.2168,37.653),(-122.2159,37.638)]\nI- 880                        Ramp\t[(-122.218,37.659),(-122.2173,37.652)]\nI- 880                        Ramp\t[(-122.2199,37.695),(-122.2194,37.697),(-122.2197,37.7),(-122.2202,37.699)]\nI- 880                        Ramp\t[(-122.222,37.713),(-122.2212,37.705),(-122.2207,37.697),(-122.2208,37.694),(-122.2192,37.68),(-122.2184,37.672)]\nI- 880                        Ramp\t[(-122.2301,37.743),(-122.2294,37.735)]\nI- 880                        Ramp\t[(-122.2316,37.746),(-122.2316,37.751),(-122.2321,37.752),(-122.2329,37.752)]\nI- 880                        Ramp\t[(-122.2325,37.743),(-122.2319,37.746)]\nI- 880                        Ramp\t[(-122.2361,37.785),(-122.2356,37.781)]\nI- 880                        Ramp\t[(-122.237,37.799),(-122.236,37.777),(-122.236,37.768),(-122.2357,37.764),(-122.235,37.754)]\nI- 880                        Ramp\t[(-122.2372,37.802),(-122.23638,37.7996),(-122.2361,37.801),(-122.2357,37.801)]\nI- 880                        Ramp\t[(-122.2374,37.811),(-122.2374,37.796)]\nI- 880                        Ramp\t[(-122.2536,37.898),(-122.254,37.902)]\nI- 880                        Ramp\t[(-122.2577,37.914),(-122.258,37.911)]\nI- 880                        Ramp\t[(-122.2636,37.946),(-122.2646,37.954)]\nI- 880                        Ramp\t[(-122.2636,37.946),(-122.2649,37.95),(-122.2662,37.954)]\nI- 880                        Ramp\t[(-122.268,37.969),(-122.2693,37.972)]\nI- 880                        Ramp\t[(-122.2685,37.962),(-122.2695,37.969),(-122.2707,37.975)]\nI- 880                        Ramp\t[(-122.2729,37.986),(-122.2744,37.986)]\nI- 880                        Ramp\t[(-122.274,37.993),(-122.2729,37.986)]\nI- 880                        Ramp\t[(-122.2771,37.002),(-122.278,37)]\nI- 880                        Ramp\t[(-122.2775,37.007),(-122.2769,37.001)]\nI- 880                        Ramp\t[(-122.2849,37.028),(-122.2845,37.026),(-122.2837,37.021)]\nI- 880                        Ramp\t[(-122.2863,37.032),(-122.285451,37.03094),(-122.284429,37.02966),(-122.2831,37.028),(-122.2823,37.031)]\nI- 880                        Ramp\t[(-122.291454,37.064),(-122.291088,37.06103),(-122.2903,37.05),(-122.2897,37.044),(-122.2888,37.038)]\nI- 880                        Ramp\t[(-122.2916,37.052),(-122.2898,37.04),(-122.2888,37.038)]\nI- 980                            \t((-122.268,37.227),(-122.2678,37.233),(-122.2675,37.243))\nI- 980                            \t((-122.2688,37.2),(-122.2684,37.215),(-122.268,37.227))\nI- 980                            \t[(-122.2675,37.243),(-122.2674,37.246)]\nI- 980                            \t[(-122.2681,37.248),(-122.2677,37.252)]\nI- 980                            \t[(-122.268237,37.24426),(-122.2682,37.245)]\nI- 980                            \t[(-122.2684,37.236),(-122.2683,37.243),(-122.268237,37.24426)]\nI- 980                            \t[(-122.2684,37.236),(-122.2684,37.234),(-122.268817,37.22458),(-122.269027,37.21557),(-122.2691,37.213),(-122.2694,37.199),(-122.2693,37.194)]\nI- 980                            \t[(-122.2688,37.2),(-122.2688,37.197),(-122.2689,37.191)]\nI- 980                            \t[(-122.2699,37.159),(-122.2697,37.165),(-122.2695,37.17),(-122.2693,37.18),(-122.2689,37.191)]\nI- 980                            \t[(-122.2701,37.163),(-122.2699,37.172),(-122.2693,37.192),(-122.2693,37.194)]\nI- 980                            \t[(-122.2783,37.006),(-122.2787,37.014),(-122.2791,37.024),(-122.279124,37.0254),(-122.2782,37.053),(-122.2778,37.061),(-122.2773,37.068)]\nI- 980                            \t[(-122.2789,37.009),(-122.2795,37.022),(-122.279648,37.02711),(-122.2787,37.055),(-122.2782,37.062),(-122.2775,37.075),(-122.2773,37.078),(-122.2763,37.094),(-122.2758,37.1),(-122.274904,37.11235),(-122.274857,37.1131),(-122.2748,37.114)]\nI- 980                        Ramp\t[(-122.2688,37.197),(-122.2691,37.191),(-122.2693,37.18)]\nI- 980                        Ramp\t[(-122.2688,37.206),(-122.2688,37.203),(-122.2684,37.215)]\nI- 980                        Ramp\t[(-122.2691,37.213),(-122.269438,37.20709),(-122.2699,37.199),(-122.27,37.194),(-122.270194,37.18382),(-122.270352,37.17552),(-122.2704,37.173)]\nI- 980                        Ramp\t[(-122.2693,37.194),(-122.2691,37.198)]\nI- 980                        Ramp\t[(-122.2699,37.159),(-122.2701,37.163)]\nI- 980                        Ramp\t[(-122.2739,37.117),(-122.2745,37.119),(-122.2733,37.129)]\nI- 980                        Ramp\t[(-122.2773,37.068),(-122.2772,37.061)]\nI- 980                        Ramp\t[(-122.2773,37.078),(-122.2766,37.095)]\nIdaho                         St  \t[(-122.28,37.437),(-122.2801,37.446)]\nIglesia                       Dr  \t[(-121.946443,37.09438),(-121.946833,37.09285)]\nIndependence                  Ave \t[(-121.865283,37.46138),(-121.8634,37.446)]\nIndependence                  Dr  \t[(-121.8683,37.521),(-121.868866,37.50763)]\nIndependence                  Road\t[(-121.9474,37.172),(-121.9508,37.163)]\nIndian                        Road\t[(-122.2209,37.153),(-122.2216,37.142)]\nIndian                        Way \t[(-122.2066,37.398),(-122.2045,37.411)]\nIndian Creek                      \t[(-121.7642,37.246),(-121.7655,37.244)]\nIndian Creek                  Road\t[(-121.7751,37.798),(-121.7646,37.799)]\nIndian Creek                  Road\t[(-121.7889,37.843),(-121.8,37.791)]\nIndian Creek                  Road\t[(-121.863754,37.77499),(-121.8644,37.782)]\nIndian Joe Creek                  \t[(-121.8273,37.142),(-121.806,37.295)]\nIndian Rock                   Path\t[(-122.2717,37.919),(-122.2727,37.922)]\nIndustrial                    Blvd\t[(-122.1091,37.328),(-122.1085,37.326)]\nIndustrial                    Pkwy\t[(-122.055708,37.21892),(-122.0559,37.217)]\nIndustrial                    Pkwy\t[(-122.0723,37.183),(-122.0731,37.184)]\nIndustrial                    St  \t[(-122.1834,37.424),(-122.1833,37.425)]\nInglewood                     Dr  \t[(-121.9086,37.877),(-121.9088,37.877)]\nInglewood                     Dr  \t[(-121.909484,37.87762),(-121.9099,37.878)]\nInglewood                     St  \t[(-122.0802,37.397),(-122.0823,37.397)]\nInglewood Common                  \t[(-121.955843,37.36729),(-121.955147,37.36923)]\nInnsbruck                     St  \t[(-121.7706,37.68),(-121.7708,37.668)]\nInverness                     St  \t[(-122.1521,37.882),(-122.1523,37.877)]\nInverness                     Way \t[(-121.752134,37.92412),(-121.751744,37.92413)]\nIroquois                      Ave \t[(-121.7876,37.891),(-121.7876,37.899)]\nIrvington                     Ave \t[(-121.9624,37.308),(-121.9661,37.307)]\nIsabel                        Ave \t[(-121.8047,37.63301),(-121.8047,37.63248)]\nIsherwood                     Way \t[(-122.0138,37.733),(-122.0156,37.702)]\nIsland                        Dr  \t[(-122.2329,37.463),(-122.2336,37.455)]\nIsland                        Dr  \t[(-122.2399,37.334),(-122.2394,37.34),(-122.2383,37.352)]\nIsland                        Dr  \t[(-122.2411,37.318),(-122.2406,37.325)]\nIsland Pine                   Ct  \t[(-122.069,37.31),(-122.0697,37.31)]\nIsle Royal                    St  \t[(-121.9695,37.178),(-121.9686,37.15),(-121.9683,37.149)]\nIsola                         Ct  \t[(-122.0551,37.815),(-122.0555,37.811)]\nIthaca                        St  \t[(-122.0318,37.09),(-122.0317,37.087)]\nIvy                           Dr  \t[(-122.2434,37.01),(-122.2413,37.015)]\nJ                             St  \t[(-121.9762,37.754),(-121.9767,37.743)]\nJacaranda                     Ct  \t[(-121.9431,37.49),(-121.9426,37.486)]\nJacaranda                     Dr  \t[(-122.0147,37.288),(-122.013,37.287)]\nJackson                       Ave \t[(-121.7416,37.868),(-121.7416,37.862)]\nJackson                       Ct  \t[(-121.9377,37.336),(-121.9383,37.337)]\nJackson                       St  \t[(-122.0809,37.669),(-122.0804,37.677)]\nJackson                       St  \t[(-122.0838,37.614),(-122.0832,37.624)]\nJackson                       St  \t[(-122.0845,37.6),(-122.0842,37.606)]\nJackson                       St  \t[(-122.0981,37.368),(-122.0988,37.365)]\nJackson                       St  \t[(-122.2646,37.025),(-122.2641,37.034)]\nJackson                       St  \t[(-122.2668,37.991),(-122.2664,37.997)]\nJackson                       St  \t[(-122.2689,37.955),(-122.2685,37.962)]\nJade                          Cir \t[(-121.919585,37.25699),(-121.918784,37.24417)]\nJamaica                       Way \t[(-122.1785,37.971),(-122.1792,37.969)]\nJames                         Ave \t[(-122.0634,37.055),(-122.0598,37.052)]\nJamestown                     Road\t[(-121.947,37.165),(-121.9476,37.163)]\nJamison                       Way \t[(-122.075555,37.98023),(-122.073719,37.98074)]\nJaques                        Ct  \t[(-122.052072,37.68998),(-122.050458,37.69474)]\nJaquiline                     St  \t[(-121.725054,37.80597),(-121.723604,37.80449)]\nJarvis                        Ave \t[(-122.053935,37.43593),(-122.054359,37.43078)]\nJarvis                        Ave \t[(-122.055,37.423),(-122.0552,37.42)]\nJason                         Way \t[(-122.0044,37.584),(-122.0033,37.577)]\nJayar                         Pl  \t[(-122.0345,37.206),(-122.0337,37.209)]\nJayne                         Ave \t[(-122.2566,37.13),(-122.2549,37.142)]\nJaynes                        St  \t[(-122.2789,37.779),(-122.2781,37.781)]\nJean                          Ct  \t[(-122.0755,37.809),(-122.0766,37.798)]\nJean                          Dr  \t[(-122.0739,37.78),(-122.0734,37.774)]\nJean                          Dr  \t[(-122.0766,37.798),(-122.0759,37.794)]\nJean                          St  \t[(-122.2477,37.18),(-122.2468,37.187),(-122.2459,37.196)]\nJeffer                        St  \t[(-122.0746,37.856),(-122.0739,37.86)]\nJefferson                     Ave \t[(-122.2775,37.663),(-122.2774,37.645),(-122.2771,37.627)]\nJefferson                     St  \t[(-122.2749,37.049),(-122.2745,37.055)]\nJensen                        Road\t[(-122.03781,37.03891),(-122.0377,37.04)]\nJensen                        St  \t[(-121.754,37.805),(-121.754,37.8)]\nJerome                        Ave \t[(-121.9239,37.294),(-121.9239,37.287)]\nJerome                        Ave \t[(-121.9247,37.314),(-121.9244,37.309)]\nJerrold                       Road\t[(-121.6907,37.681),(-121.6908,37.653)]\nJessica                       Cir \t[(-122.0472,37.76),(-122.0488,37.748)]\nJewell                        Ct  \t[(-122.2048,37.467),(-122.2043,37.452)]\nJoaquin Miller                Road\t[(-122.1797,37.083),(-122.1778,37.051)]\nJoaquin Miller                Road\t[(-122.1914,37.128),(-122.1862,37.119),(-122.1842,37.106)]\nJoaquin Murieta               Ave \t[(-121.9958,37.208),(-121.9962,37.201)]\nJohn                          Dr  \t[(-122.0939,37.925),(-122.0934,37.919)]\nJohnson                       Dr  \t[(-121.9145,37.901),(-121.915,37.877)]\nJohnson Industrial            Dr  \t[(-121.9096,37.014),(-121.9172,37.016)]\nJones                         St  \t[(-122.2982,37.755),(-122.2971,37.757)]\nJones                         St  \t[(-122.301984,37.74755),(-122.3015,37.749)]\nJoseph                        Dr  \t[(-122.0742,37.12),(-122.0732,37.109)]\nJoshua                        St  \t[(-122.0686,37.455),(-122.0686,37.449)]\nJovan                         Ter \t[(-122.046671,37.62206),(-122.046466,37.6181)]\nJoyce                         St  \t[(-122.0792,37.604),(-122.0774,37.581)]\nJuana                         Ave \t[(-122.1417,37.262),(-122.1396,37.267)]\nJuana                         Ave \t[(-122.1481,37.243),(-122.1459,37.249)]\nJune                          Ct  \t[(-122.1041,37.76),(-122.1045,37.769)]\nJune                          Ct  \t[(-122.1786,37.316),(-122.178,37.314)]\nJuneau                        St  \t[(-122.1814,37.068),(-122.1801,37.049)]\nJuniper                       Ave \t[(-122.0464,37.255),(-122.0476,37.251)]\nJuniper                       St  \t[(-121.7823,37.897),(-121.7815,37.9)]\nJuniper                       St  \t[(-122.1592,37.961),(-122.1591,37.955)]\nJunipero Com                      \t[(-121.9919,37.796),(-121.992,37.791)]\nJupiter                       Ct  \t[(-122.064459,37.84741),(-122.064255,37.84626)]\nKains                         Ave \t[(-122.2923,37.758),(-122.2922,37.754)]\nKains                         Ave \t[(-122.2949,37.828),(-122.2948,37.825)]\nKains                         Ave \t[(-122.2992,37.983),(-122.2989,37.97),(-122.2984,37.953)]\nKaiser                        Dr  \t[(-122.067163,37.47821),(-122.060402,37.51961)]\nKaiser Creek                  Road\t[(-122.0928,37.885),(-122.0918,37.802)]\nKamp                          Dr  \t[(-121.867789,37.82326),(-121.867753,37.8292)]\nKansas                        Way \t[(-121.9115,37.71),(-121.912,37.706)]\nKathy                         Way \t[(-121.7292,37.825),(-121.729061,37.82514)]\nKato                          Road\t[(-121.9185,37.626),(-121.9181,37.627)]\nKay                           Ave \t[(-122.0968,37.433),(-122.0968,37.427)]\nKay                           Ave \t[(-122.0969,37.398),(-122.0971,37.389)]\nKay                           Ave \t[(-122.097,37.461),(-122.0969,37.457)]\nKay                           Ct  \t[(-121.953,37.277),(-121.9535,37.277)]\nKearney                       Ave \t[(-122.1981,37.124),(-122.1963,37.135)]\nKeeler                        Ave \t[(-122.2552,37.892),(-122.2549,37.882)]\nKeeler                        Ave \t[(-122.2578,37.906),(-122.2579,37.899)]\nKeith                         Ave \t[(-122.2603,37.894),(-122.26,37.893)]\nKeller                        Ave \t[(-122.1353,37.702),(-122.1345,37.705)]\nKeller                        Ave \t[(-122.154,37.723),(-122.1531,37.722)]\nKelly                         St  \t[(-122.0519,37.852),(-122.0503,37.856)]\nKelly                         St  \t[(-122.0583,37.842),(-122.058,37.842)]\nKelso                         Road\t[(-121.584782,37.94979),(-121.585132,37.94971)]\nKenilworth                    Ave \t[(-122.1501,37.376),(-122.1498,37.371)]\nKenilworth                    Ave \t[(-122.151,37.393),(-122.1505,37.383)]\nKenita                        Way \t[(-122.0508,37.944),(-122.0503,37.944)]\nKenmore                       Ave \t[(-122.2378,37.173),(-122.2386,37.162)]\nKenmore                       Ct  \t[(-122.0713,37.965),(-122.0706,37.967)]\nKennedy                       Ave \t[(-122.0201,37.832),(-122.0203,37.824)]\nKennet                        St  \t[(-122.0309,37.129),(-122.031,37.115)]\nKent                          Ave \t[(-122.113,37.891),(-122.1131,37.887)]\nKent                          Ave \t[(-122.113,37.937),(-122.113,37.929)]\nKentucky                      Ave \t[(-122.2719,37.026),(-122.2706,37.013)]\nKentwood                      Way \t[(-121.9235,37.841),(-121.926,37.838)]\nKenwood                       Dr  \t[(-122.054303,37.63614),(-122.054133,37.62981)]\nKeoncrest                     Dr  \t[(-122.2842,37.77),(-122.2835,37.771)]\nKerlin                        St  \t[(-121.9986,37.469),(-121.9979,37.465)]\nKerwin                        Ave \t[(-122.181,37.296),(-122.1807,37.295)]\nKey                           Ct  \t[(-122.1246,37.545),(-122.1244,37.553)]\nKey Route                     Blvd\t[(-122.2921,37.91),(-122.292,37.908)]\nKeys                          Pl  \t[(-122.0871,37.253),(-122.0875,37.252)]\nKildare                       Road\t[(-122.0968,37.016),(-122.0959,37)]\nKilkenny                      Pl  \t[(-122.251002,37.40535),(-122.2508,37.403)]\nKimberly Commons                  \t[(-121.737774,37.88769),(-121.737673,37.89024)]\nKing                          St  \t[(-122.2733,37.504),(-122.2732,37.496)]\nKing                          St  \t[(-122.2738,37.558),(-122.2737,37.55)]\nKing                          Way \t[(-121.9176,37.133),(-121.9185,37.13)]\nKings                         Ct  \t[(-122.0695,37.764),(-122.0689,37.756)]\nKingsland                     Ave \t[(-122.1957,37.743),(-122.1956,37.753)]\nKingsley                      St  \t[(-122.2311,37.042),(-122.2306,37.046)]\nKirkcaldy                     St  \t[(-121.859937,37.97443),(-121.8601,37.97441)]\nKirkham                       St  \t[(-122.289,37.122),(-122.2887,37.129)]\nKit                           Lane\t[(-122.0237,37.124),(-122.0236,37.132)]\nKitty Hawk                    Road\t[(-121.8048,37.797),(-121.8049,37.867)]\nKlamath                       St  \t[(-121.9142,37.982),(-121.9145,37.978)]\nKlamath                       St  \t[(-122.1832,37.035),(-122.1815,37.023)]\nKnapp                         St  \t[(-122.0594,37.062),(-122.0593,37.049)]\nKnight                        Dr  \t[(-122.089468,37.17681),(-122.089434,37.17337)]\nKnight                        St  \t[(-122.18,37.291),(-122.1794,37.288)]\nKnoll                         Way \t[(-122.0864,37.848),(-122.0839,37.836)]\nKnowland                      Ave \t[(-122.1957,37.816),(-122.1948,37.823)]\nKofman                        Ct  \t[(-122.2498,37.422),(-122.2497,37.417)]\nKoford                        Road\t[(-122.1903,37.296),(-122.1884,37.286)]\nKolln                         St  \t[(-121.87,37.792),(-121.8705,37.796)]\nKoopmann Creek                    \t[(-121.9442,37.181),(-121.943465,37.17671)]\nKorbel                        St  \t[(-122.0648,37.742),(-122.0655,37.723)]\nKottinger                     Dr  \t[(-121.8596,37.58),(-121.859,37.57)]\nKramer                        St  \t[(-122.1406,37.834),(-122.1416,37.826)]\nKramer                        St  \t[(-122.143,37.819),(-122.1435,37.812)]\nKrause                        St  \t[(-121.8731,37.863),(-121.8719,37.865)]\nL                             St  \t[(-121.7684,37.772),(-121.768,37.762)]\nL                             St  \t[(-121.7694,37.795),(-121.7692,37.788)]\nLa Cresta                         \t[(-122.2433,37.353),(-122.2425,37.349)]\nLa Cresta                     Ave \t[(-122.2175,37.06),(-122.217,37.073)]\nLa Loma                       Ave \t[(-122.2554,37.844),(-122.2559,37.841)]\nLa Playa                      Dr  \t[(-122.1039,37.545),(-122.101,37.493)]\nLa Salle                      Ave \t[(-122.2191,37.176),(-122.2206,37.158)]\nLa Salle                      Ave \t[(-122.2242,37.153),(-122.2255,37.155)]\nLa Vereda                     Road\t[(-122.2562,37.801),(-122.2558,37.792)]\nLadera                        Ct  \t[(-121.9444,37.068),(-121.9429,37.07)]\nLafayette                     Ave \t[(-122.0309,37.474),(-122.0328,37.458)]\nLafayette                     Ave \t[(-122.0336,37.451),(-122.0352,37.438)]\nLafayette                     Ave \t[(-122.0395,37.411),(-122.0418,37.398)]\nLafayette                     Ave \t[(-122.1602,37.293),(-122.1597,37.287)]\nLafayette                     St  \t[(-122.2559,37.646),(-122.2553,37.654)]\nLaguna                        Ave \t[(-122.2062,37.027),(-122.2058,37.03)]\nLaguna                        Ave \t[(-122.2099,37.989),(-122.2089,37)]\nLaguna                        Dr  \t[(-122.1128,37.418),(-122.1132,37.418)]\nLaiolo                        Road\t[(-121.9715,37.322),(-121.9707,37.318)]\nLake                          Blvd\t[(-122.0381,37.533),(-122.0371,37.53)]\nLake                          Blvd\t[(-122.0393,37.539),(-122.0387,37.537)]\nLake Chabot                       \t[(-122.0753,37.378),(-122.0762,37.367)]\nLake Chabot                   Road\t[(-122.0988,37.133),(-122.0977,37.13)]\nLake Chabot                   Road\t[(-122.1061,37.171),(-122.1047,37.155)]\nLake Chabot                   Road\t[(-122.1323,37.308),(-122.132,37.307)]\nLake Mead                     Dr  \t[(-122.0533,37.873),(-122.0523,37.858),(-122.0524,37.853)]\nLake Ontario                  Dr  \t[(-122.0554,37.863),(-122.0557,37.859)]\nLake Ontario                  Dr  \t[(-122.0562,37.852),(-122.0567,37.847)]\nLake Pillsbury                Dr  \t[(-122.0561,37.906),(-122.0573,37.901)]\nLakecrest                     Ct  \t[(-122.0947,37.107),(-122.0939,37.103)]\nLakehurst                     Cir \t[(-122.284729,37.89025),(-122.286096,37.90364)]\nLakeridge                     Ave \t[(-122.048299,37.84349),(-122.048127,37.83401)]\nLakeshore                     Ave \t[(-122.2586,37.99),(-122.2556,37.006)]\nLakeview                      Ave \t[(-122.2225,37.219),(-122.2237,37.221)]\nLakeview                      Blvd\t[(-121.9313,37.702),(-121.936,37.784)]\nLakewood                      Ct  \t[(-122.0261,37.472),(-122.0263,37.469)]\nLakewood                      Dr  \t[(-122.0288,37.48),(-122.0269,37.477)]\nLakewood                      St  \t[(-121.9189,37.763),(-121.9191,37.772)]\nLakewood                      Way \t[(-122.0795,37.389),(-122.0793,37.366)]\nLambaren                      Ave \t[(-121.7825,37.822),(-121.7816,37.821)]\nLambeth                       Road\t[(-121.7686,37.942),(-121.7684,37.947)]\nLanai                         Ct  \t[(-122.0768,37.269),(-122.0768,37.26)]\nLanding                       Road\t[(-121.947,37.809),(-121.9444,37.82)]\nLandon                        Ave \t[(-121.9785,37.258),(-121.978,37.255)]\nLangmuir                      Lane\t[(-121.9199,37.19),(-121.9215,37.197)]\nLansdown                      Ct  \t[(-121.8659,37.949),(-121.8661,37.96)]\nLarchmont Isle                    \t[(-122.2667,37.654),(-122.2671,37.647)]\nLark                          Way \t[(-122.0563,37.8),(-122.0553,37.797)]\nLarkspur                      Dr  \t[(-121.7431,37.084),(-121.7435,37.09)]\nLarkspur                      St  \t[(-122.0118,37.231),(-122.011,37.227)]\nLarmer                        Ct  \t[(-122.2371,37.215),(-122.2365,37.212)]\nLas Palmas                    Ave \t[(-121.9521,37.547),(-121.9513,37.539)]\nLas Palmas                    Ct  \t[(-121.944,37.502),(-121.9443,37.513)]\nLas Palmas                    Ct  \t[(-121.950103,37.00582),(-121.949498,37.00835)]\nLas Positas                   Blvd\t[(-121.7988,37.889),(-121.7984,37.889)]\nLas Positas                   Blvd\t[(-121.8642,37.957),(-121.8645,37.955)]\nLas Positas                   Blvd\t[(-121.907779,37.79734),(-121.908481,37.79416)]\nLas Positas                   Blvd\t[(-121.9094,37.79),(-121.9099,37.787)]\nLas Positas                   Blvd\t[(-121.915,37.769),(-121.9187,37.759)]\nLas Positas                   Road\t[(-121.7548,37.025),(-121.75,37.01778)]\nLas Positas                   Road\t[(-121.764488,37.99199),(-121.75569,37.02022)]\nLas Positas                   Road\t[(-121.7726,37.976),(-121.76841,37.98426)]\nLassen                        Road\t[(-121.7428,37.05),(-121.742211,37.05687)]\nLatham                        Lane\t[(-122.2572,37.943),(-122.2565,37.947)]\nLatham                        Walk\t[(-122.2575,37.941),(-122.2572,37.943)]\nLauderdale                    Ave \t[(-122.0983,37.344),(-122.0977,37.334)]\nLaurel                        St  \t[(-122.0483,37.265),(-122.0476,37.251)]\nLaurette                      Pl  \t[(-122.0651,37.476),(-122.0646,37.479)]\nLauriston                     Ct  \t[(-122.2032,37.45),(-122.2034,37.46)]\nLaverne                       Ave \t[(-122.1938,37.731),(-122.1928,37.721)]\nLaverne                       Dr  \t[(-122.1533,37.821),(-122.1532,37.814)]\nLaverne                       Dr  \t[(-122.1564,37.852),(-122.1549,37.847)]\nLawlor                        St  \t[(-122.1573,37.533),(-122.1567,37.517)]\nLawrence                      Dr  \t[(-122.0779,37.133),(-122.0756,37.141)]\nLawton                        Ave \t[(-122.2563,37.36),(-122.256,37.366)]\nLee                           Ave \t[(-121.7614,37.878),(-121.7615,37.898)]\nLee                           Ave \t[(-122.1507,37.298),(-122.1506,37.291)]\nLee                           St  \t[(-122.2561,37.115),(-122.2569,37.097)]\nLeigh                         St  \t[(-121.9154,37.776),(-121.9153,37.774)]\nLeighton                      St  \t[(-122.0805,37.628),(-122.0797,37.632)]\nLeimert                       Blvd\t[(-122.2059,37.169),(-122.2048,37.169)]\nLeland                        Way \t[(-121.7867,37.655),(-121.7859,37.656)]\nLemke                         Pl  \t[(-121.9882,37.261),(-121.98835,37.2595)]\nLeon                          Ct  \t[(-122.0249,37.525),(-122.0255,37.521)]\nLeona                         St  \t[(-122.1751,37.84),(-122.1739,37.836)]\nLeonard                       Dr  \t[(-122.1731,37.185),(-122.1731,37.172),(-122.1725,37.165)]\nLeonardo                      Way \t[(-122.1073,37.577),(-122.108,37.575)]\nLeroy                         Ave \t[(-122.2598,37.819),(-122.259792,37.8182)]\nLeslie                        St  \t[(-121.9639,37.412),(-121.9634,37.405)]\nLeslie                        St  \t[(-121.9729,37.438),(-121.971866,37.43847)]\nLessley                       Ave \t[(-122.0727,37.866),(-122.0718,37.867)]\nLevine                        Ct  \t[(-122.0836,37.75),(-122.0831,37.753)]\nLewelling                     Blvd\t[(-122.1118,37.868),(-122.1112,37.869)]\nLewelling                     Blvd\t[(-122.1219,37.865),(-122.1178,37.866)]\nLewelling                     Blvd\t[(-122.1555,37.793),(-122.1572,37.787)]\nLewis                         Ave \t[(-122.143,37.359),(-122.1433,37.339)]\nLiberty                       St  \t[(-121.9795,37.499),(-121.9785,37.495)]\nLiberty                       St  \t[(-122.1019,37.934),(-122.1009,37.924)]\nLibra                         Ct  \t[(-121.7389,37.179),(-121.7391,37.187)]\nLilac                         Loop\t[(-122.0182,37.805),(-122.0184,37.798)]\nLilac                         St  \t[(-122.2014,37.799),(-122.2008,37.804)]\nLillian                       Ave \t[(-122.1358,37.044),(-122.1337,37.063)]\nLillian                       St  \t[(-121.7308,37.829),(-121.7307,37.824)]\nLilly                         St  \t[(-122.078139,37.64103),(-122.0775,37.643)]\nLincoln                       Ave \t[(-121.7449,37.849),(-121.745,37.832)]\nLincoln                       Ave \t[(-122.1321,37.499),(-122.1349,37.499)]\nLincoln                       Ave \t[(-122.2064,37.063),(-122.2059,37.065)]\nLincoln                       Ave \t[(-122.2093,37.034),(-122.2087,37.041)]\nLincoln                       Ave \t[(-122.251,37.712),(-122.25,37.707)]\nLincoln                       Ave \t[(-122.2549,37.729),(-122.2541,37.726)]\nLincoln                       Ave \t[(-122.2628,37.751),(-122.2615,37.751)]\nLincoln                       Ave \t[(-122.2674,37.752),(-122.2667,37.753)]\nLincoln                       Ave \t[(-122.2721,37.754),(-122.2699,37.753)]\nLincoln                       Ave \t[(-122.2786,37.756),(-122.276,37.755)]\nLincoln                       Way \t[(-122.1987,37.117),(-122.198,37.101)]\nLinda                         Way \t[(-121.8657,37.573),(-121.866,37.566)]\nLindbergh                     Ave \t[(-121.8089,37.973),(-121.8072,37.973)]\nLindbergh                     Ave \t[(-121.8151,37.972),(-121.8118,37.971),(-121.8098,37.973)]\nLindemann                     Road\t[(-121.558002,37.00213),(-121.558002,37.00663)]\nLinden                        St  \t[(-121.7733,37.876),(-121.772,37.879)]\nLinden                        St  \t[(-121.7782,37.861),(-121.777,37.865),(-121.7757,37.868)]\nLinden                        St  \t[(-122.0692,37.83),(-122.0678,37.833)]\nLinden                        St  \t[(-122.2751,37.344),(-122.275,37.35)]\nLinden                        St  \t[(-122.2832,37.096),(-122.2827,37.112)]\nLinden                        St  \t[(-122.2842,37.067),(-122.2837,37.082)]\nLinden                        St  \t[(-122.2854,37.035),(-122.2853,37.038)]\nLinden                        St  \t[(-122.2867,37.998),(-122.2864,37.008)]\nLinmore                       Dr  \t[(-121.9202,37.39),(-121.9191,37.388)]\nLisbon                        Ave \t[(-121.7818,37.71),(-121.7808,37.71)]\nLittle Foot                   Dr  \t[(-121.9223,37.064),(-121.9228,37.064)]\nLivermore                     Ave \t[(-121.7509,37.715),(-121.750474,37.71229)]\nLivermore                     Ave \t[(-121.7553,37.744),(-121.7539,37.737)]\nLivermore                     Ave \t[(-121.7589,37.765),(-121.7584,37.763)]\nLivermore                     Ave \t[(-121.7662,37.811),(-121.7656,37.808)]\nLivermore                     Ave \t[(-121.7687,37.448),(-121.769,37.375)]\nLivermore                     Ave \t[(-121.7699,37.863),(-121.7703,37.874)]\nLivermore                     Ave \t[(-121.772719,37.99085),(-121.7728,37.001)]\nLivermore Commons                 \t[(-121.926632,37.3099),(-121.926508,37.30113)]\nLocksley                      Ave \t[(-122.2547,37.422),(-122.2534,37.438)]\nLockwood                      Ave \t[(-121.9401,37.366),(-121.9408,37.364)]\nLockwood                      St  \t[(-122.1802,37.628),(-122.1778,37.601)]\nLocust                        St  \t[(-121.7815,37.876),(-121.7791,37.881)]\nLocust                        St  \t[(-122.0435,37.315),(-122.0435,37.312)]\nLocust                        St  \t[(-122.1606,37.007),(-122.1593,37.987)]\nLocust                        St  \t[(-122.1813,37.578),(-122.1807,37.572)]\nLogan                         Ct  \t[(-122.0053,37.492),(-122.0061,37.484)]\nLogan                         Dr  \t[(-121.9862,37.39),(-121.9856,37.384)]\nLogan                         Dr  \t[(-121.9913,37.423),(-121.990341,37.41763)]\nLoma                          Dr  \t[(-121.9202,37.39),(-121.9204,37.394)]\nLoma Vista                    Ave \t[(-122.1952,37.942),(-122.1933,37.952)]\nLomitas                       Ave \t[(-121.773262,37.59041),(-121.77308,37.59042),(-121.772998,37.59043)]\nLomitas                       Ave \t[(-121.7807,37.574),(-121.7804,37.586)]\nLongridge                     Road\t[(-122.2345,37.096),(-122.2317,37.099)]\nLongview                      Dr  \t[(-121.904,37.486),(-121.9047,37.482)]\nLongview                      Dr  \t[(-122.1277,37.257),(-122.1277,37.252)]\nLongwood                      Ct  \t[(-122.1036,37.606),(-122.1038,37.603)]\nLori                          Way \t[(-122.0446,37.845),(-122.0441,37.835)]\nLoro                          Pl  \t[(-121.9447,37.577),(-121.9458,37.582)]\nLorren                        Dr  \t[(-121.9911,37.491),(-121.9926,37.473)]\nLos Banos                     St  \t[(-122.102,37.914),(-122.1013,37.91)]\nLos Banos                     St  \t[(-122.1064,37.965),(-122.1057,37.956)]\nLouise                        Lane\t[(-122.0749,37.764),(-122.0754,37.758)]\nLowell                        St  \t[(-122.275,37.384),(-122.2752,37.389)]\nLowell                        St  \t[(-122.2757,37.41),(-122.2759,37.417)]\nLowry                         Road\t[(-122.052627,37.83339),(-122.0531,37.827),(-122.0538,37.818)]\nLucot                         St  \t[(-122.1091,37.746),(-122.1096,37.743)]\nLuna                          Ave \t[(-122.1238,37.117),(-122.123,37.124)]\nLunar                         Way \t[(-122.0668,37.883),(-122.0669,37.877)]\nLurene                        Dr  \t[(-121.918603,37.24972),(-121.919428,37.24785)]\nLuzon                         Ct  \t[(-121.9328,37.28),(-121.9321,37.279)]\nLyman                         Road\t[(-122.2124,37.068),(-122.2105,37.093)]\nLynde                         St  \t[(-122.2195,37.912),(-122.2187,37.91),(-122.2173,37.908)]\nLyndhurst                     St  \t[(-122.1823,37.354),(-122.1807,37.348)]\nLyra                          St  \t[(-121.9186,37.766),(-121.9184,37.762)]\nM                             St  \t[(-121.7731,37.842),(-121.7736,37.853)]\nM                             St  \t[(-122.0851,37.754),(-122.0845,37.742)]\nMaar                          Ave \t[(-121.9573,37.693),(-121.9565,37.701)]\nMabel                         Ave \t[(-122.0774,37.029),(-122.0728,37.029)]\nMabel                         St  \t[(-122.2841,37.591),(-122.284,37.583)]\nMac Arthur                    Blvd\t[(-122.139,37.34),(-122.138812,37.34)]\nMac Arthur                    Blvd\t[(-122.1394,37.356),(-122.139376,37.35503)]\nMac Arthur                    Blvd\t[(-122.1407,37.372),(-122.14,37.364)]\nMac Arthur                    Blvd\t[(-122.1495,37.412),(-122.1487,37.408)]\nMac Arthur                    Blvd\t[(-122.1552,37.454),(-122.1541,37.446)]\nMac Arthur                    Blvd\t[(-122.1605,37.553),(-122.1596,37.525)]\nMac Arthur                    Blvd\t[(-122.1636,37.618),(-122.1629,37.612)]\nMac Arthur                    Blvd\t[(-122.1697,37.68),(-122.1696,37.679)]\nMac Arthur                    Blvd\t[(-122.185,37.757),(-122.1843,37.753)]\nMac Arthur                    Blvd\t[(-122.1868,37.773),(-122.1861,37.767)]\nMac Arthur                    Blvd\t[(-122.188,37.837),(-122.1871,37.833)]\nMac Arthur                    Blvd\t[(-122.207,37.985),(-122.204,37.973)]\nMac Arthur                    Blvd\t[(-122.2239,37.007),(-122.2229,37.005)]\nMac Arthur                    Blvd\t[(-122.2258,37.01),(-122.2251,37.008)]\nMac Arthur                    Blvd\t[(-122.2281,37.014),(-122.2278,37.013)]\nMac Arthur                    Blvd\t[(-122.2328,37.039),(-122.2307,37.022)]\nMac Arthur                    Blvd\t[(-122.2353,37.054),(-122.2338,37.044)]\nMac Arthur                    Blvd\t[(-122.2405,37.072),(-122.2402,37.07)]\nMac Arthur                    Blvd\t[(-122.252491,37.17473),(-122.253,37.182)]\nMac Arthur                    Blvd\t[(-122.262,37.258),(-122.2631,37.26)]\nMac Arthur                    Blvd\t[(-122.2673,37.272),(-122.2676,37.273)]\nMackenzie                     Pl  \t[(-122.0125,37.698),(-122.0115,37.715)]\nMaddux                        Dr  \t[(-122.1829,37.343),(-122.1823,37.341)]\nMaddux                        Dr  \t[(-122.1848,37.366),(-122.1848,37.36)]\nMadelaine                     Pl  \t[(-122.0401,37.448),(-122.0395,37.448)]\nMadera                        Ave \t[(-122.19,37.814),(-122.1914,37.824)]\nMadison                       Ave \t[(-121.7414,37.777),(-121.7415,37.77)]\nMadison                       Ave \t[(-122.0628,37.078),(-122.063,37.071)]\nMadison                       St  \t[(-122.267,37.962),(-122.2668,37.965)]\nMadison                       St  \t[(-122.2686,37.937),(-122.2682,37.945)]\nMagee                         Ave \t[(-122.1991,37.928),(-122.1977,37.937)]\nMagnolia                      Cir \t[(-121.868186,37.81015),(-121.866849,37.80683)]\nMagnolia                      Dr  \t[(-122.2313,37.296),(-122.2317,37.285)]\nMagnolia                      St  \t[(-122.0361,37.306),(-122.0354,37.303)]\nMagnolia                      St  \t[(-122.0409,37.333),(-122.0394,37.325)]\nMagnolia                      St  \t[(-122.0971,37.5),(-122.0962,37.484)]\nMagnolia                      St  \t[(-122.2864,37.104),(-122.286,37.115)]\nMagnolia                      St  \t[(-122.2899,37.005),(-122.2894,37.019)]\nMain                          St  \t[(-121.8743,37.615),(-121.8739,37.624)]\nMain                          St  \t[(-121.8754,37.595),(-121.875,37.604)]\nMain                          St  \t[(-121.8769,37.571),(-121.876403,37.57907)]\nMain                          St  \t[(-121.8875,37.939),(-121.8907,37.936)]\nMain                          St  \t[(-122.0817,37.729),(-122.0807,37.719)]\nMain                          St  \t[(-122.0844,37.758),(-122.0836,37.75)]\nMain                          St  \t[(-122.2907,37.832),(-122.2907,37.839)]\nMairmont                      Dr  \t[(-121.8725,37.8),(-121.8734,37.8)]\nMaitland                      Dr  \t[(-122.2286,37.273),(-122.2277,37.265)]\nMajestic                      Ave \t[(-122.1784,37.793),(-122.1789,37.788)]\nMajestic                      Way \t[(-122.142593,37.98723),(-122.1423,37.98485)]\nMalabar                       Ave \t[(-122.0727,37.103),(-122.0711,37.103)]\nMalcolm                       Ave \t[(-122.1269,37.516),(-122.125,37.514)]\nMalcolm                       Ave \t[(-122.1366,37.469),(-122.1359,37.483)]\nMallard                       Ct  \t[(-122.0358,37.486),(-122.0367,37.492)]\nMalta                         Ct  \t[(-122.1832,37.273),(-122.1823,37.278)]\nManchester                    Road\t[(-122.1125,37.071),(-122.1116,37.071)]\nManchester                    St  \t[(-121.866725,37.98973),(-121.866734,37.98255)]\nMandalay                      Road\t[(-122.2322,37.397),(-122.2321,37.403)]\nManila                        Ave \t[(-122.2448,37.425),(-122.2437,37.428)]\nMann                          Ave \t[(-122.0165,37.844),(-122.0171,37.83)]\nManor                         Blvd\t[(-122.1402,37.912),(-122.1409,37.913)]\nManor                         Blvd\t[(-122.1421,37.912),(-122.1426,37.912)]\nManor                         Blvd\t[(-122.1452,37.911),(-122.1461,37.91)]\nManor                         Blvd\t[(-122.1584,37.906),(-122.1597,37.905)]\nManor                         Way \t[(-122.2853,37.857),(-122.2844,37.855)]\nManter                        Road\t[(-122.0531,37.984),(-122.0522,37.98)]\nMantilla                      Ave \t[(-122.0781,37.31),(-122.079,37.309)]\nManzanita                     St  \t[(-122.0188,37.263),(-122.0182,37.258)]\nMaple                         Ave \t[(-122.1987,37.024),(-122.197,37.035)]\nMaple                         Ave \t[(-122.2051,37.962),(-122.2047,37.965)]\nMaple                         Ave \t[(-122.21,37.909),(-122.2096,37.915)]\nMaple                         St  \t[(-121.7638,37.824),(-121.7627,37.82)]\nMaple                         St  \t[(-122.2888,37.796),(-122.2872,37.795)]\nMaple Leaf                    Dr  \t[(-121.864615,37.81276),(-121.863868,37.79283)]\nMarabu                        Way \t[(-121.9503,37.454),(-121.9508,37.45)]\nMaraschino                    Ct  \t[(-122.0249,37.842),(-122.0252,37.833)]\nMargery                       Dr  \t[(-121.9766,37.338),(-121.9772,37.33)]\nMarianas                          \t[(-122.2426,37.344),(-122.243,37.339)]\nMarianas                          \t[(-122.244,37.327),(-122.244408,37.32305)]\nMarigold                      Ct  \t[(-121.9177,37.748),(-121.9187,37.746)]\nMarigold                      Road\t[(-121.7383,37.123),(-121.7393,37.128)]\nMarin                         Ave \t[(-122.1044,37.614),(-122.1055,37.613)]\nMarin                         Ave \t[(-122.1101,37.608),(-122.1107,37.607)]\nMarin                         Ave \t[(-122.258,37.969),(-122.258,37.966)]\nMarin                         Ave \t[(-122.2741,37.894),(-122.272,37.901)]\nMarin                         Ave \t[(-122.2865,37.891),(-122.2856,37.895)]\nMarin                         Ave \t[(-122.2928,37.877),(-122.2925,37.877)]\nMarin                         Ave \t[(-122.2956,37.871),(-122.2948,37.873)]\nMarin                         Way \t[(-122.2443,37.898),(-122.2436,37.893)]\nMarina                        Blvd\t[(-122.163,37.111),(-122.164,37.106)]\nMarina                        Blvd\t[(-122.164188,37.10514),(-122.1651,37.101)]\nMarineview                    Dr  \t[(-122.1261,37.21),(-122.1254,37.205)]\nMarineview                    Dr  \t[(-122.1318,37.241),(-122.1305,37.239)]\nMaritime                      St  \t[(-122.3072,37.156),(-122.3084,37.142)]\nMarket                        Ave \t[(-122.0229,37.328),(-122.0244,37.312)]\nMarket                        St  \t[(-122.2727,37.333),(-122.2725,37.34)]\nMarket                        St  \t[(-122.2738,37.292),(-122.2736,37.301)]\nMarket                        St  \t[(-122.2741,37.426),(-122.2742,37.433)]\nMarket                        St  \t[(-122.2754,37.227),(-122.2751,37.235)]\nMarket                        St  \t[(-122.2794,37.109),(-122.2793,37.114)]\nMarket                        St  \t[(-122.2826,37.021),(-122.2825,37.023)]\nMarlboro                      Way \t[(-121.86612,37.9994),(-121.866,37.999)]\nMarlin                        Ct  \t[(-122.044157,37.30406),(-122.044602,37.30052)]\nMarlow                        Dr  \t[(-122.1375,37.346),(-122.1374,37.351)]\nMarne                         St  \t[(-122.148,37.811),(-122.1476,37.805)]\nMars                          Road\t[(-121.7834,37.586),(-121.7827,37.575)]\nMarsala                       Ct  \t[(-121.848563,37.64116),(-121.847736,37.63501),(-121.847146,37.63392)]\nMarshall                      St  \t[(-122.0637,37.99),(-122.0638,37.982)]\nMarshall                      Ter \t[(-122.026173,37.67648),(-122.026375,37.67346)]\nMartin                        Ave \t[(-121.8618,37.818),(-121.8618,37.82696),(-121.8618,37.848)]\nMartin Luther King Jr         Way \t[(-122.2667,37.353),(-122.2666,37.357)]\nMartin Luther King Jr         Way \t[(-122.2698,37.223),(-122.2697,37.229)]\nMartin Luther King Jr         Way \t[(-122.2703,37.527),(-122.2702,37.517)]\nMartin Luther King Jr         Way \t[(-122.2705,37.194),(-122.2704,37.199)]\nMartin Luther King Jr         Way \t[(-122.2707,37.563),(-122.2706,37.545)]\nMartin Luther King Jr         Way \t[(-122.2709,37.489),(-122.2708,37.481)]\nMartin Luther King Jr         Way \t[(-122.2712,37.608),(-122.2711,37.599)]\nMartin Luther King Jr         Way \t[(-122.272,37.146),(-122.2715,37.153)]\nMartin Luther King Jr         Way \t[(-122.2787,37.014),(-122.2784,37.02),(-122.2779,37.027)]\nMartinez                      Dr  \t[(-121.984,37.793),(-121.984,37.796)]\nMartinez                      St  \t[(-122.159,37.191),(-122.1582,37.185)]\nMaryland                      Ave \t[(-122.2734,37.031),(-122.272,37.032)]\nMarylin                       Ave \t[(-121.7857,37.838),(-121.7833,37.837)]\nMasonic                       Ter \t[(-121.9512,37.123),(-121.9508,37.124)]\nMassachusetts                 St  \t[(-122.0925,37.051),(-122.0909,37.056)]\nMateo                         Ct  \t[(-122.0266,37.659),(-122.0273,37.65)]\nMatthew                       Ct  \t[(-121.8807,37.394),(-121.8783,37.395)]\nMattos                        Dr  \t[(-121.9983,37.542),(-121.9992,37.53)]\nMattos                        Dr  \t[(-122.0002,37.52),(-122.0005,37.513)]\nMattos                        Dr  \t[(-122.0005,37.502),(-122.000898,37.49683)]\nMattox                        Road\t[(-122.0958,37.872),(-122.0957,37.876)]\nMaubert                       Ave \t[(-122.1114,37.009),(-122.1096,37.995)]\nMaud                          Ave \t[(-122.1387,37.25),(-122.1379,37.252)]\nMauna Loa Park                Dr  \t[(-121.9723,37.191),(-121.972,37.196)]\nMavis                         Ct  \t[(-121.8584,37.606),(-121.8577,37.603)]\nMavis                         Dr  \t[(-121.86,37.628),(-121.8598,37.606)]\nMaxwelton                     Road\t[(-122.2248,37.31),(-122.2252,37.32)]\nMay                           Ct  \t[(-122.0589,37.323),(-122.0577,37.331)]\nMay                           Road\t[(-122.0168,37.083),(-122.015,37.095)]\nMaya                          St  \t[(-121.9148,37.792),(-121.9143,37.784)]\nMaybelle                      Ave \t[(-122.1957,37.878),(-122.1948,37.883)]\nMaybelle                      Way \t[(-122.1974,37.873),(-122.1971,37.874)]\nMayfair Park                  Ave \t[(-121.9631,37.148),(-121.9629,37.143)]\nMayhews Landing               Road\t[(-122.0417,37.346),(-122.0424,37.341)]\nMayhews Landing               Road\t[(-122.0458,37.318),(-122.0468,37.309)]\nMayhews Landing               Road\t[(-122.0482,37.299),(-122.0489,37.295)]\nMayport                       Cir \t[(-122.283588,37.88064),(-122.284724,37.87992)]\nMayview                       Way \t[(-121.7869,37.637),(-121.7848,37.636)]\nMc Clary                      Ave \t[(-122.1924,37.443),(-122.1917,37.448)]\nMc Farlane                    Lane\t[(-122.0823,37.377),(-122.0863,37.374)]\nMc Gee                        Ave \t[(-122.2755,37.611),(-122.2754,37.603)]\nMc Gee                        Ave \t[(-122.2768,37.709),(-122.2768,37.702)]\nMc Gee                        Ave \t[(-122.2772,37.746),(-122.2771,37.736)]\nMc Millan                     St  \t[(-122.2479,37.454),(-122.248,37.457)]\nMcClure                       Ave \t[(-122.1431,37.001),(-122.1436,37.998)]\nMcGlinchey                    Dr  \t[(-121.7721,37.745),(-121.7722,37.729)]\nMcKeown                       Ct  \t[(-122.0676,37.681),(-122.0671,37.674)]\nMcKeown                       Ter \t[(-121.992,37.825),(-121.992203,37.82275)]\nMcSherry                      Way \t[(-122.235166,37.29199),(-122.234053,37.27635)]\nMeadowbrook                   Ave \t[(-122.0406,37.198),(-122.0389,37.183)]\nMeadowbrook Com                   \t[(-122.0043,37.608),(-122.0036,37.609)]\nMeadowlark                    Dr  \t[(-122.0692,37.985),(-122.0692,37.973)]\nMecartney                     Road\t[(-122.2473,37.374),(-122.2455,37.369)]\nMecartney                     Road\t[(-122.24835,37.37769),(-122.247665,37.3761)]\nMedacino                      Ter \t[(-122.043321,37.65121),(-122.043914,37.64881)]\nMedallion                     Dr  \t[(-122.0502,37.08),(-122.0502,37.059)]\nMedallion                     Dr  \t[(-122.0502,37.929),(-122.0502,37.936)]\nMedellion                     Dr  \t[(-122.050194,37.95738),(-122.050187,37.96407)]\nMedford                       Ave \t[(-122.1017,37.828),(-122.1015,37.829),(-122.1002,37.832)]\nMedlar                        Dr  \t[(-122.0627,37.378),(-122.0625,37.375)]\nMeek                          Ave \t[(-122.0919,37.641),(-122.0897,37.642)]\nMeekland                      Ave \t[(-122.113,37.812),(-122.1128,37.809)]\nMeiggs                        St  \t[(-121.9596,37.267),(-121.9593,37.255)]\nMelbourne                     Ave \t[(-122.0842,37.285),(-122.0837,37.269)]\nMelcher                       St  \t[(-122.1792,37.21),(-122.1778,37.198)]\nMellow                        Way \t[(-122.0387,37.846),(-122.0377,37.841)]\nMelrose                       Ave \t[(-122.2032,37.736),(-122.2029,37.733)]\nMelrose                       Ave \t[(-122.2075,37.756),(-122.2072,37.754)]\nMelrose                       Ave \t[(-122.2328,37.331),(-122.2319,37.335)]\nMendenhall                    Road\t[(-121.681342,37.03354),(-121.684794,37.0443)]\nMendenhall                    Road\t[(-122.134,37.677),(-122.1324,37.685)]\nMerced                        St  \t[(-122.1708,37.102),(-122.1707,37.099)]\nMercury                       St  \t[(-122.0598,37.291),(-122.0595,37.284)]\nMerle                         Ct  \t[(-122.1467,37.373),(-122.1467,37.366)]\nMerle                         Ct  \t[(-122.1482,37.368),(-122.1479,37.358)]\nMerol                         Ave \t[(-121.9924,37.453),(-121.9918,37.45)]\nMerriewood                    Dr  \t[(-122.2136,37.373),(-122.2128,37.389)]\nMerrill                       Ave \t[(-121.9205,37.807),(-121.9196,37.811)]\nMerrimac River                St  \t[(-122.032907,37.70666),(-122.0332,37.703)]\nMerritt                       Ave \t[(-122.2471,37.078),(-122.2446,37.078)]\nMerritt                       Ave \t[(-122.2495,37.053),(-122.2487,37.066)]\nMerritt Channel                   \t[(-122.2591,37.968),(-122.2606,37.942)]\nMesa                          Ave \t[(-122.233,37.304),(-122.2322,37.291)]\nMeteor                        Dr  \t[(-122.0713,37.868),(-122.0702,37.862)]\nMiami                         Ave \t[(-122.0812,37.234),(-122.0812,37.229)]\nMichael                       Ave \t[(-121.9605,37.208),(-121.961,37.206)]\nMichell                       Ct  \t[(-121.7588,37.897),(-121.7583,37.893)]\nMichelle                      St  \t[(-121.9691,37.461),(-121.968214,37.45771)]\nMiddlefield                   Ave \t[(-121.9442,37.309),(-121.9426,37.311)]\nMidvale                       Ave \t[(-122.2016,37.933),(-122.2009,37.938)]\nMidway                        Road\t[(-121.572056,37.50049),(-121.574787,37.51247)]\nMilani                        Ave \t[(-122.0235,37.438),(-122.024,37.432)]\nMilburn                       Ter \t[(-122.058937,37.54931),(-122.058337,37.5373)]\nMildred                       Ct  \t[(-122.0002,37.388),(-121.9998,37.386)]\nMildred                       Dr  \t[(-121.9958,37.44),(-121.9964,37.433)]\nMildred                       Dr  \t[(-121.9973,37.421),(-121.9977,37.417)]\nMiles                         Ave \t[(-122.2599,37.373),(-122.2589,37.382)]\nMiller                        Ave \t[(-122.2322,37.844),(-122.2319,37.848)]\nMiller                        Ave \t[(-122.2353,37.806),(-122.235,37.809)]\nMiller                        Road\t[(-122.0902,37.645),(-122.0865,37.545)]\nMiller                        St  \t[(-122.1627,37.048),(-122.1614,37.032)]\nMills                         Ave \t[(-122.1222,37.917),(-122.1222,37.908)]\nMilmar                        Blvd\t[(-122.0785,37.108),(-122.0783,37.101)]\nMilvia                        St  \t[(-122.2689,37.593),(-122.2687,37.585)]\nMilvia                        St  \t[(-122.2692,37.637),(-122.2691,37.629)]\nMilvia                        St  \t[(-122.2707,37.772),(-122.2707,37.763)]\nMilvia                        St  \t[(-122.2711,37.817),(-122.2708,37.8),(-122.2707,37.781)]\nMinerva                       St  \t[(-122.0652,37.282),(-122.066,37.28)]\nMines                         Road\t[(-121.531666,37.83219),(-121.534092,37.94366)]\nMines                         Road\t[(-121.536341,37),(-121.536966,37.00198)]\nMines                         Road\t[(-121.570515,37.78068),(-121.568708,37.80183)]\nMines                         Road\t[(-121.633014,37.95741),(-121.642288,37.98874)]\nMinivet                       Ct  \t[(-121.8834,37.805),(-121.8838,37.811)]\nMinturn                       Ct  \t[(-122.0545,37.944),(-122.0538,37.946)]\nMira Vista                    Dr  \t[(-122.0829,37.22),(-122.0827,37.213)]\nMirador                       Ct  \t[(-121.8644,37.556),(-121.8633,37.552)]\nMiramar                       Ave \t[(-122.1009,37.025),(-122.099089,37.03209)]\nMiramonte                     Ave \t[(-122.1052,37.986),(-122.1042,37.997)]\nMiranda                       St  \t[(-122.0715,37.211),(-122.0717,37.206)]\nMiranda                       Way \t[(-121.7837,37.649),(-121.7807,37.648)]\nMission                       Blvd\t[(-121.918886,37),(-121.9194,37.976),(-121.9198,37.975)]\nMission                       Blvd\t[(-121.920783,37.37168),(-121.9204,37.367)]\nMission                       Blvd\t[(-121.9214,37.961),(-121.9217,37.96)]\nMission                       Blvd\t[(-121.924901,37.92912),(-121.9254,37.922)]\nMission                       Blvd\t[(-121.928695,37.43767),(-121.925,37.417)]\nMission                       Blvd\t[(-121.937204,37.48803),(-121.936483,37.48336)]\nMission                       Blvd\t[(-121.9418,37.517),(-121.9389,37.499)]\nMission                       Blvd\t[(-121.9449,37.536),(-121.9438,37.53)]\nMission                       Blvd\t[(-121.949133,37.56339),(-121.948176,37.5572)]\nMission                       Blvd\t[(-121.9562,37.607),(-121.9548,37.598)]\nMission                       Blvd\t[(-121.9632,37.683),(-121.96315,37.6825)]\nMission                       Blvd\t[(-121.971801,37.77041),(-121.9706,37.762)]\nMission                       Blvd\t[(-121.9823,37.791),(-121.9765,37.788),(-121.9751,37.786)]\nMission                       Blvd\t[(-122.0006,37.896),(-121.9989,37.88)]\nMission                       Blvd\t[(-122.0221,37.084),(-122.021325,37.07762)]\nMission                       Blvd\t[(-122.0641,37.491),(-122.062,37.464)]\nMission                       Blvd\t[(-122.07,37.567),(-122.0692,37.555)]\nMission                       Blvd\t[(-122.0798,37.688),(-122.0779,37.668)]\nMission                       Blvd\t[(-122.0928,37.802),(-122.0919,37.796),(-122.0916,37.793)]\nMission                       Blvd\t[(-122.0955,37.824),(-122.0947,37.817)]\nMission                       Blvd\t[(-122.1031,37.882),(-122.1024,37.877)]\nMission                       Ct  \t[(-121.929057,37.90595),(-121.929602,37.90063)]\nMission                       Dr  \t[(-121.879,37.526),(-121.8788,37.526)]\nMission Creek                     \t[(-121.9244,37.614),(-121.9238,37.608)]\nMistflower                    Ave \t[(-122.0195,37.329),(-122.0199,37.323)]\nMitchell                      Ave \t[(-122.1438,37.376),(-122.1439,37.374)]\nMitchell                      St  \t[(-122.2257,37.844),(-122.2249,37.852)]\nMoccasin                      St  \t[(-122.0302,37.085),(-122.0297,37.078)]\nMocine                        Ave \t[(-122.0751,37.497),(-122.0748,37.476)]\nMockingbird                   Lane\t[(-122.0862,37.419),(-122.0861,37.412)]\nMohr                          Ave \t[(-121.8495,37.819),(-121.8618,37.818)]\nMohr                          Ave \t[(-121.877,37.819),(-121.8793,37.816),(-121.8799,37.819)]\nMohr                          Dr  \t[(-122.1132,37.466),(-122.113,37.46)]\nMolaka                        Cir \t[(-122.0476,37.863),(-122.0479,37.871)]\nMonaco                        Ave \t[(-122.0024,37.966),(-122.0023,37.967)]\nMonaco                        Ct  \t[(-121.8762,37.544),(-121.8766,37.538)]\nMonika                        Lane\t[(-122.051987,37.88553),(-122.052536,37.88171)]\nMontcalm                      Ave \t[(-122.0394,37.373),(-122.04,37.369)]\nMonte Vista                   Dr  \t[(-122.1127,37.4),(-122.1126,37.388)]\nMontecito                     Ave \t[(-122.2602,37.114),(-122.2589,37.122)]\nMontecito                     Cir \t[(-121.789,37.97),(-121.7883,37.967),(-121.7867,37.962)]\nMontecito                     Cir \t[(-121.789,37.97),(-121.78927,37.9709)]\nMontecito                     Dr  \t[(-121.9899,37.743),(-121.9892,37.762)]\nMontego Bay                       \t[(-122.2491,37.389),(-122.2485,37.396)]\nMonterey                      Ave \t[(-122.2793,37.863),(-122.2799,37.857)]\nMonterey                      Blvd\t[(-122.1494,37.018),(-122.1486,37.013)]\nMonterey                      Blvd\t[(-122.189,37.987),(-122.1891,37.971)]\nMonterey                      Blvd\t[(-122.1931,37.068),(-122.1918,37.051)]\nMonterey                      Blvd\t[(-122.1971,37.103),(-122.1961,37.096)]\nMonterey                      Blvd\t[(-122.2029,37.167),(-122.2012,37.146)]\nMonterey                      Dr  \t[(-121.909595,37.12732),(-121.910168,37.15444)]\nMontgomery                    Ave \t[(-122.0971,37.824),(-122.0955,37.811)]\nMontgomery                    Ave \t[(-122.0989,37.838),(-122.0977,37.829)]\nMontgomery                    St  \t[(-122.0882,37.738),(-122.0875,37.727)]\nMontgomery                    St  \t[(-122.2489,37.316),(-122.2471,37.33)]\nMontgomery                    St  \t[(-122.2518,37.292),(-122.2504,37.305)]\nMonticello                    Ave \t[(-122.2,37.771),(-122.199,37.778)]\nMonticello                    St  \t[(-122.0561,37.37),(-122.0554,37.374)]\nMooney                        Ave \t[(-122.1234,37.972),(-122.1234,37.978)]\nMoonflower                    Way \t[(-121.7297,37.075),(-121.7322,37.071)]\nMoore                         Dr  \t[(-122.1901,37.335),(-122.1884,37.351)]\nMoores                        Ave \t[(-122.0087,37.301),(-122.0094,37.292)]\nMoores                        Ave \t[(-122.0098,37.287),(-122.0102,37.281)]\nMoores                        Ave \t[(-122.0138,37.237),(-122.014,37.233)]\nMorada                        Ct  \t[(-121.93541,37.49248),(-121.935229,37.49155)]\nMoraga                        Ave \t[(-122.2096,37.265),(-122.2088,37.254)]\nMoraga                        Ave \t[(-122.225,37.3),(-122.2243,37.3)]\nMoraga                        Ave \t[(-122.2447,37.288),(-122.2423,37.302)]\nMoraga                        Dr  \t[(-121.7915,37.701),(-121.7906,37.705)]\nMorcom                        Pl  \t[(-122.1901,37.826),(-122.1897,37.829)]\nMoreland                      Dr  \t[(-122.0802,37.11),(-122.0793,37.109)]\nMorengo                       Way \t[(-121.9209,37.837),(-121.9203,37.84)]\nMound                         St  \t[(-122.2346,37.582),(-122.2339,37.588)]\nMound                         St  \t[(-122.2402,37.531),(-122.2395,37.537)]\nMount Hamilton                Ct  \t[(-122.030097,37.11348),(-122.030412,37.11049)]\nMountain                      Ave \t[(-122.2267,37.24),(-122.2261,37.231)]\nMountain                      Ave \t[(-122.2291,37.256),(-122.2288,37.257)]\nMountain                      Blvd\t[(-122.151,37.659),(-122.1484,37.64)]\nMountain                      Blvd\t[(-122.1535,37.702),(-122.153,37.696)]\nMountain                      Blvd\t[(-122.1765,37.857),(-122.177,37.85)]\nMountain                      Blvd\t[(-122.1774,37.889),(-122.1771,37.887)]\nMountain                      Blvd\t[(-122.1789,37.934),(-122.1787,37.93)]\nMountain                      Blvd\t[(-122.2013,37.164),(-122.2004,37.15)]\nMountain                      Blvd\t[(-122.2085,37.261),(-122.2088,37.254)]\nMountain                      Blvd\t[(-122.211,37.308),(-122.2102,37.297)]\nMountain                      Blvd\t[(-122.222,37.435),(-122.2204,37.436)]\nMountain                      Blvd\t[(-122.2261,37.465),(-122.2241,37.451)]\nMountaingate                  Way \t[(-122.1999,37.198),(-122.1994,37.193)]\nMowry                         Ave \t[(-121.9745,37.659),(-121.975803,37.65155)]\nMowry                         Ave \t[(-121.976381,37.64822),(-121.9769,37.646)]\nMowry                         Ave \t[(-121.9807,37.567),(-121.9809,37.565)]\nMowry                         Ave \t[(-121.9825,37.547),(-121.9838,37.532)]\nMowry                         Ave \t[(-121.9896,37.459),(-121.9904,37.449)]\nMowry                         Ave \t[(-122.0074,37.245),(-122.008,37.236)]\nMowry                         Ave \t[(-122.0113,37.158),(-122.0129,37.124)]\nMowry Slough                      \t[(-122.0393,37.918),(-122.0552,37.908)]\nMsn Creek                     Dr  \t[(-121.9354,37.428),(-121.9344,37.427)]\nMtn House                     Road\t[(-121.576862,37.78355),(-121.576389,37.80422)]\nMtn House                     Road\t[(-121.579578,37.73807),(-121.578037,37.75356)]\nMtn House Creek                   \t[(-121.558979,37.69672),(-121.558765,37.69123),(-121.564396,37.65095)]\nMtn House Creek                   \t[(-121.570759,37.60189),(-121.566196,37.63889)]\nMtn House Creek                   \t[(-121.577,37.50431),(-121.578144,37.49554)]\nMuir                          St  \t[(-122.0761,37.529),(-122.0756,37.524)]\nMuir                          St  \t[(-122.0787,37.562),(-122.0779,37.553)]\nMuirwood                      Dr  \t[(-121.9162,37.824),(-121.9168,37.831)]\nMulberry                      Pl  \t[(-121.9221,37.234),(-121.9225,37.232)]\nMulberry                      Pl  \t[(-121.9238,37.249),(-121.9249,37.261)]\nMulberry                      St  \t[(-122.0363,37.332),(-122.034,37.32)]\nMurcia                        St  \t[(-122.076,37.235),(-122.0758,37.23)]\nMurdell                       Lane\t[(-121.7977,37.619),(-121.797719,37.60774)]\nMurdell                       Lane\t[(-121.8001,37.746),(-121.7998,37.741)]\nMurdock                       Ct  \t[(-122.1828,37.753),(-122.1832,37.756)]\nMurray                        St  \t[(-122.2885,37.513),(-122.288,37.514)]\nMurrieta                      Blvd\t[(-121.7825,37.758),(-121.7816,37.758)]\nMurrieta                      Blvd\t[(-121.7847,37.94),(-121.7842,37.942)]\nMurrieta                      Blvd\t[(-121.7864,37.791),(-121.7866,37.797)]\nMurrieta                      Blvd\t[(-121.7865,37.934),(-121.7858,37.936)]\nMurrieta                      Blvd\t[(-121.788409,37.80906),(-121.7885,37.815)]\nMyers                         St  \t[(-122.1511,37.423),(-122.151,37.415)]\nMyra                          Ct  \t[(-122.108083,37.47375),(-122.108278,37.47677)]\nMyrtle                        St  \t[(-122.0924,37.685),(-122.0919,37.676)]\nMyrtle                        St  \t[(-122.2812,37.092),(-122.2805,37.108)]\nN                             St  \t[(-121.7737,37.824),(-121.7739,37.829)]\nNandina                       Ct  \t[(-121.9274,37.299),(-121.9281,37.297)]\nNansa                         Ct  \t[(-121.9188,37.259),(-121.918711,37.25453)]\nNatalie                       Ave \t[(-121.9792,37.307),(-121.9799,37.296)]\nNational                      Ave \t[(-122.1192,37.5),(-122.1281,37.489)]\nNavajo                        Ct  \t[(-121.8779,37.901),(-121.8783,37.9)]\nNavy Roadway                      \t[(-122.3093,37.092),(-122.3123,37.109)]\nNeal                          St  \t[(-121.8692,37.577),(-121.8683,37.574)]\nNelson                        Ct  \t[(-121.864163,37.4684),(-121.86436,37.4745)]\nNelson                        Pl  \t[(-122.0366,37.522),(-122.0368,37.519)]\nNelson                        St  \t[(-121.9822,37.362),(-121.9846,37.348)]\nNeptune                       Dr  \t[(-122.1878,37.989),(-122.1853,37.958)]\nNeptune                       Dr  \t[(-122.1881,37.032),(-122.1875,37.007)]\nNeptune                       Road\t[(-121.7885,37.607),(-121.7885,37.599)]\nNevada                        St  \t[(-122.0313,37.891),(-122.0317,37.882)]\nNevada                        St  \t[(-122.1821,37.37),(-122.1815,37.376)]\nNew England Village           Dr  \t[(-122.058,37.237),(-122.0585,37.235)]\nNewark                        Blvd\t[(-122.0329,37.398),(-122.032,37.382)]\nNewark                        Blvd\t[(-122.0352,37.438),(-122.0341,37.423)]\nNewberry                      St  \t[(-122.2671,37.568),(-122.2668,37.554)]\nNewcastle                     Lane\t[(-121.918,37.167),(-121.9191,37.182)]\nNewport                       St  \t[(-122.1059,37.328),(-122.1054,37.315)]\nNicol                         Ave \t[(-122.2174,37.943),(-122.2164,37.94)]\nNicolet                       Ave \t[(-122.0174,37.696),(-122.0183,37.693)]\nNicolet                       Ave \t[(-122.0238,37.615),(-122.0238,37.61)]\nNicolet                       Ave \t[(-122.0264,37.574),(-122.0269,37.567)]\nNicolet                       Ct  \t[(-122.0242,37.641),(-122.0236,37.638)]\nNielsen                       Lane\t[(-121.744,37.777),(-121.744,37.77)]\nNiles                         Blvd\t[(-121.9933,37.803),(-121.9929,37.803)]\nNiles Canyon                  Road\t[(-121.881448,37.92865),(-121.8812,37.929)]\nNiles Canyon                  Road\t[(-121.8954,37.94),(-121.89496,37.93963)]\nNiles Canyon                  Road\t[(-121.909,37.94),(-121.9034,37.957)]\nNiles Canyon                  Road\t[(-121.9292,37.955),(-121.925931,37.9815)]\nNiles Canyon                  Road\t[(-121.9333,37.913),(-121.9317,37.919)]\nNiles Canyon                  Road\t[(-121.9352,37.912),(-121.9346,37.91)]\nNobhill                       Ct  \t[(-122.0354,37.523),(-122.0353,37.517)]\nNorbridge                     Ave \t[(-122.084,37.911),(-122.0829,37.911)]\nNorene                        Way \t[(-122.1365,37.286),(-122.136,37.287)]\nNorfolk                       Road\t[(-122.2936,37.877),(-122.2937,37.859)]\nNorfolk                       Road\t[(-122.2937,37.848),(-122.2941,37.845)]\nNoria                         Ct  \t[(-121.9319,37.288),(-121.9324,37.286)]\nNorissa                       Cir \t[(-122.0486,37.763),(-122.0484,37.77)]\nNormandie                     Ave \t[(-122.1902,37.783),(-122.1886,37.768)]\nNormandy                      Ct  \t[(-122.0629,37.971),(-122.063,37.968)]\nNormandy                      Dr  \t[(-122.0501,37.457),(-122.0506,37.451)]\nNorris Canyon                 Road\t[(-122.015,37.545),(-122.0103,37.541)]\nNorris Canyon                 Road\t[(-122.0329,37.332),(-122.0278,37.371)]\nNorth                         Blvd\t[(-122.1768,37.243),(-122.1775,37.242)]\nNorth Hill                    Ct  \t[(-122.231,37.533),(-122.2325,37.541)]\nNorthland                     Ter \t[(-122.059106,37.55559),(-122.05922,37.55498)]\nNorthrup                      St  \t[(-122.2141,37.371),(-122.215,37.381)]\nNorthvale                     Road\t[(-122.2361,37.088),(-122.2335,37.083)]\nNorthview                     Dr  \t[(-122.0504,37.887),(-122.0511,37.892)]\nNorthway                      Road\t[(-121.8857,37.748),(-121.8871,37.75)]\nNorthwood                     Dr  \t[(-122.2299,37.64),(-122.2291,37.638)]\nNorthwood                     Dr  \t[(-122.2317,37.629),(-122.2311,37.637)]\nNorthwood Com                     \t[(-121.7885,37.815),(-121.788231,37.80962)]\nNorton                        Ave \t[(-122.1977,37.967),(-122.196855,37.97165)]\nNorwood                       Pl  \t[(-121.7807,37.534),(-121.7811,37.534)]\nNottingham                    Ct  \t[(-122.0297,37.528),(-122.0303,37.522)]\nNova                          Dr  \t[(-122.2397,37.213),(-122.2394,37.214)]\nNovara                        Road\t[(-122.2377,37.47),(-122.2368,37.472)]\nNovato                        St  \t[(-122.0628,37.731),(-122.0633,37.723)]\nNula                          Way \t[(-122.0553,37.865),(-122.0552,37.855)]\nNursery                       Ave \t[(-121.9897,37.802),(-121.9901,37.795)]\nO Connell                     Lane\t[(-121.9941,37.985),(-121.9917,37.974)]\nO Connell                     Lane\t[(-122.00235,37.9875),(-121.9964,37.995)]\nO Connell                     Lane\t[(-122.0038,37.972),(-122.0036,37.975)]\nOak                           St  \t[(-122.2383,37.713),(-122.238,37.719)]\nOak                           St  \t[(-122.2437,37.636),(-122.2431,37.644)]\nOak                           St  \t[(-122.265,37.877),(-122.264,37.879)]\nOak                           St  \t[(-122.2653,37.967),(-122.2649,37.974)]\nOak                           St  \t[(-122.2666,37.947),(-122.2664,37.95)]\nOak Creek                     Ct  \t[(-121.9153,37.737),(-121.9171,37.735)]\nOak Hill                      Road\t[(-122.1409,37.647),(-122.1382,37.658)]\nOak Knoll                     Blvd\t[(-122.151,37.559),(-122.1504,37.556)]\nOakbrook                      Ct  \t[(-121.865488,37.96653),(-121.8661,37.965)]\nOakdale                       St  \t[(-122.0648,37.767),(-122.0654,37.761)]\nOakes                         Blvd\t[(-122.1523,37.316),(-122.1511,37.318)]\nOakes                         Dr  \t[(-122.034734,37.62423),(-122.0329,37.618)]\nOakland                       Ave \t[(-121.8703,37.85305),(-121.8703,37.866)]\nOakland                       Ave \t[(-122.2332,37.258),(-122.2319,37.262)]\nOakland                       Ave \t[(-122.24,37.235),(-122.2393,37.237),(-122.2387,37.24)]\nOakland                       Ave \t[(-122.2529,37.197),(-122.2521,37.203)]\nOakland                       Ave \t[(-122.2583,37.162),(-122.2569,37.167)]\nOakland Inner Harbor              \t[(-122.2625,37.913),(-122.260016,37.89484)]\nOakmont                       Ave \t[(-122.231698,37.17113),(-122.2321,37.168)]\nOakport                       St  \t[(-122.1975,37.422),(-122.1963,37.386)]\nOakport                       St  \t[(-122.2123,37.59),(-122.2117,37.585)]\nOakridge                      Road\t[(-121.7646,37.841),(-121.768787,37.84142)]\nOakridge                      Road\t[(-121.8182,37.93),(-121.8207,37.931)]\nOakridge                      Road\t[(-121.8316,37.049),(-121.828382,37)]\nOakview                       Dr  \t[(-122.2079,37.123),(-122.2074,37.116)]\nOakwood                       Dr  \t[(-122.1989,37.424),(-122.198,37.437)]\nOcaso Camino                      \t[(-121.9293,37.261),(-121.9303,37.252)]\nOccidental                    Road\t[(-122.1102,37.403),(-122.110496,37.40277)]\nOcie                          Way \t[(-122.0966,37.605),(-122.097,37.603)]\nOctavia                       St  \t[(-122.2026,37.906),(-122.2013,37.906)]\nOgden                         Dr  \t[(-121.978963,37.36863),(-121.9808,37.368)]\nOlazaba                       Ter \t[(-121.9176,37.247),(-121.917664,37.24323)]\nOld Bernal                    Ave \t[(-121.879084,37.58027),(-121.878944,37.57993)]\nOld Canyon                    Road\t[(-121.965,37.794),(-121.963,37.8)]\nOld Santa Rita                Road\t[(-121.877505,37.9429),(-121.8776,37.96)]\nOld Tower                     Road\t[(-121.7722,37.729),(-121.7704,37.729)]\nOld Warm Springs              Blvd\t[(-121.9482,37.092),(-121.9473,37.084)]\nOleander                      Ave \t[(-122.2338,37.296),(-122.2346,37.295)]\nOleander                      Ave \t[(-122.2358,37.302),(-122.236192,37.30424)]\nOleander                      St  \t[(-121.7471,37.126),(-121.7459,37.129)]\nOlive                         Ave \t[(-121.9326,37.36),(-121.9333,37.356)]\nOlive                         Ave \t[(-121.9458,37.34),(-121.9493,37.337)]\nOlive                         Ave \t[(-122.2462,37.219),(-122.2451,37.202)]\nOliver                        Way \t[(-121.9665,37.739),(-121.966295,37.73644)]\nOlivina                       Ave \t[(-121.7791,37.829),(-121.7787,37.829)]\nOlympic                       Ct  \t[(-122.0509,37.321),(-122.0518,37.31)]\nOlympus                       Ave \t[(-122.2512,37.834),(-122.2502,37.818)]\nOmak                          St  \t[(-121.9209,37.064),(-121.9209,37.071)]\nOmar                          St  \t[(-121.9719,37.221),(-121.9724,37.222)]\nOmar                          St  \t[(-121.9825,37.255),(-121.9831,37.259)]\nOmega                         Ave \t[(-122.0678,37.988),(-122.0664,37.989)]\nOneil                         Ave \t[(-122.073989,37.5886),(-122.073631,37.58413)]\nOneil                         Ave \t[(-122.076754,37.62476),(-122.0745,37.595)]\nOnondaga                      Dr  \t[(-121.9288,37.054),(-121.9282,37.048)]\nOnondaga                      Dr  \t[(-121.9312,37.054),(-121.93,37.058)]\nOpal                          Way \t[(-121.7984,37.679),(-121.7975,37.679)]\nOrange                        Ave \t[(-122.0787,37.867),(-122.0789,37.842)]\nOrchard                       Ave \t[(-122.0858,37.555),(-122.0833,37.551)]\nOrchard                       Lane\t[(-122.2475,37.694),(-122.2467,37.692)]\nOrchid                        Dr  \t[(-122.1416,37.098),(-122.1397,37.085)]\nOregon                        St  \t[(-122.2589,37.588),(-122.2565,37.591)]\nOregon                        St  \t[(-122.2794,37.561),(-122.2789,37.562)]\nOrin                          Dr  \t[(-122.2623,37.133),(-122.2626,37.142)]\nOriole                        Ave \t[(-121.7879,37.827),(-121.7879,37.851)]\nOriole                        Ave \t[(-122.1209,37.051),(-122.1205,37.071)]\nOrleans                       Dr  \t[(-122.046,37.393),(-122.0464,37.383)]\nOrleans                       Dr  \t[(-122.0473,37.438),(-122.0463,37.412)]\nOrloff                        Dr  \t[(-121.8659,37.767),(-121.865,37.765)]\nOrloff                        Dr  \t[(-121.8677,37.768),(-121.8669,37.768)]\nOsgood                        Road\t[(-121.9371,37.071),(-121.9363,37.06)]\nOsgood                        Road\t[(-121.949,37.262),(-121.946,37.208)]\nOstrander                     Road\t[(-122.2364,37.413),(-122.2356,37.429)]\nOtis                          Dr  \t[(-122.2564,37.619),(-122.256,37.618)]\nOtis                          Dr  \t[(-122.2605,37.627),(-122.2593,37.625)]\nOutlook                       Ave \t[(-122.1616,37.636),(-122.1612,37.632)]\nOutlook                       Ave \t[(-122.168,37.698),(-122.1678,37.697)]\nOutlook                       Ave \t[(-122.1743,37.75),(-122.1736,37.746)]\nOutlook                       Ave \t[(-122.1789,37.788),(-122.1786,37.787)]\nOutrigger                     Dr  \t[(-122.1802,37.95),(-122.178449,37.9197)]\nOveracker                     Ave \t[(-121.9617,37.652),(-121.9614,37.648),(-121.9607,37.643)]\nOwl                           Ct  \t[(-121.91654,37.19636),(-121.915693,37.19031)]\nOxford                        Pl  \t[(-121.7752,37.532),(-121.7747,37.535)]\nOxford                        St  \t[(-122.2651,37.702),(-122.2651,37.699)]\nOxford                        St  \t[(-122.2657,37.742),(-122.2656,37.734)]\nOyster Pond                   Road\t[(-122.2408,37.407),(-122.2404,37.403)]\nOyster Shoals                     \t[(-122.2372,37.394),(-122.2365,37.393)]\nPacific                       Ave \t[(-121.754552,37.76177),(-121.753824,37.76164)]\nPacific                       Ave \t[(-122.1632,37.171),(-122.1621,37.156),(-122.1613,37.15)]\nPacific                       Ave \t[(-122.1661,37.214),(-122.1654,37.204)]\nPacific                       Ave \t[(-122.2419,37.683),(-122.2408,37.678)]\nPacific                       Ave \t[(-122.2535,37.735),(-122.2527,37.731)]\nPacific                       St  \t[(-122.0342,37.962),(-122.0371,37.962)]\nPacific                       St  \t[(-122.0544,37.294),(-122.0548,37.297)]\nPacket Landing                Road\t[(-122.2376,37.471),(-122.2372,37.458)]\nPagano                        Ct  \t[(-122.1371,37.959),(-122.1379,37.954)]\nPala                          Ave \t[(-122.2328,37.28),(-122.2319,37.283)]\nPalatka                       Lane\t[(-122.0915,37.35),(-122.0927,37.354)]\nPalm                          Ave \t[(-121.932,37.329),(-121.9319,37.319)]\nPalm                          Dr  \t[(-122.0503,37.898),(-122.0501,37.897)]\nPalm                          Dr  \t[(-122.052051,37.88751),(-122.0519,37.885)]\nPalmer                        Dr  \t[(-121.86601,37.85873),(-121.865793,37.84778)]\nPalmer                        Dr  \t[(-122.003005,37.52852),(-122.0026,37.527)]\nPalmetto                      Dr  \t[(-122.0189,37.111),(-122.018,37.106)]\nPalo Verde                    Road\t[(-122.0242,37.959),(-122.023,37.955),(-122.0222,37.961)]\nPaloma                        Ave \t[(-122.2347,37.126),(-122.2353,37.136)]\nPalomares                     Road\t[(-121.9404,37.123),(-121.9407,37.11)]\nPalomares                     Road\t[(-121.9501,37.318),(-121.948,37.304)]\nPalomares                     Road\t[(-121.9683,37.439),(-121.9686,37.436)]\nPalomares                     Road\t[(-121.9976,37.676),(-121.997,37.674)]\nPalomares                     Road\t[(-122.0191,37.873),(-122.0056,37.744)]\nPalomino                      Dr  \t[(-121.8536,37.59),(-121.852,37.589)]\nPampas                        Ave \t[(-122.188335,37.87635),(-122.1878,37.872)]\nPanda                         Way \t[(-122.0668,37.773),(-122.0662,37.762)]\nPanitz                        St  \t[(-122.0553,37.686),(-122.0553,37.679)]\nPanorama                      Trl \t[(-121.8996,37.291),(-121.9098,37.262)]\nPanorama                      Trl \t[(-121.9023,37.342),(-121.8995,37.303)]\nPanorama                      Trl \t[(-121.9096,37.37),(-121.9098,37.371)]\nPanorama                      Trl \t[(-121.9148,37.366),(-121.9141,37.356)]\nPanoramic                     Way \t[(-122.2454,37.695),(-122.2436,37.688)]\nPapago                        St  \t[(-121.9155,37.826),(-121.9147,37.811)]\nParada                        St  \t[(-121.9949,37.166),(-121.9931,37.153)]\nPardee                        Ave \t[(-121.9885,37.367),(-121.9893,37.359)]\nPardee                        Dr  \t[(-122.1991,37.286),(-122.1974,37.27)]\nParish                        Ct  \t[(-122.236048,37.33387),(-122.235406,37.3307)]\nPark                          Ave \t[(-122.2407,37.634),(-122.2404,37.638)]\nPark                          Ave \t[(-122.242,37.616),(-122.2416,37.621)]\nPark                          Ave \t[(-122.2461,37.565),(-122.2443,37.589)]\nPark                          Ave \t[(-122.2841,37.316),(-122.2851,37.314)]\nPark                          Blvd\t[(-122.2058,37.222),(-122.2047,37.23)]\nPark                          Blvd\t[(-122.218,37.087),(-122.2173,37.091)]\nPark                          Blvd\t[(-122.2312,37.051),(-122.2303,37.049)]\nPark                          Blvd\t[(-122.2387,37.027),(-122.2377,37.028),(-122.2362,37.031)]\nPark                          Blvd\t[(-122.2461,37.013),(-122.2457,37.013)]\nPark                          Lane\t[(-122.2309,37.163),(-122.2313,37.166)]\nPark                          St  \t[(-121.7711,37.86),(-121.7699,37.863)]\nPark                          St  \t[(-122.2377,37.686),(-122.237,37.695)]\nPark                          St  \t[(-122.2491,37.541),(-122.247562,37.56407)]\nPark                          St  \t[(-122.2825,37.544),(-122.282424,37.5421)]\nPark                          Way \t[(-122.0875,37.97),(-122.087418,37.96824)]\nPark                          Way \t[(-122.2339,37.288),(-122.2332,37.288)]\nPark                          Way \t[(-122.2366,37.289),(-122.2357,37.288)]\nPark                          Way \t[(-122.3038,37.798),(-122.3031,37.8)]\nPark Blvd                     Way \t[(-122.2303,37.049),(-122.2287,37.049)]\nPark Center                   Lane\t[(-121.9793,37.431),(-121.9798,37.425)]\nParker                        Ave \t[(-122.1647,37.685),(-122.1643,37.686)]\nParker                        Road\t[(-122.0876,37.181),(-122.0859,37.17)]\nParker                        St  \t[(-122.2664,37.623),(-122.2643,37.626)]\nParkmeadow                    Dr  \t[(-121.9319,37.062),(-121.9322,37.066)]\nParkmeadow                    Dr  \t[(-121.9324,37.099),(-121.9317,37.104)]\nParkridge                     Dr  \t[(-122.1438,37.884),(-122.1428,37.9)]\nParkside                      Dr  \t[(-121.886474,37.83325),(-121.8863,37.834)]\nParkside                      Dr  \t[(-121.8925,37.806),(-121.8916,37.809)]\nParkside                      Dr  \t[(-121.895065,37.79588),(-121.8949,37.797)]\nParkside                      Dr  \t[(-121.9836,37.598),(-121.9851,37.594),(-121.9861,37.592)]\nParkside                      Dr  \t[(-122.0475,37.603),(-122.0443,37.596)]\nParkside                      Dr  \t[(-122.0595,37.008),(-122.0592,37.012)]\nParkview                      Road\t[(-122.0548,37.023),(-122.0548,37.02)]\nParnassus                     Road\t[(-122.2525,37.814),(-122.2518,37.814)]\nParsons                       Ct  \t[(-122.082,37.056),(-122.0812,37.053)]\nPartridge                     Ave \t[(-122.1597,37.655),(-122.1584,37.652)]\nPartridge Com                     \t[(-121.7876,37.877),(-121.7876,37.882)]\nParu                          St  \t[(-122.2583,37.712),(-122.2574,37.725)]\nParu                          St  \t[(-122.2601,37.687),(-122.2594,37.695)]\nPasatiempo                    St  \t[(-121.7252,37.262),(-121.7252,37.27)]\nPaseo del Cajon                   \t[(-121.8901,37.699),(-121.889101,37.68411)]\nPaseo del Rio                     \t[(-122.1309,37.842),(-122.1332,37.836),(-122.134,37.835)]\nPaseo Grande                      \t[(-122.1197,37.83),(-122.1204,37.826)]\nPaseo Grande                      \t[(-122.1231,37.812),(-122.1234,37.809)]\nPaseo Largavista                  \t[(-122.1287,37.822),(-122.1281,37.811)]\nPaseo Padre                   Pkwy\t[(-121.9143,37.005),(-121.913522,37)]\nPaseo Padre                   Pkwy\t[(-121.9188,37.004),(-121.9177,37.004)]\nPaseo Padre                   Pkwy\t[(-121.9292,37.083),(-121.9295,37.088)]\nPaseo Padre                   Pkwy\t[(-121.9302,37.137),(-121.9298,37.146)]\nPaseo Padre                   Pkwy\t[(-121.9357,37.342),(-121.9327,37.318)]\nPaseo Padre                   Pkwy\t[(-121.9594,37.433),(-121.9569,37.419)]\nPaseo Padre                   Pkwy\t[(-121.960768,37.44248),(-121.9599,37.437)]\nPaseo Padre                   Pkwy\t[(-121.9643,37.462),(-121.9618,37.449)]\nPaseo Padre                   Pkwy\t[(-121.9885,37.578),(-121.9877,37.574)]\nPaseo Padre                   Pkwy\t[(-122.0021,37.639),(-121.996,37.628)]\nPaseo Padre                   Pkwy\t[(-122.0332,37.819),(-122.0307,37.809)]\nPaseo Padre                   Pkwy\t[(-122.0414,37.734),(-122.0445,37.708)]\nPaseo Padre                   Pkwy\t[(-122.045898,37.70023),(-122.047,37.695)]\nPaseo Padre                   Pkwy\t[(-122.049,37.684),(-122.05,37.67999)]\nPaseo Padre                   Pkwy\t[(-122.051153,37.67586),(-122.0517,37.674)]\nPaseo Santa Cruz                  \t[(-121.9052,37.65),(-121.904,37.65)]\nPaseo Santa Cruz                  \t[(-121.906145,37.66172),(-121.905945,37.65817)]\nPatterson Pass                Road\t[(-121.556654,37.14753),(-121.556,37.148)]\nPatterson Pass                Road\t[(-121.574131,37.07538),(-121.573093,37.09003)]\nPatterson Ranch               Road\t[(-122.0702,37.545),(-122.0855,37.509),(-122.0902,37.515)]\nPaxton                        Ct  \t[(-122.0092,37.388),(-122.0101,37.378)]\nPayne                         Ct  \t[(-121.9133,37.841),(-121.9139,37.84)]\nPeach                         Ct  \t[(-122.0477,37.295),(-122.0473,37.293)]\nPeach                         St  \t[(-122.2339,37.527),(-122.2334,37.532),(-122.2328,37.537)]\nPeach                         St  \t[(-122.2352,37.502),(-122.2354,37.514)]\nPeachtree                     Ave \t[(-122.0511,37.277),(-122.0517,37.275)]\nPeachtree                     Dr  \t[(-122.091,37.209),(-122.0913,37.199)]\nPearl                         St  \t[(-122.2319,37.672),(-122.2316,37.676)]\nPearl                         St  \t[(-122.2337,37.651),(-122.2329,37.661)]\nPearl                         St  \t[(-122.2383,37.594),(-122.2366,37.615)]\nPearl                         St  \t[(-122.2551,37.179),(-122.2546,37.174)]\nPeary                         Ct  \t[(-121.769,37.711),(-121.7686,37.706)]\nPecan                         Ct  \t[(-121.9126,37.743),(-121.9142,37.739)]\nPeladeau                      St  \t[(-122.2888,37.383),(-122.2889,37.386)]\nPelican                       Ct  \t[(-121.7907,37.839),(-121.7902,37.832)]\nPenniman                      Ave \t[(-122.2018,37.863),(-122.2012,37.856)]\nPennsylvania                  Ave \t[(-121.9854,37.532),(-121.9862,37.523)]\nPeony                         Ct  \t[(-121.9798,37.204),(-121.9804,37.198)]\nPepperdine                    St  \t[(-122.1501,37.989),(-122.1488,37.98)]\nPeppertree                    Ct  \t[(-121.9416,37.16),(-121.9412,37.163)]\nPeppertree                    Road\t[(-121.9421,37.127),(-121.94222,37.1302)]\nPeralta                       Ave \t[(-122.1585,37.293),(-122.1592,37.29)]\nPeralta                       Ave \t[(-122.1639,37.267),(-122.1653,37.27)]\nPeralta                       Blvd\t[(-121.9856,37.63),(-121.9867,37.627)]\nPeralta                       Blvd\t[(-122.0022,37.595),(-122.0045,37.591)]\nPeralta                       Blvd\t[(-122.0073,37.573),(-122.0082,37.562)]\nPeralta                       St  \t[(-122.2832,37.243),(-122.2829,37.246)]\nPeralta                       St  \t[(-122.2933,37.113),(-122.2926,37.116)]\nPeralta                       St  \t[(-122.2943,37.103),(-122.2937,37.111)]\nPeralta                       St  \t[(-122.2974,37.061),(-122.2973,37.063)]\nPeridot                       Dr  \t[(-121.8024,37.648),(-121.8024,37.645)]\nPeriwinkle                    Road\t[(-122.0451,37.301),(-122.044758,37.29844)]\nPerkins                       St  \t[(-122.0185,37.617),(-122.0177,37.613)]\nPerkins                       St  \t[(-122.2553,37.105),(-122.2557,37.096)]\nPerlata Creek                     \t[(-122.2027,37.941),(-122.2031,37.936)]\nPerlata Creek                     \t[(-122.2059,37.92),(-122.2092,37.906)]\nPerlata Creek                     \t[(-122.2133,37.891),(-122.214,37.885)]\nPerlata Creek                     \t[(-122.2158,37.753),(-122.2155,37.739)]\nPerlata Creek                     \t[(-122.21853,37.83163),(-122.2188,37.826)]\nPerry                         Road\t[(-122.0265,37.846),(-122.0256,37.844)]\nPershing                      Dr  \t[(-122.1618,37.278),(-122.1613,37.271),(-122.1609,37.266)]\nPershing                      Dr  \t[(-122.1633,37.299),(-122.1628,37.291)]\nPershing                      Dr  \t[(-122.165,37.321),(-122.1645,37.315)]\nPershing                      Dr  \t[(-122.1662,37.339),(-122.1658,37.333)]\nPestana                       Pl  \t[(-121.7578,37.84),(-121.757776,37.84644)]\nPeterman                      Ave \t[(-122.0945,37.392),(-122.0918,37.421)]\nPeters                        Ave \t[(-121.8769,37.6),(-121.8763,37.608)]\nPeters                        St  \t[(-122.1287,37.068),(-122.128,37.073)]\nPeterson                      St  \t[(-122.232,37.733),(-122.2316,37.739)]\nPeterson                      Way \t[(-122.0967,37.162),(-122.0952,37.159)]\nPetroleum                     St  \t[(-122.3168,37.13),(-122.3177,37.13)]\nPetronave                     Dr  \t[(-121.8344,37.469),(-121.83751,37.55738)]\nPickering                     Ave \t[(-121.9596,37.722),(-121.958868,37.72618)]\nPickering                     Ave \t[(-121.964,37.698),(-121.9637,37.7)]\nPico                          Road\t[(-121.9165,37.524),(-121.9177,37.505)]\nPiedmont                      Ave \t[(-122.2511,37.644),(-122.251,37.624)]\nPiedmont                      Ave \t[(-122.2527,37.263),(-122.2521,37.268)]\nPiedmont                      Cres\t[(-122.2513,37.671),(-122.2503,37.661)]\nPierce                        Ave \t[(-122.1683,37.186),(-122.1672,37.168)]\nPierce                        St  \t[(-122.3045,37.891),(-122.3042,37.884)]\nPike                          Ct  \t[(-121.9219,37.08),(-121.9224,37.079)]\nPimlico                       Dr  \t[(-121.8616,37.998),(-121.8618,37.008)]\nPine                          St  \t[(-121.7758,37.902),(-121.7746,37.906)]\nPine                          St  \t[(-121.7784,37.894),(-121.7776,37.897)]\nPine                          St  \t[(-121.7869,37.882),(-121.7864,37.883)]\nPine                          St  \t[(-121.9216,37.243),(-121.9226,37.235)]\nPine                          St  \t[(-122.303,37.074),(-122.3026,37.084)]\nPine                          St  \t[(-122.3034,37.063),(-122.3032,37.069)]\nPine Needle                   Dr  \t[(-122.2127,37.478),(-122.2125,37.473)]\nPinewood                      Road\t[(-122.2219,37.424),(-122.2211,37.429)]\nPinto                         Ct  \t[(-122.0228,37.08),(-122.0224,37.073)]\nPiper                         St  \t[(-122.216,37.39),(-122.2155,37.385)]\nPippin                        St  \t[(-122.1747,37.344),(-122.1734,37.332)]\nPizarro                       Dr  \t[(-122.025,37.556),(-122.026,37.544)]\nPlacer                        Way \t[(-121.9789,37.415),(-121.9769,37.407)]\nPlata                         Way \t[(-121.9402,37.066),(-121.9394,37.069)]\nPleasant                      Way \t[(-122.1653,37.311),(-122.1646,37.302)]\nPleasant Hill                 Road\t[(-121.9264,37.854),(-121.9268,37.86)]\nPleasant Valley               Ct  \t[(-122.2455,37.298),(-122.2439,37.305)]\nPleasanton                    Ave \t[(-121.8782,37.636),(-121.8784,37.63)]\nPleasanton                    Ave \t[(-121.8819,37.586),(-121.882761,37.5753)]\nPleasanton Canal                  \t[(-121.886052,37.82228),(-121.8833,37.835)]\nPleasanton Sunol              Road\t[(-121.8765,37.987),(-121.8775,37.982)]\nPleasanton Sunol              Road\t[(-121.8851,37.39),(-121.8858,37.387)]\nPleitner                      Ave \t[(-122.2098,37.946),(-122.2094,37.953)]\nPlomosa                       Road\t[(-121.9106,37.703),(-121.9102,37.696)]\nPlummer Creek                     \t[(-122.0778,37.095),(-122.0852,37.069)]\nPlymouth                      Ave \t[(-121.9369,37.422),(-121.9378,37.424)]\nPlymouth                      Dr  \t[(-122.0798,37.132),(-122.0802,37.11)]\nPlymouth                      St  \t[(-122.1643,37.425),(-122.1641,37.418)]\nPlymouth                      St  \t[(-122.1661,37.454),(-122.1652,37.44)]\nPlymouth                      St  \t[(-122.1763,37.593),(-122.1758,37.586)]\nPoda                          Ct  \t[(-121.9321,37.308),(-121.9315,37.312)]\nPoinciana                     Pl  \t[(-121.9946,37.341),(-121.994,37.337)]\nPoint Eden                    Way \t[(-122.1208,37.255),(-122.1262,37.256)]\nPolaris                       Ave \t[(-122.064185,37.84562),(-122.0647,37.84)]\nPolk                          Way \t[(-121.745,37.867),(-121.745,37.858)]\nPolvorosa                     Ct  \t[(-122.0178,37.594),(-122.0174,37.591)]\nPomar Vista                   Ave \t[(-122.0989,37.958),(-122.0973,37.969)]\nPomona                        Way \t[(-121.743614,37.84357),(-121.7427,37.839)]\nPonderosa                     Dr  \t[(-121.749629,37.12363),(-121.74967,37.11779)]\nPontiac                       St  \t[(-122.165,37.365),(-122.1647,37.359),(-122.1643,37.354)]\nPontiac                       St  \t[(-122.1665,37.383),(-122.166309,37.3779)]\nPoplar                        Ave \t[(-122.1018,37.704),(-122.098,37.721)]\nPoplar                        Path\t[(-122.2678,37.968),(-122.2687,37.967)]\nPort Sailwood                 Dr  \t[(-122.0261,37.467),(-122.0265,37.463)]\nPortage                       Road\t[(-121.9241,37.092),(-121.9257,37.109)]\nPortal                        Ave \t[(-122.2281,37.148),(-122.2282,37.157)]\nPortland                      Ave \t[(-122.2861,37.949),(-122.2858,37.949)]\nPortland                      Ave \t[(-122.2945,37.945),(-122.2937,37.946)]\nPortofino                     Cir \t[(-122.123984,37.08583),(-122.124375,37.08809)]\nPortola                       Ave \t[(-121.7822,37.948),(-121.7806,37.94),(-121.7794,37.935)]\nPortola                       Ave \t[(-122.2723,37.696),(-122.2713,37.691)]\nPortola                       Dr  \t[(-122.019284,37.56839),(-122.0199,37.563)]\nPortola                       Dr  \t[(-122.1482,37.024),(-122.1488,37.021)]\nPortola                       Dr  \t[(-122.1505,37.019),(-122.1516,37.016)]\nPortsmouth                    Ave \t[(-122.1023,37.262),(-122.1013,37.254)]\nPortsmouth                    Ave \t[(-122.1064,37.315),(-122.1064,37.308)]\nPortwood                      Ave \t[(-122.2322,37.76),(-122.2317,37.765)]\nPosen                         Ave \t[(-122.2828,37.848),(-122.2822,37.85)]\nPosey                         Loop\t[(-122.276,37.854),(-122.276,37.859)]\nPotawatami                    Dr  \t[(-121.9238,37.063),(-121.924,37.056)]\nPowell                        St  \t[(-122.2926,37.388),(-122.2937,37.387)]\nPowell                        St  \t[(-122.3101,37.375),(-122.3108,37.375)]\nPrairie                       Dr  \t[(-121.9124,37.667),(-121.9123,37.664)]\nPrarie                        Dr  \t[(-121.9102,37.652),(-121.910115,37.65226)]\nPreda                         St  \t[(-122.1686,37.244),(-122.1691,37.255)]\nPresley                       Way \t[(-122.2461,37.462),(-122.2462,37.465)]\nPreston                       Ct  \t[(-121.733536,37.01447),(-121.733204,37.00955)]\nPreston                       Ct  \t[(-121.9666,37.659),(-121.9652,37.668)]\nPrestwick                     Ave \t[(-122.0369,37.208),(-122.0363,37.202)]\nPrince                        Dr  \t[(-121.9164,37.155),(-121.9185,37.145)]\nPrince                        St  \t[(-122.2582,37.541),(-122.2568,37.543)]\nPrince                        St  \t[(-122.2723,37.524),(-122.2713,37.525)]\nPrince                        St  \t[(-122.2802,37.512),(-122.2794,37.514)]\nPrinceton                     Ter \t[(-121.977476,37.61102),(-121.977871,37.61066)]\nPrinceton                     Way \t[(-121.75,37.814),(-121.7472,37.814)]\nProctor                       Ave \t[(-122.2222,37.364),(-122.2217,37.36)]\nProctor                       Ave \t[(-122.2267,37.406),(-122.2251,37.386)]\nProctor                       Road\t[(-122.0671,37.192),(-122.067,37.2)]\nProctor                       Road\t[(-122.0761,37.177),(-122.073739,37.1724)]\nProspect                      St  \t[(-122.2492,37.699),(-122.249,37.695)]\nProsperity                    Way \t[(-122.1033,37.031),(-122.1044,37.042)]\nPueblo                        Dr  \t[(-122.1748,37.269),(-122.1743,37.269)]\nPueblo Creek                      \t[(-122.0958,37.203),(-122.0965,37.205)]\nPueblo Serena                     \t[(-122.0958,37.222),(-122.0958,37.203)]\nPueblo Spring                     \t[(-122.0964,37.238),(-122.0965,37.222)]\nPuerto Vallarta                   \t[(-121.8719,37.54),(-121.8728,37.528)]\nPulaski                       Dr  \t[(-122.0262,37.107),(-122.0254,37.1)]\nPulsar                        Ave \t[(-121.7892,37.58955),(-121.7892,37.60011)]\nPurcell                       Pl  \t[(-122.0249,37.718),(-122.0224,37.699)]\nPurdue                        St  \t[(-122.1555,37.95),(-122.1565,37.949)]\nPyramid                       St  \t[(-121.768592,37.56164),(-121.768329,37.56198)]\nQuail Run                     Road\t[(-122.0448,37.808),(-122.0439,37.805)]\nQuebec                        Ave \t[(-122.1528,37.786),(-122.1535,37.785)]\nQuebec Common                     \t[(-122.051368,37.60756),(-122.05282,37.60102)]\nQueen Anne                    Dr  \t[(-122.0751,37.883),(-122.077,37.865)]\nQuercus                       Ct  \t[(-122.0267,37.59),(-122.0269,37.572)]\nQuigley                       Pl  \t[(-122.1962,37.867),(-122.1957,37.861)]\nQuinn                         Lane\t[(-122.066405,37.74794),(-122.066039,37.73557)]\nQuintana                      Ct  \t[(-121.9516,37.464),(-121.9522,37.463)]\nQuintana                      Way \t[(-121.9504,37.49),(-121.9508,37.489)]\nRachelle                      St  \t[(-121.7257,37.945),(-121.7257,37.932)]\nRacine                        St  \t[(-122.2622,37.494),(-122.2624,37.501)]\nRacoon Hallow                 Ct  \t[(-121.914577,37.63603),(-121.913452,37.63738)]\nRadele                        Ct  \t[(-122.0101,37.363),(-122.0105,37.357)]\nRagland                       St  \t[(-122.109,37.877),(-122.1089,37.872)]\nRailroad                      Ave \t[(-121.7661,37.841),(-121.7654,37.842)]\nRailroad                      Ave \t[(-121.771533,37.82472),(-121.771,37.826)]\nRailroad                      Ave \t[(-121.779215,37.79798),(-121.779265,37.79635)]\nRailroad                      Ave \t[(-121.891,37.94),(-121.8924,37.941)]\nRailroad                      Ave \t[(-122.0245,37.013),(-122.0234,37.003),(-122.0223,37.993)]\nRailroad                      Ave \t[(-122.1835,37.394),(-122.1828,37.388)]\nRainier                       Ave \t[(-121.8009,37.803),(-121.7999,37.804)]\nRalston Com                       \t[(-121.9775,37.428),(-121.9771,37.432)]\nRamona                        Ave \t[(-122.2391,37.291),(-122.2373,37.293)]\nRamona                        Ave \t[(-122.244153,37.31499),(-122.243523,37.31109)]\nRancho Arroyo                 Pkwy\t[(-121.9932,37.785),(-121.9929,37.774),(-121.9926,37.769)]\nRancho Higuera                Road\t[(-121.9112,37.96),(-121.9105,37.959)]\nRandall                       Ct  \t[(-122.0749,37.976),(-122.0756,37.968)]\nRandicik                      Ct  \t[(-121.863424,37.95818),(-121.863445,37.9654)]\nRandy                         St  \t[(-122.1517,37.809),(-122.1523,37.807)]\nRanker                        Pl  \t[(-122.0725,37.4),(-122.0737,37.395)]\nRanspot                       Dr  \t[(-122.0972,37.999),(-122.0959,37)]\nRaymond                       Road\t[(-121.7462,37.306),(-121.7326,37.305)]\nReading                       Ave \t[(-122.0779,37.874),(-122.0735,37.875)]\nRedbud                        Lane\t[(-122.0969,37.627),(-122.0978,37.627)]\nRedding                       Pl  \t[(-122.1919,37.843),(-122.1921,37.841)]\nRedding                       St  \t[(-122.191432,37.84242),(-122.1911,37.842)]\nRedding                       St  \t[(-122.1943,37.858),(-122.1934,37.854)]\nRedding                       St  \t[(-122.1978,37.901),(-122.1975,37.895)]\nRedwood                       Ct  \t[(-121.9142,37.69),(-121.9144,37.696)]\nRedwood                       Road\t[(-122.0726,37.155),(-122.0726,37.139)]\nRedwood                       Road\t[(-122.0726,37.18079),(-122.0726,37.179)]\nRedwood                       Road\t[(-122.0726,37.909),(-122.0727,37.906)]\nRedwood                       Road\t[(-122.0727,37.955),(-122.0727,37.948)]\nRedwood                       Road\t[(-122.0736,37.393),(-122.075736,37.37634)]\nRedwood                       Road\t[(-122.1493,37.98),(-122.1437,37.001)]\nRedwood                       Road\t[(-122.174191,37.96191),(-122.174,37.966)]\nRedwood                       Road\t[(-122.1819,37.978),(-122.1811,37.968)]\nRedwood                       Road\t[(-122.1882,37.986),(-122.1877,37.986)]\nRedwood Creek                     \t[(-122.1366,37.968),(-122.1302,37.918)]\nReed                          Ave \t[(-121.7581,37.516),(-121.7559,37.516)]\nRegailia                      Ave \t[(-121.86701,37.62944),(-121.867052,37.62182)]\nRegal                         Ave \t[(-122.0839,37.468),(-122.0857,37.449)]\nRegents                       Blvd\t[(-122.0662,37.779),(-122.066625,37.77216)]\nRegents                       Blvd\t[(-122.0673,37.759),(-122.0677,37.751)]\nRegents                       Blvd\t[(-122.0681,37.74),(-122.068,37.73)]\nRegents                       Blvd\t[(-122.068594,37.80778),(-122.0681,37.805)]\nRegents                       Blvd\t[(-122.077,37.865),(-122.0761,37.862)]\nRegional                      St  \t[(-121.9328,37.029),(-121.9347,37.072)]\nReinhardt                     Dr  \t[(-122.1831,37.922),(-122.1828,37.918)]\nRenwick                       St  \t[(-122.1989,37.797),(-122.1982,37.802)]\nRepublic                      Ave \t[(-122.1688,37.046),(-122.1721,37.032)]\nRequa                         Road\t[(-122.2323,37.199),(-122.2293,37.21)]\nRevere                        Ave \t[(-122.03,37.129),(-122.0287,37.129)]\nRevere                        Ave \t[(-122.1347,37.359),(-122.134,37.362)]\nReyes                         Dr  \t[(-122.0791,37.873),(-122.0787,37.873)]\nReynolds                      Dr  \t[(-122.0036,37.671),(-122.002954,37.66809)]\nRhine                         Way \t[(-121.84112,37.58518),(-121.840944,37.56363)]\nRhododendron                  Dr  \t[(-121.74419,37.09645),(-121.7445,37.105)]\nRibera                        Ct  \t[(-122.0292,37.644),(-122.0286,37.641)]\nRicardo                       Ave \t[(-122.1176,37.761),(-122.1148,37.745)]\nRich                          Ave \t[(-122.0351,37.309),(-122.0354,37.303)]\nRichardson                    Way \t[(-122.2263,37.224),(-122.225,37.22)]\nRichmond                      Ave \t[(-121.9969,37.452),(-121.9975,37.442)]\nRichmond                      Blvd\t[(-122.2584,37.211),(-122.2573,37.218)]\nRichmond                      Blvd\t[(-122.2592,37.195),(-122.2587,37.201)]\nRidge                         Trl \t[(-121.8615,37.438),(-121.859211,37.42899)]\nRidge Top                     Road\t[(-122.1538,37.164),(-122.1566,37.179)]\nRidgeview                     Ter \t[(-121.970517,37.63559),(-121.970862,37.63332)]\nRidgeway                      Ave \t[(-122.2513,37.286),(-122.2518,37.292)]\nRidgeway                      Ave \t[(-122.2539,37.299),(-122.2548,37.302)]\nRidgewood                     Dr  \t[(-122.051305,37.59386),(-122.053772,37.58263)]\nRidley                        Dr  \t[(-121.9794,37.65),(-121.979,37.644)]\nRiley                         Dr  \t[(-122.2999,37.858),(-122.299,37.86)]\nRincon                        Ave \t[(-121.7824,37.828),(-121.7824,37.837)]\nRispen                        Dr  \t[(-122.2342,37.621),(-122.2326,37.634)]\nRiverdale                     Ct  \t[(-121.9198,37.891),(-121.9201,37.893)]\nRiverside                     Ave \t[(-121.9758,37.74),(-121.9764,37.725)]\nRiviera                       Dr  \t[(-122.0003,37.954),(-122.0003,37.957)]\nRiviera                       Dr  \t[(-122.0003,37.96),(-122.0003,37.968)]\nRoberts                       Ave \t[(-121.9554,37.299),(-121.955,37.282)]\nRobertson                     Ave \t[(-122.0164,37.33),(-122.0173,37.318)]\nRobertson                     Ave \t[(-122.021,37.275),(-122.0213,37.27)]\nRobin                         St  \t[(-121.9701,37.297),(-121.9698,37.287)]\nRobinson                      Dr  \t[(-122.1825,37.096),(-122.1807,37.054)]\nRobledo                       Dr  \t[(-122.1734,37.304),(-122.1706,37.281)]\nRoca                          Dr  \t[(-122.0335,37.609),(-122.0314,37.599)]\nRochelle                      Ave \t[(-122.0603,37.347),(-122.0594,37.329)]\nRockford                      Road\t[(-122.0848,37.819),(-122.0842,37.814)]\nRockingham                    Dr  \t[(-121.8681,37.948),(-121.8689,37.944)]\nRocklin                       Dr  \t[(-122.070801,37.71701),(-122.0712,37.713)]\nRocklin                       Dr  \t[(-122.0719,37.698),(-122.0722,37.689)]\nRockridge                     Blvd\t[(-122.242,37.457),(-122.2416,37.464)]\nRockridge                     Blvd\t[(-122.2424,37.454),(-122.2417,37.453)]\nRockrose                      Dr  \t[(-122.0105,37.248),(-122.0114,37.252)]\nRockwood                      Dr  \t[(-122.0128,37.492),(-122.0109,37.482)]\nRodney Com                        \t[(-121.9562,37.385),(-121.9555,37.382)]\nRogers                        Ave \t[(-122.0044,37.43),(-122.0061,37.409)]\nRolling Hills                 Dr  \t[(-121.948386,37.07126),(-121.947082,37.07103)]\nRolling Hills                 Dr  \t[(-121.950806,37.10304),(-121.950378,37.11376)]\nRollinghills                  Cir \t[(-121.945273,37.06404),(-121.945249,37.0671)]\nRomeo                         Pl  \t[(-122.0562,37.692),(-122.0571,37.694)]\nRomey                         Lane\t[(-122.0603,37.825),(-122.0587,37.825)]\nRonald                        Ct  \t[(-121.9528,37.259),(-121.9537,37.259)]\nRonda                         St  \t[(-122.125,37.865),(-122.1251,37.856)]\nRoosevelt                     Pl  \t[(-121.9918,37.267),(-121.9923,37.263)]\nRosario                       Ct  \t[(-122.110662,37.79847),(-122.109931,37.78596)]\nRose                          Ave \t[(-121.8792,37.616),(-121.8838,37.656)]\nRose                          Ave \t[(-122.244329,37.28237),(-122.2441,37.284),(-122.2438,37.287)]\nRose                          Ave \t[(-122.2476,37.256),(-122.2469,37.268)]\nRose                          Dr  \t[(-122.1451,37.142),(-122.1445,37.138)]\nRose                          St  \t[(-121.757,37.84),(-121.757,37.831)]\nRose                          St  \t[(-122.2586,37.834),(-122.2575,37.836)]\nRose                          St  \t[(-122.2644,37.83),(-122.263462,37.83335)]\nRose                          St  \t[(-122.2696,37.82),(-122.2689,37.82)]\nRose                          St  \t[(-122.2843,37.782),(-122.2829,37.787)]\nRose                          St  \t[(-122.2882,37.769),(-122.287,37.771)]\nRosedale                      Ct  \t[(-121.9232,37.9),(-121.924,37.897)]\nRosegate                      Ter \t[(-121.969628,37.63263),(-121.970152,37.638)]\nRoselli                       Dr  \t[(-121.7848,37.636),(-121.7848,37.628)]\nRosemary                      Ct  \t[(-121.9314,37.088),(-121.9314,37.085)]\nRosewood                      Ct  \t[(-122.0622,37.37),(-122.0618,37.372)]\nRosewood Common                   \t[(-121.964615,37.21789),(-121.964292,37.213)]\nRoss                          Cir \t[(-122.2466,37.502),(-122.2474,37.514)]\nRoss Gate                     Way \t[(-121.8794,37.845),(-121.8818,37.836)]\nRothchild                     Ct  \t[(-121.950257,37.08452),(-121.951086,37.08115)]\nRoundhill                     Dr  \t[(-122.0376,37.542),(-122.0377,37.536)]\nRousillon                     Ave \t[(-122.046,37.672),(-122.0451,37.674)]\nRoxanne                       St  \t[(-121.7288,37.853),(-121.7287,37.849)]\nRoxbury                       Ave \t[(-122.1354,37.339),(-122.1346,37.336)]\nRoxbury                       Lane\t[(-122.0333,37.615),(-122.0329,37.618)]\nRoxbury                       Lane\t[(-122.0359,37.623),(-122.0356,37.619)]\nRoyal Ann                     Dr  \t[(-122.0267,37.889),(-122.0268,37.88)]\nRoyal Ann                     Dr  \t[(-122.0273,37.871),(-122.0278,37.862)]\nRoyal Ann                     St  \t[(-122.1696,37.367),(-122.1691,37.362)]\nRoyal Ann                     St  \t[(-122.1705,37.38),(-122.1702,37.376)]\nRoyal Palm                    Dr  \t[(-121.9945,37.315),(-121.9922,37.303)]\nRuby                          Road\t[(-121.8029,37.688),(-121.8023,37.68)]\nRuby                          St  \t[(-122.0765,37.815),(-122.0751,37.802)]\nRudsdale                      St  \t[(-122.1855,37.552),(-122.1849,37.547)]\nRugby                         Ave \t[(-122.274,37.045),(-122.2738,37.037)]\nRunning Hills                 Ave \t[(-121.7262,37.22),(-121.7238,37.213)]\nRuschin                       Dr  \t[(-122.0397,37.459),(-122.0393,37.465)]\nRussell                       Ave \t[(-122.1694,37.819),(-122.1687,37.845)]\nRussell                       St  \t[(-122.2661,37.569),(-122.2652,37.571)]\nRussell                       St  \t[(-122.2695,37.564),(-122.2684,37.566)]\nRussell                       Way \t[(-122.08,37.771),(-122.0781,37.783)]\nRusset                        St  \t[(-122.1758,37.361),(-122.1753,37.355)]\nRutgers                       Way \t[(-121.7421,37.744),(-121.742,37.739)]\nRuth                          Ct  \t[(-122.1301,37.004),(-122.1288,37.002)]\nRuth                          Way \t[(-121.7928,37.766),(-121.792,37.767)]\nRuth Glen                         \t[(-121.9121,37.281),(-121.9124,37.278)]\nRuus                          Road\t[(-122.0667,37.296),(-122.066,37.28)]\nSabercat                      Road\t[(-121.9396,37.176),(-121.9388,37.165),(-121.937,37.159)]\nSabercat                      Road\t[(-121.9453,37.266),(-121.944385,37.25156),(-121.9408,37.195)]\nSable Pointe                      \t[(-122.2393,37.439),(-122.24,37.434)]\nSable Pointe                      \t[(-122.241,37.424),(-122.2416,37.418)]\nSacramento                    Ave \t[(-121.9861,37.44),(-121.9865,37.436)]\nSacramento                    St  \t[(-122.277606,37.50815),(-122.277616,37.50591)]\nSacramento                    St  \t[(-122.2799,37.606),(-122.2797,37.597)]\nSacramento                    St  \t[(-122.2813,37.703),(-122.2811,37.695)]\nSaddle Brook                  Dr  \t[(-122.1478,37.909),(-122.1454,37.904),(-122.1451,37.888)]\nSaginaw                       Ct  \t[(-121.8803,37.898),(-121.8806,37.901)]\nSaguare Com                       \t[(-121.9049,37.022),(-121.9043,37.017)]\nSailway                       Dr  \t[(-121.9673,37.495),(-121.9686,37.502)]\nSalem                         St  \t[(-122.2794,37.361),(-122.2796,37.368)]\nSalem                         St  \t[(-122.2832,37.474),(-122.2835,37.479)]\nSalinas                       Pl  \t[(-122.041,37.689),(-122.0404,37.686)]\nSalisbury                     St  \t[(-122.2162,37.863),(-122.2146,37.848)]\nSalton Sea                    Lane\t[(-122.0597,37.88),(-122.0591,37.869)]\nSan Andreas                   Dr  \t[(-122.0592,37.957),(-122.0585,37.954)]\nSan Andreas                   Dr  \t[(-122.0609,37.9),(-122.0614,37.895)]\nSan Andreas                   Dr  \t[(-122.0621,37.973),(-122.0614,37.972)]\nSan Andreas                   Dr  \t[(-122.0635,37.878),(-122.0648,37.891)]\nSan Andreas                   Dr  \t[(-122.0658,37.907),(-122.0661,37.914)]\nSan Andreas                   Dr  \t[(-122.0668,37.926),(-122.0672,37.931)]\nSan Antonio                   Ave \t[(-122.2585,37.679),(-122.2566,37.672)]\nSan Antonio                   St  \t[(-122.0472,37.155),(-122.0477,37.108)]\nSan Antonio                   Way \t[(-122.2323,37.891),(-122.2314,37.886)]\nSan Antonio Creek                 \t[(-121.8722,37.759),(-121.8641,37.771)]\nSan Antonio Reservoir             \t[(-121.8487,37.728),(-121.8359,37.67)]\nSan Bernardino                Way \t[(-122.0621,37.936),(-122.0628,37.933)]\nSan Carlos                    Ave \t[(-122.0912,37.941),(-122.0899,37.94)]\nSan Carlos                    Ave \t[(-122.2886,37.931),(-122.2885,37.91)]\nSan Carlos                    Walk\t[(-122.2087,37.795),(-122.208,37.789)]\nSan Clemente                  St  \t[(-122.0511,37.188),(-122.051,37.177)]\nSan Franciscan                Dr  \t[(-122.0589,37.24),(-122.0582,37.246)]\nSan Francisco Bay                 \t[(-122.108,37.032),(-122.1048,37.001)]\nSan Francisco Bay                 \t[(-122.3115,37.814),(-122.3096,37.777)]\nSan Francisco Bay                 \t[(-122.3176,37.669),(-122.3108,37.652)]\nSan Jose                      Ave \t[(-122.2423,37.594),(-122.2409,37.586)]\nSan Jose                      Ave \t[(-122.2455,37.609),(-122.2445,37.605)]\nSan Jose                      Ave \t[(-122.2543,37.65),(-122.251,37.635)]\nSan Jose                      Ct  \t[(-122.0563,37.922),(-122.055864,37.91921)]\nSan Juan                      St  \t[(-122.2158,37.803),(-122.2149,37.795)]\nSan Leandro                   Blvd\t[(-122.1557,37.174),(-122.1545,37.168)]\nSan Leandro                   St  \t[(-122.1703,37.323),(-122.1689,37.312)]\nSan Leandro                   St  \t[(-122.1717,37.335),(-122.1709,37.329)]\nSan Leandro                   St  \t[(-122.2195,37.721),(-122.2186,37.716)]\nSan Leandro                   St  \t[(-122.2251,37.748),(-122.2242,37.743)]\nSan Leandro Bay                   \t[(-122.2241,37.553),(-122.2253,37.542)]\nSan Leandro Creek                 \t[(-122.154489,37.27978),(-122.155,37.281)]\nSan Leandro Creek                 \t[(-122.175792,37.24864),(-122.1807,37.247)]\nSan Leandro Creek Canal           \t[(-122.2081,37.409),(-122.2076,37.401)]\nSan Lorenzo                   Ave \t[(-122.2861,37.93),(-122.2857,37.929)]\nSan Lorenzo Creek                 \t[(-122.0544,37.907),(-122.0547,37.908)]\nSan Lorenzo Creek                 \t[(-122.063257,37.85966),(-122.064271,37.85339)]\nSan Lorenzo Creek                 \t[(-122.0741,37.799),(-122.0757,37.789)]\nSan Lorenzo Creek                 \t[(-122.117293,37.85868),(-122.120139,37.85739)]\nSan Lorenzo Creek                 \t[(-122.124957,37.853),(-122.1271,37.849)]\nSan Lorenzo Creek                 \t[(-122.1539,37.747),(-122.1616,37.703)]\nSan Luces                     Way \t[(-122.0672,37.963),(-122.0695,37.954)]\nSan Luis                      Ct  \t[(-121.8768,37.483),(-121.8766,37.474)]\nSan Luis                      Ct  \t[(-122.065,37.975),(-122.0657,37.973)]\nSan Luis                      Road\t[(-122.271,37.959),(-122.2701,37.933)]\nSan Marco                     Way \t[(-122.0666,37.95),(-122.0687,37.942)]\nSan Mateo                     Road\t[(-122.2724,37.925),(-122.2728,37.928)]\nSan Mateo                     Way \t[(-122.0609,37.926),(-122.061842,37.92391)]\nSan Miguel                    Ave \t[(-122.0793,37.052),(-122.079224,37.0254)]\nSan Miguel                    Ave \t[(-122.0801,37.927),(-122.08,37.911)]\nSan Moreno                    Ct  \t[(-121.954,37.576),(-121.9532,37.558)]\nSan Pablo                     Ave \t[(-122.2718,37.084),(-122.2721,37.093)]\nSan Pablo                     Ave \t[(-122.2797,37.326),(-122.2798,37.332)]\nSan Pablo                     Ave \t[(-122.2822,37.405),(-122.2824,37.411)]\nSan Pablo                     Ave \t[(-122.2834,37.442),(-122.2838,37.45)]\nSan Pablo                     Ave \t[(-122.2859,37.518),(-122.2857,37.515)]\nSan Pablo                     Ave \t[(-122.2864,37.537),(-122.2862,37.532)]\nSan Pablo                     Ave \t[(-122.2922,37.725),(-122.2922,37.716),(-122.2918,37.704)]\nSan Pablo                     Ave \t[(-122.2961,37.84),(-122.2959,37.832)]\nSan Rafael                    St  \t[(-122.1398,37.225),(-122.1395,37.219)]\nSan Ramon                     Road\t[(-121.937288,37.09164),(-121.937307,37.0922)]\nSan Sabana                    Road\t[(-121.9402,37.066),(-121.9402,37.095)]\nSandalwood                    St  \t[(-122.0347,37.493),(-122.0327,37.483)]\nSandburg                      Way \t[(-122.0625,37.226),(-122.0625,37.203)]\nSandelin                      Ave \t[(-122.1351,37.294),(-122.1343,37.298)]\nSandringham                   Road\t[(-122.2139,37.183),(-122.2142,37.179)]\nSandringham                   Road\t[(-122.2155,37.175),(-122.2163,37.165)]\nSandy                         Road\t[(-122.0643,37.089),(-122.0645,37.086)]\nSandy Hook                    Dr  \t[(-122.0615,37.22),(-122.062,37.221)]\nSanford                       St  \t[(-122.1546,37.737),(-122.1543,37.728)]\nSangamore                     St  \t[(-122.1069,37.471),(-122.1076,37.468)]\nSanta Barbara                 Road\t[(-122.2679,37.928),(-122.2666,37.92)]\nSanta Clara                   Ave \t[(-122.2509,37.695),(-122.2479,37.682)]\nSanta Clara                   Ave \t[(-122.254714,37.71317),(-122.254,37.71)]\nSanta Clara                   Ave \t[(-122.2551,37.211),(-122.254,37.205)]\nSanta Clara                   Ave \t[(-122.2787,37.736),(-122.2761,37.736)]\nSanta Clara                   Ave \t[(-122.2791,37.994),(-122.2798,37.989)]\nSanta Clara                   St  \t[(-122.0901,37.496),(-122.0885,37.485)]\nSanta Clara                   St  \t[(-122.0923,37.51),(-122.0919,37.504)]\nSanta Clara                   St  \t[(-122.1009,37.618),(-122.1006,37.613)]\nSanta Clara                   St  \t[(-122.1012,37.667),(-122.1012,37.66389),(-122.1012,37.65718)]\nSanta Clara                   Way \t[(-121.7539,37.854),(-121.7508,37.856),(-121.75,37.856)]\nSanta Fe                      Ave \t[(-122.2899,37.817),(-122.2899,37.815)]\nSanta Maria                   Ave \t[(-122.0773,37),(-122.0773,37.98)]\nSanta Maria                   Dr  \t[(-122.0633,37.965),(-122.0624,37.961)]\nSanta Paula                       \t[(-122.1607,37.848),(-122.1596,37.834)]\nSanta Ray                     Ave \t[(-122.2393,37.122),(-122.2381,37.113)]\nSanta Rita                    Road\t[(-121.872608,37.75282),(-121.8731,37.766)]\nSanta Rita                    Road\t[(-121.877461,37.9142),(-121.8775,37.922)]\nSanta Rita                    St  \t[(-122.2065,37.804),(-122.2058,37.796)]\nSanta Rita                    St  \t[(-122.2129,37.832),(-122.2104,37.839)]\nSanta Rosa                    St  \t[(-122.1506,37.247),(-122.1502,37.238)]\nSanta Rosa                    St  \t[(-122.1513,37.265),(-122.1509,37.256)]\nSanta Teresa                      \t[(-122.1576,37.826),(-122.1565,37.812),(-122.1553,37.797)]\nSanta Teresa Com                  \t[(-121.9505,37.564),(-121.9496,37.559)]\nSantee                        Road\t[(-122.0371,37.691),(-122.0376,37.685)]\nSantiago                      Road\t[(-122.176,37.962),(-122.1756,37.956)]\nSanto                         Ct  \t[(-121.946172,37.10869),(-121.947136,37.10367)]\nSaratoga                      St  \t[(-122.1024,37.997),(-122.1019,37.997)]\nSarazen                       Ave \t[(-122.1539,37.58),(-122.1532,37.585)]\nSaroni                        Dr  \t[(-122.1954,37.345),(-122.1944,37.347)]\nSaturn                        Dr  \t[(-122.1283,37.145),(-122.1238,37.117)]\nSausal Creek                      \t[(-122.2126,37.122),(-122.213944,37.10691)]\nSausal Creek                      \t[(-122.215521,37.03532),(-122.216544,37.01827)]\nSausal Creek                      \t[(-122.2175,37.985),(-122.218,37.982)]\nSausal Creek                      \t[(-122.218,37.982),(-122.218834,37.9583)]\nSausal Creek                      \t[(-122.219108,37.9487),(-122.2193,37.942),(-122.219513,37.93313)]\nSausal Creek                      \t[(-122.2217,37.893),(-122.2221,37.884)]\nSausal Creek                      \t[(-122.2228,37.862),(-122.2232,37.856)]\nScarborough                   Dr  \t[(-122.0362,37.568),(-122.0362,37.556)]\nScarborough                   Dr  \t[(-122.1993,37.214),(-122.1999,37.24),(-122.1994,37.241)]\nScenic                        Ave \t[(-121.7262,37.171),(-121.7232,37.171)]\nScenic                        Ave \t[(-121.7314,37.171),(-121.7305,37.17)]\nScenic                        Ave \t[(-121.7414,37.166),(-121.73802,37.16978)]\nScenic                        Ave \t[(-122.2282,37.278),(-122.2284,37.296)]\nScenic                        Ave \t[(-122.2619,37.762),(-122.2617,37.749)]\nScenicview                    Dr  \t[(-122.1354,37.26),(-122.1325,37.252)]\nSchool                        St  \t[(-122.1378,37.209),(-122.1369,37.199),(-122.1364,37.197)]\nSchool                        St  \t[(-122.2116,37.945),(-122.2103,37.94)]\nSchool                        Way \t[(-122.0838,37.18),(-122.0833,37.177)]\nSchooner Hill                     \t[(-122.2263,37.56),(-122.2269,37.564)]\nSchuster                      Ave \t[(-122.0854,37.081),(-122.0854,37.074)]\nScott                         Pl  \t[(-122.0802,37.38),(-122.0815,37.381)]\nScott Creek                       \t[(-121.8694,37.814),(-121.8694,37.803)]\nScott Creek                   Road\t[(-121.8999,37.678),(-121.8975,37.685)]\nScott Creek                   Road\t[(-121.9047,37.667),(-121.9034,37.67)]\nScott Creek                   Road\t[(-121.9098,37.651),(-121.9086,37.655)]\nSea Bridge                    Way \t[(-122.2364,37.426),(-122.2359,37.417)]\nSea View                      Pkwy\t[(-122.242913,37.47248),(-122.2421,37.472),(-122.2411,37.471)]\nSea View                      Pkwy\t[(-122.2499,37.466),(-122.2496,37.468)]\nSea View                      Pkwy\t[(-122.253,37.455),(-122.2519,37.457)]\nSea View                      Pkwy\t[(-122.2547,37.434),(-122.255,37.439)]\nSeal Rock                     Ter \t[(-122.033374,37.69186),(-122.0335,37.692),(-122.0338,37.694)]\nSeaver                        St  \t[(-122.1016,37.427),(-122.1016,37.419)]\nSeaview                       Ave \t[(-122.0623,37.113),(-122.0599,37.111)]\nSeawall                       Dr  \t[(-122.316154,37.63126),(-122.315489,37.60045)]\nSegovia                       Pl  \t[(-121.9478,37.596),(-121.9489,37.585)]\nSelkirk                       St  \t[(-121.9798,37.336),(-121.9796,37.331)]\nSeminary                      Ave \t[(-122.1772,37.796),(-122.1756,37.798)]\nSeminary                      Ave \t[(-122.1814,37.772),(-122.1807,37.778)]\nSeneca                        St  \t[(-122.03,37.122),(-122.03,37.115)]\nSeneca Park                   Ave \t[(-121.9649,37.17),(-121.9653,37.167)]\nSenior                        Ave \t[(-122.2487,37.826),(-122.2473,37.827)]\nSequoia                       Road\t[(-122.0013,37.617),(-122.001192,37.61346)]\nSequoia                       Ter \t[(-121.997978,37.6571),(-121.997403,37.66696)]\nSeven Hills                   Road\t[(-122.0876,37.1),(-122.086344,37.1012),(-122.0855,37.102)]\nSevern                        Dr  \t[(-122.0359,37.584),(-122.0368,37.571)]\nSevern                        Pl  \t[(-122.0363,37.586),(-122.0367,37.581)]\nSevilla                       Road\t[(-122.0829,37.809),(-122.0831,37.81)]\nSeville                       Pl  \t[(-121.9514,37.522),(-121.9522,37.518)]\nSextus                        Road\t[(-122.1938,37.33),(-122.1896,37.327)]\nSeymour                       Pl  \t[(-122.0357,37.84),(-122.0367,37.837)]\nShadow Ridge                  Dr  \t[(-122.041,37.144),(-122.0411,37.162)]\nShady Creek                   Road\t[(-121.913106,37.24701),(-121.914087,37.24475)]\nShafer Creek                      \t[(-121.681036,37.12545),(-121.694801,37.25112)]\nShafter                       Ave \t[(-122.2539,37.418),(-122.2527,37.434)]\nShafter                       Ave \t[(-122.2569,37.383),(-122.2556,37.399)]\nShafter                       Ave \t[(-122.2586,37.313),(-122.2583,37.323)]\nShamrock                      Pl  \t[(-121.929,37.24),(-121.9295,37.247)]\nShannon                       Ave \t[(-121.94218,37.14137),(-121.9418,37.142)]\nShasta                        St  \t[(-121.802842,37.889),(-121.802801,37.8826)]\nShattuck                      Ave \t[(-122.053676,37.61223),(-122.052619,37.61591)]\nShattuck                      Ave \t[(-122.2633,37.339),(-122.2634,37.347)]\nShattuck                      Ave \t[(-122.2648,37.468),(-122.2648,37.474)]\nShattuck                      Ave \t[(-122.2675,37.712),(-122.2674,37.704)]\nShattuck                      Ave \t[(-122.2683,37.776),(-122.2683,37.766)]\nShattuck                      Ave \t[(-122.2686,37.904),(-122.2686,37.897)]\nShaw                          St  \t[(-122.1518,37.459),(-122.1511,37.455)]\nSheffield                     Lane\t[(-122.0511,37.006),(-122.051292,37.00178)]\nSheffield                     Road\t[(-122.1032,37.097),(-122.1026,37.095)]\nSheffield                     Road\t[(-122.241,37.45),(-122.2413,37.446)]\nSheffield                     Road\t[(-122.2421,37.44),(-122.2427,37.437)]\nSheffield                     Road\t[(-122.2457,37.441),(-122.2448,37.44)]\nSheila                        St  \t[(-122.0453,37.852),(-122.045,37.847)]\nSheldon                       St  \t[(-122.146,37.455),(-122.1454,37.451)]\nShepherd                      Ave \t[(-122.0707,37.383),(-122.0737,37.367)]\nShepherd Canyon               Road\t[(-122.1845,37.355),(-122.1835,37.355)]\nShepherd Canyon               Road\t[(-122.1988,37.302),(-122.196132,37.31137)]\nShepherd Canyon               Road\t[(-122.2052,37.245),(-122.2027,37.236)]\nSheridan                      Road\t[(-121.901114,37.58914),(-121.899,37.574)]\nSheridan                      Road\t[(-122.2279,37.425),(-122.2253,37.411),(-122.2223,37.377)]\nSherman                       St  \t[(-122.2628,37.781),(-122.2627,37.787)]\nSherman                       St  \t[(-122.263,37.695),(-122.262932,37.70799)]\nSherman                       St  \t[(-122.2631,37.667),(-122.2631,37.674)]\nSherry                        Ct  \t[(-121.7642,37.736),(-121.76437,37.73958)]\nSherwood                      Lane\t[(-122.2474,37.467),(-122.246514,37.45985)]\nShiela                        Way \t[(-122.0734,37.757),(-122.073,37.75)]\nShinn                         St  \t[(-121.9818,37.64),(-121.9817,37.636)]\nShirley                       Ave \t[(-122.1157,37.717),(-122.117,37.712)]\nShoreline                     Dr  \t[(-122.2638,37.596),(-122.2607,37.584)]\nShoreline                     Dr  \t[(-122.2657,37.603),(-122.2648,37.6)]\nShoreline                     Dr  \t[(-122.2714,37.626),(-122.2691,37.616)]\nShylock                       Dr  \t[(-122.0488,37.748),(-122.0486,37.74)]\nSidney                        Ave \t[(-122.1279,37.096),(-122.1274,37.1)]\nSigourney Elysian Fields      Dr  \t[(-122.127563,37.66495),(-122.1275,37.649)]\nSigourney Elysian Fields      Dr  \t[(-122.128,37.674),(-122.1277,37.667)]\nSilva                         Lane\t[(-122.237019,37.28132),(-122.235461,37.27888)]\nSilvergate                    Dr  \t[(-121.941,37.097),(-121.9402,37.095)]\nSimm                          Ct  \t[(-121.9757,37.15),(-121.9748,37.153)]\nSimmons                       St  \t[(-122.1881,37.803),(-122.1874,37.805)]\nSims                          Dr  \t[(-122.21,37.207),(-122.2101,37.237)]\nSimson                        St  \t[(-122.1693,37.737),(-122.1687,37.74)]\nSinbad Creek                      \t[(-121.9177,37.343),(-121.9202,37.366)]\nSinbad Creek                      \t[(-121.9498,37.613),(-121.9556,37.643)]\nSinging Hills                 Ave \t[(-121.7262,37.199),(-121.7237,37.206)]\nSingleton                     Ave \t[(-122.2896,37.87397),(-122.288161,37.87394)]\nSioux                         Ct  \t[(-121.926147,37.14374),(-121.9248,37.122)]\nSioux                         Dr  \t[(-121.928,37.142),(-121.926147,37.14374)]\nSiward                        Dr  \t[(-122.043286,37.63282),(-122.043581,37.63639)]\nSiward                        Dr  \t[(-122.044259,37.64617),(-122.044499,37.6493)]\nSiward                        Dr  \t[(-122.046199,37.68158),(-122.046,37.672)]\nSiward                        Dr  \t[(-122.047527,37.71764),(-122.0475,37.716)]\nSkylark                       Dr  \t[(-122.0117,37.839),(-122.011,37.835)]\nSkylark                       Dr  \t[(-122.0192,37.85),(-122.0186,37.848)]\nSkyline                       Blvd\t[(-122.1409,37.819),(-122.1307,37.73)]\nSkyline                       Blvd\t[(-122.144,37.851),(-122.1409,37.829)]\nSkyline                       Blvd\t[(-122.1701,37.988),(-122.167,37.982)]\nSkyline                       Blvd\t[(-122.1738,37.01),(-122.1714,37.996)]\nSkyline                       Blvd\t[(-122.1772,37.039),(-122.1774,37.037)]\nSkyline                       Blvd\t[(-122.1865,37.25),(-122.186,37.247)]\nSkyline                       Blvd\t[(-122.1885,37.275),(-122.1873,37.266)]\nSkyline                       Blvd\t[(-122.1965,37.405),(-122.190866,37.38122)]\nSkyline                       Blvd\t[(-122.2091,37.506),(-122.2076,37.506)]\nSkyline                       Dr  \t[(-122.0277,37.5),(-122.0284,37.498)]\nSkyview                       Dr  \t[(-122.1276,37.242),(-122.1274,37.244)]\nSkywest                       Dr  \t[(-122.1161,37.62),(-122.1123,37.586)]\nSleepy Hollow                 Ave \t[(-122.093,37.35),(-122.0927,37.343)]\nSleepy Hollow                 Ave \t[(-122.1003,37.335),(-122.1008,37.332)]\nSleepy Hollow                 Ave \t[(-122.1045,37.316),(-122.1054,37.315)]\nSlender                       Ct  \t[(-122.0565,37.73),(-122.055,37.735)]\nSmalley                       Ave \t[(-122.095194,37.69714),(-122.0945,37.7)]\nSmith                         St  \t[(-122.0727,37.965),(-122.0742,37.964)]\nSmith                         St  \t[(-122.0759,37.963),(-122.0778,37.964)]\nSnake                         Road\t[(-122.206567,37.27603),(-122.2062,37.281),(-122.2057,37.292)]\nSnake                         Road\t[(-122.2066,37.331),(-122.2048,37.345)]\nSodaville                     Ct  \t[(-121.9266,37.029),(-121.9278,37.033)]\nSolano                        Ave \t[(-122.1131,37.735),(-122.1161,37.724)]\nSolano                        Ave \t[(-122.2829,37.912),(-122.2819,37.913)]\nSolano                        Ave \t[(-122.2871,37.91),(-122.2867,37.91)]\nSolano                        Ave \t[(-122.289,37.909),(-122.2885,37.91)]\nSolano                        Way \t[(-122.0773,37.921),(-122.0785,37.921)]\nSolano                        Way \t[(-122.2451,37.889),(-122.2443,37.885)]\nSolomon                       Lane\t[(-122.2372,37.299),(-122.2374,37.3)]\nSomerset                      Ave \t[(-122.0827,37.016),(-122.0811,37.016)]\nSomerset                      Ave \t[(-122.0893,37.006),(-122.0885,37.008)]\nSomerset                      Ave \t[(-122.0907,37.003),(-122.0899,37.005)]\nSomerset                      Ave \t[(-122.0936,37.994),(-122.0922,37.998)]\nSomerset                      Pl  \t[(-122.0295,37.49),(-122.0299,37.485)]\nSomerset                      Pl  \t[(-122.2732,37.949),(-122.27246,37.94689)]\nSonoma                        Ave \t[(-122.2776,37.858),(-122.2765,37.856)]\nSonoma                        Dr  \t[(-121.8796,37.487),(-121.8799,37.488)]\nSoquel                        St  \t[(-122.0664,37.711),(-122.0657,37.707)]\nSora Com                          \t[(-122.043,37.743),(-122.0428,37.746)]\nSorani                        Way \t[(-122.0785,37.172),(-122.0782,37.171)]\nSoto                          Road\t[(-122.0812,37.561),(-122.0798,37.545)]\nSouth                         Road\t[(-121.8941,37.283),(-121.894,37.279)]\nSouth Bay Aqueduct                \t[(-121.6786,37.942),(-121.676067,37.8981)]\nSouth Dry Creek Branch            \t[(-122.0168,37.083),(-122.0173,37.084)]\nSouth Fork Trout Creek            \t[(-121.658085,37.99874),(-121.657591,37.02423)]\nSouth Front                   Road\t[(-121.7116,37.134),(-121.7092,37.145)]\nSouth Front                   Road\t[(-121.723953,37.0797),(-121.722,37.062)]\nSouth Front                   Road\t[(-121.738379,37.02183),(-121.737947,37.02335)]\nSouthampton                   Ave \t[(-122.2745,37.948),(-122.2742,37.962)]\nSouthern Pacific Railroad         \t[(-121.558002,37.00663),(-121.576,37.136)]\nSouthern Pacific Railroad         \t[(-121.6695,37.391),(-121.666889,37.41337)]\nSouthern Pacific Railroad         \t[(-121.7674,37.843),(-121.7686,37.84)]\nSouthern Pacific Railroad         \t[(-122.3002,37.674),(-122.2999,37.661)]\nSouthlake Com                     \t[(-121.9572,37.113),(-121.9565,37.116)]\nSouthwick                     Ct  \t[(-121.9441,37.185),(-121.9436,37.18)]\nSp Railroad                       \t[(-121.7182,37.017),(-121.7162,37.025)]\nSp Railroad                       \t[(-121.8204,37.746),(-121.8139,37.753)]\nSp Railroad                       \t[(-121.8591,37.701),(-121.8586,37.705)]\nSp Railroad                       \t[(-121.8699,37.631),(-121.8678,37.651)]\nSp Railroad                       \t[(-121.87958,37.88603),(-121.880675,37.89396)]\nSp Railroad                       \t[(-121.893564,37.99009),(-121.897,37.016)]\nSp Railroad                       \t[(-121.8977,37.022),(-121.9022,37.054)]\nSp Railroad                       \t[(-121.9271,37.788),(-121.9185,37.626)]\nSp Railroad                       \t[(-121.950757,37.25243),(-121.9506,37.25)]\nSp Railroad                       \t[(-121.9565,37.898),(-121.9562,37.9)]\nSp Railroad                       \t[(-121.9684,37.715),(-121.9669,37.701),(-121.9655,37.69)]\nSp Railroad                       \t[(-121.9736,37.616),(-121.9737,37.608)]\nSp Railroad                       \t[(-121.993831,37.81669),(-121.992146,37.8107)]\nSp Railroad                       \t[(-122.0257,37.349),(-122.0289,37.31)]\nSp Railroad                       \t[(-122.0315,37.251),(-122.0292,37.24)]\nSp Railroad                       \t[(-122.0321,37.271),(-122.0347,37.265)]\nSp Railroad                       \t[(-122.0386,37.133),(-122.0335,37.089)]\nSp Railroad                       \t[(-122.0414,37.268),(-122.042509,37.26338)]\nSp Railroad                       \t[(-122.0553,37.212),(-122.0652,37.134),(-122.0654,37.131)]\nSp Railroad                       \t[(-122.0594,37.75),(-122.0593,37.743)]\nSp Railroad                       \t[(-122.0626,37.857),(-122.0616,37.845)]\nSp Railroad                       \t[(-122.0734,37.001),(-122.0734,37.997)]\nSp Railroad                       \t[(-122.076691,37.99914),(-122.075907,37.99243)]\nSp Railroad                       \t[(-122.086,37.079),(-122.081,37.036)]\nSp Railroad                       \t[(-122.0914,37.601),(-122.087,37.56),(-122.086408,37.5551)]\nSp Railroad                       \t[(-122.10629,37.73042),(-122.1054,37.723)]\nSp Railroad                       \t[(-122.1129,37.315),(-122.1125,37.311)]\nSp Railroad                       \t[(-122.121,37.857),(-122.1187,37.837)]\nSp Railroad                       \t[(-122.137,37.576),(-122.1327,37.53)]\nSp Railroad                       \t[(-122.137792,37.003),(-122.1365,37.992),(-122.131257,37.94612)]\nSp Railroad                       \t[(-122.172213,37.03399),(-122.1678,37.059)]\nSp Railroad                       \t[(-122.1748,37.322),(-122.174,37.315)]\nSp Railroad                       \t[(-122.1785,37.355),(-122.178,37.351)]\nSp Railroad                       \t[(-122.17894,37.32386),(-122.179281,37.31827),(-122.1807,37.295)]\nSp Railroad                       \t[(-122.1801,37.115),(-122.178,37.088)]\nSp Railroad                       \t[(-122.1947,37.497),(-122.193328,37.4848)]\nSp Railroad                       \t[(-122.2269,37.73),(-122.2272,37.726)]\nSp Railroad                       \t[(-122.2281,37.761),(-122.2268,37.753)]\nSp Railroad                       \t[(-122.2346,37.727),(-122.2343,37.726)]\nSp Railroad                       \t[(-122.2411,37.85),(-122.2359,37.814)]\nSp Railroad                       \t[(-122.2506,37.891),(-122.2501,37.889)]\nSp Railroad                       \t[(-122.2724,37.946),(-122.2713,37.942)]\nSp Railroad                       \t[(-122.2737,37.774),(-122.2731,37.765)]\nSp Railroad                       \t[(-122.2744,37.802),(-122.2743,37.795)]\nSp Railroad                       \t[(-122.275429,37.88474),(-122.2754,37.883)]\nSp Railroad                       \t[(-122.2853,37.355),(-122.2847,37.334)]\nSp Railroad                       \t[(-122.2864,37.393),(-122.2881,37.387)]\nSp Railroad                       \t[(-122.2888,37.383),(-122.2893,37.38)]\nSp Railroad                       \t[(-122.2898,37.349),(-122.2887,37.319),(-122.2883,37.307)]\nSp Railroad                       \t[(-122.2939,37.484),(-122.2936,37.475)]\nSp Railroad                       \t[(-122.2965,37.56),(-122.2959,37.545)]\nSp Railroad                       \t[(-122.305229,37.83926),(-122.3049,37.822)]\nSp Railroad                       \t[(-122.3086,37.087),(-122.31,37.085)]\nSpady                         St  \t[(-121.9689,37.424),(-121.969174,37.41761)]\nSparrow                       Dr  \t[(-121.9331,37.139),(-121.9328,37.134)]\nSparrow                       Road\t[(-122.0827,37.209),(-122.0826,37.203)]\nSpence                        Ave \t[(-121.9733,37.616),(-121.9728,37.619)]\nSpetti                        Dr  \t[(-121.9684,37.665),(-121.9696,37.658)]\nSpinnaker                     Way \t[(-122.3138,37.694),(-122.3171,37.687)]\nSpoonbill Common                  \t[(-122.043662,37.66522),(-122.043425,37.66065)]\nSpring                        St  \t[(-121.8702,37.62),(-121.871,37.621)]\nSpringbrook                   Lane\t[(-122.057162,37.29952),(-122.056705,37.29151)]\nSpringdale                    Ave \t[(-121.9196,37.845),(-121.92,37.854)]\nSpringdale                    Ave \t[(-121.9229,37.884),(-121.9233,37.888)]\nSpringfield                   St  \t[(-122.1598,37.485),(-122.1597,37.477)]\nSpringhouse                   Dr  \t[(-121.883683,37.89587),(-121.880871,37.89125)]\nSpringlake                    Dr  \t[(-122.133113,37.93134),(-122.134,37.93)]\nSpringtown                    Blvd\t[(-121.74,37.039),(-121.7407,37.059)]\nSpringtown                    Blvd\t[(-121.743242,37.07568),(-121.745,37.088)]\nSpruce                        St  \t[(-122.0506,37.327),(-122.0496,37.322)]\nSpruce                        St  \t[(-122.0566,37.368),(-122.0565,37.361)]\nSpruce                        St  \t[(-122.1578,37.994),(-122.1586,37.991)]\nSpruce                        St  \t[(-122.2398,37.048),(-122.2393,37.056)]\nSpruce                        St  \t[(-122.2659,37.849),(-122.2655,37.839)]\nSpruce                        St  \t[(-122.2698,37.99),(-122.2693,37.981)]\nSt Anthony                    Dr  \t[(-121.939,37.474),(-121.9385,37.471)]\nSt Charles                    St  \t[(-122.2654,37.763),(-122.2653,37.773)]\nSt Johns                      St  \t[(-121.8764,37.643),(-121.8777,37.646)]\nSt Matthew                    Dr  \t[(-122.024,37.394),(-122.0234,37.391)]\nSt Michael                    Cir \t[(-121.853648,37.6251),(-121.853779,37.61796)]\nStacy                         St  \t[(-122.1218,37.544),(-122.1199,37.532)]\nStadium                       Way \t[(-121.758155,37.66715),(-121.757912,37.66728)]\nStagecoach                    Road\t[(-121.921401,37.27049),(-121.9218,37.277)]\nStalker                       Way \t[(-122.264,37.807),(-122.2672,37.816)]\nStanford                      Ave \t[(-122.2764,37.438),(-122.2773,37.433)]\nStanford                      Ave \t[(-122.2781,37.43),(-122.2802,37.42)]\nStanford                      Way \t[(-121.7451,37.826),(-121.743925,37.82264)]\nStanford                      Way \t[(-121.7473,37.828),(-121.7459,37.826)]\nStanley                       Ave \t[(-121.9621,37.242),(-121.9632,37.24)]\nStanley                       Ave \t[(-122.1504,37.485),(-122.15,37.478),(-122.1498,37.469)]\nStanley                       Blvd\t[(-121.7971,37.769),(-121.7948,37.772)]\nStanley                       Blvd\t[(-121.8705,37.659),(-121.871,37.66)]\nStannage                      Ave \t[(-122.2939,37.844),(-122.2939,37.828)]\nStannage                      Ave \t[(-122.297,37.939),(-122.2965,37.923)]\nStanton                       Ave \t[(-122.0889,37.939),(-122.0885,37.928)]\nStanton                       Ave \t[(-122.0953,37.027),(-122.0944,37.022)]\nStanton                       Ave \t[(-122.100392,37.0697),(-122.099513,37.06052)]\nStanton Hill                  Road\t[(-122.0935,37.963),(-122.0929,37.964)]\nStanwood                      Ave \t[(-122.0839,37.416),(-122.0839,37.409)]\nStar View                     Ct  \t[(-122.2251,37.516),(-122.2248,37.511)]\nStarflower                    Way \t[(-121.7298,37.099),(-121.7323,37.095)]\nStarling                      Dr  \t[(-122.015929,37.82489),(-122.0171,37.83)]\nStarlite                      Way \t[(-121.9167,37.738),(-121.9162,37.745)]\nStarr                         Ct  \t[(-121.9238,37.371),(-121.9246,37.373)]\nStarr                         Ct  \t[(-121.9249,37.373),(-121.92514,37.3722)]\nStarr                         St  \t[(-121.9213,37.378),(-121.9216,37.376)]\nStarview                      Dr  \t[(-122.1248,37.197),(-122.1231,37.201)]\nStarward                      Dr  \t[(-121.9356,37.103),(-121.936,37.109)]\nStarward                      Dr  \t[(-121.9361,37.115),(-121.9363,37.128)]\nState Hwy 123                     \t[(-122.3004,37.986),(-122.2998,37.969),(-122.2995,37.962),(-122.2992,37.952),(-122.299,37.942),(-122.2987,37.935),(-122.2984,37.924),(-122.2982,37.92),(-122.2976,37.904),(-122.297,37.88),(-122.2966,37.869),(-122.2959,37.848),(-122.2961,37.843)]\nState Hwy 13                      \t[(-122.1797,37.943),(-122.179871,37.91849),(-122.18,37.9),(-122.179023,37.86615),(-122.1787,37.862),(-122.1781,37.851),(-122.1777,37.845),(-122.1773,37.839),(-122.177,37.833)]\nState Hwy 13                      \t[(-122.1828,37.974),(-122.1799,37.948)]\nState Hwy 13                      \t[(-122.2049,37.2),(-122.20328,37.17975),(-122.1989,37.125),(-122.198078,37.11641),(-122.1975,37.11)]\nState Hwy 13                      \t[(-122.2213,37.388),(-122.218753,37.36402),(-122.2168,37.336),(-122.2163,37.328),(-122.2144,37.313),(-122.211744,37.28221),(-122.21,37.262),(-122.2087,37.244),(-122.207,37.224),(-122.2065,37.218),(-122.2058,37.209)]\nState Hwy 13                      \t[(-122.2319,37.515),(-122.2316,37.511),(-122.2305,37.498),(-122.2296,37.489),(-122.2286,37.478),(-122.2244,37.427)]\nState Hwy 13                  Ramp\t[(-122.1781,37.851),(-122.1782,37.847),(-122.1777,37.845)]\nState Hwy 13                  Ramp\t[(-122.1799,37.948),(-122.1797,37.943)]\nState Hwy 13                  Ramp\t[(-122.1819,37.978),(-122.1828,37.974)]\nState Hwy 13                  Ramp\t[(-122.1835,37.98),(-122.1852,37.985)]\nState Hwy 13                  Ramp\t[(-122.1854,37.996),(-122.1861,37.986)]\nState Hwy 13                  Ramp\t[(-122.1937,37.078),(-122.1943,37.08)]\nState Hwy 13                  Ramp\t[(-122.1942,37.084),(-122.1964,37.107)]\nState Hwy 13                  Ramp\t[(-122.1975,37.11),(-122.1964,37.107)]\nState Hwy 13                  Ramp\t[(-122.1989,37.125),(-122.1984,37.117),(-122.1981,37.112)]\nState Hwy 13                  Ramp\t[(-122.2054,37.205),(-122.2048,37.209)]\nState Hwy 13                  Ramp\t[(-122.2055,37.197),(-122.2049,37.2)]\nState Hwy 13                  Ramp\t[(-122.2058,37.209),(-122.2049,37.211)]\nState Hwy 13                  Ramp\t[(-122.2069,37.213),(-122.2072,37.216),(-122.2065,37.218)]\nState Hwy 13                  Ramp\t[(-122.2073,37.221),(-122.207,37.224)]\nState Hwy 13                  Ramp\t[(-122.2163,37.328),(-122.2149,37.321),(-122.2144,37.313)]\nState Hwy 13                  Ramp\t[(-122.2168,37.336),(-122.2168,37.328)]\nState Hwy 13                  Ramp\t[(-122.2232,37.41),(-122.2247,37.422)]\nState Hwy 13                  Ramp\t[(-122.2244,37.427),(-122.223,37.414),(-122.2214,37.396),(-122.2213,37.388)]\nState Hwy 13                  Ramp\t[(-122.2244,37.427),(-122.2247,37.422)]\nState Hwy 13                  Ramp\t[(-122.2307,37.487),(-122.2286,37.478)]\nState Hwy 17                      \t[(-122.3107,37.976),(-122.3078,37.93),(-122.3072,37.916),(-122.307,37.902)]\nState Hwy 17                  Ramp\t((-122.2877,37.234),(-122.2881,37.237))\nState Hwy 17                  Ramp\t[(-122.2882,37.233),(-122.2881,37.237),(-122.2882,37.242),(-122.2883,37.247),(-122.2885,37.254)]\nState Hwy 17                  Ramp\t[(-122.2899,37.128),(-122.2898,37.132),(-122.2897,37.142)]\nState Hwy 17                  Ramp\t[(-122.291,37.113),(-122.2906,37.118)]\nState Hwy 17                  Ramp\t[(-122.2915,37.083),(-122.29137,37.07065),(-122.290561,37.06224)]\nState Hwy 238                     \t((-122.098,37.908),(-122.0983,37.907),(-122.099,37.905),(-122.101,37.898),(-122.101535,37.89711),(-122.103173,37.89438),(-122.1046,37.892),(-122.106,37.89))\nState Hwy 238                     \t[(-122.106,37.89),(-122.1061,37.89),(-122.1064,37.89),(-122.1073,37.889)]\nState Hwy 238                 Ramp\t((-122.1064,37.89),(-122.1067,37.899))\nState Hwy 238                 Ramp\t((-122.1288,37.892),(-122.1293,37.895))\nState Hwy 238                 Ramp\t((-122.1288,37.913),(-122.1294,37.917))\nState Hwy 238                 Ramp\t[(-122.1073,37.889),(-122.1067,37.899),(-122.1056,37.899)]\nState Hwy 238                 Ramp\t[(-122.1073,37.889),(-122.1068,37.881),(-122.106574,37.88354),(-122.106,37.89)]\nState Hwy 238                 Ramp\t[(-122.1288,37.9),(-122.1293,37.895),(-122.1296,37.906)]\nState Hwy 238                 Ramp\t[(-122.1288,37.922),(-122.1294,37.917),(-122.1296,37.906)]\nState Hwy 24                      \t[(-122.2206,37.531),(-122.2204,37.536),(-122.2194,37.541),(-122.217,37.546),(-122.2151,37.551),(-122.2139,37.561),(-122.2121,37.577)]\nState Hwy 24                      \t[(-122.2674,37.246),(-122.2673,37.248),(-122.267,37.261),(-122.2668,37.271),(-122.2663,37.298),(-122.2659,37.315),(-122.2655,37.336),(-122.265007,37.35882),(-122.264443,37.37286),(-122.2641,37.381),(-122.2638,37.388),(-122.2631,37.396),(-122.2617,37.405),(-122.2615,37.407),(-122.2605,37.412)]\nState Hwy 24                      \t[(-122.2681,37.244),(-122.2679,37.248),(-122.2677,37.252)]\nState Hwy 24                  Ramp\t((-122.2191,37.537),(-122.2197,37.535))\nState Hwy 24                  Ramp\t((-122.2204,37.536),(-122.2211,37.533))\nState Hwy 24                  Ramp\t[(-122.2194,37.541),(-122.2197,37.535),(-122.2197,37.531)]\nState Hwy 24                  Ramp\t[(-122.2211,37.542),(-122.2211,37.533),(-122.2209,37.526)]\nState Hwy 24                  Ramp\t[(-122.2218,37.517),(-122.2214,37.507)]\nState Hwy 24                  Ramp\t[(-122.2224,37.497),(-122.2219,37.494),(-122.2215,37.492)]\nState Hwy 24                  Ramp\t[(-122.2279,37.486),(-122.2284,37.485)]\nState Hwy 24                  Ramp\t[(-122.2279,37.486),(-122.2305,37.498)]\nState Hwy 24                  Ramp\t[(-122.2286,37.478),(-122.2284,37.485)]\nState Hwy 24                  Ramp\t[(-122.2551,37.435),(-122.2568,37.436),(-122.2585,37.428),(-122.259722,37.42438),(-122.260592,37.4218),(-122.2612,37.42)]\nState Hwy 24                  Ramp\t[(-122.257,37.433),(-122.258,37.427)]\nState Hwy 24                  Ramp\t[(-122.2605,37.412),(-122.2601,37.412),(-122.2599,37.412),(-122.2586,37.413)]\nState Hwy 24                  Ramp\t[(-122.2623,37.409),(-122.2614,37.411),(-122.260282,37.41626),(-122.258,37.427)]\nState Hwy 24                  Ramp\t[(-122.2657,37.351),(-122.2665,37.36)]\nState Hwy 24                  Ramp\t[(-122.266,37.348),(-122.2661,37.35),(-122.2668,37.35)]\nState Hwy 24                  Ramp\t[(-122.2677,37.252),(-122.2674,37.258),(-122.2671,37.263),(-122.2672,37.267),(-122.2673,37.272)]\nState Hwy 84                      \t[(-121.7673,37.82),(-121.7664,37.828),(-121.7654,37.835),(-121.765,37.837)]\nState Hwy 84                      \t[(-121.9565,37.898),(-121.956589,37.89911),(-121.9569,37.903),(-121.956,37.91),(-121.9553,37.919)]\nState Hwy 84                      \t[(-121.9725,37.749),(-121.972151,37.75144),(-121.9715,37.756),(-121.9706,37.762),(-121.9692,37.778),(-121.9673,37.793),(-121.9637,37.813),(-121.9637,37.854),(-121.9576,37.891)]\nState Hwy 84                      \t[(-122.0484,37.539),(-122.0443,37.564),(-122.0423,37.577)]\nState Hwy 84                      \t[(-122.0484,37.539),(-122.0514,37.52),(-122.051557,37.51906),(-122.0544,37.502)]\nState Hwy 84                      \t[(-122.0671,37.426),(-122.0658,37.432)]\nState Hwy 84                      \t[(-122.0671,37.426),(-122.07,37.402),(-122.074,37.37),(-122.0773,37.338)]\nState Hwy 84                  Ramp\t[(-122.0544,37.502),(-122.052622,37.50902),(-122.0506,37.517),(-122.0484,37.539)]\nState Hwy 92                      \t[(-122.1085,37.326),(-122.1095,37.322),(-122.1111,37.316),(-122.1119,37.313),(-122.1125,37.311),(-122.1131,37.308),(-122.1167,37.292),(-122.1187,37.285),(-122.12,37.28)]\nState Hwy 92                  Ramp\t((-122.1091,37.328),(-122.1101,37.332))\nState Hwy 92                  Ramp\t[(-122.099,37.368),(-122.0994,37.363)]\nState Hwy 92                  Ramp\t[(-122.1086,37.321),(-122.1089,37.315),(-122.1111,37.316)]\nState Hwy 92                  Ramp\t[(-122.1091,37.328),(-122.1101,37.332),(-122.1101,37.327),(-122.1095,37.322)]\nState Hwy 92                  Ramp\t[(-122.1167,37.292),(-122.1185,37.295),(-122.1191,37.298)]\nState Hwy 92                  Ramp\t[(-122.1187,37.285),(-122.1186,37.292),(-122.1193,37.29)]\nState Hwy 92                  Ramp\t[(-122.12,37.28),(-122.1207,37.269),(-122.1204,37.27)]\nState Hwy 92                  Ramp\t[(-122.1204,37.267),(-122.123,37.271)]\nStaten                        Ave \t[(-122.2533,37.103),(-122.2534,37.094)]\nStearns                       Ave \t[(-122.1564,37.533),(-122.1533,37.512)]\nSteele                        St  \t[(-122.188,37.892),(-122.1874,37.886)]\nSteinmetz                     Way \t[(-122.1979,37.061),(-122.1976,37.051)]\nStella                        St  \t[(-122.14272,37.4824),(-122.1418,37.469)]\nStenhammer                    Dr  \t[(-121.9612,37.84),(-121.9607,37.826)]\nSterne                        Pl  \t[(-122.0318,37.838),(-122.0327,37.835)]\nSteuben                       Ct  \t[(-121.9547,37.227),(-121.9553,37.225)]\nStevens                       St  \t[(-122.0718,37.999),(-122.0707,37.999)]\nStevenson                     Blvd\t[(-121.9758,37.367),(-121.9782,37.334)]\nStevenson                     Blvd\t[(-121.982964,37.27715),(-121.983567,37.27017)]\nStewart                       Ave \t[(-121.9797,37.174),(-121.9821,37.149)]\nStoakes                       Ave \t[(-122.161722,37.31574),(-122.16195,37.31467)]\nStonedale                     Dr  \t[(-121.9171,37.877),(-121.9173,37.882)]\nStonehenge                    Road\t[(-122.037162,37.84679),(-122.0377,37.841)]\nStoneridge                    Dr  \t[(-121.894,37.919),(-121.8902,37.925)]\nStoneridge                    Dr  \t[(-121.9082,37.905),(-121.9089,37.904)]\nStoneridge Mall               Road\t[(-121.9274,37.926),(-121.925,37.925)]\nStoneridge Mall               Road\t[(-121.9287,37.963),(-121.9283,37.941)]\nStonewall                     Ave \t[(-122.1076,37.568),(-122.1067,37.554)]\nStony Brook                       \t[(-121.9429,37.244),(-121.9432,37.21)]\nStorer                        Ave \t[(-122.1944,37.852),(-122.1934,37.854)]\nStow                          Ave \t[(-122.2508,37.042),(-122.2491,37.043)]\nStrang                        Ave \t[(-122.1087,37.034),(-122.1076,37.037)]\nStratford                     Ave \t[(-121.9696,37.271),(-121.9732,37.254)]\nStratton Common                   \t[(-121.983399,37.43226),(-121.983217,37.43097)]\nStream                            \t[(-121.574573,37.54948),(-121.574039,37.57213)]\nStream                            \t[(-121.648853,37.05723),(-121.651539,37.14924)]\nStrobridge                    Ave \t[(-122.0884,37.911),(-122.0882,37.908)]\nStrong                        Way \t[(-122.102446,37.04885),(-122.101424,37.05337)]\nStuart                        St  \t[(-122.2518,37.6),(-122.2507,37.601),(-122.2491,37.606)]\nStuart                        St  \t[(-122.2554,37.601),(-122.2541,37.602)]\nSuddard                       Ct  \t[(-121.9057,37.823),(-121.9064,37.822)]\nSueirro                       St  \t[(-122.1113,37.628),(-122.1121,37.627)]\nSuffolk                       Way \t[(-121.8699,37.932),(-121.8732,37.92)]\nSulphur                       Dr  \t[(-122.0517,37.719),(-122.0506,37.715)]\nSulphur Creek                     \t[(-122.058701,37.76216),(-122.0609,37.772)]\nSulphur Creek                     \t[(-122.0655,37.766),(-122.0659,37.764)]\nSumatra                       St  \t[(-122.0743,37.277),(-122.0751,37.276)]\nSummit                        Road\t[(-122.2464,37.816),(-122.2447,37.82)]\nSummit                        Road\t[(-122.2479,37.874),(-122.2478,37.87)]\nSun Valley                    Dr  \t[(-122.1174,37.493),(-122.1173,37.488)]\nSun Valley                    Dr  \t[(-122.1191,37.47),(-122.1201,37.465)]\nSundale                       Dr  \t[(-121.976,37.481),(-121.9776,37.464)]\nSundale                       Dr  \t[(-121.982028,37.41595),(-121.98231,37.41254)]\nSundale                       Dr  \t[(-121.9836,37.315),(-121.9809,37.301)]\nSundale                       Dr  \t[(-121.9868,37.342),(-121.9867,37.338)]\nSundance                      Dr  \t[(-121.9113,37.988),(-121.9097,37.992)]\nSundberg                      Ave \t[(-122.1667,37.119),(-122.1659,37.116)]\nSunnybank                     Pl  \t[(-122.051879,37.78503),(-122.052,37.782)]\nSunnydale                     Ct  \t[(-122.0429,37.203),(-122.0429,37.2)]\nSunnyhills                    Road\t[(-122.2257,37.111),(-122.2246,37.114)]\nSunnymere                     Ave \t[(-122.1681,37.776),(-122.1672,37.77)]\nSunnymere                     Ave \t[(-122.1707,37.791),(-122.1699,37.786)]\nSunnymere                     Ave \t[(-122.1729,37.803),(-122.1718,37.795)]\nSunnyside                     Ave \t[(-122.2469,37.232),(-122.2453,37.221)]\nSunnyside                     St  \t[(-122.1564,37.386),(-122.1559,37.38)]\nSunnyside                     St  \t[(-122.1611,37.462),(-122.1604,37.453)]\nSunol                         Blvd\t[(-121.8805,37.447),(-121.8807,37.422)]\nSunol                         Road\t[(-122.1254,37.671),(-122.1254,37.666)]\nSunol Ridge                   Trl \t[(-121.9419,37.455),(-121.9345,37.38)]\nSunrise                       Dr  \t[(-121.7347,37.066),(-121.7343,37.069)]\nSunset                        Ave \t[(-122.2176,37.901),(-122.2173,37.908)]\nSunset                        Blvd\t[(-122.0899,37.779),(-122.0888,37.788)]\nSunset                        Blvd\t[(-122.0932,37.755),(-122.0921,37.761)]\nSunset                        Blvd\t[(-122.0944,37.75),(-122.0941,37.751)]\nSunset                        Trl \t[(-122.2375,37.574),(-122.2372,37.571)]\nSunshine                      Pl  \t[(-122.097403,37.11209),(-122.096541,37.11436)]\nSunstream                     Lane\t[(-121.7345,37.059),(-121.7347,37.066)]\nSunwood                       Dr  \t[(-121.9332,37.113),(-121.9335,37.132)]\nSuperior                      Ave \t[(-122.142,37.324),(-122.1422,37.315)]\nSuperior                      Dr  \t[(-121.7724,37.543),(-121.7727,37.543)]\nSurry                         Pl  \t[(-122.0052,37.685),(-122.006,37.679)]\nSussex                        Way \t[(-122.0657,37.227),(-122.0669,37.222),(-122.0673,37.219)]\nSuter                         St  \t[(-122.2009,37.89),(-122.2007,37.888)]\nSuter                         St  \t[(-122.2072,37.94),(-122.2061,37.931)]\nSutter                        Dr  \t[(-121.9893,37.359),(-121.987,37.35)]\nSutter                        Dr  \t[(-121.9951,37.377),(-121.9943,37.373)]\nSutter Gate                   Ave \t[(-121.8838,37.866),(-121.8845,37.864)]\nSutton                        Loop\t[(-121.9994,37.586),(-121.9981,37.576)]\nSwan                          Dr  \t[(-121.7996,37.845),(-121.7991,37.834)]\nSybil                         Ave \t[(-122.1443,37.213),(-122.1435,37.215)]\nSycamore                      Ave \t[(-122.0759,37.633),(-122.0752,37.636)]\nSycamore                      Ave \t[(-122.0826,37.609),(-122.0818,37.606)]\nSycamore                      St  \t[(-122.0361,37.294),(-122.0354,37.291)]\nSycamore                      St  \t[(-122.2715,37.16),(-122.2739,37.163)]\nSydney                        Ave \t[(-121.7678,37.636),(-121.7669,37.636)]\nSydney                        Cir \t[(-122.098211,37.07652),(-122.09723,37.06547)]\nSylvan Glen                       \t[(-122.065238,37.685),(-122.065615,37.67879)]\nSylvaner                      Dr  \t[(-121.8475,37.61),(-121.8482,37.607)]\nSylvaner                      Way \t[(-121.907301,37.67596),(-121.908111,37.67419)]\nSylvester                     Dr  \t[(-122.041,37.815),(-122.0405,37.812)]\nSylvia                        Cir \t[(-121.860125,37.6435),(-121.8603,37.64325)]\nTacchella                     Way \t[(-121.994785,37.62496),(-121.994311,37.61417)]\nTahiti                        Lane\t[(-122.2411,37.343),(-122.240607,37.3499),(-122.2401,37.357)]\nTalbot                        Ave \t[(-122.2925,37.847),(-122.2925,37.843)]\nTalbot                        Ave \t[(-122.2967,37.989),(-122.2964,37.975),(-122.2959,37.959)]\nTallahassee                   St  \t[(-122.0989,37.352),(-122.1012,37.345)]\nTamalpais                     Path\t[(-122.2596,37.866),(-122.2599,37.872)]\nTamalpais                     Road\t[(-122.2593,37.836),(-122.2588,37.842)]\nTamarack                      Dr  \t[(-121.9207,37.159),(-121.922,37.155)]\nTamarack                      Dr  \t[(-121.9255,37.155),(-121.9266,37.156)]\nTamarack                      Dr  \t[(-121.9304,37.16),(-121.9313,37.163)]\nTamarack                      Dr  \t[(-121.932412,37.17516),(-121.9327,37.179)]\nTamayo                        St  \t[(-122.0184,37.732),(-122.019,37.729)]\nTamayo                        St  \t[(-122.0201,37.723),(-122.0204,37.72)]\nTampa                         Ave \t[(-122.0747,37.327),(-122.0747,37.314),(-122.0746,37.308)]\nTanager                       Dr  \t[(-121.8775,37.831),(-121.8778,37.838)]\nTanglewood                    Path\t[(-122.2431,37.628),(-122.2427,37.626)]\nTarraville Creek                  \t[(-121.52544,37.95569),(-121.525089,37.948)]\nTarraville Creek                  \t[(-121.528505,37.9837),(-121.528147,37.97997)]\nTarraville Creek                  \t[(-121.53429,37.98943),(-121.532627,37.98722)]\nTarraville Creek                  \t[(-121.536091,37.99721),(-121.536763,37)]\nTarraville Creek              Road\t[(-121.52582,37.96459),(-121.525715,37.96296)]\nTarraville Creek              Road\t[(-121.530642,37.9828),(-121.530608,37.98278)]\nTartarian                     St  \t[(-122.1774,37.35),(-122.1768,37.352)]\nTassajara                     Road\t[(-121.8709,37.099),(-121.8713,37.048)]\nTassajara Creek                   \t[(-121.87866,37.98898),(-121.8782,37.015)]\nTassajara Creek                   \t[(-121.8862,37.901),(-121.8847,37.924)]\nTaurus                        Ave \t[(-122.2159,37.416),(-122.2128,37.389)]\nTaylor                        Ave \t[(-122.0547,37.245),(-122.0541,37.241),(-122.0535,37.237)]\nTaylor                        Ave \t[(-122.280873,37.72975),(-122.280388,37.72958)]\nTeakwood                      St  \t[(-122.1109,37.58),(-122.1104,37.574)]\nTechnology                    Dr  \t[(-121.9539,37.109),(-121.9536,37.099)]\nTelegraph                     Ave \t[(-122.2581,37.635),(-122.2583,37.625)]\nTelegraph                     Ave \t[(-122.2585,37.616),(-122.2586,37.607)]\nTelegraph                     Ave \t[(-122.2589,37.588),(-122.2591,37.578)]\nTelegraph                     Ave \t[(-122.2594,37.547),(-122.2596,37.541)]\nTelegraph                     Ave \t[(-122.2614,37.411),(-122.2613,37.414)]\nTelegraph                     Ave \t[(-122.2618,37.384),(-122.261742,37.38806)]\nTelegraph                     Ave \t[(-122.2625,37.353),(-122.2623,37.361)]\nTelegraph                     Ave \t[(-122.2647,37.266),(-122.2647,37.274)]\nTelegraph                     Ave \t[(-122.2679,37.147),(-122.2678,37.149)]\nTelegraph                     Ave \t[(-122.2688,37.109),(-122.2686,37.114)]\nTelegraph                     Ave \t[(-122.2693,37.089),(-122.2691,37.096)]\nTelegraph                     Ave \t[(-122.2699,37.067),(-122.2697,37.074)]\nTemescal                      Cir \t[(-122.282639,37.36326),(-122.28206,37.3665)]\nTemescal Creek                    \t[(-122.284945,37.36017),(-122.2855,37.359)]\nTemescal Creek                    \t[(-122.2922,37.344),(-122.2937,37.341)]\nTennyson                      Road\t[(-122.056941,37.35835),(-122.0562,37.36)]\nTennyson                      Road\t[(-122.0605,37.352),(-122.0602,37.354)]\nTennyson                      Road\t[(-122.062,37.345),(-122.0625,37.343)]\nTennyson                      Road\t[(-122.0682,37.318),(-122.0685,37.317)]\nTennyson                      Road\t[(-122.0891,37.317),(-122.0927,37.317)]\nTennyson                      Road\t[(-122.1035,37.272),(-122.1041,37.268)]\nTerrace                       St  \t[(-122.2539,37.299),(-122.2523,37.321)]\nTerrace                       Walk\t[(-122.2719,37.89),(-122.2705,37.884)]\nTesla                         Road\t[(-121.570042,37.38752),(-121.573978,37.37661)]\nTesla                         Road\t[(-121.588398,37.4085),(-121.596897,37.4397)]\nTesla                         Road\t[(-121.613819,37.51806),(-121.62334,37.46389)]\nTesla                         Road\t[(-121.646458,37.4545),(-121.646946,37.45847)]\nTesla                         Road\t[(-121.6705,37.607),(-121.667684,37.55608)]\nTesla                         Road\t[(-121.6774,37.632),(-121.675,37.633)]\nTevis                         St  \t[(-122.2011,37.621),(-122.2007,37.616)]\nTevlin                        St  \t[(-122.2866,37.83),(-122.2871,37.819)]\nTexas                         St  \t[(-122.2087,37.942),(-122.2076,37.937)]\nThackeray                     Ave \t[(-122.072,37.305),(-122.0715,37.298)]\nThe                           Cir \t[(-122.2721,37.904),(-122.2718,37.905)]\nThe                           Cres\t[(-122.2534,37.945),(-122.254,37.941)]\nThe Alameda                       \t[(-122.2749,37.863),(-122.2744,37.855)]\nThe Alameda                       \t[(-122.276,37.89),(-122.2759,37.882)]\nThe Alameda                       \t[(-122.2765,37.916),(-122.2762,37.902)]\nThe Alameda                       \t[(-122.2805,37.996),(-122.2808,37.988)]\nThe South Crossways               \t[(-122.2442,37.529),(-122.2443,37.522)]\nThe Uplands                       \t[(-122.2477,37.545),(-122.246,37.543),(-122.245,37.538)]\nTheresa                       Way \t[(-121.7273,37.877),(-121.7272,37.868)]\nTheresa                       Way \t[(-121.7289,37.906),(-121.728,37.899)]\nTheta                         St  \t[(-122.0181,37.565),(-122.018394,37.56324)]\nTheta                         St  \t[(-122.0197,37.553),(-122.02,37.55)]\nThomas                        Ave \t[(-122.2487,37.375),(-122.2479,37.39)]\nThornhill                     Dr  \t[(-122.204,37.39),(-122.201,37.389)]\nThornhill                     Dr  \t[(-122.2131,37.335),(-122.2112,37.35)]\nThornton                      Ave \t[(-122.0036,37.671),(-122.0048,37.66)]\nThornton                      Ave \t[(-122.0068,37.644),(-122.0083,37.63)]\nThornton                      Ave \t[(-122.0127,37.583),(-122.0132,37.575)]\nThornton                      Ave \t[(-122.0164,37.537),(-122.0175,37.523)]\nThornton                      Ave \t[(-122.0211,37.477),(-122.0214,37.473)]\nThornton                      Ave \t[(-122.0291,37.379),(-122.03,37.37)]\nThornton                      Ave \t[(-122.0636,37.335),(-122.0626,37.303)]\nThornton                      St  \t[(-122.1505,37.215),(-122.1526,37.206)]\nThornton                      St  \t[(-122.1572,37.189),(-122.1576,37.188)]\nThousand Oaks                 Blvd\t[(-122.2799,37.975),(-122.2779,37.972)]\nThousand Oaks                 Blvd\t[(-122.283,37.972),(-122.2824,37.974)]\nTidal Canal                       \t[(-122.2302,37.697),(-122.229,37.694)]\nTidal Canal                       \t[(-122.2428,37.791),(-122.2386,37.745)]\nTidewater                     Ave \t[(-122.2193,37.625),(-122.2174,37.609)]\nTideway                       Dr  \t[(-122.2877,37.692),(-122.2854,37.704)]\nTiffin                        Road\t[(-122.2086,37.069),(-122.2076,37.07)]\nTilgrim                       Way \t[(-122.0831,37.211),(-122.084,37.211)]\nTimber                        St  \t[(-122.0175,37.38),(-122.0139,37.362)]\nTimbercreek                   Ter \t[(-121.9527,37.351),(-121.952496,37.35039)]\nTimpanogas                    Cir \t[(-121.963,37.752),(-121.962723,37.74924)]\nTina                          Way \t[(-122.0322,37.185),(-122.0305,37.196)]\nTinder                        Ct  \t[(-122.0496,37.109),(-122.0488,37.12)]\nTioga                         Ct  \t[(-121.847804,37.6667),(-121.848197,37.66978)]\nTissiack                      Way \t[(-121.920364,37),(-121.9208,37.995)]\nToler                         Ave \t[(-122.1575,37.269),(-122.1593,37.261)]\nTonopah                       Ct  \t[(-121.914,37.684),(-121.9138,37.682)]\nTopawa                        Dr  \t[(-121.9204,37.878),(-121.9197,37.88)]\nToroges Creek                     \t[(-121.9217,37.808),(-121.922457,37.80485)]\nToroges Creek                     \t[(-121.925,37.795),(-121.9268,37.789)]\nTorrano                       Ave \t[(-122.0685,37.547),(-122.0679,37.551)]\nTory                          Way \t[(-121.9162,37.139),(-121.917,37.132)]\nTotterdell                    St  \t[(-122.187,37.228),(-122.1864,37.224)]\nTouriga                       Dr  \t[(-121.8512,37.611),(-121.851283,37.60893)]\nTouriga                       Dr  \t[(-121.8512,37.644),(-121.8511,37.648)]\nTouriga                       Dr  \t[(-121.8521,37.566),(-121.8523,37.559)]\nTowers                        St  \t[(-122.1296,37.096),(-122.1286,37.089)]\nToyon                         Pl  \t[(-122.0469,37.951),(-122.0464,37.953)]\nTozier                        St  \t[(-122.0502,37.394),(-122.0497,37.39)]\nTrade Wind                    Lane\t[(-121.9887,37.294),(-121.9891,37.288)]\nTrafalgar                     Ave \t[(-122.1036,37.369),(-122.1043,37.375)]\nTreeview                      St  \t[(-122.0379,37.267),(-122.0375,37.262)]\nTreeview                      St  \t[(-122.039,37.282),(-122.0387,37.278)]\nTremont                       St  \t[(-122.267,37.503),(-122.2672,37.514)]\nTrenery                       Dr  \t[(-121.866449,37.88045),(-121.866515,37.88044)]\nTrenton                       Dr  \t[(-122.0655,37.155),(-122.0647,37.142)]\nTrestle Glen                  Road\t[(-122.221239,37.12059),(-122.2207,37.125),(-122.2201,37.133)]\nTrimingham                    Dr  \t[(-121.871338,37.76396),(-121.872239,37.76736)]\nTrojan                        Ave \t[(-122.144,37.868),(-122.1446,37.867)]\nTrojan                        Ave \t[(-122.1467,37.864),(-122.1483,37.862)]\nTrojan                        Ave \t[(-122.1514,37.858),(-122.1522,37.857)]\nTrombas                       Ave \t[(-122.1428,37.217),(-122.1425,37.211)]\nTropicana                     Way \t[(-122.0492,37.892),(-122.050057,37.88256),(-122.0513,37.874)]\nTruman                        Pl  \t[(-121.9933,37.285),(-121.9938,37.279)]\nTudor                         Road\t[(-122.1808,37.216),(-122.1801,37.216)]\nTulare                        Ave \t[(-122.2811,37.889),(-122.2816,37.868)]\nTule Lake                     Lane\t[(-122.0568,37.871),(-122.0559,37.866)]\nTulip                         Ave \t[(-122.1901,37.881),(-122.1898,37.877)]\nTumbleweed                    Ct  \t[(-122.0715,37.906),(-122.0718,37.908)]\nTunnel                        Road\t[(-122.2382,37.555),(-122.2374,37.553)]\nTunnel                        Road\t[(-122.2405,37.574),(-122.2402,37.57)]\nTunnel                        Road\t[(-122.2427,37.581),(-122.2414,37.579)]\nTunnel Creek                      \t[(-121.610752,37.58239),(-121.624698,37.83019)]\nTupelo                        Ter \t[(-122.059087,37.6113),(-122.057021,37.59942)]\nTupelo                        Ter \t[(-122.061851,37.62675),(-122.0606,37.62)]\nTurban                        Ct  \t[(-121.9737,37.141),(-121.9729,37.143)]\nTurnstone                     Ct  \t[(-121.7967,37.812),(-121.7967,37.814)]\nTurquoise                     St  \t[(-121.918671,37.20347),(-121.918562,37.20173)]\nTwain                         Ave \t[(-122.2574,37.904),(-122.2563,37.907)]\nTwin Peaks                    Ter \t[(-121.9785,37.427),(-121.9783,37.431)]\nTyee                          Ct  \t[(-122.084,37.918),(-122.084,37.913)]\nTyler                         Lane\t[(-122.0674,37.157),(-122.066,37.146)]\nTyler                         Pl  \t[(-121.9973,37.293),(-121.9986,37.289)]\nTyler                         St  \t[(-122.2782,37.525),(-122.278041,37.52523)]\nTyrrell                       Ave \t[(-122.0709,37.334),(-122.0708,37.329)]\nTyrrell                       Ave \t[(-122.0751,37.441),(-122.0759,37.428)]\nUlmeca                        Pl  \t[(-121.9129,37.786),(-121.9125,37.779)]\nUnderwood                     Ave \t[(-122.0823,37.477),(-122.0822,37.469)]\nUnderwood                     Ave \t[(-122.1852,37.828),(-122.1846,37.809)]\nUnion                         St  \t[(-121.9578,37.334),(-121.9584,37.33)]\nUnion                         St  \t[(-122.2527,37.731),(-122.2521,37.739)]\nUnion                         St  \t[(-122.2555,37.689),(-122.2549,37.698)]\nUnion                         St  \t[(-122.2579,37.654),(-122.2573,37.663)]\nUnion                         St  \t[(-122.2839,37.21),(-122.2833,37.227)]\nUnion                         St  \t[(-122.2854,37.164),(-122.2852,37.178),(-122.2844,37.195)]\nUnion                         St  \t[(-122.2862,37.14),(-122.2858,37.152)]\nUnion                         St  \t[(-122.2881,37.092),(-122.2876,37.107)]\nUnion                         St  \t[(-122.2898,37.042),(-122.2897,37.044)]\nUnion City                    Blvd\t[(-122.0674,37.657),(-122.0669,37.654)]\nUnion City                    Blvd\t[(-122.078284,37.74531),(-122.078001,37.74022)]\nUnion City                    Blvd\t[(-122.0791,37.76),(-122.0786,37.751)]\nUnion City                    Blvd\t[(-122.0795,37.923),(-122.0797,37.907)]\nUnion City                    Blvd\t[(-122.0797,37.883),(-122.0797,37.878)]\nUnion City                    Blvd\t[(-122.0797,37.964),(-122.0797,37.959)]\nUnion City                    Blvd\t[(-122.0805,37.986),(-122.0804,37.972)]\nUniversity                    Ave \t[(-122.2711,37.718),(-122.27,37.719)]\nUniversity                    Dr  \t[(-122.0275,37.971),(-122.0264,37.97)]\nUpton                         Ave \t[(-122.1298,37.99),(-122.1297,37.984)]\nUrban                         St  \t[(-121.9714,37.412),(-121.971,37.41)]\nUsher                         St  \t[(-122.1276,37.885),(-122.1275,37.865)]\nUtah                          St  \t[(-121.8591,37.68),(-121.8584,37.682)]\nVaca                          Dr  \t[(-121.9531,37.448),(-121.9531,37.442)]\nVal                           St  \t[(-121.9739,37.325),(-121.9746,37.324)]\nValita                        Dr  \t[(-122.1417,37.192),(-122.141,37.195)]\nValle Vista                   Ave \t[(-122.246,37.162),(-122.2461,37.168)]\nVallecitos                    Road\t[(-121.7875,37.454),(-121.7856,37.463),(-121.7822,37.482)]\nVallecitos                    Road\t[(-121.8177,37.142),(-121.836,37.053)]\nVallecitos                    Road\t[(-121.8631,37.951),(-121.868,37.93)]\nVallecitos                    Road\t[(-121.8699,37.916),(-121.8703,37.891)]\nVallecitos Creek                  \t[(-121.8423,37.033),(-121.8379,37.094)]\nVallejo                       St  \t[(-121.9718,37.765),(-121.9719,37.769)]\nVallejo                       St  \t[(-122.2869,37.46),(-122.2872,37.466)]\nValley                        Ave \t[(-121.8591,37.733),(-121.8628,37.76)]\nValley                        Ave \t[(-121.8673,37.761),(-121.8677,37.76)]\nValley                        Ave \t[(-121.887,37.767),(-121.8878,37.767),(-121.8888,37.767)]\nValley                        Ave \t[(-121.8962,37.644),(-121.89632,37.6086),(-121.896359,37.59716)]\nValley                        Dr  \t[(-121.863815,37.76063),(-121.8644,37.761)]\nValley                        Dr  \t[(-121.8967,37.761),(-121.8982,37.746)]\nValley                        Dr  \t[(-121.897701,37.6866),(-121.8972,37.677),(-121.89692,37.66207)]\nValley                        St  \t[(-122.17,37.16),(-122.1707,37.158)]\nValley Brook                  Ct  \t[(-122.0479,37.871),(-122.0478,37.867)]\nValley Trails                 Dr  \t[(-121.9038,37.75),(-121.9029,37.754)]\nValley Trails                 Dr  \t[(-121.9066,37.776),(-121.9075,37.775),(-121.9084,37.774)]\nValley Trails                 Dr  \t[(-121.908,37.739),(-121.9075,37.739)]\nValley Trails                 Dr  \t[(-121.9098,37.756),(-121.91,37.753)]\nValpey Park                   Ave \t[(-121.9748,37.188),(-121.9756,37.186)]\nVan                           Ave \t[(-122.1212,37.142),(-122.1206,37.128)]\nVan Buren                     Ave \t[(-122.2521,37.111),(-122.2512,37.113)]\nVan Mourik                    Ave \t[(-122.1718,37.795),(-122.1716,37.801)]\nVancouver                     Way \t[(-121.7753,37.665),(-121.7742,37.666)]\nVancouver                     Way \t[(-121.7775,37.667),(-121.7768,37.666)]\nVanda                         Way \t[(-121.9989,37.807),(-121.9993,37.8)]\nVanderbilt                    St  \t[(-122.039,37.254),(-122.0386,37.243)]\nVane Common                       \t[(-122.056732,37.54797),(-122.056633,37.54543)]\nVargas                        Road\t[(-121.9161,37.512),(-121.9165,37.504)]\nVasco                         Road\t[(-121.717311,37.99316),(-121.7174,37.971)]\nVasco                         Road\t[(-121.7177,37.70674),(-121.7177,37.68228)]\nVasco                         Road\t[(-121.7217,37.062),(-121.72,37.039)]\nVasco                         Road\t[(-121.7229,37.093),(-121.7228,37.089)]\nVasco                         Road\t[(-121.7231,37.108),(-121.7232,37.114)]\nVasco                         Road\t[(-121.737,37.725),(-121.7282,37.489)]\nVasquez                       Ct  \t[(-122.0252,37.029),(-122.025392,37.02756)]\nVassar                        Ave \t[(-122.1245,37.952),(-122.1246,37.945)]\nVaughn                        Ave \t[(-121.7118,37.061),(-121.7074,37.08)]\nVaughn                        Ave \t[(-122.0802,37.053),(-122.0801,37.026)]\nVegas                         Ave \t[(-122.075906,37.8929),(-122.0726,37.894)]\nVentura                       Ave \t[(-122.2832,37.864),(-122.283509,37.8555)]\nVera                          Ave \t[(-122.1318,37.984),(-122.1317,37.977)]\nVerdemar                      Dr  \t[(-122.2454,37.333),(-122.2453,37.335)]\nVergil                        St  \t[(-122.0685,37.886),(-122.0681,37.88)]\nVermont                       St  \t[(-122.2424,37.16),(-122.2415,37.168)]\nVernetti                      Way \t[(-122.064379,37.90817),(-122.063821,37.90117)]\nVernon                        Ave \t[(-122.0039,37.383),(-122.006,37.358)]\nVernon                        St  \t[(-122.2509,37.179),(-122.2503,37.184)]\nVerona                        Ave \t[(-121.7808,37.721),(-121.7801,37.721)]\nVersailles                    Ave \t[(-122.2383,37.577),(-122.2374,37.589)]\nVia Alamitos                      \t[(-122.1302,37.675),(-122.13,37.668)]\nVia Alamitos                      \t[(-122.1302,37.704),(-122.1303,37.697)]\nVia Amigos                        \t[(-122.1406,37.731),(-122.1424,37.722)]\nVia Annette                       \t[(-122.1389,37.65),(-122.1388,37.631)]\nVia Arriba                        \t[(-122.122,37.712),(-122.1216,37.702)]\nVia Arroyo                        \t[(-122.1256,37.835),(-122.1236,37.823)]\nVia Barrett                       \t[(-122.1495,37.736),(-122.1503,37.733)]\nVia Bellita                       \t[(-122.121893,37.82393),(-122.12257,37.81959)]\nVia Buena Vista                   \t[(-122.1366,37.652),(-122.1374,37.651)]\nVia Carmen                        \t[(-122.1401,37.674),(-122.1397,37.65)]\nVia Chiquita                      \t[(-122.1321,37.693),(-122.1319,37.681)]\nVia Chiquita                      \t[(-122.1322,37.708),(-122.1321,37.702)]\nVia Chiquita                      \t[(-122.1337,37.731),(-122.1333,37.724)]\nVia Cordoba                       \t[(-122.1246,37.853),(-122.1239,37.853)]\nVia de Los Cerros                 \t[(-121.901117,37.7212),(-121.900094,37.71647)]\nVia de Los Milagros               \t[(-121.8982,37.746),(-121.8975,37.743)]\nVia del Prado                     \t[(-122.135,37.797),(-122.1339,37.78)]\nVia del Sol                       \t[(-121.7899,37.624),(-121.7901,37.615)]\nVia Diego                         \t[(-122.118617,37.81903),(-122.1194,37.814)]\nVia el Cerrito                    \t[(-122.1337,37.691),(-122.1336,37.676)]\nVia Enrico                        \t[(-122.1379,37.82),(-122.1389,37.818)]\nVia Enrico                        \t[(-122.139846,37.81379),(-122.1407,37.81)]\nVia Escondido                     \t[(-122.1409,37.747),(-122.141278,37.74521)]\nVia Escondido                     \t[(-122.142774,37.73812),(-122.143583,37.73429)]\nVia Esperanza                     \t[(-122.1273,37.676),(-122.1302,37.675)]\nVia Frances                       \t[(-122.1387,37.68),(-122.1386,37.666)]\nVia Granada                       \t[(-122.121893,37.82393),(-122.1217,37.822)]\nVia Harriet                       \t[(-122.1474,37.709),(-122.1473,37.691),(-122.1456,37.674)]\nVia Hermana                       \t[(-122.1433,37.791),(-122.1442,37.786)]\nVia la Jolla                      \t[(-122.1346,37.699),(-122.1345,37.691)]\nVia Lacqua                        \t[(-122.1463,37.734),(-122.1471,37.73)]\nVia Lucas                         \t[(-122.1381,37.71),(-122.1396,37.71)]\nVia Manzanas                      \t[(-122.1248,37.761),(-122.1265,37.753)]\nVia Matero                        \t[(-122.116,37.806),(-122.1175,37.797)]\nVia Montalvo                      \t[(-121.7867,37.962),(-121.7861,37.967)]\nVia Natal                         \t[(-122.1434,37.684),(-122.1441,37.68)]\nVia Natal                         \t[(-122.1449,37.677),(-122.1456,37.674)]\nVia Nueva                         \t[(-122.1461,37.743),(-122.1456,37.738)]\nVia Paro                          \t[(-122.129,37.78),(-122.1276,37.757)]\nVia Peralta                       \t[(-121.8941,37.729),(-121.8938,37.726)]\nVia Perdido                       \t[(-122.1295,37.741),(-122.1281,37.727)]\nVia Pinale                        \t[(-122.1333,37.793),(-122.1315,37.773)]\nVia Primero                       \t[(-122.1223,37.774),(-122.1211,37.755)]\nVia Redondo                       \t[(-122.141,37.7),(-122.1423,37.707)]\nVia Rodriguez                     \t[(-122.1234,37.809),(-122.1233,37.806)]\nVia Segundo                       \t[(-122.1207,37.778),(-122.1189,37.765)]\nVia Tovita                        \t[(-122.1336,37.64),(-122.1356,37.638)]\nVia Vega                          \t[(-122.1388,37.837),(-122.1389,37.818)]\nVia Verde                         \t[(-122.1165,37.788),(-122.1175,37.782)]\nVia Vista                         \t[(-122.1364,37.745),(-122.1391,37.735)]\nVia Zapata                        \t[(-121.9434,37.147),(-121.9441,37.161)]\nVicente                       Pl  \t[(-122.2329,37.572),(-122.232,37.578)]\nVicente                       St  \t[(-122.2598,37.427),(-122.2598,37.432)]\nVictor                        Ave \t[(-122.1914,37.972),(-122.1901,37.964)]\nVictor                        Ave \t[(-122.1922,37.987),(-122.1918,37.981)]\nVictoria                      Ave \t[(-122.0739,37.905),(-122.0759,37.903)]\nVictoria                      Lane\t[(-121.663807,37.54316),(-121.663944,37.56139)]\nVictoria Bay                      \t[(-122.2363,37.399),(-122.2365,37.393)]\nVictory                       Dr  \t[(-122.1091,37.635),(-122.109281,37.6426)]\nView                          Dr  \t[(-122.1364,37.276),(-122.1295,37.271)]\nView Crest                    Ct  \t[(-122.165164,37.82551),(-122.164162,37.826)]\nVillage                       Dr  \t[(-122.0773,37.967),(-122.0766,37.967)]\nVillage                       Pkwy\t[(-121.9256,37.098),(-121.9267,37.113)]\nVillareal                     Dr  \t[(-122.019699,37.15004),(-122.018295,37.15912)]\nVillareal                     Dr  \t[(-122.0204,37.147),(-122.0217,37.142)]\nVillareal                     Dr  \t[(-122.022433,37.10266),(-122.023425,37.09294)]\nVine                          St  \t[(-121.8603,37.64036),(-121.8601,37.64044)]\nVine                          St  \t[(-122.2755,37.793),(-122.2743,37.794)]\nVineyard                      Ave \t[(-121.8463,37.647),(-121.846448,37.64711)]\nVineyard                      Ave \t[(-121.8524,37.648),(-121.8511,37.648)]\nVineyard                      Ave \t[(-121.853754,37.648),(-121.853805,37.648)]\nVineyard                      Road\t[(-121.919,37.056),(-121.9128,37.069)]\nVineyard                      Road\t[(-122.0878,37.2),(-122.0877,37.191)]\nVirginia                      St  \t[(-122.0748,37.47),(-122.0697,37.477)]\nVirginia                      St  \t[(-122.2582,37.78),(-122.2565,37.782),(-122.2557,37.784)]\nVirginia                      St  \t[(-122.2751,37.756),(-122.2739,37.759)]\nVirgo                         Road\t[(-122.2152,37.415),(-122.2146,37.435)]\nVista                         Ct  \t[(-121.755,37.84),(-121.7551,37.838)]\nVista del Plaza               Lane\t[(-122.0834,37.809),(-122.0829,37.804)]\nVistamont                     Ave \t[(-122.265432,37.0356),(-122.2643,37.029)]\nVivian                        St  \t[(-122.0831,37.895),(-122.082,37.895)]\nVomac                         Road\t[(-121.9367,37.166),(-121.937,37.173)]\nWadsworth                     Ct  \t[(-121.97,37.249),(-121.9708,37.241)]\nWagner                        St  \t[(-122.1254,37.959),(-122.1245,37.952)]\nWagoner                       Dr  \t[(-121.784,37.67),(-121.784,37.663)]\nWalker                        Ave \t[(-122.2437,37.153),(-122.2433,37.161)]\nWalker                        Pl  \t[(-121.7692,37.537),(-121.7693,37.544)]\nWall                          St  \t[(-121.7904,37.776),(-121.7893,37.767)]\nWalnut                        Ave \t[(-121.9689,37.601),(-121.969899,37.59434)]\nWalnut                        Ave \t[(-121.9804,37.471),(-121.9817,37.456)]\nWalnut                        Ave \t[(-121.983083,37.44159),(-121.983361,37.43869)]\nWalnut                        St  \t[(-121.769,37.877),(-121.7683,37.88)]\nWalnut                        St  \t[(-121.774,37.863),(-121.7728,37.866)]\nWalnut                        St  \t[(-122.0425,37.262),(-122.0417,37.246)]\nWalnut                        St  \t[(-122.1913,37.734),(-122.1909,37.729)]\nWalnut                        St  \t[(-122.1948,37.763),(-122.1923,37.742)]\nWalnut                        St  \t[(-122.2442,37.682),(-122.2437,37.69)]\nWalnut                        St  \t[(-122.2465,37.648),(-122.2459,37.658)]\nWalnut                        St  \t[(-122.2489,37.613),(-122.2483,37.622)]\nWalnut                        St  \t[(-122.2675,37.804),(-122.2672,37.785)]\nWalpert                       St  \t[(-122.07476,37.6893),(-122.073488,37.69487)]\nWarbler                       Loop\t[(-122.0601,37.813),(-122.0597,37.793)]\nWard                          St  \t[(-122.2838,37.575),(-122.2827,37.575)]\nWard Creek                        \t[(-122.0568,37.644),(-122.058701,37.64815)]\nWard Creek                        \t[(-122.0717,37.679),(-122.077,37.657)]\nWard Creek Branch                 \t[(-122.0615,37.62),(-122.069914,37.64417)]\nWarfield                      Ave \t[(-122.2403,37.16),(-122.2382,37.178)]\nWarfield                      Ave \t[(-122.2404,37.153),(-122.2402,37.157)]\nWarfield                      Ave \t[(-122.244,37.124),(-122.2435,37.13)]\nWarm Springs                  Blvd\t[(-121.9184,37.728),(-121.9168,37.703)]\nWarm Springs                  Blvd\t[(-121.9209,37.769),(-121.9198,37.751)]\nWarm Springs                  Blvd\t[(-121.9258,37.851),(-121.9247,37.833)]\nWarm Springs                  Blvd\t[(-121.933956,37),(-121.9343,37.97)]\nWarner                        Ave \t[(-122.0249,37.096),(-122.024,37.103)]\nWarner                        Ave \t[(-122.1579,37.477),(-122.1571,37.482)]\nWarren                        Ave \t[(-121.9285,37.866),(-121.9302,37.859)]\nWarren                        Ave \t[(-121.9314,37.855),(-121.933,37.849)]\nWarsaw                        Ave \t[(-121.7714,37.623),(-121.77064,37.6268)]\nWarwick                       Pl  \t[(-122.0498,37.647),(-122.0487,37.634)]\nWarwick                       Road\t[(-122.0279,37.791),(-122.0282,37.787)]\nWarwick                       Road\t[(-122.029,37.777),(-122.0298,37.768)]\nWasatch                       Dr  \t[(-121.962,37.752),(-121.9623,37.756)]\nWashburn                      Dr  \t[(-121.9877,37.739),(-121.9881,37.728)]\nWashington                    Ave \t[(-122.1378,37.897),(-122.1379,37.891)]\nWashington                    Ave \t[(-122.1379,37.959),(-122.1379,37.954)]\nWashington                    Ave \t[(-122.1491,37.154),(-122.149,37.151),(-122.1485,37.144)]\nWashington                    Ave \t[(-122.1536,37.222),(-122.1534,37.217)]\nWashington                    Ave \t[(-122.2912,37.932),(-122.2903,37.931)]\nWashington                    Ave \t[(-122.301,37.919),(-122.3001,37.921)]\nWashington                    Ave \t[(-122.3033,37.9),(-122.3023,37.905)]\nWashington                    Blvd\t[(-121.9418,37.314),(-121.9422,37.314)]\nWashington                    Blvd\t[(-121.9512,37.335),(-121.9522,37.335)]\nWashington                    Blvd\t[(-121.9557,37.328),(-121.9584,37.33)]\nWashington                    St  \t[(-121.8615,37.684),(-121.8596,37.694)]\nWashington                    St  \t[(-122.2355,37.537),(-122.2347,37.532)]\nWashington                    St  \t[(-122.2378,37.553),(-122.237,37.548)]\nWashington                    St  \t[(-122.2405,37.568),(-122.24,37.566)]\nWashington                    St  \t[(-122.2772,37.965),(-122.2769,37.97)]\nWasho                         Dr  \t[(-121.9213,37.117),(-121.9204,37.114)]\nWaterfall Isle                    \t[(-122.2699,37.668),(-122.2694,37.677)]\nWaterford                     Pl  \t[(-122.0472,37.026),(-122.0473,37.021)]\nWatts                         St  \t[(-122.2805,37.28),(-122.2804,37.285)]\nWaverly                       Way \t[(-121.7634,37.94),(-121.762632,37.94055)]\nWebb                          Ave \t[(-122.0975,37.89),(-122.0971,37.894)]\nWebster                       St  \t[(-122.0593,37.39),(-122.0587,37.393)]\nWebster                       St  \t[(-122.2474,37.563),(-122.2461,37.562)]\nWebster                       St  \t[(-122.2595,37.33),(-122.2596,37.337)]\nWebster                       St  \t[(-122.2599,37.305),(-122.2596,37.313)]\nWebster                       St  \t[(-122.2643,37.145),(-122.2642,37.152)]\nWebster                       St  \t[(-122.2691,37.026),(-122.2687,37.033)]\nWebster                       St  \t[(-122.2703,37.005),(-122.2699,37.011)]\nWebster                       St  \t[(-122.2724,37.97),(-122.272,37.977)]\nWebster                       St  \t[(-122.2752,37.925),(-122.2746,37.936)]\nWebster                       St  \t[(-122.276,37.775),(-122.276,37.785)]\nWebster                       St  \t[(-122.276,37.809),(-122.276,37.841)]\nWebster                       St  \t[(-122.276,37.903),(-122.276,37.913)]\nWelch Creek                       \t[(-121.8107,37.349),(-121.8012,37.397)]\nWelch Creek                   Road\t[(-121.7695,37.386),(-121.7737,37.413)]\nWelch Creek                   Road\t[(-121.7895,37.36),(-121.7717,37.218)]\nWelch Creek                   Road\t[(-121.844,37.37),(-121.8289,37.315)]\nWeld                          St  \t[(-122.1827,37.64),(-122.181,37.623)]\nWelk Com                          \t[(-122.036356,37.86914),(-122.036265,37.8618)]\nWellington                    Pl  \t[(-122.0242,37.628),(-122.0227,37.632)]\nWente                         St  \t[(-121.7486,37.661),(-121.7486,37.65715)]\nWentworth                     Ave \t[(-122.1997,37.698),(-122.1986,37.698)]\nWesley                        Ave \t[(-122.2457,37.068),(-122.2446,37.078)]\nWesley                        Ave \t[(-122.2482,37.056),(-122.2476,37.059)]\nWest                          St  \t[(-122.1066,37.48),(-122.108083,37.47375)]\nWest                          St  \t[(-122.2719,37.243),(-122.2717,37.251)]\nWest                          St  \t[(-122.2754,37.136),(-122.2751,37.141)]\nWest                          St  \t[(-122.276,37.124),(-122.2756,37.131)]\nWest Loop                     Road\t[(-122.0576,37.604),(-122.0602,37.586)]\nWestbrook                     Pl  \t[(-121.7787,37.565),(-121.7784,37.564)]\nWestchester                   St  \t[(-122.031,37.135),(-122.0293,37.136)]\nWestern                       Ave \t[(-122.1365,37.049),(-122.1358,37.044)]\nWestern                       Blvd\t[(-122.1004,37.792),(-122.0983,37.778)]\nWestern                       Blvd\t[(-122.1043,37.819),(-122.1023,37.805)]\nWestern Pacific Railroad          \t[(-121.628112,37.31406),(-121.628315,37.31524)]\nWestern Pacific Railroad          \t[(-121.6953,37.215),(-121.6955,37.223)]\nWestern Pacific Railroad          \t[(-121.95686,37.6508),(-121.9548,37.598)]\nWestern Pacific Railroad          \t[(-122.0302,37.963),(-122.0302,37.99)]\nWestern Pacific Railroad Spur     \t[(-122.0394,37.018),(-122.0394,37.961)]\nWestminster                   Dr  \t[(-122.2409,37.406),(-122.2391,37.413)]\nWestover                      Dr  \t[(-122.1985,37.286),(-122.1959,37.302)]\nWestview                      Pl  \t[(-122.2309,37.588),(-122.2303,37.585)]\nWestwood                      Ave \t[(-122.0079,37.454),(-122.008033,37.45)]\nWestwood                      Pl  \t[(-122.0773,37.36),(-122.078,37.362)]\nWhalebone                     Way \t[(-122.0592,37.244),(-122.059,37.242)]\nWhimbrel                      Road\t[(-122.0439,37.832),(-122.0432,37.828)]\nWhimbrel                      Road\t[(-122.045,37.842),(-122.0447,37.839)]\nWhipple                       Road\t[(-122.0532,37.059),(-122.0576,37.059)]\nWhipple                       Road\t[(-122.0676,37.055),(-122.0678,37.057),(-122.0752,37.057)]\nWhispering Pine               Ct  \t[(-122.06,37.222),(-122.0608,37.226)]\nWhitaker                      Ave \t[(-122.2555,37.909),(-122.2554,37.912)]\nWhitecap                      Way \t[(-121.991567,37.28508),(-121.99096,37.28222)]\nWhitlock Creek                    \t[(-121.74683,37.91276),(-121.733107,37)]\nWhitman                       St  \t[(-122.0633,37.399),(-122.063,37.392)]\nWhitman                       St  \t[(-122.072,37.54),(-122.0712,37.53)]\nWhitney                       Pl  \t[(-121.9168,37.703),(-121.9188,37.695)]\nWicks                         Blvd\t[(-122.1596,37.856),(-122.1578,37.833)]\nWicks                         Blvd\t[(-122.163486,37.97094),(-122.1632,37.966),(-122.1624,37.936)]\nWilbeam                       Ave \t[(-122.0759,37.936),(-122.076,37.932)]\nWilbur                        St  \t[(-122.21,37.039),(-122.2093,37.034)]\nWild Current                  Way \t[(-122.1987,37.395),(-122.1993,37.402)]\nWildcat                       Ct  \t[(-121.94693,37.08767),(-121.947193,37.08295)]\nWildcat Canyon                Road\t[(-122.2628,37.035),(-122.264,37.041)]\nWildcat Canyon                Road\t[(-122.2658,37.046),(-122.264,37.041)]\nWildwood                      Ave \t[(-122.2341,37.194),(-122.2328,37.199)]\nWiley                         St  \t[(-122.1553,37.93),(-122.1548,37.921),(-122.1546,37.916)]\nWillard                       Way \t[(-122.0871,37.169),(-122.0843,37.177)]\nWilliams                      St  \t[(-122.1568,37.179),(-122.1577,37.175)]\nWilliams                      St  \t[(-122.1634,37.151),(-122.164,37.148)]\nWilliams                      St  \t[(-122.1649,37.143),(-122.1655,37.141)]\nWillimet                      Way \t[(-122.0964,37.517),(-122.0949,37.493)]\nWillow                        Ave \t[(-122.1012,37.748),(-122.1002,37.754)]\nWillow                        Ave \t[(-122.16,37.961),(-122.1608,37.96)]\nWillow                        St  \t[(-122.0519,37.279),(-122.0517,37.275)]\nWillow                        St  \t[(-122.2459,37.711),(-122.2453,37.72)]\nWillow                        St  \t[(-122.2494,37.661),(-122.2487,37.67)]\nWillow                        St  \t[(-122.2516,37.627),(-122.251,37.635)]\nWillow                        St  \t[(-122.2559,37.567),(-122.2551,37.58)]\nWillow                        St  \t[(-122.2913,37.184),(-122.2901,37.198),(-122.2891,37.212)]\nWillow                        St  \t[(-122.2998,37.077),(-122.2996,37.081)]\nWillow                        Walk\t[(-122.2364,37.572),(-122.23664,37.5678)]\nWillowood                     Dr  \t[(-122.0126,37.498),(-122.0096,37.483)]\nWilson                        Ave \t[(-122.0751,37.073),(-122.0727,37.07)]\nWilson                        Cir \t[(-122.246849,37.81463),(-122.2468,37.815)]\nWinding                       Lane\t[(-121.931438,37.07849),(-121.9306,37.078)]\nWindmill                      Ct  \t[(-121.9163,37.948),(-121.9167,37.944)]\nWindmill                      Lane\t[(-121.8688,37.531),(-121.8678,37.532)]\nWindsor                       Dr  \t[(-122.1125,37.071),(-122.1105,37.048)]\nWindsor                       Dr  \t[(-122.2303,37.673),(-122.2289,37.665)]\nWindsor                       Pl  \t[(-121.7781,37.521),(-121.7781,37.525)]\nWindsor                       Way \t[(-121.7772,37.521),(-121.7762,37.521)]\nWingate                       Way \t[(-122.0652,37.838),(-122.0643,37.846)]\nWinslow                       Ter \t[(-122.059185,37.53928),(-122.058347,37.5363)]\nWinsor                        Ave \t[(-122.2356,37.203),(-122.2351,37.203)]\nWinthrope                     St  \t[(-122.1559,37.694),(-122.1548,37.678)]\nWinton                        Ave \t[(-122.1151,37.533),(-122.1165,37.532)]\nWinton                        Ave \t[(-122.1231,37.533),(-122.1231,37.53)]\nWisconsin                     St  \t[(-122.1927,37.945),(-122.1921,37.94)]\nWisconsin                     St  \t[(-122.1945,37.965),(-122.1939,37.959)]\nWisconsin                     St  \t[(-122.1994,37.017),(-122.1975,37.998),(-122.1971,37.994)]\nWistaria                      Way \t[(-122.2251,37.182),(-122.2249,37.188)]\nWisteria                      Dr  \t[(-121.9362,37.373),(-121.9363,37.367)]\nWisteria                      Dr  \t[(-121.9369,37.398),(-121.9369,37.391)]\nWisteria                      Way \t[(-121.7322,37.118),(-121.7332,37.114)]\nWixon                         Dr  \t[(-121.9613,37.199),(-121.9604,37.18)]\nWolcott                       Dr  \t[(-121.9568,37.393),(-121.9564,37.389)]\nWood                          Dr  \t[(-122.2194,37.28),(-122.2174,37.266)]\nWood                          St  \t[(-121.762,37.839),(-121.7611,37.834)]\nWood                          St  \t[(-122.2993,37.107),(-122.2988,37.113)]\nWood                          St  \t[(-122.302,37.06),(-122.3019,37.066)]\nWoodcrest                     Dr  \t[(-121.9579,37.225),(-121.9589,37.224)]\nWoodhaven                     Way \t[(-122.208,37.417),(-122.2045,37.411)]\nWoodhue                       Ter \t[(-122.046987,37.6207),(-122.047212,37.62529)]\nWoodridge                     Dr  \t[(-122.0631,37.836),(-122.0616,37.82)]\nWoodroe                       Ave \t[(-122.0536,37.855),(-122.0534,37.847)]\nWoodroe                       Ave \t[(-122.0539,37.888),(-122.054,37.891)]\nWoodruff                      Ave \t[(-122.2214,37.03),(-122.2206,37.057)]\nWoolsey                       St  \t[(-122.2553,37.538),(-122.2545,37.538)]\nWooster                       Ct  \t[(-122.023499,37.15118),(-122.0237,37.147)]\nWorth                         St  \t[(-122.1903,37.362),(-122.1903,37.365)]\nWorth                         St  \t[(-122.1915,37.378),(-122.1916,37.379)]\nWp Railroad                       \t[(-121.7675,37.848),(-121.765632,37.85375),(-121.7636,37.86)]\nWp Railroad                       \t[(-121.7864,37.791),(-121.7761,37.822)]\nWp Railroad                       \t[(-121.813721,37.75618),(-121.8049,37.765)]\nWp Railroad                       \t[(-121.8346,37.733),(-121.8259,37.743)]\nWp Railroad                       \t[(-121.874759,37.65728),(-121.8727,37.665)]\nWp Railroad                       \t[(-121.8804,37.27),(-121.8806,37.272),(-121.88678,37.36528)]\nWp Railroad                       \t[(-121.882149,37.57458),(-121.8813,37.585)]\nWp Railroad                       \t[(-121.8861,37.94),(-121.8847,37.952)]\nWp Railroad                       \t[(-121.9304,37.856),(-121.9268,37.789)]\nWp Railroad                       \t[(-121.958612,37.67823),(-121.9581,37.67)]\nWp Railroad                       \t[(-122.0223,37.959),(-122.0211,37.949)]\nWp Railroad                       \t[(-122.0476,37.214),(-122.0473,37.196)]\nWp Railroad                       \t[(-122.0755,37.589),(-122.0731,37.56)]\nWp Railroad                       \t[(-122.1877,37.466),(-122.1834,37.43)]\nWp Railroad                       \t[(-122.2043,37.608),(-122.203628,37.60237)]\nWp Railroad                       \t[(-122.2145,37.694),(-122.2137,37.688)]\nWp Railroad                       \t[(-122.2342,37.806),(-122.2295,37.777)]\nWp Railroad                       \t[(-122.2434,37.865),(-122.241,37.851)]\nWp Railroad                       \t[(-122.254,37.902),(-122.2506,37.891)]\nWp Railroad                       \t[(-122.262,37.923),(-122.2607,37.921)]\nWp Railroad                       \t[(-122.2693,37.949),(-122.2682,37.945)]\nWrenn                         St  \t[(-122.2063,37.117),(-122.2056,37.117)]\nWyndham                       Pl  \t[(-122.027,37.724),(-122.0286,37.73)]\nXavier                        Way \t[(-121.7458,37.778),(-121.7459,37.77)]\nXavier Common                     \t[(-122.049697,37.64509),(-122.050346,37.64313)]\nYale                          Ave \t[(-122.1205,37.913),(-122.1205,37.907)]\nYale                          Way \t[(-121.9443,37.098),(-121.9482,37.092)]\nYampa                         Way \t[(-121.9117,37.641),(-121.9109,37.644)]\nYellowstone Park              Dr  \t[(-121.9686,37.111),(-121.9705,37.117)]\nYerba Buena                   Ave \t[(-122.2789,37.301),(-122.2843,37.29)]\nYerba Buena                   Pl  \t[(-121.9602,37.678),(-121.9595,37.683)]\nYerba Buena                   St  \t[(-121.960541,37.6819),(-121.9602,37.678)]\nYgnacio                       Ave \t[(-122.2103,37.756),(-122.2098,37.754)]\nYolo                          Ave \t[(-122.274,37.85),(-122.273,37.855)]\nYork                          Dr  \t[(-121.9212,37.098),(-121.9227,37.104)]\nYork                          Dr  \t[(-122.2415,37.283),(-122.2406,37.261)]\nYorktown                      Road\t[(-121.9507,37.173),(-121.9513,37.172)]\nYosemite                      Pl  \t[(-121.8019,37.853),(-121.8024,37.855)]\nYosemite                      Road\t[(-122.2767,37.968),(-122.2757,37.958)]\nYosemite                      Way \t[(-122.1108,37.4803),(-122.109445,37.48415)]\nZacate                        Ave \t[(-121.9575,37.646),(-121.9567,37.64)]\nZacate                        Ave \t[(-121.9594,37.662),(-121.9589,37.654)]\nZapata                        Ct  \t[(-121.9456,37.171),(-121.94565,37.1705)]\nZapotec                       Dr  \t[(-121.9108,37.899),(-121.9097,37.898)]\nZephyr                        Ave \t[(-122.0572,37.107),(-122.0556,37.107)]\nZephyr                        Ave \t[(-122.0584,37.107),(-122.0609,37.107)]\nZiegler                       Ave \t[(-122.1258,37.483),(-122.125,37.499)]\nZircon                        Ter \t[(-122.051254,37.64038),(-122.051126,37.63696)]\n100th                         Ave \t[(-122.1657,37.429),(-122.1647,37.432)]\n100th                         Ave \t[(-122.1789,37.364),(-122.1785,37.367)]\n101st                         Ave \t[(-122.1595,37.438),(-122.1583,37.441)]\n104th                         Ave \t[(-122.1583,37.417),(-122.1573,37.423)]\n104th                         Ave \t[(-122.1612,37.411),(-122.1587,37.417)]\n104th                         Ave \t[(-122.1697,37.375),(-122.1681,37.383)]\n105th                         Ave \t[(-122.1774,37.325),(-122.1771,37.327)]\n106th                         Ave \t[(-122.158,37.404),(-122.156,37.409)]\n107th                         Ave \t[(-122.1555,37.403),(-122.1531,37.41)]\n108th                         Ave \t[(-122.1474,37.419),(-122.1468,37.423)]\n10th                          St  \t[(-122.0211,37.969),(-122.0198,37.958)]\n10th                          St  \t[(-122.0603,37.402),(-122.0593,37.39)]\n10th                          St  \t[(-122.2541,37.924),(-122.2537,37.92)]\n10th                          St  \t[(-122.2553,37.935),(-122.2545,37.927)]\n10th                          St  \t[(-122.2675,37.002),(-122.2687,37.007)]\n10th                          St  \t[(-122.2886,37.57),(-122.2883,37.56)]\n10th                          St  \t[(-122.2916,37.662),(-122.291,37.644)]\n10th                          St  \t[(-122.2918,37.084),(-122.292,37.085)]\n10th                          St  \t[(-122.2945,37.75),(-122.2939,37.732)]\n11th                          Ave \t[(-122.2493,37.91),(-122.2483,37.916)]\n11th                          St  \t[(-122.0206,37.952),(-122.0192,37.941),(-122.0185,37.934)]\n120 Canal                         \t[(-121.587482,37.88204),(-121.587833,37.8825)]\n12th                          Ave \t[(-122.2396,37.958),(-122.2385,37.965)]\n12th                          St  \t[(-121.896,37.194),(-121.8932,37.194)]\n12th                          St  \t[(-121.9026,37.204),(-121.900288,37.19771),(-121.896959,37.19973)]\n12th                          St  \t[(-122.2163,37.718),(-122.2151,37.712)]\n12th                          St  \t[(-122.2469,37.891),(-122.2459,37.882)]\n12th                          St  \t[(-122.2566,37.974),(-122.256,37.971)]\n12th                          St  \t[(-122.2611,37.996),(-122.262,37.998)]\n12th                          St  \t[(-122.2644,37.006),(-122.2655,37.011)]\n12th                          St  \t[(-122.2807,37.073),(-122.2796,37.068)]\n12th                          St  \t[(-122.2889,37.094),(-122.29,37.094)]\n12th                          St  \t[(-122.2926,37.103),(-122.2937,37.102)]\n12th                          St  \t[(-122.2943,37.103),(-122.2955,37.109),(-122.2964,37.113)]\n136th                         Ave \t[(-122.1399,37.158),(-122.1371,37.18)]\n137th                         Ave \t[(-122.1366,37.176),(-122.1351,37.18)]\n13th                          Ave \t[(-122.235,37.984),(-122.2345,37.99)]\n13th                          Ave \t[(-122.2396,37.944),(-122.2387,37.95)]\n13th                          St  \t[(-122.0242,37.962),(-122.0231,37.954)]\n13th                          St  \t[(-122.0565,37.386),(-122.0554,37.374)]\n13th                          St  \t[(-122.2628,37.009),(-122.2639,37.014)]\n140th                         Ave \t[(-122.1386,37.13),(-122.1374,37.14)]\n141st                         Ave \t[(-122.1368,37.136),(-122.1355,37.147)]\n142nd                         Ave \t[(-122.1348,37.142),(-122.1336,37.153)]\n143rd                         Ave \t[(-122.1408,37.077),(-122.1397,37.085)]\n145th                         Ave \t[(-122.1368,37.082),(-122.1359,37.09)]\n148th                         Ave \t[(-122.1284,37.119),(-122.1277,37.122)]\n14th                          Ave \t[(-122.2244,37.028),(-122.2242,37.036)]\n14th                          Ave \t[(-122.2245,37.036),(-122.2238,37.062)]\n14th                          Ave \t[(-122.2285,37.981),(-122.2283,37.988)]\n14th                          Ave \t[(-122.232,37.965),(-122.2293,37.975)]\n14th                          Ave \t[(-122.2342,37.957),(-122.2332,37.961)]\n14th                          Ave \t[(-122.2357,37.953),(-122.2354,37.953)]\n14th                          Ave \t[(-122.2408,37.923),(-122.2407,37.925)]\n14th                          Ave \t[(-122.2426,37.911),(-122.2419,37.916)]\n14th                          St  \t[(-122.0238,37.949),(-122.0226,37.938)]\n14th                          St  \t[(-122.1178,37.983),(-122.116,37.971)]\n14th                          St  \t[(-122.1212,37.007),(-122.1206,37.002)]\n14th                          St  \t[(-122.1241,37.027),(-122.1235,37.023),(-122.1226,37.017)]\n14th                          St  \t[(-122.1316,37.081),(-122.1287,37.06)]\n14th                          St  \t[(-122.1378,37.124),(-122.1376,37.123)]\n14th                          St  \t[(-122.141,37.147),(-122.1397,37.138)]\n14th                          St  \t[(-122.1457,37.181),(-122.145,37.176)]\n14th                          St  \t[(-122.1562,37.262),(-122.1557,37.253)]\n14th                          St  \t[(-122.1626,37.348),(-122.1621,37.344)]\n14th                          St  \t[(-122.1655,37.387),(-122.165101,37.38001)]\n14th                          St  \t[(-122.1682,37.422),(-122.168,37.419)]\n14th                          St  \t[(-122.1709,37.459),(-122.1704,37.453)]\n14th                          St  \t[(-122.1761,37.529),(-122.1757,37.524),(-122.1754,37.52)]\n14th                          St  \t[(-122.1771,37.544),(-122.1768,37.54)]\n14th                          St  \t[(-122.1845,37.581),(-122.1839,37.579)]\n14th                          St  \t[(-122.1945,37.629),(-122.1936,37.625)]\n14th                          St  \t[(-122.2128,37.717),(-122.2118,37.713)]\n14th                          St  \t[(-122.2288,37.798),(-122.228,37.792)]\n14th                          St  \t[(-122.2419,37.877),(-122.2408,37.871)]\n14th                          St  \t[(-122.2659,37.03),(-122.2671,37.035)]\n14th                          St  \t[(-122.2755,37.068),(-122.2741,37.063)]\n14th                          St  \t[(-122.277,37.073),(-122.2765,37.071)]\n14th                          St  \t[(-122.299,37.147),(-122.3,37.148)]\n150th                         Ave \t[(-122.1241,37.085),(-122.123984,37.08583)]\n150th                         Ave \t[(-122.1266,37.065),(-122.1258,37.071)]\n152nd                         Ave \t[(-122.1218,37.072),(-122.1215,37.075)]\n15th                          St  \t[(-122.0564,37.416),(-122.056,37.411)]\n15th                          St  \t[(-122.2264,37.794),(-122.2258,37.791),(-122.2251,37.789)]\n15th                          St  \t[(-122.241,37.885),(-122.2401,37.879)]\n15th                          St  \t[(-122.2472,37.923),(-122.2464,37.915)]\n15th                          St  \t[(-122.2534,37.976),(-122.2525,37.969)]\n163rd                         Ave \t[(-122.1108,37.985),(-122.1096,37.995)]\n164th                         Ave \t[(-122.1068,37.993),(-122.1069,37.998)]\n164th                         Ave \t[(-122.1101,37.964),(-122.1096,37.968)]\n166th                         Ave \t[(-122.1008,37.99),(-122.1006,37.997)]\n167th                         Ave \t[(-122.1012,37.966),(-122.1006,37.973)]\n168th                         Ave \t[(-122.1046,37.934),(-122.1041,37.938)]\n16th                          Ave \t[(-122.2391,37.924),(-122.2387,37.928)]\n16th                          Ave \t[(-122.2422,37.892),(-122.2418,37.896)]\n16th                          Ave \t[(-122.2438,37.874),(-122.2438,37.876)]\n16th                          St  \t[(-122.054,37.414),(-122.0534,37.405)]\n16th                          St  \t[(-122.231,37.837),(-122.2306,37.834)]\n16th                          St  \t[(-122.2699,37.067),(-122.2713,37.069)]\n16th                          St  \t[(-122.2923,37.129),(-122.2926,37.132)]\n170th                         Ave \t[(-122.1029,37.924),(-122.1025,37.93)]\n170th                         Ave \t[(-122.1083,37.891),(-122.1075,37.893)]\n171st                         Ave \t[(-122.1042,37.908),(-122.1031,37.916)]\n173rd                         Ave \t[(-122.0984,37.935),(-122.0976,37.936)]\n17th                          Ave \t[(-122.238,37.918),(-122.2377,37.921)]\n17th                          St  \t[(-122.1947,37.648),(-122.1934,37.637)]\n17th                          St  \t[(-122.2385,37.895),(-122.2375,37.889)]\n17th                          St  \t[(-122.2514,37.99),(-122.2507,37.982)]\n17th                          St  \t[(-122.2607,37.043),(-122.2619,37.047)]\n17th                          St  \t[(-122.2642,37.057),(-122.2655,37.059)]\n17th                          St  \t[(-122.2743,37.087),(-122.2729,37.082)]\n17th                          St  \t[(-122.2898,37.132),(-122.29,37.132)]\n17th                          St  \t[(-122.2938,37.149),(-122.295,37.155)]\n18th                          Ave \t[(-122.2385,37.895),(-122.2381,37.899)]\n18th                          St  \t[(-122.2205,37.811),(-122.219,37.806)]\n18th                          St  \t[(-122.2424,37.924),(-122.2416,37.918)]\n18th                          St  \t[(-122.2461,37.957),(-122.2453,37.95)]\n18th                          St  \t[(-122.254,37.012),(-122.2535,37.01)]\n18th                          St  \t[(-122.2775,37.106),(-122.2762,37.101)]\n18th                          St  \t[(-122.2775,37.106),(-122.2794,37.109)]\n18th                          St  \t[(-122.2803,37.116),(-122.2814,37.119)]\n19th                          Ave \t[(-122.2355,37.91),(-122.2351,37.914),(-122.2344,37.922)]\n19th                          Ave \t[(-122.2366,37.897),(-122.2359,37.905)]\n19th                          Ave \t[(-122.2386,37.877),(-122.2382,37.881)]\n19th                          Ave \t[(-122.2394,37.868),(-122.239,37.873)]\n19th                          Ave \t[(-122.2408,37.854),(-122.2406,37.856)]\n19th                          St  \t[(-122.2488,37.994),(-122.2479,37.986)]\n19th                          St  \t[(-122.2672,37.079),(-122.2685,37.084)]\n1st                           Ave \t[(-122.2567,37.992),(-122.2558,37.999)]\n1st                           St  \t[(-121.7401,37.018),(-121.7401,37.024)]\n1st                           St  \t[(-121.7402,37.015),(-121.7401,37.018)]\n1st                           St  \t[(-121.7425,37.976),(-121.7417,37.986)]\n1st                           St  \t[(-121.75508,37.89294),(-121.753581,37.90031)]\n1st                           St  \t[(-121.7716,37.805),(-121.7702,37.809)]\n1st                           St  \t[(-121.8728,37.596),(-121.8738,37.587)]\n20th                          Ave \t[(-122.238,37.867),(-122.2376,37.871)]\n20th                          St  \t[(-122.2327,37.887),(-122.2308,37.876)]\n20th                          St  \t[(-122.2433,37.963),(-122.2424,37.955)]\n20th                          St  \t[(-122.2468,37.994),(-122.2459,37.985)]\n20th                          St  \t[(-122.2912,37.163),(-122.2926,37.17)]\n21st                          Ave \t[(-122.2341,37.89),(-122.2337,37.893)]\n21st                          Ave \t[(-122.2368,37.859),(-122.2365,37.865)]\n21st                          Ave \t[(-122.2385,37.843),(-122.238,37.847)]\n21st                          St  \t[(-122.243,37.975),(-122.2423,37.97)]\n21st                          St  \t[(-122.2624,37.099),(-122.2643,37.102)]\n21st                          St  \t[(-122.2688,37.109),(-122.2719,37.114)]\n22nd                          Ave \t[(-122.2343,37.871),(-122.2338,37.875)]\n22nd                          St  \t[(-122.2227,37.854),(-122.222,37.851)]\n22nd                          St  \t[(-122.265,37.114),(-122.2655,37.114)]\n22nd                          St  \t[(-122.2756,37.131),(-122.2769,37.136)]\n23rd                          Ave \t[(-122.2272,37.914),(-122.2266,37.92)]\n23rd                          Ave \t[(-122.2298,37.892),(-122.2298,37.894)]\n23rd                          Ave \t[(-122.2339,37.841),(-122.233,37.849)]\n23rd                          Ave \t[(-122.2357,37.824),(-122.2356,37.825)]\n23rd                          Ave \t[(-122.2359,37.817),(-122.236,37.82)]\n23rd                          St  \t[(-122.2258,37.878),(-122.2252,37.875)]\n23rd                          St  \t[(-122.228,37.896),(-122.2271,37.89)]\n23rd                          St  \t[(-122.2404,37.982),(-122.2395,37.974)]\n23rd                          St  \t[(-122.2648,37.124),(-122.2658,37.125)]\n23rd Av                       Ovps\t[(-122.2356,37.768),(-122.235,37.754)]\n23rd Av                       Ovps\t[(-122.236,37.783),(-122.2356,37.768)]\n24th                          Ave \t[(-122.2285,37.873),(-122.2277,37.88),(-122.2271,37.89)]\n24th                          St  \t[(-122.233,37.936),(-122.2309,37.923)]\n24th                          St  \t[(-122.2352,37.95),(-122.235,37.948)]\n24th                          St  \t[(-122.2868,37.183),(-122.2877,37.186)]\n24th                          St  \t[(-122.2901,37.198),(-122.2914,37.204)]\n25th                          Ave \t[(-122.2222,37.94),(-122.222,37.942)]\n26th                          Ave \t[(-122.2252,37.875),(-122.2244,37.884)]\n26th                          St  \t[(-122.2294,37.939),(-122.2289,37.936)]\n26th                          St  \t[(-122.2739,37.171),(-122.2749,37.172)]\n26th                          St  \t[(-122.2791,37.183),(-122.28,37.185)]\n27th                          Ave \t[(-122.234,37.773),(-122.2335,37.778)]\n27th                          St  \t[(-122.2224,37.918),(-122.2216,37.912)]\n27th                          St  \t[(-122.2243,37.928),(-122.2231,37.921)]\n27th                          St  \t[(-122.2287,37.945),(-122.2278,37.939)]\n27th                          St  \t[(-122.2625,37.151),(-122.2626,37.154)]\n27th                          St  \t[(-122.2751,37.181),(-122.276,37.18)]\n28th                          St  \t[(-122.2356,37.999),(-122.235,37.994)]\n28th                          St  \t[(-122.2671,37.176),(-122.2684,37.179)]\n28th                          St  \t[(-122.2754,37.192),(-122.2764,37.193)]\n29th                          St  \t[(-122.2633,37.179),(-122.264,37.181)]\n29th                          St  \t[(-122.266,37.183),(-122.2668,37.184)]\n29th                          St  \t[(-122.2693,37.192),(-122.27,37.194)]\n29th                          St  \t[(-122.2707,37.189),(-122.2733,37.194)]\n29th Av                       Ovps\t[(-122.2323,37.748),(-122.2321,37.752)]\n2nd                           St  \t[(-121.9787,37.76),(-121.9775,37.757)]\n2nd                           St  \t[(-121.9825,37.768),(-121.9806,37.763)]\n2nd                           St  \t[(-121.986342,37.77609),(-121.9854,37.774),(-121.9842,37.772)]\n2nd                           St  \t[(-122.0522,37.685),(-122.05205,37.6854)]\n2nd                           St  \t[(-122.0553,37.679),(-122.0539,37.682)]\n2nd                           St  \t[(-122.0697,37.696),(-122.0674,37.688)]\n2nd                           St  \t[(-122.2781,37.975),(-122.2792,37.979)]\n30th                          St  \t[(-122.2789,37.218),(-122.2801,37.22)]\n31st                          Ave \t[(-122.2259,37.771),(-122.2254,37.779)]\n31st                          St  \t[(-122.2252,37.982),(-122.224,37.979)]\n31st                          St  \t[(-122.2323,37.995),(-122.2303,37.992)]\n31st                          St  \t[(-122.2728,37.212),(-122.2756,37.217)]\n32nd                          St  \t[(-122.225,37.99),(-122.2244,37.988)]\n32nd                          St  \t[(-122.2754,37.227),(-122.2765,37.228)]\n32nd                          St  \t[(-122.2839,37.242),(-122.285,37.239)]\n32nd                          St  \t[(-122.2893,37.23),(-122.2901,37.229)]\n33rd                          Ave \t[(-122.2235,37.776),(-122.2225,37.798)]\n34th                          Ave \t[(-122.2205,37.811),(-122.2196,37.829)]\n34th                          Ave \t[(-122.2232,37.755),(-122.2225,37.765)]\n34th                          Ave \t[(-122.2251,37.728),(-122.2246,37.737)]\n34th                          St  \t[(-122.2637,37.223),(-122.2647,37.225)]\n35th                          Ave \t[(-122.1914,37.983),(-122.1909,37.988)]\n35th                          Ave \t[(-122.2005,37.929),(-122.1996,37.935)]\n35th                          Ave \t[(-122.214,37.85),(-122.2138,37.852)]\n35th                          Ave \t[(-122.2243,37.724),(-122.2238,37.731)]\n35th                          St  \t[(-122.2685,37.243),(-122.2692,37.244)]\n35th                          St  \t[(-122.2746,37.257),(-122.2779,37.266)]\n35th                          St  \t[(-122.2783,37.266),(-122.2792,37.269)]\n36th                          Ave \t[(-122.2196,37.778),(-122.218,37.802)]\n36th                          Ave \t[(-122.2214,37.746),(-122.2206,37.755)]\n36th                          Ave \t[(-122.2221,37.737),(-122.222,37.738)]\n36th                          Ave \t[(-122.2233,37.721),(-122.223,37.725)]\n36th                          Ave \t[(-122.22414,37.70988),(-122.2238,37.716)]\n36th                          St  \t[(-122.228,37.022),(-122.227,37.02)]\n36th                          St  \t[(-122.2779,37.273),(-122.279,37.277)]\n37th                          Ave \t[(-122.2211,37.732),(-122.221,37.733)]\n37th                          St  \t[(-122.2613,37.249),(-122.265,37.257)]\n37th                          St  \t[(-122.265,37.26),(-122.2663,37.271)]\n37th                          St  \t[(-122.2743,37.274),(-122.2768,37.278)]\n38th                          Ave \t[(-122.1963,37.907),(-122.1954,37.912)]\n38th                          Ave \t[(-122.2202,37.729),(-122.2197,37.734)]\n38th                          St  \t[(-122.2204,37.029),(-122.2199,37.028)]\n38th                          St  \t[(-122.2571,37.266),(-122.2583,37.268)]\n38th                          St  \t[(-122.2587,37.268),(-122.2597,37.269)]\n39th                          Ave \t[(-122.2054,37.85),(-122.205,37.852)]\n39th                          Ave \t[(-122.2163,37.763),(-122.216,37.768)]\n3rd                           St  \t[(-121.892355,37.95759),(-121.8908,37.957)]\n3rd                           St  \t[(-122.2872,37.803),(-122.287191,37.8084)]\n3rd                           St  \t[(-122.2873,37.767),(-122.2873,37.775)]\n3rd                           St  \t[(-122.2874,37.739),(-122.2874,37.748)]\n3rd                           St  \t[(-122.2894,37.019),(-122.2905,37.021)]\n3rd                           St  \t[(-122.2972,37.034),(-122.2982,37.036)]\n40th                          Ave \t[(-122.2156,37.76),(-122.2152,37.764)]\n40th                          St  \t[(-122.2585,37.286),(-122.2594,37.288)]\n41st                          Ave \t[(-122.214,37.75),(-122.2135,37.756)]\n41st                          Ave \t[(-122.2153,37.735),(-122.2151,37.738)]\n41st                          Ave \t[(-122.217,37.719),(-122.2169,37.721)]\n41st                          St  \t[(-122.2562,37.29),(-122.2571,37.291)]\n41st                          St  \t[(-122.2655,37.305),(-122.2653,37.314)]\n41st                          St  \t[(-122.2671,37.308),(-122.2677,37.308)]\n41st                          St  \t[(-122.2768,37.324),(-122.2773,37.325)]\n42nd                          Ave \t[(-122.2104,37.767),(-122.2097,37.773)]\n42nd                          St  \t[(-122.2755,37.33),(-122.2765,37.332)]\n43rd                          St  \t[(-122.2673,37.325),(-122.2698,37.329)]\n43rd                          St  \t[(-122.2763,37.338),(-122.2768,37.339)]\n45th                          Ave \t[(-122.2088,37.749),(-122.208,37.758)]\n45th                          Ave \t[(-122.2118,37.713),(-122.2109,37.724)]\n45th                          St  \t[(-122.2814,37.341),(-122.2825,37.339)]\n46th                          Ave \t[(-122.214,37.685),(-122.2137,37.688)]\n46th                          St  \t[(-122.2669,37.345),(-122.2694,37.349)]\n47th                          Ave \t[(-122.2086,37.719),(-122.2082,37.723)]\n48th                          Ave \t[(-122.2059,37.736),(-122.2052,37.745)]\n48th                          St  \t[(-122.2633,37.354),(-122.2643,37.356)]\n48th                          St  \t[(-122.2782,37.373),(-122.2782,37.37224)]\n49th                          St  \t[(-122.2545,37.348),(-122.2552,37.349)]\n4th                           Ave \t[(-122.2534,37.976),(-122.2524,37.983)]\n4th                           St  \t[(-121.7778,37.76),(-121.7753,37.769),(-121.7741,37.772)]\n4th                           St  \t[(-122.0775,37.831),(-122.0772,37.824)]\n4th                           St  \t[(-122.2773,37.988),(-122.2784,37.993)]\n4th                           St  \t[(-122.2853,37.738),(-122.2854,37.742)]\n4th                           St  \t[(-122.3005,37.885),(-122.3006,37.871)]\n50th                          Ave \t[(-122.2059,37.718),(-122.2054,37.724)]\n50th                          Ave \t[(-122.2108,37.663),(-122.2096,37.675)]\n50th                          Ave \t[(-122.2135,37.638),(-122.2123,37.65)]\n51st                          Ave \t[(-122.2103,37.658),(-122.21,37.661)]\n52nd                          Ave \t[(-122.2096,37.653),(-122.2092,37.657)]\n52nd                          St  \t[(-122.268,37.376),(-122.2683,37.376)]\n52nd                          St  \t[(-122.2706,37.372),(-122.2728,37.369)]\n53rd                          Ave \t[(-122.2075,37.659),(-122.205,37.679)]\n54th                          Ave \t[(-122.2076,37.649),(-122.2068,37.654)]\n54th                          St  \t[(-122.2733,37.386),(-122.275,37.384)]\n55th                          Ave \t[(-122.1886,37.768),(-122.1883,37.77)]\n55th                          Ave \t[(-122.197,37.709),(-122.1963,37.714)]\n55th                          Ave \t[(-122.1996,37.689),(-122.1991,37.695)]\n55th                          St  \t[(-122.2641,37.408),(-122.2667,37.404)]\n55th                          St  \t[(-122.2824,37.386),(-122.2834,37.384)]\n56th                          St  \t[(-122.2692,37.409),(-122.2695,37.409)]\n56th                          St  \t[(-122.2735,37.404),(-122.2743,37.403)]\n57th                          Ave \t[(-122.1933,37.711),(-122.1928,37.721)]\n57th                          Ave \t[(-122.1969,37.686),(-122.1964,37.689)]\n57th                          St  \t[(-122.2609,37.433),(-122.262,37.435)]\n57th                          St  \t[(-122.2661,37.428),(-122.2671,37.426)]\n57th                          St  \t[(-122.274,37.418),(-122.2759,37.417)]\n57th                          St  \t[(-122.2798,37.409),(-122.2822,37.405)]\n58th                          Ave \t[(-122.1876,37.749),(-122.1867,37.755)]\n58th                          St  \t[(-122.2663,37.437),(-122.2673,37.435)]\n58th                          St  \t[(-122.2701,37.437),(-122.272,37.435)]\n59th                          St  \t[(-122.2587,37.456),(-122.2608,37.454)]\n59th                          St  \t[(-122.2665,37.445),(-122.2675,37.445)]\n59th                          St  \t[(-122.2863,37.42),(-122.2872,37.418)]\n5th                           Ave \t[(-122.2516,37.975),(-122.2507,37.982)]\n5th                           St  \t[(-121.7638,37.795),(-121.7633,37.795)]\n5th                           St  \t[(-121.7713,37.772),(-121.7701,37.775)]\n5th                           St  \t[(-121.7737,37.765),(-121.7727,37.769)]\n5th                           St  \t[(-121.7766,37.757),(-121.7751,37.761)]\n5th                           St  \t[(-121.9082,37.114),(-121.9045,37.113)]\n5th                           St  \t[(-122.0235,37.054),(-122.0224,37.045)]\n5th                           St  \t[(-122.071,37.754),(-122.0707,37.749)]\n5th                           St  \t[(-122.0732,37.8),(-122.0725,37.789)]\n5th                           St  \t[(-122.2732,37.981),(-122.2744,37.986)]\n5th                           St  \t[(-122.2756,37.991),(-122.2768,37.995)]\n5th                           St  \t[(-122.278,37),(-122.2792,37.005),(-122.2803,37.009)]\n5th                           St  \t[(-122.2815,37.766),(-122.2814,37.777)]\n5th                           St  \t[(-122.2816,37.747),(-122.2816,37.757)]\n5th                           St  \t[(-122.2901,37.036),(-122.292,37.04)]\n5th                           St  \t[(-122.2933,37.041),(-122.2946,37.045)]\n5th                           St  \t[(-122.296,37.615),(-122.2953,37.598)]\n5th                           St  \t[(-122.2977,37.665),(-122.2972,37.651),(-122.2966,37.633)]\n5th                           St  \t[(-122.2979,37.866),(-122.2979,37.87)]\n5th                           St  \t[(-122.3011,37.775),(-122.3008,37.763)]\n60th                          Ave \t[(-122.1881,37.712),(-122.1868,37.722)]\n60th                          St  \t[(-122.2606,37.469),(-122.2615,37.466)]\n60th                          St  \t[(-122.2816,37.435),(-122.2831,37.432)]\n61st                          Ave \t[(-122.1973,37.643),(-122.1962,37.65)]\n61st                          St  \t[(-122.2861,37.436),(-122.2877,37.433)]\n62nd                          Ave \t[(-122.1794,37.751),(-122.1787,37.755)]\n62nd                          Ave \t[(-122.1916,37.67),(-122.1911,37.673)]\n62nd                          Ave \t[(-122.1992,37.617),(-122.1982,37.623)]\n62nd                          St  \t[(-122.254,37.494),(-122.2563,37.491)]\n62nd                          St  \t[(-122.268,37.477),(-122.2685,37.476)]\n62nd                          St  \t[(-122.2755,37.466),(-122.2749,37.467)]\n62nd                          St  \t[(-122.2761,37.465),(-122.276639,37.4632),(-122.2767,37.463)]\n63rd                          Ave \t[(-122.1853,37.7),(-122.1844,37.706)]\n63rd                          St  \t[(-122.2563,37.495),(-122.2576,37.493),(-122.2596,37.49)]\n63rd                          St  \t[(-122.2604,37.49),(-122.2621,37.487)]\n63rd                          St  \t[(-122.2622,37.492),(-122.2651,37.489)]\n63rd                          St  \t[(-122.2708,37.481),(-122.269,37.484)]\n64th                          Ave \t[(-122.1758,37.76),(-122.1753,37.767)]\n64th                          Ave \t[(-122.188,37.673),(-122.1852,37.691)]\n64th                          Ave \t[(-122.1921,37.645),(-122.1911,37.652)]\n64th                          St  \t[(-122.2869,37.46),(-122.2884,37.455)]\n64th                          St  \t[(-122.2945,37.441),(-122.2962,37.439)]\n64th Av                       Pl  \t[(-122.1784,37.734),(-122.1767,37.744)]\n65th                          St  \t[(-122.2653,37.505),(-122.2661,37.504)]\n65th                          St  \t[(-122.2847,37.481),(-122.2874,37.476)]\n66th                          Ave \t[(-122.2013,37.556),(-122.1997,37.564)]\n66th                          Ave \t[(-122.2054,37.542),(-122.2042,37.546)]\n67th                          St  \t[(-122.2828,37.504),(-122.283232,37.5031)]\n67th                          St  \t[(-122.28407,37.50135),(-122.2852,37.499)]\n67th                          St  \t[(-122.2887,37.495),(-122.2913,37.49)]\n69th                          Ave \t[(-122.1927,37.582),(-122.1919,37.587)]\n69th                          Ave \t[(-122.1959,37.56),(-122.1954,37.563)]\n6th                           St  \t[(-121.7634,37.785),(-121.7624,37.789)]\n6th                           St  \t[(-122.0219,37.032),(-122.0208,37.022)]\n6th                           St  \t[(-122.2691,37.975),(-122.2704,37.98)]\n6th                           St  \t[(-122.274,37.993),(-122.2752,37.998)]\n6th                           St  \t[(-122.2965,37.668),(-122.296,37.653)]\n6th                           St  \t[(-122.2982,37.724),(-122.2977,37.705)]\n6th                           St  \t[(-122.3012,37.813),(-122.3006,37.795)]\n6th                           St  \t[(-122.3016,37.831),(-122.3016,37.826)]\n70 Canal                          \t[(-121.576176,37.91958),(-121.57645,37.91996)]\n70th                          Ave \t[(-122.187,37.611),(-122.1862,37.616)]\n71st                          Ave \t[(-122.1908,37.576),(-122.189,37.588)]\n71st                          Ave \t[(-122.195,37.548),(-122.1944,37.553)]\n73rd                          Ave \t[(-122.1746,37.664),(-122.1724,37.68)]\n73rd                          Ave \t[(-122.1768,37.651),(-122.1761,37.655)]\n73rd                          Ave \t[(-122.1802,37.628),(-122.1794,37.633)]\n73rd                          Ave \t[(-122.1837,37.606),(-122.1829,37.611)]\n73rd                          Ave \t[(-122.1915,37.554),(-122.1897,37.565)]\n74th                          Ave \t[(-122.175,37.653),(-122.174,37.66)]\n77th                          Ave \t[(-122.17,37.656),(-122.1682,37.668)]\n78th                          Ave \t[(-122.1697,37.652),(-122.1674,37.663)]\n78th                          Ave \t[(-122.1791,37.593),(-122.1784,37.597)]\n79th                          Ave \t[(-122.1686,37.639),(-122.1662,37.65)]\n7th                           Ave \t[(-122.2413,37.015),(-122.2406,37.021)]\n7th                           Ave \t[(-122.2459,37.985),(-122.2449,37.991)]\n7th                           Ave \t[(-122.2528,37.94),(-122.2518,37.947)]\n7th                           St  \t[(-121.7606,37.79),(-121.7597,37.798)]\n7th                           St  \t[(-121.7618,37.779),(-121.7615,37.783)]\n7th                           St  \t[(-122.0047,37.916),(-122.0041,37.92)]\n7th                           St  \t[(-122.0168,37.978),(-122.0149,37.974)]\n7th                           St  \t[(-122.0674,37.771),(-122.0667,37.761)]\n7th                           St  \t[(-122.0693,37.803),(-122.0687,37.793)]\n7th                           St  \t[(-122.2362,37.753),(-122.235,37.754)]\n7th                           St  \t[(-122.2759,37.009),(-122.2771,37.014)]\n7th                           St  \t[(-122.2864,37.041),(-122.2875,37.043)]\n7th                           St  \t[(-122.2903,37.511),(-122.2902,37.508)]\n7th                           St  \t[(-122.2916,37.052),(-122.2926,37.055)]\n7th                           St  \t[(-122.2918,37.562),(-122.2916,37.553)]\n7th                           St  \t[(-122.2945,37.635),(-122.2938,37.62)]\n7th                           St  \t[(-122.2996,37.797),(-122.299,37.779),(-122.2985,37.767)]\n7th                           St  \t[(-122.3215,37.099),(-122.326,37.102)]\n80th                          Ave \t[(-122.1807,37.563),(-122.1793,37.57)]\n81st                          Ave \t[(-122.1912,37.493),(-122.191,37.495)]\n82nd                          Ave \t[(-122.1659,37.614),(-122.1653,37.619)]\n82nd                          Ave \t[(-122.1695,37.596),(-122.1681,37.603)]\n82nd                          Ave \t[(-122.1764,37.562),(-122.1747,37.57)]\n83rd                          Ave \t[(-122.1741,37.563),(-122.1724,37.571)]\n83rd                          Ave \t[(-122.1799,37.531),(-122.179,37.535)]\n84th                          Ave \t[(-122.1683,37.58),(-122.1665,37.589)]\n85th                          Ave \t[(-122.1677,37.573),(-122.166,37.581)]\n85th                          Ave \t[(-122.173,37.548),(-122.1713,37.556)]\n85th                          Ave \t[(-122.1763,37.533),(-122.1748,37.54)]\n85th                          Ave \t[(-122.1877,37.466),(-122.186,37.476)]\n87th                          Ave \t[(-122.1646,37.561),(-122.1643,37.563)]\n87th                          Ave \t[(-122.1698,37.536),(-122.1681,37.544)]\n87th                          Ave \t[(-122.1834,37.474),(-122.1814,37.484)]\n88th                          Ave \t[(-122.1728,37.514),(-122.1711,37.521)]\n89th                          Ave \t[(-122.1822,37.459),(-122.1803,37.471)]\n8th                           Ave \t[(-122.2489,37.952),(-122.248,37.958)]\n8th                           St  \t[(-121.9083,37.161),(-121.9081,37.16)]\n8th                           St  \t[(-122.2459,37.882),(-122.2456,37.879)]\n8th                           St  \t[(-122.2546,37.914),(-122.2533,37.909)]\n8th                           St  \t[(-122.2572,37.935),(-122.256523,37.92898)]\n8th                           St  \t[(-122.2755,37.017),(-122.2766,37.022)]\n8th                           St  \t[(-122.2955,37.709),(-122.2952,37.698)]\n8th                           St  \t[(-122.296,37.748),(-122.296,37.733)]\n8th                           St  \t[(-122.2969,37.751),(-122.2967,37.746)]\n90th                          Ave \t[(-122.1769,37.477),(-122.1753,37.485)]\n90th                          Ave \t[(-122.1798,37.464),(-122.1785,37.47)]\n92nd                          Ave \t[(-122.1759,37.464),(-122.1742,37.472)]\n94th                          Ave \t[(-122.1714,37.466),(-122.1704,37.472)]\n96th                          Ave \t[(-122.1621,37.493),(-122.161,37.498)]\n98th                          Ave \t[(-122.1568,37.498),(-122.1558,37.502)]\n98th                          Ave \t[(-122.1693,37.438),(-122.1682,37.444)]\n98th                          Ave \t[(-122.1767,37.401),(-122.1758,37.408)]\n98th                          Ave \t[(-122.1783,37.388),(-122.1773,37.396)]\n98th                          Ave \t[(-122.1791,37.382),(-122.1788,37.384)]\n98th                          Ave \t[(-122.1914,37.294),(-122.1904,37.298)]\n98th                          Ave \t[(-122.2001,37.258),(-122.1974,37.27)]\n99th Av                       Ct  \t[(-122.1698,37.427),(-122.1694,37.422)]\n9th                           Ave \t[(-122.2491,37.938),(-122.248,37.945)]\n9th                           Ave \t[(-122.2516,37.922),(-122.2511,37.925)]\n9th                           St  \t[(-122.2349,37.779),(-122.234,37.773)]\n9th                           St  \t[(-122.27,37.725),(-122.27,37.734)]\n9th                           St  \t[(-122.2899,37.576),(-122.2897,37.567)]\n"
  },
  {
    "path": "sql/init_data/student.data",
    "content": "fred\t28\t(3.1,-1.5)\t3.70000000000000020e+00\nlarry\t60\t(21.8,4.9)\t3.10000000000000010e+00\n"
  },
  {
    "path": "sql/init_data/tenk.data",
    "content": "8800\t0\t0\t0\t0\t0\t0\t800\t800\t3800\t8800\t0\t1\tMAAAAA\tAAAAAA\tAAAAxx\n1891\t1\t1\t3\t1\t11\t91\t891\t1891\t1891\t1891\t182\t183\tTUAAAA\tBAAAAA\tHHHHxx\n3420\t2\t0\t0\t0\t0\t20\t420\t1420\t3420\t3420\t40\t41\tOBAAAA\tCAAAAA\tOOOOxx\n9850\t3\t0\t2\t0\t10\t50\t850\t1850\t4850\t9850\t100\t101\tWOAAAA\tDAAAAA\tVVVVxx\n7164\t4\t0\t0\t4\t4\t64\t164\t1164\t2164\t7164\t128\t129\tOPAAAA\tEAAAAA\tAAAAxx\n8009\t5\t1\t1\t9\t9\t9\t9\t9\t3009\t8009\t18\t19\tBWAAAA\tFAAAAA\tHHHHxx\n5057\t6\t1\t1\t7\t17\t57\t57\t1057\t57\t5057\t114\t115\tNMAAAA\tGAAAAA\tOOOOxx\n6701\t7\t1\t1\t1\t1\t1\t701\t701\t1701\t6701\t2\t3\tTXAAAA\tHAAAAA\tVVVVxx\n4321\t8\t1\t1\t1\t1\t21\t321\t321\t4321\t4321\t42\t43\tFKAAAA\tIAAAAA\tAAAAxx\n3043\t9\t1\t3\t3\t3\t43\t43\t1043\t3043\t3043\t86\t87\tBNAAAA\tJAAAAA\tHHHHxx\n1314\t10\t0\t2\t4\t14\t14\t314\t1314\t1314\t1314\t28\t29\tOYAAAA\tKAAAAA\tOOOOxx\n1504\t11\t0\t0\t4\t4\t4\t504\t1504\t1504\t1504\t8\t9\tWFAAAA\tLAAAAA\tVVVVxx\n5222\t12\t0\t2\t2\t2\t22\t222\t1222\t222\t5222\t44\t45\tWSAAAA\tMAAAAA\tAAAAxx\n6243\t13\t1\t3\t3\t3\t43\t243\t243\t1243\t6243\t86\t87\tDGAAAA\tNAAAAA\tHHHHxx\n5471\t14\t1\t3\t1\t11\t71\t471\t1471\t471\t5471\t142\t143\tLCAAAA\tOAAAAA\tOOOOxx\n5006\t15\t0\t2\t6\t6\t6\t6\t1006\t6\t5006\t12\t13\tOKAAAA\tPAAAAA\tVVVVxx\n5387\t16\t1\t3\t7\t7\t87\t387\t1387\t387\t5387\t174\t175\tFZAAAA\tQAAAAA\tAAAAxx\n5785\t17\t1\t1\t5\t5\t85\t785\t1785\t785\t5785\t170\t171\tNOAAAA\tRAAAAA\tHHHHxx\n6621\t18\t1\t1\t1\t1\t21\t621\t621\t1621\t6621\t42\t43\tRUAAAA\tSAAAAA\tOOOOxx\n6969\t19\t1\t1\t9\t9\t69\t969\t969\t1969\t6969\t138\t139\tBIAAAA\tTAAAAA\tVVVVxx\n9460\t20\t0\t0\t0\t0\t60\t460\t1460\t4460\t9460\t120\t121\tWZAAAA\tUAAAAA\tAAAAxx\n59\t21\t1\t3\t9\t19\t59\t59\t59\t59\t59\t118\t119\tHCAAAA\tVAAAAA\tHHHHxx\n8020\t22\t0\t0\t0\t0\t20\t20\t20\t3020\t8020\t40\t41\tMWAAAA\tWAAAAA\tOOOOxx\n7695\t23\t1\t3\t5\t15\t95\t695\t1695\t2695\t7695\t190\t191\tZJAAAA\tXAAAAA\tVVVVxx\n3442\t24\t0\t2\t2\t2\t42\t442\t1442\t3442\t3442\t84\t85\tKCAAAA\tYAAAAA\tAAAAxx\n5119\t25\t1\t3\t9\t19\t19\t119\t1119\t119\t5119\t38\t39\tXOAAAA\tZAAAAA\tHHHHxx\n646\t26\t0\t2\t6\t6\t46\t646\t646\t646\t646\t92\t93\tWYAAAA\tABAAAA\tOOOOxx\n9605\t27\t1\t1\t5\t5\t5\t605\t1605\t4605\t9605\t10\t11\tLFAAAA\tBBAAAA\tVVVVxx\n263\t28\t1\t3\t3\t3\t63\t263\t263\t263\t263\t126\t127\tDKAAAA\tCBAAAA\tAAAAxx\n3269\t29\t1\t1\t9\t9\t69\t269\t1269\t3269\t3269\t138\t139\tTVAAAA\tDBAAAA\tHHHHxx\n1839\t30\t1\t3\t9\t19\t39\t839\t1839\t1839\t1839\t78\t79\tTSAAAA\tEBAAAA\tOOOOxx\n9144\t31\t0\t0\t4\t4\t44\t144\t1144\t4144\t9144\t88\t89\tSNAAAA\tFBAAAA\tVVVVxx\n2513\t32\t1\t1\t3\t13\t13\t513\t513\t2513\t2513\t26\t27\tRSAAAA\tGBAAAA\tAAAAxx\n8850\t33\t0\t2\t0\t10\t50\t850\t850\t3850\t8850\t100\t101\tKCAAAA\tHBAAAA\tHHHHxx\n236\t34\t0\t0\t6\t16\t36\t236\t236\t236\t236\t72\t73\tCJAAAA\tIBAAAA\tOOOOxx\n3162\t35\t0\t2\t2\t2\t62\t162\t1162\t3162\t3162\t124\t125\tQRAAAA\tJBAAAA\tVVVVxx\n4380\t36\t0\t0\t0\t0\t80\t380\t380\t4380\t4380\t160\t161\tMMAAAA\tKBAAAA\tAAAAxx\n8095\t37\t1\t3\t5\t15\t95\t95\t95\t3095\t8095\t190\t191\tJZAAAA\tLBAAAA\tHHHHxx\n209\t38\t1\t1\t9\t9\t9\t209\t209\t209\t209\t18\t19\tBIAAAA\tMBAAAA\tOOOOxx\n3055\t39\t1\t3\t5\t15\t55\t55\t1055\t3055\t3055\t110\t111\tNNAAAA\tNBAAAA\tVVVVxx\n6921\t40\t1\t1\t1\t1\t21\t921\t921\t1921\t6921\t42\t43\tFGAAAA\tOBAAAA\tAAAAxx\n7046\t41\t0\t2\t6\t6\t46\t46\t1046\t2046\t7046\t92\t93\tALAAAA\tPBAAAA\tHHHHxx\n7912\t42\t0\t0\t2\t12\t12\t912\t1912\t2912\t7912\t24\t25\tISAAAA\tQBAAAA\tOOOOxx\n7267\t43\t1\t3\t7\t7\t67\t267\t1267\t2267\t7267\t134\t135\tNTAAAA\tRBAAAA\tVVVVxx\n3599\t44\t1\t3\t9\t19\t99\t599\t1599\t3599\t3599\t198\t199\tLIAAAA\tSBAAAA\tAAAAxx\n923\t45\t1\t3\t3\t3\t23\t923\t923\t923\t923\t46\t47\tNJAAAA\tTBAAAA\tHHHHxx\n1437\t46\t1\t1\t7\t17\t37\t437\t1437\t1437\t1437\t74\t75\tHDAAAA\tUBAAAA\tOOOOxx\n6439\t47\t1\t3\t9\t19\t39\t439\t439\t1439\t6439\t78\t79\tRNAAAA\tVBAAAA\tVVVVxx\n6989\t48\t1\t1\t9\t9\t89\t989\t989\t1989\t6989\t178\t179\tVIAAAA\tWBAAAA\tAAAAxx\n8798\t49\t0\t2\t8\t18\t98\t798\t798\t3798\t8798\t196\t197\tKAAAAA\tXBAAAA\tHHHHxx\n5960\t50\t0\t0\t0\t0\t60\t960\t1960\t960\t5960\t120\t121\tGVAAAA\tYBAAAA\tOOOOxx\n5832\t51\t0\t0\t2\t12\t32\t832\t1832\t832\t5832\t64\t65\tIQAAAA\tZBAAAA\tVVVVxx\n6066\t52\t0\t2\t6\t6\t66\t66\t66\t1066\t6066\t132\t133\tIZAAAA\tACAAAA\tAAAAxx\n322\t53\t0\t2\t2\t2\t22\t322\t322\t322\t322\t44\t45\tKMAAAA\tBCAAAA\tHHHHxx\n8321\t54\t1\t1\t1\t1\t21\t321\t321\t3321\t8321\t42\t43\tBIAAAA\tCCAAAA\tOOOOxx\n734\t55\t0\t2\t4\t14\t34\t734\t734\t734\t734\t68\t69\tGCAAAA\tDCAAAA\tVVVVxx\n688\t56\t0\t0\t8\t8\t88\t688\t688\t688\t688\t176\t177\tMAAAAA\tECAAAA\tAAAAxx\n4212\t57\t0\t0\t2\t12\t12\t212\t212\t4212\t4212\t24\t25\tAGAAAA\tFCAAAA\tHHHHxx\n9653\t58\t1\t1\t3\t13\t53\t653\t1653\t4653\t9653\t106\t107\tHHAAAA\tGCAAAA\tOOOOxx\n2677\t59\t1\t1\t7\t17\t77\t677\t677\t2677\t2677\t154\t155\tZYAAAA\tHCAAAA\tVVVVxx\n5423\t60\t1\t3\t3\t3\t23\t423\t1423\t423\t5423\t46\t47\tPAAAAA\tICAAAA\tAAAAxx\n2592\t61\t0\t0\t2\t12\t92\t592\t592\t2592\t2592\t184\t185\tSVAAAA\tJCAAAA\tHHHHxx\n3233\t62\t1\t1\t3\t13\t33\t233\t1233\t3233\t3233\t66\t67\tJUAAAA\tKCAAAA\tOOOOxx\n5032\t63\t0\t0\t2\t12\t32\t32\t1032\t32\t5032\t64\t65\tOLAAAA\tLCAAAA\tVVVVxx\n2525\t64\t1\t1\t5\t5\t25\t525\t525\t2525\t2525\t50\t51\tDTAAAA\tMCAAAA\tAAAAxx\n4450\t65\t0\t2\t0\t10\t50\t450\t450\t4450\t4450\t100\t101\tEPAAAA\tNCAAAA\tHHHHxx\n5778\t66\t0\t2\t8\t18\t78\t778\t1778\t778\t5778\t156\t157\tGOAAAA\tOCAAAA\tOOOOxx\n5852\t67\t0\t0\t2\t12\t52\t852\t1852\t852\t5852\t104\t105\tCRAAAA\tPCAAAA\tVVVVxx\n5404\t68\t0\t0\t4\t4\t4\t404\t1404\t404\t5404\t8\t9\tWZAAAA\tQCAAAA\tAAAAxx\n6223\t69\t1\t3\t3\t3\t23\t223\t223\t1223\t6223\t46\t47\tJFAAAA\tRCAAAA\tHHHHxx\n6133\t70\t1\t1\t3\t13\t33\t133\t133\t1133\t6133\t66\t67\tXBAAAA\tSCAAAA\tOOOOxx\n9112\t71\t0\t0\t2\t12\t12\t112\t1112\t4112\t9112\t24\t25\tMMAAAA\tTCAAAA\tVVVVxx\n7575\t72\t1\t3\t5\t15\t75\t575\t1575\t2575\t7575\t150\t151\tJFAAAA\tUCAAAA\tAAAAxx\n7414\t73\t0\t2\t4\t14\t14\t414\t1414\t2414\t7414\t28\t29\tEZAAAA\tVCAAAA\tHHHHxx\n9741\t74\t1\t1\t1\t1\t41\t741\t1741\t4741\t9741\t82\t83\tRKAAAA\tWCAAAA\tOOOOxx\n3767\t75\t1\t3\t7\t7\t67\t767\t1767\t3767\t3767\t134\t135\tXOAAAA\tXCAAAA\tVVVVxx\n9372\t76\t0\t0\t2\t12\t72\t372\t1372\t4372\t9372\t144\t145\tMWAAAA\tYCAAAA\tAAAAxx\n8976\t77\t0\t0\t6\t16\t76\t976\t976\t3976\t8976\t152\t153\tGHAAAA\tZCAAAA\tHHHHxx\n4071\t78\t1\t3\t1\t11\t71\t71\t71\t4071\t4071\t142\t143\tPAAAAA\tADAAAA\tOOOOxx\n1311\t79\t1\t3\t1\t11\t11\t311\t1311\t1311\t1311\t22\t23\tLYAAAA\tBDAAAA\tVVVVxx\n2604\t80\t0\t0\t4\t4\t4\t604\t604\t2604\t2604\t8\t9\tEWAAAA\tCDAAAA\tAAAAxx\n8840\t81\t0\t0\t0\t0\t40\t840\t840\t3840\t8840\t80\t81\tACAAAA\tDDAAAA\tHHHHxx\n567\t82\t1\t3\t7\t7\t67\t567\t567\t567\t567\t134\t135\tVVAAAA\tEDAAAA\tOOOOxx\n5215\t83\t1\t3\t5\t15\t15\t215\t1215\t215\t5215\t30\t31\tPSAAAA\tFDAAAA\tVVVVxx\n5474\t84\t0\t2\t4\t14\t74\t474\t1474\t474\t5474\t148\t149\tOCAAAA\tGDAAAA\tAAAAxx\n3906\t85\t0\t2\t6\t6\t6\t906\t1906\t3906\t3906\t12\t13\tGUAAAA\tHDAAAA\tHHHHxx\n1769\t86\t1\t1\t9\t9\t69\t769\t1769\t1769\t1769\t138\t139\tBQAAAA\tIDAAAA\tOOOOxx\n1454\t87\t0\t2\t4\t14\t54\t454\t1454\t1454\t1454\t108\t109\tYDAAAA\tJDAAAA\tVVVVxx\n6877\t88\t1\t1\t7\t17\t77\t877\t877\t1877\t6877\t154\t155\tNEAAAA\tKDAAAA\tAAAAxx\n6501\t89\t1\t1\t1\t1\t1\t501\t501\t1501\t6501\t2\t3\tBQAAAA\tLDAAAA\tHHHHxx\n934\t90\t0\t2\t4\t14\t34\t934\t934\t934\t934\t68\t69\tYJAAAA\tMDAAAA\tOOOOxx\n4075\t91\t1\t3\t5\t15\t75\t75\t75\t4075\t4075\t150\t151\tTAAAAA\tNDAAAA\tVVVVxx\n3180\t92\t0\t0\t0\t0\t80\t180\t1180\t3180\t3180\t160\t161\tISAAAA\tODAAAA\tAAAAxx\n7787\t93\t1\t3\t7\t7\t87\t787\t1787\t2787\t7787\t174\t175\tNNAAAA\tPDAAAA\tHHHHxx\n6401\t94\t1\t1\t1\t1\t1\t401\t401\t1401\t6401\t2\t3\tFMAAAA\tQDAAAA\tOOOOxx\n4244\t95\t0\t0\t4\t4\t44\t244\t244\t4244\t4244\t88\t89\tGHAAAA\tRDAAAA\tVVVVxx\n4591\t96\t1\t3\t1\t11\t91\t591\t591\t4591\t4591\t182\t183\tPUAAAA\tSDAAAA\tAAAAxx\n4113\t97\t1\t1\t3\t13\t13\t113\t113\t4113\t4113\t26\t27\tFCAAAA\tTDAAAA\tHHHHxx\n5925\t98\t1\t1\t5\t5\t25\t925\t1925\t925\t5925\t50\t51\tXTAAAA\tUDAAAA\tOOOOxx\n1987\t99\t1\t3\t7\t7\t87\t987\t1987\t1987\t1987\t174\t175\tLYAAAA\tVDAAAA\tVVVVxx\n8248\t100\t0\t0\t8\t8\t48\t248\t248\t3248\t8248\t96\t97\tGFAAAA\tWDAAAA\tAAAAxx\n4151\t101\t1\t3\t1\t11\t51\t151\t151\t4151\t4151\t102\t103\tRDAAAA\tXDAAAA\tHHHHxx\n8670\t102\t0\t2\t0\t10\t70\t670\t670\t3670\t8670\t140\t141\tMVAAAA\tYDAAAA\tOOOOxx\n6194\t103\t0\t2\t4\t14\t94\t194\t194\t1194\t6194\t188\t189\tGEAAAA\tZDAAAA\tVVVVxx\n88\t104\t0\t0\t8\t8\t88\t88\t88\t88\t88\t176\t177\tKDAAAA\tAEAAAA\tAAAAxx\n4058\t105\t0\t2\t8\t18\t58\t58\t58\t4058\t4058\t116\t117\tCAAAAA\tBEAAAA\tHHHHxx\n2742\t106\t0\t2\t2\t2\t42\t742\t742\t2742\t2742\t84\t85\tMBAAAA\tCEAAAA\tOOOOxx\n8275\t107\t1\t3\t5\t15\t75\t275\t275\t3275\t8275\t150\t151\tHGAAAA\tDEAAAA\tVVVVxx\n4258\t108\t0\t2\t8\t18\t58\t258\t258\t4258\t4258\t116\t117\tUHAAAA\tEEAAAA\tAAAAxx\n6129\t109\t1\t1\t9\t9\t29\t129\t129\t1129\t6129\t58\t59\tTBAAAA\tFEAAAA\tHHHHxx\n7243\t110\t1\t3\t3\t3\t43\t243\t1243\t2243\t7243\t86\t87\tPSAAAA\tGEAAAA\tOOOOxx\n2392\t111\t0\t0\t2\t12\t92\t392\t392\t2392\t2392\t184\t185\tAOAAAA\tHEAAAA\tVVVVxx\n9853\t112\t1\t1\t3\t13\t53\t853\t1853\t4853\t9853\t106\t107\tZOAAAA\tIEAAAA\tAAAAxx\n6064\t113\t0\t0\t4\t4\t64\t64\t64\t1064\t6064\t128\t129\tGZAAAA\tJEAAAA\tHHHHxx\n4391\t114\t1\t3\t1\t11\t91\t391\t391\t4391\t4391\t182\t183\tXMAAAA\tKEAAAA\tOOOOxx\n726\t115\t0\t2\t6\t6\t26\t726\t726\t726\t726\t52\t53\tYBAAAA\tLEAAAA\tVVVVxx\n6957\t116\t1\t1\t7\t17\t57\t957\t957\t1957\t6957\t114\t115\tPHAAAA\tMEAAAA\tAAAAxx\n3853\t117\t1\t1\t3\t13\t53\t853\t1853\t3853\t3853\t106\t107\tFSAAAA\tNEAAAA\tHHHHxx\n4524\t118\t0\t0\t4\t4\t24\t524\t524\t4524\t4524\t48\t49\tASAAAA\tOEAAAA\tOOOOxx\n5330\t119\t0\t2\t0\t10\t30\t330\t1330\t330\t5330\t60\t61\tAXAAAA\tPEAAAA\tVVVVxx\n6671\t120\t1\t3\t1\t11\t71\t671\t671\t1671\t6671\t142\t143\tPWAAAA\tQEAAAA\tAAAAxx\n5314\t121\t0\t2\t4\t14\t14\t314\t1314\t314\t5314\t28\t29\tKWAAAA\tREAAAA\tHHHHxx\n9202\t122\t0\t2\t2\t2\t2\t202\t1202\t4202\t9202\t4\t5\tYPAAAA\tSEAAAA\tOOOOxx\n4596\t123\t0\t0\t6\t16\t96\t596\t596\t4596\t4596\t192\t193\tUUAAAA\tTEAAAA\tVVVVxx\n8951\t124\t1\t3\t1\t11\t51\t951\t951\t3951\t8951\t102\t103\tHGAAAA\tUEAAAA\tAAAAxx\n9902\t125\t0\t2\t2\t2\t2\t902\t1902\t4902\t9902\t4\t5\tWQAAAA\tVEAAAA\tHHHHxx\n1440\t126\t0\t0\t0\t0\t40\t440\t1440\t1440\t1440\t80\t81\tKDAAAA\tWEAAAA\tOOOOxx\n5339\t127\t1\t3\t9\t19\t39\t339\t1339\t339\t5339\t78\t79\tJXAAAA\tXEAAAA\tVVVVxx\n3371\t128\t1\t3\t1\t11\t71\t371\t1371\t3371\t3371\t142\t143\tRZAAAA\tYEAAAA\tAAAAxx\n4467\t129\t1\t3\t7\t7\t67\t467\t467\t4467\t4467\t134\t135\tVPAAAA\tZEAAAA\tHHHHxx\n6216\t130\t0\t0\t6\t16\t16\t216\t216\t1216\t6216\t32\t33\tCFAAAA\tAFAAAA\tOOOOxx\n5364\t131\t0\t0\t4\t4\t64\t364\t1364\t364\t5364\t128\t129\tIYAAAA\tBFAAAA\tVVVVxx\n7547\t132\t1\t3\t7\t7\t47\t547\t1547\t2547\t7547\t94\t95\tHEAAAA\tCFAAAA\tAAAAxx\n4338\t133\t0\t2\t8\t18\t38\t338\t338\t4338\t4338\t76\t77\tWKAAAA\tDFAAAA\tHHHHxx\n3481\t134\t1\t1\t1\t1\t81\t481\t1481\t3481\t3481\t162\t163\tXDAAAA\tEFAAAA\tOOOOxx\n826\t135\t0\t2\t6\t6\t26\t826\t826\t826\t826\t52\t53\tUFAAAA\tFFAAAA\tVVVVxx\n3647\t136\t1\t3\t7\t7\t47\t647\t1647\t3647\t3647\t94\t95\tHKAAAA\tGFAAAA\tAAAAxx\n3337\t137\t1\t1\t7\t17\t37\t337\t1337\t3337\t3337\t74\t75\tJYAAAA\tHFAAAA\tHHHHxx\n3591\t138\t1\t3\t1\t11\t91\t591\t1591\t3591\t3591\t182\t183\tDIAAAA\tIFAAAA\tOOOOxx\n7192\t139\t0\t0\t2\t12\t92\t192\t1192\t2192\t7192\t184\t185\tQQAAAA\tJFAAAA\tVVVVxx\n1078\t140\t0\t2\t8\t18\t78\t78\t1078\t1078\t1078\t156\t157\tMPAAAA\tKFAAAA\tAAAAxx\n1310\t141\t0\t2\t0\t10\t10\t310\t1310\t1310\t1310\t20\t21\tKYAAAA\tLFAAAA\tHHHHxx\n9642\t142\t0\t2\t2\t2\t42\t642\t1642\t4642\t9642\t84\t85\tWGAAAA\tMFAAAA\tOOOOxx\n39\t143\t1\t3\t9\t19\t39\t39\t39\t39\t39\t78\t79\tNBAAAA\tNFAAAA\tVVVVxx\n8682\t144\t0\t2\t2\t2\t82\t682\t682\t3682\t8682\t164\t165\tYVAAAA\tOFAAAA\tAAAAxx\n1794\t145\t0\t2\t4\t14\t94\t794\t1794\t1794\t1794\t188\t189\tARAAAA\tPFAAAA\tHHHHxx\n5630\t146\t0\t2\t0\t10\t30\t630\t1630\t630\t5630\t60\t61\tOIAAAA\tQFAAAA\tOOOOxx\n6748\t147\t0\t0\t8\t8\t48\t748\t748\t1748\t6748\t96\t97\tOZAAAA\tRFAAAA\tVVVVxx\n3766\t148\t0\t2\t6\t6\t66\t766\t1766\t3766\t3766\t132\t133\tWOAAAA\tSFAAAA\tAAAAxx\n6403\t149\t1\t3\t3\t3\t3\t403\t403\t1403\t6403\t6\t7\tHMAAAA\tTFAAAA\tHHHHxx\n175\t150\t1\t3\t5\t15\t75\t175\t175\t175\t175\t150\t151\tTGAAAA\tUFAAAA\tOOOOxx\n2179\t151\t1\t3\t9\t19\t79\t179\t179\t2179\t2179\t158\t159\tVFAAAA\tVFAAAA\tVVVVxx\n7897\t152\t1\t1\t7\t17\t97\t897\t1897\t2897\t7897\t194\t195\tTRAAAA\tWFAAAA\tAAAAxx\n2760\t153\t0\t0\t0\t0\t60\t760\t760\t2760\t2760\t120\t121\tECAAAA\tXFAAAA\tHHHHxx\n1675\t154\t1\t3\t5\t15\t75\t675\t1675\t1675\t1675\t150\t151\tLMAAAA\tYFAAAA\tOOOOxx\n2564\t155\t0\t0\t4\t4\t64\t564\t564\t2564\t2564\t128\t129\tQUAAAA\tZFAAAA\tVVVVxx\n157\t156\t1\t1\t7\t17\t57\t157\t157\t157\t157\t114\t115\tBGAAAA\tAGAAAA\tAAAAxx\n8779\t157\t1\t3\t9\t19\t79\t779\t779\t3779\t8779\t158\t159\tRZAAAA\tBGAAAA\tHHHHxx\n9591\t158\t1\t3\t1\t11\t91\t591\t1591\t4591\t9591\t182\t183\tXEAAAA\tCGAAAA\tOOOOxx\n8732\t159\t0\t0\t2\t12\t32\t732\t732\t3732\t8732\t64\t65\tWXAAAA\tDGAAAA\tVVVVxx\n139\t160\t1\t3\t9\t19\t39\t139\t139\t139\t139\t78\t79\tJFAAAA\tEGAAAA\tAAAAxx\n5372\t161\t0\t0\t2\t12\t72\t372\t1372\t372\t5372\t144\t145\tQYAAAA\tFGAAAA\tHHHHxx\n1278\t162\t0\t2\t8\t18\t78\t278\t1278\t1278\t1278\t156\t157\tEXAAAA\tGGAAAA\tOOOOxx\n4697\t163\t1\t1\t7\t17\t97\t697\t697\t4697\t4697\t194\t195\tRYAAAA\tHGAAAA\tVVVVxx\n8610\t164\t0\t2\t0\t10\t10\t610\t610\t3610\t8610\t20\t21\tETAAAA\tIGAAAA\tAAAAxx\n8180\t165\t0\t0\t0\t0\t80\t180\t180\t3180\t8180\t160\t161\tQCAAAA\tJGAAAA\tHHHHxx\n2399\t166\t1\t3\t9\t19\t99\t399\t399\t2399\t2399\t198\t199\tHOAAAA\tKGAAAA\tOOOOxx\n615\t167\t1\t3\t5\t15\t15\t615\t615\t615\t615\t30\t31\tRXAAAA\tLGAAAA\tVVVVxx\n7629\t168\t1\t1\t9\t9\t29\t629\t1629\t2629\t7629\t58\t59\tLHAAAA\tMGAAAA\tAAAAxx\n7628\t169\t0\t0\t8\t8\t28\t628\t1628\t2628\t7628\t56\t57\tKHAAAA\tNGAAAA\tHHHHxx\n4659\t170\t1\t3\t9\t19\t59\t659\t659\t4659\t4659\t118\t119\tFXAAAA\tOGAAAA\tOOOOxx\n5865\t171\t1\t1\t5\t5\t65\t865\t1865\t865\t5865\t130\t131\tPRAAAA\tPGAAAA\tVVVVxx\n3973\t172\t1\t1\t3\t13\t73\t973\t1973\t3973\t3973\t146\t147\tVWAAAA\tQGAAAA\tAAAAxx\n552\t173\t0\t0\t2\t12\t52\t552\t552\t552\t552\t104\t105\tGVAAAA\tRGAAAA\tHHHHxx\n708\t174\t0\t0\t8\t8\t8\t708\t708\t708\t708\t16\t17\tGBAAAA\tSGAAAA\tOOOOxx\n3550\t175\t0\t2\t0\t10\t50\t550\t1550\t3550\t3550\t100\t101\tOGAAAA\tTGAAAA\tVVVVxx\n5547\t176\t1\t3\t7\t7\t47\t547\t1547\t547\t5547\t94\t95\tJFAAAA\tUGAAAA\tAAAAxx\n489\t177\t1\t1\t9\t9\t89\t489\t489\t489\t489\t178\t179\tVSAAAA\tVGAAAA\tHHHHxx\n3794\t178\t0\t2\t4\t14\t94\t794\t1794\t3794\t3794\t188\t189\tYPAAAA\tWGAAAA\tOOOOxx\n9479\t179\t1\t3\t9\t19\t79\t479\t1479\t4479\t9479\t158\t159\tPAAAAA\tXGAAAA\tVVVVxx\n6435\t180\t1\t3\t5\t15\t35\t435\t435\t1435\t6435\t70\t71\tNNAAAA\tYGAAAA\tAAAAxx\n5120\t181\t0\t0\t0\t0\t20\t120\t1120\t120\t5120\t40\t41\tYOAAAA\tZGAAAA\tHHHHxx\n3615\t182\t1\t3\t5\t15\t15\t615\t1615\t3615\t3615\t30\t31\tBJAAAA\tAHAAAA\tOOOOxx\n8399\t183\t1\t3\t9\t19\t99\t399\t399\t3399\t8399\t198\t199\tBLAAAA\tBHAAAA\tVVVVxx\n2155\t184\t1\t3\t5\t15\t55\t155\t155\t2155\t2155\t110\t111\tXEAAAA\tCHAAAA\tAAAAxx\n6690\t185\t0\t2\t0\t10\t90\t690\t690\t1690\t6690\t180\t181\tIXAAAA\tDHAAAA\tHHHHxx\n1683\t186\t1\t3\t3\t3\t83\t683\t1683\t1683\t1683\t166\t167\tTMAAAA\tEHAAAA\tOOOOxx\n6302\t187\t0\t2\t2\t2\t2\t302\t302\t1302\t6302\t4\t5\tKIAAAA\tFHAAAA\tVVVVxx\n516\t188\t0\t0\t6\t16\t16\t516\t516\t516\t516\t32\t33\tWTAAAA\tGHAAAA\tAAAAxx\n3901\t189\t1\t1\t1\t1\t1\t901\t1901\t3901\t3901\t2\t3\tBUAAAA\tHHAAAA\tHHHHxx\n6938\t190\t0\t2\t8\t18\t38\t938\t938\t1938\t6938\t76\t77\tWGAAAA\tIHAAAA\tOOOOxx\n7484\t191\t0\t0\t4\t4\t84\t484\t1484\t2484\t7484\t168\t169\tWBAAAA\tJHAAAA\tVVVVxx\n7424\t192\t0\t0\t4\t4\t24\t424\t1424\t2424\t7424\t48\t49\tOZAAAA\tKHAAAA\tAAAAxx\n9410\t193\t0\t2\t0\t10\t10\t410\t1410\t4410\t9410\t20\t21\tYXAAAA\tLHAAAA\tHHHHxx\n1714\t194\t0\t2\t4\t14\t14\t714\t1714\t1714\t1714\t28\t29\tYNAAAA\tMHAAAA\tOOOOxx\n8278\t195\t0\t2\t8\t18\t78\t278\t278\t3278\t8278\t156\t157\tKGAAAA\tNHAAAA\tVVVVxx\n3158\t196\t0\t2\t8\t18\t58\t158\t1158\t3158\t3158\t116\t117\tMRAAAA\tOHAAAA\tAAAAxx\n2511\t197\t1\t3\t1\t11\t11\t511\t511\t2511\t2511\t22\t23\tPSAAAA\tPHAAAA\tHHHHxx\n2912\t198\t0\t0\t2\t12\t12\t912\t912\t2912\t2912\t24\t25\tAIAAAA\tQHAAAA\tOOOOxx\n2648\t199\t0\t0\t8\t8\t48\t648\t648\t2648\t2648\t96\t97\tWXAAAA\tRHAAAA\tVVVVxx\n9385\t200\t1\t1\t5\t5\t85\t385\t1385\t4385\t9385\t170\t171\tZWAAAA\tSHAAAA\tAAAAxx\n7545\t201\t1\t1\t5\t5\t45\t545\t1545\t2545\t7545\t90\t91\tFEAAAA\tTHAAAA\tHHHHxx\n8407\t202\t1\t3\t7\t7\t7\t407\t407\t3407\t8407\t14\t15\tJLAAAA\tUHAAAA\tOOOOxx\n5893\t203\t1\t1\t3\t13\t93\t893\t1893\t893\t5893\t186\t187\tRSAAAA\tVHAAAA\tVVVVxx\n7049\t204\t1\t1\t9\t9\t49\t49\t1049\t2049\t7049\t98\t99\tDLAAAA\tWHAAAA\tAAAAxx\n6812\t205\t0\t0\t2\t12\t12\t812\t812\t1812\t6812\t24\t25\tACAAAA\tXHAAAA\tHHHHxx\n3649\t206\t1\t1\t9\t9\t49\t649\t1649\t3649\t3649\t98\t99\tJKAAAA\tYHAAAA\tOOOOxx\n9275\t207\t1\t3\t5\t15\t75\t275\t1275\t4275\t9275\t150\t151\tTSAAAA\tZHAAAA\tVVVVxx\n1179\t208\t1\t3\t9\t19\t79\t179\t1179\t1179\t1179\t158\t159\tJTAAAA\tAIAAAA\tAAAAxx\n969\t209\t1\t1\t9\t9\t69\t969\t969\t969\t969\t138\t139\tHLAAAA\tBIAAAA\tHHHHxx\n7920\t210\t0\t0\t0\t0\t20\t920\t1920\t2920\t7920\t40\t41\tQSAAAA\tCIAAAA\tOOOOxx\n998\t211\t0\t2\t8\t18\t98\t998\t998\t998\t998\t196\t197\tKMAAAA\tDIAAAA\tVVVVxx\n3958\t212\t0\t2\t8\t18\t58\t958\t1958\t3958\t3958\t116\t117\tGWAAAA\tEIAAAA\tAAAAxx\n6052\t213\t0\t0\t2\t12\t52\t52\t52\t1052\t6052\t104\t105\tUYAAAA\tFIAAAA\tHHHHxx\n8791\t214\t1\t3\t1\t11\t91\t791\t791\t3791\t8791\t182\t183\tDAAAAA\tGIAAAA\tOOOOxx\n5191\t215\t1\t3\t1\t11\t91\t191\t1191\t191\t5191\t182\t183\tRRAAAA\tHIAAAA\tVVVVxx\n4267\t216\t1\t3\t7\t7\t67\t267\t267\t4267\t4267\t134\t135\tDIAAAA\tIIAAAA\tAAAAxx\n2829\t217\t1\t1\t9\t9\t29\t829\t829\t2829\t2829\t58\t59\tVEAAAA\tJIAAAA\tHHHHxx\n6396\t218\t0\t0\t6\t16\t96\t396\t396\t1396\t6396\t192\t193\tAMAAAA\tKIAAAA\tOOOOxx\n9413\t219\t1\t1\t3\t13\t13\t413\t1413\t4413\t9413\t26\t27\tBYAAAA\tLIAAAA\tVVVVxx\n614\t220\t0\t2\t4\t14\t14\t614\t614\t614\t614\t28\t29\tQXAAAA\tMIAAAA\tAAAAxx\n4660\t221\t0\t0\t0\t0\t60\t660\t660\t4660\t4660\t120\t121\tGXAAAA\tNIAAAA\tHHHHxx\n8834\t222\t0\t2\t4\t14\t34\t834\t834\t3834\t8834\t68\t69\tUBAAAA\tOIAAAA\tOOOOxx\n2767\t223\t1\t3\t7\t7\t67\t767\t767\t2767\t2767\t134\t135\tLCAAAA\tPIAAAA\tVVVVxx\n2444\t224\t0\t0\t4\t4\t44\t444\t444\t2444\t2444\t88\t89\tAQAAAA\tQIAAAA\tAAAAxx\n4129\t225\t1\t1\t9\t9\t29\t129\t129\t4129\t4129\t58\t59\tVCAAAA\tRIAAAA\tHHHHxx\n3394\t226\t0\t2\t4\t14\t94\t394\t1394\t3394\t3394\t188\t189\tOAAAAA\tSIAAAA\tOOOOxx\n2705\t227\t1\t1\t5\t5\t5\t705\t705\t2705\t2705\t10\t11\tBAAAAA\tTIAAAA\tVVVVxx\n8499\t228\t1\t3\t9\t19\t99\t499\t499\t3499\t8499\t198\t199\tXOAAAA\tUIAAAA\tAAAAxx\n8852\t229\t0\t0\t2\t12\t52\t852\t852\t3852\t8852\t104\t105\tMCAAAA\tVIAAAA\tHHHHxx\n6174\t230\t0\t2\t4\t14\t74\t174\t174\t1174\t6174\t148\t149\tMDAAAA\tWIAAAA\tOOOOxx\n750\t231\t0\t2\t0\t10\t50\t750\t750\t750\t750\t100\t101\tWCAAAA\tXIAAAA\tVVVVxx\n8164\t232\t0\t0\t4\t4\t64\t164\t164\t3164\t8164\t128\t129\tACAAAA\tYIAAAA\tAAAAxx\n4930\t233\t0\t2\t0\t10\t30\t930\t930\t4930\t4930\t60\t61\tQHAAAA\tZIAAAA\tHHHHxx\n9904\t234\t0\t0\t4\t4\t4\t904\t1904\t4904\t9904\t8\t9\tYQAAAA\tAJAAAA\tOOOOxx\n7378\t235\t0\t2\t8\t18\t78\t378\t1378\t2378\t7378\t156\t157\tUXAAAA\tBJAAAA\tVVVVxx\n2927\t236\t1\t3\t7\t7\t27\t927\t927\t2927\t2927\t54\t55\tPIAAAA\tCJAAAA\tAAAAxx\n7155\t237\t1\t3\t5\t15\t55\t155\t1155\t2155\t7155\t110\t111\tFPAAAA\tDJAAAA\tHHHHxx\n1302\t238\t0\t2\t2\t2\t2\t302\t1302\t1302\t1302\t4\t5\tCYAAAA\tEJAAAA\tOOOOxx\n5904\t239\t0\t0\t4\t4\t4\t904\t1904\t904\t5904\t8\t9\tCTAAAA\tFJAAAA\tVVVVxx\n9687\t240\t1\t3\t7\t7\t87\t687\t1687\t4687\t9687\t174\t175\tPIAAAA\tGJAAAA\tAAAAxx\n3553\t241\t1\t1\t3\t13\t53\t553\t1553\t3553\t3553\t106\t107\tRGAAAA\tHJAAAA\tHHHHxx\n4447\t242\t1\t3\t7\t7\t47\t447\t447\t4447\t4447\t94\t95\tBPAAAA\tIJAAAA\tOOOOxx\n6878\t243\t0\t2\t8\t18\t78\t878\t878\t1878\t6878\t156\t157\tOEAAAA\tJJAAAA\tVVVVxx\n9470\t244\t0\t2\t0\t10\t70\t470\t1470\t4470\t9470\t140\t141\tGAAAAA\tKJAAAA\tAAAAxx\n9735\t245\t1\t3\t5\t15\t35\t735\t1735\t4735\t9735\t70\t71\tLKAAAA\tLJAAAA\tHHHHxx\n5967\t246\t1\t3\t7\t7\t67\t967\t1967\t967\t5967\t134\t135\tNVAAAA\tMJAAAA\tOOOOxx\n6601\t247\t1\t1\t1\t1\t1\t601\t601\t1601\t6601\t2\t3\tXTAAAA\tNJAAAA\tVVVVxx\n7631\t248\t1\t3\t1\t11\t31\t631\t1631\t2631\t7631\t62\t63\tNHAAAA\tOJAAAA\tAAAAxx\n3559\t249\t1\t3\t9\t19\t59\t559\t1559\t3559\t3559\t118\t119\tXGAAAA\tPJAAAA\tHHHHxx\n2247\t250\t1\t3\t7\t7\t47\t247\t247\t2247\t2247\t94\t95\tLIAAAA\tQJAAAA\tOOOOxx\n9649\t251\t1\t1\t9\t9\t49\t649\t1649\t4649\t9649\t98\t99\tDHAAAA\tRJAAAA\tVVVVxx\n808\t252\t0\t0\t8\t8\t8\t808\t808\t808\t808\t16\t17\tCFAAAA\tSJAAAA\tAAAAxx\n240\t253\t0\t0\t0\t0\t40\t240\t240\t240\t240\t80\t81\tGJAAAA\tTJAAAA\tHHHHxx\n5031\t254\t1\t3\t1\t11\t31\t31\t1031\t31\t5031\t62\t63\tNLAAAA\tUJAAAA\tOOOOxx\n9563\t255\t1\t3\t3\t3\t63\t563\t1563\t4563\t9563\t126\t127\tVDAAAA\tVJAAAA\tVVVVxx\n5656\t256\t0\t0\t6\t16\t56\t656\t1656\t656\t5656\t112\t113\tOJAAAA\tWJAAAA\tAAAAxx\n3886\t257\t0\t2\t6\t6\t86\t886\t1886\t3886\t3886\t172\t173\tMTAAAA\tXJAAAA\tHHHHxx\n2431\t258\t1\t3\t1\t11\t31\t431\t431\t2431\t2431\t62\t63\tNPAAAA\tYJAAAA\tOOOOxx\n5560\t259\t0\t0\t0\t0\t60\t560\t1560\t560\t5560\t120\t121\tWFAAAA\tZJAAAA\tVVVVxx\n9065\t260\t1\t1\t5\t5\t65\t65\t1065\t4065\t9065\t130\t131\tRKAAAA\tAKAAAA\tAAAAxx\n8130\t261\t0\t2\t0\t10\t30\t130\t130\t3130\t8130\t60\t61\tSAAAAA\tBKAAAA\tHHHHxx\n4054\t262\t0\t2\t4\t14\t54\t54\t54\t4054\t4054\t108\t109\tYZAAAA\tCKAAAA\tOOOOxx\n873\t263\t1\t1\t3\t13\t73\t873\t873\t873\t873\t146\t147\tPHAAAA\tDKAAAA\tVVVVxx\n3092\t264\t0\t0\t2\t12\t92\t92\t1092\t3092\t3092\t184\t185\tYOAAAA\tEKAAAA\tAAAAxx\n6697\t265\t1\t1\t7\t17\t97\t697\t697\t1697\t6697\t194\t195\tPXAAAA\tFKAAAA\tHHHHxx\n2452\t266\t0\t0\t2\t12\t52\t452\t452\t2452\t2452\t104\t105\tIQAAAA\tGKAAAA\tOOOOxx\n7867\t267\t1\t3\t7\t7\t67\t867\t1867\t2867\t7867\t134\t135\tPQAAAA\tHKAAAA\tVVVVxx\n3753\t268\t1\t1\t3\t13\t53\t753\t1753\t3753\t3753\t106\t107\tJOAAAA\tIKAAAA\tAAAAxx\n7834\t269\t0\t2\t4\t14\t34\t834\t1834\t2834\t7834\t68\t69\tIPAAAA\tJKAAAA\tHHHHxx\n5846\t270\t0\t2\t6\t6\t46\t846\t1846\t846\t5846\t92\t93\tWQAAAA\tKKAAAA\tOOOOxx\n7604\t271\t0\t0\t4\t4\t4\t604\t1604\t2604\t7604\t8\t9\tMGAAAA\tLKAAAA\tVVVVxx\n3452\t272\t0\t0\t2\t12\t52\t452\t1452\t3452\t3452\t104\t105\tUCAAAA\tMKAAAA\tAAAAxx\n4788\t273\t0\t0\t8\t8\t88\t788\t788\t4788\t4788\t176\t177\tECAAAA\tNKAAAA\tHHHHxx\n8600\t274\t0\t0\t0\t0\t0\t600\t600\t3600\t8600\t0\t1\tUSAAAA\tOKAAAA\tOOOOxx\n8511\t275\t1\t3\t1\t11\t11\t511\t511\t3511\t8511\t22\t23\tJPAAAA\tPKAAAA\tVVVVxx\n4452\t276\t0\t0\t2\t12\t52\t452\t452\t4452\t4452\t104\t105\tGPAAAA\tQKAAAA\tAAAAxx\n1709\t277\t1\t1\t9\t9\t9\t709\t1709\t1709\t1709\t18\t19\tTNAAAA\tRKAAAA\tHHHHxx\n3440\t278\t0\t0\t0\t0\t40\t440\t1440\t3440\t3440\t80\t81\tICAAAA\tSKAAAA\tOOOOxx\n9188\t279\t0\t0\t8\t8\t88\t188\t1188\t4188\t9188\t176\t177\tKPAAAA\tTKAAAA\tVVVVxx\n3058\t280\t0\t2\t8\t18\t58\t58\t1058\t3058\t3058\t116\t117\tQNAAAA\tUKAAAA\tAAAAxx\n5821\t281\t1\t1\t1\t1\t21\t821\t1821\t821\t5821\t42\t43\tXPAAAA\tVKAAAA\tHHHHxx\n3428\t282\t0\t0\t8\t8\t28\t428\t1428\t3428\t3428\t56\t57\tWBAAAA\tWKAAAA\tOOOOxx\n3581\t283\t1\t1\t1\t1\t81\t581\t1581\t3581\t3581\t162\t163\tTHAAAA\tXKAAAA\tVVVVxx\n7523\t284\t1\t3\t3\t3\t23\t523\t1523\t2523\t7523\t46\t47\tJDAAAA\tYKAAAA\tAAAAxx\n3131\t285\t1\t3\t1\t11\t31\t131\t1131\t3131\t3131\t62\t63\tLQAAAA\tZKAAAA\tHHHHxx\n2404\t286\t0\t0\t4\t4\t4\t404\t404\t2404\t2404\t8\t9\tMOAAAA\tALAAAA\tOOOOxx\n5453\t287\t1\t1\t3\t13\t53\t453\t1453\t453\t5453\t106\t107\tTBAAAA\tBLAAAA\tVVVVxx\n1599\t288\t1\t3\t9\t19\t99\t599\t1599\t1599\t1599\t198\t199\tNJAAAA\tCLAAAA\tAAAAxx\n7081\t289\t1\t1\t1\t1\t81\t81\t1081\t2081\t7081\t162\t163\tJMAAAA\tDLAAAA\tHHHHxx\n1750\t290\t0\t2\t0\t10\t50\t750\t1750\t1750\t1750\t100\t101\tIPAAAA\tELAAAA\tOOOOxx\n5085\t291\t1\t1\t5\t5\t85\t85\t1085\t85\t5085\t170\t171\tPNAAAA\tFLAAAA\tVVVVxx\n9777\t292\t1\t1\t7\t17\t77\t777\t1777\t4777\t9777\t154\t155\tBMAAAA\tGLAAAA\tAAAAxx\n574\t293\t0\t2\t4\t14\t74\t574\t574\t574\t574\t148\t149\tCWAAAA\tHLAAAA\tHHHHxx\n5984\t294\t0\t0\t4\t4\t84\t984\t1984\t984\t5984\t168\t169\tEWAAAA\tILAAAA\tOOOOxx\n7039\t295\t1\t3\t9\t19\t39\t39\t1039\t2039\t7039\t78\t79\tTKAAAA\tJLAAAA\tVVVVxx\n7143\t296\t1\t3\t3\t3\t43\t143\t1143\t2143\t7143\t86\t87\tTOAAAA\tKLAAAA\tAAAAxx\n5702\t297\t0\t2\t2\t2\t2\t702\t1702\t702\t5702\t4\t5\tILAAAA\tLLAAAA\tHHHHxx\n362\t298\t0\t2\t2\t2\t62\t362\t362\t362\t362\t124\t125\tYNAAAA\tMLAAAA\tOOOOxx\n6997\t299\t1\t1\t7\t17\t97\t997\t997\t1997\t6997\t194\t195\tDJAAAA\tNLAAAA\tVVVVxx\n2529\t300\t1\t1\t9\t9\t29\t529\t529\t2529\t2529\t58\t59\tHTAAAA\tOLAAAA\tAAAAxx\n6319\t301\t1\t3\t9\t19\t19\t319\t319\t1319\t6319\t38\t39\tBJAAAA\tPLAAAA\tHHHHxx\n954\t302\t0\t2\t4\t14\t54\t954\t954\t954\t954\t108\t109\tSKAAAA\tQLAAAA\tOOOOxx\n3413\t303\t1\t1\t3\t13\t13\t413\t1413\t3413\t3413\t26\t27\tHBAAAA\tRLAAAA\tVVVVxx\n9081\t304\t1\t1\t1\t1\t81\t81\t1081\t4081\t9081\t162\t163\tHLAAAA\tSLAAAA\tAAAAxx\n5599\t305\t1\t3\t9\t19\t99\t599\t1599\t599\t5599\t198\t199\tJHAAAA\tTLAAAA\tHHHHxx\n4772\t306\t0\t0\t2\t12\t72\t772\t772\t4772\t4772\t144\t145\tOBAAAA\tULAAAA\tOOOOxx\n1124\t307\t0\t0\t4\t4\t24\t124\t1124\t1124\t1124\t48\t49\tGRAAAA\tVLAAAA\tVVVVxx\n7793\t308\t1\t1\t3\t13\t93\t793\t1793\t2793\t7793\t186\t187\tTNAAAA\tWLAAAA\tAAAAxx\n4201\t309\t1\t1\t1\t1\t1\t201\t201\t4201\t4201\t2\t3\tPFAAAA\tXLAAAA\tHHHHxx\n7015\t310\t1\t3\t5\t15\t15\t15\t1015\t2015\t7015\t30\t31\tVJAAAA\tYLAAAA\tOOOOxx\n5936\t311\t0\t0\t6\t16\t36\t936\t1936\t936\t5936\t72\t73\tIUAAAA\tZLAAAA\tVVVVxx\n4625\t312\t1\t1\t5\t5\t25\t625\t625\t4625\t4625\t50\t51\tXVAAAA\tAMAAAA\tAAAAxx\n4989\t313\t1\t1\t9\t9\t89\t989\t989\t4989\t4989\t178\t179\tXJAAAA\tBMAAAA\tHHHHxx\n4949\t314\t1\t1\t9\t9\t49\t949\t949\t4949\t4949\t98\t99\tJIAAAA\tCMAAAA\tOOOOxx\n6273\t315\t1\t1\t3\t13\t73\t273\t273\t1273\t6273\t146\t147\tHHAAAA\tDMAAAA\tVVVVxx\n4478\t316\t0\t2\t8\t18\t78\t478\t478\t4478\t4478\t156\t157\tGQAAAA\tEMAAAA\tAAAAxx\n8854\t317\t0\t2\t4\t14\t54\t854\t854\t3854\t8854\t108\t109\tOCAAAA\tFMAAAA\tHHHHxx\n2105\t318\t1\t1\t5\t5\t5\t105\t105\t2105\t2105\t10\t11\tZCAAAA\tGMAAAA\tOOOOxx\n8345\t319\t1\t1\t5\t5\t45\t345\t345\t3345\t8345\t90\t91\tZIAAAA\tHMAAAA\tVVVVxx\n1941\t320\t1\t1\t1\t1\t41\t941\t1941\t1941\t1941\t82\t83\tRWAAAA\tIMAAAA\tAAAAxx\n1765\t321\t1\t1\t5\t5\t65\t765\t1765\t1765\t1765\t130\t131\tXPAAAA\tJMAAAA\tHHHHxx\n9592\t322\t0\t0\t2\t12\t92\t592\t1592\t4592\t9592\t184\t185\tYEAAAA\tKMAAAA\tOOOOxx\n1694\t323\t0\t2\t4\t14\t94\t694\t1694\t1694\t1694\t188\t189\tENAAAA\tLMAAAA\tVVVVxx\n8940\t324\t0\t0\t0\t0\t40\t940\t940\t3940\t8940\t80\t81\tWFAAAA\tMMAAAA\tAAAAxx\n7264\t325\t0\t0\t4\t4\t64\t264\t1264\t2264\t7264\t128\t129\tKTAAAA\tNMAAAA\tHHHHxx\n4699\t326\t1\t3\t9\t19\t99\t699\t699\t4699\t4699\t198\t199\tTYAAAA\tOMAAAA\tOOOOxx\n4541\t327\t1\t1\t1\t1\t41\t541\t541\t4541\t4541\t82\t83\tRSAAAA\tPMAAAA\tVVVVxx\n5768\t328\t0\t0\t8\t8\t68\t768\t1768\t768\t5768\t136\t137\tWNAAAA\tQMAAAA\tAAAAxx\n6183\t329\t1\t3\t3\t3\t83\t183\t183\t1183\t6183\t166\t167\tVDAAAA\tRMAAAA\tHHHHxx\n7457\t330\t1\t1\t7\t17\t57\t457\t1457\t2457\t7457\t114\t115\tVAAAAA\tSMAAAA\tOOOOxx\n7317\t331\t1\t1\t7\t17\t17\t317\t1317\t2317\t7317\t34\t35\tLVAAAA\tTMAAAA\tVVVVxx\n1944\t332\t0\t0\t4\t4\t44\t944\t1944\t1944\t1944\t88\t89\tUWAAAA\tUMAAAA\tAAAAxx\n665\t333\t1\t1\t5\t5\t65\t665\t665\t665\t665\t130\t131\tPZAAAA\tVMAAAA\tHHHHxx\n5974\t334\t0\t2\t4\t14\t74\t974\t1974\t974\t5974\t148\t149\tUVAAAA\tWMAAAA\tOOOOxx\n7370\t335\t0\t2\t0\t10\t70\t370\t1370\t2370\t7370\t140\t141\tMXAAAA\tXMAAAA\tVVVVxx\n9196\t336\t0\t0\t6\t16\t96\t196\t1196\t4196\t9196\t192\t193\tSPAAAA\tYMAAAA\tAAAAxx\n6796\t337\t0\t0\t6\t16\t96\t796\t796\t1796\t6796\t192\t193\tKBAAAA\tZMAAAA\tHHHHxx\n6180\t338\t0\t0\t0\t0\t80\t180\t180\t1180\t6180\t160\t161\tSDAAAA\tANAAAA\tOOOOxx\n8557\t339\t1\t1\t7\t17\t57\t557\t557\t3557\t8557\t114\t115\tDRAAAA\tBNAAAA\tVVVVxx\n928\t340\t0\t0\t8\t8\t28\t928\t928\t928\t928\t56\t57\tSJAAAA\tCNAAAA\tAAAAxx\n6275\t341\t1\t3\t5\t15\t75\t275\t275\t1275\t6275\t150\t151\tJHAAAA\tDNAAAA\tHHHHxx\n409\t342\t1\t1\t9\t9\t9\t409\t409\t409\t409\t18\t19\tTPAAAA\tENAAAA\tOOOOxx\n6442\t343\t0\t2\t2\t2\t42\t442\t442\t1442\t6442\t84\t85\tUNAAAA\tFNAAAA\tVVVVxx\n5889\t344\t1\t1\t9\t9\t89\t889\t1889\t889\t5889\t178\t179\tNSAAAA\tGNAAAA\tAAAAxx\n5180\t345\t0\t0\t0\t0\t80\t180\t1180\t180\t5180\t160\t161\tGRAAAA\tHNAAAA\tHHHHxx\n1629\t346\t1\t1\t9\t9\t29\t629\t1629\t1629\t1629\t58\t59\tRKAAAA\tINAAAA\tOOOOxx\n6088\t347\t0\t0\t8\t8\t88\t88\t88\t1088\t6088\t176\t177\tEAAAAA\tJNAAAA\tVVVVxx\n5598\t348\t0\t2\t8\t18\t98\t598\t1598\t598\t5598\t196\t197\tIHAAAA\tKNAAAA\tAAAAxx\n1803\t349\t1\t3\t3\t3\t3\t803\t1803\t1803\t1803\t6\t7\tJRAAAA\tLNAAAA\tHHHHxx\n2330\t350\t0\t2\t0\t10\t30\t330\t330\t2330\t2330\t60\t61\tQLAAAA\tMNAAAA\tOOOOxx\n5901\t351\t1\t1\t1\t1\t1\t901\t1901\t901\t5901\t2\t3\tZSAAAA\tNNAAAA\tVVVVxx\n780\t352\t0\t0\t0\t0\t80\t780\t780\t780\t780\t160\t161\tAEAAAA\tONAAAA\tAAAAxx\n7171\t353\t1\t3\t1\t11\t71\t171\t1171\t2171\t7171\t142\t143\tVPAAAA\tPNAAAA\tHHHHxx\n8778\t354\t0\t2\t8\t18\t78\t778\t778\t3778\t8778\t156\t157\tQZAAAA\tQNAAAA\tOOOOxx\n6622\t355\t0\t2\t2\t2\t22\t622\t622\t1622\t6622\t44\t45\tSUAAAA\tRNAAAA\tVVVVxx\n9938\t356\t0\t2\t8\t18\t38\t938\t1938\t4938\t9938\t76\t77\tGSAAAA\tSNAAAA\tAAAAxx\n8254\t357\t0\t2\t4\t14\t54\t254\t254\t3254\t8254\t108\t109\tMFAAAA\tTNAAAA\tHHHHxx\n1951\t358\t1\t3\t1\t11\t51\t951\t1951\t1951\t1951\t102\t103\tBXAAAA\tUNAAAA\tOOOOxx\n1434\t359\t0\t2\t4\t14\t34\t434\t1434\t1434\t1434\t68\t69\tEDAAAA\tVNAAAA\tVVVVxx\n7539\t360\t1\t3\t9\t19\t39\t539\t1539\t2539\t7539\t78\t79\tZDAAAA\tWNAAAA\tAAAAxx\n600\t361\t0\t0\t0\t0\t0\t600\t600\t600\t600\t0\t1\tCXAAAA\tXNAAAA\tHHHHxx\n3122\t362\t0\t2\t2\t2\t22\t122\t1122\t3122\t3122\t44\t45\tCQAAAA\tYNAAAA\tOOOOxx\n5704\t363\t0\t0\t4\t4\t4\t704\t1704\t704\t5704\t8\t9\tKLAAAA\tZNAAAA\tVVVVxx\n6300\t364\t0\t0\t0\t0\t0\t300\t300\t1300\t6300\t0\t1\tIIAAAA\tAOAAAA\tAAAAxx\n4585\t365\t1\t1\t5\t5\t85\t585\t585\t4585\t4585\t170\t171\tJUAAAA\tBOAAAA\tHHHHxx\n6313\t366\t1\t1\t3\t13\t13\t313\t313\t1313\t6313\t26\t27\tVIAAAA\tCOAAAA\tOOOOxx\n3154\t367\t0\t2\t4\t14\t54\t154\t1154\t3154\t3154\t108\t109\tIRAAAA\tDOAAAA\tVVVVxx\n642\t368\t0\t2\t2\t2\t42\t642\t642\t642\t642\t84\t85\tSYAAAA\tEOAAAA\tAAAAxx\n7736\t369\t0\t0\t6\t16\t36\t736\t1736\t2736\t7736\t72\t73\tOLAAAA\tFOAAAA\tHHHHxx\n5087\t370\t1\t3\t7\t7\t87\t87\t1087\t87\t5087\t174\t175\tRNAAAA\tGOAAAA\tOOOOxx\n5708\t371\t0\t0\t8\t8\t8\t708\t1708\t708\t5708\t16\t17\tOLAAAA\tHOAAAA\tVVVVxx\n8169\t372\t1\t1\t9\t9\t69\t169\t169\t3169\t8169\t138\t139\tFCAAAA\tIOAAAA\tAAAAxx\n9768\t373\t0\t0\t8\t8\t68\t768\t1768\t4768\t9768\t136\t137\tSLAAAA\tJOAAAA\tHHHHxx\n3874\t374\t0\t2\t4\t14\t74\t874\t1874\t3874\t3874\t148\t149\tATAAAA\tKOAAAA\tOOOOxx\n6831\t375\t1\t3\t1\t11\t31\t831\t831\t1831\t6831\t62\t63\tTCAAAA\tLOAAAA\tVVVVxx\n18\t376\t0\t2\t8\t18\t18\t18\t18\t18\t18\t36\t37\tSAAAAA\tMOAAAA\tAAAAxx\n6375\t377\t1\t3\t5\t15\t75\t375\t375\t1375\t6375\t150\t151\tFLAAAA\tNOAAAA\tHHHHxx\n7106\t378\t0\t2\t6\t6\t6\t106\t1106\t2106\t7106\t12\t13\tINAAAA\tOOAAAA\tOOOOxx\n5926\t379\t0\t2\t6\t6\t26\t926\t1926\t926\t5926\t52\t53\tYTAAAA\tPOAAAA\tVVVVxx\n4956\t380\t0\t0\t6\t16\t56\t956\t956\t4956\t4956\t112\t113\tQIAAAA\tQOAAAA\tAAAAxx\n7042\t381\t0\t2\t2\t2\t42\t42\t1042\t2042\t7042\t84\t85\tWKAAAA\tROAAAA\tHHHHxx\n6043\t382\t1\t3\t3\t3\t43\t43\t43\t1043\t6043\t86\t87\tLYAAAA\tSOAAAA\tOOOOxx\n2084\t383\t0\t0\t4\t4\t84\t84\t84\t2084\t2084\t168\t169\tECAAAA\tTOAAAA\tVVVVxx\n6038\t384\t0\t2\t8\t18\t38\t38\t38\t1038\t6038\t76\t77\tGYAAAA\tUOAAAA\tAAAAxx\n7253\t385\t1\t1\t3\t13\t53\t253\t1253\t2253\t7253\t106\t107\tZSAAAA\tVOAAAA\tHHHHxx\n2061\t386\t1\t1\t1\t1\t61\t61\t61\t2061\t2061\t122\t123\tHBAAAA\tWOAAAA\tOOOOxx\n7800\t387\t0\t0\t0\t0\t0\t800\t1800\t2800\t7800\t0\t1\tAOAAAA\tXOAAAA\tVVVVxx\n4970\t388\t0\t2\t0\t10\t70\t970\t970\t4970\t4970\t140\t141\tEJAAAA\tYOAAAA\tAAAAxx\n8580\t389\t0\t0\t0\t0\t80\t580\t580\t3580\t8580\t160\t161\tASAAAA\tZOAAAA\tHHHHxx\n9173\t390\t1\t1\t3\t13\t73\t173\t1173\t4173\t9173\t146\t147\tVOAAAA\tAPAAAA\tOOOOxx\n8558\t391\t0\t2\t8\t18\t58\t558\t558\t3558\t8558\t116\t117\tERAAAA\tBPAAAA\tVVVVxx\n3897\t392\t1\t1\t7\t17\t97\t897\t1897\t3897\t3897\t194\t195\tXTAAAA\tCPAAAA\tAAAAxx\n5069\t393\t1\t1\t9\t9\t69\t69\t1069\t69\t5069\t138\t139\tZMAAAA\tDPAAAA\tHHHHxx\n2301\t394\t1\t1\t1\t1\t1\t301\t301\t2301\t2301\t2\t3\tNKAAAA\tEPAAAA\tOOOOxx\n9863\t395\t1\t3\t3\t3\t63\t863\t1863\t4863\t9863\t126\t127\tJPAAAA\tFPAAAA\tVVVVxx\n5733\t396\t1\t1\t3\t13\t33\t733\t1733\t733\t5733\t66\t67\tNMAAAA\tGPAAAA\tAAAAxx\n2338\t397\t0\t2\t8\t18\t38\t338\t338\t2338\t2338\t76\t77\tYLAAAA\tHPAAAA\tHHHHxx\n9639\t398\t1\t3\t9\t19\t39\t639\t1639\t4639\t9639\t78\t79\tTGAAAA\tIPAAAA\tOOOOxx\n1139\t399\t1\t3\t9\t19\t39\t139\t1139\t1139\t1139\t78\t79\tVRAAAA\tJPAAAA\tVVVVxx\n2293\t400\t1\t1\t3\t13\t93\t293\t293\t2293\t2293\t186\t187\tFKAAAA\tKPAAAA\tAAAAxx\n6125\t401\t1\t1\t5\t5\t25\t125\t125\t1125\t6125\t50\t51\tPBAAAA\tLPAAAA\tHHHHxx\n5374\t402\t0\t2\t4\t14\t74\t374\t1374\t374\t5374\t148\t149\tSYAAAA\tMPAAAA\tOOOOxx\n7216\t403\t0\t0\t6\t16\t16\t216\t1216\t2216\t7216\t32\t33\tORAAAA\tNPAAAA\tVVVVxx\n2285\t404\t1\t1\t5\t5\t85\t285\t285\t2285\t2285\t170\t171\tXJAAAA\tOPAAAA\tAAAAxx\n2387\t405\t1\t3\t7\t7\t87\t387\t387\t2387\t2387\t174\t175\tVNAAAA\tPPAAAA\tHHHHxx\n5015\t406\t1\t3\t5\t15\t15\t15\t1015\t15\t5015\t30\t31\tXKAAAA\tQPAAAA\tOOOOxx\n2087\t407\t1\t3\t7\t7\t87\t87\t87\t2087\t2087\t174\t175\tHCAAAA\tRPAAAA\tVVVVxx\n4938\t408\t0\t2\t8\t18\t38\t938\t938\t4938\t4938\t76\t77\tYHAAAA\tSPAAAA\tAAAAxx\n3635\t409\t1\t3\t5\t15\t35\t635\t1635\t3635\t3635\t70\t71\tVJAAAA\tTPAAAA\tHHHHxx\n7737\t410\t1\t1\t7\t17\t37\t737\t1737\t2737\t7737\t74\t75\tPLAAAA\tUPAAAA\tOOOOxx\n8056\t411\t0\t0\t6\t16\t56\t56\t56\t3056\t8056\t112\t113\tWXAAAA\tVPAAAA\tVVVVxx\n4502\t412\t0\t2\t2\t2\t2\t502\t502\t4502\t4502\t4\t5\tERAAAA\tWPAAAA\tAAAAxx\n54\t413\t0\t2\t4\t14\t54\t54\t54\t54\t54\t108\t109\tCCAAAA\tXPAAAA\tHHHHxx\n3182\t414\t0\t2\t2\t2\t82\t182\t1182\t3182\t3182\t164\t165\tKSAAAA\tYPAAAA\tOOOOxx\n3718\t415\t0\t2\t8\t18\t18\t718\t1718\t3718\t3718\t36\t37\tANAAAA\tZPAAAA\tVVVVxx\n3989\t416\t1\t1\t9\t9\t89\t989\t1989\t3989\t3989\t178\t179\tLXAAAA\tAQAAAA\tAAAAxx\n8028\t417\t0\t0\t8\t8\t28\t28\t28\t3028\t8028\t56\t57\tUWAAAA\tBQAAAA\tHHHHxx\n1426\t418\t0\t2\t6\t6\t26\t426\t1426\t1426\t1426\t52\t53\tWCAAAA\tCQAAAA\tOOOOxx\n3801\t419\t1\t1\t1\t1\t1\t801\t1801\t3801\t3801\t2\t3\tFQAAAA\tDQAAAA\tVVVVxx\n241\t420\t1\t1\t1\t1\t41\t241\t241\t241\t241\t82\t83\tHJAAAA\tEQAAAA\tAAAAxx\n8000\t421\t0\t0\t0\t0\t0\t0\t0\t3000\t8000\t0\t1\tSVAAAA\tFQAAAA\tHHHHxx\n8357\t422\t1\t1\t7\t17\t57\t357\t357\t3357\t8357\t114\t115\tLJAAAA\tGQAAAA\tOOOOxx\n7548\t423\t0\t0\t8\t8\t48\t548\t1548\t2548\t7548\t96\t97\tIEAAAA\tHQAAAA\tVVVVxx\n7307\t424\t1\t3\t7\t7\t7\t307\t1307\t2307\t7307\t14\t15\tBVAAAA\tIQAAAA\tAAAAxx\n2275\t425\t1\t3\t5\t15\t75\t275\t275\t2275\t2275\t150\t151\tNJAAAA\tJQAAAA\tHHHHxx\n2718\t426\t0\t2\t8\t18\t18\t718\t718\t2718\t2718\t36\t37\tOAAAAA\tKQAAAA\tOOOOxx\n7068\t427\t0\t0\t8\t8\t68\t68\t1068\t2068\t7068\t136\t137\tWLAAAA\tLQAAAA\tVVVVxx\n3181\t428\t1\t1\t1\t1\t81\t181\t1181\t3181\t3181\t162\t163\tJSAAAA\tMQAAAA\tAAAAxx\n749\t429\t1\t1\t9\t9\t49\t749\t749\t749\t749\t98\t99\tVCAAAA\tNQAAAA\tHHHHxx\n5195\t430\t1\t3\t5\t15\t95\t195\t1195\t195\t5195\t190\t191\tVRAAAA\tOQAAAA\tOOOOxx\n6136\t431\t0\t0\t6\t16\t36\t136\t136\t1136\t6136\t72\t73\tACAAAA\tPQAAAA\tVVVVxx\n8012\t432\t0\t0\t2\t12\t12\t12\t12\t3012\t8012\t24\t25\tEWAAAA\tQQAAAA\tAAAAxx\n3957\t433\t1\t1\t7\t17\t57\t957\t1957\t3957\t3957\t114\t115\tFWAAAA\tRQAAAA\tHHHHxx\n3083\t434\t1\t3\t3\t3\t83\t83\t1083\t3083\t3083\t166\t167\tPOAAAA\tSQAAAA\tOOOOxx\n9997\t435\t1\t1\t7\t17\t97\t997\t1997\t4997\t9997\t194\t195\tNUAAAA\tTQAAAA\tVVVVxx\n3299\t436\t1\t3\t9\t19\t99\t299\t1299\t3299\t3299\t198\t199\tXWAAAA\tUQAAAA\tAAAAxx\n846\t437\t0\t2\t6\t6\t46\t846\t846\t846\t846\t92\t93\tOGAAAA\tVQAAAA\tHHHHxx\n2985\t438\t1\t1\t5\t5\t85\t985\t985\t2985\t2985\t170\t171\tVKAAAA\tWQAAAA\tOOOOxx\n9238\t439\t0\t2\t8\t18\t38\t238\t1238\t4238\t9238\t76\t77\tIRAAAA\tXQAAAA\tVVVVxx\n1403\t440\t1\t3\t3\t3\t3\t403\t1403\t1403\t1403\t6\t7\tZBAAAA\tYQAAAA\tAAAAxx\n5563\t441\t1\t3\t3\t3\t63\t563\t1563\t563\t5563\t126\t127\tZFAAAA\tZQAAAA\tHHHHxx\n7965\t442\t1\t1\t5\t5\t65\t965\t1965\t2965\t7965\t130\t131\tJUAAAA\tARAAAA\tOOOOxx\n4512\t443\t0\t0\t2\t12\t12\t512\t512\t4512\t4512\t24\t25\tORAAAA\tBRAAAA\tVVVVxx\n9730\t444\t0\t2\t0\t10\t30\t730\t1730\t4730\t9730\t60\t61\tGKAAAA\tCRAAAA\tAAAAxx\n1129\t445\t1\t1\t9\t9\t29\t129\t1129\t1129\t1129\t58\t59\tLRAAAA\tDRAAAA\tHHHHxx\n2624\t446\t0\t0\t4\t4\t24\t624\t624\t2624\t2624\t48\t49\tYWAAAA\tERAAAA\tOOOOxx\n8178\t447\t0\t2\t8\t18\t78\t178\t178\t3178\t8178\t156\t157\tOCAAAA\tFRAAAA\tVVVVxx\n6468\t448\t0\t0\t8\t8\t68\t468\t468\t1468\t6468\t136\t137\tUOAAAA\tGRAAAA\tAAAAxx\n3027\t449\t1\t3\t7\t7\t27\t27\t1027\t3027\t3027\t54\t55\tLMAAAA\tHRAAAA\tHHHHxx\n3845\t450\t1\t1\t5\t5\t45\t845\t1845\t3845\t3845\t90\t91\tXRAAAA\tIRAAAA\tOOOOxx\n786\t451\t0\t2\t6\t6\t86\t786\t786\t786\t786\t172\t173\tGEAAAA\tJRAAAA\tVVVVxx\n4971\t452\t1\t3\t1\t11\t71\t971\t971\t4971\t4971\t142\t143\tFJAAAA\tKRAAAA\tAAAAxx\n1542\t453\t0\t2\t2\t2\t42\t542\t1542\t1542\t1542\t84\t85\tIHAAAA\tLRAAAA\tHHHHxx\n7967\t454\t1\t3\t7\t7\t67\t967\t1967\t2967\t7967\t134\t135\tLUAAAA\tMRAAAA\tOOOOxx\n443\t455\t1\t3\t3\t3\t43\t443\t443\t443\t443\t86\t87\tBRAAAA\tNRAAAA\tVVVVxx\n7318\t456\t0\t2\t8\t18\t18\t318\t1318\t2318\t7318\t36\t37\tMVAAAA\tORAAAA\tAAAAxx\n4913\t457\t1\t1\t3\t13\t13\t913\t913\t4913\t4913\t26\t27\tZGAAAA\tPRAAAA\tHHHHxx\n9466\t458\t0\t2\t6\t6\t66\t466\t1466\t4466\t9466\t132\t133\tCAAAAA\tQRAAAA\tOOOOxx\n7866\t459\t0\t2\t6\t6\t66\t866\t1866\t2866\t7866\t132\t133\tOQAAAA\tRRAAAA\tVVVVxx\n784\t460\t0\t0\t4\t4\t84\t784\t784\t784\t784\t168\t169\tEEAAAA\tSRAAAA\tAAAAxx\n9040\t461\t0\t0\t0\t0\t40\t40\t1040\t4040\t9040\t80\t81\tSJAAAA\tTRAAAA\tHHHHxx\n3954\t462\t0\t2\t4\t14\t54\t954\t1954\t3954\t3954\t108\t109\tCWAAAA\tURAAAA\tOOOOxx\n4183\t463\t1\t3\t3\t3\t83\t183\t183\t4183\t4183\t166\t167\tXEAAAA\tVRAAAA\tVVVVxx\n3608\t464\t0\t0\t8\t8\t8\t608\t1608\t3608\t3608\t16\t17\tUIAAAA\tWRAAAA\tAAAAxx\n7630\t465\t0\t2\t0\t10\t30\t630\t1630\t2630\t7630\t60\t61\tMHAAAA\tXRAAAA\tHHHHxx\n590\t466\t0\t2\t0\t10\t90\t590\t590\t590\t590\t180\t181\tSWAAAA\tYRAAAA\tOOOOxx\n3453\t467\t1\t1\t3\t13\t53\t453\t1453\t3453\t3453\t106\t107\tVCAAAA\tZRAAAA\tVVVVxx\n7757\t468\t1\t1\t7\t17\t57\t757\t1757\t2757\t7757\t114\t115\tJMAAAA\tASAAAA\tAAAAxx\n7394\t469\t0\t2\t4\t14\t94\t394\t1394\t2394\t7394\t188\t189\tKYAAAA\tBSAAAA\tHHHHxx\n396\t470\t0\t0\t6\t16\t96\t396\t396\t396\t396\t192\t193\tGPAAAA\tCSAAAA\tOOOOxx\n7873\t471\t1\t1\t3\t13\t73\t873\t1873\t2873\t7873\t146\t147\tVQAAAA\tDSAAAA\tVVVVxx\n1553\t472\t1\t1\t3\t13\t53\t553\t1553\t1553\t1553\t106\t107\tTHAAAA\tESAAAA\tAAAAxx\n598\t473\t0\t2\t8\t18\t98\t598\t598\t598\t598\t196\t197\tAXAAAA\tFSAAAA\tHHHHxx\n7191\t474\t1\t3\t1\t11\t91\t191\t1191\t2191\t7191\t182\t183\tPQAAAA\tGSAAAA\tOOOOxx\n8116\t475\t0\t0\t6\t16\t16\t116\t116\t3116\t8116\t32\t33\tEAAAAA\tHSAAAA\tVVVVxx\n2516\t476\t0\t0\t6\t16\t16\t516\t516\t2516\t2516\t32\t33\tUSAAAA\tISAAAA\tAAAAxx\n7750\t477\t0\t2\t0\t10\t50\t750\t1750\t2750\t7750\t100\t101\tCMAAAA\tJSAAAA\tHHHHxx\n6625\t478\t1\t1\t5\t5\t25\t625\t625\t1625\t6625\t50\t51\tVUAAAA\tKSAAAA\tOOOOxx\n8838\t479\t0\t2\t8\t18\t38\t838\t838\t3838\t8838\t76\t77\tYBAAAA\tLSAAAA\tVVVVxx\n4636\t480\t0\t0\t6\t16\t36\t636\t636\t4636\t4636\t72\t73\tIWAAAA\tMSAAAA\tAAAAxx\n7627\t481\t1\t3\t7\t7\t27\t627\t1627\t2627\t7627\t54\t55\tJHAAAA\tNSAAAA\tHHHHxx\n1690\t482\t0\t2\t0\t10\t90\t690\t1690\t1690\t1690\t180\t181\tANAAAA\tOSAAAA\tOOOOxx\n7071\t483\t1\t3\t1\t11\t71\t71\t1071\t2071\t7071\t142\t143\tZLAAAA\tPSAAAA\tVVVVxx\n2081\t484\t1\t1\t1\t1\t81\t81\t81\t2081\t2081\t162\t163\tBCAAAA\tQSAAAA\tAAAAxx\n7138\t485\t0\t2\t8\t18\t38\t138\t1138\t2138\t7138\t76\t77\tOOAAAA\tRSAAAA\tHHHHxx\n864\t486\t0\t0\t4\t4\t64\t864\t864\t864\t864\t128\t129\tGHAAAA\tSSAAAA\tOOOOxx\n6392\t487\t0\t0\t2\t12\t92\t392\t392\t1392\t6392\t184\t185\tWLAAAA\tTSAAAA\tVVVVxx\n7544\t488\t0\t0\t4\t4\t44\t544\t1544\t2544\t7544\t88\t89\tEEAAAA\tUSAAAA\tAAAAxx\n5438\t489\t0\t2\t8\t18\t38\t438\t1438\t438\t5438\t76\t77\tEBAAAA\tVSAAAA\tHHHHxx\n7099\t490\t1\t3\t9\t19\t99\t99\t1099\t2099\t7099\t198\t199\tBNAAAA\tWSAAAA\tOOOOxx\n5157\t491\t1\t1\t7\t17\t57\t157\t1157\t157\t5157\t114\t115\tJQAAAA\tXSAAAA\tVVVVxx\n3391\t492\t1\t3\t1\t11\t91\t391\t1391\t3391\t3391\t182\t183\tLAAAAA\tYSAAAA\tAAAAxx\n3805\t493\t1\t1\t5\t5\t5\t805\t1805\t3805\t3805\t10\t11\tJQAAAA\tZSAAAA\tHHHHxx\n2110\t494\t0\t2\t0\t10\t10\t110\t110\t2110\t2110\t20\t21\tEDAAAA\tATAAAA\tOOOOxx\n3176\t495\t0\t0\t6\t16\t76\t176\t1176\t3176\t3176\t152\t153\tESAAAA\tBTAAAA\tVVVVxx\n5918\t496\t0\t2\t8\t18\t18\t918\t1918\t918\t5918\t36\t37\tQTAAAA\tCTAAAA\tAAAAxx\n1218\t497\t0\t2\t8\t18\t18\t218\t1218\t1218\t1218\t36\t37\tWUAAAA\tDTAAAA\tHHHHxx\n6683\t498\t1\t3\t3\t3\t83\t683\t683\t1683\t6683\t166\t167\tBXAAAA\tETAAAA\tOOOOxx\n914\t499\t0\t2\t4\t14\t14\t914\t914\t914\t914\t28\t29\tEJAAAA\tFTAAAA\tVVVVxx\n4737\t500\t1\t1\t7\t17\t37\t737\t737\t4737\t4737\t74\t75\tFAAAAA\tGTAAAA\tAAAAxx\n7286\t501\t0\t2\t6\t6\t86\t286\t1286\t2286\t7286\t172\t173\tGUAAAA\tHTAAAA\tHHHHxx\n9975\t502\t1\t3\t5\t15\t75\t975\t1975\t4975\t9975\t150\t151\tRTAAAA\tITAAAA\tOOOOxx\n8030\t503\t0\t2\t0\t10\t30\t30\t30\t3030\t8030\t60\t61\tWWAAAA\tJTAAAA\tVVVVxx\n7364\t504\t0\t0\t4\t4\t64\t364\t1364\t2364\t7364\t128\t129\tGXAAAA\tKTAAAA\tAAAAxx\n1389\t505\t1\t1\t9\t9\t89\t389\t1389\t1389\t1389\t178\t179\tLBAAAA\tLTAAAA\tHHHHxx\n4025\t506\t1\t1\t5\t5\t25\t25\t25\t4025\t4025\t50\t51\tVYAAAA\tMTAAAA\tOOOOxx\n4835\t507\t1\t3\t5\t15\t35\t835\t835\t4835\t4835\t70\t71\tZDAAAA\tNTAAAA\tVVVVxx\n8045\t508\t1\t1\t5\t5\t45\t45\t45\t3045\t8045\t90\t91\tLXAAAA\tOTAAAA\tAAAAxx\n1864\t509\t0\t0\t4\t4\t64\t864\t1864\t1864\t1864\t128\t129\tSTAAAA\tPTAAAA\tHHHHxx\n3313\t510\t1\t1\t3\t13\t13\t313\t1313\t3313\t3313\t26\t27\tLXAAAA\tQTAAAA\tOOOOxx\n2384\t511\t0\t0\t4\t4\t84\t384\t384\t2384\t2384\t168\t169\tSNAAAA\tRTAAAA\tVVVVxx\n6115\t512\t1\t3\t5\t15\t15\t115\t115\t1115\t6115\t30\t31\tFBAAAA\tSTAAAA\tAAAAxx\n5705\t513\t1\t1\t5\t5\t5\t705\t1705\t705\t5705\t10\t11\tLLAAAA\tTTAAAA\tHHHHxx\n9269\t514\t1\t1\t9\t9\t69\t269\t1269\t4269\t9269\t138\t139\tNSAAAA\tUTAAAA\tOOOOxx\n3379\t515\t1\t3\t9\t19\t79\t379\t1379\t3379\t3379\t158\t159\tZZAAAA\tVTAAAA\tVVVVxx\n8205\t516\t1\t1\t5\t5\t5\t205\t205\t3205\t8205\t10\t11\tPDAAAA\tWTAAAA\tAAAAxx\n6575\t517\t1\t3\t5\t15\t75\t575\t575\t1575\t6575\t150\t151\tXSAAAA\tXTAAAA\tHHHHxx\n486\t518\t0\t2\t6\t6\t86\t486\t486\t486\t486\t172\t173\tSSAAAA\tYTAAAA\tOOOOxx\n4894\t519\t0\t2\t4\t14\t94\t894\t894\t4894\t4894\t188\t189\tGGAAAA\tZTAAAA\tVVVVxx\n3090\t520\t0\t2\t0\t10\t90\t90\t1090\t3090\t3090\t180\t181\tWOAAAA\tAUAAAA\tAAAAxx\n759\t521\t1\t3\t9\t19\t59\t759\t759\t759\t759\t118\t119\tFDAAAA\tBUAAAA\tHHHHxx\n4864\t522\t0\t0\t4\t4\t64\t864\t864\t4864\t4864\t128\t129\tCFAAAA\tCUAAAA\tOOOOxx\n4083\t523\t1\t3\t3\t3\t83\t83\t83\t4083\t4083\t166\t167\tBBAAAA\tDUAAAA\tVVVVxx\n6918\t524\t0\t2\t8\t18\t18\t918\t918\t1918\t6918\t36\t37\tCGAAAA\tEUAAAA\tAAAAxx\n8146\t525\t0\t2\t6\t6\t46\t146\t146\t3146\t8146\t92\t93\tIBAAAA\tFUAAAA\tHHHHxx\n1523\t526\t1\t3\t3\t3\t23\t523\t1523\t1523\t1523\t46\t47\tPGAAAA\tGUAAAA\tOOOOxx\n1591\t527\t1\t3\t1\t11\t91\t591\t1591\t1591\t1591\t182\t183\tFJAAAA\tHUAAAA\tVVVVxx\n3343\t528\t1\t3\t3\t3\t43\t343\t1343\t3343\t3343\t86\t87\tPYAAAA\tIUAAAA\tAAAAxx\n1391\t529\t1\t3\t1\t11\t91\t391\t1391\t1391\t1391\t182\t183\tNBAAAA\tJUAAAA\tHHHHxx\n9963\t530\t1\t3\t3\t3\t63\t963\t1963\t4963\t9963\t126\t127\tFTAAAA\tKUAAAA\tOOOOxx\n2423\t531\t1\t3\t3\t3\t23\t423\t423\t2423\t2423\t46\t47\tFPAAAA\tLUAAAA\tVVVVxx\n1822\t532\t0\t2\t2\t2\t22\t822\t1822\t1822\t1822\t44\t45\tCSAAAA\tMUAAAA\tAAAAxx\n8706\t533\t0\t2\t6\t6\t6\t706\t706\t3706\t8706\t12\t13\tWWAAAA\tNUAAAA\tHHHHxx\n3001\t534\t1\t1\t1\t1\t1\t1\t1001\t3001\t3001\t2\t3\tLLAAAA\tOUAAAA\tOOOOxx\n6707\t535\t1\t3\t7\t7\t7\t707\t707\t1707\t6707\t14\t15\tZXAAAA\tPUAAAA\tVVVVxx\n2121\t536\t1\t1\t1\t1\t21\t121\t121\t2121\t2121\t42\t43\tPDAAAA\tQUAAAA\tAAAAxx\n5814\t537\t0\t2\t4\t14\t14\t814\t1814\t814\t5814\t28\t29\tQPAAAA\tRUAAAA\tHHHHxx\n2659\t538\t1\t3\t9\t19\t59\t659\t659\t2659\t2659\t118\t119\tHYAAAA\tSUAAAA\tOOOOxx\n2016\t539\t0\t0\t6\t16\t16\t16\t16\t2016\t2016\t32\t33\tOZAAAA\tTUAAAA\tVVVVxx\n4286\t540\t0\t2\t6\t6\t86\t286\t286\t4286\t4286\t172\t173\tWIAAAA\tUUAAAA\tAAAAxx\n9205\t541\t1\t1\t5\t5\t5\t205\t1205\t4205\t9205\t10\t11\tBQAAAA\tVUAAAA\tHHHHxx\n3496\t542\t0\t0\t6\t16\t96\t496\t1496\t3496\t3496\t192\t193\tMEAAAA\tWUAAAA\tOOOOxx\n5333\t543\t1\t1\t3\t13\t33\t333\t1333\t333\t5333\t66\t67\tDXAAAA\tXUAAAA\tVVVVxx\n5571\t544\t1\t3\t1\t11\t71\t571\t1571\t571\t5571\t142\t143\tHGAAAA\tYUAAAA\tAAAAxx\n1696\t545\t0\t0\t6\t16\t96\t696\t1696\t1696\t1696\t192\t193\tGNAAAA\tZUAAAA\tHHHHxx\n4871\t546\t1\t3\t1\t11\t71\t871\t871\t4871\t4871\t142\t143\tJFAAAA\tAVAAAA\tOOOOxx\n4852\t547\t0\t0\t2\t12\t52\t852\t852\t4852\t4852\t104\t105\tQEAAAA\tBVAAAA\tVVVVxx\n8483\t548\t1\t3\t3\t3\t83\t483\t483\t3483\t8483\t166\t167\tHOAAAA\tCVAAAA\tAAAAxx\n1376\t549\t0\t0\t6\t16\t76\t376\t1376\t1376\t1376\t152\t153\tYAAAAA\tDVAAAA\tHHHHxx\n5456\t550\t0\t0\t6\t16\t56\t456\t1456\t456\t5456\t112\t113\tWBAAAA\tEVAAAA\tOOOOxx\n499\t551\t1\t3\t9\t19\t99\t499\t499\t499\t499\t198\t199\tFTAAAA\tFVAAAA\tVVVVxx\n3463\t552\t1\t3\t3\t3\t63\t463\t1463\t3463\t3463\t126\t127\tFDAAAA\tGVAAAA\tAAAAxx\n7426\t553\t0\t2\t6\t6\t26\t426\t1426\t2426\t7426\t52\t53\tQZAAAA\tHVAAAA\tHHHHxx\n5341\t554\t1\t1\t1\t1\t41\t341\t1341\t341\t5341\t82\t83\tLXAAAA\tIVAAAA\tOOOOxx\n9309\t555\t1\t1\t9\t9\t9\t309\t1309\t4309\t9309\t18\t19\tBUAAAA\tJVAAAA\tVVVVxx\n2055\t556\t1\t3\t5\t15\t55\t55\t55\t2055\t2055\t110\t111\tBBAAAA\tKVAAAA\tAAAAxx\n2199\t557\t1\t3\t9\t19\t99\t199\t199\t2199\t2199\t198\t199\tPGAAAA\tLVAAAA\tHHHHxx\n7235\t558\t1\t3\t5\t15\t35\t235\t1235\t2235\t7235\t70\t71\tHSAAAA\tMVAAAA\tOOOOxx\n8661\t559\t1\t1\t1\t1\t61\t661\t661\t3661\t8661\t122\t123\tDVAAAA\tNVAAAA\tVVVVxx\n9494\t560\t0\t2\t4\t14\t94\t494\t1494\t4494\t9494\t188\t189\tEBAAAA\tOVAAAA\tAAAAxx\n935\t561\t1\t3\t5\t15\t35\t935\t935\t935\t935\t70\t71\tZJAAAA\tPVAAAA\tHHHHxx\n7044\t562\t0\t0\t4\t4\t44\t44\t1044\t2044\t7044\t88\t89\tYKAAAA\tQVAAAA\tOOOOxx\n1974\t563\t0\t2\t4\t14\t74\t974\t1974\t1974\t1974\t148\t149\tYXAAAA\tRVAAAA\tVVVVxx\n9679\t564\t1\t3\t9\t19\t79\t679\t1679\t4679\t9679\t158\t159\tHIAAAA\tSVAAAA\tAAAAxx\n9822\t565\t0\t2\t2\t2\t22\t822\t1822\t4822\t9822\t44\t45\tUNAAAA\tTVAAAA\tHHHHxx\n4088\t566\t0\t0\t8\t8\t88\t88\t88\t4088\t4088\t176\t177\tGBAAAA\tUVAAAA\tOOOOxx\n1749\t567\t1\t1\t9\t9\t49\t749\t1749\t1749\t1749\t98\t99\tHPAAAA\tVVAAAA\tVVVVxx\n2116\t568\t0\t0\t6\t16\t16\t116\t116\t2116\t2116\t32\t33\tKDAAAA\tWVAAAA\tAAAAxx\n976\t569\t0\t0\t6\t16\t76\t976\t976\t976\t976\t152\t153\tOLAAAA\tXVAAAA\tHHHHxx\n8689\t570\t1\t1\t9\t9\t89\t689\t689\t3689\t8689\t178\t179\tFWAAAA\tYVAAAA\tOOOOxx\n2563\t571\t1\t3\t3\t3\t63\t563\t563\t2563\t2563\t126\t127\tPUAAAA\tZVAAAA\tVVVVxx\n7195\t572\t1\t3\t5\t15\t95\t195\t1195\t2195\t7195\t190\t191\tTQAAAA\tAWAAAA\tAAAAxx\n9985\t573\t1\t1\t5\t5\t85\t985\t1985\t4985\t9985\t170\t171\tBUAAAA\tBWAAAA\tHHHHxx\n7699\t574\t1\t3\t9\t19\t99\t699\t1699\t2699\t7699\t198\t199\tDKAAAA\tCWAAAA\tOOOOxx\n5311\t575\t1\t3\t1\t11\t11\t311\t1311\t311\t5311\t22\t23\tHWAAAA\tDWAAAA\tVVVVxx\n295\t576\t1\t3\t5\t15\t95\t295\t295\t295\t295\t190\t191\tJLAAAA\tEWAAAA\tAAAAxx\n8214\t577\t0\t2\t4\t14\t14\t214\t214\t3214\t8214\t28\t29\tYDAAAA\tFWAAAA\tHHHHxx\n3275\t578\t1\t3\t5\t15\t75\t275\t1275\t3275\t3275\t150\t151\tZVAAAA\tGWAAAA\tOOOOxx\n9646\t579\t0\t2\t6\t6\t46\t646\t1646\t4646\t9646\t92\t93\tAHAAAA\tHWAAAA\tVVVVxx\n1908\t580\t0\t0\t8\t8\t8\t908\t1908\t1908\t1908\t16\t17\tKVAAAA\tIWAAAA\tAAAAxx\n3858\t581\t0\t2\t8\t18\t58\t858\t1858\t3858\t3858\t116\t117\tKSAAAA\tJWAAAA\tHHHHxx\n9362\t582\t0\t2\t2\t2\t62\t362\t1362\t4362\t9362\t124\t125\tCWAAAA\tKWAAAA\tOOOOxx\n9307\t583\t1\t3\t7\t7\t7\t307\t1307\t4307\t9307\t14\t15\tZTAAAA\tLWAAAA\tVVVVxx\n6124\t584\t0\t0\t4\t4\t24\t124\t124\t1124\t6124\t48\t49\tOBAAAA\tMWAAAA\tAAAAxx\n2405\t585\t1\t1\t5\t5\t5\t405\t405\t2405\t2405\t10\t11\tNOAAAA\tNWAAAA\tHHHHxx\n8422\t586\t0\t2\t2\t2\t22\t422\t422\t3422\t8422\t44\t45\tYLAAAA\tOWAAAA\tOOOOxx\n393\t587\t1\t1\t3\t13\t93\t393\t393\t393\t393\t186\t187\tDPAAAA\tPWAAAA\tVVVVxx\n8973\t588\t1\t1\t3\t13\t73\t973\t973\t3973\t8973\t146\t147\tDHAAAA\tQWAAAA\tAAAAxx\n5171\t589\t1\t3\t1\t11\t71\t171\t1171\t171\t5171\t142\t143\tXQAAAA\tRWAAAA\tHHHHxx\n4929\t590\t1\t1\t9\t9\t29\t929\t929\t4929\t4929\t58\t59\tPHAAAA\tSWAAAA\tOOOOxx\n6935\t591\t1\t3\t5\t15\t35\t935\t935\t1935\t6935\t70\t71\tTGAAAA\tTWAAAA\tVVVVxx\n8584\t592\t0\t0\t4\t4\t84\t584\t584\t3584\t8584\t168\t169\tESAAAA\tUWAAAA\tAAAAxx\n1035\t593\t1\t3\t5\t15\t35\t35\t1035\t1035\t1035\t70\t71\tVNAAAA\tVWAAAA\tHHHHxx\n3734\t594\t0\t2\t4\t14\t34\t734\t1734\t3734\t3734\t68\t69\tQNAAAA\tWWAAAA\tOOOOxx\n1458\t595\t0\t2\t8\t18\t58\t458\t1458\t1458\t1458\t116\t117\tCEAAAA\tXWAAAA\tVVVVxx\n8746\t596\t0\t2\t6\t6\t46\t746\t746\t3746\t8746\t92\t93\tKYAAAA\tYWAAAA\tAAAAxx\n1677\t597\t1\t1\t7\t17\t77\t677\t1677\t1677\t1677\t154\t155\tNMAAAA\tZWAAAA\tHHHHxx\n8502\t598\t0\t2\t2\t2\t2\t502\t502\t3502\t8502\t4\t5\tAPAAAA\tAXAAAA\tOOOOxx\n7752\t599\t0\t0\t2\t12\t52\t752\t1752\t2752\t7752\t104\t105\tEMAAAA\tBXAAAA\tVVVVxx\n2556\t600\t0\t0\t6\t16\t56\t556\t556\t2556\t2556\t112\t113\tIUAAAA\tCXAAAA\tAAAAxx\n6426\t601\t0\t2\t6\t6\t26\t426\t426\t1426\t6426\t52\t53\tENAAAA\tDXAAAA\tHHHHxx\n8420\t602\t0\t0\t0\t0\t20\t420\t420\t3420\t8420\t40\t41\tWLAAAA\tEXAAAA\tOOOOxx\n4462\t603\t0\t2\t2\t2\t62\t462\t462\t4462\t4462\t124\t125\tQPAAAA\tFXAAAA\tVVVVxx\n1378\t604\t0\t2\t8\t18\t78\t378\t1378\t1378\t1378\t156\t157\tABAAAA\tGXAAAA\tAAAAxx\n1387\t605\t1\t3\t7\t7\t87\t387\t1387\t1387\t1387\t174\t175\tJBAAAA\tHXAAAA\tHHHHxx\n8094\t606\t0\t2\t4\t14\t94\t94\t94\t3094\t8094\t188\t189\tIZAAAA\tIXAAAA\tOOOOxx\n7247\t607\t1\t3\t7\t7\t47\t247\t1247\t2247\t7247\t94\t95\tTSAAAA\tJXAAAA\tVVVVxx\n4261\t608\t1\t1\t1\t1\t61\t261\t261\t4261\t4261\t122\t123\tXHAAAA\tKXAAAA\tAAAAxx\n5029\t609\t1\t1\t9\t9\t29\t29\t1029\t29\t5029\t58\t59\tLLAAAA\tLXAAAA\tHHHHxx\n3625\t610\t1\t1\t5\t5\t25\t625\t1625\t3625\t3625\t50\t51\tLJAAAA\tMXAAAA\tOOOOxx\n8068\t611\t0\t0\t8\t8\t68\t68\t68\t3068\t8068\t136\t137\tIYAAAA\tNXAAAA\tVVVVxx\n102\t612\t0\t2\t2\t2\t2\t102\t102\t102\t102\t4\t5\tYDAAAA\tOXAAAA\tAAAAxx\n5596\t613\t0\t0\t6\t16\t96\t596\t1596\t596\t5596\t192\t193\tGHAAAA\tPXAAAA\tHHHHxx\n5872\t614\t0\t0\t2\t12\t72\t872\t1872\t872\t5872\t144\t145\tWRAAAA\tQXAAAA\tOOOOxx\n4742\t615\t0\t2\t2\t2\t42\t742\t742\t4742\t4742\t84\t85\tKAAAAA\tRXAAAA\tVVVVxx\n2117\t616\t1\t1\t7\t17\t17\t117\t117\t2117\t2117\t34\t35\tLDAAAA\tSXAAAA\tAAAAxx\n3945\t617\t1\t1\t5\t5\t45\t945\t1945\t3945\t3945\t90\t91\tTVAAAA\tTXAAAA\tHHHHxx\n7483\t618\t1\t3\t3\t3\t83\t483\t1483\t2483\t7483\t166\t167\tVBAAAA\tUXAAAA\tOOOOxx\n4455\t619\t1\t3\t5\t15\t55\t455\t455\t4455\t4455\t110\t111\tJPAAAA\tVXAAAA\tVVVVxx\n609\t620\t1\t1\t9\t9\t9\t609\t609\t609\t609\t18\t19\tLXAAAA\tWXAAAA\tAAAAxx\n9829\t621\t1\t1\t9\t9\t29\t829\t1829\t4829\t9829\t58\t59\tBOAAAA\tXXAAAA\tHHHHxx\n4857\t622\t1\t1\t7\t17\t57\t857\t857\t4857\t4857\t114\t115\tVEAAAA\tYXAAAA\tOOOOxx\n3314\t623\t0\t2\t4\t14\t14\t314\t1314\t3314\t3314\t28\t29\tMXAAAA\tZXAAAA\tVVVVxx\n5353\t624\t1\t1\t3\t13\t53\t353\t1353\t353\t5353\t106\t107\tXXAAAA\tAYAAAA\tAAAAxx\n4909\t625\t1\t1\t9\t9\t9\t909\t909\t4909\t4909\t18\t19\tVGAAAA\tBYAAAA\tHHHHxx\n7597\t626\t1\t1\t7\t17\t97\t597\t1597\t2597\t7597\t194\t195\tFGAAAA\tCYAAAA\tOOOOxx\n2683\t627\t1\t3\t3\t3\t83\t683\t683\t2683\t2683\t166\t167\tFZAAAA\tDYAAAA\tVVVVxx\n3223\t628\t1\t3\t3\t3\t23\t223\t1223\t3223\t3223\t46\t47\tZTAAAA\tEYAAAA\tAAAAxx\n5363\t629\t1\t3\t3\t3\t63\t363\t1363\t363\t5363\t126\t127\tHYAAAA\tFYAAAA\tHHHHxx\n4578\t630\t0\t2\t8\t18\t78\t578\t578\t4578\t4578\t156\t157\tCUAAAA\tGYAAAA\tOOOOxx\n5544\t631\t0\t0\t4\t4\t44\t544\t1544\t544\t5544\t88\t89\tGFAAAA\tHYAAAA\tVVVVxx\n1589\t632\t1\t1\t9\t9\t89\t589\t1589\t1589\t1589\t178\t179\tDJAAAA\tIYAAAA\tAAAAxx\n7412\t633\t0\t0\t2\t12\t12\t412\t1412\t2412\t7412\t24\t25\tCZAAAA\tJYAAAA\tHHHHxx\n3803\t634\t1\t3\t3\t3\t3\t803\t1803\t3803\t3803\t6\t7\tHQAAAA\tKYAAAA\tOOOOxx\n6179\t635\t1\t3\t9\t19\t79\t179\t179\t1179\t6179\t158\t159\tRDAAAA\tLYAAAA\tVVVVxx\n5588\t636\t0\t0\t8\t8\t88\t588\t1588\t588\t5588\t176\t177\tYGAAAA\tMYAAAA\tAAAAxx\n2134\t637\t0\t2\t4\t14\t34\t134\t134\t2134\t2134\t68\t69\tCEAAAA\tNYAAAA\tHHHHxx\n4383\t638\t1\t3\t3\t3\t83\t383\t383\t4383\t4383\t166\t167\tPMAAAA\tOYAAAA\tOOOOxx\n6995\t639\t1\t3\t5\t15\t95\t995\t995\t1995\t6995\t190\t191\tBJAAAA\tPYAAAA\tVVVVxx\n6598\t640\t0\t2\t8\t18\t98\t598\t598\t1598\t6598\t196\t197\tUTAAAA\tQYAAAA\tAAAAxx\n8731\t641\t1\t3\t1\t11\t31\t731\t731\t3731\t8731\t62\t63\tVXAAAA\tRYAAAA\tHHHHxx\n7177\t642\t1\t1\t7\t17\t77\t177\t1177\t2177\t7177\t154\t155\tBQAAAA\tSYAAAA\tOOOOxx\n6578\t643\t0\t2\t8\t18\t78\t578\t578\t1578\t6578\t156\t157\tATAAAA\tTYAAAA\tVVVVxx\n9393\t644\t1\t1\t3\t13\t93\t393\t1393\t4393\t9393\t186\t187\tHXAAAA\tUYAAAA\tAAAAxx\n1276\t645\t0\t0\t6\t16\t76\t276\t1276\t1276\t1276\t152\t153\tCXAAAA\tVYAAAA\tHHHHxx\n8766\t646\t0\t2\t6\t6\t66\t766\t766\t3766\t8766\t132\t133\tEZAAAA\tWYAAAA\tOOOOxx\n1015\t647\t1\t3\t5\t15\t15\t15\t1015\t1015\t1015\t30\t31\tBNAAAA\tXYAAAA\tVVVVxx\n4396\t648\t0\t0\t6\t16\t96\t396\t396\t4396\t4396\t192\t193\tCNAAAA\tYYAAAA\tAAAAxx\n5564\t649\t0\t0\t4\t4\t64\t564\t1564\t564\t5564\t128\t129\tAGAAAA\tZYAAAA\tHHHHxx\n927\t650\t1\t3\t7\t7\t27\t927\t927\t927\t927\t54\t55\tRJAAAA\tAZAAAA\tOOOOxx\n3306\t651\t0\t2\t6\t6\t6\t306\t1306\t3306\t3306\t12\t13\tEXAAAA\tBZAAAA\tVVVVxx\n1615\t652\t1\t3\t5\t15\t15\t615\t1615\t1615\t1615\t30\t31\tDKAAAA\tCZAAAA\tAAAAxx\n4550\t653\t0\t2\t0\t10\t50\t550\t550\t4550\t4550\t100\t101\tATAAAA\tDZAAAA\tHHHHxx\n2468\t654\t0\t0\t8\t8\t68\t468\t468\t2468\t2468\t136\t137\tYQAAAA\tEZAAAA\tOOOOxx\n5336\t655\t0\t0\t6\t16\t36\t336\t1336\t336\t5336\t72\t73\tGXAAAA\tFZAAAA\tVVVVxx\n4471\t656\t1\t3\t1\t11\t71\t471\t471\t4471\t4471\t142\t143\tZPAAAA\tGZAAAA\tAAAAxx\n8085\t657\t1\t1\t5\t5\t85\t85\t85\t3085\t8085\t170\t171\tZYAAAA\tHZAAAA\tHHHHxx\n540\t658\t0\t0\t0\t0\t40\t540\t540\t540\t540\t80\t81\tUUAAAA\tIZAAAA\tOOOOxx\n5108\t659\t0\t0\t8\t8\t8\t108\t1108\t108\t5108\t16\t17\tMOAAAA\tJZAAAA\tVVVVxx\n8015\t660\t1\t3\t5\t15\t15\t15\t15\t3015\t8015\t30\t31\tHWAAAA\tKZAAAA\tAAAAxx\n2857\t661\t1\t1\t7\t17\t57\t857\t857\t2857\t2857\t114\t115\tXFAAAA\tLZAAAA\tHHHHxx\n9472\t662\t0\t0\t2\t12\t72\t472\t1472\t4472\t9472\t144\t145\tIAAAAA\tMZAAAA\tOOOOxx\n5666\t663\t0\t2\t6\t6\t66\t666\t1666\t666\t5666\t132\t133\tYJAAAA\tNZAAAA\tVVVVxx\n3555\t664\t1\t3\t5\t15\t55\t555\t1555\t3555\t3555\t110\t111\tTGAAAA\tOZAAAA\tAAAAxx\n378\t665\t0\t2\t8\t18\t78\t378\t378\t378\t378\t156\t157\tOOAAAA\tPZAAAA\tHHHHxx\n4466\t666\t0\t2\t6\t6\t66\t466\t466\t4466\t4466\t132\t133\tUPAAAA\tQZAAAA\tOOOOxx\n3247\t667\t1\t3\t7\t7\t47\t247\t1247\t3247\t3247\t94\t95\tXUAAAA\tRZAAAA\tVVVVxx\n6570\t668\t0\t2\t0\t10\t70\t570\t570\t1570\t6570\t140\t141\tSSAAAA\tSZAAAA\tAAAAxx\n5655\t669\t1\t3\t5\t15\t55\t655\t1655\t655\t5655\t110\t111\tNJAAAA\tTZAAAA\tHHHHxx\n917\t670\t1\t1\t7\t17\t17\t917\t917\t917\t917\t34\t35\tHJAAAA\tUZAAAA\tOOOOxx\n3637\t671\t1\t1\t7\t17\t37\t637\t1637\t3637\t3637\t74\t75\tXJAAAA\tVZAAAA\tVVVVxx\n3668\t672\t0\t0\t8\t8\t68\t668\t1668\t3668\t3668\t136\t137\tCLAAAA\tWZAAAA\tAAAAxx\n5644\t673\t0\t0\t4\t4\t44\t644\t1644\t644\t5644\t88\t89\tCJAAAA\tXZAAAA\tHHHHxx\n8286\t674\t0\t2\t6\t6\t86\t286\t286\t3286\t8286\t172\t173\tSGAAAA\tYZAAAA\tOOOOxx\n6896\t675\t0\t0\t6\t16\t96\t896\t896\t1896\t6896\t192\t193\tGFAAAA\tZZAAAA\tVVVVxx\n2870\t676\t0\t2\t0\t10\t70\t870\t870\t2870\t2870\t140\t141\tKGAAAA\tAABAAA\tAAAAxx\n8041\t677\t1\t1\t1\t1\t41\t41\t41\t3041\t8041\t82\t83\tHXAAAA\tBABAAA\tHHHHxx\n8137\t678\t1\t1\t7\t17\t37\t137\t137\t3137\t8137\t74\t75\tZAAAAA\tCABAAA\tOOOOxx\n4823\t679\t1\t3\t3\t3\t23\t823\t823\t4823\t4823\t46\t47\tNDAAAA\tDABAAA\tVVVVxx\n2438\t680\t0\t2\t8\t18\t38\t438\t438\t2438\t2438\t76\t77\tUPAAAA\tEABAAA\tAAAAxx\n6329\t681\t1\t1\t9\t9\t29\t329\t329\t1329\t6329\t58\t59\tLJAAAA\tFABAAA\tHHHHxx\n623\t682\t1\t3\t3\t3\t23\t623\t623\t623\t623\t46\t47\tZXAAAA\tGABAAA\tOOOOxx\n1360\t683\t0\t0\t0\t0\t60\t360\t1360\t1360\t1360\t120\t121\tIAAAAA\tHABAAA\tVVVVxx\n7987\t684\t1\t3\t7\t7\t87\t987\t1987\t2987\t7987\t174\t175\tFVAAAA\tIABAAA\tAAAAxx\n9788\t685\t0\t0\t8\t8\t88\t788\t1788\t4788\t9788\t176\t177\tMMAAAA\tJABAAA\tHHHHxx\n3212\t686\t0\t0\t2\t12\t12\t212\t1212\t3212\t3212\t24\t25\tOTAAAA\tKABAAA\tOOOOxx\n2725\t687\t1\t1\t5\t5\t25\t725\t725\t2725\t2725\t50\t51\tVAAAAA\tLABAAA\tVVVVxx\n7837\t688\t1\t1\t7\t17\t37\t837\t1837\t2837\t7837\t74\t75\tLPAAAA\tMABAAA\tAAAAxx\n4746\t689\t0\t2\t6\t6\t46\t746\t746\t4746\t4746\t92\t93\tOAAAAA\tNABAAA\tHHHHxx\n3986\t690\t0\t2\t6\t6\t86\t986\t1986\t3986\t3986\t172\t173\tIXAAAA\tOABAAA\tOOOOxx\n9128\t691\t0\t0\t8\t8\t28\t128\t1128\t4128\t9128\t56\t57\tCNAAAA\tPABAAA\tVVVVxx\n5044\t692\t0\t0\t4\t4\t44\t44\t1044\t44\t5044\t88\t89\tAMAAAA\tQABAAA\tAAAAxx\n8132\t693\t0\t0\t2\t12\t32\t132\t132\t3132\t8132\t64\t65\tUAAAAA\tRABAAA\tHHHHxx\n9992\t694\t0\t0\t2\t12\t92\t992\t1992\t4992\t9992\t184\t185\tIUAAAA\tSABAAA\tOOOOxx\n8468\t695\t0\t0\t8\t8\t68\t468\t468\t3468\t8468\t136\t137\tSNAAAA\tTABAAA\tVVVVxx\n6876\t696\t0\t0\t6\t16\t76\t876\t876\t1876\t6876\t152\t153\tMEAAAA\tUABAAA\tAAAAxx\n3532\t697\t0\t0\t2\t12\t32\t532\t1532\t3532\t3532\t64\t65\tWFAAAA\tVABAAA\tHHHHxx\n2140\t698\t0\t0\t0\t0\t40\t140\t140\t2140\t2140\t80\t81\tIEAAAA\tWABAAA\tOOOOxx\n2183\t699\t1\t3\t3\t3\t83\t183\t183\t2183\t2183\t166\t167\tZFAAAA\tXABAAA\tVVVVxx\n9766\t700\t0\t2\t6\t6\t66\t766\t1766\t4766\t9766\t132\t133\tQLAAAA\tYABAAA\tAAAAxx\n7943\t701\t1\t3\t3\t3\t43\t943\t1943\t2943\t7943\t86\t87\tNTAAAA\tZABAAA\tHHHHxx\n9243\t702\t1\t3\t3\t3\t43\t243\t1243\t4243\t9243\t86\t87\tNRAAAA\tABBAAA\tOOOOxx\n6241\t703\t1\t1\t1\t1\t41\t241\t241\t1241\t6241\t82\t83\tBGAAAA\tBBBAAA\tVVVVxx\n9540\t704\t0\t0\t0\t0\t40\t540\t1540\t4540\t9540\t80\t81\tYCAAAA\tCBBAAA\tAAAAxx\n7418\t705\t0\t2\t8\t18\t18\t418\t1418\t2418\t7418\t36\t37\tIZAAAA\tDBBAAA\tHHHHxx\n1603\t706\t1\t3\t3\t3\t3\t603\t1603\t1603\t1603\t6\t7\tRJAAAA\tEBBAAA\tOOOOxx\n8950\t707\t0\t2\t0\t10\t50\t950\t950\t3950\t8950\t100\t101\tGGAAAA\tFBBAAA\tVVVVxx\n6933\t708\t1\t1\t3\t13\t33\t933\t933\t1933\t6933\t66\t67\tRGAAAA\tGBBAAA\tAAAAxx\n2646\t709\t0\t2\t6\t6\t46\t646\t646\t2646\t2646\t92\t93\tUXAAAA\tHBBAAA\tHHHHxx\n3447\t710\t1\t3\t7\t7\t47\t447\t1447\t3447\t3447\t94\t95\tPCAAAA\tIBBAAA\tOOOOxx\n9957\t711\t1\t1\t7\t17\t57\t957\t1957\t4957\t9957\t114\t115\tZSAAAA\tJBBAAA\tVVVVxx\n4623\t712\t1\t3\t3\t3\t23\t623\t623\t4623\t4623\t46\t47\tVVAAAA\tKBBAAA\tAAAAxx\n9058\t713\t0\t2\t8\t18\t58\t58\t1058\t4058\t9058\t116\t117\tKKAAAA\tLBBAAA\tHHHHxx\n7361\t714\t1\t1\t1\t1\t61\t361\t1361\t2361\t7361\t122\t123\tDXAAAA\tMBBAAA\tOOOOxx\n2489\t715\t1\t1\t9\t9\t89\t489\t489\t2489\t2489\t178\t179\tTRAAAA\tNBBAAA\tVVVVxx\n7643\t716\t1\t3\t3\t3\t43\t643\t1643\t2643\t7643\t86\t87\tZHAAAA\tOBBAAA\tAAAAxx\n9166\t717\t0\t2\t6\t6\t66\t166\t1166\t4166\t9166\t132\t133\tOOAAAA\tPBBAAA\tHHHHxx\n7789\t718\t1\t1\t9\t9\t89\t789\t1789\t2789\t7789\t178\t179\tPNAAAA\tQBBAAA\tOOOOxx\n2332\t719\t0\t0\t2\t12\t32\t332\t332\t2332\t2332\t64\t65\tSLAAAA\tRBBAAA\tVVVVxx\n1832\t720\t0\t0\t2\t12\t32\t832\t1832\t1832\t1832\t64\t65\tMSAAAA\tSBBAAA\tAAAAxx\n8375\t721\t1\t3\t5\t15\t75\t375\t375\t3375\t8375\t150\t151\tDKAAAA\tTBBAAA\tHHHHxx\n948\t722\t0\t0\t8\t8\t48\t948\t948\t948\t948\t96\t97\tMKAAAA\tUBBAAA\tOOOOxx\n5613\t723\t1\t1\t3\t13\t13\t613\t1613\t613\t5613\t26\t27\tXHAAAA\tVBBAAA\tVVVVxx\n6310\t724\t0\t2\t0\t10\t10\t310\t310\t1310\t6310\t20\t21\tSIAAAA\tWBBAAA\tAAAAxx\n4254\t725\t0\t2\t4\t14\t54\t254\t254\t4254\t4254\t108\t109\tQHAAAA\tXBBAAA\tHHHHxx\n4260\t726\t0\t0\t0\t0\t60\t260\t260\t4260\t4260\t120\t121\tWHAAAA\tYBBAAA\tOOOOxx\n2060\t727\t0\t0\t0\t0\t60\t60\t60\t2060\t2060\t120\t121\tGBAAAA\tZBBAAA\tVVVVxx\n4831\t728\t1\t3\t1\t11\t31\t831\t831\t4831\t4831\t62\t63\tVDAAAA\tACBAAA\tAAAAxx\n6176\t729\t0\t0\t6\t16\t76\t176\t176\t1176\t6176\t152\t153\tODAAAA\tBCBAAA\tHHHHxx\n6688\t730\t0\t0\t8\t8\t88\t688\t688\t1688\t6688\t176\t177\tGXAAAA\tCCBAAA\tOOOOxx\n5752\t731\t0\t0\t2\t12\t52\t752\t1752\t752\t5752\t104\t105\tGNAAAA\tDCBAAA\tVVVVxx\n8714\t732\t0\t2\t4\t14\t14\t714\t714\t3714\t8714\t28\t29\tEXAAAA\tECBAAA\tAAAAxx\n6739\t733\t1\t3\t9\t19\t39\t739\t739\t1739\t6739\t78\t79\tFZAAAA\tFCBAAA\tHHHHxx\n7066\t734\t0\t2\t6\t6\t66\t66\t1066\t2066\t7066\t132\t133\tULAAAA\tGCBAAA\tOOOOxx\n7250\t735\t0\t2\t0\t10\t50\t250\t1250\t2250\t7250\t100\t101\tWSAAAA\tHCBAAA\tVVVVxx\n3161\t736\t1\t1\t1\t1\t61\t161\t1161\t3161\t3161\t122\t123\tPRAAAA\tICBAAA\tAAAAxx\n1411\t737\t1\t3\t1\t11\t11\t411\t1411\t1411\t1411\t22\t23\tHCAAAA\tJCBAAA\tHHHHxx\n9301\t738\t1\t1\t1\t1\t1\t301\t1301\t4301\t9301\t2\t3\tTTAAAA\tKCBAAA\tOOOOxx\n8324\t739\t0\t0\t4\t4\t24\t324\t324\t3324\t8324\t48\t49\tEIAAAA\tLCBAAA\tVVVVxx\n9641\t740\t1\t1\t1\t1\t41\t641\t1641\t4641\t9641\t82\t83\tVGAAAA\tMCBAAA\tAAAAxx\n7077\t741\t1\t1\t7\t17\t77\t77\t1077\t2077\t7077\t154\t155\tFMAAAA\tNCBAAA\tHHHHxx\n9888\t742\t0\t0\t8\t8\t88\t888\t1888\t4888\t9888\t176\t177\tIQAAAA\tOCBAAA\tOOOOxx\n9909\t743\t1\t1\t9\t9\t9\t909\t1909\t4909\t9909\t18\t19\tDRAAAA\tPCBAAA\tVVVVxx\n2209\t744\t1\t1\t9\t9\t9\t209\t209\t2209\t2209\t18\t19\tZGAAAA\tQCBAAA\tAAAAxx\n6904\t745\t0\t0\t4\t4\t4\t904\t904\t1904\t6904\t8\t9\tOFAAAA\tRCBAAA\tHHHHxx\n6608\t746\t0\t0\t8\t8\t8\t608\t608\t1608\t6608\t16\t17\tEUAAAA\tSCBAAA\tOOOOxx\n8400\t747\t0\t0\t0\t0\t0\t400\t400\t3400\t8400\t0\t1\tCLAAAA\tTCBAAA\tVVVVxx\n5124\t748\t0\t0\t4\t4\t24\t124\t1124\t124\t5124\t48\t49\tCPAAAA\tUCBAAA\tAAAAxx\n5484\t749\t0\t0\t4\t4\t84\t484\t1484\t484\t5484\t168\t169\tYCAAAA\tVCBAAA\tHHHHxx\n3575\t750\t1\t3\t5\t15\t75\t575\t1575\t3575\t3575\t150\t151\tNHAAAA\tWCBAAA\tOOOOxx\n9723\t751\t1\t3\t3\t3\t23\t723\t1723\t4723\t9723\t46\t47\tZJAAAA\tXCBAAA\tVVVVxx\n360\t752\t0\t0\t0\t0\t60\t360\t360\t360\t360\t120\t121\tWNAAAA\tYCBAAA\tAAAAxx\n1059\t753\t1\t3\t9\t19\t59\t59\t1059\t1059\t1059\t118\t119\tTOAAAA\tZCBAAA\tHHHHxx\n4941\t754\t1\t1\t1\t1\t41\t941\t941\t4941\t4941\t82\t83\tBIAAAA\tADBAAA\tOOOOxx\n2535\t755\t1\t3\t5\t15\t35\t535\t535\t2535\t2535\t70\t71\tNTAAAA\tBDBAAA\tVVVVxx\n4119\t756\t1\t3\t9\t19\t19\t119\t119\t4119\t4119\t38\t39\tLCAAAA\tCDBAAA\tAAAAxx\n3725\t757\t1\t1\t5\t5\t25\t725\t1725\t3725\t3725\t50\t51\tHNAAAA\tDDBAAA\tHHHHxx\n4758\t758\t0\t2\t8\t18\t58\t758\t758\t4758\t4758\t116\t117\tABAAAA\tEDBAAA\tOOOOxx\n9593\t759\t1\t1\t3\t13\t93\t593\t1593\t4593\t9593\t186\t187\tZEAAAA\tFDBAAA\tVVVVxx\n4663\t760\t1\t3\t3\t3\t63\t663\t663\t4663\t4663\t126\t127\tJXAAAA\tGDBAAA\tAAAAxx\n7734\t761\t0\t2\t4\t14\t34\t734\t1734\t2734\t7734\t68\t69\tMLAAAA\tHDBAAA\tHHHHxx\n9156\t762\t0\t0\t6\t16\t56\t156\t1156\t4156\t9156\t112\t113\tEOAAAA\tIDBAAA\tOOOOxx\n8120\t763\t0\t0\t0\t0\t20\t120\t120\t3120\t8120\t40\t41\tIAAAAA\tJDBAAA\tVVVVxx\n4385\t764\t1\t1\t5\t5\t85\t385\t385\t4385\t4385\t170\t171\tRMAAAA\tKDBAAA\tAAAAxx\n2926\t765\t0\t2\t6\t6\t26\t926\t926\t2926\t2926\t52\t53\tOIAAAA\tLDBAAA\tHHHHxx\n4186\t766\t0\t2\t6\t6\t86\t186\t186\t4186\t4186\t172\t173\tAFAAAA\tMDBAAA\tOOOOxx\n2508\t767\t0\t0\t8\t8\t8\t508\t508\t2508\t2508\t16\t17\tMSAAAA\tNDBAAA\tVVVVxx\n4012\t768\t0\t0\t2\t12\t12\t12\t12\t4012\t4012\t24\t25\tIYAAAA\tODBAAA\tAAAAxx\n6266\t769\t0\t2\t6\t6\t66\t266\t266\t1266\t6266\t132\t133\tAHAAAA\tPDBAAA\tHHHHxx\n3709\t770\t1\t1\t9\t9\t9\t709\t1709\t3709\t3709\t18\t19\tRMAAAA\tQDBAAA\tOOOOxx\n7289\t771\t1\t1\t9\t9\t89\t289\t1289\t2289\t7289\t178\t179\tJUAAAA\tRDBAAA\tVVVVxx\n8875\t772\t1\t3\t5\t15\t75\t875\t875\t3875\t8875\t150\t151\tJDAAAA\tSDBAAA\tAAAAxx\n4412\t773\t0\t0\t2\t12\t12\t412\t412\t4412\t4412\t24\t25\tSNAAAA\tTDBAAA\tHHHHxx\n3033\t774\t1\t1\t3\t13\t33\t33\t1033\t3033\t3033\t66\t67\tRMAAAA\tUDBAAA\tOOOOxx\n1645\t775\t1\t1\t5\t5\t45\t645\t1645\t1645\t1645\t90\t91\tHLAAAA\tVDBAAA\tVVVVxx\n3557\t776\t1\t1\t7\t17\t57\t557\t1557\t3557\t3557\t114\t115\tVGAAAA\tWDBAAA\tAAAAxx\n6316\t777\t0\t0\t6\t16\t16\t316\t316\t1316\t6316\t32\t33\tYIAAAA\tXDBAAA\tHHHHxx\n2054\t778\t0\t2\t4\t14\t54\t54\t54\t2054\t2054\t108\t109\tABAAAA\tYDBAAA\tOOOOxx\n7031\t779\t1\t3\t1\t11\t31\t31\t1031\t2031\t7031\t62\t63\tLKAAAA\tZDBAAA\tVVVVxx\n3405\t780\t1\t1\t5\t5\t5\t405\t1405\t3405\t3405\t10\t11\tZAAAAA\tAEBAAA\tAAAAxx\n5343\t781\t1\t3\t3\t3\t43\t343\t1343\t343\t5343\t86\t87\tNXAAAA\tBEBAAA\tHHHHxx\n5240\t782\t0\t0\t0\t0\t40\t240\t1240\t240\t5240\t80\t81\tOTAAAA\tCEBAAA\tOOOOxx\n9650\t783\t0\t2\t0\t10\t50\t650\t1650\t4650\t9650\t100\t101\tEHAAAA\tDEBAAA\tVVVVxx\n3777\t784\t1\t1\t7\t17\t77\t777\t1777\t3777\t3777\t154\t155\tHPAAAA\tEEBAAA\tAAAAxx\n9041\t785\t1\t1\t1\t1\t41\t41\t1041\t4041\t9041\t82\t83\tTJAAAA\tFEBAAA\tHHHHxx\n6923\t786\t1\t3\t3\t3\t23\t923\t923\t1923\t6923\t46\t47\tHGAAAA\tGEBAAA\tOOOOxx\n2977\t787\t1\t1\t7\t17\t77\t977\t977\t2977\t2977\t154\t155\tNKAAAA\tHEBAAA\tVVVVxx\n5500\t788\t0\t0\t0\t0\t0\t500\t1500\t500\t5500\t0\t1\tODAAAA\tIEBAAA\tAAAAxx\n1044\t789\t0\t0\t4\t4\t44\t44\t1044\t1044\t1044\t88\t89\tEOAAAA\tJEBAAA\tHHHHxx\n434\t790\t0\t2\t4\t14\t34\t434\t434\t434\t434\t68\t69\tSQAAAA\tKEBAAA\tOOOOxx\n611\t791\t1\t3\t1\t11\t11\t611\t611\t611\t611\t22\t23\tNXAAAA\tLEBAAA\tVVVVxx\n5760\t792\t0\t0\t0\t0\t60\t760\t1760\t760\t5760\t120\t121\tONAAAA\tMEBAAA\tAAAAxx\n2445\t793\t1\t1\t5\t5\t45\t445\t445\t2445\t2445\t90\t91\tBQAAAA\tNEBAAA\tHHHHxx\n7098\t794\t0\t2\t8\t18\t98\t98\t1098\t2098\t7098\t196\t197\tANAAAA\tOEBAAA\tOOOOxx\n2188\t795\t0\t0\t8\t8\t88\t188\t188\t2188\t2188\t176\t177\tEGAAAA\tPEBAAA\tVVVVxx\n4597\t796\t1\t1\t7\t17\t97\t597\t597\t4597\t4597\t194\t195\tVUAAAA\tQEBAAA\tAAAAxx\n1913\t797\t1\t1\t3\t13\t13\t913\t1913\t1913\t1913\t26\t27\tPVAAAA\tREBAAA\tHHHHxx\n8696\t798\t0\t0\t6\t16\t96\t696\t696\t3696\t8696\t192\t193\tMWAAAA\tSEBAAA\tOOOOxx\n3332\t799\t0\t0\t2\t12\t32\t332\t1332\t3332\t3332\t64\t65\tEYAAAA\tTEBAAA\tVVVVxx\n8760\t800\t0\t0\t0\t0\t60\t760\t760\t3760\t8760\t120\t121\tYYAAAA\tUEBAAA\tAAAAxx\n3215\t801\t1\t3\t5\t15\t15\t215\t1215\t3215\t3215\t30\t31\tRTAAAA\tVEBAAA\tHHHHxx\n1625\t802\t1\t1\t5\t5\t25\t625\t1625\t1625\t1625\t50\t51\tNKAAAA\tWEBAAA\tOOOOxx\n4219\t803\t1\t3\t9\t19\t19\t219\t219\t4219\t4219\t38\t39\tHGAAAA\tXEBAAA\tVVVVxx\n415\t804\t1\t3\t5\t15\t15\t415\t415\t415\t415\t30\t31\tZPAAAA\tYEBAAA\tAAAAxx\n4242\t805\t0\t2\t2\t2\t42\t242\t242\t4242\t4242\t84\t85\tEHAAAA\tZEBAAA\tHHHHxx\n8660\t806\t0\t0\t0\t0\t60\t660\t660\t3660\t8660\t120\t121\tCVAAAA\tAFBAAA\tOOOOxx\n6525\t807\t1\t1\t5\t5\t25\t525\t525\t1525\t6525\t50\t51\tZQAAAA\tBFBAAA\tVVVVxx\n2141\t808\t1\t1\t1\t1\t41\t141\t141\t2141\t2141\t82\t83\tJEAAAA\tCFBAAA\tAAAAxx\n5152\t809\t0\t0\t2\t12\t52\t152\t1152\t152\t5152\t104\t105\tEQAAAA\tDFBAAA\tHHHHxx\n8560\t810\t0\t0\t0\t0\t60\t560\t560\t3560\t8560\t120\t121\tGRAAAA\tEFBAAA\tOOOOxx\n9835\t811\t1\t3\t5\t15\t35\t835\t1835\t4835\t9835\t70\t71\tHOAAAA\tFFBAAA\tVVVVxx\n2657\t812\t1\t1\t7\t17\t57\t657\t657\t2657\t2657\t114\t115\tFYAAAA\tGFBAAA\tAAAAxx\n6085\t813\t1\t1\t5\t5\t85\t85\t85\t1085\t6085\t170\t171\tBAAAAA\tHFBAAA\tHHHHxx\n6698\t814\t0\t2\t8\t18\t98\t698\t698\t1698\t6698\t196\t197\tQXAAAA\tIFBAAA\tOOOOxx\n5421\t815\t1\t1\t1\t1\t21\t421\t1421\t421\t5421\t42\t43\tNAAAAA\tJFBAAA\tVVVVxx\n6661\t816\t1\t1\t1\t1\t61\t661\t661\t1661\t6661\t122\t123\tFWAAAA\tKFBAAA\tAAAAxx\n5645\t817\t1\t1\t5\t5\t45\t645\t1645\t645\t5645\t90\t91\tDJAAAA\tLFBAAA\tHHHHxx\n1248\t818\t0\t0\t8\t8\t48\t248\t1248\t1248\t1248\t96\t97\tAWAAAA\tMFBAAA\tOOOOxx\n5690\t819\t0\t2\t0\t10\t90\t690\t1690\t690\t5690\t180\t181\tWKAAAA\tNFBAAA\tVVVVxx\n4762\t820\t0\t2\t2\t2\t62\t762\t762\t4762\t4762\t124\t125\tEBAAAA\tOFBAAA\tAAAAxx\n1455\t821\t1\t3\t5\t15\t55\t455\t1455\t1455\t1455\t110\t111\tZDAAAA\tPFBAAA\tHHHHxx\n9846\t822\t0\t2\t6\t6\t46\t846\t1846\t4846\t9846\t92\t93\tSOAAAA\tQFBAAA\tOOOOxx\n5295\t823\t1\t3\t5\t15\t95\t295\t1295\t295\t5295\t190\t191\tRVAAAA\tRFBAAA\tVVVVxx\n2826\t824\t0\t2\t6\t6\t26\t826\t826\t2826\t2826\t52\t53\tSEAAAA\tSFBAAA\tAAAAxx\n7496\t825\t0\t0\t6\t16\t96\t496\t1496\t2496\t7496\t192\t193\tICAAAA\tTFBAAA\tHHHHxx\n3024\t826\t0\t0\t4\t4\t24\t24\t1024\t3024\t3024\t48\t49\tIMAAAA\tUFBAAA\tOOOOxx\n4945\t827\t1\t1\t5\t5\t45\t945\t945\t4945\t4945\t90\t91\tFIAAAA\tVFBAAA\tVVVVxx\n4404\t828\t0\t0\t4\t4\t4\t404\t404\t4404\t4404\t8\t9\tKNAAAA\tWFBAAA\tAAAAxx\n9302\t829\t0\t2\t2\t2\t2\t302\t1302\t4302\t9302\t4\t5\tUTAAAA\tXFBAAA\tHHHHxx\n1286\t830\t0\t2\t6\t6\t86\t286\t1286\t1286\t1286\t172\t173\tMXAAAA\tYFBAAA\tOOOOxx\n8435\t831\t1\t3\t5\t15\t35\t435\t435\t3435\t8435\t70\t71\tLMAAAA\tZFBAAA\tVVVVxx\n8969\t832\t1\t1\t9\t9\t69\t969\t969\t3969\t8969\t138\t139\tZGAAAA\tAGBAAA\tAAAAxx\n3302\t833\t0\t2\t2\t2\t2\t302\t1302\t3302\t3302\t4\t5\tAXAAAA\tBGBAAA\tHHHHxx\n9753\t834\t1\t1\t3\t13\t53\t753\t1753\t4753\t9753\t106\t107\tDLAAAA\tCGBAAA\tOOOOxx\n9374\t835\t0\t2\t4\t14\t74\t374\t1374\t4374\t9374\t148\t149\tOWAAAA\tDGBAAA\tVVVVxx\n4907\t836\t1\t3\t7\t7\t7\t907\t907\t4907\t4907\t14\t15\tTGAAAA\tEGBAAA\tAAAAxx\n1659\t837\t1\t3\t9\t19\t59\t659\t1659\t1659\t1659\t118\t119\tVLAAAA\tFGBAAA\tHHHHxx\n5095\t838\t1\t3\t5\t15\t95\t95\t1095\t95\t5095\t190\t191\tZNAAAA\tGGBAAA\tOOOOxx\n9446\t839\t0\t2\t6\t6\t46\t446\t1446\t4446\t9446\t92\t93\tIZAAAA\tHGBAAA\tVVVVxx\n8528\t840\t0\t0\t8\t8\t28\t528\t528\t3528\t8528\t56\t57\tAQAAAA\tIGBAAA\tAAAAxx\n4890\t841\t0\t2\t0\t10\t90\t890\t890\t4890\t4890\t180\t181\tCGAAAA\tJGBAAA\tHHHHxx\n1221\t842\t1\t1\t1\t1\t21\t221\t1221\t1221\t1221\t42\t43\tZUAAAA\tKGBAAA\tOOOOxx\n5583\t843\t1\t3\t3\t3\t83\t583\t1583\t583\t5583\t166\t167\tTGAAAA\tLGBAAA\tVVVVxx\n7303\t844\t1\t3\t3\t3\t3\t303\t1303\t2303\t7303\t6\t7\tXUAAAA\tMGBAAA\tAAAAxx\n406\t845\t0\t2\t6\t6\t6\t406\t406\t406\t406\t12\t13\tQPAAAA\tNGBAAA\tHHHHxx\n7542\t846\t0\t2\t2\t2\t42\t542\t1542\t2542\t7542\t84\t85\tCEAAAA\tOGBAAA\tOOOOxx\n9507\t847\t1\t3\t7\t7\t7\t507\t1507\t4507\t9507\t14\t15\tRBAAAA\tPGBAAA\tVVVVxx\n9511\t848\t1\t3\t1\t11\t11\t511\t1511\t4511\t9511\t22\t23\tVBAAAA\tQGBAAA\tAAAAxx\n1373\t849\t1\t1\t3\t13\t73\t373\t1373\t1373\t1373\t146\t147\tVAAAAA\tRGBAAA\tHHHHxx\n6556\t850\t0\t0\t6\t16\t56\t556\t556\t1556\t6556\t112\t113\tESAAAA\tSGBAAA\tOOOOxx\n4117\t851\t1\t1\t7\t17\t17\t117\t117\t4117\t4117\t34\t35\tJCAAAA\tTGBAAA\tVVVVxx\n7794\t852\t0\t2\t4\t14\t94\t794\t1794\t2794\t7794\t188\t189\tUNAAAA\tUGBAAA\tAAAAxx\n7170\t853\t0\t2\t0\t10\t70\t170\t1170\t2170\t7170\t140\t141\tUPAAAA\tVGBAAA\tHHHHxx\n5809\t854\t1\t1\t9\t9\t9\t809\t1809\t809\t5809\t18\t19\tLPAAAA\tWGBAAA\tOOOOxx\n7828\t855\t0\t0\t8\t8\t28\t828\t1828\t2828\t7828\t56\t57\tCPAAAA\tXGBAAA\tVVVVxx\n8046\t856\t0\t2\t6\t6\t46\t46\t46\t3046\t8046\t92\t93\tMXAAAA\tYGBAAA\tAAAAxx\n4833\t857\t1\t1\t3\t13\t33\t833\t833\t4833\t4833\t66\t67\tXDAAAA\tZGBAAA\tHHHHxx\n2107\t858\t1\t3\t7\t7\t7\t107\t107\t2107\t2107\t14\t15\tBDAAAA\tAHBAAA\tOOOOxx\n4276\t859\t0\t0\t6\t16\t76\t276\t276\t4276\t4276\t152\t153\tMIAAAA\tBHBAAA\tVVVVxx\n9536\t860\t0\t0\t6\t16\t36\t536\t1536\t4536\t9536\t72\t73\tUCAAAA\tCHBAAA\tAAAAxx\n5549\t861\t1\t1\t9\t9\t49\t549\t1549\t549\t5549\t98\t99\tLFAAAA\tDHBAAA\tHHHHxx\n6427\t862\t1\t3\t7\t7\t27\t427\t427\t1427\t6427\t54\t55\tFNAAAA\tEHBAAA\tOOOOxx\n1382\t863\t0\t2\t2\t2\t82\t382\t1382\t1382\t1382\t164\t165\tEBAAAA\tFHBAAA\tVVVVxx\n3256\t864\t0\t0\t6\t16\t56\t256\t1256\t3256\t3256\t112\t113\tGVAAAA\tGHBAAA\tAAAAxx\n3270\t865\t0\t2\t0\t10\t70\t270\t1270\t3270\t3270\t140\t141\tUVAAAA\tHHBAAA\tHHHHxx\n4808\t866\t0\t0\t8\t8\t8\t808\t808\t4808\t4808\t16\t17\tYCAAAA\tIHBAAA\tOOOOxx\n7938\t867\t0\t2\t8\t18\t38\t938\t1938\t2938\t7938\t76\t77\tITAAAA\tJHBAAA\tVVVVxx\n4405\t868\t1\t1\t5\t5\t5\t405\t405\t4405\t4405\t10\t11\tLNAAAA\tKHBAAA\tAAAAxx\n2264\t869\t0\t0\t4\t4\t64\t264\t264\t2264\t2264\t128\t129\tCJAAAA\tLHBAAA\tHHHHxx\n80\t870\t0\t0\t0\t0\t80\t80\t80\t80\t80\t160\t161\tCDAAAA\tMHBAAA\tOOOOxx\n320\t871\t0\t0\t0\t0\t20\t320\t320\t320\t320\t40\t41\tIMAAAA\tNHBAAA\tVVVVxx\n2383\t872\t1\t3\t3\t3\t83\t383\t383\t2383\t2383\t166\t167\tRNAAAA\tOHBAAA\tAAAAxx\n3146\t873\t0\t2\t6\t6\t46\t146\t1146\t3146\t3146\t92\t93\tARAAAA\tPHBAAA\tHHHHxx\n6911\t874\t1\t3\t1\t11\t11\t911\t911\t1911\t6911\t22\t23\tVFAAAA\tQHBAAA\tOOOOxx\n7377\t875\t1\t1\t7\t17\t77\t377\t1377\t2377\t7377\t154\t155\tTXAAAA\tRHBAAA\tVVVVxx\n9965\t876\t1\t1\t5\t5\t65\t965\t1965\t4965\t9965\t130\t131\tHTAAAA\tSHBAAA\tAAAAxx\n8361\t877\t1\t1\t1\t1\t61\t361\t361\t3361\t8361\t122\t123\tPJAAAA\tTHBAAA\tHHHHxx\n9417\t878\t1\t1\t7\t17\t17\t417\t1417\t4417\t9417\t34\t35\tFYAAAA\tUHBAAA\tOOOOxx\n2483\t879\t1\t3\t3\t3\t83\t483\t483\t2483\t2483\t166\t167\tNRAAAA\tVHBAAA\tVVVVxx\n9843\t880\t1\t3\t3\t3\t43\t843\t1843\t4843\t9843\t86\t87\tPOAAAA\tWHBAAA\tAAAAxx\n6395\t881\t1\t3\t5\t15\t95\t395\t395\t1395\t6395\t190\t191\tZLAAAA\tXHBAAA\tHHHHxx\n6444\t882\t0\t0\t4\t4\t44\t444\t444\t1444\t6444\t88\t89\tWNAAAA\tYHBAAA\tOOOOxx\n1820\t883\t0\t0\t0\t0\t20\t820\t1820\t1820\t1820\t40\t41\tASAAAA\tZHBAAA\tVVVVxx\n2768\t884\t0\t0\t8\t8\t68\t768\t768\t2768\t2768\t136\t137\tMCAAAA\tAIBAAA\tAAAAxx\n5413\t885\t1\t1\t3\t13\t13\t413\t1413\t413\t5413\t26\t27\tFAAAAA\tBIBAAA\tHHHHxx\n2923\t886\t1\t3\t3\t3\t23\t923\t923\t2923\t2923\t46\t47\tLIAAAA\tCIBAAA\tOOOOxx\n5286\t887\t0\t2\t6\t6\t86\t286\t1286\t286\t5286\t172\t173\tIVAAAA\tDIBAAA\tVVVVxx\n6126\t888\t0\t2\t6\t6\t26\t126\t126\t1126\t6126\t52\t53\tQBAAAA\tEIBAAA\tAAAAxx\n8343\t889\t1\t3\t3\t3\t43\t343\t343\t3343\t8343\t86\t87\tXIAAAA\tFIBAAA\tHHHHxx\n6010\t890\t0\t2\t0\t10\t10\t10\t10\t1010\t6010\t20\t21\tEXAAAA\tGIBAAA\tOOOOxx\n4177\t891\t1\t1\t7\t17\t77\t177\t177\t4177\t4177\t154\t155\tREAAAA\tHIBAAA\tVVVVxx\n5808\t892\t0\t0\t8\t8\t8\t808\t1808\t808\t5808\t16\t17\tKPAAAA\tIIBAAA\tAAAAxx\n4859\t893\t1\t3\t9\t19\t59\t859\t859\t4859\t4859\t118\t119\tXEAAAA\tJIBAAA\tHHHHxx\n9252\t894\t0\t0\t2\t12\t52\t252\t1252\t4252\t9252\t104\t105\tWRAAAA\tKIBAAA\tOOOOxx\n2941\t895\t1\t1\t1\t1\t41\t941\t941\t2941\t2941\t82\t83\tDJAAAA\tLIBAAA\tVVVVxx\n8693\t896\t1\t1\t3\t13\t93\t693\t693\t3693\t8693\t186\t187\tJWAAAA\tMIBAAA\tAAAAxx\n4432\t897\t0\t0\t2\t12\t32\t432\t432\t4432\t4432\t64\t65\tMOAAAA\tNIBAAA\tHHHHxx\n2371\t898\t1\t3\t1\t11\t71\t371\t371\t2371\t2371\t142\t143\tFNAAAA\tOIBAAA\tOOOOxx\n7546\t899\t0\t2\t6\t6\t46\t546\t1546\t2546\t7546\t92\t93\tGEAAAA\tPIBAAA\tVVVVxx\n1369\t900\t1\t1\t9\t9\t69\t369\t1369\t1369\t1369\t138\t139\tRAAAAA\tQIBAAA\tAAAAxx\n4687\t901\t1\t3\t7\t7\t87\t687\t687\t4687\t4687\t174\t175\tHYAAAA\tRIBAAA\tHHHHxx\n8941\t902\t1\t1\t1\t1\t41\t941\t941\t3941\t8941\t82\t83\tXFAAAA\tSIBAAA\tOOOOxx\n226\t903\t0\t2\t6\t6\t26\t226\t226\t226\t226\t52\t53\tSIAAAA\tTIBAAA\tVVVVxx\n3493\t904\t1\t1\t3\t13\t93\t493\t1493\t3493\t3493\t186\t187\tJEAAAA\tUIBAAA\tAAAAxx\n6433\t905\t1\t1\t3\t13\t33\t433\t433\t1433\t6433\t66\t67\tLNAAAA\tVIBAAA\tHHHHxx\n9189\t906\t1\t1\t9\t9\t89\t189\t1189\t4189\t9189\t178\t179\tLPAAAA\tWIBAAA\tOOOOxx\n6027\t907\t1\t3\t7\t7\t27\t27\t27\t1027\t6027\t54\t55\tVXAAAA\tXIBAAA\tVVVVxx\n4615\t908\t1\t3\t5\t15\t15\t615\t615\t4615\t4615\t30\t31\tNVAAAA\tYIBAAA\tAAAAxx\n5320\t909\t0\t0\t0\t0\t20\t320\t1320\t320\t5320\t40\t41\tQWAAAA\tZIBAAA\tHHHHxx\n7002\t910\t0\t2\t2\t2\t2\t2\t1002\t2002\t7002\t4\t5\tIJAAAA\tAJBAAA\tOOOOxx\n7367\t911\t1\t3\t7\t7\t67\t367\t1367\t2367\t7367\t134\t135\tJXAAAA\tBJBAAA\tVVVVxx\n289\t912\t1\t1\t9\t9\t89\t289\t289\t289\t289\t178\t179\tDLAAAA\tCJBAAA\tAAAAxx\n407\t913\t1\t3\t7\t7\t7\t407\t407\t407\t407\t14\t15\tRPAAAA\tDJBAAA\tHHHHxx\n504\t914\t0\t0\t4\t4\t4\t504\t504\t504\t504\t8\t9\tKTAAAA\tEJBAAA\tOOOOxx\n8301\t915\t1\t1\t1\t1\t1\t301\t301\t3301\t8301\t2\t3\tHHAAAA\tFJBAAA\tVVVVxx\n1396\t916\t0\t0\t6\t16\t96\t396\t1396\t1396\t1396\t192\t193\tSBAAAA\tGJBAAA\tAAAAxx\n4794\t917\t0\t2\t4\t14\t94\t794\t794\t4794\t4794\t188\t189\tKCAAAA\tHJBAAA\tHHHHxx\n6400\t918\t0\t0\t0\t0\t0\t400\t400\t1400\t6400\t0\t1\tEMAAAA\tIJBAAA\tOOOOxx\n1275\t919\t1\t3\t5\t15\t75\t275\t1275\t1275\t1275\t150\t151\tBXAAAA\tJJBAAA\tVVVVxx\n5797\t920\t1\t1\t7\t17\t97\t797\t1797\t797\t5797\t194\t195\tZOAAAA\tKJBAAA\tAAAAxx\n2221\t921\t1\t1\t1\t1\t21\t221\t221\t2221\t2221\t42\t43\tLHAAAA\tLJBAAA\tHHHHxx\n2504\t922\t0\t0\t4\t4\t4\t504\t504\t2504\t2504\t8\t9\tISAAAA\tMJBAAA\tOOOOxx\n2143\t923\t1\t3\t3\t3\t43\t143\t143\t2143\t2143\t86\t87\tLEAAAA\tNJBAAA\tVVVVxx\n1083\t924\t1\t3\t3\t3\t83\t83\t1083\t1083\t1083\t166\t167\tRPAAAA\tOJBAAA\tAAAAxx\n6148\t925\t0\t0\t8\t8\t48\t148\t148\t1148\t6148\t96\t97\tMCAAAA\tPJBAAA\tHHHHxx\n3612\t926\t0\t0\t2\t12\t12\t612\t1612\t3612\t3612\t24\t25\tYIAAAA\tQJBAAA\tOOOOxx\n9499\t927\t1\t3\t9\t19\t99\t499\t1499\t4499\t9499\t198\t199\tJBAAAA\tRJBAAA\tVVVVxx\n5773\t928\t1\t1\t3\t13\t73\t773\t1773\t773\t5773\t146\t147\tBOAAAA\tSJBAAA\tAAAAxx\n1014\t929\t0\t2\t4\t14\t14\t14\t1014\t1014\t1014\t28\t29\tANAAAA\tTJBAAA\tHHHHxx\n1427\t930\t1\t3\t7\t7\t27\t427\t1427\t1427\t1427\t54\t55\tXCAAAA\tUJBAAA\tOOOOxx\n6770\t931\t0\t2\t0\t10\t70\t770\t770\t1770\t6770\t140\t141\tKAAAAA\tVJBAAA\tVVVVxx\n9042\t932\t0\t2\t2\t2\t42\t42\t1042\t4042\t9042\t84\t85\tUJAAAA\tWJBAAA\tAAAAxx\n9892\t933\t0\t0\t2\t12\t92\t892\t1892\t4892\t9892\t184\t185\tMQAAAA\tXJBAAA\tHHHHxx\n1771\t934\t1\t3\t1\t11\t71\t771\t1771\t1771\t1771\t142\t143\tDQAAAA\tYJBAAA\tOOOOxx\n7392\t935\t0\t0\t2\t12\t92\t392\t1392\t2392\t7392\t184\t185\tIYAAAA\tZJBAAA\tVVVVxx\n4465\t936\t1\t1\t5\t5\t65\t465\t465\t4465\t4465\t130\t131\tTPAAAA\tAKBAAA\tAAAAxx\n278\t937\t0\t2\t8\t18\t78\t278\t278\t278\t278\t156\t157\tSKAAAA\tBKBAAA\tHHHHxx\n7776\t938\t0\t0\t6\t16\t76\t776\t1776\t2776\t7776\t152\t153\tCNAAAA\tCKBAAA\tOOOOxx\n3763\t939\t1\t3\t3\t3\t63\t763\t1763\t3763\t3763\t126\t127\tTOAAAA\tDKBAAA\tVVVVxx\n7503\t940\t1\t3\t3\t3\t3\t503\t1503\t2503\t7503\t6\t7\tPCAAAA\tEKBAAA\tAAAAxx\n3793\t941\t1\t1\t3\t13\t93\t793\t1793\t3793\t3793\t186\t187\tXPAAAA\tFKBAAA\tHHHHxx\n6510\t942\t0\t2\t0\t10\t10\t510\t510\t1510\t6510\t20\t21\tKQAAAA\tGKBAAA\tOOOOxx\n7641\t943\t1\t1\t1\t1\t41\t641\t1641\t2641\t7641\t82\t83\tXHAAAA\tHKBAAA\tVVVVxx\n3228\t944\t0\t0\t8\t8\t28\t228\t1228\t3228\t3228\t56\t57\tEUAAAA\tIKBAAA\tAAAAxx\n194\t945\t0\t2\t4\t14\t94\t194\t194\t194\t194\t188\t189\tMHAAAA\tJKBAAA\tHHHHxx\n8555\t946\t1\t3\t5\t15\t55\t555\t555\t3555\t8555\t110\t111\tBRAAAA\tKKBAAA\tOOOOxx\n4997\t947\t1\t1\t7\t17\t97\t997\t997\t4997\t4997\t194\t195\tFKAAAA\tLKBAAA\tVVVVxx\n8687\t948\t1\t3\t7\t7\t87\t687\t687\t3687\t8687\t174\t175\tDWAAAA\tMKBAAA\tAAAAxx\n6632\t949\t0\t0\t2\t12\t32\t632\t632\t1632\t6632\t64\t65\tCVAAAA\tNKBAAA\tHHHHxx\n9607\t950\t1\t3\t7\t7\t7\t607\t1607\t4607\t9607\t14\t15\tNFAAAA\tOKBAAA\tOOOOxx\n6201\t951\t1\t1\t1\t1\t1\t201\t201\t1201\t6201\t2\t3\tNEAAAA\tPKBAAA\tVVVVxx\n857\t952\t1\t1\t7\t17\t57\t857\t857\t857\t857\t114\t115\tZGAAAA\tQKBAAA\tAAAAxx\n5623\t953\t1\t3\t3\t3\t23\t623\t1623\t623\t5623\t46\t47\tHIAAAA\tRKBAAA\tHHHHxx\n5979\t954\t1\t3\t9\t19\t79\t979\t1979\t979\t5979\t158\t159\tZVAAAA\tSKBAAA\tOOOOxx\n2201\t955\t1\t1\t1\t1\t1\t201\t201\t2201\t2201\t2\t3\tRGAAAA\tTKBAAA\tVVVVxx\n3166\t956\t0\t2\t6\t6\t66\t166\t1166\t3166\t3166\t132\t133\tURAAAA\tUKBAAA\tAAAAxx\n6249\t957\t1\t1\t9\t9\t49\t249\t249\t1249\t6249\t98\t99\tJGAAAA\tVKBAAA\tHHHHxx\n3271\t958\t1\t3\t1\t11\t71\t271\t1271\t3271\t3271\t142\t143\tVVAAAA\tWKBAAA\tOOOOxx\n7777\t959\t1\t1\t7\t17\t77\t777\t1777\t2777\t7777\t154\t155\tDNAAAA\tXKBAAA\tVVVVxx\n6732\t960\t0\t0\t2\t12\t32\t732\t732\t1732\t6732\t64\t65\tYYAAAA\tYKBAAA\tAAAAxx\n6297\t961\t1\t1\t7\t17\t97\t297\t297\t1297\t6297\t194\t195\tFIAAAA\tZKBAAA\tHHHHxx\n5685\t962\t1\t1\t5\t5\t85\t685\t1685\t685\t5685\t170\t171\tRKAAAA\tALBAAA\tOOOOxx\n9931\t963\t1\t3\t1\t11\t31\t931\t1931\t4931\t9931\t62\t63\tZRAAAA\tBLBAAA\tVVVVxx\n7485\t964\t1\t1\t5\t5\t85\t485\t1485\t2485\t7485\t170\t171\tXBAAAA\tCLBAAA\tAAAAxx\n386\t965\t0\t2\t6\t6\t86\t386\t386\t386\t386\t172\t173\tWOAAAA\tDLBAAA\tHHHHxx\n8204\t966\t0\t0\t4\t4\t4\t204\t204\t3204\t8204\t8\t9\tODAAAA\tELBAAA\tOOOOxx\n3606\t967\t0\t2\t6\t6\t6\t606\t1606\t3606\t3606\t12\t13\tSIAAAA\tFLBAAA\tVVVVxx\n1692\t968\t0\t0\t2\t12\t92\t692\t1692\t1692\t1692\t184\t185\tCNAAAA\tGLBAAA\tAAAAxx\n3002\t969\t0\t2\t2\t2\t2\t2\t1002\t3002\t3002\t4\t5\tMLAAAA\tHLBAAA\tHHHHxx\n9676\t970\t0\t0\t6\t16\t76\t676\t1676\t4676\t9676\t152\t153\tEIAAAA\tILBAAA\tOOOOxx\n915\t971\t1\t3\t5\t15\t15\t915\t915\t915\t915\t30\t31\tFJAAAA\tJLBAAA\tVVVVxx\n7706\t972\t0\t2\t6\t6\t6\t706\t1706\t2706\t7706\t12\t13\tKKAAAA\tKLBAAA\tAAAAxx\n6080\t973\t0\t0\t0\t0\t80\t80\t80\t1080\t6080\t160\t161\tWZAAAA\tLLBAAA\tHHHHxx\n1860\t974\t0\t0\t0\t0\t60\t860\t1860\t1860\t1860\t120\t121\tOTAAAA\tMLBAAA\tOOOOxx\n1444\t975\t0\t0\t4\t4\t44\t444\t1444\t1444\t1444\t88\t89\tODAAAA\tNLBAAA\tVVVVxx\n7208\t976\t0\t0\t8\t8\t8\t208\t1208\t2208\t7208\t16\t17\tGRAAAA\tOLBAAA\tAAAAxx\n8554\t977\t0\t2\t4\t14\t54\t554\t554\t3554\t8554\t108\t109\tARAAAA\tPLBAAA\tHHHHxx\n2028\t978\t0\t0\t8\t8\t28\t28\t28\t2028\t2028\t56\t57\tAAAAAA\tQLBAAA\tOOOOxx\n9893\t979\t1\t1\t3\t13\t93\t893\t1893\t4893\t9893\t186\t187\tNQAAAA\tRLBAAA\tVVVVxx\n4740\t980\t0\t0\t0\t0\t40\t740\t740\t4740\t4740\t80\t81\tIAAAAA\tSLBAAA\tAAAAxx\n6186\t981\t0\t2\t6\t6\t86\t186\t186\t1186\t6186\t172\t173\tYDAAAA\tTLBAAA\tHHHHxx\n6357\t982\t1\t1\t7\t17\t57\t357\t357\t1357\t6357\t114\t115\tNKAAAA\tULBAAA\tOOOOxx\n3699\t983\t1\t3\t9\t19\t99\t699\t1699\t3699\t3699\t198\t199\tHMAAAA\tVLBAAA\tVVVVxx\n7620\t984\t0\t0\t0\t0\t20\t620\t1620\t2620\t7620\t40\t41\tCHAAAA\tWLBAAA\tAAAAxx\n921\t985\t1\t1\t1\t1\t21\t921\t921\t921\t921\t42\t43\tLJAAAA\tXLBAAA\tHHHHxx\n5506\t986\t0\t2\t6\t6\t6\t506\t1506\t506\t5506\t12\t13\tUDAAAA\tYLBAAA\tOOOOxx\n8851\t987\t1\t3\t1\t11\t51\t851\t851\t3851\t8851\t102\t103\tLCAAAA\tZLBAAA\tVVVVxx\n3205\t988\t1\t1\t5\t5\t5\t205\t1205\t3205\t3205\t10\t11\tHTAAAA\tAMBAAA\tAAAAxx\n1956\t989\t0\t0\t6\t16\t56\t956\t1956\t1956\t1956\t112\t113\tGXAAAA\tBMBAAA\tHHHHxx\n6272\t990\t0\t0\t2\t12\t72\t272\t272\t1272\t6272\t144\t145\tGHAAAA\tCMBAAA\tOOOOxx\n1509\t991\t1\t1\t9\t9\t9\t509\t1509\t1509\t1509\t18\t19\tBGAAAA\tDMBAAA\tVVVVxx\n53\t992\t1\t1\t3\t13\t53\t53\t53\t53\t53\t106\t107\tBCAAAA\tEMBAAA\tAAAAxx\n213\t993\t1\t1\t3\t13\t13\t213\t213\t213\t213\t26\t27\tFIAAAA\tFMBAAA\tHHHHxx\n4924\t994\t0\t0\t4\t4\t24\t924\t924\t4924\t4924\t48\t49\tKHAAAA\tGMBAAA\tOOOOxx\n2097\t995\t1\t1\t7\t17\t97\t97\t97\t2097\t2097\t194\t195\tRCAAAA\tHMBAAA\tVVVVxx\n4607\t996\t1\t3\t7\t7\t7\t607\t607\t4607\t4607\t14\t15\tFVAAAA\tIMBAAA\tAAAAxx\n1582\t997\t0\t2\t2\t2\t82\t582\t1582\t1582\t1582\t164\t165\tWIAAAA\tJMBAAA\tHHHHxx\n6643\t998\t1\t3\t3\t3\t43\t643\t643\t1643\t6643\t86\t87\tNVAAAA\tKMBAAA\tOOOOxx\n2238\t999\t0\t2\t8\t18\t38\t238\t238\t2238\t2238\t76\t77\tCIAAAA\tLMBAAA\tVVVVxx\n2942\t1000\t0\t2\t2\t2\t42\t942\t942\t2942\t2942\t84\t85\tEJAAAA\tMMBAAA\tAAAAxx\n1655\t1001\t1\t3\t5\t15\t55\t655\t1655\t1655\t1655\t110\t111\tRLAAAA\tNMBAAA\tHHHHxx\n3226\t1002\t0\t2\t6\t6\t26\t226\t1226\t3226\t3226\t52\t53\tCUAAAA\tOMBAAA\tOOOOxx\n4263\t1003\t1\t3\t3\t3\t63\t263\t263\t4263\t4263\t126\t127\tZHAAAA\tPMBAAA\tVVVVxx\n960\t1004\t0\t0\t0\t0\t60\t960\t960\t960\t960\t120\t121\tYKAAAA\tQMBAAA\tAAAAxx\n1213\t1005\t1\t1\t3\t13\t13\t213\t1213\t1213\t1213\t26\t27\tRUAAAA\tRMBAAA\tHHHHxx\n1845\t1006\t1\t1\t5\t5\t45\t845\t1845\t1845\t1845\t90\t91\tZSAAAA\tSMBAAA\tOOOOxx\n6944\t1007\t0\t0\t4\t4\t44\t944\t944\t1944\t6944\t88\t89\tCHAAAA\tTMBAAA\tVVVVxx\n5284\t1008\t0\t0\t4\t4\t84\t284\t1284\t284\t5284\t168\t169\tGVAAAA\tUMBAAA\tAAAAxx\n188\t1009\t0\t0\t8\t8\t88\t188\t188\t188\t188\t176\t177\tGHAAAA\tVMBAAA\tHHHHxx\n748\t1010\t0\t0\t8\t8\t48\t748\t748\t748\t748\t96\t97\tUCAAAA\tWMBAAA\tOOOOxx\n2226\t1011\t0\t2\t6\t6\t26\t226\t226\t2226\t2226\t52\t53\tQHAAAA\tXMBAAA\tVVVVxx\n7342\t1012\t0\t2\t2\t2\t42\t342\t1342\t2342\t7342\t84\t85\tKWAAAA\tYMBAAA\tAAAAxx\n6120\t1013\t0\t0\t0\t0\t20\t120\t120\t1120\t6120\t40\t41\tKBAAAA\tZMBAAA\tHHHHxx\n536\t1014\t0\t0\t6\t16\t36\t536\t536\t536\t536\t72\t73\tQUAAAA\tANBAAA\tOOOOxx\n3239\t1015\t1\t3\t9\t19\t39\t239\t1239\t3239\t3239\t78\t79\tPUAAAA\tBNBAAA\tVVVVxx\n2832\t1016\t0\t0\t2\t12\t32\t832\t832\t2832\t2832\t64\t65\tYEAAAA\tCNBAAA\tAAAAxx\n5296\t1017\t0\t0\t6\t16\t96\t296\t1296\t296\t5296\t192\t193\tSVAAAA\tDNBAAA\tHHHHxx\n5795\t1018\t1\t3\t5\t15\t95\t795\t1795\t795\t5795\t190\t191\tXOAAAA\tENBAAA\tOOOOxx\n6290\t1019\t0\t2\t0\t10\t90\t290\t290\t1290\t6290\t180\t181\tYHAAAA\tFNBAAA\tVVVVxx\n4916\t1020\t0\t0\t6\t16\t16\t916\t916\t4916\t4916\t32\t33\tCHAAAA\tGNBAAA\tAAAAxx\n8366\t1021\t0\t2\t6\t6\t66\t366\t366\t3366\t8366\t132\t133\tUJAAAA\tHNBAAA\tHHHHxx\n4248\t1022\t0\t0\t8\t8\t48\t248\t248\t4248\t4248\t96\t97\tKHAAAA\tINBAAA\tOOOOxx\n6460\t1023\t0\t0\t0\t0\t60\t460\t460\t1460\t6460\t120\t121\tMOAAAA\tJNBAAA\tVVVVxx\n9296\t1024\t0\t0\t6\t16\t96\t296\t1296\t4296\t9296\t192\t193\tOTAAAA\tKNBAAA\tAAAAxx\n3486\t1025\t0\t2\t6\t6\t86\t486\t1486\t3486\t3486\t172\t173\tCEAAAA\tLNBAAA\tHHHHxx\n5664\t1026\t0\t0\t4\t4\t64\t664\t1664\t664\t5664\t128\t129\tWJAAAA\tMNBAAA\tOOOOxx\n7624\t1027\t0\t0\t4\t4\t24\t624\t1624\t2624\t7624\t48\t49\tGHAAAA\tNNBAAA\tVVVVxx\n2790\t1028\t0\t2\t0\t10\t90\t790\t790\t2790\t2790\t180\t181\tIDAAAA\tONBAAA\tAAAAxx\n682\t1029\t0\t2\t2\t2\t82\t682\t682\t682\t682\t164\t165\tGAAAAA\tPNBAAA\tHHHHxx\n6412\t1030\t0\t0\t2\t12\t12\t412\t412\t1412\t6412\t24\t25\tQMAAAA\tQNBAAA\tOOOOxx\n6882\t1031\t0\t2\t2\t2\t82\t882\t882\t1882\t6882\t164\t165\tSEAAAA\tRNBAAA\tVVVVxx\n1332\t1032\t0\t0\t2\t12\t32\t332\t1332\t1332\t1332\t64\t65\tGZAAAA\tSNBAAA\tAAAAxx\n4911\t1033\t1\t3\t1\t11\t11\t911\t911\t4911\t4911\t22\t23\tXGAAAA\tTNBAAA\tHHHHxx\n3528\t1034\t0\t0\t8\t8\t28\t528\t1528\t3528\t3528\t56\t57\tSFAAAA\tUNBAAA\tOOOOxx\n271\t1035\t1\t3\t1\t11\t71\t271\t271\t271\t271\t142\t143\tLKAAAA\tVNBAAA\tVVVVxx\n7007\t1036\t1\t3\t7\t7\t7\t7\t1007\t2007\t7007\t14\t15\tNJAAAA\tWNBAAA\tAAAAxx\n2198\t1037\t0\t2\t8\t18\t98\t198\t198\t2198\t2198\t196\t197\tOGAAAA\tXNBAAA\tHHHHxx\n4266\t1038\t0\t2\t6\t6\t66\t266\t266\t4266\t4266\t132\t133\tCIAAAA\tYNBAAA\tOOOOxx\n9867\t1039\t1\t3\t7\t7\t67\t867\t1867\t4867\t9867\t134\t135\tNPAAAA\tZNBAAA\tVVVVxx\n7602\t1040\t0\t2\t2\t2\t2\t602\t1602\t2602\t7602\t4\t5\tKGAAAA\tAOBAAA\tAAAAxx\n7521\t1041\t1\t1\t1\t1\t21\t521\t1521\t2521\t7521\t42\t43\tHDAAAA\tBOBAAA\tHHHHxx\n7200\t1042\t0\t0\t0\t0\t0\t200\t1200\t2200\t7200\t0\t1\tYQAAAA\tCOBAAA\tOOOOxx\n4816\t1043\t0\t0\t6\t16\t16\t816\t816\t4816\t4816\t32\t33\tGDAAAA\tDOBAAA\tVVVVxx\n1669\t1044\t1\t1\t9\t9\t69\t669\t1669\t1669\t1669\t138\t139\tFMAAAA\tEOBAAA\tAAAAxx\n4764\t1045\t0\t0\t4\t4\t64\t764\t764\t4764\t4764\t128\t129\tGBAAAA\tFOBAAA\tHHHHxx\n7393\t1046\t1\t1\t3\t13\t93\t393\t1393\t2393\t7393\t186\t187\tJYAAAA\tGOBAAA\tOOOOxx\n7434\t1047\t0\t2\t4\t14\t34\t434\t1434\t2434\t7434\t68\t69\tYZAAAA\tHOBAAA\tVVVVxx\n9079\t1048\t1\t3\t9\t19\t79\t79\t1079\t4079\t9079\t158\t159\tFLAAAA\tIOBAAA\tAAAAxx\n9668\t1049\t0\t0\t8\t8\t68\t668\t1668\t4668\t9668\t136\t137\tWHAAAA\tJOBAAA\tHHHHxx\n7184\t1050\t0\t0\t4\t4\t84\t184\t1184\t2184\t7184\t168\t169\tIQAAAA\tKOBAAA\tOOOOxx\n7347\t1051\t1\t3\t7\t7\t47\t347\t1347\t2347\t7347\t94\t95\tPWAAAA\tLOBAAA\tVVVVxx\n951\t1052\t1\t3\t1\t11\t51\t951\t951\t951\t951\t102\t103\tPKAAAA\tMOBAAA\tAAAAxx\n4513\t1053\t1\t1\t3\t13\t13\t513\t513\t4513\t4513\t26\t27\tPRAAAA\tNOBAAA\tHHHHxx\n2692\t1054\t0\t0\t2\t12\t92\t692\t692\t2692\t2692\t184\t185\tOZAAAA\tOOBAAA\tOOOOxx\n9930\t1055\t0\t2\t0\t10\t30\t930\t1930\t4930\t9930\t60\t61\tYRAAAA\tPOBAAA\tVVVVxx\n4516\t1056\t0\t0\t6\t16\t16\t516\t516\t4516\t4516\t32\t33\tSRAAAA\tQOBAAA\tAAAAxx\n1592\t1057\t0\t0\t2\t12\t92\t592\t1592\t1592\t1592\t184\t185\tGJAAAA\tROBAAA\tHHHHxx\n6312\t1058\t0\t0\t2\t12\t12\t312\t312\t1312\t6312\t24\t25\tUIAAAA\tSOBAAA\tOOOOxx\n185\t1059\t1\t1\t5\t5\t85\t185\t185\t185\t185\t170\t171\tDHAAAA\tTOBAAA\tVVVVxx\n1848\t1060\t0\t0\t8\t8\t48\t848\t1848\t1848\t1848\t96\t97\tCTAAAA\tUOBAAA\tAAAAxx\n5844\t1061\t0\t0\t4\t4\t44\t844\t1844\t844\t5844\t88\t89\tUQAAAA\tVOBAAA\tHHHHxx\n1666\t1062\t0\t2\t6\t6\t66\t666\t1666\t1666\t1666\t132\t133\tCMAAAA\tWOBAAA\tOOOOxx\n5864\t1063\t0\t0\t4\t4\t64\t864\t1864\t864\t5864\t128\t129\tORAAAA\tXOBAAA\tVVVVxx\n1004\t1064\t0\t0\t4\t4\t4\t4\t1004\t1004\t1004\t8\t9\tQMAAAA\tYOBAAA\tAAAAxx\n1758\t1065\t0\t2\t8\t18\t58\t758\t1758\t1758\t1758\t116\t117\tQPAAAA\tZOBAAA\tHHHHxx\n8823\t1066\t1\t3\t3\t3\t23\t823\t823\t3823\t8823\t46\t47\tJBAAAA\tAPBAAA\tOOOOxx\n129\t1067\t1\t1\t9\t9\t29\t129\t129\t129\t129\t58\t59\tZEAAAA\tBPBAAA\tVVVVxx\n5703\t1068\t1\t3\t3\t3\t3\t703\t1703\t703\t5703\t6\t7\tJLAAAA\tCPBAAA\tAAAAxx\n3331\t1069\t1\t3\t1\t11\t31\t331\t1331\t3331\t3331\t62\t63\tDYAAAA\tDPBAAA\tHHHHxx\n5791\t1070\t1\t3\t1\t11\t91\t791\t1791\t791\t5791\t182\t183\tTOAAAA\tEPBAAA\tOOOOxx\n4421\t1071\t1\t1\t1\t1\t21\t421\t421\t4421\t4421\t42\t43\tBOAAAA\tFPBAAA\tVVVVxx\n9740\t1072\t0\t0\t0\t0\t40\t740\t1740\t4740\t9740\t80\t81\tQKAAAA\tGPBAAA\tAAAAxx\n798\t1073\t0\t2\t8\t18\t98\t798\t798\t798\t798\t196\t197\tSEAAAA\tHPBAAA\tHHHHxx\n571\t1074\t1\t3\t1\t11\t71\t571\t571\t571\t571\t142\t143\tZVAAAA\tIPBAAA\tOOOOxx\n7084\t1075\t0\t0\t4\t4\t84\t84\t1084\t2084\t7084\t168\t169\tMMAAAA\tJPBAAA\tVVVVxx\n650\t1076\t0\t2\t0\t10\t50\t650\t650\t650\t650\t100\t101\tAZAAAA\tKPBAAA\tAAAAxx\n1467\t1077\t1\t3\t7\t7\t67\t467\t1467\t1467\t1467\t134\t135\tLEAAAA\tLPBAAA\tHHHHxx\n5446\t1078\t0\t2\t6\t6\t46\t446\t1446\t446\t5446\t92\t93\tMBAAAA\tMPBAAA\tOOOOxx\n830\t1079\t0\t2\t0\t10\t30\t830\t830\t830\t830\t60\t61\tYFAAAA\tNPBAAA\tVVVVxx\n5516\t1080\t0\t0\t6\t16\t16\t516\t1516\t516\t5516\t32\t33\tEEAAAA\tOPBAAA\tAAAAxx\n8520\t1081\t0\t0\t0\t0\t20\t520\t520\t3520\t8520\t40\t41\tSPAAAA\tPPBAAA\tHHHHxx\n1152\t1082\t0\t0\t2\t12\t52\t152\t1152\t1152\t1152\t104\t105\tISAAAA\tQPBAAA\tOOOOxx\n862\t1083\t0\t2\t2\t2\t62\t862\t862\t862\t862\t124\t125\tEHAAAA\tRPBAAA\tVVVVxx\n454\t1084\t0\t2\t4\t14\t54\t454\t454\t454\t454\t108\t109\tMRAAAA\tSPBAAA\tAAAAxx\n9956\t1085\t0\t0\t6\t16\t56\t956\t1956\t4956\t9956\t112\t113\tYSAAAA\tTPBAAA\tHHHHxx\n1654\t1086\t0\t2\t4\t14\t54\t654\t1654\t1654\t1654\t108\t109\tQLAAAA\tUPBAAA\tOOOOxx\n257\t1087\t1\t1\t7\t17\t57\t257\t257\t257\t257\t114\t115\tXJAAAA\tVPBAAA\tVVVVxx\n5469\t1088\t1\t1\t9\t9\t69\t469\t1469\t469\t5469\t138\t139\tJCAAAA\tWPBAAA\tAAAAxx\n9075\t1089\t1\t3\t5\t15\t75\t75\t1075\t4075\t9075\t150\t151\tBLAAAA\tXPBAAA\tHHHHxx\n7799\t1090\t1\t3\t9\t19\t99\t799\t1799\t2799\t7799\t198\t199\tZNAAAA\tYPBAAA\tOOOOxx\n2001\t1091\t1\t1\t1\t1\t1\t1\t1\t2001\t2001\t2\t3\tZYAAAA\tZPBAAA\tVVVVxx\n9786\t1092\t0\t2\t6\t6\t86\t786\t1786\t4786\t9786\t172\t173\tKMAAAA\tAQBAAA\tAAAAxx\n7281\t1093\t1\t1\t1\t1\t81\t281\t1281\t2281\t7281\t162\t163\tBUAAAA\tBQBAAA\tHHHHxx\n5137\t1094\t1\t1\t7\t17\t37\t137\t1137\t137\t5137\t74\t75\tPPAAAA\tCQBAAA\tOOOOxx\n4053\t1095\t1\t1\t3\t13\t53\t53\t53\t4053\t4053\t106\t107\tXZAAAA\tDQBAAA\tVVVVxx\n7911\t1096\t1\t3\t1\t11\t11\t911\t1911\t2911\t7911\t22\t23\tHSAAAA\tEQBAAA\tAAAAxx\n4298\t1097\t0\t2\t8\t18\t98\t298\t298\t4298\t4298\t196\t197\tIJAAAA\tFQBAAA\tHHHHxx\n4805\t1098\t1\t1\t5\t5\t5\t805\t805\t4805\t4805\t10\t11\tVCAAAA\tGQBAAA\tOOOOxx\n9038\t1099\t0\t2\t8\t18\t38\t38\t1038\t4038\t9038\t76\t77\tQJAAAA\tHQBAAA\tVVVVxx\n8023\t1100\t1\t3\t3\t3\t23\t23\t23\t3023\t8023\t46\t47\tPWAAAA\tIQBAAA\tAAAAxx\n6595\t1101\t1\t3\t5\t15\t95\t595\t595\t1595\t6595\t190\t191\tRTAAAA\tJQBAAA\tHHHHxx\n9831\t1102\t1\t3\t1\t11\t31\t831\t1831\t4831\t9831\t62\t63\tDOAAAA\tKQBAAA\tOOOOxx\n788\t1103\t0\t0\t8\t8\t88\t788\t788\t788\t788\t176\t177\tIEAAAA\tLQBAAA\tVVVVxx\n902\t1104\t0\t2\t2\t2\t2\t902\t902\t902\t902\t4\t5\tSIAAAA\tMQBAAA\tAAAAxx\n9137\t1105\t1\t1\t7\t17\t37\t137\t1137\t4137\t9137\t74\t75\tLNAAAA\tNQBAAA\tHHHHxx\n1744\t1106\t0\t0\t4\t4\t44\t744\t1744\t1744\t1744\t88\t89\tCPAAAA\tOQBAAA\tOOOOxx\n7285\t1107\t1\t1\t5\t5\t85\t285\t1285\t2285\t7285\t170\t171\tFUAAAA\tPQBAAA\tVVVVxx\n7006\t1108\t0\t2\t6\t6\t6\t6\t1006\t2006\t7006\t12\t13\tMJAAAA\tQQBAAA\tAAAAxx\n9236\t1109\t0\t0\t6\t16\t36\t236\t1236\t4236\t9236\t72\t73\tGRAAAA\tRQBAAA\tHHHHxx\n5472\t1110\t0\t0\t2\t12\t72\t472\t1472\t472\t5472\t144\t145\tMCAAAA\tSQBAAA\tOOOOxx\n7975\t1111\t1\t3\t5\t15\t75\t975\t1975\t2975\t7975\t150\t151\tTUAAAA\tTQBAAA\tVVVVxx\n4181\t1112\t1\t1\t1\t1\t81\t181\t181\t4181\t4181\t162\t163\tVEAAAA\tUQBAAA\tAAAAxx\n7677\t1113\t1\t1\t7\t17\t77\t677\t1677\t2677\t7677\t154\t155\tHJAAAA\tVQBAAA\tHHHHxx\n35\t1114\t1\t3\t5\t15\t35\t35\t35\t35\t35\t70\t71\tJBAAAA\tWQBAAA\tOOOOxx\n6813\t1115\t1\t1\t3\t13\t13\t813\t813\t1813\t6813\t26\t27\tBCAAAA\tXQBAAA\tVVVVxx\n6618\t1116\t0\t2\t8\t18\t18\t618\t618\t1618\t6618\t36\t37\tOUAAAA\tYQBAAA\tAAAAxx\n8069\t1117\t1\t1\t9\t9\t69\t69\t69\t3069\t8069\t138\t139\tJYAAAA\tZQBAAA\tHHHHxx\n3071\t1118\t1\t3\t1\t11\t71\t71\t1071\t3071\t3071\t142\t143\tDOAAAA\tARBAAA\tOOOOxx\n4390\t1119\t0\t2\t0\t10\t90\t390\t390\t4390\t4390\t180\t181\tWMAAAA\tBRBAAA\tVVVVxx\n7764\t1120\t0\t0\t4\t4\t64\t764\t1764\t2764\t7764\t128\t129\tQMAAAA\tCRBAAA\tAAAAxx\n8163\t1121\t1\t3\t3\t3\t63\t163\t163\t3163\t8163\t126\t127\tZBAAAA\tDRBAAA\tHHHHxx\n1961\t1122\t1\t1\t1\t1\t61\t961\t1961\t1961\t1961\t122\t123\tLXAAAA\tERBAAA\tOOOOxx\n1103\t1123\t1\t3\t3\t3\t3\t103\t1103\t1103\t1103\t6\t7\tLQAAAA\tFRBAAA\tVVVVxx\n5486\t1124\t0\t2\t6\t6\t86\t486\t1486\t486\t5486\t172\t173\tADAAAA\tGRBAAA\tAAAAxx\n9513\t1125\t1\t1\t3\t13\t13\t513\t1513\t4513\t9513\t26\t27\tXBAAAA\tHRBAAA\tHHHHxx\n7311\t1126\t1\t3\t1\t11\t11\t311\t1311\t2311\t7311\t22\t23\tFVAAAA\tIRBAAA\tOOOOxx\n4144\t1127\t0\t0\t4\t4\t44\t144\t144\t4144\t4144\t88\t89\tKDAAAA\tJRBAAA\tVVVVxx\n7901\t1128\t1\t1\t1\t1\t1\t901\t1901\t2901\t7901\t2\t3\tXRAAAA\tKRBAAA\tAAAAxx\n4629\t1129\t1\t1\t9\t9\t29\t629\t629\t4629\t4629\t58\t59\tBWAAAA\tLRBAAA\tHHHHxx\n6858\t1130\t0\t2\t8\t18\t58\t858\t858\t1858\t6858\t116\t117\tUDAAAA\tMRBAAA\tOOOOxx\n125\t1131\t1\t1\t5\t5\t25\t125\t125\t125\t125\t50\t51\tVEAAAA\tNRBAAA\tVVVVxx\n3834\t1132\t0\t2\t4\t14\t34\t834\t1834\t3834\t3834\t68\t69\tMRAAAA\tORBAAA\tAAAAxx\n8155\t1133\t1\t3\t5\t15\t55\t155\t155\t3155\t8155\t110\t111\tRBAAAA\tPRBAAA\tHHHHxx\n8230\t1134\t0\t2\t0\t10\t30\t230\t230\t3230\t8230\t60\t61\tOEAAAA\tQRBAAA\tOOOOxx\n744\t1135\t0\t0\t4\t4\t44\t744\t744\t744\t744\t88\t89\tQCAAAA\tRRBAAA\tVVVVxx\n357\t1136\t1\t1\t7\t17\t57\t357\t357\t357\t357\t114\t115\tTNAAAA\tSRBAAA\tAAAAxx\n2159\t1137\t1\t3\t9\t19\t59\t159\t159\t2159\t2159\t118\t119\tBFAAAA\tTRBAAA\tHHHHxx\n8559\t1138\t1\t3\t9\t19\t59\t559\t559\t3559\t8559\t118\t119\tFRAAAA\tURBAAA\tOOOOxx\n6866\t1139\t0\t2\t6\t6\t66\t866\t866\t1866\t6866\t132\t133\tCEAAAA\tVRBAAA\tVVVVxx\n3863\t1140\t1\t3\t3\t3\t63\t863\t1863\t3863\t3863\t126\t127\tPSAAAA\tWRBAAA\tAAAAxx\n4193\t1141\t1\t1\t3\t13\t93\t193\t193\t4193\t4193\t186\t187\tHFAAAA\tXRBAAA\tHHHHxx\n3277\t1142\t1\t1\t7\t17\t77\t277\t1277\t3277\t3277\t154\t155\tBWAAAA\tYRBAAA\tOOOOxx\n5577\t1143\t1\t1\t7\t17\t77\t577\t1577\t577\t5577\t154\t155\tNGAAAA\tZRBAAA\tVVVVxx\n9503\t1144\t1\t3\t3\t3\t3\t503\t1503\t4503\t9503\t6\t7\tNBAAAA\tASBAAA\tAAAAxx\n7642\t1145\t0\t2\t2\t2\t42\t642\t1642\t2642\t7642\t84\t85\tYHAAAA\tBSBAAA\tHHHHxx\n6197\t1146\t1\t1\t7\t17\t97\t197\t197\t1197\t6197\t194\t195\tJEAAAA\tCSBAAA\tOOOOxx\n8995\t1147\t1\t3\t5\t15\t95\t995\t995\t3995\t8995\t190\t191\tZHAAAA\tDSBAAA\tVVVVxx\n440\t1148\t0\t0\t0\t0\t40\t440\t440\t440\t440\t80\t81\tYQAAAA\tESBAAA\tAAAAxx\n8418\t1149\t0\t2\t8\t18\t18\t418\t418\t3418\t8418\t36\t37\tULAAAA\tFSBAAA\tHHHHxx\n8531\t1150\t1\t3\t1\t11\t31\t531\t531\t3531\t8531\t62\t63\tDQAAAA\tGSBAAA\tOOOOxx\n3790\t1151\t0\t2\t0\t10\t90\t790\t1790\t3790\t3790\t180\t181\tUPAAAA\tHSBAAA\tVVVVxx\n7610\t1152\t0\t2\t0\t10\t10\t610\t1610\t2610\t7610\t20\t21\tSGAAAA\tISBAAA\tAAAAxx\n1252\t1153\t0\t0\t2\t12\t52\t252\t1252\t1252\t1252\t104\t105\tEWAAAA\tJSBAAA\tHHHHxx\n7559\t1154\t1\t3\t9\t19\t59\t559\t1559\t2559\t7559\t118\t119\tTEAAAA\tKSBAAA\tOOOOxx\n9945\t1155\t1\t1\t5\t5\t45\t945\t1945\t4945\t9945\t90\t91\tNSAAAA\tLSBAAA\tVVVVxx\n9023\t1156\t1\t3\t3\t3\t23\t23\t1023\t4023\t9023\t46\t47\tBJAAAA\tMSBAAA\tAAAAxx\n3516\t1157\t0\t0\t6\t16\t16\t516\t1516\t3516\t3516\t32\t33\tGFAAAA\tNSBAAA\tHHHHxx\n4671\t1158\t1\t3\t1\t11\t71\t671\t671\t4671\t4671\t142\t143\tRXAAAA\tOSBAAA\tOOOOxx\n1465\t1159\t1\t1\t5\t5\t65\t465\t1465\t1465\t1465\t130\t131\tJEAAAA\tPSBAAA\tVVVVxx\n9515\t1160\t1\t3\t5\t15\t15\t515\t1515\t4515\t9515\t30\t31\tZBAAAA\tQSBAAA\tAAAAxx\n3242\t1161\t0\t2\t2\t2\t42\t242\t1242\t3242\t3242\t84\t85\tSUAAAA\tRSBAAA\tHHHHxx\n1732\t1162\t0\t0\t2\t12\t32\t732\t1732\t1732\t1732\t64\t65\tQOAAAA\tSSBAAA\tOOOOxx\n1678\t1163\t0\t2\t8\t18\t78\t678\t1678\t1678\t1678\t156\t157\tOMAAAA\tTSBAAA\tVVVVxx\n1464\t1164\t0\t0\t4\t4\t64\t464\t1464\t1464\t1464\t128\t129\tIEAAAA\tUSBAAA\tAAAAxx\n6546\t1165\t0\t2\t6\t6\t46\t546\t546\t1546\t6546\t92\t93\tURAAAA\tVSBAAA\tHHHHxx\n4448\t1166\t0\t0\t8\t8\t48\t448\t448\t4448\t4448\t96\t97\tCPAAAA\tWSBAAA\tOOOOxx\n9847\t1167\t1\t3\t7\t7\t47\t847\t1847\t4847\t9847\t94\t95\tTOAAAA\tXSBAAA\tVVVVxx\n8264\t1168\t0\t0\t4\t4\t64\t264\t264\t3264\t8264\t128\t129\tWFAAAA\tYSBAAA\tAAAAxx\n1620\t1169\t0\t0\t0\t0\t20\t620\t1620\t1620\t1620\t40\t41\tIKAAAA\tZSBAAA\tHHHHxx\n9388\t1170\t0\t0\t8\t8\t88\t388\t1388\t4388\t9388\t176\t177\tCXAAAA\tATBAAA\tOOOOxx\n6445\t1171\t1\t1\t5\t5\t45\t445\t445\t1445\t6445\t90\t91\tXNAAAA\tBTBAAA\tVVVVxx\n4789\t1172\t1\t1\t9\t9\t89\t789\t789\t4789\t4789\t178\t179\tFCAAAA\tCTBAAA\tAAAAxx\n1562\t1173\t0\t2\t2\t2\t62\t562\t1562\t1562\t1562\t124\t125\tCIAAAA\tDTBAAA\tHHHHxx\n7305\t1174\t1\t1\t5\t5\t5\t305\t1305\t2305\t7305\t10\t11\tZUAAAA\tETBAAA\tOOOOxx\n6344\t1175\t0\t0\t4\t4\t44\t344\t344\t1344\t6344\t88\t89\tAKAAAA\tFTBAAA\tVVVVxx\n5130\t1176\t0\t2\t0\t10\t30\t130\t1130\t130\t5130\t60\t61\tIPAAAA\tGTBAAA\tAAAAxx\n3284\t1177\t0\t0\t4\t4\t84\t284\t1284\t3284\t3284\t168\t169\tIWAAAA\tHTBAAA\tHHHHxx\n6346\t1178\t0\t2\t6\t6\t46\t346\t346\t1346\t6346\t92\t93\tCKAAAA\tITBAAA\tOOOOxx\n1061\t1179\t1\t1\t1\t1\t61\t61\t1061\t1061\t1061\t122\t123\tVOAAAA\tJTBAAA\tVVVVxx\n872\t1180\t0\t0\t2\t12\t72\t872\t872\t872\t872\t144\t145\tOHAAAA\tKTBAAA\tAAAAxx\n123\t1181\t1\t3\t3\t3\t23\t123\t123\t123\t123\t46\t47\tTEAAAA\tLTBAAA\tHHHHxx\n7903\t1182\t1\t3\t3\t3\t3\t903\t1903\t2903\t7903\t6\t7\tZRAAAA\tMTBAAA\tOOOOxx\n560\t1183\t0\t0\t0\t0\t60\t560\t560\t560\t560\t120\t121\tOVAAAA\tNTBAAA\tVVVVxx\n4446\t1184\t0\t2\t6\t6\t46\t446\t446\t4446\t4446\t92\t93\tAPAAAA\tOTBAAA\tAAAAxx\n3909\t1185\t1\t1\t9\t9\t9\t909\t1909\t3909\t3909\t18\t19\tJUAAAA\tPTBAAA\tHHHHxx\n669\t1186\t1\t1\t9\t9\t69\t669\t669\t669\t669\t138\t139\tTZAAAA\tQTBAAA\tOOOOxx\n7843\t1187\t1\t3\t3\t3\t43\t843\t1843\t2843\t7843\t86\t87\tRPAAAA\tRTBAAA\tVVVVxx\n2546\t1188\t0\t2\t6\t6\t46\t546\t546\t2546\t2546\t92\t93\tYTAAAA\tSTBAAA\tAAAAxx\n6757\t1189\t1\t1\t7\t17\t57\t757\t757\t1757\t6757\t114\t115\tXZAAAA\tTTBAAA\tHHHHxx\n466\t1190\t0\t2\t6\t6\t66\t466\t466\t466\t466\t132\t133\tYRAAAA\tUTBAAA\tOOOOxx\n5556\t1191\t0\t0\t6\t16\t56\t556\t1556\t556\t5556\t112\t113\tSFAAAA\tVTBAAA\tVVVVxx\n7196\t1192\t0\t0\t6\t16\t96\t196\t1196\t2196\t7196\t192\t193\tUQAAAA\tWTBAAA\tAAAAxx\n2947\t1193\t1\t3\t7\t7\t47\t947\t947\t2947\t2947\t94\t95\tJJAAAA\tXTBAAA\tHHHHxx\n6493\t1194\t1\t1\t3\t13\t93\t493\t493\t1493\t6493\t186\t187\tTPAAAA\tYTBAAA\tOOOOxx\n7203\t1195\t1\t3\t3\t3\t3\t203\t1203\t2203\t7203\t6\t7\tBRAAAA\tZTBAAA\tVVVVxx\n3716\t1196\t0\t0\t6\t16\t16\t716\t1716\t3716\t3716\t32\t33\tYMAAAA\tAUBAAA\tAAAAxx\n8058\t1197\t0\t2\t8\t18\t58\t58\t58\t3058\t8058\t116\t117\tYXAAAA\tBUBAAA\tHHHHxx\n433\t1198\t1\t1\t3\t13\t33\t433\t433\t433\t433\t66\t67\tRQAAAA\tCUBAAA\tOOOOxx\n7649\t1199\t1\t1\t9\t9\t49\t649\t1649\t2649\t7649\t98\t99\tFIAAAA\tDUBAAA\tVVVVxx\n6966\t1200\t0\t2\t6\t6\t66\t966\t966\t1966\t6966\t132\t133\tYHAAAA\tEUBAAA\tAAAAxx\n553\t1201\t1\t1\t3\t13\t53\t553\t553\t553\t553\t106\t107\tHVAAAA\tFUBAAA\tHHHHxx\n3677\t1202\t1\t1\t7\t17\t77\t677\t1677\t3677\t3677\t154\t155\tLLAAAA\tGUBAAA\tOOOOxx\n2344\t1203\t0\t0\t4\t4\t44\t344\t344\t2344\t2344\t88\t89\tEMAAAA\tHUBAAA\tVVVVxx\n7439\t1204\t1\t3\t9\t19\t39\t439\t1439\t2439\t7439\t78\t79\tDAAAAA\tIUBAAA\tAAAAxx\n3910\t1205\t0\t2\t0\t10\t10\t910\t1910\t3910\t3910\t20\t21\tKUAAAA\tJUBAAA\tHHHHxx\n3638\t1206\t0\t2\t8\t18\t38\t638\t1638\t3638\t3638\t76\t77\tYJAAAA\tKUBAAA\tOOOOxx\n6637\t1207\t1\t1\t7\t17\t37\t637\t637\t1637\t6637\t74\t75\tHVAAAA\tLUBAAA\tVVVVxx\n4438\t1208\t0\t2\t8\t18\t38\t438\t438\t4438\t4438\t76\t77\tSOAAAA\tMUBAAA\tAAAAxx\n171\t1209\t1\t3\t1\t11\t71\t171\t171\t171\t171\t142\t143\tPGAAAA\tNUBAAA\tHHHHxx\n310\t1210\t0\t2\t0\t10\t10\t310\t310\t310\t310\t20\t21\tYLAAAA\tOUBAAA\tOOOOxx\n2714\t1211\t0\t2\t4\t14\t14\t714\t714\t2714\t2714\t28\t29\tKAAAAA\tPUBAAA\tVVVVxx\n5199\t1212\t1\t3\t9\t19\t99\t199\t1199\t199\t5199\t198\t199\tZRAAAA\tQUBAAA\tAAAAxx\n8005\t1213\t1\t1\t5\t5\t5\t5\t5\t3005\t8005\t10\t11\tXVAAAA\tRUBAAA\tHHHHxx\n3188\t1214\t0\t0\t8\t8\t88\t188\t1188\t3188\t3188\t176\t177\tQSAAAA\tSUBAAA\tOOOOxx\n1518\t1215\t0\t2\t8\t18\t18\t518\t1518\t1518\t1518\t36\t37\tKGAAAA\tTUBAAA\tVVVVxx\n6760\t1216\t0\t0\t0\t0\t60\t760\t760\t1760\t6760\t120\t121\tAAAAAA\tUUBAAA\tAAAAxx\n9373\t1217\t1\t1\t3\t13\t73\t373\t1373\t4373\t9373\t146\t147\tNWAAAA\tVUBAAA\tHHHHxx\n1938\t1218\t0\t2\t8\t18\t38\t938\t1938\t1938\t1938\t76\t77\tOWAAAA\tWUBAAA\tOOOOxx\n2865\t1219\t1\t1\t5\t5\t65\t865\t865\t2865\t2865\t130\t131\tFGAAAA\tXUBAAA\tVVVVxx\n3203\t1220\t1\t3\t3\t3\t3\t203\t1203\t3203\t3203\t6\t7\tFTAAAA\tYUBAAA\tAAAAxx\n6025\t1221\t1\t1\t5\t5\t25\t25\t25\t1025\t6025\t50\t51\tTXAAAA\tZUBAAA\tHHHHxx\n8684\t1222\t0\t0\t4\t4\t84\t684\t684\t3684\t8684\t168\t169\tAWAAAA\tAVBAAA\tOOOOxx\n7732\t1223\t0\t0\t2\t12\t32\t732\t1732\t2732\t7732\t64\t65\tKLAAAA\tBVBAAA\tVVVVxx\n3218\t1224\t0\t2\t8\t18\t18\t218\t1218\t3218\t3218\t36\t37\tUTAAAA\tCVBAAA\tAAAAxx\n525\t1225\t1\t1\t5\t5\t25\t525\t525\t525\t525\t50\t51\tFUAAAA\tDVBAAA\tHHHHxx\n601\t1226\t1\t1\t1\t1\t1\t601\t601\t601\t601\t2\t3\tDXAAAA\tEVBAAA\tOOOOxx\n6091\t1227\t1\t3\t1\t11\t91\t91\t91\t1091\t6091\t182\t183\tHAAAAA\tFVBAAA\tVVVVxx\n4498\t1228\t0\t2\t8\t18\t98\t498\t498\t4498\t4498\t196\t197\tARAAAA\tGVBAAA\tAAAAxx\n8192\t1229\t0\t0\t2\t12\t92\t192\t192\t3192\t8192\t184\t185\tCDAAAA\tHVBAAA\tHHHHxx\n8006\t1230\t0\t2\t6\t6\t6\t6\t6\t3006\t8006\t12\t13\tYVAAAA\tIVBAAA\tOOOOxx\n6157\t1231\t1\t1\t7\t17\t57\t157\t157\t1157\t6157\t114\t115\tVCAAAA\tJVBAAA\tVVVVxx\n312\t1232\t0\t0\t2\t12\t12\t312\t312\t312\t312\t24\t25\tAMAAAA\tKVBAAA\tAAAAxx\n8652\t1233\t0\t0\t2\t12\t52\t652\t652\t3652\t8652\t104\t105\tUUAAAA\tLVBAAA\tHHHHxx\n2787\t1234\t1\t3\t7\t7\t87\t787\t787\t2787\t2787\t174\t175\tFDAAAA\tMVBAAA\tOOOOxx\n1782\t1235\t0\t2\t2\t2\t82\t782\t1782\t1782\t1782\t164\t165\tOQAAAA\tNVBAAA\tVVVVxx\n23\t1236\t1\t3\t3\t3\t23\t23\t23\t23\t23\t46\t47\tXAAAAA\tOVBAAA\tAAAAxx\n1206\t1237\t0\t2\t6\t6\t6\t206\t1206\t1206\t1206\t12\t13\tKUAAAA\tPVBAAA\tHHHHxx\n1076\t1238\t0\t0\t6\t16\t76\t76\t1076\t1076\t1076\t152\t153\tKPAAAA\tQVBAAA\tOOOOxx\n5379\t1239\t1\t3\t9\t19\t79\t379\t1379\t379\t5379\t158\t159\tXYAAAA\tRVBAAA\tVVVVxx\n2047\t1240\t1\t3\t7\t7\t47\t47\t47\t2047\t2047\t94\t95\tTAAAAA\tSVBAAA\tAAAAxx\n6262\t1241\t0\t2\t2\t2\t62\t262\t262\t1262\t6262\t124\t125\tWGAAAA\tTVBAAA\tHHHHxx\n1840\t1242\t0\t0\t0\t0\t40\t840\t1840\t1840\t1840\t80\t81\tUSAAAA\tUVBAAA\tOOOOxx\n2106\t1243\t0\t2\t6\t6\t6\t106\t106\t2106\t2106\t12\t13\tADAAAA\tVVBAAA\tVVVVxx\n1307\t1244\t1\t3\t7\t7\t7\t307\t1307\t1307\t1307\t14\t15\tHYAAAA\tWVBAAA\tAAAAxx\n735\t1245\t1\t3\t5\t15\t35\t735\t735\t735\t735\t70\t71\tHCAAAA\tXVBAAA\tHHHHxx\n3657\t1246\t1\t1\t7\t17\t57\t657\t1657\t3657\t3657\t114\t115\tRKAAAA\tYVBAAA\tOOOOxx\n3006\t1247\t0\t2\t6\t6\t6\t6\t1006\t3006\t3006\t12\t13\tQLAAAA\tZVBAAA\tVVVVxx\n1538\t1248\t0\t2\t8\t18\t38\t538\t1538\t1538\t1538\t76\t77\tEHAAAA\tAWBAAA\tAAAAxx\n6098\t1249\t0\t2\t8\t18\t98\t98\t98\t1098\t6098\t196\t197\tOAAAAA\tBWBAAA\tHHHHxx\n5267\t1250\t1\t3\t7\t7\t67\t267\t1267\t267\t5267\t134\t135\tPUAAAA\tCWBAAA\tOOOOxx\n9757\t1251\t1\t1\t7\t17\t57\t757\t1757\t4757\t9757\t114\t115\tHLAAAA\tDWBAAA\tVVVVxx\n1236\t1252\t0\t0\t6\t16\t36\t236\t1236\t1236\t1236\t72\t73\tOVAAAA\tEWBAAA\tAAAAxx\n83\t1253\t1\t3\t3\t3\t83\t83\t83\t83\t83\t166\t167\tFDAAAA\tFWBAAA\tHHHHxx\n9227\t1254\t1\t3\t7\t7\t27\t227\t1227\t4227\t9227\t54\t55\tXQAAAA\tGWBAAA\tOOOOxx\n8772\t1255\t0\t0\t2\t12\t72\t772\t772\t3772\t8772\t144\t145\tKZAAAA\tHWBAAA\tVVVVxx\n8822\t1256\t0\t2\t2\t2\t22\t822\t822\t3822\t8822\t44\t45\tIBAAAA\tIWBAAA\tAAAAxx\n7167\t1257\t1\t3\t7\t7\t67\t167\t1167\t2167\t7167\t134\t135\tRPAAAA\tJWBAAA\tHHHHxx\n6909\t1258\t1\t1\t9\t9\t9\t909\t909\t1909\t6909\t18\t19\tTFAAAA\tKWBAAA\tOOOOxx\n1439\t1259\t1\t3\t9\t19\t39\t439\t1439\t1439\t1439\t78\t79\tJDAAAA\tLWBAAA\tVVVVxx\n2370\t1260\t0\t2\t0\t10\t70\t370\t370\t2370\t2370\t140\t141\tENAAAA\tMWBAAA\tAAAAxx\n4577\t1261\t1\t1\t7\t17\t77\t577\t577\t4577\t4577\t154\t155\tBUAAAA\tNWBAAA\tHHHHxx\n2575\t1262\t1\t3\t5\t15\t75\t575\t575\t2575\t2575\t150\t151\tBVAAAA\tOWBAAA\tOOOOxx\n2795\t1263\t1\t3\t5\t15\t95\t795\t795\t2795\t2795\t190\t191\tNDAAAA\tPWBAAA\tVVVVxx\n5520\t1264\t0\t0\t0\t0\t20\t520\t1520\t520\t5520\t40\t41\tIEAAAA\tQWBAAA\tAAAAxx\n382\t1265\t0\t2\t2\t2\t82\t382\t382\t382\t382\t164\t165\tSOAAAA\tRWBAAA\tHHHHxx\n6335\t1266\t1\t3\t5\t15\t35\t335\t335\t1335\t6335\t70\t71\tRJAAAA\tSWBAAA\tOOOOxx\n8430\t1267\t0\t2\t0\t10\t30\t430\t430\t3430\t8430\t60\t61\tGMAAAA\tTWBAAA\tVVVVxx\n4131\t1268\t1\t3\t1\t11\t31\t131\t131\t4131\t4131\t62\t63\tXCAAAA\tUWBAAA\tAAAAxx\n9332\t1269\t0\t0\t2\t12\t32\t332\t1332\t4332\t9332\t64\t65\tYUAAAA\tVWBAAA\tHHHHxx\n293\t1270\t1\t1\t3\t13\t93\t293\t293\t293\t293\t186\t187\tHLAAAA\tWWBAAA\tOOOOxx\n2276\t1271\t0\t0\t6\t16\t76\t276\t276\t2276\t2276\t152\t153\tOJAAAA\tXWBAAA\tVVVVxx\n5687\t1272\t1\t3\t7\t7\t87\t687\t1687\t687\t5687\t174\t175\tTKAAAA\tYWBAAA\tAAAAxx\n5862\t1273\t0\t2\t2\t2\t62\t862\t1862\t862\t5862\t124\t125\tMRAAAA\tZWBAAA\tHHHHxx\n5073\t1274\t1\t1\t3\t13\t73\t73\t1073\t73\t5073\t146\t147\tDNAAAA\tAXBAAA\tOOOOxx\n4170\t1275\t0\t2\t0\t10\t70\t170\t170\t4170\t4170\t140\t141\tKEAAAA\tBXBAAA\tVVVVxx\n5039\t1276\t1\t3\t9\t19\t39\t39\t1039\t39\t5039\t78\t79\tVLAAAA\tCXBAAA\tAAAAxx\n3294\t1277\t0\t2\t4\t14\t94\t294\t1294\t3294\t3294\t188\t189\tSWAAAA\tDXBAAA\tHHHHxx\n6015\t1278\t1\t3\t5\t15\t15\t15\t15\t1015\t6015\t30\t31\tJXAAAA\tEXBAAA\tOOOOxx\n9015\t1279\t1\t3\t5\t15\t15\t15\t1015\t4015\t9015\t30\t31\tTIAAAA\tFXBAAA\tVVVVxx\n9785\t1280\t1\t1\t5\t5\t85\t785\t1785\t4785\t9785\t170\t171\tJMAAAA\tGXBAAA\tAAAAxx\n4312\t1281\t0\t0\t2\t12\t12\t312\t312\t4312\t4312\t24\t25\tWJAAAA\tHXBAAA\tHHHHxx\n6343\t1282\t1\t3\t3\t3\t43\t343\t343\t1343\t6343\t86\t87\tZJAAAA\tIXBAAA\tOOOOxx\n2161\t1283\t1\t1\t1\t1\t61\t161\t161\t2161\t2161\t122\t123\tDFAAAA\tJXBAAA\tVVVVxx\n4490\t1284\t0\t2\t0\t10\t90\t490\t490\t4490\t4490\t180\t181\tSQAAAA\tKXBAAA\tAAAAxx\n4454\t1285\t0\t2\t4\t14\t54\t454\t454\t4454\t4454\t108\t109\tIPAAAA\tLXBAAA\tHHHHxx\n7647\t1286\t1\t3\t7\t7\t47\t647\t1647\t2647\t7647\t94\t95\tDIAAAA\tMXBAAA\tOOOOxx\n1028\t1287\t0\t0\t8\t8\t28\t28\t1028\t1028\t1028\t56\t57\tONAAAA\tNXBAAA\tVVVVxx\n2965\t1288\t1\t1\t5\t5\t65\t965\t965\t2965\t2965\t130\t131\tBKAAAA\tOXBAAA\tAAAAxx\n9900\t1289\t0\t0\t0\t0\t0\t900\t1900\t4900\t9900\t0\t1\tUQAAAA\tPXBAAA\tHHHHxx\n5509\t1290\t1\t1\t9\t9\t9\t509\t1509\t509\t5509\t18\t19\tXDAAAA\tQXBAAA\tOOOOxx\n7751\t1291\t1\t3\t1\t11\t51\t751\t1751\t2751\t7751\t102\t103\tDMAAAA\tRXBAAA\tVVVVxx\n9594\t1292\t0\t2\t4\t14\t94\t594\t1594\t4594\t9594\t188\t189\tAFAAAA\tSXBAAA\tAAAAxx\n7632\t1293\t0\t0\t2\t12\t32\t632\t1632\t2632\t7632\t64\t65\tOHAAAA\tTXBAAA\tHHHHxx\n6528\t1294\t0\t0\t8\t8\t28\t528\t528\t1528\t6528\t56\t57\tCRAAAA\tUXBAAA\tOOOOxx\n1041\t1295\t1\t1\t1\t1\t41\t41\t1041\t1041\t1041\t82\t83\tBOAAAA\tVXBAAA\tVVVVxx\n1534\t1296\t0\t2\t4\t14\t34\t534\t1534\t1534\t1534\t68\t69\tAHAAAA\tWXBAAA\tAAAAxx\n4229\t1297\t1\t1\t9\t9\t29\t229\t229\t4229\t4229\t58\t59\tRGAAAA\tXXBAAA\tHHHHxx\n84\t1298\t0\t0\t4\t4\t84\t84\t84\t84\t84\t168\t169\tGDAAAA\tYXBAAA\tOOOOxx\n2189\t1299\t1\t1\t9\t9\t89\t189\t189\t2189\t2189\t178\t179\tFGAAAA\tZXBAAA\tVVVVxx\n7566\t1300\t0\t2\t6\t6\t66\t566\t1566\t2566\t7566\t132\t133\tAFAAAA\tAYBAAA\tAAAAxx\n707\t1301\t1\t3\t7\t7\t7\t707\t707\t707\t707\t14\t15\tFBAAAA\tBYBAAA\tHHHHxx\n581\t1302\t1\t1\t1\t1\t81\t581\t581\t581\t581\t162\t163\tJWAAAA\tCYBAAA\tOOOOxx\n6753\t1303\t1\t1\t3\t13\t53\t753\t753\t1753\t6753\t106\t107\tTZAAAA\tDYBAAA\tVVVVxx\n8604\t1304\t0\t0\t4\t4\t4\t604\t604\t3604\t8604\t8\t9\tYSAAAA\tEYBAAA\tAAAAxx\n373\t1305\t1\t1\t3\t13\t73\t373\t373\t373\t373\t146\t147\tJOAAAA\tFYBAAA\tHHHHxx\n9635\t1306\t1\t3\t5\t15\t35\t635\t1635\t4635\t9635\t70\t71\tPGAAAA\tGYBAAA\tOOOOxx\n9277\t1307\t1\t1\t7\t17\t77\t277\t1277\t4277\t9277\t154\t155\tVSAAAA\tHYBAAA\tVVVVxx\n7117\t1308\t1\t1\t7\t17\t17\t117\t1117\t2117\t7117\t34\t35\tTNAAAA\tIYBAAA\tAAAAxx\n8564\t1309\t0\t0\t4\t4\t64\t564\t564\t3564\t8564\t128\t129\tKRAAAA\tJYBAAA\tHHHHxx\n1697\t1310\t1\t1\t7\t17\t97\t697\t1697\t1697\t1697\t194\t195\tHNAAAA\tKYBAAA\tOOOOxx\n7840\t1311\t0\t0\t0\t0\t40\t840\t1840\t2840\t7840\t80\t81\tOPAAAA\tLYBAAA\tVVVVxx\n3646\t1312\t0\t2\t6\t6\t46\t646\t1646\t3646\t3646\t92\t93\tGKAAAA\tMYBAAA\tAAAAxx\n368\t1313\t0\t0\t8\t8\t68\t368\t368\t368\t368\t136\t137\tEOAAAA\tNYBAAA\tHHHHxx\n4797\t1314\t1\t1\t7\t17\t97\t797\t797\t4797\t4797\t194\t195\tNCAAAA\tOYBAAA\tOOOOxx\n5300\t1315\t0\t0\t0\t0\t0\t300\t1300\t300\t5300\t0\t1\tWVAAAA\tPYBAAA\tVVVVxx\n7664\t1316\t0\t0\t4\t4\t64\t664\t1664\t2664\t7664\t128\t129\tUIAAAA\tQYBAAA\tAAAAxx\n1466\t1317\t0\t2\t6\t6\t66\t466\t1466\t1466\t1466\t132\t133\tKEAAAA\tRYBAAA\tHHHHxx\n2477\t1318\t1\t1\t7\t17\t77\t477\t477\t2477\t2477\t154\t155\tHRAAAA\tSYBAAA\tOOOOxx\n2036\t1319\t0\t0\t6\t16\t36\t36\t36\t2036\t2036\t72\t73\tIAAAAA\tTYBAAA\tVVVVxx\n3624\t1320\t0\t0\t4\t4\t24\t624\t1624\t3624\t3624\t48\t49\tKJAAAA\tUYBAAA\tAAAAxx\n5099\t1321\t1\t3\t9\t19\t99\t99\t1099\t99\t5099\t198\t199\tDOAAAA\tVYBAAA\tHHHHxx\n1308\t1322\t0\t0\t8\t8\t8\t308\t1308\t1308\t1308\t16\t17\tIYAAAA\tWYBAAA\tOOOOxx\n3704\t1323\t0\t0\t4\t4\t4\t704\t1704\t3704\t3704\t8\t9\tMMAAAA\tXYBAAA\tVVVVxx\n2451\t1324\t1\t3\t1\t11\t51\t451\t451\t2451\t2451\t102\t103\tHQAAAA\tYYBAAA\tAAAAxx\n4898\t1325\t0\t2\t8\t18\t98\t898\t898\t4898\t4898\t196\t197\tKGAAAA\tZYBAAA\tHHHHxx\n4959\t1326\t1\t3\t9\t19\t59\t959\t959\t4959\t4959\t118\t119\tTIAAAA\tAZBAAA\tOOOOxx\n5942\t1327\t0\t2\t2\t2\t42\t942\t1942\t942\t5942\t84\t85\tOUAAAA\tBZBAAA\tVVVVxx\n2425\t1328\t1\t1\t5\t5\t25\t425\t425\t2425\t2425\t50\t51\tHPAAAA\tCZBAAA\tAAAAxx\n7760\t1329\t0\t0\t0\t0\t60\t760\t1760\t2760\t7760\t120\t121\tMMAAAA\tDZBAAA\tHHHHxx\n6294\t1330\t0\t2\t4\t14\t94\t294\t294\t1294\t6294\t188\t189\tCIAAAA\tEZBAAA\tOOOOxx\n6785\t1331\t1\t1\t5\t5\t85\t785\t785\t1785\t6785\t170\t171\tZAAAAA\tFZBAAA\tVVVVxx\n3542\t1332\t0\t2\t2\t2\t42\t542\t1542\t3542\t3542\t84\t85\tGGAAAA\tGZBAAA\tAAAAxx\n1809\t1333\t1\t1\t9\t9\t9\t809\t1809\t1809\t1809\t18\t19\tPRAAAA\tHZBAAA\tHHHHxx\n130\t1334\t0\t2\t0\t10\t30\t130\t130\t130\t130\t60\t61\tAFAAAA\tIZBAAA\tOOOOxx\n8672\t1335\t0\t0\t2\t12\t72\t672\t672\t3672\t8672\t144\t145\tOVAAAA\tJZBAAA\tVVVVxx\n2125\t1336\t1\t1\t5\t5\t25\t125\t125\t2125\t2125\t50\t51\tTDAAAA\tKZBAAA\tAAAAxx\n7683\t1337\t1\t3\t3\t3\t83\t683\t1683\t2683\t7683\t166\t167\tNJAAAA\tLZBAAA\tHHHHxx\n7842\t1338\t0\t2\t2\t2\t42\t842\t1842\t2842\t7842\t84\t85\tQPAAAA\tMZBAAA\tOOOOxx\n9584\t1339\t0\t0\t4\t4\t84\t584\t1584\t4584\t9584\t168\t169\tQEAAAA\tNZBAAA\tVVVVxx\n7963\t1340\t1\t3\t3\t3\t63\t963\t1963\t2963\t7963\t126\t127\tHUAAAA\tOZBAAA\tAAAAxx\n8581\t1341\t1\t1\t1\t1\t81\t581\t581\t3581\t8581\t162\t163\tBSAAAA\tPZBAAA\tHHHHxx\n2135\t1342\t1\t3\t5\t15\t35\t135\t135\t2135\t2135\t70\t71\tDEAAAA\tQZBAAA\tOOOOxx\n7352\t1343\t0\t0\t2\t12\t52\t352\t1352\t2352\t7352\t104\t105\tUWAAAA\tRZBAAA\tVVVVxx\n5789\t1344\t1\t1\t9\t9\t89\t789\t1789\t789\t5789\t178\t179\tROAAAA\tSZBAAA\tAAAAxx\n8490\t1345\t0\t2\t0\t10\t90\t490\t490\t3490\t8490\t180\t181\tOOAAAA\tTZBAAA\tHHHHxx\n2145\t1346\t1\t1\t5\t5\t45\t145\t145\t2145\t2145\t90\t91\tNEAAAA\tUZBAAA\tOOOOxx\n7021\t1347\t1\t1\t1\t1\t21\t21\t1021\t2021\t7021\t42\t43\tBKAAAA\tVZBAAA\tVVVVxx\n3736\t1348\t0\t0\t6\t16\t36\t736\t1736\t3736\t3736\t72\t73\tSNAAAA\tWZBAAA\tAAAAxx\n7396\t1349\t0\t0\t6\t16\t96\t396\t1396\t2396\t7396\t192\t193\tMYAAAA\tXZBAAA\tHHHHxx\n6334\t1350\t0\t2\t4\t14\t34\t334\t334\t1334\t6334\t68\t69\tQJAAAA\tYZBAAA\tOOOOxx\n5461\t1351\t1\t1\t1\t1\t61\t461\t1461\t461\t5461\t122\t123\tBCAAAA\tZZBAAA\tVVVVxx\n5337\t1352\t1\t1\t7\t17\t37\t337\t1337\t337\t5337\t74\t75\tHXAAAA\tAACAAA\tAAAAxx\n7440\t1353\t0\t0\t0\t0\t40\t440\t1440\t2440\t7440\t80\t81\tEAAAAA\tBACAAA\tHHHHxx\n6879\t1354\t1\t3\t9\t19\t79\t879\t879\t1879\t6879\t158\t159\tPEAAAA\tCACAAA\tOOOOxx\n2432\t1355\t0\t0\t2\t12\t32\t432\t432\t2432\t2432\t64\t65\tOPAAAA\tDACAAA\tVVVVxx\n8529\t1356\t1\t1\t9\t9\t29\t529\t529\t3529\t8529\t58\t59\tBQAAAA\tEACAAA\tAAAAxx\n7859\t1357\t1\t3\t9\t19\t59\t859\t1859\t2859\t7859\t118\t119\tHQAAAA\tFACAAA\tHHHHxx\n15\t1358\t1\t3\t5\t15\t15\t15\t15\t15\t15\t30\t31\tPAAAAA\tGACAAA\tOOOOxx\n7475\t1359\t1\t3\t5\t15\t75\t475\t1475\t2475\t7475\t150\t151\tNBAAAA\tHACAAA\tVVVVxx\n717\t1360\t1\t1\t7\t17\t17\t717\t717\t717\t717\t34\t35\tPBAAAA\tIACAAA\tAAAAxx\n250\t1361\t0\t2\t0\t10\t50\t250\t250\t250\t250\t100\t101\tQJAAAA\tJACAAA\tHHHHxx\n4700\t1362\t0\t0\t0\t0\t0\t700\t700\t4700\t4700\t0\t1\tUYAAAA\tKACAAA\tOOOOxx\n7510\t1363\t0\t2\t0\t10\t10\t510\t1510\t2510\t7510\t20\t21\tWCAAAA\tLACAAA\tVVVVxx\n4562\t1364\t0\t2\t2\t2\t62\t562\t562\t4562\t4562\t124\t125\tMTAAAA\tMACAAA\tAAAAxx\n8075\t1365\t1\t3\t5\t15\t75\t75\t75\t3075\t8075\t150\t151\tPYAAAA\tNACAAA\tHHHHxx\n871\t1366\t1\t3\t1\t11\t71\t871\t871\t871\t871\t142\t143\tNHAAAA\tOACAAA\tOOOOxx\n7161\t1367\t1\t1\t1\t1\t61\t161\t1161\t2161\t7161\t122\t123\tLPAAAA\tPACAAA\tVVVVxx\n9109\t1368\t1\t1\t9\t9\t9\t109\t1109\t4109\t9109\t18\t19\tJMAAAA\tQACAAA\tAAAAxx\n8675\t1369\t1\t3\t5\t15\t75\t675\t675\t3675\t8675\t150\t151\tRVAAAA\tRACAAA\tHHHHxx\n1025\t1370\t1\t1\t5\t5\t25\t25\t1025\t1025\t1025\t50\t51\tLNAAAA\tSACAAA\tOOOOxx\n4065\t1371\t1\t1\t5\t5\t65\t65\t65\t4065\t4065\t130\t131\tJAAAAA\tTACAAA\tVVVVxx\n3511\t1372\t1\t3\t1\t11\t11\t511\t1511\t3511\t3511\t22\t23\tBFAAAA\tUACAAA\tAAAAxx\n9840\t1373\t0\t0\t0\t0\t40\t840\t1840\t4840\t9840\t80\t81\tMOAAAA\tVACAAA\tHHHHxx\n7495\t1374\t1\t3\t5\t15\t95\t495\t1495\t2495\t7495\t190\t191\tHCAAAA\tWACAAA\tOOOOxx\n55\t1375\t1\t3\t5\t15\t55\t55\t55\t55\t55\t110\t111\tDCAAAA\tXACAAA\tVVVVxx\n6151\t1376\t1\t3\t1\t11\t51\t151\t151\t1151\t6151\t102\t103\tPCAAAA\tYACAAA\tAAAAxx\n2512\t1377\t0\t0\t2\t12\t12\t512\t512\t2512\t2512\t24\t25\tQSAAAA\tZACAAA\tHHHHxx\n5881\t1378\t1\t1\t1\t1\t81\t881\t1881\t881\t5881\t162\t163\tFSAAAA\tABCAAA\tOOOOxx\n1442\t1379\t0\t2\t2\t2\t42\t442\t1442\t1442\t1442\t84\t85\tMDAAAA\tBBCAAA\tVVVVxx\n1270\t1380\t0\t2\t0\t10\t70\t270\t1270\t1270\t1270\t140\t141\tWWAAAA\tCBCAAA\tAAAAxx\n959\t1381\t1\t3\t9\t19\t59\t959\t959\t959\t959\t118\t119\tXKAAAA\tDBCAAA\tHHHHxx\n8251\t1382\t1\t3\t1\t11\t51\t251\t251\t3251\t8251\t102\t103\tJFAAAA\tEBCAAA\tOOOOxx\n3051\t1383\t1\t3\t1\t11\t51\t51\t1051\t3051\t3051\t102\t103\tJNAAAA\tFBCAAA\tVVVVxx\n5052\t1384\t0\t0\t2\t12\t52\t52\t1052\t52\t5052\t104\t105\tIMAAAA\tGBCAAA\tAAAAxx\n1863\t1385\t1\t3\t3\t3\t63\t863\t1863\t1863\t1863\t126\t127\tRTAAAA\tHBCAAA\tHHHHxx\n344\t1386\t0\t0\t4\t4\t44\t344\t344\t344\t344\t88\t89\tGNAAAA\tIBCAAA\tOOOOxx\n3590\t1387\t0\t2\t0\t10\t90\t590\t1590\t3590\t3590\t180\t181\tCIAAAA\tJBCAAA\tVVVVxx\n4223\t1388\t1\t3\t3\t3\t23\t223\t223\t4223\t4223\t46\t47\tLGAAAA\tKBCAAA\tAAAAxx\n2284\t1389\t0\t0\t4\t4\t84\t284\t284\t2284\t2284\t168\t169\tWJAAAA\tLBCAAA\tHHHHxx\n9425\t1390\t1\t1\t5\t5\t25\t425\t1425\t4425\t9425\t50\t51\tNYAAAA\tMBCAAA\tOOOOxx\n6221\t1391\t1\t1\t1\t1\t21\t221\t221\t1221\t6221\t42\t43\tHFAAAA\tNBCAAA\tVVVVxx\n195\t1392\t1\t3\t5\t15\t95\t195\t195\t195\t195\t190\t191\tNHAAAA\tOBCAAA\tAAAAxx\n1517\t1393\t1\t1\t7\t17\t17\t517\t1517\t1517\t1517\t34\t35\tJGAAAA\tPBCAAA\tHHHHxx\n3791\t1394\t1\t3\t1\t11\t91\t791\t1791\t3791\t3791\t182\t183\tVPAAAA\tQBCAAA\tOOOOxx\n572\t1395\t0\t0\t2\t12\t72\t572\t572\t572\t572\t144\t145\tAWAAAA\tRBCAAA\tVVVVxx\n46\t1396\t0\t2\t6\t6\t46\t46\t46\t46\t46\t92\t93\tUBAAAA\tSBCAAA\tAAAAxx\n9451\t1397\t1\t3\t1\t11\t51\t451\t1451\t4451\t9451\t102\t103\tNZAAAA\tTBCAAA\tHHHHxx\n3359\t1398\t1\t3\t9\t19\t59\t359\t1359\t3359\t3359\t118\t119\tFZAAAA\tUBCAAA\tOOOOxx\n8867\t1399\t1\t3\t7\t7\t67\t867\t867\t3867\t8867\t134\t135\tBDAAAA\tVBCAAA\tVVVVxx\n674\t1400\t0\t2\t4\t14\t74\t674\t674\t674\t674\t148\t149\tYZAAAA\tWBCAAA\tAAAAxx\n2674\t1401\t0\t2\t4\t14\t74\t674\t674\t2674\t2674\t148\t149\tWYAAAA\tXBCAAA\tHHHHxx\n6523\t1402\t1\t3\t3\t3\t23\t523\t523\t1523\t6523\t46\t47\tXQAAAA\tYBCAAA\tOOOOxx\n6210\t1403\t0\t2\t0\t10\t10\t210\t210\t1210\t6210\t20\t21\tWEAAAA\tZBCAAA\tVVVVxx\n7564\t1404\t0\t0\t4\t4\t64\t564\t1564\t2564\t7564\t128\t129\tYEAAAA\tACCAAA\tAAAAxx\n4776\t1405\t0\t0\t6\t16\t76\t776\t776\t4776\t4776\t152\t153\tSBAAAA\tBCCAAA\tHHHHxx\n2993\t1406\t1\t1\t3\t13\t93\t993\t993\t2993\t2993\t186\t187\tDLAAAA\tCCCAAA\tOOOOxx\n2969\t1407\t1\t1\t9\t9\t69\t969\t969\t2969\t2969\t138\t139\tFKAAAA\tDCCAAA\tVVVVxx\n1762\t1408\t0\t2\t2\t2\t62\t762\t1762\t1762\t1762\t124\t125\tUPAAAA\tECCAAA\tAAAAxx\n685\t1409\t1\t1\t5\t5\t85\t685\t685\t685\t685\t170\t171\tJAAAAA\tFCCAAA\tHHHHxx\n5312\t1410\t0\t0\t2\t12\t12\t312\t1312\t312\t5312\t24\t25\tIWAAAA\tGCCAAA\tOOOOxx\n3264\t1411\t0\t0\t4\t4\t64\t264\t1264\t3264\t3264\t128\t129\tOVAAAA\tHCCAAA\tVVVVxx\n7008\t1412\t0\t0\t8\t8\t8\t8\t1008\t2008\t7008\t16\t17\tOJAAAA\tICCAAA\tAAAAxx\n5167\t1413\t1\t3\t7\t7\t67\t167\t1167\t167\t5167\t134\t135\tTQAAAA\tJCCAAA\tHHHHxx\n3060\t1414\t0\t0\t0\t0\t60\t60\t1060\t3060\t3060\t120\t121\tSNAAAA\tKCCAAA\tOOOOxx\n1752\t1415\t0\t0\t2\t12\t52\t752\t1752\t1752\t1752\t104\t105\tKPAAAA\tLCCAAA\tVVVVxx\n1016\t1416\t0\t0\t6\t16\t16\t16\t1016\t1016\t1016\t32\t33\tCNAAAA\tMCCAAA\tAAAAxx\n7365\t1417\t1\t1\t5\t5\t65\t365\t1365\t2365\t7365\t130\t131\tHXAAAA\tNCCAAA\tHHHHxx\n4358\t1418\t0\t2\t8\t18\t58\t358\t358\t4358\t4358\t116\t117\tQLAAAA\tOCCAAA\tOOOOxx\n2819\t1419\t1\t3\t9\t19\t19\t819\t819\t2819\t2819\t38\t39\tLEAAAA\tPCCAAA\tVVVVxx\n6727\t1420\t1\t3\t7\t7\t27\t727\t727\t1727\t6727\t54\t55\tTYAAAA\tQCCAAA\tAAAAxx\n1459\t1421\t1\t3\t9\t19\t59\t459\t1459\t1459\t1459\t118\t119\tDEAAAA\tRCCAAA\tHHHHxx\n1708\t1422\t0\t0\t8\t8\t8\t708\t1708\t1708\t1708\t16\t17\tSNAAAA\tSCCAAA\tOOOOxx\n471\t1423\t1\t3\t1\t11\t71\t471\t471\t471\t471\t142\t143\tDSAAAA\tTCCAAA\tVVVVxx\n387\t1424\t1\t3\t7\t7\t87\t387\t387\t387\t387\t174\t175\tXOAAAA\tUCCAAA\tAAAAxx\n1166\t1425\t0\t2\t6\t6\t66\t166\t1166\t1166\t1166\t132\t133\tWSAAAA\tVCCAAA\tHHHHxx\n2400\t1426\t0\t0\t0\t0\t0\t400\t400\t2400\t2400\t0\t1\tIOAAAA\tWCCAAA\tOOOOxx\n3584\t1427\t0\t0\t4\t4\t84\t584\t1584\t3584\t3584\t168\t169\tWHAAAA\tXCCAAA\tVVVVxx\n6423\t1428\t1\t3\t3\t3\t23\t423\t423\t1423\t6423\t46\t47\tBNAAAA\tYCCAAA\tAAAAxx\n9520\t1429\t0\t0\t0\t0\t20\t520\t1520\t4520\t9520\t40\t41\tECAAAA\tZCCAAA\tHHHHxx\n8080\t1430\t0\t0\t0\t0\t80\t80\t80\t3080\t8080\t160\t161\tUYAAAA\tADCAAA\tOOOOxx\n5709\t1431\t1\t1\t9\t9\t9\t709\t1709\t709\t5709\t18\t19\tPLAAAA\tBDCAAA\tVVVVxx\n1131\t1432\t1\t3\t1\t11\t31\t131\t1131\t1131\t1131\t62\t63\tNRAAAA\tCDCAAA\tAAAAxx\n8562\t1433\t0\t2\t2\t2\t62\t562\t562\t3562\t8562\t124\t125\tIRAAAA\tDDCAAA\tHHHHxx\n5766\t1434\t0\t2\t6\t6\t66\t766\t1766\t766\t5766\t132\t133\tUNAAAA\tEDCAAA\tOOOOxx\n245\t1435\t1\t1\t5\t5\t45\t245\t245\t245\t245\t90\t91\tLJAAAA\tFDCAAA\tVVVVxx\n9869\t1436\t1\t1\t9\t9\t69\t869\t1869\t4869\t9869\t138\t139\tPPAAAA\tGDCAAA\tAAAAxx\n3533\t1437\t1\t1\t3\t13\t33\t533\t1533\t3533\t3533\t66\t67\tXFAAAA\tHDCAAA\tHHHHxx\n5109\t1438\t1\t1\t9\t9\t9\t109\t1109\t109\t5109\t18\t19\tNOAAAA\tIDCAAA\tOOOOxx\n977\t1439\t1\t1\t7\t17\t77\t977\t977\t977\t977\t154\t155\tPLAAAA\tJDCAAA\tVVVVxx\n1651\t1440\t1\t3\t1\t11\t51\t651\t1651\t1651\t1651\t102\t103\tNLAAAA\tKDCAAA\tAAAAxx\n1357\t1441\t1\t1\t7\t17\t57\t357\t1357\t1357\t1357\t114\t115\tFAAAAA\tLDCAAA\tHHHHxx\n9087\t1442\t1\t3\t7\t7\t87\t87\t1087\t4087\t9087\t174\t175\tNLAAAA\tMDCAAA\tOOOOxx\n3399\t1443\t1\t3\t9\t19\t99\t399\t1399\t3399\t3399\t198\t199\tTAAAAA\tNDCAAA\tVVVVxx\n7543\t1444\t1\t3\t3\t3\t43\t543\t1543\t2543\t7543\t86\t87\tDEAAAA\tODCAAA\tAAAAxx\n2469\t1445\t1\t1\t9\t9\t69\t469\t469\t2469\t2469\t138\t139\tZQAAAA\tPDCAAA\tHHHHxx\n8305\t1446\t1\t1\t5\t5\t5\t305\t305\t3305\t8305\t10\t11\tLHAAAA\tQDCAAA\tOOOOxx\n3265\t1447\t1\t1\t5\t5\t65\t265\t1265\t3265\t3265\t130\t131\tPVAAAA\tRDCAAA\tVVVVxx\n9977\t1448\t1\t1\t7\t17\t77\t977\t1977\t4977\t9977\t154\t155\tTTAAAA\tSDCAAA\tAAAAxx\n3961\t1449\t1\t1\t1\t1\t61\t961\t1961\t3961\t3961\t122\t123\tJWAAAA\tTDCAAA\tHHHHxx\n4952\t1450\t0\t0\t2\t12\t52\t952\t952\t4952\t4952\t104\t105\tMIAAAA\tUDCAAA\tOOOOxx\n5173\t1451\t1\t1\t3\t13\t73\t173\t1173\t173\t5173\t146\t147\tZQAAAA\tVDCAAA\tVVVVxx\n860\t1452\t0\t0\t0\t0\t60\t860\t860\t860\t860\t120\t121\tCHAAAA\tWDCAAA\tAAAAxx\n4523\t1453\t1\t3\t3\t3\t23\t523\t523\t4523\t4523\t46\t47\tZRAAAA\tXDCAAA\tHHHHxx\n2361\t1454\t1\t1\t1\t1\t61\t361\t361\t2361\t2361\t122\t123\tVMAAAA\tYDCAAA\tOOOOxx\n7877\t1455\t1\t1\t7\t17\t77\t877\t1877\t2877\t7877\t154\t155\tZQAAAA\tZDCAAA\tVVVVxx\n3422\t1456\t0\t2\t2\t2\t22\t422\t1422\t3422\t3422\t44\t45\tQBAAAA\tAECAAA\tAAAAxx\n5781\t1457\t1\t1\t1\t1\t81\t781\t1781\t781\t5781\t162\t163\tJOAAAA\tBECAAA\tHHHHxx\n4752\t1458\t0\t0\t2\t12\t52\t752\t752\t4752\t4752\t104\t105\tUAAAAA\tCECAAA\tOOOOxx\n1786\t1459\t0\t2\t6\t6\t86\t786\t1786\t1786\t1786\t172\t173\tSQAAAA\tDECAAA\tVVVVxx\n1892\t1460\t0\t0\t2\t12\t92\t892\t1892\t1892\t1892\t184\t185\tUUAAAA\tEECAAA\tAAAAxx\n6389\t1461\t1\t1\t9\t9\t89\t389\t389\t1389\t6389\t178\t179\tTLAAAA\tFECAAA\tHHHHxx\n8644\t1462\t0\t0\t4\t4\t44\t644\t644\t3644\t8644\t88\t89\tMUAAAA\tGECAAA\tOOOOxx\n9056\t1463\t0\t0\t6\t16\t56\t56\t1056\t4056\t9056\t112\t113\tIKAAAA\tHECAAA\tVVVVxx\n1423\t1464\t1\t3\t3\t3\t23\t423\t1423\t1423\t1423\t46\t47\tTCAAAA\tIECAAA\tAAAAxx\n4901\t1465\t1\t1\t1\t1\t1\t901\t901\t4901\t4901\t2\t3\tNGAAAA\tJECAAA\tHHHHxx\n3859\t1466\t1\t3\t9\t19\t59\t859\t1859\t3859\t3859\t118\t119\tLSAAAA\tKECAAA\tOOOOxx\n2324\t1467\t0\t0\t4\t4\t24\t324\t324\t2324\t2324\t48\t49\tKLAAAA\tLECAAA\tVVVVxx\n8101\t1468\t1\t1\t1\t1\t1\t101\t101\t3101\t8101\t2\t3\tPZAAAA\tMECAAA\tAAAAxx\n8016\t1469\t0\t0\t6\t16\t16\t16\t16\t3016\t8016\t32\t33\tIWAAAA\tNECAAA\tHHHHxx\n5826\t1470\t0\t2\t6\t6\t26\t826\t1826\t826\t5826\t52\t53\tCQAAAA\tOECAAA\tOOOOxx\n8266\t1471\t0\t2\t6\t6\t66\t266\t266\t3266\t8266\t132\t133\tYFAAAA\tPECAAA\tVVVVxx\n7558\t1472\t0\t2\t8\t18\t58\t558\t1558\t2558\t7558\t116\t117\tSEAAAA\tQECAAA\tAAAAxx\n6976\t1473\t0\t0\t6\t16\t76\t976\t976\t1976\t6976\t152\t153\tIIAAAA\tRECAAA\tHHHHxx\n222\t1474\t0\t2\t2\t2\t22\t222\t222\t222\t222\t44\t45\tOIAAAA\tSECAAA\tOOOOxx\n1624\t1475\t0\t0\t4\t4\t24\t624\t1624\t1624\t1624\t48\t49\tMKAAAA\tTECAAA\tVVVVxx\n1250\t1476\t0\t2\t0\t10\t50\t250\t1250\t1250\t1250\t100\t101\tCWAAAA\tUECAAA\tAAAAxx\n1621\t1477\t1\t1\t1\t1\t21\t621\t1621\t1621\t1621\t42\t43\tJKAAAA\tVECAAA\tHHHHxx\n2350\t1478\t0\t2\t0\t10\t50\t350\t350\t2350\t2350\t100\t101\tKMAAAA\tWECAAA\tOOOOxx\n5239\t1479\t1\t3\t9\t19\t39\t239\t1239\t239\t5239\t78\t79\tNTAAAA\tXECAAA\tVVVVxx\n6681\t1480\t1\t1\t1\t1\t81\t681\t681\t1681\t6681\t162\t163\tZWAAAA\tYECAAA\tAAAAxx\n4983\t1481\t1\t3\t3\t3\t83\t983\t983\t4983\t4983\t166\t167\tRJAAAA\tZECAAA\tHHHHxx\n7149\t1482\t1\t1\t9\t9\t49\t149\t1149\t2149\t7149\t98\t99\tZOAAAA\tAFCAAA\tOOOOxx\n3502\t1483\t0\t2\t2\t2\t2\t502\t1502\t3502\t3502\t4\t5\tSEAAAA\tBFCAAA\tVVVVxx\n3133\t1484\t1\t1\t3\t13\t33\t133\t1133\t3133\t3133\t66\t67\tNQAAAA\tCFCAAA\tAAAAxx\n8342\t1485\t0\t2\t2\t2\t42\t342\t342\t3342\t8342\t84\t85\tWIAAAA\tDFCAAA\tHHHHxx\n3041\t1486\t1\t1\t1\t1\t41\t41\t1041\t3041\t3041\t82\t83\tZMAAAA\tEFCAAA\tOOOOxx\n5383\t1487\t1\t3\t3\t3\t83\t383\t1383\t383\t5383\t166\t167\tBZAAAA\tFFCAAA\tVVVVxx\n3916\t1488\t0\t0\t6\t16\t16\t916\t1916\t3916\t3916\t32\t33\tQUAAAA\tGFCAAA\tAAAAxx\n1438\t1489\t0\t2\t8\t18\t38\t438\t1438\t1438\t1438\t76\t77\tIDAAAA\tHFCAAA\tHHHHxx\n9408\t1490\t0\t0\t8\t8\t8\t408\t1408\t4408\t9408\t16\t17\tWXAAAA\tIFCAAA\tOOOOxx\n5783\t1491\t1\t3\t3\t3\t83\t783\t1783\t783\t5783\t166\t167\tLOAAAA\tJFCAAA\tVVVVxx\n683\t1492\t1\t3\t3\t3\t83\t683\t683\t683\t683\t166\t167\tHAAAAA\tKFCAAA\tAAAAxx\n9381\t1493\t1\t1\t1\t1\t81\t381\t1381\t4381\t9381\t162\t163\tVWAAAA\tLFCAAA\tHHHHxx\n5676\t1494\t0\t0\t6\t16\t76\t676\t1676\t676\t5676\t152\t153\tIKAAAA\tMFCAAA\tOOOOxx\n3224\t1495\t0\t0\t4\t4\t24\t224\t1224\t3224\t3224\t48\t49\tAUAAAA\tNFCAAA\tVVVVxx\n8332\t1496\t0\t0\t2\t12\t32\t332\t332\t3332\t8332\t64\t65\tMIAAAA\tOFCAAA\tAAAAxx\n3372\t1497\t0\t0\t2\t12\t72\t372\t1372\t3372\t3372\t144\t145\tSZAAAA\tPFCAAA\tHHHHxx\n7436\t1498\t0\t0\t6\t16\t36\t436\t1436\t2436\t7436\t72\t73\tAAAAAA\tQFCAAA\tOOOOxx\n5010\t1499\t0\t2\t0\t10\t10\t10\t1010\t10\t5010\t20\t21\tSKAAAA\tRFCAAA\tVVVVxx\n7256\t1500\t0\t0\t6\t16\t56\t256\t1256\t2256\t7256\t112\t113\tCTAAAA\tSFCAAA\tAAAAxx\n961\t1501\t1\t1\t1\t1\t61\t961\t961\t961\t961\t122\t123\tZKAAAA\tTFCAAA\tHHHHxx\n4182\t1502\t0\t2\t2\t2\t82\t182\t182\t4182\t4182\t164\t165\tWEAAAA\tUFCAAA\tOOOOxx\n639\t1503\t1\t3\t9\t19\t39\t639\t639\t639\t639\t78\t79\tPYAAAA\tVFCAAA\tVVVVxx\n8836\t1504\t0\t0\t6\t16\t36\t836\t836\t3836\t8836\t72\t73\tWBAAAA\tWFCAAA\tAAAAxx\n8705\t1505\t1\t1\t5\t5\t5\t705\t705\t3705\t8705\t10\t11\tVWAAAA\tXFCAAA\tHHHHxx\n32\t1506\t0\t0\t2\t12\t32\t32\t32\t32\t32\t64\t65\tGBAAAA\tYFCAAA\tOOOOxx\n7913\t1507\t1\t1\t3\t13\t13\t913\t1913\t2913\t7913\t26\t27\tJSAAAA\tZFCAAA\tVVVVxx\n229\t1508\t1\t1\t9\t9\t29\t229\t229\t229\t229\t58\t59\tVIAAAA\tAGCAAA\tAAAAxx\n2393\t1509\t1\t1\t3\t13\t93\t393\t393\t2393\t2393\t186\t187\tBOAAAA\tBGCAAA\tHHHHxx\n2815\t1510\t1\t3\t5\t15\t15\t815\t815\t2815\t2815\t30\t31\tHEAAAA\tCGCAAA\tOOOOxx\n4858\t1511\t0\t2\t8\t18\t58\t858\t858\t4858\t4858\t116\t117\tWEAAAA\tDGCAAA\tVVVVxx\n6283\t1512\t1\t3\t3\t3\t83\t283\t283\t1283\t6283\t166\t167\tRHAAAA\tEGCAAA\tAAAAxx\n4147\t1513\t1\t3\t7\t7\t47\t147\t147\t4147\t4147\t94\t95\tNDAAAA\tFGCAAA\tHHHHxx\n6801\t1514\t1\t1\t1\t1\t1\t801\t801\t1801\t6801\t2\t3\tPBAAAA\tGGCAAA\tOOOOxx\n1011\t1515\t1\t3\t1\t11\t11\t11\t1011\t1011\t1011\t22\t23\tXMAAAA\tHGCAAA\tVVVVxx\n2527\t1516\t1\t3\t7\t7\t27\t527\t527\t2527\t2527\t54\t55\tFTAAAA\tIGCAAA\tAAAAxx\n381\t1517\t1\t1\t1\t1\t81\t381\t381\t381\t381\t162\t163\tROAAAA\tJGCAAA\tHHHHxx\n3366\t1518\t0\t2\t6\t6\t66\t366\t1366\t3366\t3366\t132\t133\tMZAAAA\tKGCAAA\tOOOOxx\n9636\t1519\t0\t0\t6\t16\t36\t636\t1636\t4636\t9636\t72\t73\tQGAAAA\tLGCAAA\tVVVVxx\n2239\t1520\t1\t3\t9\t19\t39\t239\t239\t2239\t2239\t78\t79\tDIAAAA\tMGCAAA\tAAAAxx\n5911\t1521\t1\t3\t1\t11\t11\t911\t1911\t911\t5911\t22\t23\tJTAAAA\tNGCAAA\tHHHHxx\n449\t1522\t1\t1\t9\t9\t49\t449\t449\t449\t449\t98\t99\tHRAAAA\tOGCAAA\tOOOOxx\n5118\t1523\t0\t2\t8\t18\t18\t118\t1118\t118\t5118\t36\t37\tWOAAAA\tPGCAAA\tVVVVxx\n7684\t1524\t0\t0\t4\t4\t84\t684\t1684\t2684\t7684\t168\t169\tOJAAAA\tQGCAAA\tAAAAxx\n804\t1525\t0\t0\t4\t4\t4\t804\t804\t804\t804\t8\t9\tYEAAAA\tRGCAAA\tHHHHxx\n8378\t1526\t0\t2\t8\t18\t78\t378\t378\t3378\t8378\t156\t157\tGKAAAA\tSGCAAA\tOOOOxx\n9855\t1527\t1\t3\t5\t15\t55\t855\t1855\t4855\t9855\t110\t111\tBPAAAA\tTGCAAA\tVVVVxx\n1995\t1528\t1\t3\t5\t15\t95\t995\t1995\t1995\t1995\t190\t191\tTYAAAA\tUGCAAA\tAAAAxx\n1979\t1529\t1\t3\t9\t19\t79\t979\t1979\t1979\t1979\t158\t159\tDYAAAA\tVGCAAA\tHHHHxx\n4510\t1530\t0\t2\t0\t10\t10\t510\t510\t4510\t4510\t20\t21\tMRAAAA\tWGCAAA\tOOOOxx\n3792\t1531\t0\t0\t2\t12\t92\t792\t1792\t3792\t3792\t184\t185\tWPAAAA\tXGCAAA\tVVVVxx\n3541\t1532\t1\t1\t1\t1\t41\t541\t1541\t3541\t3541\t82\t83\tFGAAAA\tYGCAAA\tAAAAxx\n8847\t1533\t1\t3\t7\t7\t47\t847\t847\t3847\t8847\t94\t95\tHCAAAA\tZGCAAA\tHHHHxx\n1336\t1534\t0\t0\t6\t16\t36\t336\t1336\t1336\t1336\t72\t73\tKZAAAA\tAHCAAA\tOOOOxx\n6780\t1535\t0\t0\t0\t0\t80\t780\t780\t1780\t6780\t160\t161\tUAAAAA\tBHCAAA\tVVVVxx\n8711\t1536\t1\t3\t1\t11\t11\t711\t711\t3711\t8711\t22\t23\tBXAAAA\tCHCAAA\tAAAAxx\n7839\t1537\t1\t3\t9\t19\t39\t839\t1839\t2839\t7839\t78\t79\tNPAAAA\tDHCAAA\tHHHHxx\n677\t1538\t1\t1\t7\t17\t77\t677\t677\t677\t677\t154\t155\tBAAAAA\tEHCAAA\tOOOOxx\n1574\t1539\t0\t2\t4\t14\t74\t574\t1574\t1574\t1574\t148\t149\tOIAAAA\tFHCAAA\tVVVVxx\n2905\t1540\t1\t1\t5\t5\t5\t905\t905\t2905\t2905\t10\t11\tTHAAAA\tGHCAAA\tAAAAxx\n1879\t1541\t1\t3\t9\t19\t79\t879\t1879\t1879\t1879\t158\t159\tHUAAAA\tHHCAAA\tHHHHxx\n7820\t1542\t0\t0\t0\t0\t20\t820\t1820\t2820\t7820\t40\t41\tUOAAAA\tIHCAAA\tOOOOxx\n4308\t1543\t0\t0\t8\t8\t8\t308\t308\t4308\t4308\t16\t17\tSJAAAA\tJHCAAA\tVVVVxx\n4474\t1544\t0\t2\t4\t14\t74\t474\t474\t4474\t4474\t148\t149\tCQAAAA\tKHCAAA\tAAAAxx\n6985\t1545\t1\t1\t5\t5\t85\t985\t985\t1985\t6985\t170\t171\tRIAAAA\tLHCAAA\tHHHHxx\n6929\t1546\t1\t1\t9\t9\t29\t929\t929\t1929\t6929\t58\t59\tNGAAAA\tMHCAAA\tOOOOxx\n777\t1547\t1\t1\t7\t17\t77\t777\t777\t777\t777\t154\t155\tXDAAAA\tNHCAAA\tVVVVxx\n8271\t1548\t1\t3\t1\t11\t71\t271\t271\t3271\t8271\t142\t143\tDGAAAA\tOHCAAA\tAAAAxx\n2389\t1549\t1\t1\t9\t9\t89\t389\t389\t2389\t2389\t178\t179\tXNAAAA\tPHCAAA\tHHHHxx\n946\t1550\t0\t2\t6\t6\t46\t946\t946\t946\t946\t92\t93\tKKAAAA\tQHCAAA\tOOOOxx\n9682\t1551\t0\t2\t2\t2\t82\t682\t1682\t4682\t9682\t164\t165\tKIAAAA\tRHCAAA\tVVVVxx\n8722\t1552\t0\t2\t2\t2\t22\t722\t722\t3722\t8722\t44\t45\tMXAAAA\tSHCAAA\tAAAAxx\n470\t1553\t0\t2\t0\t10\t70\t470\t470\t470\t470\t140\t141\tCSAAAA\tTHCAAA\tHHHHxx\n7425\t1554\t1\t1\t5\t5\t25\t425\t1425\t2425\t7425\t50\t51\tPZAAAA\tUHCAAA\tOOOOxx\n2372\t1555\t0\t0\t2\t12\t72\t372\t372\t2372\t2372\t144\t145\tGNAAAA\tVHCAAA\tVVVVxx\n508\t1556\t0\t0\t8\t8\t8\t508\t508\t508\t508\t16\t17\tOTAAAA\tWHCAAA\tAAAAxx\n163\t1557\t1\t3\t3\t3\t63\t163\t163\t163\t163\t126\t127\tHGAAAA\tXHCAAA\tHHHHxx\n6579\t1558\t1\t3\t9\t19\t79\t579\t579\t1579\t6579\t158\t159\tBTAAAA\tYHCAAA\tOOOOxx\n2355\t1559\t1\t3\t5\t15\t55\t355\t355\t2355\t2355\t110\t111\tPMAAAA\tZHCAAA\tVVVVxx\n70\t1560\t0\t2\t0\t10\t70\t70\t70\t70\t70\t140\t141\tSCAAAA\tAICAAA\tAAAAxx\n651\t1561\t1\t3\t1\t11\t51\t651\t651\t651\t651\t102\t103\tBZAAAA\tBICAAA\tHHHHxx\n4436\t1562\t0\t0\t6\t16\t36\t436\t436\t4436\t4436\t72\t73\tQOAAAA\tCICAAA\tOOOOxx\n4240\t1563\t0\t0\t0\t0\t40\t240\t240\t4240\t4240\t80\t81\tCHAAAA\tDICAAA\tVVVVxx\n2722\t1564\t0\t2\t2\t2\t22\t722\t722\t2722\t2722\t44\t45\tSAAAAA\tEICAAA\tAAAAxx\n8937\t1565\t1\t1\t7\t17\t37\t937\t937\t3937\t8937\t74\t75\tTFAAAA\tFICAAA\tHHHHxx\n8364\t1566\t0\t0\t4\t4\t64\t364\t364\t3364\t8364\t128\t129\tSJAAAA\tGICAAA\tOOOOxx\n8317\t1567\t1\t1\t7\t17\t17\t317\t317\t3317\t8317\t34\t35\tXHAAAA\tHICAAA\tVVVVxx\n8872\t1568\t0\t0\t2\t12\t72\t872\t872\t3872\t8872\t144\t145\tGDAAAA\tIICAAA\tAAAAxx\n5512\t1569\t0\t0\t2\t12\t12\t512\t1512\t512\t5512\t24\t25\tAEAAAA\tJICAAA\tHHHHxx\n6651\t1570\t1\t3\t1\t11\t51\t651\t651\t1651\t6651\t102\t103\tVVAAAA\tKICAAA\tOOOOxx\n5976\t1571\t0\t0\t6\t16\t76\t976\t1976\t976\t5976\t152\t153\tWVAAAA\tLICAAA\tVVVVxx\n3301\t1572\t1\t1\t1\t1\t1\t301\t1301\t3301\t3301\t2\t3\tZWAAAA\tMICAAA\tAAAAxx\n6784\t1573\t0\t0\t4\t4\t84\t784\t784\t1784\t6784\t168\t169\tYAAAAA\tNICAAA\tHHHHxx\n573\t1574\t1\t1\t3\t13\t73\t573\t573\t573\t573\t146\t147\tBWAAAA\tOICAAA\tOOOOxx\n3015\t1575\t1\t3\t5\t15\t15\t15\t1015\t3015\t3015\t30\t31\tZLAAAA\tPICAAA\tVVVVxx\n8245\t1576\t1\t1\t5\t5\t45\t245\t245\t3245\t8245\t90\t91\tDFAAAA\tQICAAA\tAAAAxx\n5251\t1577\t1\t3\t1\t11\t51\t251\t1251\t251\t5251\t102\t103\tZTAAAA\tRICAAA\tHHHHxx\n2281\t1578\t1\t1\t1\t1\t81\t281\t281\t2281\t2281\t162\t163\tTJAAAA\tSICAAA\tOOOOxx\n518\t1579\t0\t2\t8\t18\t18\t518\t518\t518\t518\t36\t37\tYTAAAA\tTICAAA\tVVVVxx\n9839\t1580\t1\t3\t9\t19\t39\t839\t1839\t4839\t9839\t78\t79\tLOAAAA\tUICAAA\tAAAAxx\n4526\t1581\t0\t2\t6\t6\t26\t526\t526\t4526\t4526\t52\t53\tCSAAAA\tVICAAA\tHHHHxx\n1261\t1582\t1\t1\t1\t1\t61\t261\t1261\t1261\t1261\t122\t123\tNWAAAA\tWICAAA\tOOOOxx\n4259\t1583\t1\t3\t9\t19\t59\t259\t259\t4259\t4259\t118\t119\tVHAAAA\tXICAAA\tVVVVxx\n9098\t1584\t0\t2\t8\t18\t98\t98\t1098\t4098\t9098\t196\t197\tYLAAAA\tYICAAA\tAAAAxx\n6037\t1585\t1\t1\t7\t17\t37\t37\t37\t1037\t6037\t74\t75\tFYAAAA\tZICAAA\tHHHHxx\n4284\t1586\t0\t0\t4\t4\t84\t284\t284\t4284\t4284\t168\t169\tUIAAAA\tAJCAAA\tOOOOxx\n3267\t1587\t1\t3\t7\t7\t67\t267\t1267\t3267\t3267\t134\t135\tRVAAAA\tBJCAAA\tVVVVxx\n5908\t1588\t0\t0\t8\t8\t8\t908\t1908\t908\t5908\t16\t17\tGTAAAA\tCJCAAA\tAAAAxx\n1549\t1589\t1\t1\t9\t9\t49\t549\t1549\t1549\t1549\t98\t99\tPHAAAA\tDJCAAA\tHHHHxx\n8736\t1590\t0\t0\t6\t16\t36\t736\t736\t3736\t8736\t72\t73\tAYAAAA\tEJCAAA\tOOOOxx\n2008\t1591\t0\t0\t8\t8\t8\t8\t8\t2008\t2008\t16\t17\tGZAAAA\tFJCAAA\tVVVVxx\n548\t1592\t0\t0\t8\t8\t48\t548\t548\t548\t548\t96\t97\tCVAAAA\tGJCAAA\tAAAAxx\n8846\t1593\t0\t2\t6\t6\t46\t846\t846\t3846\t8846\t92\t93\tGCAAAA\tHJCAAA\tHHHHxx\n8374\t1594\t0\t2\t4\t14\t74\t374\t374\t3374\t8374\t148\t149\tCKAAAA\tIJCAAA\tOOOOxx\n7986\t1595\t0\t2\t6\t6\t86\t986\t1986\t2986\t7986\t172\t173\tEVAAAA\tJJCAAA\tVVVVxx\n6819\t1596\t1\t3\t9\t19\t19\t819\t819\t1819\t6819\t38\t39\tHCAAAA\tKJCAAA\tAAAAxx\n4418\t1597\t0\t2\t8\t18\t18\t418\t418\t4418\t4418\t36\t37\tYNAAAA\tLJCAAA\tHHHHxx\n833\t1598\t1\t1\t3\t13\t33\t833\t833\t833\t833\t66\t67\tBGAAAA\tMJCAAA\tOOOOxx\n4416\t1599\t0\t0\t6\t16\t16\t416\t416\t4416\t4416\t32\t33\tWNAAAA\tNJCAAA\tVVVVxx\n4902\t1600\t0\t2\t2\t2\t2\t902\t902\t4902\t4902\t4\t5\tOGAAAA\tOJCAAA\tAAAAxx\n6828\t1601\t0\t0\t8\t8\t28\t828\t828\t1828\t6828\t56\t57\tQCAAAA\tPJCAAA\tHHHHxx\n1118\t1602\t0\t2\t8\t18\t18\t118\t1118\t1118\t1118\t36\t37\tARAAAA\tQJCAAA\tOOOOxx\n9993\t1603\t1\t1\t3\t13\t93\t993\t1993\t4993\t9993\t186\t187\tJUAAAA\tRJCAAA\tVVVVxx\n1430\t1604\t0\t2\t0\t10\t30\t430\t1430\t1430\t1430\t60\t61\tADAAAA\tSJCAAA\tAAAAxx\n5670\t1605\t0\t2\t0\t10\t70\t670\t1670\t670\t5670\t140\t141\tCKAAAA\tTJCAAA\tHHHHxx\n5424\t1606\t0\t0\t4\t4\t24\t424\t1424\t424\t5424\t48\t49\tQAAAAA\tUJCAAA\tOOOOxx\n5561\t1607\t1\t1\t1\t1\t61\t561\t1561\t561\t5561\t122\t123\tXFAAAA\tVJCAAA\tVVVVxx\n2027\t1608\t1\t3\t7\t7\t27\t27\t27\t2027\t2027\t54\t55\tZZAAAA\tWJCAAA\tAAAAxx\n6924\t1609\t0\t0\t4\t4\t24\t924\t924\t1924\t6924\t48\t49\tIGAAAA\tXJCAAA\tHHHHxx\n5946\t1610\t0\t2\t6\t6\t46\t946\t1946\t946\t5946\t92\t93\tSUAAAA\tYJCAAA\tOOOOxx\n4294\t1611\t0\t2\t4\t14\t94\t294\t294\t4294\t4294\t188\t189\tEJAAAA\tZJCAAA\tVVVVxx\n2936\t1612\t0\t0\t6\t16\t36\t936\t936\t2936\t2936\t72\t73\tYIAAAA\tAKCAAA\tAAAAxx\n3855\t1613\t1\t3\t5\t15\t55\t855\t1855\t3855\t3855\t110\t111\tHSAAAA\tBKCAAA\tHHHHxx\n455\t1614\t1\t3\t5\t15\t55\t455\t455\t455\t455\t110\t111\tNRAAAA\tCKCAAA\tOOOOxx\n2918\t1615\t0\t2\t8\t18\t18\t918\t918\t2918\t2918\t36\t37\tGIAAAA\tDKCAAA\tVVVVxx\n448\t1616\t0\t0\t8\t8\t48\t448\t448\t448\t448\t96\t97\tGRAAAA\tEKCAAA\tAAAAxx\n2149\t1617\t1\t1\t9\t9\t49\t149\t149\t2149\t2149\t98\t99\tREAAAA\tFKCAAA\tHHHHxx\n8890\t1618\t0\t2\t0\t10\t90\t890\t890\t3890\t8890\t180\t181\tYDAAAA\tGKCAAA\tOOOOxx\n8919\t1619\t1\t3\t9\t19\t19\t919\t919\t3919\t8919\t38\t39\tBFAAAA\tHKCAAA\tVVVVxx\n4957\t1620\t1\t1\t7\t17\t57\t957\t957\t4957\t4957\t114\t115\tRIAAAA\tIKCAAA\tAAAAxx\n4\t1621\t0\t0\t4\t4\t4\t4\t4\t4\t4\t8\t9\tEAAAAA\tJKCAAA\tHHHHxx\n4837\t1622\t1\t1\t7\t17\t37\t837\t837\t4837\t4837\t74\t75\tBEAAAA\tKKCAAA\tOOOOxx\n3976\t1623\t0\t0\t6\t16\t76\t976\t1976\t3976\t3976\t152\t153\tYWAAAA\tLKCAAA\tVVVVxx\n9459\t1624\t1\t3\t9\t19\t59\t459\t1459\t4459\t9459\t118\t119\tVZAAAA\tMKCAAA\tAAAAxx\n7097\t1625\t1\t1\t7\t17\t97\t97\t1097\t2097\t7097\t194\t195\tZMAAAA\tNKCAAA\tHHHHxx\n9226\t1626\t0\t2\t6\t6\t26\t226\t1226\t4226\t9226\t52\t53\tWQAAAA\tOKCAAA\tOOOOxx\n5803\t1627\t1\t3\t3\t3\t3\t803\t1803\t803\t5803\t6\t7\tFPAAAA\tPKCAAA\tVVVVxx\n21\t1628\t1\t1\t1\t1\t21\t21\t21\t21\t21\t42\t43\tVAAAAA\tQKCAAA\tAAAAxx\n5275\t1629\t1\t3\t5\t15\t75\t275\t1275\t275\t5275\t150\t151\tXUAAAA\tRKCAAA\tHHHHxx\n3488\t1630\t0\t0\t8\t8\t88\t488\t1488\t3488\t3488\t176\t177\tEEAAAA\tSKCAAA\tOOOOxx\n1595\t1631\t1\t3\t5\t15\t95\t595\t1595\t1595\t1595\t190\t191\tJJAAAA\tTKCAAA\tVVVVxx\n5212\t1632\t0\t0\t2\t12\t12\t212\t1212\t212\t5212\t24\t25\tMSAAAA\tUKCAAA\tAAAAxx\n6574\t1633\t0\t2\t4\t14\t74\t574\t574\t1574\t6574\t148\t149\tWSAAAA\tVKCAAA\tHHHHxx\n7524\t1634\t0\t0\t4\t4\t24\t524\t1524\t2524\t7524\t48\t49\tKDAAAA\tWKCAAA\tOOOOxx\n6100\t1635\t0\t0\t0\t0\t0\t100\t100\t1100\t6100\t0\t1\tQAAAAA\tXKCAAA\tVVVVxx\n1198\t1636\t0\t2\t8\t18\t98\t198\t1198\t1198\t1198\t196\t197\tCUAAAA\tYKCAAA\tAAAAxx\n7345\t1637\t1\t1\t5\t5\t45\t345\t1345\t2345\t7345\t90\t91\tNWAAAA\tZKCAAA\tHHHHxx\n5020\t1638\t0\t0\t0\t0\t20\t20\t1020\t20\t5020\t40\t41\tCLAAAA\tALCAAA\tOOOOxx\n6925\t1639\t1\t1\t5\t5\t25\t925\t925\t1925\t6925\t50\t51\tJGAAAA\tBLCAAA\tVVVVxx\n8915\t1640\t1\t3\t5\t15\t15\t915\t915\t3915\t8915\t30\t31\tXEAAAA\tCLCAAA\tAAAAxx\n3088\t1641\t0\t0\t8\t8\t88\t88\t1088\t3088\t3088\t176\t177\tUOAAAA\tDLCAAA\tHHHHxx\n4828\t1642\t0\t0\t8\t8\t28\t828\t828\t4828\t4828\t56\t57\tSDAAAA\tELCAAA\tOOOOxx\n7276\t1643\t0\t0\t6\t16\t76\t276\t1276\t2276\t7276\t152\t153\tWTAAAA\tFLCAAA\tVVVVxx\n299\t1644\t1\t3\t9\t19\t99\t299\t299\t299\t299\t198\t199\tNLAAAA\tGLCAAA\tAAAAxx\n76\t1645\t0\t0\t6\t16\t76\t76\t76\t76\t76\t152\t153\tYCAAAA\tHLCAAA\tHHHHxx\n8458\t1646\t0\t2\t8\t18\t58\t458\t458\t3458\t8458\t116\t117\tINAAAA\tILCAAA\tOOOOxx\n7207\t1647\t1\t3\t7\t7\t7\t207\t1207\t2207\t7207\t14\t15\tFRAAAA\tJLCAAA\tVVVVxx\n5585\t1648\t1\t1\t5\t5\t85\t585\t1585\t585\t5585\t170\t171\tVGAAAA\tKLCAAA\tAAAAxx\n3234\t1649\t0\t2\t4\t14\t34\t234\t1234\t3234\t3234\t68\t69\tKUAAAA\tLLCAAA\tHHHHxx\n8001\t1650\t1\t1\t1\t1\t1\t1\t1\t3001\t8001\t2\t3\tTVAAAA\tMLCAAA\tOOOOxx\n1319\t1651\t1\t3\t9\t19\t19\t319\t1319\t1319\t1319\t38\t39\tTYAAAA\tNLCAAA\tVVVVxx\n6342\t1652\t0\t2\t2\t2\t42\t342\t342\t1342\t6342\t84\t85\tYJAAAA\tOLCAAA\tAAAAxx\n9199\t1653\t1\t3\t9\t19\t99\t199\t1199\t4199\t9199\t198\t199\tVPAAAA\tPLCAAA\tHHHHxx\n5696\t1654\t0\t0\t6\t16\t96\t696\t1696\t696\t5696\t192\t193\tCLAAAA\tQLCAAA\tOOOOxx\n2562\t1655\t0\t2\t2\t2\t62\t562\t562\t2562\t2562\t124\t125\tOUAAAA\tRLCAAA\tVVVVxx\n4226\t1656\t0\t2\t6\t6\t26\t226\t226\t4226\t4226\t52\t53\tOGAAAA\tSLCAAA\tAAAAxx\n1184\t1657\t0\t0\t4\t4\t84\t184\t1184\t1184\t1184\t168\t169\tOTAAAA\tTLCAAA\tHHHHxx\n5807\t1658\t1\t3\t7\t7\t7\t807\t1807\t807\t5807\t14\t15\tJPAAAA\tULCAAA\tOOOOxx\n1890\t1659\t0\t2\t0\t10\t90\t890\t1890\t1890\t1890\t180\t181\tSUAAAA\tVLCAAA\tVVVVxx\n451\t1660\t1\t3\t1\t11\t51\t451\t451\t451\t451\t102\t103\tJRAAAA\tWLCAAA\tAAAAxx\n1049\t1661\t1\t1\t9\t9\t49\t49\t1049\t1049\t1049\t98\t99\tJOAAAA\tXLCAAA\tHHHHxx\n5272\t1662\t0\t0\t2\t12\t72\t272\t1272\t272\t5272\t144\t145\tUUAAAA\tYLCAAA\tOOOOxx\n4588\t1663\t0\t0\t8\t8\t88\t588\t588\t4588\t4588\t176\t177\tMUAAAA\tZLCAAA\tVVVVxx\n5213\t1664\t1\t1\t3\t13\t13\t213\t1213\t213\t5213\t26\t27\tNSAAAA\tAMCAAA\tAAAAxx\n9543\t1665\t1\t3\t3\t3\t43\t543\t1543\t4543\t9543\t86\t87\tBDAAAA\tBMCAAA\tHHHHxx\n6318\t1666\t0\t2\t8\t18\t18\t318\t318\t1318\t6318\t36\t37\tAJAAAA\tCMCAAA\tOOOOxx\n7992\t1667\t0\t0\t2\t12\t92\t992\t1992\t2992\t7992\t184\t185\tKVAAAA\tDMCAAA\tVVVVxx\n4619\t1668\t1\t3\t9\t19\t19\t619\t619\t4619\t4619\t38\t39\tRVAAAA\tEMCAAA\tAAAAxx\n7189\t1669\t1\t1\t9\t9\t89\t189\t1189\t2189\t7189\t178\t179\tNQAAAA\tFMCAAA\tHHHHxx\n2178\t1670\t0\t2\t8\t18\t78\t178\t178\t2178\t2178\t156\t157\tUFAAAA\tGMCAAA\tOOOOxx\n4928\t1671\t0\t0\t8\t8\t28\t928\t928\t4928\t4928\t56\t57\tOHAAAA\tHMCAAA\tVVVVxx\n3966\t1672\t0\t2\t6\t6\t66\t966\t1966\t3966\t3966\t132\t133\tOWAAAA\tIMCAAA\tAAAAxx\n9790\t1673\t0\t2\t0\t10\t90\t790\t1790\t4790\t9790\t180\t181\tOMAAAA\tJMCAAA\tHHHHxx\n9150\t1674\t0\t2\t0\t10\t50\t150\t1150\t4150\t9150\t100\t101\tYNAAAA\tKMCAAA\tOOOOxx\n313\t1675\t1\t1\t3\t13\t13\t313\t313\t313\t313\t26\t27\tBMAAAA\tLMCAAA\tVVVVxx\n1614\t1676\t0\t2\t4\t14\t14\t614\t1614\t1614\t1614\t28\t29\tCKAAAA\tMMCAAA\tAAAAxx\n1581\t1677\t1\t1\t1\t1\t81\t581\t1581\t1581\t1581\t162\t163\tVIAAAA\tNMCAAA\tHHHHxx\n3674\t1678\t0\t2\t4\t14\t74\t674\t1674\t3674\t3674\t148\t149\tILAAAA\tOMCAAA\tOOOOxx\n3444\t1679\t0\t0\t4\t4\t44\t444\t1444\t3444\t3444\t88\t89\tMCAAAA\tPMCAAA\tVVVVxx\n1050\t1680\t0\t2\t0\t10\t50\t50\t1050\t1050\t1050\t100\t101\tKOAAAA\tQMCAAA\tAAAAxx\n8241\t1681\t1\t1\t1\t1\t41\t241\t241\t3241\t8241\t82\t83\tZEAAAA\tRMCAAA\tHHHHxx\n3382\t1682\t0\t2\t2\t2\t82\t382\t1382\t3382\t3382\t164\t165\tCAAAAA\tSMCAAA\tOOOOxx\n7105\t1683\t1\t1\t5\t5\t5\t105\t1105\t2105\t7105\t10\t11\tHNAAAA\tTMCAAA\tVVVVxx\n2957\t1684\t1\t1\t7\t17\t57\t957\t957\t2957\t2957\t114\t115\tTJAAAA\tUMCAAA\tAAAAxx\n6162\t1685\t0\t2\t2\t2\t62\t162\t162\t1162\t6162\t124\t125\tADAAAA\tVMCAAA\tHHHHxx\n5150\t1686\t0\t2\t0\t10\t50\t150\t1150\t150\t5150\t100\t101\tCQAAAA\tWMCAAA\tOOOOxx\n2622\t1687\t0\t2\t2\t2\t22\t622\t622\t2622\t2622\t44\t45\tWWAAAA\tXMCAAA\tVVVVxx\n2240\t1688\t0\t0\t0\t0\t40\t240\t240\t2240\t2240\t80\t81\tEIAAAA\tYMCAAA\tAAAAxx\n8880\t1689\t0\t0\t0\t0\t80\t880\t880\t3880\t8880\t160\t161\tODAAAA\tZMCAAA\tHHHHxx\n9250\t1690\t0\t2\t0\t10\t50\t250\t1250\t4250\t9250\t100\t101\tURAAAA\tANCAAA\tOOOOxx\n7010\t1691\t0\t2\t0\t10\t10\t10\t1010\t2010\t7010\t20\t21\tQJAAAA\tBNCAAA\tVVVVxx\n1098\t1692\t0\t2\t8\t18\t98\t98\t1098\t1098\t1098\t196\t197\tGQAAAA\tCNCAAA\tAAAAxx\n648\t1693\t0\t0\t8\t8\t48\t648\t648\t648\t648\t96\t97\tYYAAAA\tDNCAAA\tHHHHxx\n5536\t1694\t0\t0\t6\t16\t36\t536\t1536\t536\t5536\t72\t73\tYEAAAA\tENCAAA\tOOOOxx\n7858\t1695\t0\t2\t8\t18\t58\t858\t1858\t2858\t7858\t116\t117\tGQAAAA\tFNCAAA\tVVVVxx\n7053\t1696\t1\t1\t3\t13\t53\t53\t1053\t2053\t7053\t106\t107\tHLAAAA\tGNCAAA\tAAAAxx\n8681\t1697\t1\t1\t1\t1\t81\t681\t681\t3681\t8681\t162\t163\tXVAAAA\tHNCAAA\tHHHHxx\n8832\t1698\t0\t0\t2\t12\t32\t832\t832\t3832\t8832\t64\t65\tSBAAAA\tINCAAA\tOOOOxx\n6836\t1699\t0\t0\t6\t16\t36\t836\t836\t1836\t6836\t72\t73\tYCAAAA\tJNCAAA\tVVVVxx\n4856\t1700\t0\t0\t6\t16\t56\t856\t856\t4856\t4856\t112\t113\tUEAAAA\tKNCAAA\tAAAAxx\n345\t1701\t1\t1\t5\t5\t45\t345\t345\t345\t345\t90\t91\tHNAAAA\tLNCAAA\tHHHHxx\n6559\t1702\t1\t3\t9\t19\t59\t559\t559\t1559\t6559\t118\t119\tHSAAAA\tMNCAAA\tOOOOxx\n3017\t1703\t1\t1\t7\t17\t17\t17\t1017\t3017\t3017\t34\t35\tBMAAAA\tNNCAAA\tVVVVxx\n4176\t1704\t0\t0\t6\t16\t76\t176\t176\t4176\t4176\t152\t153\tQEAAAA\tONCAAA\tAAAAxx\n2839\t1705\t1\t3\t9\t19\t39\t839\t839\t2839\t2839\t78\t79\tFFAAAA\tPNCAAA\tHHHHxx\n6065\t1706\t1\t1\t5\t5\t65\t65\t65\t1065\t6065\t130\t131\tHZAAAA\tQNCAAA\tOOOOxx\n7360\t1707\t0\t0\t0\t0\t60\t360\t1360\t2360\t7360\t120\t121\tCXAAAA\tRNCAAA\tVVVVxx\n9527\t1708\t1\t3\t7\t7\t27\t527\t1527\t4527\t9527\t54\t55\tLCAAAA\tSNCAAA\tAAAAxx\n8849\t1709\t1\t1\t9\t9\t49\t849\t849\t3849\t8849\t98\t99\tJCAAAA\tTNCAAA\tHHHHxx\n7274\t1710\t0\t2\t4\t14\t74\t274\t1274\t2274\t7274\t148\t149\tUTAAAA\tUNCAAA\tOOOOxx\n4368\t1711\t0\t0\t8\t8\t68\t368\t368\t4368\t4368\t136\t137\tAMAAAA\tVNCAAA\tVVVVxx\n2488\t1712\t0\t0\t8\t8\t88\t488\t488\t2488\t2488\t176\t177\tSRAAAA\tWNCAAA\tAAAAxx\n4674\t1713\t0\t2\t4\t14\t74\t674\t674\t4674\t4674\t148\t149\tUXAAAA\tXNCAAA\tHHHHxx\n365\t1714\t1\t1\t5\t5\t65\t365\t365\t365\t365\t130\t131\tBOAAAA\tYNCAAA\tOOOOxx\n5897\t1715\t1\t1\t7\t17\t97\t897\t1897\t897\t5897\t194\t195\tVSAAAA\tZNCAAA\tVVVVxx\n8918\t1716\t0\t2\t8\t18\t18\t918\t918\t3918\t8918\t36\t37\tAFAAAA\tAOCAAA\tAAAAxx\n1988\t1717\t0\t0\t8\t8\t88\t988\t1988\t1988\t1988\t176\t177\tMYAAAA\tBOCAAA\tHHHHxx\n1210\t1718\t0\t2\t0\t10\t10\t210\t1210\t1210\t1210\t20\t21\tOUAAAA\tCOCAAA\tOOOOxx\n2945\t1719\t1\t1\t5\t5\t45\t945\t945\t2945\t2945\t90\t91\tHJAAAA\tDOCAAA\tVVVVxx\n555\t1720\t1\t3\t5\t15\t55\t555\t555\t555\t555\t110\t111\tJVAAAA\tEOCAAA\tAAAAxx\n9615\t1721\t1\t3\t5\t15\t15\t615\t1615\t4615\t9615\t30\t31\tVFAAAA\tFOCAAA\tHHHHxx\n9939\t1722\t1\t3\t9\t19\t39\t939\t1939\t4939\t9939\t78\t79\tHSAAAA\tGOCAAA\tOOOOxx\n1216\t1723\t0\t0\t6\t16\t16\t216\t1216\t1216\t1216\t32\t33\tUUAAAA\tHOCAAA\tVVVVxx\n745\t1724\t1\t1\t5\t5\t45\t745\t745\t745\t745\t90\t91\tRCAAAA\tIOCAAA\tAAAAxx\n3326\t1725\t0\t2\t6\t6\t26\t326\t1326\t3326\t3326\t52\t53\tYXAAAA\tJOCAAA\tHHHHxx\n953\t1726\t1\t1\t3\t13\t53\t953\t953\t953\t953\t106\t107\tRKAAAA\tKOCAAA\tOOOOxx\n444\t1727\t0\t0\t4\t4\t44\t444\t444\t444\t444\t88\t89\tCRAAAA\tLOCAAA\tVVVVxx\n280\t1728\t0\t0\t0\t0\t80\t280\t280\t280\t280\t160\t161\tUKAAAA\tMOCAAA\tAAAAxx\n3707\t1729\t1\t3\t7\t7\t7\t707\t1707\t3707\t3707\t14\t15\tPMAAAA\tNOCAAA\tHHHHxx\n1351\t1730\t1\t3\t1\t11\t51\t351\t1351\t1351\t1351\t102\t103\tZZAAAA\tOOCAAA\tOOOOxx\n1280\t1731\t0\t0\t0\t0\t80\t280\t1280\t1280\t1280\t160\t161\tGXAAAA\tPOCAAA\tVVVVxx\n628\t1732\t0\t0\t8\t8\t28\t628\t628\t628\t628\t56\t57\tEYAAAA\tQOCAAA\tAAAAxx\n6198\t1733\t0\t2\t8\t18\t98\t198\t198\t1198\t6198\t196\t197\tKEAAAA\tROCAAA\tHHHHxx\n1957\t1734\t1\t1\t7\t17\t57\t957\t1957\t1957\t1957\t114\t115\tHXAAAA\tSOCAAA\tOOOOxx\n9241\t1735\t1\t1\t1\t1\t41\t241\t1241\t4241\t9241\t82\t83\tLRAAAA\tTOCAAA\tVVVVxx\n303\t1736\t1\t3\t3\t3\t3\t303\t303\t303\t303\t6\t7\tRLAAAA\tUOCAAA\tAAAAxx\n1945\t1737\t1\t1\t5\t5\t45\t945\t1945\t1945\t1945\t90\t91\tVWAAAA\tVOCAAA\tHHHHxx\n3634\t1738\t0\t2\t4\t14\t34\t634\t1634\t3634\t3634\t68\t69\tUJAAAA\tWOCAAA\tOOOOxx\n4768\t1739\t0\t0\t8\t8\t68\t768\t768\t4768\t4768\t136\t137\tKBAAAA\tXOCAAA\tVVVVxx\n9262\t1740\t0\t2\t2\t2\t62\t262\t1262\t4262\t9262\t124\t125\tGSAAAA\tYOCAAA\tAAAAxx\n2610\t1741\t0\t2\t0\t10\t10\t610\t610\t2610\t2610\t20\t21\tKWAAAA\tZOCAAA\tHHHHxx\n6640\t1742\t0\t0\t0\t0\t40\t640\t640\t1640\t6640\t80\t81\tKVAAAA\tAPCAAA\tOOOOxx\n3338\t1743\t0\t2\t8\t18\t38\t338\t1338\t3338\t3338\t76\t77\tKYAAAA\tBPCAAA\tVVVVxx\n6560\t1744\t0\t0\t0\t0\t60\t560\t560\t1560\t6560\t120\t121\tISAAAA\tCPCAAA\tAAAAxx\n5986\t1745\t0\t2\t6\t6\t86\t986\t1986\t986\t5986\t172\t173\tGWAAAA\tDPCAAA\tHHHHxx\n2970\t1746\t0\t2\t0\t10\t70\t970\t970\t2970\t2970\t140\t141\tGKAAAA\tEPCAAA\tOOOOxx\n4731\t1747\t1\t3\t1\t11\t31\t731\t731\t4731\t4731\t62\t63\tZZAAAA\tFPCAAA\tVVVVxx\n9486\t1748\t0\t2\t6\t6\t86\t486\t1486\t4486\t9486\t172\t173\tWAAAAA\tGPCAAA\tAAAAxx\n7204\t1749\t0\t0\t4\t4\t4\t204\t1204\t2204\t7204\t8\t9\tCRAAAA\tHPCAAA\tHHHHxx\n6685\t1750\t1\t1\t5\t5\t85\t685\t685\t1685\t6685\t170\t171\tDXAAAA\tIPCAAA\tOOOOxx\n6852\t1751\t0\t0\t2\t12\t52\t852\t852\t1852\t6852\t104\t105\tODAAAA\tJPCAAA\tVVVVxx\n2325\t1752\t1\t1\t5\t5\t25\t325\t325\t2325\t2325\t50\t51\tLLAAAA\tKPCAAA\tAAAAxx\n1063\t1753\t1\t3\t3\t3\t63\t63\t1063\t1063\t1063\t126\t127\tXOAAAA\tLPCAAA\tHHHHxx\n6810\t1754\t0\t2\t0\t10\t10\t810\t810\t1810\t6810\t20\t21\tYBAAAA\tMPCAAA\tOOOOxx\n7718\t1755\t0\t2\t8\t18\t18\t718\t1718\t2718\t7718\t36\t37\tWKAAAA\tNPCAAA\tVVVVxx\n1680\t1756\t0\t0\t0\t0\t80\t680\t1680\t1680\t1680\t160\t161\tQMAAAA\tOPCAAA\tAAAAxx\n7402\t1757\t0\t2\t2\t2\t2\t402\t1402\t2402\t7402\t4\t5\tSYAAAA\tPPCAAA\tHHHHxx\n4134\t1758\t0\t2\t4\t14\t34\t134\t134\t4134\t4134\t68\t69\tADAAAA\tQPCAAA\tOOOOxx\n8232\t1759\t0\t0\t2\t12\t32\t232\t232\t3232\t8232\t64\t65\tQEAAAA\tRPCAAA\tVVVVxx\n6682\t1760\t0\t2\t2\t2\t82\t682\t682\t1682\t6682\t164\t165\tAXAAAA\tSPCAAA\tAAAAxx\n7952\t1761\t0\t0\t2\t12\t52\t952\t1952\t2952\t7952\t104\t105\tWTAAAA\tTPCAAA\tHHHHxx\n5943\t1762\t1\t3\t3\t3\t43\t943\t1943\t943\t5943\t86\t87\tPUAAAA\tUPCAAA\tOOOOxx\n5394\t1763\t0\t2\t4\t14\t94\t394\t1394\t394\t5394\t188\t189\tMZAAAA\tVPCAAA\tVVVVxx\n6554\t1764\t0\t2\t4\t14\t54\t554\t554\t1554\t6554\t108\t109\tCSAAAA\tWPCAAA\tAAAAxx\n8186\t1765\t0\t2\t6\t6\t86\t186\t186\t3186\t8186\t172\t173\tWCAAAA\tXPCAAA\tHHHHxx\n199\t1766\t1\t3\t9\t19\t99\t199\t199\t199\t199\t198\t199\tRHAAAA\tYPCAAA\tOOOOxx\n3386\t1767\t0\t2\t6\t6\t86\t386\t1386\t3386\t3386\t172\t173\tGAAAAA\tZPCAAA\tVVVVxx\n8974\t1768\t0\t2\t4\t14\t74\t974\t974\t3974\t8974\t148\t149\tEHAAAA\tAQCAAA\tAAAAxx\n8140\t1769\t0\t0\t0\t0\t40\t140\t140\t3140\t8140\t80\t81\tCBAAAA\tBQCAAA\tHHHHxx\n3723\t1770\t1\t3\t3\t3\t23\t723\t1723\t3723\t3723\t46\t47\tFNAAAA\tCQCAAA\tOOOOxx\n8827\t1771\t1\t3\t7\t7\t27\t827\t827\t3827\t8827\t54\t55\tNBAAAA\tDQCAAA\tVVVVxx\n1998\t1772\t0\t2\t8\t18\t98\t998\t1998\t1998\t1998\t196\t197\tWYAAAA\tEQCAAA\tAAAAxx\n879\t1773\t1\t3\t9\t19\t79\t879\t879\t879\t879\t158\t159\tVHAAAA\tFQCAAA\tHHHHxx\n892\t1774\t0\t0\t2\t12\t92\t892\t892\t892\t892\t184\t185\tIIAAAA\tGQCAAA\tOOOOxx\n9468\t1775\t0\t0\t8\t8\t68\t468\t1468\t4468\t9468\t136\t137\tEAAAAA\tHQCAAA\tVVVVxx\n3797\t1776\t1\t1\t7\t17\t97\t797\t1797\t3797\t3797\t194\t195\tBQAAAA\tIQCAAA\tAAAAxx\n8379\t1777\t1\t3\t9\t19\t79\t379\t379\t3379\t8379\t158\t159\tHKAAAA\tJQCAAA\tHHHHxx\n2817\t1778\t1\t1\t7\t17\t17\t817\t817\t2817\t2817\t34\t35\tJEAAAA\tKQCAAA\tOOOOxx\n789\t1779\t1\t1\t9\t9\t89\t789\t789\t789\t789\t178\t179\tJEAAAA\tLQCAAA\tVVVVxx\n3871\t1780\t1\t3\t1\t11\t71\t871\t1871\t3871\t3871\t142\t143\tXSAAAA\tMQCAAA\tAAAAxx\n7931\t1781\t1\t3\t1\t11\t31\t931\t1931\t2931\t7931\t62\t63\tBTAAAA\tNQCAAA\tHHHHxx\n3636\t1782\t0\t0\t6\t16\t36\t636\t1636\t3636\t3636\t72\t73\tWJAAAA\tOQCAAA\tOOOOxx\n699\t1783\t1\t3\t9\t19\t99\t699\t699\t699\t699\t198\t199\tXAAAAA\tPQCAAA\tVVVVxx\n6850\t1784\t0\t2\t0\t10\t50\t850\t850\t1850\t6850\t100\t101\tMDAAAA\tQQCAAA\tAAAAxx\n6394\t1785\t0\t2\t4\t14\t94\t394\t394\t1394\t6394\t188\t189\tYLAAAA\tRQCAAA\tHHHHxx\n3475\t1786\t1\t3\t5\t15\t75\t475\t1475\t3475\t3475\t150\t151\tRDAAAA\tSQCAAA\tOOOOxx\n3026\t1787\t0\t2\t6\t6\t26\t26\t1026\t3026\t3026\t52\t53\tKMAAAA\tTQCAAA\tVVVVxx\n876\t1788\t0\t0\t6\t16\t76\t876\t876\t876\t876\t152\t153\tSHAAAA\tUQCAAA\tAAAAxx\n1992\t1789\t0\t0\t2\t12\t92\t992\t1992\t1992\t1992\t184\t185\tQYAAAA\tVQCAAA\tHHHHxx\n3079\t1790\t1\t3\t9\t19\t79\t79\t1079\t3079\t3079\t158\t159\tLOAAAA\tWQCAAA\tOOOOxx\n8128\t1791\t0\t0\t8\t8\t28\t128\t128\t3128\t8128\t56\t57\tQAAAAA\tXQCAAA\tVVVVxx\n8123\t1792\t1\t3\t3\t3\t23\t123\t123\t3123\t8123\t46\t47\tLAAAAA\tYQCAAA\tAAAAxx\n3285\t1793\t1\t1\t5\t5\t85\t285\t1285\t3285\t3285\t170\t171\tJWAAAA\tZQCAAA\tHHHHxx\n9315\t1794\t1\t3\t5\t15\t15\t315\t1315\t4315\t9315\t30\t31\tHUAAAA\tARCAAA\tOOOOxx\n9862\t1795\t0\t2\t2\t2\t62\t862\t1862\t4862\t9862\t124\t125\tIPAAAA\tBRCAAA\tVVVVxx\n2764\t1796\t0\t0\t4\t4\t64\t764\t764\t2764\t2764\t128\t129\tICAAAA\tCRCAAA\tAAAAxx\n3544\t1797\t0\t0\t4\t4\t44\t544\t1544\t3544\t3544\t88\t89\tIGAAAA\tDRCAAA\tHHHHxx\n7747\t1798\t1\t3\t7\t7\t47\t747\t1747\t2747\t7747\t94\t95\tZLAAAA\tERCAAA\tOOOOxx\n7725\t1799\t1\t1\t5\t5\t25\t725\t1725\t2725\t7725\t50\t51\tDLAAAA\tFRCAAA\tVVVVxx\n2449\t1800\t1\t1\t9\t9\t49\t449\t449\t2449\t2449\t98\t99\tFQAAAA\tGRCAAA\tAAAAxx\n8967\t1801\t1\t3\t7\t7\t67\t967\t967\t3967\t8967\t134\t135\tXGAAAA\tHRCAAA\tHHHHxx\n7371\t1802\t1\t3\t1\t11\t71\t371\t1371\t2371\t7371\t142\t143\tNXAAAA\tIRCAAA\tOOOOxx\n2158\t1803\t0\t2\t8\t18\t58\t158\t158\t2158\t2158\t116\t117\tAFAAAA\tJRCAAA\tVVVVxx\n5590\t1804\t0\t2\t0\t10\t90\t590\t1590\t590\t5590\t180\t181\tAHAAAA\tKRCAAA\tAAAAxx\n8072\t1805\t0\t0\t2\t12\t72\t72\t72\t3072\t8072\t144\t145\tMYAAAA\tLRCAAA\tHHHHxx\n1971\t1806\t1\t3\t1\t11\t71\t971\t1971\t1971\t1971\t142\t143\tVXAAAA\tMRCAAA\tOOOOxx\n772\t1807\t0\t0\t2\t12\t72\t772\t772\t772\t772\t144\t145\tSDAAAA\tNRCAAA\tVVVVxx\n3433\t1808\t1\t1\t3\t13\t33\t433\t1433\t3433\t3433\t66\t67\tBCAAAA\tORCAAA\tAAAAxx\n8419\t1809\t1\t3\t9\t19\t19\t419\t419\t3419\t8419\t38\t39\tVLAAAA\tPRCAAA\tHHHHxx\n1493\t1810\t1\t1\t3\t13\t93\t493\t1493\t1493\t1493\t186\t187\tLFAAAA\tQRCAAA\tOOOOxx\n2584\t1811\t0\t0\t4\t4\t84\t584\t584\t2584\t2584\t168\t169\tKVAAAA\tRRCAAA\tVVVVxx\n9502\t1812\t0\t2\t2\t2\t2\t502\t1502\t4502\t9502\t4\t5\tMBAAAA\tSRCAAA\tAAAAxx\n4673\t1813\t1\t1\t3\t13\t73\t673\t673\t4673\t4673\t146\t147\tTXAAAA\tTRCAAA\tHHHHxx\n7403\t1814\t1\t3\t3\t3\t3\t403\t1403\t2403\t7403\t6\t7\tTYAAAA\tURCAAA\tOOOOxx\n7103\t1815\t1\t3\t3\t3\t3\t103\t1103\t2103\t7103\t6\t7\tFNAAAA\tVRCAAA\tVVVVxx\n7026\t1816\t0\t2\t6\t6\t26\t26\t1026\t2026\t7026\t52\t53\tGKAAAA\tWRCAAA\tAAAAxx\n8574\t1817\t0\t2\t4\t14\t74\t574\t574\t3574\t8574\t148\t149\tURAAAA\tXRCAAA\tHHHHxx\n1366\t1818\t0\t2\t6\t6\t66\t366\t1366\t1366\t1366\t132\t133\tOAAAAA\tYRCAAA\tOOOOxx\n5787\t1819\t1\t3\t7\t7\t87\t787\t1787\t787\t5787\t174\t175\tPOAAAA\tZRCAAA\tVVVVxx\n2552\t1820\t0\t0\t2\t12\t52\t552\t552\t2552\t2552\t104\t105\tEUAAAA\tASCAAA\tAAAAxx\n4557\t1821\t1\t1\t7\t17\t57\t557\t557\t4557\t4557\t114\t115\tHTAAAA\tBSCAAA\tHHHHxx\n3237\t1822\t1\t1\t7\t17\t37\t237\t1237\t3237\t3237\t74\t75\tNUAAAA\tCSCAAA\tOOOOxx\n6901\t1823\t1\t1\t1\t1\t1\t901\t901\t1901\t6901\t2\t3\tLFAAAA\tDSCAAA\tVVVVxx\n7708\t1824\t0\t0\t8\t8\t8\t708\t1708\t2708\t7708\t16\t17\tMKAAAA\tESCAAA\tAAAAxx\n2011\t1825\t1\t3\t1\t11\t11\t11\t11\t2011\t2011\t22\t23\tJZAAAA\tFSCAAA\tHHHHxx\n9455\t1826\t1\t3\t5\t15\t55\t455\t1455\t4455\t9455\t110\t111\tRZAAAA\tGSCAAA\tOOOOxx\n5228\t1827\t0\t0\t8\t8\t28\t228\t1228\t228\t5228\t56\t57\tCTAAAA\tHSCAAA\tVVVVxx\n4043\t1828\t1\t3\t3\t3\t43\t43\t43\t4043\t4043\t86\t87\tNZAAAA\tISCAAA\tAAAAxx\n8242\t1829\t0\t2\t2\t2\t42\t242\t242\t3242\t8242\t84\t85\tAFAAAA\tJSCAAA\tHHHHxx\n6351\t1830\t1\t3\t1\t11\t51\t351\t351\t1351\t6351\t102\t103\tHKAAAA\tKSCAAA\tOOOOxx\n5899\t1831\t1\t3\t9\t19\t99\t899\t1899\t899\t5899\t198\t199\tXSAAAA\tLSCAAA\tVVVVxx\n4849\t1832\t1\t1\t9\t9\t49\t849\t849\t4849\t4849\t98\t99\tNEAAAA\tMSCAAA\tAAAAxx\n9583\t1833\t1\t3\t3\t3\t83\t583\t1583\t4583\t9583\t166\t167\tPEAAAA\tNSCAAA\tHHHHxx\n4994\t1834\t0\t2\t4\t14\t94\t994\t994\t4994\t4994\t188\t189\tCKAAAA\tOSCAAA\tOOOOxx\n9787\t1835\t1\t3\t7\t7\t87\t787\t1787\t4787\t9787\t174\t175\tLMAAAA\tPSCAAA\tVVVVxx\n243\t1836\t1\t3\t3\t3\t43\t243\t243\t243\t243\t86\t87\tJJAAAA\tQSCAAA\tAAAAxx\n3931\t1837\t1\t3\t1\t11\t31\t931\t1931\t3931\t3931\t62\t63\tFVAAAA\tRSCAAA\tHHHHxx\n5945\t1838\t1\t1\t5\t5\t45\t945\t1945\t945\t5945\t90\t91\tRUAAAA\tSSCAAA\tOOOOxx\n1325\t1839\t1\t1\t5\t5\t25\t325\t1325\t1325\t1325\t50\t51\tZYAAAA\tTSCAAA\tVVVVxx\n4142\t1840\t0\t2\t2\t2\t42\t142\t142\t4142\t4142\t84\t85\tIDAAAA\tUSCAAA\tAAAAxx\n1963\t1841\t1\t3\t3\t3\t63\t963\t1963\t1963\t1963\t126\t127\tNXAAAA\tVSCAAA\tHHHHxx\n7041\t1842\t1\t1\t1\t1\t41\t41\t1041\t2041\t7041\t82\t83\tVKAAAA\tWSCAAA\tOOOOxx\n3074\t1843\t0\t2\t4\t14\t74\t74\t1074\t3074\t3074\t148\t149\tGOAAAA\tXSCAAA\tVVVVxx\n3290\t1844\t0\t2\t0\t10\t90\t290\t1290\t3290\t3290\t180\t181\tOWAAAA\tYSCAAA\tAAAAxx\n4146\t1845\t0\t2\t6\t6\t46\t146\t146\t4146\t4146\t92\t93\tMDAAAA\tZSCAAA\tHHHHxx\n3832\t1846\t0\t0\t2\t12\t32\t832\t1832\t3832\t3832\t64\t65\tKRAAAA\tATCAAA\tOOOOxx\n2217\t1847\t1\t1\t7\t17\t17\t217\t217\t2217\t2217\t34\t35\tHHAAAA\tBTCAAA\tVVVVxx\n635\t1848\t1\t3\t5\t15\t35\t635\t635\t635\t635\t70\t71\tLYAAAA\tCTCAAA\tAAAAxx\n6967\t1849\t1\t3\t7\t7\t67\t967\t967\t1967\t6967\t134\t135\tZHAAAA\tDTCAAA\tHHHHxx\n3522\t1850\t0\t2\t2\t2\t22\t522\t1522\t3522\t3522\t44\t45\tMFAAAA\tETCAAA\tOOOOxx\n2471\t1851\t1\t3\t1\t11\t71\t471\t471\t2471\t2471\t142\t143\tBRAAAA\tFTCAAA\tVVVVxx\n4236\t1852\t0\t0\t6\t16\t36\t236\t236\t4236\t4236\t72\t73\tYGAAAA\tGTCAAA\tAAAAxx\n853\t1853\t1\t1\t3\t13\t53\t853\t853\t853\t853\t106\t107\tVGAAAA\tHTCAAA\tHHHHxx\n3754\t1854\t0\t2\t4\t14\t54\t754\t1754\t3754\t3754\t108\t109\tKOAAAA\tITCAAA\tOOOOxx\n796\t1855\t0\t0\t6\t16\t96\t796\t796\t796\t796\t192\t193\tQEAAAA\tJTCAAA\tVVVVxx\n4640\t1856\t0\t0\t0\t0\t40\t640\t640\t4640\t4640\t80\t81\tMWAAAA\tKTCAAA\tAAAAxx\n9496\t1857\t0\t0\t6\t16\t96\t496\t1496\t4496\t9496\t192\t193\tGBAAAA\tLTCAAA\tHHHHxx\n6873\t1858\t1\t1\t3\t13\t73\t873\t873\t1873\t6873\t146\t147\tJEAAAA\tMTCAAA\tOOOOxx\n4632\t1859\t0\t0\t2\t12\t32\t632\t632\t4632\t4632\t64\t65\tEWAAAA\tNTCAAA\tVVVVxx\n5758\t1860\t0\t2\t8\t18\t58\t758\t1758\t758\t5758\t116\t117\tMNAAAA\tOTCAAA\tAAAAxx\n6514\t1861\t0\t2\t4\t14\t14\t514\t514\t1514\t6514\t28\t29\tOQAAAA\tPTCAAA\tHHHHxx\n9510\t1862\t0\t2\t0\t10\t10\t510\t1510\t4510\t9510\t20\t21\tUBAAAA\tQTCAAA\tOOOOxx\n8411\t1863\t1\t3\t1\t11\t11\t411\t411\t3411\t8411\t22\t23\tNLAAAA\tRTCAAA\tVVVVxx\n7762\t1864\t0\t2\t2\t2\t62\t762\t1762\t2762\t7762\t124\t125\tOMAAAA\tSTCAAA\tAAAAxx\n2225\t1865\t1\t1\t5\t5\t25\t225\t225\t2225\t2225\t50\t51\tPHAAAA\tTTCAAA\tHHHHxx\n4373\t1866\t1\t1\t3\t13\t73\t373\t373\t4373\t4373\t146\t147\tFMAAAA\tUTCAAA\tOOOOxx\n7326\t1867\t0\t2\t6\t6\t26\t326\t1326\t2326\t7326\t52\t53\tUVAAAA\tVTCAAA\tVVVVxx\n8651\t1868\t1\t3\t1\t11\t51\t651\t651\t3651\t8651\t102\t103\tTUAAAA\tWTCAAA\tAAAAxx\n9825\t1869\t1\t1\t5\t5\t25\t825\t1825\t4825\t9825\t50\t51\tXNAAAA\tXTCAAA\tHHHHxx\n2988\t1870\t0\t0\t8\t8\t88\t988\t988\t2988\t2988\t176\t177\tYKAAAA\tYTCAAA\tOOOOxx\n8138\t1871\t0\t2\t8\t18\t38\t138\t138\t3138\t8138\t76\t77\tABAAAA\tZTCAAA\tVVVVxx\n7792\t1872\t0\t0\t2\t12\t92\t792\t1792\t2792\t7792\t184\t185\tSNAAAA\tAUCAAA\tAAAAxx\n1232\t1873\t0\t0\t2\t12\t32\t232\t1232\t1232\t1232\t64\t65\tKVAAAA\tBUCAAA\tHHHHxx\n8221\t1874\t1\t1\t1\t1\t21\t221\t221\t3221\t8221\t42\t43\tFEAAAA\tCUCAAA\tOOOOxx\n4044\t1875\t0\t0\t4\t4\t44\t44\t44\t4044\t4044\t88\t89\tOZAAAA\tDUCAAA\tVVVVxx\n1204\t1876\t0\t0\t4\t4\t4\t204\t1204\t1204\t1204\t8\t9\tIUAAAA\tEUCAAA\tAAAAxx\n5145\t1877\t1\t1\t5\t5\t45\t145\t1145\t145\t5145\t90\t91\tXPAAAA\tFUCAAA\tHHHHxx\n7791\t1878\t1\t3\t1\t11\t91\t791\t1791\t2791\t7791\t182\t183\tRNAAAA\tGUCAAA\tOOOOxx\n8270\t1879\t0\t2\t0\t10\t70\t270\t270\t3270\t8270\t140\t141\tCGAAAA\tHUCAAA\tVVVVxx\n9427\t1880\t1\t3\t7\t7\t27\t427\t1427\t4427\t9427\t54\t55\tPYAAAA\tIUCAAA\tAAAAxx\n2152\t1881\t0\t0\t2\t12\t52\t152\t152\t2152\t2152\t104\t105\tUEAAAA\tJUCAAA\tHHHHxx\n7790\t1882\t0\t2\t0\t10\t90\t790\t1790\t2790\t7790\t180\t181\tQNAAAA\tKUCAAA\tOOOOxx\n5301\t1883\t1\t1\t1\t1\t1\t301\t1301\t301\t5301\t2\t3\tXVAAAA\tLUCAAA\tVVVVxx\n626\t1884\t0\t2\t6\t6\t26\t626\t626\t626\t626\t52\t53\tCYAAAA\tMUCAAA\tAAAAxx\n260\t1885\t0\t0\t0\t0\t60\t260\t260\t260\t260\t120\t121\tAKAAAA\tNUCAAA\tHHHHxx\n4369\t1886\t1\t1\t9\t9\t69\t369\t369\t4369\t4369\t138\t139\tBMAAAA\tOUCAAA\tOOOOxx\n5457\t1887\t1\t1\t7\t17\t57\t457\t1457\t457\t5457\t114\t115\tXBAAAA\tPUCAAA\tVVVVxx\n3468\t1888\t0\t0\t8\t8\t68\t468\t1468\t3468\t3468\t136\t137\tKDAAAA\tQUCAAA\tAAAAxx\n2257\t1889\t1\t1\t7\t17\t57\t257\t257\t2257\t2257\t114\t115\tVIAAAA\tRUCAAA\tHHHHxx\n9318\t1890\t0\t2\t8\t18\t18\t318\t1318\t4318\t9318\t36\t37\tKUAAAA\tSUCAAA\tOOOOxx\n8762\t1891\t0\t2\t2\t2\t62\t762\t762\t3762\t8762\t124\t125\tAZAAAA\tTUCAAA\tVVVVxx\n9153\t1892\t1\t1\t3\t13\t53\t153\t1153\t4153\t9153\t106\t107\tBOAAAA\tUUCAAA\tAAAAxx\n9220\t1893\t0\t0\t0\t0\t20\t220\t1220\t4220\t9220\t40\t41\tQQAAAA\tVUCAAA\tHHHHxx\n8003\t1894\t1\t3\t3\t3\t3\t3\t3\t3003\t8003\t6\t7\tVVAAAA\tWUCAAA\tOOOOxx\n7257\t1895\t1\t1\t7\t17\t57\t257\t1257\t2257\t7257\t114\t115\tDTAAAA\tXUCAAA\tVVVVxx\n3930\t1896\t0\t2\t0\t10\t30\t930\t1930\t3930\t3930\t60\t61\tEVAAAA\tYUCAAA\tAAAAxx\n2976\t1897\t0\t0\t6\t16\t76\t976\t976\t2976\t2976\t152\t153\tMKAAAA\tZUCAAA\tHHHHxx\n2531\t1898\t1\t3\t1\t11\t31\t531\t531\t2531\t2531\t62\t63\tJTAAAA\tAVCAAA\tOOOOxx\n2250\t1899\t0\t2\t0\t10\t50\t250\t250\t2250\t2250\t100\t101\tOIAAAA\tBVCAAA\tVVVVxx\n8549\t1900\t1\t1\t9\t9\t49\t549\t549\t3549\t8549\t98\t99\tVQAAAA\tCVCAAA\tAAAAxx\n7197\t1901\t1\t1\t7\t17\t97\t197\t1197\t2197\t7197\t194\t195\tVQAAAA\tDVCAAA\tHHHHxx\n5916\t1902\t0\t0\t6\t16\t16\t916\t1916\t916\t5916\t32\t33\tOTAAAA\tEVCAAA\tOOOOxx\n5287\t1903\t1\t3\t7\t7\t87\t287\t1287\t287\t5287\t174\t175\tJVAAAA\tFVCAAA\tVVVVxx\n9095\t1904\t1\t3\t5\t15\t95\t95\t1095\t4095\t9095\t190\t191\tVLAAAA\tGVCAAA\tAAAAxx\n7137\t1905\t1\t1\t7\t17\t37\t137\t1137\t2137\t7137\t74\t75\tNOAAAA\tHVCAAA\tHHHHxx\n7902\t1906\t0\t2\t2\t2\t2\t902\t1902\t2902\t7902\t4\t5\tYRAAAA\tIVCAAA\tOOOOxx\n7598\t1907\t0\t2\t8\t18\t98\t598\t1598\t2598\t7598\t196\t197\tGGAAAA\tJVCAAA\tVVVVxx\n5652\t1908\t0\t0\t2\t12\t52\t652\t1652\t652\t5652\t104\t105\tKJAAAA\tKVCAAA\tAAAAxx\n2017\t1909\t1\t1\t7\t17\t17\t17\t17\t2017\t2017\t34\t35\tPZAAAA\tLVCAAA\tHHHHxx\n7255\t1910\t1\t3\t5\t15\t55\t255\t1255\t2255\t7255\t110\t111\tBTAAAA\tMVCAAA\tOOOOxx\n7999\t1911\t1\t3\t9\t19\t99\t999\t1999\t2999\t7999\t198\t199\tRVAAAA\tNVCAAA\tVVVVxx\n5388\t1912\t0\t0\t8\t8\t88\t388\t1388\t388\t5388\t176\t177\tGZAAAA\tOVCAAA\tAAAAxx\n8754\t1913\t0\t2\t4\t14\t54\t754\t754\t3754\t8754\t108\t109\tSYAAAA\tPVCAAA\tHHHHxx\n5415\t1914\t1\t3\t5\t15\t15\t415\t1415\t415\t5415\t30\t31\tHAAAAA\tQVCAAA\tOOOOxx\n8861\t1915\t1\t1\t1\t1\t61\t861\t861\t3861\t8861\t122\t123\tVCAAAA\tRVCAAA\tVVVVxx\n2874\t1916\t0\t2\t4\t14\t74\t874\t874\t2874\t2874\t148\t149\tOGAAAA\tSVCAAA\tAAAAxx\n9910\t1917\t0\t2\t0\t10\t10\t910\t1910\t4910\t9910\t20\t21\tERAAAA\tTVCAAA\tHHHHxx\n5178\t1918\t0\t2\t8\t18\t78\t178\t1178\t178\t5178\t156\t157\tERAAAA\tUVCAAA\tOOOOxx\n5698\t1919\t0\t2\t8\t18\t98\t698\t1698\t698\t5698\t196\t197\tELAAAA\tVVCAAA\tVVVVxx\n8500\t1920\t0\t0\t0\t0\t0\t500\t500\t3500\t8500\t0\t1\tYOAAAA\tWVCAAA\tAAAAxx\n1814\t1921\t0\t2\t4\t14\t14\t814\t1814\t1814\t1814\t28\t29\tURAAAA\tXVCAAA\tHHHHxx\n4968\t1922\t0\t0\t8\t8\t68\t968\t968\t4968\t4968\t136\t137\tCJAAAA\tYVCAAA\tOOOOxx\n2642\t1923\t0\t2\t2\t2\t42\t642\t642\t2642\t2642\t84\t85\tQXAAAA\tZVCAAA\tVVVVxx\n1578\t1924\t0\t2\t8\t18\t78\t578\t1578\t1578\t1578\t156\t157\tSIAAAA\tAWCAAA\tAAAAxx\n4774\t1925\t0\t2\t4\t14\t74\t774\t774\t4774\t4774\t148\t149\tQBAAAA\tBWCAAA\tHHHHxx\n7062\t1926\t0\t2\t2\t2\t62\t62\t1062\t2062\t7062\t124\t125\tQLAAAA\tCWCAAA\tOOOOxx\n5381\t1927\t1\t1\t1\t1\t81\t381\t1381\t381\t5381\t162\t163\tZYAAAA\tDWCAAA\tVVVVxx\n7985\t1928\t1\t1\t5\t5\t85\t985\t1985\t2985\t7985\t170\t171\tDVAAAA\tEWCAAA\tAAAAxx\n3850\t1929\t0\t2\t0\t10\t50\t850\t1850\t3850\t3850\t100\t101\tCSAAAA\tFWCAAA\tHHHHxx\n5624\t1930\t0\t0\t4\t4\t24\t624\t1624\t624\t5624\t48\t49\tIIAAAA\tGWCAAA\tOOOOxx\n8948\t1931\t0\t0\t8\t8\t48\t948\t948\t3948\t8948\t96\t97\tEGAAAA\tHWCAAA\tVVVVxx\n995\t1932\t1\t3\t5\t15\t95\t995\t995\t995\t995\t190\t191\tHMAAAA\tIWCAAA\tAAAAxx\n5058\t1933\t0\t2\t8\t18\t58\t58\t1058\t58\t5058\t116\t117\tOMAAAA\tJWCAAA\tHHHHxx\n9670\t1934\t0\t2\t0\t10\t70\t670\t1670\t4670\t9670\t140\t141\tYHAAAA\tKWCAAA\tOOOOxx\n3115\t1935\t1\t3\t5\t15\t15\t115\t1115\t3115\t3115\t30\t31\tVPAAAA\tLWCAAA\tVVVVxx\n4935\t1936\t1\t3\t5\t15\t35\t935\t935\t4935\t4935\t70\t71\tVHAAAA\tMWCAAA\tAAAAxx\n4735\t1937\t1\t3\t5\t15\t35\t735\t735\t4735\t4735\t70\t71\tDAAAAA\tNWCAAA\tHHHHxx\n1348\t1938\t0\t0\t8\t8\t48\t348\t1348\t1348\t1348\t96\t97\tWZAAAA\tOWCAAA\tOOOOxx\n2380\t1939\t0\t0\t0\t0\t80\t380\t380\t2380\t2380\t160\t161\tONAAAA\tPWCAAA\tVVVVxx\n4246\t1940\t0\t2\t6\t6\t46\t246\t246\t4246\t4246\t92\t93\tIHAAAA\tQWCAAA\tAAAAxx\n522\t1941\t0\t2\t2\t2\t22\t522\t522\t522\t522\t44\t45\tCUAAAA\tRWCAAA\tHHHHxx\n1701\t1942\t1\t1\t1\t1\t1\t701\t1701\t1701\t1701\t2\t3\tLNAAAA\tSWCAAA\tOOOOxx\n9709\t1943\t1\t1\t9\t9\t9\t709\t1709\t4709\t9709\t18\t19\tLJAAAA\tTWCAAA\tVVVVxx\n8829\t1944\t1\t1\t9\t9\t29\t829\t829\t3829\t8829\t58\t59\tPBAAAA\tUWCAAA\tAAAAxx\n7936\t1945\t0\t0\t6\t16\t36\t936\t1936\t2936\t7936\t72\t73\tGTAAAA\tVWCAAA\tHHHHxx\n8474\t1946\t0\t2\t4\t14\t74\t474\t474\t3474\t8474\t148\t149\tYNAAAA\tWWCAAA\tOOOOxx\n4676\t1947\t0\t0\t6\t16\t76\t676\t676\t4676\t4676\t152\t153\tWXAAAA\tXWCAAA\tVVVVxx\n6303\t1948\t1\t3\t3\t3\t3\t303\t303\t1303\t6303\t6\t7\tLIAAAA\tYWCAAA\tAAAAxx\n3485\t1949\t1\t1\t5\t5\t85\t485\t1485\t3485\t3485\t170\t171\tBEAAAA\tZWCAAA\tHHHHxx\n2695\t1950\t1\t3\t5\t15\t95\t695\t695\t2695\t2695\t190\t191\tRZAAAA\tAXCAAA\tOOOOxx\n8830\t1951\t0\t2\t0\t10\t30\t830\t830\t3830\t8830\t60\t61\tQBAAAA\tBXCAAA\tVVVVxx\n898\t1952\t0\t2\t8\t18\t98\t898\t898\t898\t898\t196\t197\tOIAAAA\tCXCAAA\tAAAAxx\n7268\t1953\t0\t0\t8\t8\t68\t268\t1268\t2268\t7268\t136\t137\tOTAAAA\tDXCAAA\tHHHHxx\n6568\t1954\t0\t0\t8\t8\t68\t568\t568\t1568\t6568\t136\t137\tQSAAAA\tEXCAAA\tOOOOxx\n9724\t1955\t0\t0\t4\t4\t24\t724\t1724\t4724\t9724\t48\t49\tAKAAAA\tFXCAAA\tVVVVxx\n3329\t1956\t1\t1\t9\t9\t29\t329\t1329\t3329\t3329\t58\t59\tBYAAAA\tGXCAAA\tAAAAxx\n9860\t1957\t0\t0\t0\t0\t60\t860\t1860\t4860\t9860\t120\t121\tGPAAAA\tHXCAAA\tHHHHxx\n6833\t1958\t1\t1\t3\t13\t33\t833\t833\t1833\t6833\t66\t67\tVCAAAA\tIXCAAA\tOOOOxx\n5956\t1959\t0\t0\t6\t16\t56\t956\t1956\t956\t5956\t112\t113\tCVAAAA\tJXCAAA\tVVVVxx\n3963\t1960\t1\t3\t3\t3\t63\t963\t1963\t3963\t3963\t126\t127\tLWAAAA\tKXCAAA\tAAAAxx\n883\t1961\t1\t3\t3\t3\t83\t883\t883\t883\t883\t166\t167\tZHAAAA\tLXCAAA\tHHHHxx\n2761\t1962\t1\t1\t1\t1\t61\t761\t761\t2761\t2761\t122\t123\tFCAAAA\tMXCAAA\tOOOOxx\n4644\t1963\t0\t0\t4\t4\t44\t644\t644\t4644\t4644\t88\t89\tQWAAAA\tNXCAAA\tVVVVxx\n1358\t1964\t0\t2\t8\t18\t58\t358\t1358\t1358\t1358\t116\t117\tGAAAAA\tOXCAAA\tAAAAxx\n2049\t1965\t1\t1\t9\t9\t49\t49\t49\t2049\t2049\t98\t99\tVAAAAA\tPXCAAA\tHHHHxx\n2193\t1966\t1\t1\t3\t13\t93\t193\t193\t2193\t2193\t186\t187\tJGAAAA\tQXCAAA\tOOOOxx\n9435\t1967\t1\t3\t5\t15\t35\t435\t1435\t4435\t9435\t70\t71\tXYAAAA\tRXCAAA\tVVVVxx\n5890\t1968\t0\t2\t0\t10\t90\t890\t1890\t890\t5890\t180\t181\tOSAAAA\tSXCAAA\tAAAAxx\n8149\t1969\t1\t1\t9\t9\t49\t149\t149\t3149\t8149\t98\t99\tLBAAAA\tTXCAAA\tHHHHxx\n423\t1970\t1\t3\t3\t3\t23\t423\t423\t423\t423\t46\t47\tHQAAAA\tUXCAAA\tOOOOxx\n7980\t1971\t0\t0\t0\t0\t80\t980\t1980\t2980\t7980\t160\t161\tYUAAAA\tVXCAAA\tVVVVxx\n9019\t1972\t1\t3\t9\t19\t19\t19\t1019\t4019\t9019\t38\t39\tXIAAAA\tWXCAAA\tAAAAxx\n1647\t1973\t1\t3\t7\t7\t47\t647\t1647\t1647\t1647\t94\t95\tJLAAAA\tXXCAAA\tHHHHxx\n9495\t1974\t1\t3\t5\t15\t95\t495\t1495\t4495\t9495\t190\t191\tFBAAAA\tYXCAAA\tOOOOxx\n3904\t1975\t0\t0\t4\t4\t4\t904\t1904\t3904\t3904\t8\t9\tEUAAAA\tZXCAAA\tVVVVxx\n5838\t1976\t0\t2\t8\t18\t38\t838\t1838\t838\t5838\t76\t77\tOQAAAA\tAYCAAA\tAAAAxx\n3866\t1977\t0\t2\t6\t6\t66\t866\t1866\t3866\t3866\t132\t133\tSSAAAA\tBYCAAA\tHHHHxx\n3093\t1978\t1\t1\t3\t13\t93\t93\t1093\t3093\t3093\t186\t187\tZOAAAA\tCYCAAA\tOOOOxx\n9666\t1979\t0\t2\t6\t6\t66\t666\t1666\t4666\t9666\t132\t133\tUHAAAA\tDYCAAA\tVVVVxx\n1246\t1980\t0\t2\t6\t6\t46\t246\t1246\t1246\t1246\t92\t93\tYVAAAA\tEYCAAA\tAAAAxx\n9759\t1981\t1\t3\t9\t19\t59\t759\t1759\t4759\t9759\t118\t119\tJLAAAA\tFYCAAA\tHHHHxx\n7174\t1982\t0\t2\t4\t14\t74\t174\t1174\t2174\t7174\t148\t149\tYPAAAA\tGYCAAA\tOOOOxx\n7678\t1983\t0\t2\t8\t18\t78\t678\t1678\t2678\t7678\t156\t157\tIJAAAA\tHYCAAA\tVVVVxx\n3004\t1984\t0\t0\t4\t4\t4\t4\t1004\t3004\t3004\t8\t9\tOLAAAA\tIYCAAA\tAAAAxx\n5607\t1985\t1\t3\t7\t7\t7\t607\t1607\t607\t5607\t14\t15\tRHAAAA\tJYCAAA\tHHHHxx\n8510\t1986\t0\t2\t0\t10\t10\t510\t510\t3510\t8510\t20\t21\tIPAAAA\tKYCAAA\tOOOOxx\n1483\t1987\t1\t3\t3\t3\t83\t483\t1483\t1483\t1483\t166\t167\tBFAAAA\tLYCAAA\tVVVVxx\n2915\t1988\t1\t3\t5\t15\t15\t915\t915\t2915\t2915\t30\t31\tDIAAAA\tMYCAAA\tAAAAxx\n1548\t1989\t0\t0\t8\t8\t48\t548\t1548\t1548\t1548\t96\t97\tOHAAAA\tNYCAAA\tHHHHxx\n5767\t1990\t1\t3\t7\t7\t67\t767\t1767\t767\t5767\t134\t135\tVNAAAA\tOYCAAA\tOOOOxx\n3214\t1991\t0\t2\t4\t14\t14\t214\t1214\t3214\t3214\t28\t29\tQTAAAA\tPYCAAA\tVVVVxx\n8663\t1992\t1\t3\t3\t3\t63\t663\t663\t3663\t8663\t126\t127\tFVAAAA\tQYCAAA\tAAAAxx\n5425\t1993\t1\t1\t5\t5\t25\t425\t1425\t425\t5425\t50\t51\tRAAAAA\tRYCAAA\tHHHHxx\n8530\t1994\t0\t2\t0\t10\t30\t530\t530\t3530\t8530\t60\t61\tCQAAAA\tSYCAAA\tOOOOxx\n821\t1995\t1\t1\t1\t1\t21\t821\t821\t821\t821\t42\t43\tPFAAAA\tTYCAAA\tVVVVxx\n8816\t1996\t0\t0\t6\t16\t16\t816\t816\t3816\t8816\t32\t33\tCBAAAA\tUYCAAA\tAAAAxx\n9367\t1997\t1\t3\t7\t7\t67\t367\t1367\t4367\t9367\t134\t135\tHWAAAA\tVYCAAA\tHHHHxx\n4138\t1998\t0\t2\t8\t18\t38\t138\t138\t4138\t4138\t76\t77\tEDAAAA\tWYCAAA\tOOOOxx\n94\t1999\t0\t2\t4\t14\t94\t94\t94\t94\t94\t188\t189\tQDAAAA\tXYCAAA\tVVVVxx\n1858\t2000\t0\t2\t8\t18\t58\t858\t1858\t1858\t1858\t116\t117\tMTAAAA\tYYCAAA\tAAAAxx\n5513\t2001\t1\t1\t3\t13\t13\t513\t1513\t513\t5513\t26\t27\tBEAAAA\tZYCAAA\tHHHHxx\n9620\t2002\t0\t0\t0\t0\t20\t620\t1620\t4620\t9620\t40\t41\tAGAAAA\tAZCAAA\tOOOOxx\n4770\t2003\t0\t2\t0\t10\t70\t770\t770\t4770\t4770\t140\t141\tMBAAAA\tBZCAAA\tVVVVxx\n5193\t2004\t1\t1\t3\t13\t93\t193\t1193\t193\t5193\t186\t187\tTRAAAA\tCZCAAA\tAAAAxx\n198\t2005\t0\t2\t8\t18\t98\t198\t198\t198\t198\t196\t197\tQHAAAA\tDZCAAA\tHHHHxx\n417\t2006\t1\t1\t7\t17\t17\t417\t417\t417\t417\t34\t35\tBQAAAA\tEZCAAA\tOOOOxx\n173\t2007\t1\t1\t3\t13\t73\t173\t173\t173\t173\t146\t147\tRGAAAA\tFZCAAA\tVVVVxx\n6248\t2008\t0\t0\t8\t8\t48\t248\t248\t1248\t6248\t96\t97\tIGAAAA\tGZCAAA\tAAAAxx\n302\t2009\t0\t2\t2\t2\t2\t302\t302\t302\t302\t4\t5\tQLAAAA\tHZCAAA\tHHHHxx\n8983\t2010\t1\t3\t3\t3\t83\t983\t983\t3983\t8983\t166\t167\tNHAAAA\tIZCAAA\tOOOOxx\n4840\t2011\t0\t0\t0\t0\t40\t840\t840\t4840\t4840\t80\t81\tEEAAAA\tJZCAAA\tVVVVxx\n2876\t2012\t0\t0\t6\t16\t76\t876\t876\t2876\t2876\t152\t153\tQGAAAA\tKZCAAA\tAAAAxx\n5841\t2013\t1\t1\t1\t1\t41\t841\t1841\t841\t5841\t82\t83\tRQAAAA\tLZCAAA\tHHHHxx\n2766\t2014\t0\t2\t6\t6\t66\t766\t766\t2766\t2766\t132\t133\tKCAAAA\tMZCAAA\tOOOOxx\n9482\t2015\t0\t2\t2\t2\t82\t482\t1482\t4482\t9482\t164\t165\tSAAAAA\tNZCAAA\tVVVVxx\n5335\t2016\t1\t3\t5\t15\t35\t335\t1335\t335\t5335\t70\t71\tFXAAAA\tOZCAAA\tAAAAxx\n1502\t2017\t0\t2\t2\t2\t2\t502\t1502\t1502\t1502\t4\t5\tUFAAAA\tPZCAAA\tHHHHxx\n9291\t2018\t1\t3\t1\t11\t91\t291\t1291\t4291\t9291\t182\t183\tJTAAAA\tQZCAAA\tOOOOxx\n8655\t2019\t1\t3\t5\t15\t55\t655\t655\t3655\t8655\t110\t111\tXUAAAA\tRZCAAA\tVVVVxx\n1687\t2020\t1\t3\t7\t7\t87\t687\t1687\t1687\t1687\t174\t175\tXMAAAA\tSZCAAA\tAAAAxx\n8171\t2021\t1\t3\t1\t11\t71\t171\t171\t3171\t8171\t142\t143\tHCAAAA\tTZCAAA\tHHHHxx\n5699\t2022\t1\t3\t9\t19\t99\t699\t1699\t699\t5699\t198\t199\tFLAAAA\tUZCAAA\tOOOOxx\n1462\t2023\t0\t2\t2\t2\t62\t462\t1462\t1462\t1462\t124\t125\tGEAAAA\tVZCAAA\tVVVVxx\n608\t2024\t0\t0\t8\t8\t8\t608\t608\t608\t608\t16\t17\tKXAAAA\tWZCAAA\tAAAAxx\n6860\t2025\t0\t0\t0\t0\t60\t860\t860\t1860\t6860\t120\t121\tWDAAAA\tXZCAAA\tHHHHxx\n6063\t2026\t1\t3\t3\t3\t63\t63\t63\t1063\t6063\t126\t127\tFZAAAA\tYZCAAA\tOOOOxx\n1422\t2027\t0\t2\t2\t2\t22\t422\t1422\t1422\t1422\t44\t45\tSCAAAA\tZZCAAA\tVVVVxx\n1932\t2028\t0\t0\t2\t12\t32\t932\t1932\t1932\t1932\t64\t65\tIWAAAA\tAADAAA\tAAAAxx\n5065\t2029\t1\t1\t5\t5\t65\t65\t1065\t65\t5065\t130\t131\tVMAAAA\tBADAAA\tHHHHxx\n432\t2030\t0\t0\t2\t12\t32\t432\t432\t432\t432\t64\t65\tQQAAAA\tCADAAA\tOOOOxx\n4680\t2031\t0\t0\t0\t0\t80\t680\t680\t4680\t4680\t160\t161\tAYAAAA\tDADAAA\tVVVVxx\n8172\t2032\t0\t0\t2\t12\t72\t172\t172\t3172\t8172\t144\t145\tICAAAA\tEADAAA\tAAAAxx\n8668\t2033\t0\t0\t8\t8\t68\t668\t668\t3668\t8668\t136\t137\tKVAAAA\tFADAAA\tHHHHxx\n256\t2034\t0\t0\t6\t16\t56\t256\t256\t256\t256\t112\t113\tWJAAAA\tGADAAA\tOOOOxx\n2500\t2035\t0\t0\t0\t0\t0\t500\t500\t2500\t2500\t0\t1\tESAAAA\tHADAAA\tVVVVxx\n274\t2036\t0\t2\t4\t14\t74\t274\t274\t274\t274\t148\t149\tOKAAAA\tIADAAA\tAAAAxx\n5907\t2037\t1\t3\t7\t7\t7\t907\t1907\t907\t5907\t14\t15\tFTAAAA\tJADAAA\tHHHHxx\n8587\t2038\t1\t3\t7\t7\t87\t587\t587\t3587\t8587\t174\t175\tHSAAAA\tKADAAA\tOOOOxx\n9942\t2039\t0\t2\t2\t2\t42\t942\t1942\t4942\t9942\t84\t85\tKSAAAA\tLADAAA\tVVVVxx\n116\t2040\t0\t0\t6\t16\t16\t116\t116\t116\t116\t32\t33\tMEAAAA\tMADAAA\tAAAAxx\n7134\t2041\t0\t2\t4\t14\t34\t134\t1134\t2134\t7134\t68\t69\tKOAAAA\tNADAAA\tHHHHxx\n9002\t2042\t0\t2\t2\t2\t2\t2\t1002\t4002\t9002\t4\t5\tGIAAAA\tOADAAA\tOOOOxx\n1209\t2043\t1\t1\t9\t9\t9\t209\t1209\t1209\t1209\t18\t19\tNUAAAA\tPADAAA\tVVVVxx\n9983\t2044\t1\t3\t3\t3\t83\t983\t1983\t4983\t9983\t166\t167\tZTAAAA\tQADAAA\tAAAAxx\n1761\t2045\t1\t1\t1\t1\t61\t761\t1761\t1761\t1761\t122\t123\tTPAAAA\tRADAAA\tHHHHxx\n7723\t2046\t1\t3\t3\t3\t23\t723\t1723\t2723\t7723\t46\t47\tBLAAAA\tSADAAA\tOOOOxx\n6518\t2047\t0\t2\t8\t18\t18\t518\t518\t1518\t6518\t36\t37\tSQAAAA\tTADAAA\tVVVVxx\n1372\t2048\t0\t0\t2\t12\t72\t372\t1372\t1372\t1372\t144\t145\tUAAAAA\tUADAAA\tAAAAxx\n3587\t2049\t1\t3\t7\t7\t87\t587\t1587\t3587\t3587\t174\t175\tZHAAAA\tVADAAA\tHHHHxx\n5323\t2050\t1\t3\t3\t3\t23\t323\t1323\t323\t5323\t46\t47\tTWAAAA\tWADAAA\tOOOOxx\n5902\t2051\t0\t2\t2\t2\t2\t902\t1902\t902\t5902\t4\t5\tATAAAA\tXADAAA\tVVVVxx\n3749\t2052\t1\t1\t9\t9\t49\t749\t1749\t3749\t3749\t98\t99\tFOAAAA\tYADAAA\tAAAAxx\n5965\t2053\t1\t1\t5\t5\t65\t965\t1965\t965\t5965\t130\t131\tLVAAAA\tZADAAA\tHHHHxx\n663\t2054\t1\t3\t3\t3\t63\t663\t663\t663\t663\t126\t127\tNZAAAA\tABDAAA\tOOOOxx\n36\t2055\t0\t0\t6\t16\t36\t36\t36\t36\t36\t72\t73\tKBAAAA\tBBDAAA\tVVVVxx\n9782\t2056\t0\t2\t2\t2\t82\t782\t1782\t4782\t9782\t164\t165\tGMAAAA\tCBDAAA\tAAAAxx\n5412\t2057\t0\t0\t2\t12\t12\t412\t1412\t412\t5412\t24\t25\tEAAAAA\tDBDAAA\tHHHHxx\n9961\t2058\t1\t1\t1\t1\t61\t961\t1961\t4961\t9961\t122\t123\tDTAAAA\tEBDAAA\tOOOOxx\n6492\t2059\t0\t0\t2\t12\t92\t492\t492\t1492\t6492\t184\t185\tSPAAAA\tFBDAAA\tVVVVxx\n4234\t2060\t0\t2\t4\t14\t34\t234\t234\t4234\t4234\t68\t69\tWGAAAA\tGBDAAA\tAAAAxx\n4922\t2061\t0\t2\t2\t2\t22\t922\t922\t4922\t4922\t44\t45\tIHAAAA\tHBDAAA\tHHHHxx\n6166\t2062\t0\t2\t6\t6\t66\t166\t166\t1166\t6166\t132\t133\tEDAAAA\tIBDAAA\tOOOOxx\n7019\t2063\t1\t3\t9\t19\t19\t19\t1019\t2019\t7019\t38\t39\tZJAAAA\tJBDAAA\tVVVVxx\n7805\t2064\t1\t1\t5\t5\t5\t805\t1805\t2805\t7805\t10\t11\tFOAAAA\tKBDAAA\tAAAAxx\n9808\t2065\t0\t0\t8\t8\t8\t808\t1808\t4808\t9808\t16\t17\tGNAAAA\tLBDAAA\tHHHHxx\n2550\t2066\t0\t2\t0\t10\t50\t550\t550\t2550\t2550\t100\t101\tCUAAAA\tMBDAAA\tOOOOxx\n8626\t2067\t0\t2\t6\t6\t26\t626\t626\t3626\t8626\t52\t53\tUTAAAA\tNBDAAA\tVVVVxx\n5649\t2068\t1\t1\t9\t9\t49\t649\t1649\t649\t5649\t98\t99\tHJAAAA\tOBDAAA\tAAAAxx\n3117\t2069\t1\t1\t7\t17\t17\t117\t1117\t3117\t3117\t34\t35\tXPAAAA\tPBDAAA\tHHHHxx\n866\t2070\t0\t2\t6\t6\t66\t866\t866\t866\t866\t132\t133\tIHAAAA\tQBDAAA\tOOOOxx\n2323\t2071\t1\t3\t3\t3\t23\t323\t323\t2323\t2323\t46\t47\tJLAAAA\tRBDAAA\tVVVVxx\n5132\t2072\t0\t0\t2\t12\t32\t132\t1132\t132\t5132\t64\t65\tKPAAAA\tSBDAAA\tAAAAxx\n9222\t2073\t0\t2\t2\t2\t22\t222\t1222\t4222\t9222\t44\t45\tSQAAAA\tTBDAAA\tHHHHxx\n3934\t2074\t0\t2\t4\t14\t34\t934\t1934\t3934\t3934\t68\t69\tIVAAAA\tUBDAAA\tOOOOxx\n4845\t2075\t1\t1\t5\t5\t45\t845\t845\t4845\t4845\t90\t91\tJEAAAA\tVBDAAA\tVVVVxx\n7714\t2076\t0\t2\t4\t14\t14\t714\t1714\t2714\t7714\t28\t29\tSKAAAA\tWBDAAA\tAAAAxx\n9818\t2077\t0\t2\t8\t18\t18\t818\t1818\t4818\t9818\t36\t37\tQNAAAA\tXBDAAA\tHHHHxx\n2219\t2078\t1\t3\t9\t19\t19\t219\t219\t2219\t2219\t38\t39\tJHAAAA\tYBDAAA\tOOOOxx\n6573\t2079\t1\t1\t3\t13\t73\t573\t573\t1573\t6573\t146\t147\tVSAAAA\tZBDAAA\tVVVVxx\n4555\t2080\t1\t3\t5\t15\t55\t555\t555\t4555\t4555\t110\t111\tFTAAAA\tACDAAA\tAAAAxx\n7306\t2081\t0\t2\t6\t6\t6\t306\t1306\t2306\t7306\t12\t13\tAVAAAA\tBCDAAA\tHHHHxx\n9313\t2082\t1\t1\t3\t13\t13\t313\t1313\t4313\t9313\t26\t27\tFUAAAA\tCCDAAA\tOOOOxx\n3924\t2083\t0\t0\t4\t4\t24\t924\t1924\t3924\t3924\t48\t49\tYUAAAA\tDCDAAA\tVVVVxx\n5176\t2084\t0\t0\t6\t16\t76\t176\t1176\t176\t5176\t152\t153\tCRAAAA\tECDAAA\tAAAAxx\n9767\t2085\t1\t3\t7\t7\t67\t767\t1767\t4767\t9767\t134\t135\tRLAAAA\tFCDAAA\tHHHHxx\n905\t2086\t1\t1\t5\t5\t5\t905\t905\t905\t905\t10\t11\tVIAAAA\tGCDAAA\tOOOOxx\n8037\t2087\t1\t1\t7\t17\t37\t37\t37\t3037\t8037\t74\t75\tDXAAAA\tHCDAAA\tVVVVxx\n8133\t2088\t1\t1\t3\t13\t33\t133\t133\t3133\t8133\t66\t67\tVAAAAA\tICDAAA\tAAAAxx\n2954\t2089\t0\t2\t4\t14\t54\t954\t954\t2954\t2954\t108\t109\tQJAAAA\tJCDAAA\tHHHHxx\n7262\t2090\t0\t2\t2\t2\t62\t262\t1262\t2262\t7262\t124\t125\tITAAAA\tKCDAAA\tOOOOxx\n8768\t2091\t0\t0\t8\t8\t68\t768\t768\t3768\t8768\t136\t137\tGZAAAA\tLCDAAA\tVVVVxx\n6953\t2092\t1\t1\t3\t13\t53\t953\t953\t1953\t6953\t106\t107\tLHAAAA\tMCDAAA\tAAAAxx\n1984\t2093\t0\t0\t4\t4\t84\t984\t1984\t1984\t1984\t168\t169\tIYAAAA\tNCDAAA\tHHHHxx\n9348\t2094\t0\t0\t8\t8\t48\t348\t1348\t4348\t9348\t96\t97\tOVAAAA\tOCDAAA\tOOOOxx\n7769\t2095\t1\t1\t9\t9\t69\t769\t1769\t2769\t7769\t138\t139\tVMAAAA\tPCDAAA\tVVVVxx\n2994\t2096\t0\t2\t4\t14\t94\t994\t994\t2994\t2994\t188\t189\tELAAAA\tQCDAAA\tAAAAxx\n5938\t2097\t0\t2\t8\t18\t38\t938\t1938\t938\t5938\t76\t77\tKUAAAA\tRCDAAA\tHHHHxx\n556\t2098\t0\t0\t6\t16\t56\t556\t556\t556\t556\t112\t113\tKVAAAA\tSCDAAA\tOOOOxx\n2577\t2099\t1\t1\t7\t17\t77\t577\t577\t2577\t2577\t154\t155\tDVAAAA\tTCDAAA\tVVVVxx\n8733\t2100\t1\t1\t3\t13\t33\t733\t733\t3733\t8733\t66\t67\tXXAAAA\tUCDAAA\tAAAAxx\n3108\t2101\t0\t0\t8\t8\t8\t108\t1108\t3108\t3108\t16\t17\tOPAAAA\tVCDAAA\tHHHHxx\n4166\t2102\t0\t2\t6\t6\t66\t166\t166\t4166\t4166\t132\t133\tGEAAAA\tWCDAAA\tOOOOxx\n3170\t2103\t0\t2\t0\t10\t70\t170\t1170\t3170\t3170\t140\t141\tYRAAAA\tXCDAAA\tVVVVxx\n8118\t2104\t0\t2\t8\t18\t18\t118\t118\t3118\t8118\t36\t37\tGAAAAA\tYCDAAA\tAAAAxx\n8454\t2105\t0\t2\t4\t14\t54\t454\t454\t3454\t8454\t108\t109\tENAAAA\tZCDAAA\tHHHHxx\n5338\t2106\t0\t2\t8\t18\t38\t338\t1338\t338\t5338\t76\t77\tIXAAAA\tADDAAA\tOOOOxx\n402\t2107\t0\t2\t2\t2\t2\t402\t402\t402\t402\t4\t5\tMPAAAA\tBDDAAA\tVVVVxx\n5673\t2108\t1\t1\t3\t13\t73\t673\t1673\t673\t5673\t146\t147\tFKAAAA\tCDDAAA\tAAAAxx\n4324\t2109\t0\t0\t4\t4\t24\t324\t324\t4324\t4324\t48\t49\tIKAAAA\tDDDAAA\tHHHHxx\n1943\t2110\t1\t3\t3\t3\t43\t943\t1943\t1943\t1943\t86\t87\tTWAAAA\tEDDAAA\tOOOOxx\n7703\t2111\t1\t3\t3\t3\t3\t703\t1703\t2703\t7703\t6\t7\tHKAAAA\tFDDAAA\tVVVVxx\n7180\t2112\t0\t0\t0\t0\t80\t180\t1180\t2180\t7180\t160\t161\tEQAAAA\tGDDAAA\tAAAAxx\n5478\t2113\t0\t2\t8\t18\t78\t478\t1478\t478\t5478\t156\t157\tSCAAAA\tHDDAAA\tHHHHxx\n5775\t2114\t1\t3\t5\t15\t75\t775\t1775\t775\t5775\t150\t151\tDOAAAA\tIDDAAA\tOOOOxx\n6952\t2115\t0\t0\t2\t12\t52\t952\t952\t1952\t6952\t104\t105\tKHAAAA\tJDDAAA\tVVVVxx\n9022\t2116\t0\t2\t2\t2\t22\t22\t1022\t4022\t9022\t44\t45\tAJAAAA\tKDDAAA\tAAAAxx\n547\t2117\t1\t3\t7\t7\t47\t547\t547\t547\t547\t94\t95\tBVAAAA\tLDDAAA\tHHHHxx\n5877\t2118\t1\t1\t7\t17\t77\t877\t1877\t877\t5877\t154\t155\tBSAAAA\tMDDAAA\tOOOOxx\n9580\t2119\t0\t0\t0\t0\t80\t580\t1580\t4580\t9580\t160\t161\tMEAAAA\tNDDAAA\tVVVVxx\n6094\t2120\t0\t2\t4\t14\t94\t94\t94\t1094\t6094\t188\t189\tKAAAAA\tODDAAA\tAAAAxx\n3398\t2121\t0\t2\t8\t18\t98\t398\t1398\t3398\t3398\t196\t197\tSAAAAA\tPDDAAA\tHHHHxx\n4574\t2122\t0\t2\t4\t14\t74\t574\t574\t4574\t4574\t148\t149\tYTAAAA\tQDDAAA\tOOOOxx\n3675\t2123\t1\t3\t5\t15\t75\t675\t1675\t3675\t3675\t150\t151\tJLAAAA\tRDDAAA\tVVVVxx\n6413\t2124\t1\t1\t3\t13\t13\t413\t413\t1413\t6413\t26\t27\tRMAAAA\tSDDAAA\tAAAAxx\n9851\t2125\t1\t3\t1\t11\t51\t851\t1851\t4851\t9851\t102\t103\tXOAAAA\tTDDAAA\tHHHHxx\n126\t2126\t0\t2\t6\t6\t26\t126\t126\t126\t126\t52\t53\tWEAAAA\tUDDAAA\tOOOOxx\n6803\t2127\t1\t3\t3\t3\t3\t803\t803\t1803\t6803\t6\t7\tRBAAAA\tVDDAAA\tVVVVxx\n6949\t2128\t1\t1\t9\t9\t49\t949\t949\t1949\t6949\t98\t99\tHHAAAA\tWDDAAA\tAAAAxx\n115\t2129\t1\t3\t5\t15\t15\t115\t115\t115\t115\t30\t31\tLEAAAA\tXDDAAA\tHHHHxx\n4165\t2130\t1\t1\t5\t5\t65\t165\t165\t4165\t4165\t130\t131\tFEAAAA\tYDDAAA\tOOOOxx\n201\t2131\t1\t1\t1\t1\t1\t201\t201\t201\t201\t2\t3\tTHAAAA\tZDDAAA\tVVVVxx\n9324\t2132\t0\t0\t4\t4\t24\t324\t1324\t4324\t9324\t48\t49\tQUAAAA\tAEDAAA\tAAAAxx\n6562\t2133\t0\t2\t2\t2\t62\t562\t562\t1562\t6562\t124\t125\tKSAAAA\tBEDAAA\tHHHHxx\n1917\t2134\t1\t1\t7\t17\t17\t917\t1917\t1917\t1917\t34\t35\tTVAAAA\tCEDAAA\tOOOOxx\n558\t2135\t0\t2\t8\t18\t58\t558\t558\t558\t558\t116\t117\tMVAAAA\tDEDAAA\tVVVVxx\n8515\t2136\t1\t3\t5\t15\t15\t515\t515\t3515\t8515\t30\t31\tNPAAAA\tEEDAAA\tAAAAxx\n6321\t2137\t1\t1\t1\t1\t21\t321\t321\t1321\t6321\t42\t43\tDJAAAA\tFEDAAA\tHHHHxx\n6892\t2138\t0\t0\t2\t12\t92\t892\t892\t1892\t6892\t184\t185\tCFAAAA\tGEDAAA\tOOOOxx\n1001\t2139\t1\t1\t1\t1\t1\t1\t1001\t1001\t1001\t2\t3\tNMAAAA\tHEDAAA\tVVVVxx\n2858\t2140\t0\t2\t8\t18\t58\t858\t858\t2858\t2858\t116\t117\tYFAAAA\tIEDAAA\tAAAAxx\n2434\t2141\t0\t2\t4\t14\t34\t434\t434\t2434\t2434\t68\t69\tQPAAAA\tJEDAAA\tHHHHxx\n4460\t2142\t0\t0\t0\t0\t60\t460\t460\t4460\t4460\t120\t121\tOPAAAA\tKEDAAA\tOOOOxx\n5447\t2143\t1\t3\t7\t7\t47\t447\t1447\t447\t5447\t94\t95\tNBAAAA\tLEDAAA\tVVVVxx\n3799\t2144\t1\t3\t9\t19\t99\t799\t1799\t3799\t3799\t198\t199\tDQAAAA\tMEDAAA\tAAAAxx\n4310\t2145\t0\t2\t0\t10\t10\t310\t310\t4310\t4310\t20\t21\tUJAAAA\tNEDAAA\tHHHHxx\n405\t2146\t1\t1\t5\t5\t5\t405\t405\t405\t405\t10\t11\tPPAAAA\tOEDAAA\tOOOOxx\n4573\t2147\t1\t1\t3\t13\t73\t573\t573\t4573\t4573\t146\t147\tXTAAAA\tPEDAAA\tVVVVxx\n706\t2148\t0\t2\t6\t6\t6\t706\t706\t706\t706\t12\t13\tEBAAAA\tQEDAAA\tAAAAxx\n7619\t2149\t1\t3\t9\t19\t19\t619\t1619\t2619\t7619\t38\t39\tBHAAAA\tREDAAA\tHHHHxx\n7959\t2150\t1\t3\t9\t19\t59\t959\t1959\t2959\t7959\t118\t119\tDUAAAA\tSEDAAA\tOOOOxx\n6712\t2151\t0\t0\t2\t12\t12\t712\t712\t1712\t6712\t24\t25\tEYAAAA\tTEDAAA\tVVVVxx\n6959\t2152\t1\t3\t9\t19\t59\t959\t959\t1959\t6959\t118\t119\tRHAAAA\tUEDAAA\tAAAAxx\n9791\t2153\t1\t3\t1\t11\t91\t791\t1791\t4791\t9791\t182\t183\tPMAAAA\tVEDAAA\tHHHHxx\n2112\t2154\t0\t0\t2\t12\t12\t112\t112\t2112\t2112\t24\t25\tGDAAAA\tWEDAAA\tOOOOxx\n9114\t2155\t0\t2\t4\t14\t14\t114\t1114\t4114\t9114\t28\t29\tOMAAAA\tXEDAAA\tVVVVxx\n3506\t2156\t0\t2\t6\t6\t6\t506\t1506\t3506\t3506\t12\t13\tWEAAAA\tYEDAAA\tAAAAxx\n5002\t2157\t0\t2\t2\t2\t2\t2\t1002\t2\t5002\t4\t5\tKKAAAA\tZEDAAA\tHHHHxx\n3518\t2158\t0\t2\t8\t18\t18\t518\t1518\t3518\t3518\t36\t37\tIFAAAA\tAFDAAA\tOOOOxx\n602\t2159\t0\t2\t2\t2\t2\t602\t602\t602\t602\t4\t5\tEXAAAA\tBFDAAA\tVVVVxx\n9060\t2160\t0\t0\t0\t0\t60\t60\t1060\t4060\t9060\t120\t121\tMKAAAA\tCFDAAA\tAAAAxx\n3292\t2161\t0\t0\t2\t12\t92\t292\t1292\t3292\t3292\t184\t185\tQWAAAA\tDFDAAA\tHHHHxx\n77\t2162\t1\t1\t7\t17\t77\t77\t77\t77\t77\t154\t155\tZCAAAA\tEFDAAA\tOOOOxx\n1420\t2163\t0\t0\t0\t0\t20\t420\t1420\t1420\t1420\t40\t41\tQCAAAA\tFFDAAA\tVVVVxx\n6001\t2164\t1\t1\t1\t1\t1\t1\t1\t1001\t6001\t2\t3\tVWAAAA\tGFDAAA\tAAAAxx\n7477\t2165\t1\t1\t7\t17\t77\t477\t1477\t2477\t7477\t154\t155\tPBAAAA\tHFDAAA\tHHHHxx\n6655\t2166\t1\t3\t5\t15\t55\t655\t655\t1655\t6655\t110\t111\tZVAAAA\tIFDAAA\tOOOOxx\n7845\t2167\t1\t1\t5\t5\t45\t845\t1845\t2845\t7845\t90\t91\tTPAAAA\tJFDAAA\tVVVVxx\n8484\t2168\t0\t0\t4\t4\t84\t484\t484\t3484\t8484\t168\t169\tIOAAAA\tKFDAAA\tAAAAxx\n4345\t2169\t1\t1\t5\t5\t45\t345\t345\t4345\t4345\t90\t91\tDLAAAA\tLFDAAA\tHHHHxx\n4250\t2170\t0\t2\t0\t10\t50\t250\t250\t4250\t4250\t100\t101\tMHAAAA\tMFDAAA\tOOOOxx\n2391\t2171\t1\t3\t1\t11\t91\t391\t391\t2391\t2391\t182\t183\tZNAAAA\tNFDAAA\tVVVVxx\n6884\t2172\t0\t0\t4\t4\t84\t884\t884\t1884\t6884\t168\t169\tUEAAAA\tOFDAAA\tAAAAxx\n7270\t2173\t0\t2\t0\t10\t70\t270\t1270\t2270\t7270\t140\t141\tQTAAAA\tPFDAAA\tHHHHxx\n2499\t2174\t1\t3\t9\t19\t99\t499\t499\t2499\t2499\t198\t199\tDSAAAA\tQFDAAA\tOOOOxx\n7312\t2175\t0\t0\t2\t12\t12\t312\t1312\t2312\t7312\t24\t25\tGVAAAA\tRFDAAA\tVVVVxx\n7113\t2176\t1\t1\t3\t13\t13\t113\t1113\t2113\t7113\t26\t27\tPNAAAA\tSFDAAA\tAAAAxx\n6695\t2177\t1\t3\t5\t15\t95\t695\t695\t1695\t6695\t190\t191\tNXAAAA\tTFDAAA\tHHHHxx\n6521\t2178\t1\t1\t1\t1\t21\t521\t521\t1521\t6521\t42\t43\tVQAAAA\tUFDAAA\tOOOOxx\n272\t2179\t0\t0\t2\t12\t72\t272\t272\t272\t272\t144\t145\tMKAAAA\tVFDAAA\tVVVVxx\n9976\t2180\t0\t0\t6\t16\t76\t976\t1976\t4976\t9976\t152\t153\tSTAAAA\tWFDAAA\tAAAAxx\n992\t2181\t0\t0\t2\t12\t92\t992\t992\t992\t992\t184\t185\tEMAAAA\tXFDAAA\tHHHHxx\n6158\t2182\t0\t2\t8\t18\t58\t158\t158\t1158\t6158\t116\t117\tWCAAAA\tYFDAAA\tOOOOxx\n3281\t2183\t1\t1\t1\t1\t81\t281\t1281\t3281\t3281\t162\t163\tFWAAAA\tZFDAAA\tVVVVxx\n7446\t2184\t0\t2\t6\t6\t46\t446\t1446\t2446\t7446\t92\t93\tKAAAAA\tAGDAAA\tAAAAxx\n4679\t2185\t1\t3\t9\t19\t79\t679\t679\t4679\t4679\t158\t159\tZXAAAA\tBGDAAA\tHHHHxx\n5203\t2186\t1\t3\t3\t3\t3\t203\t1203\t203\t5203\t6\t7\tDSAAAA\tCGDAAA\tOOOOxx\n9874\t2187\t0\t2\t4\t14\t74\t874\t1874\t4874\t9874\t148\t149\tUPAAAA\tDGDAAA\tVVVVxx\n8371\t2188\t1\t3\t1\t11\t71\t371\t371\t3371\t8371\t142\t143\tZJAAAA\tEGDAAA\tAAAAxx\n9086\t2189\t0\t2\t6\t6\t86\t86\t1086\t4086\t9086\t172\t173\tMLAAAA\tFGDAAA\tHHHHxx\n430\t2190\t0\t2\t0\t10\t30\t430\t430\t430\t430\t60\t61\tOQAAAA\tGGDAAA\tOOOOxx\n8749\t2191\t1\t1\t9\t9\t49\t749\t749\t3749\t8749\t98\t99\tNYAAAA\tHGDAAA\tVVVVxx\n577\t2192\t1\t1\t7\t17\t77\t577\t577\t577\t577\t154\t155\tFWAAAA\tIGDAAA\tAAAAxx\n4884\t2193\t0\t0\t4\t4\t84\t884\t884\t4884\t4884\t168\t169\tWFAAAA\tJGDAAA\tHHHHxx\n3421\t2194\t1\t1\t1\t1\t21\t421\t1421\t3421\t3421\t42\t43\tPBAAAA\tKGDAAA\tOOOOxx\n2812\t2195\t0\t0\t2\t12\t12\t812\t812\t2812\t2812\t24\t25\tEEAAAA\tLGDAAA\tVVVVxx\n5958\t2196\t0\t2\t8\t18\t58\t958\t1958\t958\t5958\t116\t117\tEVAAAA\tMGDAAA\tAAAAxx\n9901\t2197\t1\t1\t1\t1\t1\t901\t1901\t4901\t9901\t2\t3\tVQAAAA\tNGDAAA\tHHHHxx\n8478\t2198\t0\t2\t8\t18\t78\t478\t478\t3478\t8478\t156\t157\tCOAAAA\tOGDAAA\tOOOOxx\n6545\t2199\t1\t1\t5\t5\t45\t545\t545\t1545\t6545\t90\t91\tTRAAAA\tPGDAAA\tVVVVxx\n1479\t2200\t1\t3\t9\t19\t79\t479\t1479\t1479\t1479\t158\t159\tXEAAAA\tQGDAAA\tAAAAxx\n1046\t2201\t0\t2\t6\t6\t46\t46\t1046\t1046\t1046\t92\t93\tGOAAAA\tRGDAAA\tHHHHxx\n6372\t2202\t0\t0\t2\t12\t72\t372\t372\t1372\t6372\t144\t145\tCLAAAA\tSGDAAA\tOOOOxx\n8206\t2203\t0\t2\t6\t6\t6\t206\t206\t3206\t8206\t12\t13\tQDAAAA\tTGDAAA\tVVVVxx\n9544\t2204\t0\t0\t4\t4\t44\t544\t1544\t4544\t9544\t88\t89\tCDAAAA\tUGDAAA\tAAAAxx\n9287\t2205\t1\t3\t7\t7\t87\t287\t1287\t4287\t9287\t174\t175\tFTAAAA\tVGDAAA\tHHHHxx\n6786\t2206\t0\t2\t6\t6\t86\t786\t786\t1786\t6786\t172\t173\tABAAAA\tWGDAAA\tOOOOxx\n6511\t2207\t1\t3\t1\t11\t11\t511\t511\t1511\t6511\t22\t23\tLQAAAA\tXGDAAA\tVVVVxx\n603\t2208\t1\t3\t3\t3\t3\t603\t603\t603\t603\t6\t7\tFXAAAA\tYGDAAA\tAAAAxx\n2022\t2209\t0\t2\t2\t2\t22\t22\t22\t2022\t2022\t44\t45\tUZAAAA\tZGDAAA\tHHHHxx\n2086\t2210\t0\t2\t6\t6\t86\t86\t86\t2086\t2086\t172\t173\tGCAAAA\tAHDAAA\tOOOOxx\n1969\t2211\t1\t1\t9\t9\t69\t969\t1969\t1969\t1969\t138\t139\tTXAAAA\tBHDAAA\tVVVVxx\n4841\t2212\t1\t1\t1\t1\t41\t841\t841\t4841\t4841\t82\t83\tFEAAAA\tCHDAAA\tAAAAxx\n5845\t2213\t1\t1\t5\t5\t45\t845\t1845\t845\t5845\t90\t91\tVQAAAA\tDHDAAA\tHHHHxx\n4635\t2214\t1\t3\t5\t15\t35\t635\t635\t4635\t4635\t70\t71\tHWAAAA\tEHDAAA\tOOOOxx\n4658\t2215\t0\t2\t8\t18\t58\t658\t658\t4658\t4658\t116\t117\tEXAAAA\tFHDAAA\tVVVVxx\n2896\t2216\t0\t0\t6\t16\t96\t896\t896\t2896\t2896\t192\t193\tKHAAAA\tGHDAAA\tAAAAxx\n5179\t2217\t1\t3\t9\t19\t79\t179\t1179\t179\t5179\t158\t159\tFRAAAA\tHHDAAA\tHHHHxx\n8667\t2218\t1\t3\t7\t7\t67\t667\t667\t3667\t8667\t134\t135\tJVAAAA\tIHDAAA\tOOOOxx\n7294\t2219\t0\t2\t4\t14\t94\t294\t1294\t2294\t7294\t188\t189\tOUAAAA\tJHDAAA\tVVVVxx\n3706\t2220\t0\t2\t6\t6\t6\t706\t1706\t3706\t3706\t12\t13\tOMAAAA\tKHDAAA\tAAAAxx\n8389\t2221\t1\t1\t9\t9\t89\t389\t389\t3389\t8389\t178\t179\tRKAAAA\tLHDAAA\tHHHHxx\n2486\t2222\t0\t2\t6\t6\t86\t486\t486\t2486\t2486\t172\t173\tQRAAAA\tMHDAAA\tOOOOxx\n8743\t2223\t1\t3\t3\t3\t43\t743\t743\t3743\t8743\t86\t87\tHYAAAA\tNHDAAA\tVVVVxx\n2777\t2224\t1\t1\t7\t17\t77\t777\t777\t2777\t2777\t154\t155\tVCAAAA\tOHDAAA\tAAAAxx\n2113\t2225\t1\t1\t3\t13\t13\t113\t113\t2113\t2113\t26\t27\tHDAAAA\tPHDAAA\tHHHHxx\n2076\t2226\t0\t0\t6\t16\t76\t76\t76\t2076\t2076\t152\t153\tWBAAAA\tQHDAAA\tOOOOxx\n2300\t2227\t0\t0\t0\t0\t0\t300\t300\t2300\t2300\t0\t1\tMKAAAA\tRHDAAA\tVVVVxx\n6894\t2228\t0\t2\t4\t14\t94\t894\t894\t1894\t6894\t188\t189\tEFAAAA\tSHDAAA\tAAAAxx\n6939\t2229\t1\t3\t9\t19\t39\t939\t939\t1939\t6939\t78\t79\tXGAAAA\tTHDAAA\tHHHHxx\n446\t2230\t0\t2\t6\t6\t46\t446\t446\t446\t446\t92\t93\tERAAAA\tUHDAAA\tOOOOxx\n6218\t2231\t0\t2\t8\t18\t18\t218\t218\t1218\t6218\t36\t37\tEFAAAA\tVHDAAA\tVVVVxx\n1295\t2232\t1\t3\t5\t15\t95\t295\t1295\t1295\t1295\t190\t191\tVXAAAA\tWHDAAA\tAAAAxx\n5135\t2233\t1\t3\t5\t15\t35\t135\t1135\t135\t5135\t70\t71\tNPAAAA\tXHDAAA\tHHHHxx\n8122\t2234\t0\t2\t2\t2\t22\t122\t122\t3122\t8122\t44\t45\tKAAAAA\tYHDAAA\tOOOOxx\n316\t2235\t0\t0\t6\t16\t16\t316\t316\t316\t316\t32\t33\tEMAAAA\tZHDAAA\tVVVVxx\n514\t2236\t0\t2\t4\t14\t14\t514\t514\t514\t514\t28\t29\tUTAAAA\tAIDAAA\tAAAAxx\n7970\t2237\t0\t2\t0\t10\t70\t970\t1970\t2970\t7970\t140\t141\tOUAAAA\tBIDAAA\tHHHHxx\n9350\t2238\t0\t2\t0\t10\t50\t350\t1350\t4350\t9350\t100\t101\tQVAAAA\tCIDAAA\tOOOOxx\n3700\t2239\t0\t0\t0\t0\t0\t700\t1700\t3700\t3700\t0\t1\tIMAAAA\tDIDAAA\tVVVVxx\n582\t2240\t0\t2\t2\t2\t82\t582\t582\t582\t582\t164\t165\tKWAAAA\tEIDAAA\tAAAAxx\n9722\t2241\t0\t2\t2\t2\t22\t722\t1722\t4722\t9722\t44\t45\tYJAAAA\tFIDAAA\tHHHHxx\n7398\t2242\t0\t2\t8\t18\t98\t398\t1398\t2398\t7398\t196\t197\tOYAAAA\tGIDAAA\tOOOOxx\n2265\t2243\t1\t1\t5\t5\t65\t265\t265\t2265\t2265\t130\t131\tDJAAAA\tHIDAAA\tVVVVxx\n3049\t2244\t1\t1\t9\t9\t49\t49\t1049\t3049\t3049\t98\t99\tHNAAAA\tIIDAAA\tAAAAxx\n9121\t2245\t1\t1\t1\t1\t21\t121\t1121\t4121\t9121\t42\t43\tVMAAAA\tJIDAAA\tHHHHxx\n4275\t2246\t1\t3\t5\t15\t75\t275\t275\t4275\t4275\t150\t151\tLIAAAA\tKIDAAA\tOOOOxx\n6567\t2247\t1\t3\t7\t7\t67\t567\t567\t1567\t6567\t134\t135\tPSAAAA\tLIDAAA\tVVVVxx\n6755\t2248\t1\t3\t5\t15\t55\t755\t755\t1755\t6755\t110\t111\tVZAAAA\tMIDAAA\tAAAAxx\n4535\t2249\t1\t3\t5\t15\t35\t535\t535\t4535\t4535\t70\t71\tLSAAAA\tNIDAAA\tHHHHxx\n7968\t2250\t0\t0\t8\t8\t68\t968\t1968\t2968\t7968\t136\t137\tMUAAAA\tOIDAAA\tOOOOxx\n3412\t2251\t0\t0\t2\t12\t12\t412\t1412\t3412\t3412\t24\t25\tGBAAAA\tPIDAAA\tVVVVxx\n6112\t2252\t0\t0\t2\t12\t12\t112\t112\t1112\t6112\t24\t25\tCBAAAA\tQIDAAA\tAAAAxx\n6805\t2253\t1\t1\t5\t5\t5\t805\t805\t1805\t6805\t10\t11\tTBAAAA\tRIDAAA\tHHHHxx\n2880\t2254\t0\t0\t0\t0\t80\t880\t880\t2880\t2880\t160\t161\tUGAAAA\tSIDAAA\tOOOOxx\n7710\t2255\t0\t2\t0\t10\t10\t710\t1710\t2710\t7710\t20\t21\tOKAAAA\tTIDAAA\tVVVVxx\n7949\t2256\t1\t1\t9\t9\t49\t949\t1949\t2949\t7949\t98\t99\tTTAAAA\tUIDAAA\tAAAAxx\n7043\t2257\t1\t3\t3\t3\t43\t43\t1043\t2043\t7043\t86\t87\tXKAAAA\tVIDAAA\tHHHHxx\n9012\t2258\t0\t0\t2\t12\t12\t12\t1012\t4012\t9012\t24\t25\tQIAAAA\tWIDAAA\tOOOOxx\n878\t2259\t0\t2\t8\t18\t78\t878\t878\t878\t878\t156\t157\tUHAAAA\tXIDAAA\tVVVVxx\n7930\t2260\t0\t2\t0\t10\t30\t930\t1930\t2930\t7930\t60\t61\tATAAAA\tYIDAAA\tAAAAxx\n667\t2261\t1\t3\t7\t7\t67\t667\t667\t667\t667\t134\t135\tRZAAAA\tZIDAAA\tHHHHxx\n1905\t2262\t1\t1\t5\t5\t5\t905\t1905\t1905\t1905\t10\t11\tHVAAAA\tAJDAAA\tOOOOxx\n4958\t2263\t0\t2\t8\t18\t58\t958\t958\t4958\t4958\t116\t117\tSIAAAA\tBJDAAA\tVVVVxx\n2973\t2264\t1\t1\t3\t13\t73\t973\t973\t2973\t2973\t146\t147\tJKAAAA\tCJDAAA\tAAAAxx\n3631\t2265\t1\t3\t1\t11\t31\t631\t1631\t3631\t3631\t62\t63\tRJAAAA\tDJDAAA\tHHHHxx\n5868\t2266\t0\t0\t8\t8\t68\t868\t1868\t868\t5868\t136\t137\tSRAAAA\tEJDAAA\tOOOOxx\n2873\t2267\t1\t1\t3\t13\t73\t873\t873\t2873\t2873\t146\t147\tNGAAAA\tFJDAAA\tVVVVxx\n6941\t2268\t1\t1\t1\t1\t41\t941\t941\t1941\t6941\t82\t83\tZGAAAA\tGJDAAA\tAAAAxx\n6384\t2269\t0\t0\t4\t4\t84\t384\t384\t1384\t6384\t168\t169\tOLAAAA\tHJDAAA\tHHHHxx\n3806\t2270\t0\t2\t6\t6\t6\t806\t1806\t3806\t3806\t12\t13\tKQAAAA\tIJDAAA\tOOOOxx\n5079\t2271\t1\t3\t9\t19\t79\t79\t1079\t79\t5079\t158\t159\tJNAAAA\tJJDAAA\tVVVVxx\n1970\t2272\t0\t2\t0\t10\t70\t970\t1970\t1970\t1970\t140\t141\tUXAAAA\tKJDAAA\tAAAAxx\n7810\t2273\t0\t2\t0\t10\t10\t810\t1810\t2810\t7810\t20\t21\tKOAAAA\tLJDAAA\tHHHHxx\n4639\t2274\t1\t3\t9\t19\t39\t639\t639\t4639\t4639\t78\t79\tLWAAAA\tMJDAAA\tOOOOxx\n6527\t2275\t1\t3\t7\t7\t27\t527\t527\t1527\t6527\t54\t55\tBRAAAA\tNJDAAA\tVVVVxx\n8079\t2276\t1\t3\t9\t19\t79\t79\t79\t3079\t8079\t158\t159\tTYAAAA\tOJDAAA\tAAAAxx\n2740\t2277\t0\t0\t0\t0\t40\t740\t740\t2740\t2740\t80\t81\tKBAAAA\tPJDAAA\tHHHHxx\n2337\t2278\t1\t1\t7\t17\t37\t337\t337\t2337\t2337\t74\t75\tXLAAAA\tQJDAAA\tOOOOxx\n6670\t2279\t0\t2\t0\t10\t70\t670\t670\t1670\t6670\t140\t141\tOWAAAA\tRJDAAA\tVVVVxx\n2345\t2280\t1\t1\t5\t5\t45\t345\t345\t2345\t2345\t90\t91\tFMAAAA\tSJDAAA\tAAAAxx\n401\t2281\t1\t1\t1\t1\t1\t401\t401\t401\t401\t2\t3\tLPAAAA\tTJDAAA\tHHHHxx\n2704\t2282\t0\t0\t4\t4\t4\t704\t704\t2704\t2704\t8\t9\tAAAAAA\tUJDAAA\tOOOOxx\n5530\t2283\t0\t2\t0\t10\t30\t530\t1530\t530\t5530\t60\t61\tSEAAAA\tVJDAAA\tVVVVxx\n51\t2284\t1\t3\t1\t11\t51\t51\t51\t51\t51\t102\t103\tZBAAAA\tWJDAAA\tAAAAxx\n4282\t2285\t0\t2\t2\t2\t82\t282\t282\t4282\t4282\t164\t165\tSIAAAA\tXJDAAA\tHHHHxx\n7336\t2286\t0\t0\t6\t16\t36\t336\t1336\t2336\t7336\t72\t73\tEWAAAA\tYJDAAA\tOOOOxx\n8320\t2287\t0\t0\t0\t0\t20\t320\t320\t3320\t8320\t40\t41\tAIAAAA\tZJDAAA\tVVVVxx\n7772\t2288\t0\t0\t2\t12\t72\t772\t1772\t2772\t7772\t144\t145\tYMAAAA\tAKDAAA\tAAAAxx\n1894\t2289\t0\t2\t4\t14\t94\t894\t1894\t1894\t1894\t188\t189\tWUAAAA\tBKDAAA\tHHHHxx\n2320\t2290\t0\t0\t0\t0\t20\t320\t320\t2320\t2320\t40\t41\tGLAAAA\tCKDAAA\tOOOOxx\n6232\t2291\t0\t0\t2\t12\t32\t232\t232\t1232\t6232\t64\t65\tSFAAAA\tDKDAAA\tVVVVxx\n2833\t2292\t1\t1\t3\t13\t33\t833\t833\t2833\t2833\t66\t67\tZEAAAA\tEKDAAA\tAAAAxx\n8265\t2293\t1\t1\t5\t5\t65\t265\t265\t3265\t8265\t130\t131\tXFAAAA\tFKDAAA\tHHHHxx\n4589\t2294\t1\t1\t9\t9\t89\t589\t589\t4589\t4589\t178\t179\tNUAAAA\tGKDAAA\tOOOOxx\n8182\t2295\t0\t2\t2\t2\t82\t182\t182\t3182\t8182\t164\t165\tSCAAAA\tHKDAAA\tVVVVxx\n8337\t2296\t1\t1\t7\t17\t37\t337\t337\t3337\t8337\t74\t75\tRIAAAA\tIKDAAA\tAAAAxx\n8210\t2297\t0\t2\t0\t10\t10\t210\t210\t3210\t8210\t20\t21\tUDAAAA\tJKDAAA\tHHHHxx\n1406\t2298\t0\t2\t6\t6\t6\t406\t1406\t1406\t1406\t12\t13\tCCAAAA\tKKDAAA\tOOOOxx\n4463\t2299\t1\t3\t3\t3\t63\t463\t463\t4463\t4463\t126\t127\tRPAAAA\tLKDAAA\tVVVVxx\n4347\t2300\t1\t3\t7\t7\t47\t347\t347\t4347\t4347\t94\t95\tFLAAAA\tMKDAAA\tAAAAxx\n181\t2301\t1\t1\t1\t1\t81\t181\t181\t181\t181\t162\t163\tZGAAAA\tNKDAAA\tHHHHxx\n9986\t2302\t0\t2\t6\t6\t86\t986\t1986\t4986\t9986\t172\t173\tCUAAAA\tOKDAAA\tOOOOxx\n661\t2303\t1\t1\t1\t1\t61\t661\t661\t661\t661\t122\t123\tLZAAAA\tPKDAAA\tVVVVxx\n4105\t2304\t1\t1\t5\t5\t5\t105\t105\t4105\t4105\t10\t11\tXBAAAA\tQKDAAA\tAAAAxx\n2187\t2305\t1\t3\t7\t7\t87\t187\t187\t2187\t2187\t174\t175\tDGAAAA\tRKDAAA\tHHHHxx\n1628\t2306\t0\t0\t8\t8\t28\t628\t1628\t1628\t1628\t56\t57\tQKAAAA\tSKDAAA\tOOOOxx\n3119\t2307\t1\t3\t9\t19\t19\t119\t1119\t3119\t3119\t38\t39\tZPAAAA\tTKDAAA\tVVVVxx\n6804\t2308\t0\t0\t4\t4\t4\t804\t804\t1804\t6804\t8\t9\tSBAAAA\tUKDAAA\tAAAAxx\n9918\t2309\t0\t2\t8\t18\t18\t918\t1918\t4918\t9918\t36\t37\tMRAAAA\tVKDAAA\tHHHHxx\n8916\t2310\t0\t0\t6\t16\t16\t916\t916\t3916\t8916\t32\t33\tYEAAAA\tWKDAAA\tOOOOxx\n6057\t2311\t1\t1\t7\t17\t57\t57\t57\t1057\t6057\t114\t115\tZYAAAA\tXKDAAA\tVVVVxx\n3622\t2312\t0\t2\t2\t2\t22\t622\t1622\t3622\t3622\t44\t45\tIJAAAA\tYKDAAA\tAAAAxx\n9168\t2313\t0\t0\t8\t8\t68\t168\t1168\t4168\t9168\t136\t137\tQOAAAA\tZKDAAA\tHHHHxx\n3720\t2314\t0\t0\t0\t0\t20\t720\t1720\t3720\t3720\t40\t41\tCNAAAA\tALDAAA\tOOOOxx\n9927\t2315\t1\t3\t7\t7\t27\t927\t1927\t4927\t9927\t54\t55\tVRAAAA\tBLDAAA\tVVVVxx\n5616\t2316\t0\t0\t6\t16\t16\t616\t1616\t616\t5616\t32\t33\tAIAAAA\tCLDAAA\tAAAAxx\n5210\t2317\t0\t2\t0\t10\t10\t210\t1210\t210\t5210\t20\t21\tKSAAAA\tDLDAAA\tHHHHxx\n636\t2318\t0\t0\t6\t16\t36\t636\t636\t636\t636\t72\t73\tMYAAAA\tELDAAA\tOOOOxx\n9936\t2319\t0\t0\t6\t16\t36\t936\t1936\t4936\t9936\t72\t73\tESAAAA\tFLDAAA\tVVVVxx\n2316\t2320\t0\t0\t6\t16\t16\t316\t316\t2316\t2316\t32\t33\tCLAAAA\tGLDAAA\tAAAAxx\n4363\t2321\t1\t3\t3\t3\t63\t363\t363\t4363\t4363\t126\t127\tVLAAAA\tHLDAAA\tHHHHxx\n7657\t2322\t1\t1\t7\t17\t57\t657\t1657\t2657\t7657\t114\t115\tNIAAAA\tILDAAA\tOOOOxx\n697\t2323\t1\t1\t7\t17\t97\t697\t697\t697\t697\t194\t195\tVAAAAA\tJLDAAA\tVVVVxx\n912\t2324\t0\t0\t2\t12\t12\t912\t912\t912\t912\t24\t25\tCJAAAA\tKLDAAA\tAAAAxx\n8806\t2325\t0\t2\t6\t6\t6\t806\t806\t3806\t8806\t12\t13\tSAAAAA\tLLDAAA\tHHHHxx\n9698\t2326\t0\t2\t8\t18\t98\t698\t1698\t4698\t9698\t196\t197\tAJAAAA\tMLDAAA\tOOOOxx\n6191\t2327\t1\t3\t1\t11\t91\t191\t191\t1191\t6191\t182\t183\tDEAAAA\tNLDAAA\tVVVVxx\n1188\t2328\t0\t0\t8\t8\t88\t188\t1188\t1188\t1188\t176\t177\tSTAAAA\tOLDAAA\tAAAAxx\n7676\t2329\t0\t0\t6\t16\t76\t676\t1676\t2676\t7676\t152\t153\tGJAAAA\tPLDAAA\tHHHHxx\n7073\t2330\t1\t1\t3\t13\t73\t73\t1073\t2073\t7073\t146\t147\tBMAAAA\tQLDAAA\tOOOOxx\n8019\t2331\t1\t3\t9\t19\t19\t19\t19\t3019\t8019\t38\t39\tLWAAAA\tRLDAAA\tVVVVxx\n4726\t2332\t0\t2\t6\t6\t26\t726\t726\t4726\t4726\t52\t53\tUZAAAA\tSLDAAA\tAAAAxx\n4648\t2333\t0\t0\t8\t8\t48\t648\t648\t4648\t4648\t96\t97\tUWAAAA\tTLDAAA\tHHHHxx\n3227\t2334\t1\t3\t7\t7\t27\t227\t1227\t3227\t3227\t54\t55\tDUAAAA\tULDAAA\tOOOOxx\n7232\t2335\t0\t0\t2\t12\t32\t232\t1232\t2232\t7232\t64\t65\tESAAAA\tVLDAAA\tVVVVxx\n9761\t2336\t1\t1\t1\t1\t61\t761\t1761\t4761\t9761\t122\t123\tLLAAAA\tWLDAAA\tAAAAxx\n3105\t2337\t1\t1\t5\t5\t5\t105\t1105\t3105\t3105\t10\t11\tLPAAAA\tXLDAAA\tHHHHxx\n5266\t2338\t0\t2\t6\t6\t66\t266\t1266\t266\t5266\t132\t133\tOUAAAA\tYLDAAA\tOOOOxx\n6788\t2339\t0\t0\t8\t8\t88\t788\t788\t1788\t6788\t176\t177\tCBAAAA\tZLDAAA\tVVVVxx\n2442\t2340\t0\t2\t2\t2\t42\t442\t442\t2442\t2442\t84\t85\tYPAAAA\tAMDAAA\tAAAAxx\n8198\t2341\t0\t2\t8\t18\t98\t198\t198\t3198\t8198\t196\t197\tIDAAAA\tBMDAAA\tHHHHxx\n5806\t2342\t0\t2\t6\t6\t6\t806\t1806\t806\t5806\t12\t13\tIPAAAA\tCMDAAA\tOOOOxx\n8928\t2343\t0\t0\t8\t8\t28\t928\t928\t3928\t8928\t56\t57\tKFAAAA\tDMDAAA\tVVVVxx\n1657\t2344\t1\t1\t7\t17\t57\t657\t1657\t1657\t1657\t114\t115\tTLAAAA\tEMDAAA\tAAAAxx\n9164\t2345\t0\t0\t4\t4\t64\t164\t1164\t4164\t9164\t128\t129\tMOAAAA\tFMDAAA\tHHHHxx\n1851\t2346\t1\t3\t1\t11\t51\t851\t1851\t1851\t1851\t102\t103\tFTAAAA\tGMDAAA\tOOOOxx\n4744\t2347\t0\t0\t4\t4\t44\t744\t744\t4744\t4744\t88\t89\tMAAAAA\tHMDAAA\tVVVVxx\n8055\t2348\t1\t3\t5\t15\t55\t55\t55\t3055\t8055\t110\t111\tVXAAAA\tIMDAAA\tAAAAxx\n1533\t2349\t1\t1\t3\t13\t33\t533\t1533\t1533\t1533\t66\t67\tZGAAAA\tJMDAAA\tHHHHxx\n1260\t2350\t0\t0\t0\t0\t60\t260\t1260\t1260\t1260\t120\t121\tMWAAAA\tKMDAAA\tOOOOxx\n1290\t2351\t0\t2\t0\t10\t90\t290\t1290\t1290\t1290\t180\t181\tQXAAAA\tLMDAAA\tVVVVxx\n297\t2352\t1\t1\t7\t17\t97\t297\t297\t297\t297\t194\t195\tLLAAAA\tMMDAAA\tAAAAxx\n4145\t2353\t1\t1\t5\t5\t45\t145\t145\t4145\t4145\t90\t91\tLDAAAA\tNMDAAA\tHHHHxx\n863\t2354\t1\t3\t3\t3\t63\t863\t863\t863\t863\t126\t127\tFHAAAA\tOMDAAA\tOOOOxx\n3423\t2355\t1\t3\t3\t3\t23\t423\t1423\t3423\t3423\t46\t47\tRBAAAA\tPMDAAA\tVVVVxx\n8750\t2356\t0\t2\t0\t10\t50\t750\t750\t3750\t8750\t100\t101\tOYAAAA\tQMDAAA\tAAAAxx\n3546\t2357\t0\t2\t6\t6\t46\t546\t1546\t3546\t3546\t92\t93\tKGAAAA\tRMDAAA\tHHHHxx\n3678\t2358\t0\t2\t8\t18\t78\t678\t1678\t3678\t3678\t156\t157\tMLAAAA\tSMDAAA\tOOOOxx\n5313\t2359\t1\t1\t3\t13\t13\t313\t1313\t313\t5313\t26\t27\tJWAAAA\tTMDAAA\tVVVVxx\n6233\t2360\t1\t1\t3\t13\t33\t233\t233\t1233\t6233\t66\t67\tTFAAAA\tUMDAAA\tAAAAxx\n5802\t2361\t0\t2\t2\t2\t2\t802\t1802\t802\t5802\t4\t5\tEPAAAA\tVMDAAA\tHHHHxx\n7059\t2362\t1\t3\t9\t19\t59\t59\t1059\t2059\t7059\t118\t119\tNLAAAA\tWMDAAA\tOOOOxx\n6481\t2363\t1\t1\t1\t1\t81\t481\t481\t1481\t6481\t162\t163\tHPAAAA\tXMDAAA\tVVVVxx\n1596\t2364\t0\t0\t6\t16\t96\t596\t1596\t1596\t1596\t192\t193\tKJAAAA\tYMDAAA\tAAAAxx\n8181\t2365\t1\t1\t1\t1\t81\t181\t181\t3181\t8181\t162\t163\tRCAAAA\tZMDAAA\tHHHHxx\n5368\t2366\t0\t0\t8\t8\t68\t368\t1368\t368\t5368\t136\t137\tMYAAAA\tANDAAA\tOOOOxx\n9416\t2367\t0\t0\t6\t16\t16\t416\t1416\t4416\t9416\t32\t33\tEYAAAA\tBNDAAA\tVVVVxx\n9521\t2368\t1\t1\t1\t1\t21\t521\t1521\t4521\t9521\t42\t43\tFCAAAA\tCNDAAA\tAAAAxx\n1042\t2369\t0\t2\t2\t2\t42\t42\t1042\t1042\t1042\t84\t85\tCOAAAA\tDNDAAA\tHHHHxx\n4503\t2370\t1\t3\t3\t3\t3\t503\t503\t4503\t4503\t6\t7\tFRAAAA\tENDAAA\tOOOOxx\n3023\t2371\t1\t3\t3\t3\t23\t23\t1023\t3023\t3023\t46\t47\tHMAAAA\tFNDAAA\tVVVVxx\n1976\t2372\t0\t0\t6\t16\t76\t976\t1976\t1976\t1976\t152\t153\tAYAAAA\tGNDAAA\tAAAAxx\n5610\t2373\t0\t2\t0\t10\t10\t610\t1610\t610\t5610\t20\t21\tUHAAAA\tHNDAAA\tHHHHxx\n7410\t2374\t0\t2\t0\t10\t10\t410\t1410\t2410\t7410\t20\t21\tAZAAAA\tINDAAA\tOOOOxx\n7872\t2375\t0\t0\t2\t12\t72\t872\t1872\t2872\t7872\t144\t145\tUQAAAA\tJNDAAA\tVVVVxx\n8591\t2376\t1\t3\t1\t11\t91\t591\t591\t3591\t8591\t182\t183\tLSAAAA\tKNDAAA\tAAAAxx\n1804\t2377\t0\t0\t4\t4\t4\t804\t1804\t1804\t1804\t8\t9\tKRAAAA\tLNDAAA\tHHHHxx\n5299\t2378\t1\t3\t9\t19\t99\t299\t1299\t299\t5299\t198\t199\tVVAAAA\tMNDAAA\tOOOOxx\n4695\t2379\t1\t3\t5\t15\t95\t695\t695\t4695\t4695\t190\t191\tPYAAAA\tNNDAAA\tVVVVxx\n2672\t2380\t0\t0\t2\t12\t72\t672\t672\t2672\t2672\t144\t145\tUYAAAA\tONDAAA\tAAAAxx\n585\t2381\t1\t1\t5\t5\t85\t585\t585\t585\t585\t170\t171\tNWAAAA\tPNDAAA\tHHHHxx\n8622\t2382\t0\t2\t2\t2\t22\t622\t622\t3622\t8622\t44\t45\tQTAAAA\tQNDAAA\tOOOOxx\n3780\t2383\t0\t0\t0\t0\t80\t780\t1780\t3780\t3780\t160\t161\tKPAAAA\tRNDAAA\tVVVVxx\n7941\t2384\t1\t1\t1\t1\t41\t941\t1941\t2941\t7941\t82\t83\tLTAAAA\tSNDAAA\tAAAAxx\n3305\t2385\t1\t1\t5\t5\t5\t305\t1305\t3305\t3305\t10\t11\tDXAAAA\tTNDAAA\tHHHHxx\n8653\t2386\t1\t1\t3\t13\t53\t653\t653\t3653\t8653\t106\t107\tVUAAAA\tUNDAAA\tOOOOxx\n5756\t2387\t0\t0\t6\t16\t56\t756\t1756\t756\t5756\t112\t113\tKNAAAA\tVNDAAA\tVVVVxx\n576\t2388\t0\t0\t6\t16\t76\t576\t576\t576\t576\t152\t153\tEWAAAA\tWNDAAA\tAAAAxx\n1915\t2389\t1\t3\t5\t15\t15\t915\t1915\t1915\t1915\t30\t31\tRVAAAA\tXNDAAA\tHHHHxx\n4627\t2390\t1\t3\t7\t7\t27\t627\t627\t4627\t4627\t54\t55\tZVAAAA\tYNDAAA\tOOOOxx\n920\t2391\t0\t0\t0\t0\t20\t920\t920\t920\t920\t40\t41\tKJAAAA\tZNDAAA\tVVVVxx\n2537\t2392\t1\t1\t7\t17\t37\t537\t537\t2537\t2537\t74\t75\tPTAAAA\tAODAAA\tAAAAxx\n50\t2393\t0\t2\t0\t10\t50\t50\t50\t50\t50\t100\t101\tYBAAAA\tBODAAA\tHHHHxx\n1313\t2394\t1\t1\t3\t13\t13\t313\t1313\t1313\t1313\t26\t27\tNYAAAA\tCODAAA\tOOOOxx\n8542\t2395\t0\t2\t2\t2\t42\t542\t542\t3542\t8542\t84\t85\tOQAAAA\tDODAAA\tVVVVxx\n6428\t2396\t0\t0\t8\t8\t28\t428\t428\t1428\t6428\t56\t57\tGNAAAA\tEODAAA\tAAAAxx\n4351\t2397\t1\t3\t1\t11\t51\t351\t351\t4351\t4351\t102\t103\tJLAAAA\tFODAAA\tHHHHxx\n2050\t2398\t0\t2\t0\t10\t50\t50\t50\t2050\t2050\t100\t101\tWAAAAA\tGODAAA\tOOOOxx\n5162\t2399\t0\t2\t2\t2\t62\t162\t1162\t162\t5162\t124\t125\tOQAAAA\tHODAAA\tVVVVxx\n8229\t2400\t1\t1\t9\t9\t29\t229\t229\t3229\t8229\t58\t59\tNEAAAA\tIODAAA\tAAAAxx\n7782\t2401\t0\t2\t2\t2\t82\t782\t1782\t2782\t7782\t164\t165\tINAAAA\tJODAAA\tHHHHxx\n1563\t2402\t1\t3\t3\t3\t63\t563\t1563\t1563\t1563\t126\t127\tDIAAAA\tKODAAA\tOOOOxx\n267\t2403\t1\t3\t7\t7\t67\t267\t267\t267\t267\t134\t135\tHKAAAA\tLODAAA\tVVVVxx\n5138\t2404\t0\t2\t8\t18\t38\t138\t1138\t138\t5138\t76\t77\tQPAAAA\tMODAAA\tAAAAxx\n7022\t2405\t0\t2\t2\t2\t22\t22\t1022\t2022\t7022\t44\t45\tCKAAAA\tNODAAA\tHHHHxx\n6705\t2406\t1\t1\t5\t5\t5\t705\t705\t1705\t6705\t10\t11\tXXAAAA\tOODAAA\tOOOOxx\n6190\t2407\t0\t2\t0\t10\t90\t190\t190\t1190\t6190\t180\t181\tCEAAAA\tPODAAA\tVVVVxx\n8226\t2408\t0\t2\t6\t6\t26\t226\t226\t3226\t8226\t52\t53\tKEAAAA\tQODAAA\tAAAAxx\n8882\t2409\t0\t2\t2\t2\t82\t882\t882\t3882\t8882\t164\t165\tQDAAAA\tRODAAA\tHHHHxx\n5181\t2410\t1\t1\t1\t1\t81\t181\t1181\t181\t5181\t162\t163\tHRAAAA\tSODAAA\tOOOOxx\n4598\t2411\t0\t2\t8\t18\t98\t598\t598\t4598\t4598\t196\t197\tWUAAAA\tTODAAA\tVVVVxx\n4882\t2412\t0\t2\t2\t2\t82\t882\t882\t4882\t4882\t164\t165\tUFAAAA\tUODAAA\tAAAAxx\n7490\t2413\t0\t2\t0\t10\t90\t490\t1490\t2490\t7490\t180\t181\tCCAAAA\tVODAAA\tHHHHxx\n5224\t2414\t0\t0\t4\t4\t24\t224\t1224\t224\t5224\t48\t49\tYSAAAA\tWODAAA\tOOOOxx\n2174\t2415\t0\t2\t4\t14\t74\t174\t174\t2174\t2174\t148\t149\tQFAAAA\tXODAAA\tVVVVxx\n3059\t2416\t1\t3\t9\t19\t59\t59\t1059\t3059\t3059\t118\t119\tRNAAAA\tYODAAA\tAAAAxx\n8790\t2417\t0\t2\t0\t10\t90\t790\t790\t3790\t8790\t180\t181\tCAAAAA\tZODAAA\tHHHHxx\n2222\t2418\t0\t2\t2\t2\t22\t222\t222\t2222\t2222\t44\t45\tMHAAAA\tAPDAAA\tOOOOxx\n5473\t2419\t1\t1\t3\t13\t73\t473\t1473\t473\t5473\t146\t147\tNCAAAA\tBPDAAA\tVVVVxx\n937\t2420\t1\t1\t7\t17\t37\t937\t937\t937\t937\t74\t75\tBKAAAA\tCPDAAA\tAAAAxx\n2975\t2421\t1\t3\t5\t15\t75\t975\t975\t2975\t2975\t150\t151\tLKAAAA\tDPDAAA\tHHHHxx\n9569\t2422\t1\t1\t9\t9\t69\t569\t1569\t4569\t9569\t138\t139\tBEAAAA\tEPDAAA\tOOOOxx\n3456\t2423\t0\t0\t6\t16\t56\t456\t1456\t3456\t3456\t112\t113\tYCAAAA\tFPDAAA\tVVVVxx\n6657\t2424\t1\t1\t7\t17\t57\t657\t657\t1657\t6657\t114\t115\tBWAAAA\tGPDAAA\tAAAAxx\n3776\t2425\t0\t0\t6\t16\t76\t776\t1776\t3776\t3776\t152\t153\tGPAAAA\tHPDAAA\tHHHHxx\n6072\t2426\t0\t0\t2\t12\t72\t72\t72\t1072\t6072\t144\t145\tOZAAAA\tIPDAAA\tOOOOxx\n8129\t2427\t1\t1\t9\t9\t29\t129\t129\t3129\t8129\t58\t59\tRAAAAA\tJPDAAA\tVVVVxx\n1085\t2428\t1\t1\t5\t5\t85\t85\t1085\t1085\t1085\t170\t171\tTPAAAA\tKPDAAA\tAAAAxx\n2079\t2429\t1\t3\t9\t19\t79\t79\t79\t2079\t2079\t158\t159\tZBAAAA\tLPDAAA\tHHHHxx\n1200\t2430\t0\t0\t0\t0\t0\t200\t1200\t1200\t1200\t0\t1\tEUAAAA\tMPDAAA\tOOOOxx\n3276\t2431\t0\t0\t6\t16\t76\t276\t1276\t3276\t3276\t152\t153\tAWAAAA\tNPDAAA\tVVVVxx\n2608\t2432\t0\t0\t8\t8\t8\t608\t608\t2608\t2608\t16\t17\tIWAAAA\tOPDAAA\tAAAAxx\n702\t2433\t0\t2\t2\t2\t2\t702\t702\t702\t702\t4\t5\tABAAAA\tPPDAAA\tHHHHxx\n5750\t2434\t0\t2\t0\t10\t50\t750\t1750\t750\t5750\t100\t101\tENAAAA\tQPDAAA\tOOOOxx\n2776\t2435\t0\t0\t6\t16\t76\t776\t776\t2776\t2776\t152\t153\tUCAAAA\tRPDAAA\tVVVVxx\n9151\t2436\t1\t3\t1\t11\t51\t151\t1151\t4151\t9151\t102\t103\tZNAAAA\tSPDAAA\tAAAAxx\n3282\t2437\t0\t2\t2\t2\t82\t282\t1282\t3282\t3282\t164\t165\tGWAAAA\tTPDAAA\tHHHHxx\n408\t2438\t0\t0\t8\t8\t8\t408\t408\t408\t408\t16\t17\tSPAAAA\tUPDAAA\tOOOOxx\n3473\t2439\t1\t1\t3\t13\t73\t473\t1473\t3473\t3473\t146\t147\tPDAAAA\tVPDAAA\tVVVVxx\n7095\t2440\t1\t3\t5\t15\t95\t95\t1095\t2095\t7095\t190\t191\tXMAAAA\tWPDAAA\tAAAAxx\n3288\t2441\t0\t0\t8\t8\t88\t288\t1288\t3288\t3288\t176\t177\tMWAAAA\tXPDAAA\tHHHHxx\n8215\t2442\t1\t3\t5\t15\t15\t215\t215\t3215\t8215\t30\t31\tZDAAAA\tYPDAAA\tOOOOxx\n6244\t2443\t0\t0\t4\t4\t44\t244\t244\t1244\t6244\t88\t89\tEGAAAA\tZPDAAA\tVVVVxx\n8440\t2444\t0\t0\t0\t0\t40\t440\t440\t3440\t8440\t80\t81\tQMAAAA\tAQDAAA\tAAAAxx\n3800\t2445\t0\t0\t0\t0\t0\t800\t1800\t3800\t3800\t0\t1\tEQAAAA\tBQDAAA\tHHHHxx\n7279\t2446\t1\t3\t9\t19\t79\t279\t1279\t2279\t7279\t158\t159\tZTAAAA\tCQDAAA\tOOOOxx\n9206\t2447\t0\t2\t6\t6\t6\t206\t1206\t4206\t9206\t12\t13\tCQAAAA\tDQDAAA\tVVVVxx\n6465\t2448\t1\t1\t5\t5\t65\t465\t465\t1465\t6465\t130\t131\tROAAAA\tEQDAAA\tAAAAxx\n4127\t2449\t1\t3\t7\t7\t27\t127\t127\t4127\t4127\t54\t55\tTCAAAA\tFQDAAA\tHHHHxx\n7463\t2450\t1\t3\t3\t3\t63\t463\t1463\t2463\t7463\t126\t127\tBBAAAA\tGQDAAA\tOOOOxx\n5117\t2451\t1\t1\t7\t17\t17\t117\t1117\t117\t5117\t34\t35\tVOAAAA\tHQDAAA\tVVVVxx\n4715\t2452\t1\t3\t5\t15\t15\t715\t715\t4715\t4715\t30\t31\tJZAAAA\tIQDAAA\tAAAAxx\n2010\t2453\t0\t2\t0\t10\t10\t10\t10\t2010\t2010\t20\t21\tIZAAAA\tJQDAAA\tHHHHxx\n6486\t2454\t0\t2\t6\t6\t86\t486\t486\t1486\t6486\t172\t173\tMPAAAA\tKQDAAA\tOOOOxx\n6434\t2455\t0\t2\t4\t14\t34\t434\t434\t1434\t6434\t68\t69\tMNAAAA\tLQDAAA\tVVVVxx\n2151\t2456\t1\t3\t1\t11\t51\t151\t151\t2151\t2151\t102\t103\tTEAAAA\tMQDAAA\tAAAAxx\n4821\t2457\t1\t1\t1\t1\t21\t821\t821\t4821\t4821\t42\t43\tLDAAAA\tNQDAAA\tHHHHxx\n6507\t2458\t1\t3\t7\t7\t7\t507\t507\t1507\t6507\t14\t15\tHQAAAA\tOQDAAA\tOOOOxx\n8741\t2459\t1\t1\t1\t1\t41\t741\t741\t3741\t8741\t82\t83\tFYAAAA\tPQDAAA\tVVVVxx\n6846\t2460\t0\t2\t6\t6\t46\t846\t846\t1846\t6846\t92\t93\tIDAAAA\tQQDAAA\tAAAAxx\n4525\t2461\t1\t1\t5\t5\t25\t525\t525\t4525\t4525\t50\t51\tBSAAAA\tRQDAAA\tHHHHxx\n8299\t2462\t1\t3\t9\t19\t99\t299\t299\t3299\t8299\t198\t199\tFHAAAA\tSQDAAA\tOOOOxx\n5465\t2463\t1\t1\t5\t5\t65\t465\t1465\t465\t5465\t130\t131\tFCAAAA\tTQDAAA\tVVVVxx\n7206\t2464\t0\t2\t6\t6\t6\t206\t1206\t2206\t7206\t12\t13\tERAAAA\tUQDAAA\tAAAAxx\n2616\t2465\t0\t0\t6\t16\t16\t616\t616\t2616\t2616\t32\t33\tQWAAAA\tVQDAAA\tHHHHxx\n4440\t2466\t0\t0\t0\t0\t40\t440\t440\t4440\t4440\t80\t81\tUOAAAA\tWQDAAA\tOOOOxx\n6109\t2467\t1\t1\t9\t9\t9\t109\t109\t1109\t6109\t18\t19\tZAAAAA\tXQDAAA\tVVVVxx\n7905\t2468\t1\t1\t5\t5\t5\t905\t1905\t2905\t7905\t10\t11\tBSAAAA\tYQDAAA\tAAAAxx\n6498\t2469\t0\t2\t8\t18\t98\t498\t498\t1498\t6498\t196\t197\tYPAAAA\tZQDAAA\tHHHHxx\n2034\t2470\t0\t2\t4\t14\t34\t34\t34\t2034\t2034\t68\t69\tGAAAAA\tARDAAA\tOOOOxx\n7693\t2471\t1\t1\t3\t13\t93\t693\t1693\t2693\t7693\t186\t187\tXJAAAA\tBRDAAA\tVVVVxx\n7511\t2472\t1\t3\t1\t11\t11\t511\t1511\t2511\t7511\t22\t23\tXCAAAA\tCRDAAA\tAAAAxx\n7531\t2473\t1\t3\t1\t11\t31\t531\t1531\t2531\t7531\t62\t63\tRDAAAA\tDRDAAA\tHHHHxx\n6869\t2474\t1\t1\t9\t9\t69\t869\t869\t1869\t6869\t138\t139\tFEAAAA\tERDAAA\tOOOOxx\n2763\t2475\t1\t3\t3\t3\t63\t763\t763\t2763\t2763\t126\t127\tHCAAAA\tFRDAAA\tVVVVxx\n575\t2476\t1\t3\t5\t15\t75\t575\t575\t575\t575\t150\t151\tDWAAAA\tGRDAAA\tAAAAxx\n8953\t2477\t1\t1\t3\t13\t53\t953\t953\t3953\t8953\t106\t107\tJGAAAA\tHRDAAA\tHHHHxx\n5833\t2478\t1\t1\t3\t13\t33\t833\t1833\t833\t5833\t66\t67\tJQAAAA\tIRDAAA\tOOOOxx\n9035\t2479\t1\t3\t5\t15\t35\t35\t1035\t4035\t9035\t70\t71\tNJAAAA\tJRDAAA\tVVVVxx\n9123\t2480\t1\t3\t3\t3\t23\t123\t1123\t4123\t9123\t46\t47\tXMAAAA\tKRDAAA\tAAAAxx\n206\t2481\t0\t2\t6\t6\t6\t206\t206\t206\t206\t12\t13\tYHAAAA\tLRDAAA\tHHHHxx\n4155\t2482\t1\t3\t5\t15\t55\t155\t155\t4155\t4155\t110\t111\tVDAAAA\tMRDAAA\tOOOOxx\n532\t2483\t0\t0\t2\t12\t32\t532\t532\t532\t532\t64\t65\tMUAAAA\tNRDAAA\tVVVVxx\n1370\t2484\t0\t2\t0\t10\t70\t370\t1370\t1370\t1370\t140\t141\tSAAAAA\tORDAAA\tAAAAxx\n7656\t2485\t0\t0\t6\t16\t56\t656\t1656\t2656\t7656\t112\t113\tMIAAAA\tPRDAAA\tHHHHxx\n7735\t2486\t1\t3\t5\t15\t35\t735\t1735\t2735\t7735\t70\t71\tNLAAAA\tQRDAAA\tOOOOxx\n2118\t2487\t0\t2\t8\t18\t18\t118\t118\t2118\t2118\t36\t37\tMDAAAA\tRRDAAA\tVVVVxx\n6914\t2488\t0\t2\t4\t14\t14\t914\t914\t1914\t6914\t28\t29\tYFAAAA\tSRDAAA\tAAAAxx\n6277\t2489\t1\t1\t7\t17\t77\t277\t277\t1277\t6277\t154\t155\tLHAAAA\tTRDAAA\tHHHHxx\n6347\t2490\t1\t3\t7\t7\t47\t347\t347\t1347\t6347\t94\t95\tDKAAAA\tURDAAA\tOOOOxx\n4030\t2491\t0\t2\t0\t10\t30\t30\t30\t4030\t4030\t60\t61\tAZAAAA\tVRDAAA\tVVVVxx\n9673\t2492\t1\t1\t3\t13\t73\t673\t1673\t4673\t9673\t146\t147\tBIAAAA\tWRDAAA\tAAAAxx\n2015\t2493\t1\t3\t5\t15\t15\t15\t15\t2015\t2015\t30\t31\tNZAAAA\tXRDAAA\tHHHHxx\n1317\t2494\t1\t1\t7\t17\t17\t317\t1317\t1317\t1317\t34\t35\tRYAAAA\tYRDAAA\tOOOOxx\n404\t2495\t0\t0\t4\t4\t4\t404\t404\t404\t404\t8\t9\tOPAAAA\tZRDAAA\tVVVVxx\n1604\t2496\t0\t0\t4\t4\t4\t604\t1604\t1604\t1604\t8\t9\tSJAAAA\tASDAAA\tAAAAxx\n1912\t2497\t0\t0\t2\t12\t12\t912\t1912\t1912\t1912\t24\t25\tOVAAAA\tBSDAAA\tHHHHxx\n5727\t2498\t1\t3\t7\t7\t27\t727\t1727\t727\t5727\t54\t55\tHMAAAA\tCSDAAA\tOOOOxx\n4538\t2499\t0\t2\t8\t18\t38\t538\t538\t4538\t4538\t76\t77\tOSAAAA\tDSDAAA\tVVVVxx\n6868\t2500\t0\t0\t8\t8\t68\t868\t868\t1868\t6868\t136\t137\tEEAAAA\tESDAAA\tAAAAxx\n9801\t2501\t1\t1\t1\t1\t1\t801\t1801\t4801\t9801\t2\t3\tZMAAAA\tFSDAAA\tHHHHxx\n1781\t2502\t1\t1\t1\t1\t81\t781\t1781\t1781\t1781\t162\t163\tNQAAAA\tGSDAAA\tOOOOxx\n7061\t2503\t1\t1\t1\t1\t61\t61\t1061\t2061\t7061\t122\t123\tPLAAAA\tHSDAAA\tVVVVxx\n2412\t2504\t0\t0\t2\t12\t12\t412\t412\t2412\t2412\t24\t25\tUOAAAA\tISDAAA\tAAAAxx\n9191\t2505\t1\t3\t1\t11\t91\t191\t1191\t4191\t9191\t182\t183\tNPAAAA\tJSDAAA\tHHHHxx\n1958\t2506\t0\t2\t8\t18\t58\t958\t1958\t1958\t1958\t116\t117\tIXAAAA\tKSDAAA\tOOOOxx\n2203\t2507\t1\t3\t3\t3\t3\t203\t203\t2203\t2203\t6\t7\tTGAAAA\tLSDAAA\tVVVVxx\n9104\t2508\t0\t0\t4\t4\t4\t104\t1104\t4104\t9104\t8\t9\tEMAAAA\tMSDAAA\tAAAAxx\n3837\t2509\t1\t1\t7\t17\t37\t837\t1837\t3837\t3837\t74\t75\tPRAAAA\tNSDAAA\tHHHHxx\n7055\t2510\t1\t3\t5\t15\t55\t55\t1055\t2055\t7055\t110\t111\tJLAAAA\tOSDAAA\tOOOOxx\n4612\t2511\t0\t0\t2\t12\t12\t612\t612\t4612\t4612\t24\t25\tKVAAAA\tPSDAAA\tVVVVxx\n6420\t2512\t0\t0\t0\t0\t20\t420\t420\t1420\t6420\t40\t41\tYMAAAA\tQSDAAA\tAAAAxx\n613\t2513\t1\t1\t3\t13\t13\t613\t613\t613\t613\t26\t27\tPXAAAA\tRSDAAA\tHHHHxx\n1691\t2514\t1\t3\t1\t11\t91\t691\t1691\t1691\t1691\t182\t183\tBNAAAA\tSSDAAA\tOOOOxx\n33\t2515\t1\t1\t3\t13\t33\t33\t33\t33\t33\t66\t67\tHBAAAA\tTSDAAA\tVVVVxx\n875\t2516\t1\t3\t5\t15\t75\t875\t875\t875\t875\t150\t151\tRHAAAA\tUSDAAA\tAAAAxx\n9030\t2517\t0\t2\t0\t10\t30\t30\t1030\t4030\t9030\t60\t61\tIJAAAA\tVSDAAA\tHHHHxx\n4285\t2518\t1\t1\t5\t5\t85\t285\t285\t4285\t4285\t170\t171\tVIAAAA\tWSDAAA\tOOOOxx\n6236\t2519\t0\t0\t6\t16\t36\t236\t236\t1236\t6236\t72\t73\tWFAAAA\tXSDAAA\tVVVVxx\n4702\t2520\t0\t2\t2\t2\t2\t702\t702\t4702\t4702\t4\t5\tWYAAAA\tYSDAAA\tAAAAxx\n3441\t2521\t1\t1\t1\t1\t41\t441\t1441\t3441\t3441\t82\t83\tJCAAAA\tZSDAAA\tHHHHxx\n2150\t2522\t0\t2\t0\t10\t50\t150\t150\t2150\t2150\t100\t101\tSEAAAA\tATDAAA\tOOOOxx\n1852\t2523\t0\t0\t2\t12\t52\t852\t1852\t1852\t1852\t104\t105\tGTAAAA\tBTDAAA\tVVVVxx\n7713\t2524\t1\t1\t3\t13\t13\t713\t1713\t2713\t7713\t26\t27\tRKAAAA\tCTDAAA\tAAAAxx\n6849\t2525\t1\t1\t9\t9\t49\t849\t849\t1849\t6849\t98\t99\tLDAAAA\tDTDAAA\tHHHHxx\n3425\t2526\t1\t1\t5\t5\t25\t425\t1425\t3425\t3425\t50\t51\tTBAAAA\tETDAAA\tOOOOxx\n4681\t2527\t1\t1\t1\t1\t81\t681\t681\t4681\t4681\t162\t163\tBYAAAA\tFTDAAA\tVVVVxx\n1134\t2528\t0\t2\t4\t14\t34\t134\t1134\t1134\t1134\t68\t69\tQRAAAA\tGTDAAA\tAAAAxx\n7462\t2529\t0\t2\t2\t2\t62\t462\t1462\t2462\t7462\t124\t125\tABAAAA\tHTDAAA\tHHHHxx\n2148\t2530\t0\t0\t8\t8\t48\t148\t148\t2148\t2148\t96\t97\tQEAAAA\tITDAAA\tOOOOxx\n5921\t2531\t1\t1\t1\t1\t21\t921\t1921\t921\t5921\t42\t43\tTTAAAA\tJTDAAA\tVVVVxx\n118\t2532\t0\t2\t8\t18\t18\t118\t118\t118\t118\t36\t37\tOEAAAA\tKTDAAA\tAAAAxx\n3065\t2533\t1\t1\t5\t5\t65\t65\t1065\t3065\t3065\t130\t131\tXNAAAA\tLTDAAA\tHHHHxx\n6590\t2534\t0\t2\t0\t10\t90\t590\t590\t1590\t6590\t180\t181\tMTAAAA\tMTDAAA\tOOOOxx\n4993\t2535\t1\t1\t3\t13\t93\t993\t993\t4993\t4993\t186\t187\tBKAAAA\tNTDAAA\tVVVVxx\n6818\t2536\t0\t2\t8\t18\t18\t818\t818\t1818\t6818\t36\t37\tGCAAAA\tOTDAAA\tAAAAxx\n1449\t2537\t1\t1\t9\t9\t49\t449\t1449\t1449\t1449\t98\t99\tTDAAAA\tPTDAAA\tHHHHxx\n2039\t2538\t1\t3\t9\t19\t39\t39\t39\t2039\t2039\t78\t79\tLAAAAA\tQTDAAA\tOOOOxx\n2524\t2539\t0\t0\t4\t4\t24\t524\t524\t2524\t2524\t48\t49\tCTAAAA\tRTDAAA\tVVVVxx\n1481\t2540\t1\t1\t1\t1\t81\t481\t1481\t1481\t1481\t162\t163\tZEAAAA\tSTDAAA\tAAAAxx\n6984\t2541\t0\t0\t4\t4\t84\t984\t984\t1984\t6984\t168\t169\tQIAAAA\tTTDAAA\tHHHHxx\n3960\t2542\t0\t0\t0\t0\t60\t960\t1960\t3960\t3960\t120\t121\tIWAAAA\tUTDAAA\tOOOOxx\n1983\t2543\t1\t3\t3\t3\t83\t983\t1983\t1983\t1983\t166\t167\tHYAAAA\tVTDAAA\tVVVVxx\n6379\t2544\t1\t3\t9\t19\t79\t379\t379\t1379\t6379\t158\t159\tJLAAAA\tWTDAAA\tAAAAxx\n8975\t2545\t1\t3\t5\t15\t75\t975\t975\t3975\t8975\t150\t151\tFHAAAA\tXTDAAA\tHHHHxx\n1102\t2546\t0\t2\t2\t2\t2\t102\t1102\t1102\t1102\t4\t5\tKQAAAA\tYTDAAA\tOOOOxx\n2517\t2547\t1\t1\t7\t17\t17\t517\t517\t2517\t2517\t34\t35\tVSAAAA\tZTDAAA\tVVVVxx\n712\t2548\t0\t0\t2\t12\t12\t712\t712\t712\t712\t24\t25\tKBAAAA\tAUDAAA\tAAAAxx\n5419\t2549\t1\t3\t9\t19\t19\t419\t1419\t419\t5419\t38\t39\tLAAAAA\tBUDAAA\tHHHHxx\n723\t2550\t1\t3\t3\t3\t23\t723\t723\t723\t723\t46\t47\tVBAAAA\tCUDAAA\tOOOOxx\n8057\t2551\t1\t1\t7\t17\t57\t57\t57\t3057\t8057\t114\t115\tXXAAAA\tDUDAAA\tVVVVxx\n7471\t2552\t1\t3\t1\t11\t71\t471\t1471\t2471\t7471\t142\t143\tJBAAAA\tEUDAAA\tAAAAxx\n8855\t2553\t1\t3\t5\t15\t55\t855\t855\t3855\t8855\t110\t111\tPCAAAA\tFUDAAA\tHHHHxx\n5074\t2554\t0\t2\t4\t14\t74\t74\t1074\t74\t5074\t148\t149\tENAAAA\tGUDAAA\tOOOOxx\n7139\t2555\t1\t3\t9\t19\t39\t139\t1139\t2139\t7139\t78\t79\tPOAAAA\tHUDAAA\tVVVVxx\n3833\t2556\t1\t1\t3\t13\t33\t833\t1833\t3833\t3833\t66\t67\tLRAAAA\tIUDAAA\tAAAAxx\n5186\t2557\t0\t2\t6\t6\t86\t186\t1186\t186\t5186\t172\t173\tMRAAAA\tJUDAAA\tHHHHxx\n9436\t2558\t0\t0\t6\t16\t36\t436\t1436\t4436\t9436\t72\t73\tYYAAAA\tKUDAAA\tOOOOxx\n8859\t2559\t1\t3\t9\t19\t59\t859\t859\t3859\t8859\t118\t119\tTCAAAA\tLUDAAA\tVVVVxx\n6943\t2560\t1\t3\t3\t3\t43\t943\t943\t1943\t6943\t86\t87\tBHAAAA\tMUDAAA\tAAAAxx\n2315\t2561\t1\t3\t5\t15\t15\t315\t315\t2315\t2315\t30\t31\tBLAAAA\tNUDAAA\tHHHHxx\n1394\t2562\t0\t2\t4\t14\t94\t394\t1394\t1394\t1394\t188\t189\tQBAAAA\tOUDAAA\tOOOOxx\n8863\t2563\t1\t3\t3\t3\t63\t863\t863\t3863\t8863\t126\t127\tXCAAAA\tPUDAAA\tVVVVxx\n8812\t2564\t0\t0\t2\t12\t12\t812\t812\t3812\t8812\t24\t25\tYAAAAA\tQUDAAA\tAAAAxx\n7498\t2565\t0\t2\t8\t18\t98\t498\t1498\t2498\t7498\t196\t197\tKCAAAA\tRUDAAA\tHHHHxx\n8962\t2566\t0\t2\t2\t2\t62\t962\t962\t3962\t8962\t124\t125\tSGAAAA\tSUDAAA\tOOOOxx\n2533\t2567\t1\t1\t3\t13\t33\t533\t533\t2533\t2533\t66\t67\tLTAAAA\tTUDAAA\tVVVVxx\n8188\t2568\t0\t0\t8\t8\t88\t188\t188\t3188\t8188\t176\t177\tYCAAAA\tUUDAAA\tAAAAxx\n6137\t2569\t1\t1\t7\t17\t37\t137\t137\t1137\t6137\t74\t75\tBCAAAA\tVUDAAA\tHHHHxx\n974\t2570\t0\t2\t4\t14\t74\t974\t974\t974\t974\t148\t149\tMLAAAA\tWUDAAA\tOOOOxx\n2751\t2571\t1\t3\t1\t11\t51\t751\t751\t2751\t2751\t102\t103\tVBAAAA\tXUDAAA\tVVVVxx\n4975\t2572\t1\t3\t5\t15\t75\t975\t975\t4975\t4975\t150\t151\tJJAAAA\tYUDAAA\tAAAAxx\n3411\t2573\t1\t3\t1\t11\t11\t411\t1411\t3411\t3411\t22\t23\tFBAAAA\tZUDAAA\tHHHHxx\n3143\t2574\t1\t3\t3\t3\t43\t143\t1143\t3143\t3143\t86\t87\tXQAAAA\tAVDAAA\tOOOOxx\n8011\t2575\t1\t3\t1\t11\t11\t11\t11\t3011\t8011\t22\t23\tDWAAAA\tBVDAAA\tVVVVxx\n988\t2576\t0\t0\t8\t8\t88\t988\t988\t988\t988\t176\t177\tAMAAAA\tCVDAAA\tAAAAxx\n4289\t2577\t1\t1\t9\t9\t89\t289\t289\t4289\t4289\t178\t179\tZIAAAA\tDVDAAA\tHHHHxx\n8105\t2578\t1\t1\t5\t5\t5\t105\t105\t3105\t8105\t10\t11\tTZAAAA\tEVDAAA\tOOOOxx\n9885\t2579\t1\t1\t5\t5\t85\t885\t1885\t4885\t9885\t170\t171\tFQAAAA\tFVDAAA\tVVVVxx\n1002\t2580\t0\t2\t2\t2\t2\t2\t1002\t1002\t1002\t4\t5\tOMAAAA\tGVDAAA\tAAAAxx\n5827\t2581\t1\t3\t7\t7\t27\t827\t1827\t827\t5827\t54\t55\tDQAAAA\tHVDAAA\tHHHHxx\n1228\t2582\t0\t0\t8\t8\t28\t228\t1228\t1228\t1228\t56\t57\tGVAAAA\tIVDAAA\tOOOOxx\n6352\t2583\t0\t0\t2\t12\t52\t352\t352\t1352\t6352\t104\t105\tIKAAAA\tJVDAAA\tVVVVxx\n8868\t2584\t0\t0\t8\t8\t68\t868\t868\t3868\t8868\t136\t137\tCDAAAA\tKVDAAA\tAAAAxx\n3643\t2585\t1\t3\t3\t3\t43\t643\t1643\t3643\t3643\t86\t87\tDKAAAA\tLVDAAA\tHHHHxx\n1468\t2586\t0\t0\t8\t8\t68\t468\t1468\t1468\t1468\t136\t137\tMEAAAA\tMVDAAA\tOOOOxx\n8415\t2587\t1\t3\t5\t15\t15\t415\t415\t3415\t8415\t30\t31\tRLAAAA\tNVDAAA\tVVVVxx\n9631\t2588\t1\t3\t1\t11\t31\t631\t1631\t4631\t9631\t62\t63\tLGAAAA\tOVDAAA\tAAAAxx\n7408\t2589\t0\t0\t8\t8\t8\t408\t1408\t2408\t7408\t16\t17\tYYAAAA\tPVDAAA\tHHHHxx\n1934\t2590\t0\t2\t4\t14\t34\t934\t1934\t1934\t1934\t68\t69\tKWAAAA\tQVDAAA\tOOOOxx\n996\t2591\t0\t0\t6\t16\t96\t996\t996\t996\t996\t192\t193\tIMAAAA\tRVDAAA\tVVVVxx\n8027\t2592\t1\t3\t7\t7\t27\t27\t27\t3027\t8027\t54\t55\tTWAAAA\tSVDAAA\tAAAAxx\n8464\t2593\t0\t0\t4\t4\t64\t464\t464\t3464\t8464\t128\t129\tONAAAA\tTVDAAA\tHHHHxx\n5007\t2594\t1\t3\t7\t7\t7\t7\t1007\t7\t5007\t14\t15\tPKAAAA\tUVDAAA\tOOOOxx\n8356\t2595\t0\t0\t6\t16\t56\t356\t356\t3356\t8356\t112\t113\tKJAAAA\tVVDAAA\tVVVVxx\n4579\t2596\t1\t3\t9\t19\t79\t579\t579\t4579\t4579\t158\t159\tDUAAAA\tWVDAAA\tAAAAxx\n8513\t2597\t1\t1\t3\t13\t13\t513\t513\t3513\t8513\t26\t27\tLPAAAA\tXVDAAA\tHHHHxx\n383\t2598\t1\t3\t3\t3\t83\t383\t383\t383\t383\t166\t167\tTOAAAA\tYVDAAA\tOOOOxx\n9304\t2599\t0\t0\t4\t4\t4\t304\t1304\t4304\t9304\t8\t9\tWTAAAA\tZVDAAA\tVVVVxx\n7224\t2600\t0\t0\t4\t4\t24\t224\t1224\t2224\t7224\t48\t49\tWRAAAA\tAWDAAA\tAAAAxx\n6023\t2601\t1\t3\t3\t3\t23\t23\t23\t1023\t6023\t46\t47\tRXAAAA\tBWDAAA\tHHHHxx\n2746\t2602\t0\t2\t6\t6\t46\t746\t746\t2746\t2746\t92\t93\tQBAAAA\tCWDAAA\tOOOOxx\n137\t2603\t1\t1\t7\t17\t37\t137\t137\t137\t137\t74\t75\tHFAAAA\tDWDAAA\tVVVVxx\n9441\t2604\t1\t1\t1\t1\t41\t441\t1441\t4441\t9441\t82\t83\tDZAAAA\tEWDAAA\tAAAAxx\n3690\t2605\t0\t2\t0\t10\t90\t690\t1690\t3690\t3690\t180\t181\tYLAAAA\tFWDAAA\tHHHHxx\n913\t2606\t1\t1\t3\t13\t13\t913\t913\t913\t913\t26\t27\tDJAAAA\tGWDAAA\tOOOOxx\n1768\t2607\t0\t0\t8\t8\t68\t768\t1768\t1768\t1768\t136\t137\tAQAAAA\tHWDAAA\tVVVVxx\n8492\t2608\t0\t0\t2\t12\t92\t492\t492\t3492\t8492\t184\t185\tQOAAAA\tIWDAAA\tAAAAxx\n8083\t2609\t1\t3\t3\t3\t83\t83\t83\t3083\t8083\t166\t167\tXYAAAA\tJWDAAA\tHHHHxx\n4609\t2610\t1\t1\t9\t9\t9\t609\t609\t4609\t4609\t18\t19\tHVAAAA\tKWDAAA\tOOOOxx\n7520\t2611\t0\t0\t0\t0\t20\t520\t1520\t2520\t7520\t40\t41\tGDAAAA\tLWDAAA\tVVVVxx\n4231\t2612\t1\t3\t1\t11\t31\t231\t231\t4231\t4231\t62\t63\tTGAAAA\tMWDAAA\tAAAAxx\n6022\t2613\t0\t2\t2\t2\t22\t22\t22\t1022\t6022\t44\t45\tQXAAAA\tNWDAAA\tHHHHxx\n9784\t2614\t0\t0\t4\t4\t84\t784\t1784\t4784\t9784\t168\t169\tIMAAAA\tOWDAAA\tOOOOxx\n1343\t2615\t1\t3\t3\t3\t43\t343\t1343\t1343\t1343\t86\t87\tRZAAAA\tPWDAAA\tVVVVxx\n7549\t2616\t1\t1\t9\t9\t49\t549\t1549\t2549\t7549\t98\t99\tJEAAAA\tQWDAAA\tAAAAxx\n269\t2617\t1\t1\t9\t9\t69\t269\t269\t269\t269\t138\t139\tJKAAAA\tRWDAAA\tHHHHxx\n1069\t2618\t1\t1\t9\t9\t69\t69\t1069\t1069\t1069\t138\t139\tDPAAAA\tSWDAAA\tOOOOxx\n4610\t2619\t0\t2\t0\t10\t10\t610\t610\t4610\t4610\t20\t21\tIVAAAA\tTWDAAA\tVVVVxx\n482\t2620\t0\t2\t2\t2\t82\t482\t482\t482\t482\t164\t165\tOSAAAA\tUWDAAA\tAAAAxx\n3025\t2621\t1\t1\t5\t5\t25\t25\t1025\t3025\t3025\t50\t51\tJMAAAA\tVWDAAA\tHHHHxx\n7914\t2622\t0\t2\t4\t14\t14\t914\t1914\t2914\t7914\t28\t29\tKSAAAA\tWWDAAA\tOOOOxx\n3198\t2623\t0\t2\t8\t18\t98\t198\t1198\t3198\t3198\t196\t197\tATAAAA\tXWDAAA\tVVVVxx\n1187\t2624\t1\t3\t7\t7\t87\t187\t1187\t1187\t1187\t174\t175\tRTAAAA\tYWDAAA\tAAAAxx\n4707\t2625\t1\t3\t7\t7\t7\t707\t707\t4707\t4707\t14\t15\tBZAAAA\tZWDAAA\tHHHHxx\n8279\t2626\t1\t3\t9\t19\t79\t279\t279\t3279\t8279\t158\t159\tLGAAAA\tAXDAAA\tOOOOxx\n6127\t2627\t1\t3\t7\t7\t27\t127\t127\t1127\t6127\t54\t55\tRBAAAA\tBXDAAA\tVVVVxx\n1305\t2628\t1\t1\t5\t5\t5\t305\t1305\t1305\t1305\t10\t11\tFYAAAA\tCXDAAA\tAAAAxx\n4804\t2629\t0\t0\t4\t4\t4\t804\t804\t4804\t4804\t8\t9\tUCAAAA\tDXDAAA\tHHHHxx\n6069\t2630\t1\t1\t9\t9\t69\t69\t69\t1069\t6069\t138\t139\tLZAAAA\tEXDAAA\tOOOOxx\n9229\t2631\t1\t1\t9\t9\t29\t229\t1229\t4229\t9229\t58\t59\tZQAAAA\tFXDAAA\tVVVVxx\n4703\t2632\t1\t3\t3\t3\t3\t703\t703\t4703\t4703\t6\t7\tXYAAAA\tGXDAAA\tAAAAxx\n6410\t2633\t0\t2\t0\t10\t10\t410\t410\t1410\t6410\t20\t21\tOMAAAA\tHXDAAA\tHHHHxx\n944\t2634\t0\t0\t4\t4\t44\t944\t944\t944\t944\t88\t89\tIKAAAA\tIXDAAA\tOOOOxx\n3744\t2635\t0\t0\t4\t4\t44\t744\t1744\t3744\t3744\t88\t89\tAOAAAA\tJXDAAA\tVVVVxx\n1127\t2636\t1\t3\t7\t7\t27\t127\t1127\t1127\t1127\t54\t55\tJRAAAA\tKXDAAA\tAAAAxx\n6693\t2637\t1\t1\t3\t13\t93\t693\t693\t1693\t6693\t186\t187\tLXAAAA\tLXDAAA\tHHHHxx\n583\t2638\t1\t3\t3\t3\t83\t583\t583\t583\t583\t166\t167\tLWAAAA\tMXDAAA\tOOOOxx\n2684\t2639\t0\t0\t4\t4\t84\t684\t684\t2684\t2684\t168\t169\tGZAAAA\tNXDAAA\tVVVVxx\n6192\t2640\t0\t0\t2\t12\t92\t192\t192\t1192\t6192\t184\t185\tEEAAAA\tOXDAAA\tAAAAxx\n4157\t2641\t1\t1\t7\t17\t57\t157\t157\t4157\t4157\t114\t115\tXDAAAA\tPXDAAA\tHHHHxx\n6470\t2642\t0\t2\t0\t10\t70\t470\t470\t1470\t6470\t140\t141\tWOAAAA\tQXDAAA\tOOOOxx\n8965\t2643\t1\t1\t5\t5\t65\t965\t965\t3965\t8965\t130\t131\tVGAAAA\tRXDAAA\tVVVVxx\n1433\t2644\t1\t1\t3\t13\t33\t433\t1433\t1433\t1433\t66\t67\tDDAAAA\tSXDAAA\tAAAAxx\n4570\t2645\t0\t2\t0\t10\t70\t570\t570\t4570\t4570\t140\t141\tUTAAAA\tTXDAAA\tHHHHxx\n1806\t2646\t0\t2\t6\t6\t6\t806\t1806\t1806\t1806\t12\t13\tMRAAAA\tUXDAAA\tOOOOxx\n1230\t2647\t0\t2\t0\t10\t30\t230\t1230\t1230\t1230\t60\t61\tIVAAAA\tVXDAAA\tVVVVxx\n2283\t2648\t1\t3\t3\t3\t83\t283\t283\t2283\t2283\t166\t167\tVJAAAA\tWXDAAA\tAAAAxx\n6456\t2649\t0\t0\t6\t16\t56\t456\t456\t1456\t6456\t112\t113\tIOAAAA\tXXDAAA\tHHHHxx\n7427\t2650\t1\t3\t7\t7\t27\t427\t1427\t2427\t7427\t54\t55\tRZAAAA\tYXDAAA\tOOOOxx\n8310\t2651\t0\t2\t0\t10\t10\t310\t310\t3310\t8310\t20\t21\tQHAAAA\tZXDAAA\tVVVVxx\n8103\t2652\t1\t3\t3\t3\t3\t103\t103\t3103\t8103\t6\t7\tRZAAAA\tAYDAAA\tAAAAxx\n3947\t2653\t1\t3\t7\t7\t47\t947\t1947\t3947\t3947\t94\t95\tVVAAAA\tBYDAAA\tHHHHxx\n3414\t2654\t0\t2\t4\t14\t14\t414\t1414\t3414\t3414\t28\t29\tIBAAAA\tCYDAAA\tOOOOxx\n2043\t2655\t1\t3\t3\t3\t43\t43\t43\t2043\t2043\t86\t87\tPAAAAA\tDYDAAA\tVVVVxx\n4393\t2656\t1\t1\t3\t13\t93\t393\t393\t4393\t4393\t186\t187\tZMAAAA\tEYDAAA\tAAAAxx\n6664\t2657\t0\t0\t4\t4\t64\t664\t664\t1664\t6664\t128\t129\tIWAAAA\tFYDAAA\tHHHHxx\n4545\t2658\t1\t1\t5\t5\t45\t545\t545\t4545\t4545\t90\t91\tVSAAAA\tGYDAAA\tOOOOxx\n7637\t2659\t1\t1\t7\t17\t37\t637\t1637\t2637\t7637\t74\t75\tTHAAAA\tHYDAAA\tVVVVxx\n1359\t2660\t1\t3\t9\t19\t59\t359\t1359\t1359\t1359\t118\t119\tHAAAAA\tIYDAAA\tAAAAxx\n5018\t2661\t0\t2\t8\t18\t18\t18\t1018\t18\t5018\t36\t37\tALAAAA\tJYDAAA\tHHHHxx\n987\t2662\t1\t3\t7\t7\t87\t987\t987\t987\t987\t174\t175\tZLAAAA\tKYDAAA\tOOOOxx\n1320\t2663\t0\t0\t0\t0\t20\t320\t1320\t1320\t1320\t40\t41\tUYAAAA\tLYDAAA\tVVVVxx\n9311\t2664\t1\t3\t1\t11\t11\t311\t1311\t4311\t9311\t22\t23\tDUAAAA\tMYDAAA\tAAAAxx\n7993\t2665\t1\t1\t3\t13\t93\t993\t1993\t2993\t7993\t186\t187\tLVAAAA\tNYDAAA\tHHHHxx\n7588\t2666\t0\t0\t8\t8\t88\t588\t1588\t2588\t7588\t176\t177\tWFAAAA\tOYDAAA\tOOOOxx\n5983\t2667\t1\t3\t3\t3\t83\t983\t1983\t983\t5983\t166\t167\tDWAAAA\tPYDAAA\tVVVVxx\n4070\t2668\t0\t2\t0\t10\t70\t70\t70\t4070\t4070\t140\t141\tOAAAAA\tQYDAAA\tAAAAxx\n8349\t2669\t1\t1\t9\t9\t49\t349\t349\t3349\t8349\t98\t99\tDJAAAA\tRYDAAA\tHHHHxx\n3810\t2670\t0\t2\t0\t10\t10\t810\t1810\t3810\t3810\t20\t21\tOQAAAA\tSYDAAA\tOOOOxx\n6948\t2671\t0\t0\t8\t8\t48\t948\t948\t1948\t6948\t96\t97\tGHAAAA\tTYDAAA\tVVVVxx\n7153\t2672\t1\t1\t3\t13\t53\t153\t1153\t2153\t7153\t106\t107\tDPAAAA\tUYDAAA\tAAAAxx\n5371\t2673\t1\t3\t1\t11\t71\t371\t1371\t371\t5371\t142\t143\tPYAAAA\tVYDAAA\tHHHHxx\n8316\t2674\t0\t0\t6\t16\t16\t316\t316\t3316\t8316\t32\t33\tWHAAAA\tWYDAAA\tOOOOxx\n5903\t2675\t1\t3\t3\t3\t3\t903\t1903\t903\t5903\t6\t7\tBTAAAA\tXYDAAA\tVVVVxx\n6718\t2676\t0\t2\t8\t18\t18\t718\t718\t1718\t6718\t36\t37\tKYAAAA\tYYDAAA\tAAAAxx\n4759\t2677\t1\t3\t9\t19\t59\t759\t759\t4759\t4759\t118\t119\tBBAAAA\tZYDAAA\tHHHHxx\n2555\t2678\t1\t3\t5\t15\t55\t555\t555\t2555\t2555\t110\t111\tHUAAAA\tAZDAAA\tOOOOxx\n3457\t2679\t1\t1\t7\t17\t57\t457\t1457\t3457\t3457\t114\t115\tZCAAAA\tBZDAAA\tVVVVxx\n9626\t2680\t0\t2\t6\t6\t26\t626\t1626\t4626\t9626\t52\t53\tGGAAAA\tCZDAAA\tAAAAxx\n2570\t2681\t0\t2\t0\t10\t70\t570\t570\t2570\t2570\t140\t141\tWUAAAA\tDZDAAA\tHHHHxx\n7964\t2682\t0\t0\t4\t4\t64\t964\t1964\t2964\t7964\t128\t129\tIUAAAA\tEZDAAA\tOOOOxx\n1543\t2683\t1\t3\t3\t3\t43\t543\t1543\t1543\t1543\t86\t87\tJHAAAA\tFZDAAA\tVVVVxx\n929\t2684\t1\t1\t9\t9\t29\t929\t929\t929\t929\t58\t59\tTJAAAA\tGZDAAA\tAAAAxx\n9244\t2685\t0\t0\t4\t4\t44\t244\t1244\t4244\t9244\t88\t89\tORAAAA\tHZDAAA\tHHHHxx\n9210\t2686\t0\t2\t0\t10\t10\t210\t1210\t4210\t9210\t20\t21\tGQAAAA\tIZDAAA\tOOOOxx\n8334\t2687\t0\t2\t4\t14\t34\t334\t334\t3334\t8334\t68\t69\tOIAAAA\tJZDAAA\tVVVVxx\n9310\t2688\t0\t2\t0\t10\t10\t310\t1310\t4310\t9310\t20\t21\tCUAAAA\tKZDAAA\tAAAAxx\n5024\t2689\t0\t0\t4\t4\t24\t24\t1024\t24\t5024\t48\t49\tGLAAAA\tLZDAAA\tHHHHxx\n8794\t2690\t0\t2\t4\t14\t94\t794\t794\t3794\t8794\t188\t189\tGAAAAA\tMZDAAA\tOOOOxx\n4091\t2691\t1\t3\t1\t11\t91\t91\t91\t4091\t4091\t182\t183\tJBAAAA\tNZDAAA\tVVVVxx\n649\t2692\t1\t1\t9\t9\t49\t649\t649\t649\t649\t98\t99\tZYAAAA\tOZDAAA\tAAAAxx\n8505\t2693\t1\t1\t5\t5\t5\t505\t505\t3505\t8505\t10\t11\tDPAAAA\tPZDAAA\tHHHHxx\n6652\t2694\t0\t0\t2\t12\t52\t652\t652\t1652\t6652\t104\t105\tWVAAAA\tQZDAAA\tOOOOxx\n8945\t2695\t1\t1\t5\t5\t45\t945\t945\t3945\t8945\t90\t91\tBGAAAA\tRZDAAA\tVVVVxx\n2095\t2696\t1\t3\t5\t15\t95\t95\t95\t2095\t2095\t190\t191\tPCAAAA\tSZDAAA\tAAAAxx\n8676\t2697\t0\t0\t6\t16\t76\t676\t676\t3676\t8676\t152\t153\tSVAAAA\tTZDAAA\tHHHHxx\n3994\t2698\t0\t2\t4\t14\t94\t994\t1994\t3994\t3994\t188\t189\tQXAAAA\tUZDAAA\tOOOOxx\n2859\t2699\t1\t3\t9\t19\t59\t859\t859\t2859\t2859\t118\t119\tZFAAAA\tVZDAAA\tVVVVxx\n5403\t2700\t1\t3\t3\t3\t3\t403\t1403\t403\t5403\t6\t7\tVZAAAA\tWZDAAA\tAAAAxx\n3254\t2701\t0\t2\t4\t14\t54\t254\t1254\t3254\t3254\t108\t109\tEVAAAA\tXZDAAA\tHHHHxx\n7339\t2702\t1\t3\t9\t19\t39\t339\t1339\t2339\t7339\t78\t79\tHWAAAA\tYZDAAA\tOOOOxx\n7220\t2703\t0\t0\t0\t0\t20\t220\t1220\t2220\t7220\t40\t41\tSRAAAA\tZZDAAA\tVVVVxx\n4154\t2704\t0\t2\t4\t14\t54\t154\t154\t4154\t4154\t108\t109\tUDAAAA\tAAEAAA\tAAAAxx\n7570\t2705\t0\t2\t0\t10\t70\t570\t1570\t2570\t7570\t140\t141\tEFAAAA\tBAEAAA\tHHHHxx\n2576\t2706\t0\t0\t6\t16\t76\t576\t576\t2576\t2576\t152\t153\tCVAAAA\tCAEAAA\tOOOOxx\n5764\t2707\t0\t0\t4\t4\t64\t764\t1764\t764\t5764\t128\t129\tSNAAAA\tDAEAAA\tVVVVxx\n4314\t2708\t0\t2\t4\t14\t14\t314\t314\t4314\t4314\t28\t29\tYJAAAA\tEAEAAA\tAAAAxx\n2274\t2709\t0\t2\t4\t14\t74\t274\t274\t2274\t2274\t148\t149\tMJAAAA\tFAEAAA\tHHHHxx\n9756\t2710\t0\t0\t6\t16\t56\t756\t1756\t4756\t9756\t112\t113\tGLAAAA\tGAEAAA\tOOOOxx\n8274\t2711\t0\t2\t4\t14\t74\t274\t274\t3274\t8274\t148\t149\tGGAAAA\tHAEAAA\tVVVVxx\n1289\t2712\t1\t1\t9\t9\t89\t289\t1289\t1289\t1289\t178\t179\tPXAAAA\tIAEAAA\tAAAAxx\n7335\t2713\t1\t3\t5\t15\t35\t335\t1335\t2335\t7335\t70\t71\tDWAAAA\tJAEAAA\tHHHHxx\n5351\t2714\t1\t3\t1\t11\t51\t351\t1351\t351\t5351\t102\t103\tVXAAAA\tKAEAAA\tOOOOxx\n8978\t2715\t0\t2\t8\t18\t78\t978\t978\t3978\t8978\t156\t157\tIHAAAA\tLAEAAA\tVVVVxx\n2\t2716\t0\t2\t2\t2\t2\t2\t2\t2\t2\t4\t5\tCAAAAA\tMAEAAA\tAAAAxx\n8906\t2717\t0\t2\t6\t6\t6\t906\t906\t3906\t8906\t12\t13\tOEAAAA\tNAEAAA\tHHHHxx\n6388\t2718\t0\t0\t8\t8\t88\t388\t388\t1388\t6388\t176\t177\tSLAAAA\tOAEAAA\tOOOOxx\n5675\t2719\t1\t3\t5\t15\t75\t675\t1675\t675\t5675\t150\t151\tHKAAAA\tPAEAAA\tVVVVxx\n255\t2720\t1\t3\t5\t15\t55\t255\t255\t255\t255\t110\t111\tVJAAAA\tQAEAAA\tAAAAxx\n9538\t2721\t0\t2\t8\t18\t38\t538\t1538\t4538\t9538\t76\t77\tWCAAAA\tRAEAAA\tHHHHxx\n1480\t2722\t0\t0\t0\t0\t80\t480\t1480\t1480\t1480\t160\t161\tYEAAAA\tSAEAAA\tOOOOxx\n4015\t2723\t1\t3\t5\t15\t15\t15\t15\t4015\t4015\t30\t31\tLYAAAA\tTAEAAA\tVVVVxx\n5166\t2724\t0\t2\t6\t6\t66\t166\t1166\t166\t5166\t132\t133\tSQAAAA\tUAEAAA\tAAAAxx\n91\t2725\t1\t3\t1\t11\t91\t91\t91\t91\t91\t182\t183\tNDAAAA\tVAEAAA\tHHHHxx\n2958\t2726\t0\t2\t8\t18\t58\t958\t958\t2958\t2958\t116\t117\tUJAAAA\tWAEAAA\tOOOOxx\n9131\t2727\t1\t3\t1\t11\t31\t131\t1131\t4131\t9131\t62\t63\tFNAAAA\tXAEAAA\tVVVVxx\n3944\t2728\t0\t0\t4\t4\t44\t944\t1944\t3944\t3944\t88\t89\tSVAAAA\tYAEAAA\tAAAAxx\n4514\t2729\t0\t2\t4\t14\t14\t514\t514\t4514\t4514\t28\t29\tQRAAAA\tZAEAAA\tHHHHxx\n5661\t2730\t1\t1\t1\t1\t61\t661\t1661\t661\t5661\t122\t123\tTJAAAA\tABEAAA\tOOOOxx\n8724\t2731\t0\t0\t4\t4\t24\t724\t724\t3724\t8724\t48\t49\tOXAAAA\tBBEAAA\tVVVVxx\n6408\t2732\t0\t0\t8\t8\t8\t408\t408\t1408\t6408\t16\t17\tMMAAAA\tCBEAAA\tAAAAxx\n5013\t2733\t1\t1\t3\t13\t13\t13\t1013\t13\t5013\t26\t27\tVKAAAA\tDBEAAA\tHHHHxx\n6156\t2734\t0\t0\t6\t16\t56\t156\t156\t1156\t6156\t112\t113\tUCAAAA\tEBEAAA\tOOOOxx\n7350\t2735\t0\t2\t0\t10\t50\t350\t1350\t2350\t7350\t100\t101\tSWAAAA\tFBEAAA\tVVVVxx\n9858\t2736\t0\t2\t8\t18\t58\t858\t1858\t4858\t9858\t116\t117\tEPAAAA\tGBEAAA\tAAAAxx\n895\t2737\t1\t3\t5\t15\t95\t895\t895\t895\t895\t190\t191\tLIAAAA\tHBEAAA\tHHHHxx\n8368\t2738\t0\t0\t8\t8\t68\t368\t368\t3368\t8368\t136\t137\tWJAAAA\tIBEAAA\tOOOOxx\n179\t2739\t1\t3\t9\t19\t79\t179\t179\t179\t179\t158\t159\tXGAAAA\tJBEAAA\tVVVVxx\n4048\t2740\t0\t0\t8\t8\t48\t48\t48\t4048\t4048\t96\t97\tSZAAAA\tKBEAAA\tAAAAxx\n3073\t2741\t1\t1\t3\t13\t73\t73\t1073\t3073\t3073\t146\t147\tFOAAAA\tLBEAAA\tHHHHxx\n321\t2742\t1\t1\t1\t1\t21\t321\t321\t321\t321\t42\t43\tJMAAAA\tMBEAAA\tOOOOxx\n5352\t2743\t0\t0\t2\t12\t52\t352\t1352\t352\t5352\t104\t105\tWXAAAA\tNBEAAA\tVVVVxx\n1940\t2744\t0\t0\t0\t0\t40\t940\t1940\t1940\t1940\t80\t81\tQWAAAA\tOBEAAA\tAAAAxx\n8803\t2745\t1\t3\t3\t3\t3\t803\t803\t3803\t8803\t6\t7\tPAAAAA\tPBEAAA\tHHHHxx\n791\t2746\t1\t3\t1\t11\t91\t791\t791\t791\t791\t182\t183\tLEAAAA\tQBEAAA\tOOOOxx\n9809\t2747\t1\t1\t9\t9\t9\t809\t1809\t4809\t9809\t18\t19\tHNAAAA\tRBEAAA\tVVVVxx\n5519\t2748\t1\t3\t9\t19\t19\t519\t1519\t519\t5519\t38\t39\tHEAAAA\tSBEAAA\tAAAAxx\n7420\t2749\t0\t0\t0\t0\t20\t420\t1420\t2420\t7420\t40\t41\tKZAAAA\tTBEAAA\tHHHHxx\n7541\t2750\t1\t1\t1\t1\t41\t541\t1541\t2541\t7541\t82\t83\tBEAAAA\tUBEAAA\tOOOOxx\n6538\t2751\t0\t2\t8\t18\t38\t538\t538\t1538\t6538\t76\t77\tMRAAAA\tVBEAAA\tVVVVxx\n710\t2752\t0\t2\t0\t10\t10\t710\t710\t710\t710\t20\t21\tIBAAAA\tWBEAAA\tAAAAxx\n9488\t2753\t0\t0\t8\t8\t88\t488\t1488\t4488\t9488\t176\t177\tYAAAAA\tXBEAAA\tHHHHxx\n3135\t2754\t1\t3\t5\t15\t35\t135\t1135\t3135\t3135\t70\t71\tPQAAAA\tYBEAAA\tOOOOxx\n4273\t2755\t1\t1\t3\t13\t73\t273\t273\t4273\t4273\t146\t147\tJIAAAA\tZBEAAA\tVVVVxx\n629\t2756\t1\t1\t9\t9\t29\t629\t629\t629\t629\t58\t59\tFYAAAA\tACEAAA\tAAAAxx\n9167\t2757\t1\t3\t7\t7\t67\t167\t1167\t4167\t9167\t134\t135\tPOAAAA\tBCEAAA\tHHHHxx\n751\t2758\t1\t3\t1\t11\t51\t751\t751\t751\t751\t102\t103\tXCAAAA\tCCEAAA\tOOOOxx\n1126\t2759\t0\t2\t6\t6\t26\t126\t1126\t1126\t1126\t52\t53\tIRAAAA\tDCEAAA\tVVVVxx\n3724\t2760\t0\t0\t4\t4\t24\t724\t1724\t3724\t3724\t48\t49\tGNAAAA\tECEAAA\tAAAAxx\n1789\t2761\t1\t1\t9\t9\t89\t789\t1789\t1789\t1789\t178\t179\tVQAAAA\tFCEAAA\tHHHHxx\n792\t2762\t0\t0\t2\t12\t92\t792\t792\t792\t792\t184\t185\tMEAAAA\tGCEAAA\tOOOOxx\n2771\t2763\t1\t3\t1\t11\t71\t771\t771\t2771\t2771\t142\t143\tPCAAAA\tHCEAAA\tVVVVxx\n4313\t2764\t1\t1\t3\t13\t13\t313\t313\t4313\t4313\t26\t27\tXJAAAA\tICEAAA\tAAAAxx\n9312\t2765\t0\t0\t2\t12\t12\t312\t1312\t4312\t9312\t24\t25\tEUAAAA\tJCEAAA\tHHHHxx\n955\t2766\t1\t3\t5\t15\t55\t955\t955\t955\t955\t110\t111\tTKAAAA\tKCEAAA\tOOOOxx\n6382\t2767\t0\t2\t2\t2\t82\t382\t382\t1382\t6382\t164\t165\tMLAAAA\tLCEAAA\tVVVVxx\n7875\t2768\t1\t3\t5\t15\t75\t875\t1875\t2875\t7875\t150\t151\tXQAAAA\tMCEAAA\tAAAAxx\n7491\t2769\t1\t3\t1\t11\t91\t491\t1491\t2491\t7491\t182\t183\tDCAAAA\tNCEAAA\tHHHHxx\n8193\t2770\t1\t1\t3\t13\t93\t193\t193\t3193\t8193\t186\t187\tDDAAAA\tOCEAAA\tOOOOxx\n968\t2771\t0\t0\t8\t8\t68\t968\t968\t968\t968\t136\t137\tGLAAAA\tPCEAAA\tVVVVxx\n4951\t2772\t1\t3\t1\t11\t51\t951\t951\t4951\t4951\t102\t103\tLIAAAA\tQCEAAA\tAAAAxx\n2204\t2773\t0\t0\t4\t4\t4\t204\t204\t2204\t2204\t8\t9\tUGAAAA\tRCEAAA\tHHHHxx\n2066\t2774\t0\t2\t6\t6\t66\t66\t66\t2066\t2066\t132\t133\tMBAAAA\tSCEAAA\tOOOOxx\n2631\t2775\t1\t3\t1\t11\t31\t631\t631\t2631\t2631\t62\t63\tFXAAAA\tTCEAAA\tVVVVxx\n8947\t2776\t1\t3\t7\t7\t47\t947\t947\t3947\t8947\t94\t95\tDGAAAA\tUCEAAA\tAAAAxx\n8033\t2777\t1\t1\t3\t13\t33\t33\t33\t3033\t8033\t66\t67\tZWAAAA\tVCEAAA\tHHHHxx\n6264\t2778\t0\t0\t4\t4\t64\t264\t264\t1264\t6264\t128\t129\tYGAAAA\tWCEAAA\tOOOOxx\n7778\t2779\t0\t2\t8\t18\t78\t778\t1778\t2778\t7778\t156\t157\tENAAAA\tXCEAAA\tVVVVxx\n9701\t2780\t1\t1\t1\t1\t1\t701\t1701\t4701\t9701\t2\t3\tDJAAAA\tYCEAAA\tAAAAxx\n5091\t2781\t1\t3\t1\t11\t91\t91\t1091\t91\t5091\t182\t183\tVNAAAA\tZCEAAA\tHHHHxx\n7577\t2782\t1\t1\t7\t17\t77\t577\t1577\t2577\t7577\t154\t155\tLFAAAA\tADEAAA\tOOOOxx\n3345\t2783\t1\t1\t5\t5\t45\t345\t1345\t3345\t3345\t90\t91\tRYAAAA\tBDEAAA\tVVVVxx\n7329\t2784\t1\t1\t9\t9\t29\t329\t1329\t2329\t7329\t58\t59\tXVAAAA\tCDEAAA\tAAAAxx\n7551\t2785\t1\t3\t1\t11\t51\t551\t1551\t2551\t7551\t102\t103\tLEAAAA\tDDEAAA\tHHHHxx\n6207\t2786\t1\t3\t7\t7\t7\t207\t207\t1207\t6207\t14\t15\tTEAAAA\tEDEAAA\tOOOOxx\n8664\t2787\t0\t0\t4\t4\t64\t664\t664\t3664\t8664\t128\t129\tGVAAAA\tFDEAAA\tVVVVxx\n8394\t2788\t0\t2\t4\t14\t94\t394\t394\t3394\t8394\t188\t189\tWKAAAA\tGDEAAA\tAAAAxx\n7324\t2789\t0\t0\t4\t4\t24\t324\t1324\t2324\t7324\t48\t49\tSVAAAA\tHDEAAA\tHHHHxx\n2713\t2790\t1\t1\t3\t13\t13\t713\t713\t2713\t2713\t26\t27\tJAAAAA\tIDEAAA\tOOOOxx\n2230\t2791\t0\t2\t0\t10\t30\t230\t230\t2230\t2230\t60\t61\tUHAAAA\tJDEAAA\tVVVVxx\n9211\t2792\t1\t3\t1\t11\t11\t211\t1211\t4211\t9211\t22\t23\tHQAAAA\tKDEAAA\tAAAAxx\n1296\t2793\t0\t0\t6\t16\t96\t296\t1296\t1296\t1296\t192\t193\tWXAAAA\tLDEAAA\tHHHHxx\n8104\t2794\t0\t0\t4\t4\t4\t104\t104\t3104\t8104\t8\t9\tSZAAAA\tMDEAAA\tOOOOxx\n6916\t2795\t0\t0\t6\t16\t16\t916\t916\t1916\t6916\t32\t33\tAGAAAA\tNDEAAA\tVVVVxx\n2208\t2796\t0\t0\t8\t8\t8\t208\t208\t2208\t2208\t16\t17\tYGAAAA\tODEAAA\tAAAAxx\n3935\t2797\t1\t3\t5\t15\t35\t935\t1935\t3935\t3935\t70\t71\tJVAAAA\tPDEAAA\tHHHHxx\n7814\t2798\t0\t2\t4\t14\t14\t814\t1814\t2814\t7814\t28\t29\tOOAAAA\tQDEAAA\tOOOOxx\n6508\t2799\t0\t0\t8\t8\t8\t508\t508\t1508\t6508\t16\t17\tIQAAAA\tRDEAAA\tVVVVxx\n1703\t2800\t1\t3\t3\t3\t3\t703\t1703\t1703\t1703\t6\t7\tNNAAAA\tSDEAAA\tAAAAxx\n5640\t2801\t0\t0\t0\t0\t40\t640\t1640\t640\t5640\t80\t81\tYIAAAA\tTDEAAA\tHHHHxx\n6417\t2802\t1\t1\t7\t17\t17\t417\t417\t1417\t6417\t34\t35\tVMAAAA\tUDEAAA\tOOOOxx\n1713\t2803\t1\t1\t3\t13\t13\t713\t1713\t1713\t1713\t26\t27\tXNAAAA\tVDEAAA\tVVVVxx\n5309\t2804\t1\t1\t9\t9\t9\t309\t1309\t309\t5309\t18\t19\tFWAAAA\tWDEAAA\tAAAAxx\n4364\t2805\t0\t0\t4\t4\t64\t364\t364\t4364\t4364\t128\t129\tWLAAAA\tXDEAAA\tHHHHxx\n619\t2806\t1\t3\t9\t19\t19\t619\t619\t619\t619\t38\t39\tVXAAAA\tYDEAAA\tOOOOxx\n9498\t2807\t0\t2\t8\t18\t98\t498\t1498\t4498\t9498\t196\t197\tIBAAAA\tZDEAAA\tVVVVxx\n2804\t2808\t0\t0\t4\t4\t4\t804\t804\t2804\t2804\t8\t9\tWDAAAA\tAEEAAA\tAAAAxx\n2220\t2809\t0\t0\t0\t0\t20\t220\t220\t2220\t2220\t40\t41\tKHAAAA\tBEEAAA\tHHHHxx\n9542\t2810\t0\t2\t2\t2\t42\t542\t1542\t4542\t9542\t84\t85\tADAAAA\tCEEAAA\tOOOOxx\n3349\t2811\t1\t1\t9\t9\t49\t349\t1349\t3349\t3349\t98\t99\tVYAAAA\tDEEAAA\tVVVVxx\n9198\t2812\t0\t2\t8\t18\t98\t198\t1198\t4198\t9198\t196\t197\tUPAAAA\tEEEAAA\tAAAAxx\n2727\t2813\t1\t3\t7\t7\t27\t727\t727\t2727\t2727\t54\t55\tXAAAAA\tFEEAAA\tHHHHxx\n3768\t2814\t0\t0\t8\t8\t68\t768\t1768\t3768\t3768\t136\t137\tYOAAAA\tGEEAAA\tOOOOxx\n2334\t2815\t0\t2\t4\t14\t34\t334\t334\t2334\t2334\t68\t69\tULAAAA\tHEEAAA\tVVVVxx\n7770\t2816\t0\t2\t0\t10\t70\t770\t1770\t2770\t7770\t140\t141\tWMAAAA\tIEEAAA\tAAAAxx\n5963\t2817\t1\t3\t3\t3\t63\t963\t1963\t963\t5963\t126\t127\tJVAAAA\tJEEAAA\tHHHHxx\n4732\t2818\t0\t0\t2\t12\t32\t732\t732\t4732\t4732\t64\t65\tAAAAAA\tKEEAAA\tOOOOxx\n2448\t2819\t0\t0\t8\t8\t48\t448\t448\t2448\t2448\t96\t97\tEQAAAA\tLEEAAA\tVVVVxx\n5998\t2820\t0\t2\t8\t18\t98\t998\t1998\t998\t5998\t196\t197\tSWAAAA\tMEEAAA\tAAAAxx\n8577\t2821\t1\t1\t7\t17\t77\t577\t577\t3577\t8577\t154\t155\tXRAAAA\tNEEAAA\tHHHHxx\n266\t2822\t0\t2\t6\t6\t66\t266\t266\t266\t266\t132\t133\tGKAAAA\tOEEAAA\tOOOOxx\n2169\t2823\t1\t1\t9\t9\t69\t169\t169\t2169\t2169\t138\t139\tLFAAAA\tPEEAAA\tVVVVxx\n8228\t2824\t0\t0\t8\t8\t28\t228\t228\t3228\t8228\t56\t57\tMEAAAA\tQEEAAA\tAAAAxx\n4813\t2825\t1\t1\t3\t13\t13\t813\t813\t4813\t4813\t26\t27\tDDAAAA\tREEAAA\tHHHHxx\n2769\t2826\t1\t1\t9\t9\t69\t769\t769\t2769\t2769\t138\t139\tNCAAAA\tSEEAAA\tOOOOxx\n8382\t2827\t0\t2\t2\t2\t82\t382\t382\t3382\t8382\t164\t165\tKKAAAA\tTEEAAA\tVVVVxx\n1717\t2828\t1\t1\t7\t17\t17\t717\t1717\t1717\t1717\t34\t35\tBOAAAA\tUEEAAA\tAAAAxx\n7178\t2829\t0\t2\t8\t18\t78\t178\t1178\t2178\t7178\t156\t157\tCQAAAA\tVEEAAA\tHHHHxx\n9547\t2830\t1\t3\t7\t7\t47\t547\t1547\t4547\t9547\t94\t95\tFDAAAA\tWEEAAA\tOOOOxx\n8187\t2831\t1\t3\t7\t7\t87\t187\t187\t3187\t8187\t174\t175\tXCAAAA\tXEEAAA\tVVVVxx\n3168\t2832\t0\t0\t8\t8\t68\t168\t1168\t3168\t3168\t136\t137\tWRAAAA\tYEEAAA\tAAAAxx\n2180\t2833\t0\t0\t0\t0\t80\t180\t180\t2180\t2180\t160\t161\tWFAAAA\tZEEAAA\tHHHHxx\n859\t2834\t1\t3\t9\t19\t59\t859\t859\t859\t859\t118\t119\tBHAAAA\tAFEAAA\tOOOOxx\n1554\t2835\t0\t2\t4\t14\t54\t554\t1554\t1554\t1554\t108\t109\tUHAAAA\tBFEAAA\tVVVVxx\n3567\t2836\t1\t3\t7\t7\t67\t567\t1567\t3567\t3567\t134\t135\tFHAAAA\tCFEAAA\tAAAAxx\n5985\t2837\t1\t1\t5\t5\t85\t985\t1985\t985\t5985\t170\t171\tFWAAAA\tDFEAAA\tHHHHxx\n1\t2838\t1\t1\t1\t1\t1\t1\t1\t1\t1\t2\t3\tBAAAAA\tEFEAAA\tOOOOxx\n5937\t2839\t1\t1\t7\t17\t37\t937\t1937\t937\t5937\t74\t75\tJUAAAA\tFFEAAA\tVVVVxx\n7594\t2840\t0\t2\t4\t14\t94\t594\t1594\t2594\t7594\t188\t189\tCGAAAA\tGFEAAA\tAAAAxx\n3783\t2841\t1\t3\t3\t3\t83\t783\t1783\t3783\t3783\t166\t167\tNPAAAA\tHFEAAA\tHHHHxx\n6841\t2842\t1\t1\t1\t1\t41\t841\t841\t1841\t6841\t82\t83\tDDAAAA\tIFEAAA\tOOOOxx\n9694\t2843\t0\t2\t4\t14\t94\t694\t1694\t4694\t9694\t188\t189\tWIAAAA\tJFEAAA\tVVVVxx\n4322\t2844\t0\t2\t2\t2\t22\t322\t322\t4322\t4322\t44\t45\tGKAAAA\tKFEAAA\tAAAAxx\n6012\t2845\t0\t0\t2\t12\t12\t12\t12\t1012\t6012\t24\t25\tGXAAAA\tLFEAAA\tHHHHxx\n108\t2846\t0\t0\t8\t8\t8\t108\t108\t108\t108\t16\t17\tEEAAAA\tMFEAAA\tOOOOxx\n3396\t2847\t0\t0\t6\t16\t96\t396\t1396\t3396\t3396\t192\t193\tQAAAAA\tNFEAAA\tVVVVxx\n8643\t2848\t1\t3\t3\t3\t43\t643\t643\t3643\t8643\t86\t87\tLUAAAA\tOFEAAA\tAAAAxx\n6087\t2849\t1\t3\t7\t7\t87\t87\t87\t1087\t6087\t174\t175\tDAAAAA\tPFEAAA\tHHHHxx\n2629\t2850\t1\t1\t9\t9\t29\t629\t629\t2629\t2629\t58\t59\tDXAAAA\tQFEAAA\tOOOOxx\n3009\t2851\t1\t1\t9\t9\t9\t9\t1009\t3009\t3009\t18\t19\tTLAAAA\tRFEAAA\tVVVVxx\n438\t2852\t0\t2\t8\t18\t38\t438\t438\t438\t438\t76\t77\tWQAAAA\tSFEAAA\tAAAAxx\n2480\t2853\t0\t0\t0\t0\t80\t480\t480\t2480\t2480\t160\t161\tKRAAAA\tTFEAAA\tHHHHxx\n936\t2854\t0\t0\t6\t16\t36\t936\t936\t936\t936\t72\t73\tAKAAAA\tUFEAAA\tOOOOxx\n6\t2855\t0\t2\t6\t6\t6\t6\t6\t6\t6\t12\t13\tGAAAAA\tVFEAAA\tVVVVxx\n768\t2856\t0\t0\t8\t8\t68\t768\t768\t768\t768\t136\t137\tODAAAA\tWFEAAA\tAAAAxx\n1564\t2857\t0\t0\t4\t4\t64\t564\t1564\t1564\t1564\t128\t129\tEIAAAA\tXFEAAA\tHHHHxx\n3236\t2858\t0\t0\t6\t16\t36\t236\t1236\t3236\t3236\t72\t73\tMUAAAA\tYFEAAA\tOOOOxx\n3932\t2859\t0\t0\t2\t12\t32\t932\t1932\t3932\t3932\t64\t65\tGVAAAA\tZFEAAA\tVVVVxx\n8914\t2860\t0\t2\t4\t14\t14\t914\t914\t3914\t8914\t28\t29\tWEAAAA\tAGEAAA\tAAAAxx\n119\t2861\t1\t3\t9\t19\t19\t119\t119\t119\t119\t38\t39\tPEAAAA\tBGEAAA\tHHHHxx\n6034\t2862\t0\t2\t4\t14\t34\t34\t34\t1034\t6034\t68\t69\tCYAAAA\tCGEAAA\tOOOOxx\n5384\t2863\t0\t0\t4\t4\t84\t384\t1384\t384\t5384\t168\t169\tCZAAAA\tDGEAAA\tVVVVxx\n6885\t2864\t1\t1\t5\t5\t85\t885\t885\t1885\t6885\t170\t171\tVEAAAA\tEGEAAA\tAAAAxx\n232\t2865\t0\t0\t2\t12\t32\t232\t232\t232\t232\t64\t65\tYIAAAA\tFGEAAA\tHHHHxx\n1293\t2866\t1\t1\t3\t13\t93\t293\t1293\t1293\t1293\t186\t187\tTXAAAA\tGGEAAA\tOOOOxx\n9204\t2867\t0\t0\t4\t4\t4\t204\t1204\t4204\t9204\t8\t9\tAQAAAA\tHGEAAA\tVVVVxx\n527\t2868\t1\t3\t7\t7\t27\t527\t527\t527\t527\t54\t55\tHUAAAA\tIGEAAA\tAAAAxx\n6539\t2869\t1\t3\t9\t19\t39\t539\t539\t1539\t6539\t78\t79\tNRAAAA\tJGEAAA\tHHHHxx\n3679\t2870\t1\t3\t9\t19\t79\t679\t1679\t3679\t3679\t158\t159\tNLAAAA\tKGEAAA\tOOOOxx\n8282\t2871\t0\t2\t2\t2\t82\t282\t282\t3282\t8282\t164\t165\tOGAAAA\tLGEAAA\tVVVVxx\n5027\t2872\t1\t3\t7\t7\t27\t27\t1027\t27\t5027\t54\t55\tJLAAAA\tMGEAAA\tAAAAxx\n7694\t2873\t0\t2\t4\t14\t94\t694\t1694\t2694\t7694\t188\t189\tYJAAAA\tNGEAAA\tHHHHxx\n473\t2874\t1\t1\t3\t13\t73\t473\t473\t473\t473\t146\t147\tFSAAAA\tOGEAAA\tOOOOxx\n6325\t2875\t1\t1\t5\t5\t25\t325\t325\t1325\t6325\t50\t51\tHJAAAA\tPGEAAA\tVVVVxx\n8761\t2876\t1\t1\t1\t1\t61\t761\t761\t3761\t8761\t122\t123\tZYAAAA\tQGEAAA\tAAAAxx\n6184\t2877\t0\t0\t4\t4\t84\t184\t184\t1184\t6184\t168\t169\tWDAAAA\tRGEAAA\tHHHHxx\n419\t2878\t1\t3\t9\t19\t19\t419\t419\t419\t419\t38\t39\tDQAAAA\tSGEAAA\tOOOOxx\n6111\t2879\t1\t3\t1\t11\t11\t111\t111\t1111\t6111\t22\t23\tBBAAAA\tTGEAAA\tVVVVxx\n3836\t2880\t0\t0\t6\t16\t36\t836\t1836\t3836\t3836\t72\t73\tORAAAA\tUGEAAA\tAAAAxx\n4086\t2881\t0\t2\t6\t6\t86\t86\t86\t4086\t4086\t172\t173\tEBAAAA\tVGEAAA\tHHHHxx\n5818\t2882\t0\t2\t8\t18\t18\t818\t1818\t818\t5818\t36\t37\tUPAAAA\tWGEAAA\tOOOOxx\n4528\t2883\t0\t0\t8\t8\t28\t528\t528\t4528\t4528\t56\t57\tESAAAA\tXGEAAA\tVVVVxx\n7199\t2884\t1\t3\t9\t19\t99\t199\t1199\t2199\t7199\t198\t199\tXQAAAA\tYGEAAA\tAAAAxx\n1847\t2885\t1\t3\t7\t7\t47\t847\t1847\t1847\t1847\t94\t95\tBTAAAA\tZGEAAA\tHHHHxx\n2875\t2886\t1\t3\t5\t15\t75\t875\t875\t2875\t2875\t150\t151\tPGAAAA\tAHEAAA\tOOOOxx\n2872\t2887\t0\t0\t2\t12\t72\t872\t872\t2872\t2872\t144\t145\tMGAAAA\tBHEAAA\tVVVVxx\n3972\t2888\t0\t0\t2\t12\t72\t972\t1972\t3972\t3972\t144\t145\tUWAAAA\tCHEAAA\tAAAAxx\n7590\t2889\t0\t2\t0\t10\t90\t590\t1590\t2590\t7590\t180\t181\tYFAAAA\tDHEAAA\tHHHHxx\n1914\t2890\t0\t2\t4\t14\t14\t914\t1914\t1914\t1914\t28\t29\tQVAAAA\tEHEAAA\tOOOOxx\n1658\t2891\t0\t2\t8\t18\t58\t658\t1658\t1658\t1658\t116\t117\tULAAAA\tFHEAAA\tVVVVxx\n2126\t2892\t0\t2\t6\t6\t26\t126\t126\t2126\t2126\t52\t53\tUDAAAA\tGHEAAA\tAAAAxx\n645\t2893\t1\t1\t5\t5\t45\t645\t645\t645\t645\t90\t91\tVYAAAA\tHHEAAA\tHHHHxx\n6636\t2894\t0\t0\t6\t16\t36\t636\t636\t1636\t6636\t72\t73\tGVAAAA\tIHEAAA\tOOOOxx\n1469\t2895\t1\t1\t9\t9\t69\t469\t1469\t1469\t1469\t138\t139\tNEAAAA\tJHEAAA\tVVVVxx\n1377\t2896\t1\t1\t7\t17\t77\t377\t1377\t1377\t1377\t154\t155\tZAAAAA\tKHEAAA\tAAAAxx\n8425\t2897\t1\t1\t5\t5\t25\t425\t425\t3425\t8425\t50\t51\tBMAAAA\tLHEAAA\tHHHHxx\n9300\t2898\t0\t0\t0\t0\t0\t300\t1300\t4300\t9300\t0\t1\tSTAAAA\tMHEAAA\tOOOOxx\n5355\t2899\t1\t3\t5\t15\t55\t355\t1355\t355\t5355\t110\t111\tZXAAAA\tNHEAAA\tVVVVxx\n840\t2900\t0\t0\t0\t0\t40\t840\t840\t840\t840\t80\t81\tIGAAAA\tOHEAAA\tAAAAxx\n5185\t2901\t1\t1\t5\t5\t85\t185\t1185\t185\t5185\t170\t171\tLRAAAA\tPHEAAA\tHHHHxx\n6467\t2902\t1\t3\t7\t7\t67\t467\t467\t1467\t6467\t134\t135\tTOAAAA\tQHEAAA\tOOOOxx\n58\t2903\t0\t2\t8\t18\t58\t58\t58\t58\t58\t116\t117\tGCAAAA\tRHEAAA\tVVVVxx\n5051\t2904\t1\t3\t1\t11\t51\t51\t1051\t51\t5051\t102\t103\tHMAAAA\tSHEAAA\tAAAAxx\n8901\t2905\t1\t1\t1\t1\t1\t901\t901\t3901\t8901\t2\t3\tJEAAAA\tTHEAAA\tHHHHxx\n1550\t2906\t0\t2\t0\t10\t50\t550\t1550\t1550\t1550\t100\t101\tQHAAAA\tUHEAAA\tOOOOxx\n1698\t2907\t0\t2\t8\t18\t98\t698\t1698\t1698\t1698\t196\t197\tINAAAA\tVHEAAA\tVVVVxx\n802\t2908\t0\t2\t2\t2\t2\t802\t802\t802\t802\t4\t5\tWEAAAA\tWHEAAA\tAAAAxx\n2440\t2909\t0\t0\t0\t0\t40\t440\t440\t2440\t2440\t80\t81\tWPAAAA\tXHEAAA\tHHHHxx\n2260\t2910\t0\t0\t0\t0\t60\t260\t260\t2260\t2260\t120\t121\tYIAAAA\tYHEAAA\tOOOOxx\n8218\t2911\t0\t2\t8\t18\t18\t218\t218\t3218\t8218\t36\t37\tCEAAAA\tZHEAAA\tVVVVxx\n5144\t2912\t0\t0\t4\t4\t44\t144\t1144\t144\t5144\t88\t89\tWPAAAA\tAIEAAA\tAAAAxx\n4822\t2913\t0\t2\t2\t2\t22\t822\t822\t4822\t4822\t44\t45\tMDAAAA\tBIEAAA\tHHHHxx\n9476\t2914\t0\t0\t6\t16\t76\t476\t1476\t4476\t9476\t152\t153\tMAAAAA\tCIEAAA\tOOOOxx\n7535\t2915\t1\t3\t5\t15\t35\t535\t1535\t2535\t7535\t70\t71\tVDAAAA\tDIEAAA\tVVVVxx\n8738\t2916\t0\t2\t8\t18\t38\t738\t738\t3738\t8738\t76\t77\tCYAAAA\tEIEAAA\tAAAAxx\n7946\t2917\t0\t2\t6\t6\t46\t946\t1946\t2946\t7946\t92\t93\tQTAAAA\tFIEAAA\tHHHHxx\n8143\t2918\t1\t3\t3\t3\t43\t143\t143\t3143\t8143\t86\t87\tFBAAAA\tGIEAAA\tOOOOxx\n2623\t2919\t1\t3\t3\t3\t23\t623\t623\t2623\t2623\t46\t47\tXWAAAA\tHIEAAA\tVVVVxx\n5209\t2920\t1\t1\t9\t9\t9\t209\t1209\t209\t5209\t18\t19\tJSAAAA\tIIEAAA\tAAAAxx\n7674\t2921\t0\t2\t4\t14\t74\t674\t1674\t2674\t7674\t148\t149\tEJAAAA\tJIEAAA\tHHHHxx\n1135\t2922\t1\t3\t5\t15\t35\t135\t1135\t1135\t1135\t70\t71\tRRAAAA\tKIEAAA\tOOOOxx\n424\t2923\t0\t0\t4\t4\t24\t424\t424\t424\t424\t48\t49\tIQAAAA\tLIEAAA\tVVVVxx\n942\t2924\t0\t2\t2\t2\t42\t942\t942\t942\t942\t84\t85\tGKAAAA\tMIEAAA\tAAAAxx\n7813\t2925\t1\t1\t3\t13\t13\t813\t1813\t2813\t7813\t26\t27\tNOAAAA\tNIEAAA\tHHHHxx\n3539\t2926\t1\t3\t9\t19\t39\t539\t1539\t3539\t3539\t78\t79\tDGAAAA\tOIEAAA\tOOOOxx\n2909\t2927\t1\t1\t9\t9\t9\t909\t909\t2909\t2909\t18\t19\tXHAAAA\tPIEAAA\tVVVVxx\n3748\t2928\t0\t0\t8\t8\t48\t748\t1748\t3748\t3748\t96\t97\tEOAAAA\tQIEAAA\tAAAAxx\n2996\t2929\t0\t0\t6\t16\t96\t996\t996\t2996\t2996\t192\t193\tGLAAAA\tRIEAAA\tHHHHxx\n1869\t2930\t1\t1\t9\t9\t69\t869\t1869\t1869\t1869\t138\t139\tXTAAAA\tSIEAAA\tOOOOxx\n8151\t2931\t1\t3\t1\t11\t51\t151\t151\t3151\t8151\t102\t103\tNBAAAA\tTIEAAA\tVVVVxx\n6361\t2932\t1\t1\t1\t1\t61\t361\t361\t1361\t6361\t122\t123\tRKAAAA\tUIEAAA\tAAAAxx\n5568\t2933\t0\t0\t8\t8\t68\t568\t1568\t568\t5568\t136\t137\tEGAAAA\tVIEAAA\tHHHHxx\n2796\t2934\t0\t0\t6\t16\t96\t796\t796\t2796\t2796\t192\t193\tODAAAA\tWIEAAA\tOOOOxx\n8489\t2935\t1\t1\t9\t9\t89\t489\t489\t3489\t8489\t178\t179\tNOAAAA\tXIEAAA\tVVVVxx\n9183\t2936\t1\t3\t3\t3\t83\t183\t1183\t4183\t9183\t166\t167\tFPAAAA\tYIEAAA\tAAAAxx\n8227\t2937\t1\t3\t7\t7\t27\t227\t227\t3227\t8227\t54\t55\tLEAAAA\tZIEAAA\tHHHHxx\n1844\t2938\t0\t0\t4\t4\t44\t844\t1844\t1844\t1844\t88\t89\tYSAAAA\tAJEAAA\tOOOOxx\n3975\t2939\t1\t3\t5\t15\t75\t975\t1975\t3975\t3975\t150\t151\tXWAAAA\tBJEAAA\tVVVVxx\n6490\t2940\t0\t2\t0\t10\t90\t490\t490\t1490\t6490\t180\t181\tQPAAAA\tCJEAAA\tAAAAxx\n8303\t2941\t1\t3\t3\t3\t3\t303\t303\t3303\t8303\t6\t7\tJHAAAA\tDJEAAA\tHHHHxx\n7334\t2942\t0\t2\t4\t14\t34\t334\t1334\t2334\t7334\t68\t69\tCWAAAA\tEJEAAA\tOOOOxx\n2382\t2943\t0\t2\t2\t2\t82\t382\t382\t2382\t2382\t164\t165\tQNAAAA\tFJEAAA\tVVVVxx\n177\t2944\t1\t1\t7\t17\t77\t177\t177\t177\t177\t154\t155\tVGAAAA\tGJEAAA\tAAAAxx\n8117\t2945\t1\t1\t7\t17\t17\t117\t117\t3117\t8117\t34\t35\tFAAAAA\tHJEAAA\tHHHHxx\n5485\t2946\t1\t1\t5\t5\t85\t485\t1485\t485\t5485\t170\t171\tZCAAAA\tIJEAAA\tOOOOxx\n6544\t2947\t0\t0\t4\t4\t44\t544\t544\t1544\t6544\t88\t89\tSRAAAA\tJJEAAA\tVVVVxx\n8517\t2948\t1\t1\t7\t17\t17\t517\t517\t3517\t8517\t34\t35\tPPAAAA\tKJEAAA\tAAAAxx\n2252\t2949\t0\t0\t2\t12\t52\t252\t252\t2252\t2252\t104\t105\tQIAAAA\tLJEAAA\tHHHHxx\n4480\t2950\t0\t0\t0\t0\t80\t480\t480\t4480\t4480\t160\t161\tIQAAAA\tMJEAAA\tOOOOxx\n4785\t2951\t1\t1\t5\t5\t85\t785\t785\t4785\t4785\t170\t171\tBCAAAA\tNJEAAA\tVVVVxx\n9700\t2952\t0\t0\t0\t0\t0\t700\t1700\t4700\t9700\t0\t1\tCJAAAA\tOJEAAA\tAAAAxx\n2122\t2953\t0\t2\t2\t2\t22\t122\t122\t2122\t2122\t44\t45\tQDAAAA\tPJEAAA\tHHHHxx\n8783\t2954\t1\t3\t3\t3\t83\t783\t783\t3783\t8783\t166\t167\tVZAAAA\tQJEAAA\tOOOOxx\n1453\t2955\t1\t1\t3\t13\t53\t453\t1453\t1453\t1453\t106\t107\tXDAAAA\tRJEAAA\tVVVVxx\n3908\t2956\t0\t0\t8\t8\t8\t908\t1908\t3908\t3908\t16\t17\tIUAAAA\tSJEAAA\tAAAAxx\n7707\t2957\t1\t3\t7\t7\t7\t707\t1707\t2707\t7707\t14\t15\tLKAAAA\tTJEAAA\tHHHHxx\n9049\t2958\t1\t1\t9\t9\t49\t49\t1049\t4049\t9049\t98\t99\tBKAAAA\tUJEAAA\tOOOOxx\n654\t2959\t0\t2\t4\t14\t54\t654\t654\t654\t654\t108\t109\tEZAAAA\tVJEAAA\tVVVVxx\n3336\t2960\t0\t0\t6\t16\t36\t336\t1336\t3336\t3336\t72\t73\tIYAAAA\tWJEAAA\tAAAAxx\n622\t2961\t0\t2\t2\t2\t22\t622\t622\t622\t622\t44\t45\tYXAAAA\tXJEAAA\tHHHHxx\n8398\t2962\t0\t2\t8\t18\t98\t398\t398\t3398\t8398\t196\t197\tALAAAA\tYJEAAA\tOOOOxx\n9193\t2963\t1\t1\t3\t13\t93\t193\t1193\t4193\t9193\t186\t187\tPPAAAA\tZJEAAA\tVVVVxx\n7896\t2964\t0\t0\t6\t16\t96\t896\t1896\t2896\t7896\t192\t193\tSRAAAA\tAKEAAA\tAAAAxx\n9798\t2965\t0\t2\t8\t18\t98\t798\t1798\t4798\t9798\t196\t197\tWMAAAA\tBKEAAA\tHHHHxx\n2881\t2966\t1\t1\t1\t1\t81\t881\t881\t2881\t2881\t162\t163\tVGAAAA\tCKEAAA\tOOOOxx\n672\t2967\t0\t0\t2\t12\t72\t672\t672\t672\t672\t144\t145\tWZAAAA\tDKEAAA\tVVVVxx\n6743\t2968\t1\t3\t3\t3\t43\t743\t743\t1743\t6743\t86\t87\tJZAAAA\tEKEAAA\tAAAAxx\n8935\t2969\t1\t3\t5\t15\t35\t935\t935\t3935\t8935\t70\t71\tRFAAAA\tFKEAAA\tHHHHxx\n2426\t2970\t0\t2\t6\t6\t26\t426\t426\t2426\t2426\t52\t53\tIPAAAA\tGKEAAA\tOOOOxx\n722\t2971\t0\t2\t2\t2\t22\t722\t722\t722\t722\t44\t45\tUBAAAA\tHKEAAA\tVVVVxx\n5088\t2972\t0\t0\t8\t8\t88\t88\t1088\t88\t5088\t176\t177\tSNAAAA\tIKEAAA\tAAAAxx\n8677\t2973\t1\t1\t7\t17\t77\t677\t677\t3677\t8677\t154\t155\tTVAAAA\tJKEAAA\tHHHHxx\n6963\t2974\t1\t3\t3\t3\t63\t963\t963\t1963\t6963\t126\t127\tVHAAAA\tKKEAAA\tOOOOxx\n1653\t2975\t1\t1\t3\t13\t53\t653\t1653\t1653\t1653\t106\t107\tPLAAAA\tLKEAAA\tVVVVxx\n7295\t2976\t1\t3\t5\t15\t95\t295\t1295\t2295\t7295\t190\t191\tPUAAAA\tMKEAAA\tAAAAxx\n6675\t2977\t1\t3\t5\t15\t75\t675\t675\t1675\t6675\t150\t151\tTWAAAA\tNKEAAA\tHHHHxx\n7183\t2978\t1\t3\t3\t3\t83\t183\t1183\t2183\t7183\t166\t167\tHQAAAA\tOKEAAA\tOOOOxx\n4378\t2979\t0\t2\t8\t18\t78\t378\t378\t4378\t4378\t156\t157\tKMAAAA\tPKEAAA\tVVVVxx\n2157\t2980\t1\t1\t7\t17\t57\t157\t157\t2157\t2157\t114\t115\tZEAAAA\tQKEAAA\tAAAAxx\n2621\t2981\t1\t1\t1\t1\t21\t621\t621\t2621\t2621\t42\t43\tVWAAAA\tRKEAAA\tHHHHxx\n9278\t2982\t0\t2\t8\t18\t78\t278\t1278\t4278\t9278\t156\t157\tWSAAAA\tSKEAAA\tOOOOxx\n79\t2983\t1\t3\t9\t19\t79\t79\t79\t79\t79\t158\t159\tBDAAAA\tTKEAAA\tVVVVxx\n7358\t2984\t0\t2\t8\t18\t58\t358\t1358\t2358\t7358\t116\t117\tAXAAAA\tUKEAAA\tAAAAxx\n3589\t2985\t1\t1\t9\t9\t89\t589\t1589\t3589\t3589\t178\t179\tBIAAAA\tVKEAAA\tHHHHxx\n1254\t2986\t0\t2\t4\t14\t54\t254\t1254\t1254\t1254\t108\t109\tGWAAAA\tWKEAAA\tOOOOxx\n3490\t2987\t0\t2\t0\t10\t90\t490\t1490\t3490\t3490\t180\t181\tGEAAAA\tXKEAAA\tVVVVxx\n7533\t2988\t1\t1\t3\t13\t33\t533\t1533\t2533\t7533\t66\t67\tTDAAAA\tYKEAAA\tAAAAxx\n2800\t2989\t0\t0\t0\t0\t0\t800\t800\t2800\t2800\t0\t1\tSDAAAA\tZKEAAA\tHHHHxx\n351\t2990\t1\t3\t1\t11\t51\t351\t351\t351\t351\t102\t103\tNNAAAA\tALEAAA\tOOOOxx\n4359\t2991\t1\t3\t9\t19\t59\t359\t359\t4359\t4359\t118\t119\tRLAAAA\tBLEAAA\tVVVVxx\n5788\t2992\t0\t0\t8\t8\t88\t788\t1788\t788\t5788\t176\t177\tQOAAAA\tCLEAAA\tAAAAxx\n5521\t2993\t1\t1\t1\t1\t21\t521\t1521\t521\t5521\t42\t43\tJEAAAA\tDLEAAA\tHHHHxx\n3351\t2994\t1\t3\t1\t11\t51\t351\t1351\t3351\t3351\t102\t103\tXYAAAA\tELEAAA\tOOOOxx\n5129\t2995\t1\t1\t9\t9\t29\t129\t1129\t129\t5129\t58\t59\tHPAAAA\tFLEAAA\tVVVVxx\n315\t2996\t1\t3\t5\t15\t15\t315\t315\t315\t315\t30\t31\tDMAAAA\tGLEAAA\tAAAAxx\n7552\t2997\t0\t0\t2\t12\t52\t552\t1552\t2552\t7552\t104\t105\tMEAAAA\tHLEAAA\tHHHHxx\n9176\t2998\t0\t0\t6\t16\t76\t176\t1176\t4176\t9176\t152\t153\tYOAAAA\tILEAAA\tOOOOxx\n7458\t2999\t0\t2\t8\t18\t58\t458\t1458\t2458\t7458\t116\t117\tWAAAAA\tJLEAAA\tVVVVxx\n279\t3000\t1\t3\t9\t19\t79\t279\t279\t279\t279\t158\t159\tTKAAAA\tKLEAAA\tAAAAxx\n738\t3001\t0\t2\t8\t18\t38\t738\t738\t738\t738\t76\t77\tKCAAAA\tLLEAAA\tHHHHxx\n2557\t3002\t1\t1\t7\t17\t57\t557\t557\t2557\t2557\t114\t115\tJUAAAA\tMLEAAA\tOOOOxx\n9395\t3003\t1\t3\t5\t15\t95\t395\t1395\t4395\t9395\t190\t191\tJXAAAA\tNLEAAA\tVVVVxx\n7214\t3004\t0\t2\t4\t14\t14\t214\t1214\t2214\t7214\t28\t29\tMRAAAA\tOLEAAA\tAAAAxx\n6354\t3005\t0\t2\t4\t14\t54\t354\t354\t1354\t6354\t108\t109\tKKAAAA\tPLEAAA\tHHHHxx\n4799\t3006\t1\t3\t9\t19\t99\t799\t799\t4799\t4799\t198\t199\tPCAAAA\tQLEAAA\tOOOOxx\n1231\t3007\t1\t3\t1\t11\t31\t231\t1231\t1231\t1231\t62\t63\tJVAAAA\tRLEAAA\tVVVVxx\n5252\t3008\t0\t0\t2\t12\t52\t252\t1252\t252\t5252\t104\t105\tAUAAAA\tSLEAAA\tAAAAxx\n5250\t3009\t0\t2\t0\t10\t50\t250\t1250\t250\t5250\t100\t101\tYTAAAA\tTLEAAA\tHHHHxx\n9319\t3010\t1\t3\t9\t19\t19\t319\t1319\t4319\t9319\t38\t39\tLUAAAA\tULEAAA\tOOOOxx\n1724\t3011\t0\t0\t4\t4\t24\t724\t1724\t1724\t1724\t48\t49\tIOAAAA\tVLEAAA\tVVVVxx\n7947\t3012\t1\t3\t7\t7\t47\t947\t1947\t2947\t7947\t94\t95\tRTAAAA\tWLEAAA\tAAAAxx\n1105\t3013\t1\t1\t5\t5\t5\t105\t1105\t1105\t1105\t10\t11\tNQAAAA\tXLEAAA\tHHHHxx\n1417\t3014\t1\t1\t7\t17\t17\t417\t1417\t1417\t1417\t34\t35\tNCAAAA\tYLEAAA\tOOOOxx\n7101\t3015\t1\t1\t1\t1\t1\t101\t1101\t2101\t7101\t2\t3\tDNAAAA\tZLEAAA\tVVVVxx\n1088\t3016\t0\t0\t8\t8\t88\t88\t1088\t1088\t1088\t176\t177\tWPAAAA\tAMEAAA\tAAAAxx\n979\t3017\t1\t3\t9\t19\t79\t979\t979\t979\t979\t158\t159\tRLAAAA\tBMEAAA\tHHHHxx\n7589\t3018\t1\t1\t9\t9\t89\t589\t1589\t2589\t7589\t178\t179\tXFAAAA\tCMEAAA\tOOOOxx\n8952\t3019\t0\t0\t2\t12\t52\t952\t952\t3952\t8952\t104\t105\tIGAAAA\tDMEAAA\tVVVVxx\n2864\t3020\t0\t0\t4\t4\t64\t864\t864\t2864\t2864\t128\t129\tEGAAAA\tEMEAAA\tAAAAxx\n234\t3021\t0\t2\t4\t14\t34\t234\t234\t234\t234\t68\t69\tAJAAAA\tFMEAAA\tHHHHxx\n7231\t3022\t1\t3\t1\t11\t31\t231\t1231\t2231\t7231\t62\t63\tDSAAAA\tGMEAAA\tOOOOxx\n6792\t3023\t0\t0\t2\t12\t92\t792\t792\t1792\t6792\t184\t185\tGBAAAA\tHMEAAA\tVVVVxx\n4311\t3024\t1\t3\t1\t11\t11\t311\t311\t4311\t4311\t22\t23\tVJAAAA\tIMEAAA\tAAAAxx\n3374\t3025\t0\t2\t4\t14\t74\t374\t1374\t3374\t3374\t148\t149\tUZAAAA\tJMEAAA\tHHHHxx\n3367\t3026\t1\t3\t7\t7\t67\t367\t1367\t3367\t3367\t134\t135\tNZAAAA\tKMEAAA\tOOOOxx\n2598\t3027\t0\t2\t8\t18\t98\t598\t598\t2598\t2598\t196\t197\tYVAAAA\tLMEAAA\tVVVVxx\n1033\t3028\t1\t1\t3\t13\t33\t33\t1033\t1033\t1033\t66\t67\tTNAAAA\tMMEAAA\tAAAAxx\n7803\t3029\t1\t3\t3\t3\t3\t803\t1803\t2803\t7803\t6\t7\tDOAAAA\tNMEAAA\tHHHHxx\n3870\t3030\t0\t2\t0\t10\t70\t870\t1870\t3870\t3870\t140\t141\tWSAAAA\tOMEAAA\tOOOOxx\n4962\t3031\t0\t2\t2\t2\t62\t962\t962\t4962\t4962\t124\t125\tWIAAAA\tPMEAAA\tVVVVxx\n4842\t3032\t0\t2\t2\t2\t42\t842\t842\t4842\t4842\t84\t85\tGEAAAA\tQMEAAA\tAAAAxx\n8814\t3033\t0\t2\t4\t14\t14\t814\t814\t3814\t8814\t28\t29\tABAAAA\tRMEAAA\tHHHHxx\n3429\t3034\t1\t1\t9\t9\t29\t429\t1429\t3429\t3429\t58\t59\tXBAAAA\tSMEAAA\tOOOOxx\n6550\t3035\t0\t2\t0\t10\t50\t550\t550\t1550\t6550\t100\t101\tYRAAAA\tTMEAAA\tVVVVxx\n6317\t3036\t1\t1\t7\t17\t17\t317\t317\t1317\t6317\t34\t35\tZIAAAA\tUMEAAA\tAAAAxx\n5023\t3037\t1\t3\t3\t3\t23\t23\t1023\t23\t5023\t46\t47\tFLAAAA\tVMEAAA\tHHHHxx\n5825\t3038\t1\t1\t5\t5\t25\t825\t1825\t825\t5825\t50\t51\tBQAAAA\tWMEAAA\tOOOOxx\n5297\t3039\t1\t1\t7\t17\t97\t297\t1297\t297\t5297\t194\t195\tTVAAAA\tXMEAAA\tVVVVxx\n8764\t3040\t0\t0\t4\t4\t64\t764\t764\t3764\t8764\t128\t129\tCZAAAA\tYMEAAA\tAAAAxx\n5084\t3041\t0\t0\t4\t4\t84\t84\t1084\t84\t5084\t168\t169\tONAAAA\tZMEAAA\tHHHHxx\n6808\t3042\t0\t0\t8\t8\t8\t808\t808\t1808\t6808\t16\t17\tWBAAAA\tANEAAA\tOOOOxx\n1780\t3043\t0\t0\t0\t0\t80\t780\t1780\t1780\t1780\t160\t161\tMQAAAA\tBNEAAA\tVVVVxx\n4092\t3044\t0\t0\t2\t12\t92\t92\t92\t4092\t4092\t184\t185\tKBAAAA\tCNEAAA\tAAAAxx\n3618\t3045\t0\t2\t8\t18\t18\t618\t1618\t3618\t3618\t36\t37\tEJAAAA\tDNEAAA\tHHHHxx\n7299\t3046\t1\t3\t9\t19\t99\t299\t1299\t2299\t7299\t198\t199\tTUAAAA\tENEAAA\tOOOOxx\n8544\t3047\t0\t0\t4\t4\t44\t544\t544\t3544\t8544\t88\t89\tQQAAAA\tFNEAAA\tVVVVxx\n2359\t3048\t1\t3\t9\t19\t59\t359\t359\t2359\t2359\t118\t119\tTMAAAA\tGNEAAA\tAAAAxx\n1939\t3049\t1\t3\t9\t19\t39\t939\t1939\t1939\t1939\t78\t79\tPWAAAA\tHNEAAA\tHHHHxx\n5834\t3050\t0\t2\t4\t14\t34\t834\t1834\t834\t5834\t68\t69\tKQAAAA\tINEAAA\tOOOOxx\n1997\t3051\t1\t1\t7\t17\t97\t997\t1997\t1997\t1997\t194\t195\tVYAAAA\tJNEAAA\tVVVVxx\n7917\t3052\t1\t1\t7\t17\t17\t917\t1917\t2917\t7917\t34\t35\tNSAAAA\tKNEAAA\tAAAAxx\n2098\t3053\t0\t2\t8\t18\t98\t98\t98\t2098\t2098\t196\t197\tSCAAAA\tLNEAAA\tHHHHxx\n7576\t3054\t0\t0\t6\t16\t76\t576\t1576\t2576\t7576\t152\t153\tKFAAAA\tMNEAAA\tOOOOxx\n376\t3055\t0\t0\t6\t16\t76\t376\t376\t376\t376\t152\t153\tMOAAAA\tNNEAAA\tVVVVxx\n8535\t3056\t1\t3\t5\t15\t35\t535\t535\t3535\t8535\t70\t71\tHQAAAA\tONEAAA\tAAAAxx\n5659\t3057\t1\t3\t9\t19\t59\t659\t1659\t659\t5659\t118\t119\tRJAAAA\tPNEAAA\tHHHHxx\n2786\t3058\t0\t2\t6\t6\t86\t786\t786\t2786\t2786\t172\t173\tEDAAAA\tQNEAAA\tOOOOxx\n8820\t3059\t0\t0\t0\t0\t20\t820\t820\t3820\t8820\t40\t41\tGBAAAA\tRNEAAA\tVVVVxx\n1229\t3060\t1\t1\t9\t9\t29\t229\t1229\t1229\t1229\t58\t59\tHVAAAA\tSNEAAA\tAAAAxx\n9321\t3061\t1\t1\t1\t1\t21\t321\t1321\t4321\t9321\t42\t43\tNUAAAA\tTNEAAA\tHHHHxx\n7662\t3062\t0\t2\t2\t2\t62\t662\t1662\t2662\t7662\t124\t125\tSIAAAA\tUNEAAA\tOOOOxx\n5535\t3063\t1\t3\t5\t15\t35\t535\t1535\t535\t5535\t70\t71\tXEAAAA\tVNEAAA\tVVVVxx\n4889\t3064\t1\t1\t9\t9\t89\t889\t889\t4889\t4889\t178\t179\tBGAAAA\tWNEAAA\tAAAAxx\n8259\t3065\t1\t3\t9\t19\t59\t259\t259\t3259\t8259\t118\t119\tRFAAAA\tXNEAAA\tHHHHxx\n6789\t3066\t1\t1\t9\t9\t89\t789\t789\t1789\t6789\t178\t179\tDBAAAA\tYNEAAA\tOOOOxx\n5411\t3067\t1\t3\t1\t11\t11\t411\t1411\t411\t5411\t22\t23\tDAAAAA\tZNEAAA\tVVVVxx\n6992\t3068\t0\t0\t2\t12\t92\t992\t992\t1992\t6992\t184\t185\tYIAAAA\tAOEAAA\tAAAAxx\n7698\t3069\t0\t2\t8\t18\t98\t698\t1698\t2698\t7698\t196\t197\tCKAAAA\tBOEAAA\tHHHHxx\n2342\t3070\t0\t2\t2\t2\t42\t342\t342\t2342\t2342\t84\t85\tCMAAAA\tCOEAAA\tOOOOxx\n1501\t3071\t1\t1\t1\t1\t1\t501\t1501\t1501\t1501\t2\t3\tTFAAAA\tDOEAAA\tVVVVxx\n6322\t3072\t0\t2\t2\t2\t22\t322\t322\t1322\t6322\t44\t45\tEJAAAA\tEOEAAA\tAAAAxx\n9861\t3073\t1\t1\t1\t1\t61\t861\t1861\t4861\t9861\t122\t123\tHPAAAA\tFOEAAA\tHHHHxx\n9802\t3074\t0\t2\t2\t2\t2\t802\t1802\t4802\t9802\t4\t5\tANAAAA\tGOEAAA\tOOOOxx\n4750\t3075\t0\t2\t0\t10\t50\t750\t750\t4750\t4750\t100\t101\tSAAAAA\tHOEAAA\tVVVVxx\n5855\t3076\t1\t3\t5\t15\t55\t855\t1855\t855\t5855\t110\t111\tFRAAAA\tIOEAAA\tAAAAxx\n4304\t3077\t0\t0\t4\t4\t4\t304\t304\t4304\t4304\t8\t9\tOJAAAA\tJOEAAA\tHHHHxx\n2605\t3078\t1\t1\t5\t5\t5\t605\t605\t2605\t2605\t10\t11\tFWAAAA\tKOEAAA\tOOOOxx\n1802\t3079\t0\t2\t2\t2\t2\t802\t1802\t1802\t1802\t4\t5\tIRAAAA\tLOEAAA\tVVVVxx\n9368\t3080\t0\t0\t8\t8\t68\t368\t1368\t4368\t9368\t136\t137\tIWAAAA\tMOEAAA\tAAAAxx\n7107\t3081\t1\t3\t7\t7\t7\t107\t1107\t2107\t7107\t14\t15\tJNAAAA\tNOEAAA\tHHHHxx\n8895\t3082\t1\t3\t5\t15\t95\t895\t895\t3895\t8895\t190\t191\tDEAAAA\tOOEAAA\tOOOOxx\n3750\t3083\t0\t2\t0\t10\t50\t750\t1750\t3750\t3750\t100\t101\tGOAAAA\tPOEAAA\tVVVVxx\n8934\t3084\t0\t2\t4\t14\t34\t934\t934\t3934\t8934\t68\t69\tQFAAAA\tQOEAAA\tAAAAxx\n9464\t3085\t0\t0\t4\t4\t64\t464\t1464\t4464\t9464\t128\t129\tAAAAAA\tROEAAA\tHHHHxx\n1928\t3086\t0\t0\t8\t8\t28\t928\t1928\t1928\t1928\t56\t57\tEWAAAA\tSOEAAA\tOOOOxx\n3196\t3087\t0\t0\t6\t16\t96\t196\t1196\t3196\t3196\t192\t193\tYSAAAA\tTOEAAA\tVVVVxx\n5256\t3088\t0\t0\t6\t16\t56\t256\t1256\t256\t5256\t112\t113\tEUAAAA\tUOEAAA\tAAAAxx\n7119\t3089\t1\t3\t9\t19\t19\t119\t1119\t2119\t7119\t38\t39\tVNAAAA\tVOEAAA\tHHHHxx\n4495\t3090\t1\t3\t5\t15\t95\t495\t495\t4495\t4495\t190\t191\tXQAAAA\tWOEAAA\tOOOOxx\n9292\t3091\t0\t0\t2\t12\t92\t292\t1292\t4292\t9292\t184\t185\tKTAAAA\tXOEAAA\tVVVVxx\n1617\t3092\t1\t1\t7\t17\t17\t617\t1617\t1617\t1617\t34\t35\tFKAAAA\tYOEAAA\tAAAAxx\n481\t3093\t1\t1\t1\t1\t81\t481\t481\t481\t481\t162\t163\tNSAAAA\tZOEAAA\tHHHHxx\n56\t3094\t0\t0\t6\t16\t56\t56\t56\t56\t56\t112\t113\tECAAAA\tAPEAAA\tOOOOxx\n9120\t3095\t0\t0\t0\t0\t20\t120\t1120\t4120\t9120\t40\t41\tUMAAAA\tBPEAAA\tVVVVxx\n1306\t3096\t0\t2\t6\t6\t6\t306\t1306\t1306\t1306\t12\t13\tGYAAAA\tCPEAAA\tAAAAxx\n7773\t3097\t1\t1\t3\t13\t73\t773\t1773\t2773\t7773\t146\t147\tZMAAAA\tDPEAAA\tHHHHxx\n4863\t3098\t1\t3\t3\t3\t63\t863\t863\t4863\t4863\t126\t127\tBFAAAA\tEPEAAA\tOOOOxx\n1114\t3099\t0\t2\t4\t14\t14\t114\t1114\t1114\t1114\t28\t29\tWQAAAA\tFPEAAA\tVVVVxx\n8124\t3100\t0\t0\t4\t4\t24\t124\t124\t3124\t8124\t48\t49\tMAAAAA\tGPEAAA\tAAAAxx\n6254\t3101\t0\t2\t4\t14\t54\t254\t254\t1254\t6254\t108\t109\tOGAAAA\tHPEAAA\tHHHHxx\n8109\t3102\t1\t1\t9\t9\t9\t109\t109\t3109\t8109\t18\t19\tXZAAAA\tIPEAAA\tOOOOxx\n1747\t3103\t1\t3\t7\t7\t47\t747\t1747\t1747\t1747\t94\t95\tFPAAAA\tJPEAAA\tVVVVxx\n6185\t3104\t1\t1\t5\t5\t85\t185\t185\t1185\t6185\t170\t171\tXDAAAA\tKPEAAA\tAAAAxx\n3388\t3105\t0\t0\t8\t8\t88\t388\t1388\t3388\t3388\t176\t177\tIAAAAA\tLPEAAA\tHHHHxx\n4905\t3106\t1\t1\t5\t5\t5\t905\t905\t4905\t4905\t10\t11\tRGAAAA\tMPEAAA\tOOOOxx\n5728\t3107\t0\t0\t8\t8\t28\t728\t1728\t728\t5728\t56\t57\tIMAAAA\tNPEAAA\tVVVVxx\n7507\t3108\t1\t3\t7\t7\t7\t507\t1507\t2507\t7507\t14\t15\tTCAAAA\tOPEAAA\tAAAAxx\n5662\t3109\t0\t2\t2\t2\t62\t662\t1662\t662\t5662\t124\t125\tUJAAAA\tPPEAAA\tHHHHxx\n1686\t3110\t0\t2\t6\t6\t86\t686\t1686\t1686\t1686\t172\t173\tWMAAAA\tQPEAAA\tOOOOxx\n5202\t3111\t0\t2\t2\t2\t2\t202\t1202\t202\t5202\t4\t5\tCSAAAA\tRPEAAA\tVVVVxx\n6905\t3112\t1\t1\t5\t5\t5\t905\t905\t1905\t6905\t10\t11\tPFAAAA\tSPEAAA\tAAAAxx\n9577\t3113\t1\t1\t7\t17\t77\t577\t1577\t4577\t9577\t154\t155\tJEAAAA\tTPEAAA\tHHHHxx\n7194\t3114\t0\t2\t4\t14\t94\t194\t1194\t2194\t7194\t188\t189\tSQAAAA\tUPEAAA\tOOOOxx\n7016\t3115\t0\t0\t6\t16\t16\t16\t1016\t2016\t7016\t32\t33\tWJAAAA\tVPEAAA\tVVVVxx\n8905\t3116\t1\t1\t5\t5\t5\t905\t905\t3905\t8905\t10\t11\tNEAAAA\tWPEAAA\tAAAAxx\n3419\t3117\t1\t3\t9\t19\t19\t419\t1419\t3419\t3419\t38\t39\tNBAAAA\tXPEAAA\tHHHHxx\n6881\t3118\t1\t1\t1\t1\t81\t881\t881\t1881\t6881\t162\t163\tREAAAA\tYPEAAA\tOOOOxx\n8370\t3119\t0\t2\t0\t10\t70\t370\t370\t3370\t8370\t140\t141\tYJAAAA\tZPEAAA\tVVVVxx\n6117\t3120\t1\t1\t7\t17\t17\t117\t117\t1117\t6117\t34\t35\tHBAAAA\tAQEAAA\tAAAAxx\n1636\t3121\t0\t0\t6\t16\t36\t636\t1636\t1636\t1636\t72\t73\tYKAAAA\tBQEAAA\tHHHHxx\n6857\t3122\t1\t1\t7\t17\t57\t857\t857\t1857\t6857\t114\t115\tTDAAAA\tCQEAAA\tOOOOxx\n7163\t3123\t1\t3\t3\t3\t63\t163\t1163\t2163\t7163\t126\t127\tNPAAAA\tDQEAAA\tVVVVxx\n5040\t3124\t0\t0\t0\t0\t40\t40\t1040\t40\t5040\t80\t81\tWLAAAA\tEQEAAA\tAAAAxx\n6263\t3125\t1\t3\t3\t3\t63\t263\t263\t1263\t6263\t126\t127\tXGAAAA\tFQEAAA\tHHHHxx\n4809\t3126\t1\t1\t9\t9\t9\t809\t809\t4809\t4809\t18\t19\tZCAAAA\tGQEAAA\tOOOOxx\n900\t3127\t0\t0\t0\t0\t0\t900\t900\t900\t900\t0\t1\tQIAAAA\tHQEAAA\tVVVVxx\n3199\t3128\t1\t3\t9\t19\t99\t199\t1199\t3199\t3199\t198\t199\tBTAAAA\tIQEAAA\tAAAAxx\n4156\t3129\t0\t0\t6\t16\t56\t156\t156\t4156\t4156\t112\t113\tWDAAAA\tJQEAAA\tHHHHxx\n3501\t3130\t1\t1\t1\t1\t1\t501\t1501\t3501\t3501\t2\t3\tREAAAA\tKQEAAA\tOOOOxx\n164\t3131\t0\t0\t4\t4\t64\t164\t164\t164\t164\t128\t129\tIGAAAA\tLQEAAA\tVVVVxx\n9548\t3132\t0\t0\t8\t8\t48\t548\t1548\t4548\t9548\t96\t97\tGDAAAA\tMQEAAA\tAAAAxx\n1149\t3133\t1\t1\t9\t9\t49\t149\t1149\t1149\t1149\t98\t99\tFSAAAA\tNQEAAA\tHHHHxx\n1962\t3134\t0\t2\t2\t2\t62\t962\t1962\t1962\t1962\t124\t125\tMXAAAA\tOQEAAA\tOOOOxx\n4072\t3135\t0\t0\t2\t12\t72\t72\t72\t4072\t4072\t144\t145\tQAAAAA\tPQEAAA\tVVVVxx\n4280\t3136\t0\t0\t0\t0\t80\t280\t280\t4280\t4280\t160\t161\tQIAAAA\tQQEAAA\tAAAAxx\n1398\t3137\t0\t2\t8\t18\t98\t398\t1398\t1398\t1398\t196\t197\tUBAAAA\tRQEAAA\tHHHHxx\n725\t3138\t1\t1\t5\t5\t25\t725\t725\t725\t725\t50\t51\tXBAAAA\tSQEAAA\tOOOOxx\n3988\t3139\t0\t0\t8\t8\t88\t988\t1988\t3988\t3988\t176\t177\tKXAAAA\tTQEAAA\tVVVVxx\n5059\t3140\t1\t3\t9\t19\t59\t59\t1059\t59\t5059\t118\t119\tPMAAAA\tUQEAAA\tAAAAxx\n2632\t3141\t0\t0\t2\t12\t32\t632\t632\t2632\t2632\t64\t65\tGXAAAA\tVQEAAA\tHHHHxx\n1909\t3142\t1\t1\t9\t9\t9\t909\t1909\t1909\t1909\t18\t19\tLVAAAA\tWQEAAA\tOOOOxx\n6827\t3143\t1\t3\t7\t7\t27\t827\t827\t1827\t6827\t54\t55\tPCAAAA\tXQEAAA\tVVVVxx\n8156\t3144\t0\t0\t6\t16\t56\t156\t156\t3156\t8156\t112\t113\tSBAAAA\tYQEAAA\tAAAAxx\n1192\t3145\t0\t0\t2\t12\t92\t192\t1192\t1192\t1192\t184\t185\tWTAAAA\tZQEAAA\tHHHHxx\n9545\t3146\t1\t1\t5\t5\t45\t545\t1545\t4545\t9545\t90\t91\tDDAAAA\tAREAAA\tOOOOxx\n2249\t3147\t1\t1\t9\t9\t49\t249\t249\t2249\t2249\t98\t99\tNIAAAA\tBREAAA\tVVVVxx\n5580\t3148\t0\t0\t0\t0\t80\t580\t1580\t580\t5580\t160\t161\tQGAAAA\tCREAAA\tAAAAxx\n8403\t3149\t1\t3\t3\t3\t3\t403\t403\t3403\t8403\t6\t7\tFLAAAA\tDREAAA\tHHHHxx\n4024\t3150\t0\t0\t4\t4\t24\t24\t24\t4024\t4024\t48\t49\tUYAAAA\tEREAAA\tOOOOxx\n1866\t3151\t0\t2\t6\t6\t66\t866\t1866\t1866\t1866\t132\t133\tUTAAAA\tFREAAA\tVVVVxx\n9251\t3152\t1\t3\t1\t11\t51\t251\t1251\t4251\t9251\t102\t103\tVRAAAA\tGREAAA\tAAAAxx\n9979\t3153\t1\t3\t9\t19\t79\t979\t1979\t4979\t9979\t158\t159\tVTAAAA\tHREAAA\tHHHHxx\n9899\t3154\t1\t3\t9\t19\t99\t899\t1899\t4899\t9899\t198\t199\tTQAAAA\tIREAAA\tOOOOxx\n2540\t3155\t0\t0\t0\t0\t40\t540\t540\t2540\t2540\t80\t81\tSTAAAA\tJREAAA\tVVVVxx\n8957\t3156\t1\t1\t7\t17\t57\t957\t957\t3957\t8957\t114\t115\tNGAAAA\tKREAAA\tAAAAxx\n7702\t3157\t0\t2\t2\t2\t2\t702\t1702\t2702\t7702\t4\t5\tGKAAAA\tLREAAA\tHHHHxx\n4211\t3158\t1\t3\t1\t11\t11\t211\t211\t4211\t4211\t22\t23\tZFAAAA\tMREAAA\tOOOOxx\n6684\t3159\t0\t0\t4\t4\t84\t684\t684\t1684\t6684\t168\t169\tCXAAAA\tNREAAA\tVVVVxx\n3883\t3160\t1\t3\t3\t3\t83\t883\t1883\t3883\t3883\t166\t167\tJTAAAA\tOREAAA\tAAAAxx\n3531\t3161\t1\t3\t1\t11\t31\t531\t1531\t3531\t3531\t62\t63\tVFAAAA\tPREAAA\tHHHHxx\n9178\t3162\t0\t2\t8\t18\t78\t178\t1178\t4178\t9178\t156\t157\tAPAAAA\tQREAAA\tOOOOxx\n3389\t3163\t1\t1\t9\t9\t89\t389\t1389\t3389\t3389\t178\t179\tJAAAAA\tRREAAA\tVVVVxx\n7874\t3164\t0\t2\t4\t14\t74\t874\t1874\t2874\t7874\t148\t149\tWQAAAA\tSREAAA\tAAAAxx\n4522\t3165\t0\t2\t2\t2\t22\t522\t522\t4522\t4522\t44\t45\tYRAAAA\tTREAAA\tHHHHxx\n9399\t3166\t1\t3\t9\t19\t99\t399\t1399\t4399\t9399\t198\t199\tNXAAAA\tUREAAA\tOOOOxx\n9083\t3167\t1\t3\t3\t3\t83\t83\t1083\t4083\t9083\t166\t167\tJLAAAA\tVREAAA\tVVVVxx\n1530\t3168\t0\t2\t0\t10\t30\t530\t1530\t1530\t1530\t60\t61\tWGAAAA\tWREAAA\tAAAAxx\n2360\t3169\t0\t0\t0\t0\t60\t360\t360\t2360\t2360\t120\t121\tUMAAAA\tXREAAA\tHHHHxx\n4908\t3170\t0\t0\t8\t8\t8\t908\t908\t4908\t4908\t16\t17\tUGAAAA\tYREAAA\tOOOOxx\n4628\t3171\t0\t0\t8\t8\t28\t628\t628\t4628\t4628\t56\t57\tAWAAAA\tZREAAA\tVVVVxx\n3889\t3172\t1\t1\t9\t9\t89\t889\t1889\t3889\t3889\t178\t179\tPTAAAA\tASEAAA\tAAAAxx\n1331\t3173\t1\t3\t1\t11\t31\t331\t1331\t1331\t1331\t62\t63\tFZAAAA\tBSEAAA\tHHHHxx\n1942\t3174\t0\t2\t2\t2\t42\t942\t1942\t1942\t1942\t84\t85\tSWAAAA\tCSEAAA\tOOOOxx\n4734\t3175\t0\t2\t4\t14\t34\t734\t734\t4734\t4734\t68\t69\tCAAAAA\tDSEAAA\tVVVVxx\n8386\t3176\t0\t2\t6\t6\t86\t386\t386\t3386\t8386\t172\t173\tOKAAAA\tESEAAA\tAAAAxx\n3586\t3177\t0\t2\t6\t6\t86\t586\t1586\t3586\t3586\t172\t173\tYHAAAA\tFSEAAA\tHHHHxx\n2354\t3178\t0\t2\t4\t14\t54\t354\t354\t2354\t2354\t108\t109\tOMAAAA\tGSEAAA\tOOOOxx\n7108\t3179\t0\t0\t8\t8\t8\t108\t1108\t2108\t7108\t16\t17\tKNAAAA\tHSEAAA\tVVVVxx\n1857\t3180\t1\t1\t7\t17\t57\t857\t1857\t1857\t1857\t114\t115\tLTAAAA\tISEAAA\tAAAAxx\n2544\t3181\t0\t0\t4\t4\t44\t544\t544\t2544\t2544\t88\t89\tWTAAAA\tJSEAAA\tHHHHxx\n819\t3182\t1\t3\t9\t19\t19\t819\t819\t819\t819\t38\t39\tNFAAAA\tKSEAAA\tOOOOxx\n2878\t3183\t0\t2\t8\t18\t78\t878\t878\t2878\t2878\t156\t157\tSGAAAA\tLSEAAA\tVVVVxx\n1772\t3184\t0\t0\t2\t12\t72\t772\t1772\t1772\t1772\t144\t145\tEQAAAA\tMSEAAA\tAAAAxx\n354\t3185\t0\t2\t4\t14\t54\t354\t354\t354\t354\t108\t109\tQNAAAA\tNSEAAA\tHHHHxx\n3259\t3186\t1\t3\t9\t19\t59\t259\t1259\t3259\t3259\t118\t119\tJVAAAA\tOSEAAA\tOOOOxx\n2170\t3187\t0\t2\t0\t10\t70\t170\t170\t2170\t2170\t140\t141\tMFAAAA\tPSEAAA\tVVVVxx\n1190\t3188\t0\t2\t0\t10\t90\t190\t1190\t1190\t1190\t180\t181\tUTAAAA\tQSEAAA\tAAAAxx\n3607\t3189\t1\t3\t7\t7\t7\t607\t1607\t3607\t3607\t14\t15\tTIAAAA\tRSEAAA\tHHHHxx\n4661\t3190\t1\t1\t1\t1\t61\t661\t661\t4661\t4661\t122\t123\tHXAAAA\tSSEAAA\tOOOOxx\n1796\t3191\t0\t0\t6\t16\t96\t796\t1796\t1796\t1796\t192\t193\tCRAAAA\tTSEAAA\tVVVVxx\n1561\t3192\t1\t1\t1\t1\t61\t561\t1561\t1561\t1561\t122\t123\tBIAAAA\tUSEAAA\tAAAAxx\n4336\t3193\t0\t0\t6\t16\t36\t336\t336\t4336\t4336\t72\t73\tUKAAAA\tVSEAAA\tHHHHxx\n7550\t3194\t0\t2\t0\t10\t50\t550\t1550\t2550\t7550\t100\t101\tKEAAAA\tWSEAAA\tOOOOxx\n3238\t3195\t0\t2\t8\t18\t38\t238\t1238\t3238\t3238\t76\t77\tOUAAAA\tXSEAAA\tVVVVxx\n9870\t3196\t0\t2\t0\t10\t70\t870\t1870\t4870\t9870\t140\t141\tQPAAAA\tYSEAAA\tAAAAxx\n6502\t3197\t0\t2\t2\t2\t2\t502\t502\t1502\t6502\t4\t5\tCQAAAA\tZSEAAA\tHHHHxx\n3903\t3198\t1\t3\t3\t3\t3\t903\t1903\t3903\t3903\t6\t7\tDUAAAA\tATEAAA\tOOOOxx\n2869\t3199\t1\t1\t9\t9\t69\t869\t869\t2869\t2869\t138\t139\tJGAAAA\tBTEAAA\tVVVVxx\n5072\t3200\t0\t0\t2\t12\t72\t72\t1072\t72\t5072\t144\t145\tCNAAAA\tCTEAAA\tAAAAxx\n1201\t3201\t1\t1\t1\t1\t1\t201\t1201\t1201\t1201\t2\t3\tFUAAAA\tDTEAAA\tHHHHxx\n6245\t3202\t1\t1\t5\t5\t45\t245\t245\t1245\t6245\t90\t91\tFGAAAA\tETEAAA\tOOOOxx\n1402\t3203\t0\t2\t2\t2\t2\t402\t1402\t1402\t1402\t4\t5\tYBAAAA\tFTEAAA\tVVVVxx\n2594\t3204\t0\t2\t4\t14\t94\t594\t594\t2594\t2594\t188\t189\tUVAAAA\tGTEAAA\tAAAAxx\n9171\t3205\t1\t3\t1\t11\t71\t171\t1171\t4171\t9171\t142\t143\tTOAAAA\tHTEAAA\tHHHHxx\n2620\t3206\t0\t0\t0\t0\t20\t620\t620\t2620\t2620\t40\t41\tUWAAAA\tITEAAA\tOOOOxx\n6309\t3207\t1\t1\t9\t9\t9\t309\t309\t1309\t6309\t18\t19\tRIAAAA\tJTEAAA\tVVVVxx\n1285\t3208\t1\t1\t5\t5\t85\t285\t1285\t1285\t1285\t170\t171\tLXAAAA\tKTEAAA\tAAAAxx\n5466\t3209\t0\t2\t6\t6\t66\t466\t1466\t466\t5466\t132\t133\tGCAAAA\tLTEAAA\tHHHHxx\n168\t3210\t0\t0\t8\t8\t68\t168\t168\t168\t168\t136\t137\tMGAAAA\tMTEAAA\tOOOOxx\n1410\t3211\t0\t2\t0\t10\t10\t410\t1410\t1410\t1410\t20\t21\tGCAAAA\tNTEAAA\tVVVVxx\n6332\t3212\t0\t0\t2\t12\t32\t332\t332\t1332\t6332\t64\t65\tOJAAAA\tOTEAAA\tAAAAxx\n9530\t3213\t0\t2\t0\t10\t30\t530\t1530\t4530\t9530\t60\t61\tOCAAAA\tPTEAAA\tHHHHxx\n7749\t3214\t1\t1\t9\t9\t49\t749\t1749\t2749\t7749\t98\t99\tBMAAAA\tQTEAAA\tOOOOxx\n3656\t3215\t0\t0\t6\t16\t56\t656\t1656\t3656\t3656\t112\t113\tQKAAAA\tRTEAAA\tVVVVxx\n37\t3216\t1\t1\t7\t17\t37\t37\t37\t37\t37\t74\t75\tLBAAAA\tSTEAAA\tAAAAxx\n2744\t3217\t0\t0\t4\t4\t44\t744\t744\t2744\t2744\t88\t89\tOBAAAA\tTTEAAA\tHHHHxx\n4206\t3218\t0\t2\t6\t6\t6\t206\t206\t4206\t4206\t12\t13\tUFAAAA\tUTEAAA\tOOOOxx\n1846\t3219\t0\t2\t6\t6\t46\t846\t1846\t1846\t1846\t92\t93\tATAAAA\tVTEAAA\tVVVVxx\n9913\t3220\t1\t1\t3\t13\t13\t913\t1913\t4913\t9913\t26\t27\tHRAAAA\tWTEAAA\tAAAAxx\n4078\t3221\t0\t2\t8\t18\t78\t78\t78\t4078\t4078\t156\t157\tWAAAAA\tXTEAAA\tHHHHxx\n2080\t3222\t0\t0\t0\t0\t80\t80\t80\t2080\t2080\t160\t161\tACAAAA\tYTEAAA\tOOOOxx\n4169\t3223\t1\t1\t9\t9\t69\t169\t169\t4169\t4169\t138\t139\tJEAAAA\tZTEAAA\tVVVVxx\n2070\t3224\t0\t2\t0\t10\t70\t70\t70\t2070\t2070\t140\t141\tQBAAAA\tAUEAAA\tAAAAxx\n4500\t3225\t0\t0\t0\t0\t0\t500\t500\t4500\t4500\t0\t1\tCRAAAA\tBUEAAA\tHHHHxx\n4123\t3226\t1\t3\t3\t3\t23\t123\t123\t4123\t4123\t46\t47\tPCAAAA\tCUEAAA\tOOOOxx\n5594\t3227\t0\t2\t4\t14\t94\t594\t1594\t594\t5594\t188\t189\tEHAAAA\tDUEAAA\tVVVVxx\n9941\t3228\t1\t1\t1\t1\t41\t941\t1941\t4941\t9941\t82\t83\tJSAAAA\tEUEAAA\tAAAAxx\n7154\t3229\t0\t2\t4\t14\t54\t154\t1154\t2154\t7154\t108\t109\tEPAAAA\tFUEAAA\tHHHHxx\n8340\t3230\t0\t0\t0\t0\t40\t340\t340\t3340\t8340\t80\t81\tUIAAAA\tGUEAAA\tOOOOxx\n7110\t3231\t0\t2\t0\t10\t10\t110\t1110\t2110\t7110\t20\t21\tMNAAAA\tHUEAAA\tVVVVxx\n7795\t3232\t1\t3\t5\t15\t95\t795\t1795\t2795\t7795\t190\t191\tVNAAAA\tIUEAAA\tAAAAxx\n132\t3233\t0\t0\t2\t12\t32\t132\t132\t132\t132\t64\t65\tCFAAAA\tJUEAAA\tHHHHxx\n4603\t3234\t1\t3\t3\t3\t3\t603\t603\t4603\t4603\t6\t7\tBVAAAA\tKUEAAA\tOOOOxx\n9720\t3235\t0\t0\t0\t0\t20\t720\t1720\t4720\t9720\t40\t41\tWJAAAA\tLUEAAA\tVVVVxx\n1460\t3236\t0\t0\t0\t0\t60\t460\t1460\t1460\t1460\t120\t121\tEEAAAA\tMUEAAA\tAAAAxx\n4677\t3237\t1\t1\t7\t17\t77\t677\t677\t4677\t4677\t154\t155\tXXAAAA\tNUEAAA\tHHHHxx\n9272\t3238\t0\t0\t2\t12\t72\t272\t1272\t4272\t9272\t144\t145\tQSAAAA\tOUEAAA\tOOOOxx\n2279\t3239\t1\t3\t9\t19\t79\t279\t279\t2279\t2279\t158\t159\tRJAAAA\tPUEAAA\tVVVVxx\n4587\t3240\t1\t3\t7\t7\t87\t587\t587\t4587\t4587\t174\t175\tLUAAAA\tQUEAAA\tAAAAxx\n2244\t3241\t0\t0\t4\t4\t44\t244\t244\t2244\t2244\t88\t89\tIIAAAA\tRUEAAA\tHHHHxx\n742\t3242\t0\t2\t2\t2\t42\t742\t742\t742\t742\t84\t85\tOCAAAA\tSUEAAA\tOOOOxx\n4426\t3243\t0\t2\t6\t6\t26\t426\t426\t4426\t4426\t52\t53\tGOAAAA\tTUEAAA\tVVVVxx\n4571\t3244\t1\t3\t1\t11\t71\t571\t571\t4571\t4571\t142\t143\tVTAAAA\tUUEAAA\tAAAAxx\n4775\t3245\t1\t3\t5\t15\t75\t775\t775\t4775\t4775\t150\t151\tRBAAAA\tVUEAAA\tHHHHxx\n24\t3246\t0\t0\t4\t4\t24\t24\t24\t24\t24\t48\t49\tYAAAAA\tWUEAAA\tOOOOxx\n4175\t3247\t1\t3\t5\t15\t75\t175\t175\t4175\t4175\t150\t151\tPEAAAA\tXUEAAA\tVVVVxx\n9877\t3248\t1\t1\t7\t17\t77\t877\t1877\t4877\t9877\t154\t155\tXPAAAA\tYUEAAA\tAAAAxx\n7271\t3249\t1\t3\t1\t11\t71\t271\t1271\t2271\t7271\t142\t143\tRTAAAA\tZUEAAA\tHHHHxx\n5468\t3250\t0\t0\t8\t8\t68\t468\t1468\t468\t5468\t136\t137\tICAAAA\tAVEAAA\tOOOOxx\n6106\t3251\t0\t2\t6\t6\t6\t106\t106\t1106\t6106\t12\t13\tWAAAAA\tBVEAAA\tVVVVxx\n9005\t3252\t1\t1\t5\t5\t5\t5\t1005\t4005\t9005\t10\t11\tJIAAAA\tCVEAAA\tAAAAxx\n109\t3253\t1\t1\t9\t9\t9\t109\t109\t109\t109\t18\t19\tFEAAAA\tDVEAAA\tHHHHxx\n6365\t3254\t1\t1\t5\t5\t65\t365\t365\t1365\t6365\t130\t131\tVKAAAA\tEVEAAA\tOOOOxx\n7437\t3255\t1\t1\t7\t17\t37\t437\t1437\t2437\t7437\t74\t75\tBAAAAA\tFVEAAA\tVVVVxx\n7979\t3256\t1\t3\t9\t19\t79\t979\t1979\t2979\t7979\t158\t159\tXUAAAA\tGVEAAA\tAAAAxx\n6050\t3257\t0\t2\t0\t10\t50\t50\t50\t1050\t6050\t100\t101\tSYAAAA\tHVEAAA\tHHHHxx\n2853\t3258\t1\t1\t3\t13\t53\t853\t853\t2853\t2853\t106\t107\tTFAAAA\tIVEAAA\tOOOOxx\n7603\t3259\t1\t3\t3\t3\t3\t603\t1603\t2603\t7603\t6\t7\tLGAAAA\tJVEAAA\tVVVVxx\n483\t3260\t1\t3\t3\t3\t83\t483\t483\t483\t483\t166\t167\tPSAAAA\tKVEAAA\tAAAAxx\n5994\t3261\t0\t2\t4\t14\t94\t994\t1994\t994\t5994\t188\t189\tOWAAAA\tLVEAAA\tHHHHxx\n6708\t3262\t0\t0\t8\t8\t8\t708\t708\t1708\t6708\t16\t17\tAYAAAA\tMVEAAA\tOOOOxx\n5090\t3263\t0\t2\t0\t10\t90\t90\t1090\t90\t5090\t180\t181\tUNAAAA\tNVEAAA\tVVVVxx\n4608\t3264\t0\t0\t8\t8\t8\t608\t608\t4608\t4608\t16\t17\tGVAAAA\tOVEAAA\tAAAAxx\n4551\t3265\t1\t3\t1\t11\t51\t551\t551\t4551\t4551\t102\t103\tBTAAAA\tPVEAAA\tHHHHxx\n5437\t3266\t1\t1\t7\t17\t37\t437\t1437\t437\t5437\t74\t75\tDBAAAA\tQVEAAA\tOOOOxx\n4130\t3267\t0\t2\t0\t10\t30\t130\t130\t4130\t4130\t60\t61\tWCAAAA\tRVEAAA\tVVVVxx\n6363\t3268\t1\t3\t3\t3\t63\t363\t363\t1363\t6363\t126\t127\tTKAAAA\tSVEAAA\tAAAAxx\n1499\t3269\t1\t3\t9\t19\t99\t499\t1499\t1499\t1499\t198\t199\tRFAAAA\tTVEAAA\tHHHHxx\n384\t3270\t0\t0\t4\t4\t84\t384\t384\t384\t384\t168\t169\tUOAAAA\tUVEAAA\tOOOOxx\n2266\t3271\t0\t2\t6\t6\t66\t266\t266\t2266\t2266\t132\t133\tEJAAAA\tVVEAAA\tVVVVxx\n6018\t3272\t0\t2\t8\t18\t18\t18\t18\t1018\t6018\t36\t37\tMXAAAA\tWVEAAA\tAAAAxx\n7915\t3273\t1\t3\t5\t15\t15\t915\t1915\t2915\t7915\t30\t31\tLSAAAA\tXVEAAA\tHHHHxx\n6167\t3274\t1\t3\t7\t7\t67\t167\t167\t1167\t6167\t134\t135\tFDAAAA\tYVEAAA\tOOOOxx\n9988\t3275\t0\t0\t8\t8\t88\t988\t1988\t4988\t9988\t176\t177\tEUAAAA\tZVEAAA\tVVVVxx\n6599\t3276\t1\t3\t9\t19\t99\t599\t599\t1599\t6599\t198\t199\tVTAAAA\tAWEAAA\tAAAAxx\n1693\t3277\t1\t1\t3\t13\t93\t693\t1693\t1693\t1693\t186\t187\tDNAAAA\tBWEAAA\tHHHHxx\n5971\t3278\t1\t3\t1\t11\t71\t971\t1971\t971\t5971\t142\t143\tRVAAAA\tCWEAAA\tOOOOxx\n8470\t3279\t0\t2\t0\t10\t70\t470\t470\t3470\t8470\t140\t141\tUNAAAA\tDWEAAA\tVVVVxx\n2807\t3280\t1\t3\t7\t7\t7\t807\t807\t2807\t2807\t14\t15\tZDAAAA\tEWEAAA\tAAAAxx\n1120\t3281\t0\t0\t0\t0\t20\t120\t1120\t1120\t1120\t40\t41\tCRAAAA\tFWEAAA\tHHHHxx\n5924\t3282\t0\t0\t4\t4\t24\t924\t1924\t924\t5924\t48\t49\tWTAAAA\tGWEAAA\tOOOOxx\n9025\t3283\t1\t1\t5\t5\t25\t25\t1025\t4025\t9025\t50\t51\tDJAAAA\tHWEAAA\tVVVVxx\n9454\t3284\t0\t2\t4\t14\t54\t454\t1454\t4454\t9454\t108\t109\tQZAAAA\tIWEAAA\tAAAAxx\n2259\t3285\t1\t3\t9\t19\t59\t259\t259\t2259\t2259\t118\t119\tXIAAAA\tJWEAAA\tHHHHxx\n5249\t3286\t1\t1\t9\t9\t49\t249\t1249\t249\t5249\t98\t99\tXTAAAA\tKWEAAA\tOOOOxx\n6350\t3287\t0\t2\t0\t10\t50\t350\t350\t1350\t6350\t100\t101\tGKAAAA\tLWEAAA\tVVVVxx\n2930\t3288\t0\t2\t0\t10\t30\t930\t930\t2930\t2930\t60\t61\tSIAAAA\tMWEAAA\tAAAAxx\n6055\t3289\t1\t3\t5\t15\t55\t55\t55\t1055\t6055\t110\t111\tXYAAAA\tNWEAAA\tHHHHxx\n7691\t3290\t1\t3\t1\t11\t91\t691\t1691\t2691\t7691\t182\t183\tVJAAAA\tOWEAAA\tOOOOxx\n1573\t3291\t1\t1\t3\t13\t73\t573\t1573\t1573\t1573\t146\t147\tNIAAAA\tPWEAAA\tVVVVxx\n9943\t3292\t1\t3\t3\t3\t43\t943\t1943\t4943\t9943\t86\t87\tLSAAAA\tQWEAAA\tAAAAxx\n3085\t3293\t1\t1\t5\t5\t85\t85\t1085\t3085\t3085\t170\t171\tROAAAA\tRWEAAA\tHHHHxx\n5928\t3294\t0\t0\t8\t8\t28\t928\t1928\t928\t5928\t56\t57\tAUAAAA\tSWEAAA\tOOOOxx\n887\t3295\t1\t3\t7\t7\t87\t887\t887\t887\t887\t174\t175\tDIAAAA\tTWEAAA\tVVVVxx\n4630\t3296\t0\t2\t0\t10\t30\t630\t630\t4630\t4630\t60\t61\tCWAAAA\tUWEAAA\tAAAAxx\n9827\t3297\t1\t3\t7\t7\t27\t827\t1827\t4827\t9827\t54\t55\tZNAAAA\tVWEAAA\tHHHHxx\n8926\t3298\t0\t2\t6\t6\t26\t926\t926\t3926\t8926\t52\t53\tIFAAAA\tWWEAAA\tOOOOxx\n5726\t3299\t0\t2\t6\t6\t26\t726\t1726\t726\t5726\t52\t53\tGMAAAA\tXWEAAA\tVVVVxx\n1569\t3300\t1\t1\t9\t9\t69\t569\t1569\t1569\t1569\t138\t139\tJIAAAA\tYWEAAA\tAAAAxx\n8074\t3301\t0\t2\t4\t14\t74\t74\t74\t3074\t8074\t148\t149\tOYAAAA\tZWEAAA\tHHHHxx\n7909\t3302\t1\t1\t9\t9\t9\t909\t1909\t2909\t7909\t18\t19\tFSAAAA\tAXEAAA\tOOOOxx\n8367\t3303\t1\t3\t7\t7\t67\t367\t367\t3367\t8367\t134\t135\tVJAAAA\tBXEAAA\tVVVVxx\n7217\t3304\t1\t1\t7\t17\t17\t217\t1217\t2217\t7217\t34\t35\tPRAAAA\tCXEAAA\tAAAAxx\n5254\t3305\t0\t2\t4\t14\t54\t254\t1254\t254\t5254\t108\t109\tCUAAAA\tDXEAAA\tHHHHxx\n1181\t3306\t1\t1\t1\t1\t81\t181\t1181\t1181\t1181\t162\t163\tLTAAAA\tEXEAAA\tOOOOxx\n6907\t3307\t1\t3\t7\t7\t7\t907\t907\t1907\t6907\t14\t15\tRFAAAA\tFXEAAA\tVVVVxx\n5508\t3308\t0\t0\t8\t8\t8\t508\t1508\t508\t5508\t16\t17\tWDAAAA\tGXEAAA\tAAAAxx\n4782\t3309\t0\t2\t2\t2\t82\t782\t782\t4782\t4782\t164\t165\tYBAAAA\tHXEAAA\tHHHHxx\n793\t3310\t1\t1\t3\t13\t93\t793\t793\t793\t793\t186\t187\tNEAAAA\tIXEAAA\tOOOOxx\n5740\t3311\t0\t0\t0\t0\t40\t740\t1740\t740\t5740\t80\t81\tUMAAAA\tJXEAAA\tVVVVxx\n3107\t3312\t1\t3\t7\t7\t7\t107\t1107\t3107\t3107\t14\t15\tNPAAAA\tKXEAAA\tAAAAxx\n1197\t3313\t1\t1\t7\t17\t97\t197\t1197\t1197\t1197\t194\t195\tBUAAAA\tLXEAAA\tHHHHxx\n4376\t3314\t0\t0\t6\t16\t76\t376\t376\t4376\t4376\t152\t153\tIMAAAA\tMXEAAA\tOOOOxx\n6226\t3315\t0\t2\t6\t6\t26\t226\t226\t1226\t6226\t52\t53\tMFAAAA\tNXEAAA\tVVVVxx\n5033\t3316\t1\t1\t3\t13\t33\t33\t1033\t33\t5033\t66\t67\tPLAAAA\tOXEAAA\tAAAAxx\n5494\t3317\t0\t2\t4\t14\t94\t494\t1494\t494\t5494\t188\t189\tIDAAAA\tPXEAAA\tHHHHxx\n3244\t3318\t0\t0\t4\t4\t44\t244\t1244\t3244\t3244\t88\t89\tUUAAAA\tQXEAAA\tOOOOxx\n7670\t3319\t0\t2\t0\t10\t70\t670\t1670\t2670\t7670\t140\t141\tAJAAAA\tRXEAAA\tVVVVxx\n9273\t3320\t1\t1\t3\t13\t73\t273\t1273\t4273\t9273\t146\t147\tRSAAAA\tSXEAAA\tAAAAxx\n5248\t3321\t0\t0\t8\t8\t48\t248\t1248\t248\t5248\t96\t97\tWTAAAA\tTXEAAA\tHHHHxx\n3381\t3322\t1\t1\t1\t1\t81\t381\t1381\t3381\t3381\t162\t163\tBAAAAA\tUXEAAA\tOOOOxx\n4136\t3323\t0\t0\t6\t16\t36\t136\t136\t4136\t4136\t72\t73\tCDAAAA\tVXEAAA\tVVVVxx\n4163\t3324\t1\t3\t3\t3\t63\t163\t163\t4163\t4163\t126\t127\tDEAAAA\tWXEAAA\tAAAAxx\n4270\t3325\t0\t2\t0\t10\t70\t270\t270\t4270\t4270\t140\t141\tGIAAAA\tXXEAAA\tHHHHxx\n1729\t3326\t1\t1\t9\t9\t29\t729\t1729\t1729\t1729\t58\t59\tNOAAAA\tYXEAAA\tOOOOxx\n2778\t3327\t0\t2\t8\t18\t78\t778\t778\t2778\t2778\t156\t157\tWCAAAA\tZXEAAA\tVVVVxx\n5082\t3328\t0\t2\t2\t2\t82\t82\t1082\t82\t5082\t164\t165\tMNAAAA\tAYEAAA\tAAAAxx\n870\t3329\t0\t2\t0\t10\t70\t870\t870\t870\t870\t140\t141\tMHAAAA\tBYEAAA\tHHHHxx\n4192\t3330\t0\t0\t2\t12\t92\t192\t192\t4192\t4192\t184\t185\tGFAAAA\tCYEAAA\tOOOOxx\n308\t3331\t0\t0\t8\t8\t8\t308\t308\t308\t308\t16\t17\tWLAAAA\tDYEAAA\tVVVVxx\n6783\t3332\t1\t3\t3\t3\t83\t783\t783\t1783\t6783\t166\t167\tXAAAAA\tEYEAAA\tAAAAxx\n7611\t3333\t1\t3\t1\t11\t11\t611\t1611\t2611\t7611\t22\t23\tTGAAAA\tFYEAAA\tHHHHxx\n4221\t3334\t1\t1\t1\t1\t21\t221\t221\t4221\t4221\t42\t43\tJGAAAA\tGYEAAA\tOOOOxx\n6353\t3335\t1\t1\t3\t13\t53\t353\t353\t1353\t6353\t106\t107\tJKAAAA\tHYEAAA\tVVVVxx\n1830\t3336\t0\t2\t0\t10\t30\t830\t1830\t1830\t1830\t60\t61\tKSAAAA\tIYEAAA\tAAAAxx\n2437\t3337\t1\t1\t7\t17\t37\t437\t437\t2437\t2437\t74\t75\tTPAAAA\tJYEAAA\tHHHHxx\n3360\t3338\t0\t0\t0\t0\t60\t360\t1360\t3360\t3360\t120\t121\tGZAAAA\tKYEAAA\tOOOOxx\n1829\t3339\t1\t1\t9\t9\t29\t829\t1829\t1829\t1829\t58\t59\tJSAAAA\tLYEAAA\tVVVVxx\n9475\t3340\t1\t3\t5\t15\t75\t475\t1475\t4475\t9475\t150\t151\tLAAAAA\tMYEAAA\tAAAAxx\n4566\t3341\t0\t2\t6\t6\t66\t566\t566\t4566\t4566\t132\t133\tQTAAAA\tNYEAAA\tHHHHxx\n9944\t3342\t0\t0\t4\t4\t44\t944\t1944\t4944\t9944\t88\t89\tMSAAAA\tOYEAAA\tOOOOxx\n6054\t3343\t0\t2\t4\t14\t54\t54\t54\t1054\t6054\t108\t109\tWYAAAA\tPYEAAA\tVVVVxx\n4722\t3344\t0\t2\t2\t2\t22\t722\t722\t4722\t4722\t44\t45\tQZAAAA\tQYEAAA\tAAAAxx\n2779\t3345\t1\t3\t9\t19\t79\t779\t779\t2779\t2779\t158\t159\tXCAAAA\tRYEAAA\tHHHHxx\n8051\t3346\t1\t3\t1\t11\t51\t51\t51\t3051\t8051\t102\t103\tRXAAAA\tSYEAAA\tOOOOxx\n9671\t3347\t1\t3\t1\t11\t71\t671\t1671\t4671\t9671\t142\t143\tZHAAAA\tTYEAAA\tVVVVxx\n6084\t3348\t0\t0\t4\t4\t84\t84\t84\t1084\t6084\t168\t169\tAAAAAA\tUYEAAA\tAAAAxx\n3729\t3349\t1\t1\t9\t9\t29\t729\t1729\t3729\t3729\t58\t59\tLNAAAA\tVYEAAA\tHHHHxx\n6627\t3350\t1\t3\t7\t7\t27\t627\t627\t1627\t6627\t54\t55\tXUAAAA\tWYEAAA\tOOOOxx\n4769\t3351\t1\t1\t9\t9\t69\t769\t769\t4769\t4769\t138\t139\tLBAAAA\tXYEAAA\tVVVVxx\n2224\t3352\t0\t0\t4\t4\t24\t224\t224\t2224\t2224\t48\t49\tOHAAAA\tYYEAAA\tAAAAxx\n1404\t3353\t0\t0\t4\t4\t4\t404\t1404\t1404\t1404\t8\t9\tACAAAA\tZYEAAA\tHHHHxx\n8532\t3354\t0\t0\t2\t12\t32\t532\t532\t3532\t8532\t64\t65\tEQAAAA\tAZEAAA\tOOOOxx\n6759\t3355\t1\t3\t9\t19\t59\t759\t759\t1759\t6759\t118\t119\tZZAAAA\tBZEAAA\tVVVVxx\n6404\t3356\t0\t0\t4\t4\t4\t404\t404\t1404\t6404\t8\t9\tIMAAAA\tCZEAAA\tAAAAxx\n3144\t3357\t0\t0\t4\t4\t44\t144\t1144\t3144\t3144\t88\t89\tYQAAAA\tDZEAAA\tHHHHxx\n973\t3358\t1\t1\t3\t13\t73\t973\t973\t973\t973\t146\t147\tLLAAAA\tEZEAAA\tOOOOxx\n9789\t3359\t1\t1\t9\t9\t89\t789\t1789\t4789\t9789\t178\t179\tNMAAAA\tFZEAAA\tVVVVxx\n6181\t3360\t1\t1\t1\t1\t81\t181\t181\t1181\t6181\t162\t163\tTDAAAA\tGZEAAA\tAAAAxx\n1519\t3361\t1\t3\t9\t19\t19\t519\t1519\t1519\t1519\t38\t39\tLGAAAA\tHZEAAA\tHHHHxx\n9729\t3362\t1\t1\t9\t9\t29\t729\t1729\t4729\t9729\t58\t59\tFKAAAA\tIZEAAA\tOOOOxx\n8167\t3363\t1\t3\t7\t7\t67\t167\t167\t3167\t8167\t134\t135\tDCAAAA\tJZEAAA\tVVVVxx\n3830\t3364\t0\t2\t0\t10\t30\t830\t1830\t3830\t3830\t60\t61\tIRAAAA\tKZEAAA\tAAAAxx\n6286\t3365\t0\t2\t6\t6\t86\t286\t286\t1286\t6286\t172\t173\tUHAAAA\tLZEAAA\tHHHHxx\n3047\t3366\t1\t3\t7\t7\t47\t47\t1047\t3047\t3047\t94\t95\tFNAAAA\tMZEAAA\tOOOOxx\n3183\t3367\t1\t3\t3\t3\t83\t183\t1183\t3183\t3183\t166\t167\tLSAAAA\tNZEAAA\tVVVVxx\n6687\t3368\t1\t3\t7\t7\t87\t687\t687\t1687\t6687\t174\t175\tFXAAAA\tOZEAAA\tAAAAxx\n2783\t3369\t1\t3\t3\t3\t83\t783\t783\t2783\t2783\t166\t167\tBDAAAA\tPZEAAA\tHHHHxx\n9920\t3370\t0\t0\t0\t0\t20\t920\t1920\t4920\t9920\t40\t41\tORAAAA\tQZEAAA\tOOOOxx\n4847\t3371\t1\t3\t7\t7\t47\t847\t847\t4847\t4847\t94\t95\tLEAAAA\tRZEAAA\tVVVVxx\n3645\t3372\t1\t1\t5\t5\t45\t645\t1645\t3645\t3645\t90\t91\tFKAAAA\tSZEAAA\tAAAAxx\n7406\t3373\t0\t2\t6\t6\t6\t406\t1406\t2406\t7406\t12\t13\tWYAAAA\tTZEAAA\tHHHHxx\n6003\t3374\t1\t3\t3\t3\t3\t3\t3\t1003\t6003\t6\t7\tXWAAAA\tUZEAAA\tOOOOxx\n3408\t3375\t0\t0\t8\t8\t8\t408\t1408\t3408\t3408\t16\t17\tCBAAAA\tVZEAAA\tVVVVxx\n4243\t3376\t1\t3\t3\t3\t43\t243\t243\t4243\t4243\t86\t87\tFHAAAA\tWZEAAA\tAAAAxx\n1622\t3377\t0\t2\t2\t2\t22\t622\t1622\t1622\t1622\t44\t45\tKKAAAA\tXZEAAA\tHHHHxx\n5319\t3378\t1\t3\t9\t19\t19\t319\t1319\t319\t5319\t38\t39\tPWAAAA\tYZEAAA\tOOOOxx\n4033\t3379\t1\t1\t3\t13\t33\t33\t33\t4033\t4033\t66\t67\tDZAAAA\tZZEAAA\tVVVVxx\n8573\t3380\t1\t1\t3\t13\t73\t573\t573\t3573\t8573\t146\t147\tTRAAAA\tAAFAAA\tAAAAxx\n8404\t3381\t0\t0\t4\t4\t4\t404\t404\t3404\t8404\t8\t9\tGLAAAA\tBAFAAA\tHHHHxx\n6993\t3382\t1\t1\t3\t13\t93\t993\t993\t1993\t6993\t186\t187\tZIAAAA\tCAFAAA\tOOOOxx\n660\t3383\t0\t0\t0\t0\t60\t660\t660\t660\t660\t120\t121\tKZAAAA\tDAFAAA\tVVVVxx\n1136\t3384\t0\t0\t6\t16\t36\t136\t1136\t1136\t1136\t72\t73\tSRAAAA\tEAFAAA\tAAAAxx\n3393\t3385\t1\t1\t3\t13\t93\t393\t1393\t3393\t3393\t186\t187\tNAAAAA\tFAFAAA\tHHHHxx\n9743\t3386\t1\t3\t3\t3\t43\t743\t1743\t4743\t9743\t86\t87\tTKAAAA\tGAFAAA\tOOOOxx\n9705\t3387\t1\t1\t5\t5\t5\t705\t1705\t4705\t9705\t10\t11\tHJAAAA\tHAFAAA\tVVVVxx\n6960\t3388\t0\t0\t0\t0\t60\t960\t960\t1960\t6960\t120\t121\tSHAAAA\tIAFAAA\tAAAAxx\n2753\t3389\t1\t1\t3\t13\t53\t753\t753\t2753\t2753\t106\t107\tXBAAAA\tJAFAAA\tHHHHxx\n906\t3390\t0\t2\t6\t6\t6\t906\t906\t906\t906\t12\t13\tWIAAAA\tKAFAAA\tOOOOxx\n999\t3391\t1\t3\t9\t19\t99\t999\t999\t999\t999\t198\t199\tLMAAAA\tLAFAAA\tVVVVxx\n6927\t3392\t1\t3\t7\t7\t27\t927\t927\t1927\t6927\t54\t55\tLGAAAA\tMAFAAA\tAAAAxx\n4846\t3393\t0\t2\t6\t6\t46\t846\t846\t4846\t4846\t92\t93\tKEAAAA\tNAFAAA\tHHHHxx\n676\t3394\t0\t0\t6\t16\t76\t676\t676\t676\t676\t152\t153\tAAAAAA\tOAFAAA\tOOOOxx\n8612\t3395\t0\t0\t2\t12\t12\t612\t612\t3612\t8612\t24\t25\tGTAAAA\tPAFAAA\tVVVVxx\n4111\t3396\t1\t3\t1\t11\t11\t111\t111\t4111\t4111\t22\t23\tDCAAAA\tQAFAAA\tAAAAxx\n9994\t3397\t0\t2\t4\t14\t94\t994\t1994\t4994\t9994\t188\t189\tKUAAAA\tRAFAAA\tHHHHxx\n4399\t3398\t1\t3\t9\t19\t99\t399\t399\t4399\t4399\t198\t199\tFNAAAA\tSAFAAA\tOOOOxx\n4464\t3399\t0\t0\t4\t4\t64\t464\t464\t4464\t4464\t128\t129\tSPAAAA\tTAFAAA\tVVVVxx\n7316\t3400\t0\t0\t6\t16\t16\t316\t1316\t2316\t7316\t32\t33\tKVAAAA\tUAFAAA\tAAAAxx\n8982\t3401\t0\t2\t2\t2\t82\t982\t982\t3982\t8982\t164\t165\tMHAAAA\tVAFAAA\tHHHHxx\n1871\t3402\t1\t3\t1\t11\t71\t871\t1871\t1871\t1871\t142\t143\tZTAAAA\tWAFAAA\tOOOOxx\n4082\t3403\t0\t2\t2\t2\t82\t82\t82\t4082\t4082\t164\t165\tABAAAA\tXAFAAA\tVVVVxx\n3949\t3404\t1\t1\t9\t9\t49\t949\t1949\t3949\t3949\t98\t99\tXVAAAA\tYAFAAA\tAAAAxx\n9352\t3405\t0\t0\t2\t12\t52\t352\t1352\t4352\t9352\t104\t105\tSVAAAA\tZAFAAA\tHHHHxx\n9638\t3406\t0\t2\t8\t18\t38\t638\t1638\t4638\t9638\t76\t77\tSGAAAA\tABFAAA\tOOOOxx\n8177\t3407\t1\t1\t7\t17\t77\t177\t177\t3177\t8177\t154\t155\tNCAAAA\tBBFAAA\tVVVVxx\n3499\t3408\t1\t3\t9\t19\t99\t499\t1499\t3499\t3499\t198\t199\tPEAAAA\tCBFAAA\tAAAAxx\n4233\t3409\t1\t1\t3\t13\t33\t233\t233\t4233\t4233\t66\t67\tVGAAAA\tDBFAAA\tHHHHxx\n1953\t3410\t1\t1\t3\t13\t53\t953\t1953\t1953\t1953\t106\t107\tDXAAAA\tEBFAAA\tOOOOxx\n7372\t3411\t0\t0\t2\t12\t72\t372\t1372\t2372\t7372\t144\t145\tOXAAAA\tFBFAAA\tVVVVxx\n5127\t3412\t1\t3\t7\t7\t27\t127\t1127\t127\t5127\t54\t55\tFPAAAA\tGBFAAA\tAAAAxx\n4384\t3413\t0\t0\t4\t4\t84\t384\t384\t4384\t4384\t168\t169\tQMAAAA\tHBFAAA\tHHHHxx\n9964\t3414\t0\t0\t4\t4\t64\t964\t1964\t4964\t9964\t128\t129\tGTAAAA\tIBFAAA\tOOOOxx\n5392\t3415\t0\t0\t2\t12\t92\t392\t1392\t392\t5392\t184\t185\tKZAAAA\tJBFAAA\tVVVVxx\n616\t3416\t0\t0\t6\t16\t16\t616\t616\t616\t616\t32\t33\tSXAAAA\tKBFAAA\tAAAAxx\n591\t3417\t1\t3\t1\t11\t91\t591\t591\t591\t591\t182\t183\tTWAAAA\tLBFAAA\tHHHHxx\n6422\t3418\t0\t2\t2\t2\t22\t422\t422\t1422\t6422\t44\t45\tANAAAA\tMBFAAA\tOOOOxx\n6551\t3419\t1\t3\t1\t11\t51\t551\t551\t1551\t6551\t102\t103\tZRAAAA\tNBFAAA\tVVVVxx\n9286\t3420\t0\t2\t6\t6\t86\t286\t1286\t4286\t9286\t172\t173\tETAAAA\tOBFAAA\tAAAAxx\n3817\t3421\t1\t1\t7\t17\t17\t817\t1817\t3817\t3817\t34\t35\tVQAAAA\tPBFAAA\tHHHHxx\n7717\t3422\t1\t1\t7\t17\t17\t717\t1717\t2717\t7717\t34\t35\tVKAAAA\tQBFAAA\tOOOOxx\n8718\t3423\t0\t2\t8\t18\t18\t718\t718\t3718\t8718\t36\t37\tIXAAAA\tRBFAAA\tVVVVxx\n8608\t3424\t0\t0\t8\t8\t8\t608\t608\t3608\t8608\t16\t17\tCTAAAA\tSBFAAA\tAAAAxx\n2242\t3425\t0\t2\t2\t2\t42\t242\t242\t2242\t2242\t84\t85\tGIAAAA\tTBFAAA\tHHHHxx\n4811\t3426\t1\t3\t1\t11\t11\t811\t811\t4811\t4811\t22\t23\tBDAAAA\tUBFAAA\tOOOOxx\n6838\t3427\t0\t2\t8\t18\t38\t838\t838\t1838\t6838\t76\t77\tADAAAA\tVBFAAA\tVVVVxx\n787\t3428\t1\t3\t7\t7\t87\t787\t787\t787\t787\t174\t175\tHEAAAA\tWBFAAA\tAAAAxx\n7940\t3429\t0\t0\t0\t0\t40\t940\t1940\t2940\t7940\t80\t81\tKTAAAA\tXBFAAA\tHHHHxx\n336\t3430\t0\t0\t6\t16\t36\t336\t336\t336\t336\t72\t73\tYMAAAA\tYBFAAA\tOOOOxx\n9859\t3431\t1\t3\t9\t19\t59\t859\t1859\t4859\t9859\t118\t119\tFPAAAA\tZBFAAA\tVVVVxx\n3864\t3432\t0\t0\t4\t4\t64\t864\t1864\t3864\t3864\t128\t129\tQSAAAA\tACFAAA\tAAAAxx\n7162\t3433\t0\t2\t2\t2\t62\t162\t1162\t2162\t7162\t124\t125\tMPAAAA\tBCFAAA\tHHHHxx\n2071\t3434\t1\t3\t1\t11\t71\t71\t71\t2071\t2071\t142\t143\tRBAAAA\tCCFAAA\tOOOOxx\n7469\t3435\t1\t1\t9\t9\t69\t469\t1469\t2469\t7469\t138\t139\tHBAAAA\tDCFAAA\tVVVVxx\n2917\t3436\t1\t1\t7\t17\t17\t917\t917\t2917\t2917\t34\t35\tFIAAAA\tECFAAA\tAAAAxx\n7486\t3437\t0\t2\t6\t6\t86\t486\t1486\t2486\t7486\t172\t173\tYBAAAA\tFCFAAA\tHHHHxx\n3355\t3438\t1\t3\t5\t15\t55\t355\t1355\t3355\t3355\t110\t111\tBZAAAA\tGCFAAA\tOOOOxx\n6998\t3439\t0\t2\t8\t18\t98\t998\t998\t1998\t6998\t196\t197\tEJAAAA\tHCFAAA\tVVVVxx\n5498\t3440\t0\t2\t8\t18\t98\t498\t1498\t498\t5498\t196\t197\tMDAAAA\tICFAAA\tAAAAxx\n5113\t3441\t1\t1\t3\t13\t13\t113\t1113\t113\t5113\t26\t27\tROAAAA\tJCFAAA\tHHHHxx\n2846\t3442\t0\t2\t6\t6\t46\t846\t846\t2846\t2846\t92\t93\tMFAAAA\tKCFAAA\tOOOOxx\n6834\t3443\t0\t2\t4\t14\t34\t834\t834\t1834\t6834\t68\t69\tWCAAAA\tLCFAAA\tVVVVxx\n8925\t3444\t1\t1\t5\t5\t25\t925\t925\t3925\t8925\t50\t51\tHFAAAA\tMCFAAA\tAAAAxx\n2757\t3445\t1\t1\t7\t17\t57\t757\t757\t2757\t2757\t114\t115\tBCAAAA\tNCFAAA\tHHHHxx\n2775\t3446\t1\t3\t5\t15\t75\t775\t775\t2775\t2775\t150\t151\tTCAAAA\tOCFAAA\tOOOOxx\n6182\t3447\t0\t2\t2\t2\t82\t182\t182\t1182\t6182\t164\t165\tUDAAAA\tPCFAAA\tVVVVxx\n4488\t3448\t0\t0\t8\t8\t88\t488\t488\t4488\t4488\t176\t177\tQQAAAA\tQCFAAA\tAAAAxx\n8523\t3449\t1\t3\t3\t3\t23\t523\t523\t3523\t8523\t46\t47\tVPAAAA\tRCFAAA\tHHHHxx\n52\t3450\t0\t0\t2\t12\t52\t52\t52\t52\t52\t104\t105\tACAAAA\tSCFAAA\tOOOOxx\n7251\t3451\t1\t3\t1\t11\t51\t251\t1251\t2251\t7251\t102\t103\tXSAAAA\tTCFAAA\tVVVVxx\n6130\t3452\t0\t2\t0\t10\t30\t130\t130\t1130\t6130\t60\t61\tUBAAAA\tUCFAAA\tAAAAxx\n205\t3453\t1\t1\t5\t5\t5\t205\t205\t205\t205\t10\t11\tXHAAAA\tVCFAAA\tHHHHxx\n1186\t3454\t0\t2\t6\t6\t86\t186\t1186\t1186\t1186\t172\t173\tQTAAAA\tWCFAAA\tOOOOxx\n1738\t3455\t0\t2\t8\t18\t38\t738\t1738\t1738\t1738\t76\t77\tWOAAAA\tXCFAAA\tVVVVxx\n9485\t3456\t1\t1\t5\t5\t85\t485\t1485\t4485\t9485\t170\t171\tVAAAAA\tYCFAAA\tAAAAxx\n4235\t3457\t1\t3\t5\t15\t35\t235\t235\t4235\t4235\t70\t71\tXGAAAA\tZCFAAA\tHHHHxx\n7891\t3458\t1\t3\t1\t11\t91\t891\t1891\t2891\t7891\t182\t183\tNRAAAA\tADFAAA\tOOOOxx\n4960\t3459\t0\t0\t0\t0\t60\t960\t960\t4960\t4960\t120\t121\tUIAAAA\tBDFAAA\tVVVVxx\n8911\t3460\t1\t3\t1\t11\t11\t911\t911\t3911\t8911\t22\t23\tTEAAAA\tCDFAAA\tAAAAxx\n1219\t3461\t1\t3\t9\t19\t19\t219\t1219\t1219\t1219\t38\t39\tXUAAAA\tDDFAAA\tHHHHxx\n9652\t3462\t0\t0\t2\t12\t52\t652\t1652\t4652\t9652\t104\t105\tGHAAAA\tEDFAAA\tOOOOxx\n9715\t3463\t1\t3\t5\t15\t15\t715\t1715\t4715\t9715\t30\t31\tRJAAAA\tFDFAAA\tVVVVxx\n6629\t3464\t1\t1\t9\t9\t29\t629\t629\t1629\t6629\t58\t59\tZUAAAA\tGDFAAA\tAAAAxx\n700\t3465\t0\t0\t0\t0\t0\t700\t700\t700\t700\t0\t1\tYAAAAA\tHDFAAA\tHHHHxx\n9819\t3466\t1\t3\t9\t19\t19\t819\t1819\t4819\t9819\t38\t39\tRNAAAA\tIDFAAA\tOOOOxx\n5188\t3467\t0\t0\t8\t8\t88\t188\t1188\t188\t5188\t176\t177\tORAAAA\tJDFAAA\tVVVVxx\n5367\t3468\t1\t3\t7\t7\t67\t367\t1367\t367\t5367\t134\t135\tLYAAAA\tKDFAAA\tAAAAxx\n6447\t3469\t1\t3\t7\t7\t47\t447\t447\t1447\t6447\t94\t95\tZNAAAA\tLDFAAA\tHHHHxx\n720\t3470\t0\t0\t0\t0\t20\t720\t720\t720\t720\t40\t41\tSBAAAA\tMDFAAA\tOOOOxx\n9157\t3471\t1\t1\t7\t17\t57\t157\t1157\t4157\t9157\t114\t115\tFOAAAA\tNDFAAA\tVVVVxx\n1082\t3472\t0\t2\t2\t2\t82\t82\t1082\t1082\t1082\t164\t165\tQPAAAA\tODFAAA\tAAAAxx\n3179\t3473\t1\t3\t9\t19\t79\t179\t1179\t3179\t3179\t158\t159\tHSAAAA\tPDFAAA\tHHHHxx\n4818\t3474\t0\t2\t8\t18\t18\t818\t818\t4818\t4818\t36\t37\tIDAAAA\tQDFAAA\tOOOOxx\n7607\t3475\t1\t3\t7\t7\t7\t607\t1607\t2607\t7607\t14\t15\tPGAAAA\tRDFAAA\tVVVVxx\n2352\t3476\t0\t0\t2\t12\t52\t352\t352\t2352\t2352\t104\t105\tMMAAAA\tSDFAAA\tAAAAxx\n1170\t3477\t0\t2\t0\t10\t70\t170\t1170\t1170\t1170\t140\t141\tATAAAA\tTDFAAA\tHHHHxx\n4269\t3478\t1\t1\t9\t9\t69\t269\t269\t4269\t4269\t138\t139\tFIAAAA\tUDFAAA\tOOOOxx\n8767\t3479\t1\t3\t7\t7\t67\t767\t767\t3767\t8767\t134\t135\tFZAAAA\tVDFAAA\tVVVVxx\n3984\t3480\t0\t0\t4\t4\t84\t984\t1984\t3984\t3984\t168\t169\tGXAAAA\tWDFAAA\tAAAAxx\n3190\t3481\t0\t2\t0\t10\t90\t190\t1190\t3190\t3190\t180\t181\tSSAAAA\tXDFAAA\tHHHHxx\n7456\t3482\t0\t0\t6\t16\t56\t456\t1456\t2456\t7456\t112\t113\tUAAAAA\tYDFAAA\tOOOOxx\n4348\t3483\t0\t0\t8\t8\t48\t348\t348\t4348\t4348\t96\t97\tGLAAAA\tZDFAAA\tVVVVxx\n3150\t3484\t0\t2\t0\t10\t50\t150\t1150\t3150\t3150\t100\t101\tERAAAA\tAEFAAA\tAAAAxx\n8780\t3485\t0\t0\t0\t0\t80\t780\t780\t3780\t8780\t160\t161\tSZAAAA\tBEFAAA\tHHHHxx\n2553\t3486\t1\t1\t3\t13\t53\t553\t553\t2553\t2553\t106\t107\tFUAAAA\tCEFAAA\tOOOOxx\n7526\t3487\t0\t2\t6\t6\t26\t526\t1526\t2526\t7526\t52\t53\tMDAAAA\tDEFAAA\tVVVVxx\n2031\t3488\t1\t3\t1\t11\t31\t31\t31\t2031\t2031\t62\t63\tDAAAAA\tEEFAAA\tAAAAxx\n8793\t3489\t1\t1\t3\t13\t93\t793\t793\t3793\t8793\t186\t187\tFAAAAA\tFEFAAA\tHHHHxx\n1122\t3490\t0\t2\t2\t2\t22\t122\t1122\t1122\t1122\t44\t45\tERAAAA\tGEFAAA\tOOOOxx\n1855\t3491\t1\t3\t5\t15\t55\t855\t1855\t1855\t1855\t110\t111\tJTAAAA\tHEFAAA\tVVVVxx\n6613\t3492\t1\t1\t3\t13\t13\t613\t613\t1613\t6613\t26\t27\tJUAAAA\tIEFAAA\tAAAAxx\n3231\t3493\t1\t3\t1\t11\t31\t231\t1231\t3231\t3231\t62\t63\tHUAAAA\tJEFAAA\tHHHHxx\n9101\t3494\t1\t1\t1\t1\t1\t101\t1101\t4101\t9101\t2\t3\tBMAAAA\tKEFAAA\tOOOOxx\n4937\t3495\t1\t1\t7\t17\t37\t937\t937\t4937\t4937\t74\t75\tXHAAAA\tLEFAAA\tVVVVxx\n666\t3496\t0\t2\t6\t6\t66\t666\t666\t666\t666\t132\t133\tQZAAAA\tMEFAAA\tAAAAxx\n8943\t3497\t1\t3\t3\t3\t43\t943\t943\t3943\t8943\t86\t87\tZFAAAA\tNEFAAA\tHHHHxx\n6164\t3498\t0\t0\t4\t4\t64\t164\t164\t1164\t6164\t128\t129\tCDAAAA\tOEFAAA\tOOOOxx\n1081\t3499\t1\t1\t1\t1\t81\t81\t1081\t1081\t1081\t162\t163\tPPAAAA\tPEFAAA\tVVVVxx\n210\t3500\t0\t2\t0\t10\t10\t210\t210\t210\t210\t20\t21\tCIAAAA\tQEFAAA\tAAAAxx\n6024\t3501\t0\t0\t4\t4\t24\t24\t24\t1024\t6024\t48\t49\tSXAAAA\tREFAAA\tHHHHxx\n5715\t3502\t1\t3\t5\t15\t15\t715\t1715\t715\t5715\t30\t31\tVLAAAA\tSEFAAA\tOOOOxx\n8938\t3503\t0\t2\t8\t18\t38\t938\t938\t3938\t8938\t76\t77\tUFAAAA\tTEFAAA\tVVVVxx\n1326\t3504\t0\t2\t6\t6\t26\t326\t1326\t1326\t1326\t52\t53\tAZAAAA\tUEFAAA\tAAAAxx\n7111\t3505\t1\t3\t1\t11\t11\t111\t1111\t2111\t7111\t22\t23\tNNAAAA\tVEFAAA\tHHHHxx\n757\t3506\t1\t1\t7\t17\t57\t757\t757\t757\t757\t114\t115\tDDAAAA\tWEFAAA\tOOOOxx\n8933\t3507\t1\t1\t3\t13\t33\t933\t933\t3933\t8933\t66\t67\tPFAAAA\tXEFAAA\tVVVVxx\n6495\t3508\t1\t3\t5\t15\t95\t495\t495\t1495\t6495\t190\t191\tVPAAAA\tYEFAAA\tAAAAxx\n3134\t3509\t0\t2\t4\t14\t34\t134\t1134\t3134\t3134\t68\t69\tOQAAAA\tZEFAAA\tHHHHxx\n1304\t3510\t0\t0\t4\t4\t4\t304\t1304\t1304\t1304\t8\t9\tEYAAAA\tAFFAAA\tOOOOxx\n1835\t3511\t1\t3\t5\t15\t35\t835\t1835\t1835\t1835\t70\t71\tPSAAAA\tBFFAAA\tVVVVxx\n7275\t3512\t1\t3\t5\t15\t75\t275\t1275\t2275\t7275\t150\t151\tVTAAAA\tCFFAAA\tAAAAxx\n7337\t3513\t1\t1\t7\t17\t37\t337\t1337\t2337\t7337\t74\t75\tFWAAAA\tDFFAAA\tHHHHxx\n1282\t3514\t0\t2\t2\t2\t82\t282\t1282\t1282\t1282\t164\t165\tIXAAAA\tEFFAAA\tOOOOxx\n6566\t3515\t0\t2\t6\t6\t66\t566\t566\t1566\t6566\t132\t133\tOSAAAA\tFFFAAA\tVVVVxx\n3786\t3516\t0\t2\t6\t6\t86\t786\t1786\t3786\t3786\t172\t173\tQPAAAA\tGFFAAA\tAAAAxx\n5741\t3517\t1\t1\t1\t1\t41\t741\t1741\t741\t5741\t82\t83\tVMAAAA\tHFFAAA\tHHHHxx\n6076\t3518\t0\t0\t6\t16\t76\t76\t76\t1076\t6076\t152\t153\tSZAAAA\tIFFAAA\tOOOOxx\n9998\t3519\t0\t2\t8\t18\t98\t998\t1998\t4998\t9998\t196\t197\tOUAAAA\tJFFAAA\tVVVVxx\n6268\t3520\t0\t0\t8\t8\t68\t268\t268\t1268\t6268\t136\t137\tCHAAAA\tKFFAAA\tAAAAxx\n9647\t3521\t1\t3\t7\t7\t47\t647\t1647\t4647\t9647\t94\t95\tBHAAAA\tLFFAAA\tHHHHxx\n4877\t3522\t1\t1\t7\t17\t77\t877\t877\t4877\t4877\t154\t155\tPFAAAA\tMFFAAA\tOOOOxx\n2652\t3523\t0\t0\t2\t12\t52\t652\t652\t2652\t2652\t104\t105\tAYAAAA\tNFFAAA\tVVVVxx\n1247\t3524\t1\t3\t7\t7\t47\t247\t1247\t1247\t1247\t94\t95\tZVAAAA\tOFFAAA\tAAAAxx\n2721\t3525\t1\t1\t1\t1\t21\t721\t721\t2721\t2721\t42\t43\tRAAAAA\tPFFAAA\tHHHHxx\n5968\t3526\t0\t0\t8\t8\t68\t968\t1968\t968\t5968\t136\t137\tOVAAAA\tQFFAAA\tOOOOxx\n9570\t3527\t0\t2\t0\t10\t70\t570\t1570\t4570\t9570\t140\t141\tCEAAAA\tRFFAAA\tVVVVxx\n6425\t3528\t1\t1\t5\t5\t25\t425\t425\t1425\t6425\t50\t51\tDNAAAA\tSFFAAA\tAAAAxx\n5451\t3529\t1\t3\t1\t11\t51\t451\t1451\t451\t5451\t102\t103\tRBAAAA\tTFFAAA\tHHHHxx\n5668\t3530\t0\t0\t8\t8\t68\t668\t1668\t668\t5668\t136\t137\tAKAAAA\tUFFAAA\tOOOOxx\n9493\t3531\t1\t1\t3\t13\t93\t493\t1493\t4493\t9493\t186\t187\tDBAAAA\tVFFAAA\tVVVVxx\n7973\t3532\t1\t1\t3\t13\t73\t973\t1973\t2973\t7973\t146\t147\tRUAAAA\tWFFAAA\tAAAAxx\n8250\t3533\t0\t2\t0\t10\t50\t250\t250\t3250\t8250\t100\t101\tIFAAAA\tXFFAAA\tHHHHxx\n82\t3534\t0\t2\t2\t2\t82\t82\t82\t82\t82\t164\t165\tEDAAAA\tYFFAAA\tOOOOxx\n6258\t3535\t0\t2\t8\t18\t58\t258\t258\t1258\t6258\t116\t117\tSGAAAA\tZFFAAA\tVVVVxx\n9978\t3536\t0\t2\t8\t18\t78\t978\t1978\t4978\t9978\t156\t157\tUTAAAA\tAGFAAA\tAAAAxx\n6930\t3537\t0\t2\t0\t10\t30\t930\t930\t1930\t6930\t60\t61\tOGAAAA\tBGFAAA\tHHHHxx\n3746\t3538\t0\t2\t6\t6\t46\t746\t1746\t3746\t3746\t92\t93\tCOAAAA\tCGFAAA\tOOOOxx\n7065\t3539\t1\t1\t5\t5\t65\t65\t1065\t2065\t7065\t130\t131\tTLAAAA\tDGFAAA\tVVVVxx\n4281\t3540\t1\t1\t1\t1\t81\t281\t281\t4281\t4281\t162\t163\tRIAAAA\tEGFAAA\tAAAAxx\n4367\t3541\t1\t3\t7\t7\t67\t367\t367\t4367\t4367\t134\t135\tZLAAAA\tFGFAAA\tHHHHxx\n9526\t3542\t0\t2\t6\t6\t26\t526\t1526\t4526\t9526\t52\t53\tKCAAAA\tGGFAAA\tOOOOxx\n5880\t3543\t0\t0\t0\t0\t80\t880\t1880\t880\t5880\t160\t161\tESAAAA\tHGFAAA\tVVVVxx\n8480\t3544\t0\t0\t0\t0\t80\t480\t480\t3480\t8480\t160\t161\tEOAAAA\tIGFAAA\tAAAAxx\n2476\t3545\t0\t0\t6\t16\t76\t476\t476\t2476\t2476\t152\t153\tGRAAAA\tJGFAAA\tHHHHxx\n9074\t3546\t0\t2\t4\t14\t74\t74\t1074\t4074\t9074\t148\t149\tALAAAA\tKGFAAA\tOOOOxx\n4830\t3547\t0\t2\t0\t10\t30\t830\t830\t4830\t4830\t60\t61\tUDAAAA\tLGFAAA\tVVVVxx\n3207\t3548\t1\t3\t7\t7\t7\t207\t1207\t3207\t3207\t14\t15\tJTAAAA\tMGFAAA\tAAAAxx\n7894\t3549\t0\t2\t4\t14\t94\t894\t1894\t2894\t7894\t188\t189\tQRAAAA\tNGFAAA\tHHHHxx\n3860\t3550\t0\t0\t0\t0\t60\t860\t1860\t3860\t3860\t120\t121\tMSAAAA\tOGFAAA\tOOOOxx\n5293\t3551\t1\t1\t3\t13\t93\t293\t1293\t293\t5293\t186\t187\tPVAAAA\tPGFAAA\tVVVVxx\n6895\t3552\t1\t3\t5\t15\t95\t895\t895\t1895\t6895\t190\t191\tFFAAAA\tQGFAAA\tAAAAxx\n9908\t3553\t0\t0\t8\t8\t8\t908\t1908\t4908\t9908\t16\t17\tCRAAAA\tRGFAAA\tHHHHxx\n9247\t3554\t1\t3\t7\t7\t47\t247\t1247\t4247\t9247\t94\t95\tRRAAAA\tSGFAAA\tOOOOxx\n8110\t3555\t0\t2\t0\t10\t10\t110\t110\t3110\t8110\t20\t21\tYZAAAA\tTGFAAA\tVVVVxx\n4716\t3556\t0\t0\t6\t16\t16\t716\t716\t4716\t4716\t32\t33\tKZAAAA\tUGFAAA\tAAAAxx\n4979\t3557\t1\t3\t9\t19\t79\t979\t979\t4979\t4979\t158\t159\tNJAAAA\tVGFAAA\tHHHHxx\n5280\t3558\t0\t0\t0\t0\t80\t280\t1280\t280\t5280\t160\t161\tCVAAAA\tWGFAAA\tOOOOxx\n8326\t3559\t0\t2\t6\t6\t26\t326\t326\t3326\t8326\t52\t53\tGIAAAA\tXGFAAA\tVVVVxx\n5572\t3560\t0\t0\t2\t12\t72\t572\t1572\t572\t5572\t144\t145\tIGAAAA\tYGFAAA\tAAAAxx\n4665\t3561\t1\t1\t5\t5\t65\t665\t665\t4665\t4665\t130\t131\tLXAAAA\tZGFAAA\tHHHHxx\n3665\t3562\t1\t1\t5\t5\t65\t665\t1665\t3665\t3665\t130\t131\tZKAAAA\tAHFAAA\tOOOOxx\n6744\t3563\t0\t0\t4\t4\t44\t744\t744\t1744\t6744\t88\t89\tKZAAAA\tBHFAAA\tVVVVxx\n1897\t3564\t1\t1\t7\t17\t97\t897\t1897\t1897\t1897\t194\t195\tZUAAAA\tCHFAAA\tAAAAxx\n1220\t3565\t0\t0\t0\t0\t20\t220\t1220\t1220\t1220\t40\t41\tYUAAAA\tDHFAAA\tHHHHxx\n2614\t3566\t0\t2\t4\t14\t14\t614\t614\t2614\t2614\t28\t29\tOWAAAA\tEHFAAA\tOOOOxx\n8509\t3567\t1\t1\t9\t9\t9\t509\t509\t3509\t8509\t18\t19\tHPAAAA\tFHFAAA\tVVVVxx\n8521\t3568\t1\t1\t1\t1\t21\t521\t521\t3521\t8521\t42\t43\tTPAAAA\tGHFAAA\tAAAAxx\n4121\t3569\t1\t1\t1\t1\t21\t121\t121\t4121\t4121\t42\t43\tNCAAAA\tHHFAAA\tHHHHxx\n9663\t3570\t1\t3\t3\t3\t63\t663\t1663\t4663\t9663\t126\t127\tRHAAAA\tIHFAAA\tOOOOxx\n2346\t3571\t0\t2\t6\t6\t46\t346\t346\t2346\t2346\t92\t93\tGMAAAA\tJHFAAA\tVVVVxx\n3370\t3572\t0\t2\t0\t10\t70\t370\t1370\t3370\t3370\t140\t141\tQZAAAA\tKHFAAA\tAAAAxx\n1498\t3573\t0\t2\t8\t18\t98\t498\t1498\t1498\t1498\t196\t197\tQFAAAA\tLHFAAA\tHHHHxx\n7422\t3574\t0\t2\t2\t2\t22\t422\t1422\t2422\t7422\t44\t45\tMZAAAA\tMHFAAA\tOOOOxx\n3472\t3575\t0\t0\t2\t12\t72\t472\t1472\t3472\t3472\t144\t145\tODAAAA\tNHFAAA\tVVVVxx\n4126\t3576\t0\t2\t6\t6\t26\t126\t126\t4126\t4126\t52\t53\tSCAAAA\tOHFAAA\tAAAAxx\n4494\t3577\t0\t2\t4\t14\t94\t494\t494\t4494\t4494\t188\t189\tWQAAAA\tPHFAAA\tHHHHxx\n6323\t3578\t1\t3\t3\t3\t23\t323\t323\t1323\t6323\t46\t47\tFJAAAA\tQHFAAA\tOOOOxx\n2823\t3579\t1\t3\t3\t3\t23\t823\t823\t2823\t2823\t46\t47\tPEAAAA\tRHFAAA\tVVVVxx\n8596\t3580\t0\t0\t6\t16\t96\t596\t596\t3596\t8596\t192\t193\tQSAAAA\tSHFAAA\tAAAAxx\n6642\t3581\t0\t2\t2\t2\t42\t642\t642\t1642\t6642\t84\t85\tMVAAAA\tTHFAAA\tHHHHxx\n9276\t3582\t0\t0\t6\t16\t76\t276\t1276\t4276\t9276\t152\t153\tUSAAAA\tUHFAAA\tOOOOxx\n4148\t3583\t0\t0\t8\t8\t48\t148\t148\t4148\t4148\t96\t97\tODAAAA\tVHFAAA\tVVVVxx\n9770\t3584\t0\t2\t0\t10\t70\t770\t1770\t4770\t9770\t140\t141\tULAAAA\tWHFAAA\tAAAAxx\n9812\t3585\t0\t0\t2\t12\t12\t812\t1812\t4812\t9812\t24\t25\tKNAAAA\tXHFAAA\tHHHHxx\n4419\t3586\t1\t3\t9\t19\t19\t419\t419\t4419\t4419\t38\t39\tZNAAAA\tYHFAAA\tOOOOxx\n3802\t3587\t0\t2\t2\t2\t2\t802\t1802\t3802\t3802\t4\t5\tGQAAAA\tZHFAAA\tVVVVxx\n3210\t3588\t0\t2\t0\t10\t10\t210\t1210\t3210\t3210\t20\t21\tMTAAAA\tAIFAAA\tAAAAxx\n6794\t3589\t0\t2\t4\t14\t94\t794\t794\t1794\t6794\t188\t189\tIBAAAA\tBIFAAA\tHHHHxx\n242\t3590\t0\t2\t2\t2\t42\t242\t242\t242\t242\t84\t85\tIJAAAA\tCIFAAA\tOOOOxx\n962\t3591\t0\t2\t2\t2\t62\t962\t962\t962\t962\t124\t125\tALAAAA\tDIFAAA\tVVVVxx\n7151\t3592\t1\t3\t1\t11\t51\t151\t1151\t2151\t7151\t102\t103\tBPAAAA\tEIFAAA\tAAAAxx\n9440\t3593\t0\t0\t0\t0\t40\t440\t1440\t4440\t9440\t80\t81\tCZAAAA\tFIFAAA\tHHHHxx\n721\t3594\t1\t1\t1\t1\t21\t721\t721\t721\t721\t42\t43\tTBAAAA\tGIFAAA\tOOOOxx\n2119\t3595\t1\t3\t9\t19\t19\t119\t119\t2119\t2119\t38\t39\tNDAAAA\tHIFAAA\tVVVVxx\n9883\t3596\t1\t3\t3\t3\t83\t883\t1883\t4883\t9883\t166\t167\tDQAAAA\tIIFAAA\tAAAAxx\n5071\t3597\t1\t3\t1\t11\t71\t71\t1071\t71\t5071\t142\t143\tBNAAAA\tJIFAAA\tHHHHxx\n8239\t3598\t1\t3\t9\t19\t39\t239\t239\t3239\t8239\t78\t79\tXEAAAA\tKIFAAA\tOOOOxx\n7451\t3599\t1\t3\t1\t11\t51\t451\t1451\t2451\t7451\t102\t103\tPAAAAA\tLIFAAA\tVVVVxx\n9517\t3600\t1\t1\t7\t17\t17\t517\t1517\t4517\t9517\t34\t35\tBCAAAA\tMIFAAA\tAAAAxx\n9180\t3601\t0\t0\t0\t0\t80\t180\t1180\t4180\t9180\t160\t161\tCPAAAA\tNIFAAA\tHHHHxx\n9327\t3602\t1\t3\t7\t7\t27\t327\t1327\t4327\t9327\t54\t55\tTUAAAA\tOIFAAA\tOOOOxx\n5462\t3603\t0\t2\t2\t2\t62\t462\t1462\t462\t5462\t124\t125\tCCAAAA\tPIFAAA\tVVVVxx\n8306\t3604\t0\t2\t6\t6\t6\t306\t306\t3306\t8306\t12\t13\tMHAAAA\tQIFAAA\tAAAAxx\n6234\t3605\t0\t2\t4\t14\t34\t234\t234\t1234\t6234\t68\t69\tUFAAAA\tRIFAAA\tHHHHxx\n8771\t3606\t1\t3\t1\t11\t71\t771\t771\t3771\t8771\t142\t143\tJZAAAA\tSIFAAA\tOOOOxx\n5853\t3607\t1\t1\t3\t13\t53\t853\t1853\t853\t5853\t106\t107\tDRAAAA\tTIFAAA\tVVVVxx\n8373\t3608\t1\t1\t3\t13\t73\t373\t373\t3373\t8373\t146\t147\tBKAAAA\tUIFAAA\tAAAAxx\n5017\t3609\t1\t1\t7\t17\t17\t17\t1017\t17\t5017\t34\t35\tZKAAAA\tVIFAAA\tHHHHxx\n8025\t3610\t1\t1\t5\t5\t25\t25\t25\t3025\t8025\t50\t51\tRWAAAA\tWIFAAA\tOOOOxx\n2526\t3611\t0\t2\t6\t6\t26\t526\t526\t2526\t2526\t52\t53\tETAAAA\tXIFAAA\tVVVVxx\n7419\t3612\t1\t3\t9\t19\t19\t419\t1419\t2419\t7419\t38\t39\tJZAAAA\tYIFAAA\tAAAAxx\n4572\t3613\t0\t0\t2\t12\t72\t572\t572\t4572\t4572\t144\t145\tWTAAAA\tZIFAAA\tHHHHxx\n7744\t3614\t0\t0\t4\t4\t44\t744\t1744\t2744\t7744\t88\t89\tWLAAAA\tAJFAAA\tOOOOxx\n8825\t3615\t1\t1\t5\t5\t25\t825\t825\t3825\t8825\t50\t51\tLBAAAA\tBJFAAA\tVVVVxx\n6067\t3616\t1\t3\t7\t7\t67\t67\t67\t1067\t6067\t134\t135\tJZAAAA\tCJFAAA\tAAAAxx\n3291\t3617\t1\t3\t1\t11\t91\t291\t1291\t3291\t3291\t182\t183\tPWAAAA\tDJFAAA\tHHHHxx\n7115\t3618\t1\t3\t5\t15\t15\t115\t1115\t2115\t7115\t30\t31\tRNAAAA\tEJFAAA\tOOOOxx\n2626\t3619\t0\t2\t6\t6\t26\t626\t626\t2626\t2626\t52\t53\tAXAAAA\tFJFAAA\tVVVVxx\n4109\t3620\t1\t1\t9\t9\t9\t109\t109\t4109\t4109\t18\t19\tBCAAAA\tGJFAAA\tAAAAxx\n4056\t3621\t0\t0\t6\t16\t56\t56\t56\t4056\t4056\t112\t113\tAAAAAA\tHJFAAA\tHHHHxx\n6811\t3622\t1\t3\t1\t11\t11\t811\t811\t1811\t6811\t22\t23\tZBAAAA\tIJFAAA\tOOOOxx\n680\t3623\t0\t0\t0\t0\t80\t680\t680\t680\t680\t160\t161\tEAAAAA\tJJFAAA\tVVVVxx\n474\t3624\t0\t2\t4\t14\t74\t474\t474\t474\t474\t148\t149\tGSAAAA\tKJFAAA\tAAAAxx\n9294\t3625\t0\t2\t4\t14\t94\t294\t1294\t4294\t9294\t188\t189\tMTAAAA\tLJFAAA\tHHHHxx\n7555\t3626\t1\t3\t5\t15\t55\t555\t1555\t2555\t7555\t110\t111\tPEAAAA\tMJFAAA\tOOOOxx\n8076\t3627\t0\t0\t6\t16\t76\t76\t76\t3076\t8076\t152\t153\tQYAAAA\tNJFAAA\tVVVVxx\n3840\t3628\t0\t0\t0\t0\t40\t840\t1840\t3840\t3840\t80\t81\tSRAAAA\tOJFAAA\tAAAAxx\n5955\t3629\t1\t3\t5\t15\t55\t955\t1955\t955\t5955\t110\t111\tBVAAAA\tPJFAAA\tHHHHxx\n994\t3630\t0\t2\t4\t14\t94\t994\t994\t994\t994\t188\t189\tGMAAAA\tQJFAAA\tOOOOxx\n2089\t3631\t1\t1\t9\t9\t89\t89\t89\t2089\t2089\t178\t179\tJCAAAA\tRJFAAA\tVVVVxx\n869\t3632\t1\t1\t9\t9\t69\t869\t869\t869\t869\t138\t139\tLHAAAA\tSJFAAA\tAAAAxx\n1223\t3633\t1\t3\t3\t3\t23\t223\t1223\t1223\t1223\t46\t47\tBVAAAA\tTJFAAA\tHHHHxx\n1514\t3634\t0\t2\t4\t14\t14\t514\t1514\t1514\t1514\t28\t29\tGGAAAA\tUJFAAA\tOOOOxx\n4891\t3635\t1\t3\t1\t11\t91\t891\t891\t4891\t4891\t182\t183\tDGAAAA\tVJFAAA\tVVVVxx\n4190\t3636\t0\t2\t0\t10\t90\t190\t190\t4190\t4190\t180\t181\tEFAAAA\tWJFAAA\tAAAAxx\n4377\t3637\t1\t1\t7\t17\t77\t377\t377\t4377\t4377\t154\t155\tJMAAAA\tXJFAAA\tHHHHxx\n9195\t3638\t1\t3\t5\t15\t95\t195\t1195\t4195\t9195\t190\t191\tRPAAAA\tYJFAAA\tOOOOxx\n3827\t3639\t1\t3\t7\t7\t27\t827\t1827\t3827\t3827\t54\t55\tFRAAAA\tZJFAAA\tVVVVxx\n7386\t3640\t0\t2\t6\t6\t86\t386\t1386\t2386\t7386\t172\t173\tCYAAAA\tAKFAAA\tAAAAxx\n6665\t3641\t1\t1\t5\t5\t65\t665\t665\t1665\t6665\t130\t131\tJWAAAA\tBKFAAA\tHHHHxx\n7514\t3642\t0\t2\t4\t14\t14\t514\t1514\t2514\t7514\t28\t29\tADAAAA\tCKFAAA\tOOOOxx\n6431\t3643\t1\t3\t1\t11\t31\t431\t431\t1431\t6431\t62\t63\tJNAAAA\tDKFAAA\tVVVVxx\n3251\t3644\t1\t3\t1\t11\t51\t251\t1251\t3251\t3251\t102\t103\tBVAAAA\tEKFAAA\tAAAAxx\n8439\t3645\t1\t3\t9\t19\t39\t439\t439\t3439\t8439\t78\t79\tPMAAAA\tFKFAAA\tHHHHxx\n831\t3646\t1\t3\t1\t11\t31\t831\t831\t831\t831\t62\t63\tZFAAAA\tGKFAAA\tOOOOxx\n8485\t3647\t1\t1\t5\t5\t85\t485\t485\t3485\t8485\t170\t171\tJOAAAA\tHKFAAA\tVVVVxx\n7314\t3648\t0\t2\t4\t14\t14\t314\t1314\t2314\t7314\t28\t29\tIVAAAA\tIKFAAA\tAAAAxx\n3044\t3649\t0\t0\t4\t4\t44\t44\t1044\t3044\t3044\t88\t89\tCNAAAA\tJKFAAA\tHHHHxx\n4283\t3650\t1\t3\t3\t3\t83\t283\t283\t4283\t4283\t166\t167\tTIAAAA\tKKFAAA\tOOOOxx\n298\t3651\t0\t2\t8\t18\t98\t298\t298\t298\t298\t196\t197\tMLAAAA\tLKFAAA\tVVVVxx\n7114\t3652\t0\t2\t4\t14\t14\t114\t1114\t2114\t7114\t28\t29\tQNAAAA\tMKFAAA\tAAAAxx\n9664\t3653\t0\t0\t4\t4\t64\t664\t1664\t4664\t9664\t128\t129\tSHAAAA\tNKFAAA\tHHHHxx\n5315\t3654\t1\t3\t5\t15\t15\t315\t1315\t315\t5315\t30\t31\tLWAAAA\tOKFAAA\tOOOOxx\n2164\t3655\t0\t0\t4\t4\t64\t164\t164\t2164\t2164\t128\t129\tGFAAAA\tPKFAAA\tVVVVxx\n3390\t3656\t0\t2\t0\t10\t90\t390\t1390\t3390\t3390\t180\t181\tKAAAAA\tQKFAAA\tAAAAxx\n836\t3657\t0\t0\t6\t16\t36\t836\t836\t836\t836\t72\t73\tEGAAAA\tRKFAAA\tHHHHxx\n3316\t3658\t0\t0\t6\t16\t16\t316\t1316\t3316\t3316\t32\t33\tOXAAAA\tSKFAAA\tOOOOxx\n1284\t3659\t0\t0\t4\t4\t84\t284\t1284\t1284\t1284\t168\t169\tKXAAAA\tTKFAAA\tVVVVxx\n2497\t3660\t1\t1\t7\t17\t97\t497\t497\t2497\t2497\t194\t195\tBSAAAA\tUKFAAA\tAAAAxx\n1374\t3661\t0\t2\t4\t14\t74\t374\t1374\t1374\t1374\t148\t149\tWAAAAA\tVKFAAA\tHHHHxx\n9525\t3662\t1\t1\t5\t5\t25\t525\t1525\t4525\t9525\t50\t51\tJCAAAA\tWKFAAA\tOOOOxx\n2911\t3663\t1\t3\t1\t11\t11\t911\t911\t2911\t2911\t22\t23\tZHAAAA\tXKFAAA\tVVVVxx\n9686\t3664\t0\t2\t6\t6\t86\t686\t1686\t4686\t9686\t172\t173\tOIAAAA\tYKFAAA\tAAAAxx\n584\t3665\t0\t0\t4\t4\t84\t584\t584\t584\t584\t168\t169\tMWAAAA\tZKFAAA\tHHHHxx\n5653\t3666\t1\t1\t3\t13\t53\t653\t1653\t653\t5653\t106\t107\tLJAAAA\tALFAAA\tOOOOxx\n4986\t3667\t0\t2\t6\t6\t86\t986\t986\t4986\t4986\t172\t173\tUJAAAA\tBLFAAA\tVVVVxx\n6049\t3668\t1\t1\t9\t9\t49\t49\t49\t1049\t6049\t98\t99\tRYAAAA\tCLFAAA\tAAAAxx\n9891\t3669\t1\t3\t1\t11\t91\t891\t1891\t4891\t9891\t182\t183\tLQAAAA\tDLFAAA\tHHHHxx\n8809\t3670\t1\t1\t9\t9\t9\t809\t809\t3809\t8809\t18\t19\tVAAAAA\tELFAAA\tOOOOxx\n8598\t3671\t0\t2\t8\t18\t98\t598\t598\t3598\t8598\t196\t197\tSSAAAA\tFLFAAA\tVVVVxx\n2573\t3672\t1\t1\t3\t13\t73\t573\t573\t2573\t2573\t146\t147\tZUAAAA\tGLFAAA\tAAAAxx\n6864\t3673\t0\t0\t4\t4\t64\t864\t864\t1864\t6864\t128\t129\tAEAAAA\tHLFAAA\tHHHHxx\n7932\t3674\t0\t0\t2\t12\t32\t932\t1932\t2932\t7932\t64\t65\tCTAAAA\tILFAAA\tOOOOxx\n6605\t3675\t1\t1\t5\t5\t5\t605\t605\t1605\t6605\t10\t11\tBUAAAA\tJLFAAA\tVVVVxx\n9500\t3676\t0\t0\t0\t0\t0\t500\t1500\t4500\t9500\t0\t1\tKBAAAA\tKLFAAA\tAAAAxx\n8742\t3677\t0\t2\t2\t2\t42\t742\t742\t3742\t8742\t84\t85\tGYAAAA\tLLFAAA\tHHHHxx\n9815\t3678\t1\t3\t5\t15\t15\t815\t1815\t4815\t9815\t30\t31\tNNAAAA\tMLFAAA\tOOOOxx\n3319\t3679\t1\t3\t9\t19\t19\t319\t1319\t3319\t3319\t38\t39\tRXAAAA\tNLFAAA\tVVVVxx\n184\t3680\t0\t0\t4\t4\t84\t184\t184\t184\t184\t168\t169\tCHAAAA\tOLFAAA\tAAAAxx\n8886\t3681\t0\t2\t6\t6\t86\t886\t886\t3886\t8886\t172\t173\tUDAAAA\tPLFAAA\tHHHHxx\n7050\t3682\t0\t2\t0\t10\t50\t50\t1050\t2050\t7050\t100\t101\tELAAAA\tQLFAAA\tOOOOxx\n9781\t3683\t1\t1\t1\t1\t81\t781\t1781\t4781\t9781\t162\t163\tFMAAAA\tRLFAAA\tVVVVxx\n2443\t3684\t1\t3\t3\t3\t43\t443\t443\t2443\t2443\t86\t87\tZPAAAA\tSLFAAA\tAAAAxx\n1160\t3685\t0\t0\t0\t0\t60\t160\t1160\t1160\t1160\t120\t121\tQSAAAA\tTLFAAA\tHHHHxx\n4600\t3686\t0\t0\t0\t0\t0\t600\t600\t4600\t4600\t0\t1\tYUAAAA\tULFAAA\tOOOOxx\n813\t3687\t1\t1\t3\t13\t13\t813\t813\t813\t813\t26\t27\tHFAAAA\tVLFAAA\tVVVVxx\n5078\t3688\t0\t2\t8\t18\t78\t78\t1078\t78\t5078\t156\t157\tINAAAA\tWLFAAA\tAAAAxx\n9008\t3689\t0\t0\t8\t8\t8\t8\t1008\t4008\t9008\t16\t17\tMIAAAA\tXLFAAA\tHHHHxx\n9016\t3690\t0\t0\t6\t16\t16\t16\t1016\t4016\t9016\t32\t33\tUIAAAA\tYLFAAA\tOOOOxx\n2747\t3691\t1\t3\t7\t7\t47\t747\t747\t2747\t2747\t94\t95\tRBAAAA\tZLFAAA\tVVVVxx\n3106\t3692\t0\t2\t6\t6\t6\t106\t1106\t3106\t3106\t12\t13\tMPAAAA\tAMFAAA\tAAAAxx\n8235\t3693\t1\t3\t5\t15\t35\t235\t235\t3235\t8235\t70\t71\tTEAAAA\tBMFAAA\tHHHHxx\n5582\t3694\t0\t2\t2\t2\t82\t582\t1582\t582\t5582\t164\t165\tSGAAAA\tCMFAAA\tOOOOxx\n4334\t3695\t0\t2\t4\t14\t34\t334\t334\t4334\t4334\t68\t69\tSKAAAA\tDMFAAA\tVVVVxx\n1612\t3696\t0\t0\t2\t12\t12\t612\t1612\t1612\t1612\t24\t25\tAKAAAA\tEMFAAA\tAAAAxx\n5650\t3697\t0\t2\t0\t10\t50\t650\t1650\t650\t5650\t100\t101\tIJAAAA\tFMFAAA\tHHHHxx\n6086\t3698\t0\t2\t6\t6\t86\t86\t86\t1086\t6086\t172\t173\tCAAAAA\tGMFAAA\tOOOOxx\n9667\t3699\t1\t3\t7\t7\t67\t667\t1667\t4667\t9667\t134\t135\tVHAAAA\tHMFAAA\tVVVVxx\n4215\t3700\t1\t3\t5\t15\t15\t215\t215\t4215\t4215\t30\t31\tDGAAAA\tIMFAAA\tAAAAxx\n8553\t3701\t1\t1\t3\t13\t53\t553\t553\t3553\t8553\t106\t107\tZQAAAA\tJMFAAA\tHHHHxx\n9066\t3702\t0\t2\t6\t6\t66\t66\t1066\t4066\t9066\t132\t133\tSKAAAA\tKMFAAA\tOOOOxx\n1092\t3703\t0\t0\t2\t12\t92\t92\t1092\t1092\t1092\t184\t185\tAQAAAA\tLMFAAA\tVVVVxx\n2848\t3704\t0\t0\t8\t8\t48\t848\t848\t2848\t2848\t96\t97\tOFAAAA\tMMFAAA\tAAAAxx\n2765\t3705\t1\t1\t5\t5\t65\t765\t765\t2765\t2765\t130\t131\tJCAAAA\tNMFAAA\tHHHHxx\n6513\t3706\t1\t1\t3\t13\t13\t513\t513\t1513\t6513\t26\t27\tNQAAAA\tOMFAAA\tOOOOxx\n6541\t3707\t1\t1\t1\t1\t41\t541\t541\t1541\t6541\t82\t83\tPRAAAA\tPMFAAA\tVVVVxx\n9617\t3708\t1\t1\t7\t17\t17\t617\t1617\t4617\t9617\t34\t35\tXFAAAA\tQMFAAA\tAAAAxx\n5870\t3709\t0\t2\t0\t10\t70\t870\t1870\t870\t5870\t140\t141\tURAAAA\tRMFAAA\tHHHHxx\n8811\t3710\t1\t3\t1\t11\t11\t811\t811\t3811\t8811\t22\t23\tXAAAAA\tSMFAAA\tOOOOxx\n4529\t3711\t1\t1\t9\t9\t29\t529\t529\t4529\t4529\t58\t59\tFSAAAA\tTMFAAA\tVVVVxx\n161\t3712\t1\t1\t1\t1\t61\t161\t161\t161\t161\t122\t123\tFGAAAA\tUMFAAA\tAAAAxx\n641\t3713\t1\t1\t1\t1\t41\t641\t641\t641\t641\t82\t83\tRYAAAA\tVMFAAA\tHHHHxx\n4767\t3714\t1\t3\t7\t7\t67\t767\t767\t4767\t4767\t134\t135\tJBAAAA\tWMFAAA\tOOOOxx\n6293\t3715\t1\t1\t3\t13\t93\t293\t293\t1293\t6293\t186\t187\tBIAAAA\tXMFAAA\tVVVVxx\n3816\t3716\t0\t0\t6\t16\t16\t816\t1816\t3816\t3816\t32\t33\tUQAAAA\tYMFAAA\tAAAAxx\n4748\t3717\t0\t0\t8\t8\t48\t748\t748\t4748\t4748\t96\t97\tQAAAAA\tZMFAAA\tHHHHxx\n9924\t3718\t0\t0\t4\t4\t24\t924\t1924\t4924\t9924\t48\t49\tSRAAAA\tANFAAA\tOOOOxx\n6716\t3719\t0\t0\t6\t16\t16\t716\t716\t1716\t6716\t32\t33\tIYAAAA\tBNFAAA\tVVVVxx\n8828\t3720\t0\t0\t8\t8\t28\t828\t828\t3828\t8828\t56\t57\tOBAAAA\tCNFAAA\tAAAAxx\n4967\t3721\t1\t3\t7\t7\t67\t967\t967\t4967\t4967\t134\t135\tBJAAAA\tDNFAAA\tHHHHxx\n9680\t3722\t0\t0\t0\t0\t80\t680\t1680\t4680\t9680\t160\t161\tIIAAAA\tENFAAA\tOOOOxx\n2784\t3723\t0\t0\t4\t4\t84\t784\t784\t2784\t2784\t168\t169\tCDAAAA\tFNFAAA\tVVVVxx\n2882\t3724\t0\t2\t2\t2\t82\t882\t882\t2882\t2882\t164\t165\tWGAAAA\tGNFAAA\tAAAAxx\n3641\t3725\t1\t1\t1\t1\t41\t641\t1641\t3641\t3641\t82\t83\tBKAAAA\tHNFAAA\tHHHHxx\n5537\t3726\t1\t1\t7\t17\t37\t537\t1537\t537\t5537\t74\t75\tZEAAAA\tINFAAA\tOOOOxx\n820\t3727\t0\t0\t0\t0\t20\t820\t820\t820\t820\t40\t41\tOFAAAA\tJNFAAA\tVVVVxx\n5847\t3728\t1\t3\t7\t7\t47\t847\t1847\t847\t5847\t94\t95\tXQAAAA\tKNFAAA\tAAAAxx\n566\t3729\t0\t2\t6\t6\t66\t566\t566\t566\t566\t132\t133\tUVAAAA\tLNFAAA\tHHHHxx\n2246\t3730\t0\t2\t6\t6\t46\t246\t246\t2246\t2246\t92\t93\tKIAAAA\tMNFAAA\tOOOOxx\n6680\t3731\t0\t0\t0\t0\t80\t680\t680\t1680\t6680\t160\t161\tYWAAAA\tNNFAAA\tVVVVxx\n2014\t3732\t0\t2\t4\t14\t14\t14\t14\t2014\t2014\t28\t29\tMZAAAA\tONFAAA\tAAAAxx\n8355\t3733\t1\t3\t5\t15\t55\t355\t355\t3355\t8355\t110\t111\tJJAAAA\tPNFAAA\tHHHHxx\n1610\t3734\t0\t2\t0\t10\t10\t610\t1610\t1610\t1610\t20\t21\tYJAAAA\tQNFAAA\tOOOOxx\n9719\t3735\t1\t3\t9\t19\t19\t719\t1719\t4719\t9719\t38\t39\tVJAAAA\tRNFAAA\tVVVVxx\n8498\t3736\t0\t2\t8\t18\t98\t498\t498\t3498\t8498\t196\t197\tWOAAAA\tSNFAAA\tAAAAxx\n5883\t3737\t1\t3\t3\t3\t83\t883\t1883\t883\t5883\t166\t167\tHSAAAA\tTNFAAA\tHHHHxx\n7380\t3738\t0\t0\t0\t0\t80\t380\t1380\t2380\t7380\t160\t161\tWXAAAA\tUNFAAA\tOOOOxx\n8865\t3739\t1\t1\t5\t5\t65\t865\t865\t3865\t8865\t130\t131\tZCAAAA\tVNFAAA\tVVVVxx\n4743\t3740\t1\t3\t3\t3\t43\t743\t743\t4743\t4743\t86\t87\tLAAAAA\tWNFAAA\tAAAAxx\n5086\t3741\t0\t2\t6\t6\t86\t86\t1086\t86\t5086\t172\t173\tQNAAAA\tXNFAAA\tHHHHxx\n2739\t3742\t1\t3\t9\t19\t39\t739\t739\t2739\t2739\t78\t79\tJBAAAA\tYNFAAA\tOOOOxx\n9375\t3743\t1\t3\t5\t15\t75\t375\t1375\t4375\t9375\t150\t151\tPWAAAA\tZNFAAA\tVVVVxx\n7876\t3744\t0\t0\t6\t16\t76\t876\t1876\t2876\t7876\t152\t153\tYQAAAA\tAOFAAA\tAAAAxx\n453\t3745\t1\t1\t3\t13\t53\t453\t453\t453\t453\t106\t107\tLRAAAA\tBOFAAA\tHHHHxx\n6987\t3746\t1\t3\t7\t7\t87\t987\t987\t1987\t6987\t174\t175\tTIAAAA\tCOFAAA\tOOOOxx\n2860\t3747\t0\t0\t0\t0\t60\t860\t860\t2860\t2860\t120\t121\tAGAAAA\tDOFAAA\tVVVVxx\n8372\t3748\t0\t0\t2\t12\t72\t372\t372\t3372\t8372\t144\t145\tAKAAAA\tEOFAAA\tAAAAxx\n2048\t3749\t0\t0\t8\t8\t48\t48\t48\t2048\t2048\t96\t97\tUAAAAA\tFOFAAA\tHHHHxx\n9231\t3750\t1\t3\t1\t11\t31\t231\t1231\t4231\t9231\t62\t63\tBRAAAA\tGOFAAA\tOOOOxx\n634\t3751\t0\t2\t4\t14\t34\t634\t634\t634\t634\t68\t69\tKYAAAA\tHOFAAA\tVVVVxx\n3998\t3752\t0\t2\t8\t18\t98\t998\t1998\t3998\t3998\t196\t197\tUXAAAA\tIOFAAA\tAAAAxx\n4728\t3753\t0\t0\t8\t8\t28\t728\t728\t4728\t4728\t56\t57\tWZAAAA\tJOFAAA\tHHHHxx\n579\t3754\t1\t3\t9\t19\t79\t579\t579\t579\t579\t158\t159\tHWAAAA\tKOFAAA\tOOOOxx\n815\t3755\t1\t3\t5\t15\t15\t815\t815\t815\t815\t30\t31\tJFAAAA\tLOFAAA\tVVVVxx\n1009\t3756\t1\t1\t9\t9\t9\t9\t1009\t1009\t1009\t18\t19\tVMAAAA\tMOFAAA\tAAAAxx\n6596\t3757\t0\t0\t6\t16\t96\t596\t596\t1596\t6596\t192\t193\tSTAAAA\tNOFAAA\tHHHHxx\n2793\t3758\t1\t1\t3\t13\t93\t793\t793\t2793\t2793\t186\t187\tLDAAAA\tOOFAAA\tOOOOxx\n9589\t3759\t1\t1\t9\t9\t89\t589\t1589\t4589\t9589\t178\t179\tVEAAAA\tPOFAAA\tVVVVxx\n2794\t3760\t0\t2\t4\t14\t94\t794\t794\t2794\t2794\t188\t189\tMDAAAA\tQOFAAA\tAAAAxx\n2551\t3761\t1\t3\t1\t11\t51\t551\t551\t2551\t2551\t102\t103\tDUAAAA\tROFAAA\tHHHHxx\n1588\t3762\t0\t0\t8\t8\t88\t588\t1588\t1588\t1588\t176\t177\tCJAAAA\tSOFAAA\tOOOOxx\n4443\t3763\t1\t3\t3\t3\t43\t443\t443\t4443\t4443\t86\t87\tXOAAAA\tTOFAAA\tVVVVxx\n5009\t3764\t1\t1\t9\t9\t9\t9\t1009\t9\t5009\t18\t19\tRKAAAA\tUOFAAA\tAAAAxx\n4287\t3765\t1\t3\t7\t7\t87\t287\t287\t4287\t4287\t174\t175\tXIAAAA\tVOFAAA\tHHHHxx\n2167\t3766\t1\t3\t7\t7\t67\t167\t167\t2167\t2167\t134\t135\tJFAAAA\tWOFAAA\tOOOOxx\n2290\t3767\t0\t2\t0\t10\t90\t290\t290\t2290\t2290\t180\t181\tCKAAAA\tXOFAAA\tVVVVxx\n7225\t3768\t1\t1\t5\t5\t25\t225\t1225\t2225\t7225\t50\t51\tXRAAAA\tYOFAAA\tAAAAxx\n8992\t3769\t0\t0\t2\t12\t92\t992\t992\t3992\t8992\t184\t185\tWHAAAA\tZOFAAA\tHHHHxx\n1540\t3770\t0\t0\t0\t0\t40\t540\t1540\t1540\t1540\t80\t81\tGHAAAA\tAPFAAA\tOOOOxx\n2029\t3771\t1\t1\t9\t9\t29\t29\t29\t2029\t2029\t58\t59\tBAAAAA\tBPFAAA\tVVVVxx\n2855\t3772\t1\t3\t5\t15\t55\t855\t855\t2855\t2855\t110\t111\tVFAAAA\tCPFAAA\tAAAAxx\n3534\t3773\t0\t2\t4\t14\t34\t534\t1534\t3534\t3534\t68\t69\tYFAAAA\tDPFAAA\tHHHHxx\n8078\t3774\t0\t2\t8\t18\t78\t78\t78\t3078\t8078\t156\t157\tSYAAAA\tEPFAAA\tOOOOxx\n9778\t3775\t0\t2\t8\t18\t78\t778\t1778\t4778\t9778\t156\t157\tCMAAAA\tFPFAAA\tVVVVxx\n3543\t3776\t1\t3\t3\t3\t43\t543\t1543\t3543\t3543\t86\t87\tHGAAAA\tGPFAAA\tAAAAxx\n4778\t3777\t0\t2\t8\t18\t78\t778\t778\t4778\t4778\t156\t157\tUBAAAA\tHPFAAA\tHHHHxx\n8931\t3778\t1\t3\t1\t11\t31\t931\t931\t3931\t8931\t62\t63\tNFAAAA\tIPFAAA\tOOOOxx\n557\t3779\t1\t1\t7\t17\t57\t557\t557\t557\t557\t114\t115\tLVAAAA\tJPFAAA\tVVVVxx\n5546\t3780\t0\t2\t6\t6\t46\t546\t1546\t546\t5546\t92\t93\tIFAAAA\tKPFAAA\tAAAAxx\n7527\t3781\t1\t3\t7\t7\t27\t527\t1527\t2527\t7527\t54\t55\tNDAAAA\tLPFAAA\tHHHHxx\n5000\t3782\t0\t0\t0\t0\t0\t0\t1000\t0\t5000\t0\t1\tIKAAAA\tMPFAAA\tOOOOxx\n7587\t3783\t1\t3\t7\t7\t87\t587\t1587\t2587\t7587\t174\t175\tVFAAAA\tNPFAAA\tVVVVxx\n3014\t3784\t0\t2\t4\t14\t14\t14\t1014\t3014\t3014\t28\t29\tYLAAAA\tOPFAAA\tAAAAxx\n5276\t3785\t0\t0\t6\t16\t76\t276\t1276\t276\t5276\t152\t153\tYUAAAA\tPPFAAA\tHHHHxx\n6457\t3786\t1\t1\t7\t17\t57\t457\t457\t1457\t6457\t114\t115\tJOAAAA\tQPFAAA\tOOOOxx\n389\t3787\t1\t1\t9\t9\t89\t389\t389\t389\t389\t178\t179\tZOAAAA\tRPFAAA\tVVVVxx\n7104\t3788\t0\t0\t4\t4\t4\t104\t1104\t2104\t7104\t8\t9\tGNAAAA\tSPFAAA\tAAAAxx\n9995\t3789\t1\t3\t5\t15\t95\t995\t1995\t4995\t9995\t190\t191\tLUAAAA\tTPFAAA\tHHHHxx\n7368\t3790\t0\t0\t8\t8\t68\t368\t1368\t2368\t7368\t136\t137\tKXAAAA\tUPFAAA\tOOOOxx\n3258\t3791\t0\t2\t8\t18\t58\t258\t1258\t3258\t3258\t116\t117\tIVAAAA\tVPFAAA\tVVVVxx\n9208\t3792\t0\t0\t8\t8\t8\t208\t1208\t4208\t9208\t16\t17\tEQAAAA\tWPFAAA\tAAAAxx\n2396\t3793\t0\t0\t6\t16\t96\t396\t396\t2396\t2396\t192\t193\tEOAAAA\tXPFAAA\tHHHHxx\n1715\t3794\t1\t3\t5\t15\t15\t715\t1715\t1715\t1715\t30\t31\tZNAAAA\tYPFAAA\tOOOOxx\n1240\t3795\t0\t0\t0\t0\t40\t240\t1240\t1240\t1240\t80\t81\tSVAAAA\tZPFAAA\tVVVVxx\n1952\t3796\t0\t0\t2\t12\t52\t952\t1952\t1952\t1952\t104\t105\tCXAAAA\tAQFAAA\tAAAAxx\n4403\t3797\t1\t3\t3\t3\t3\t403\t403\t4403\t4403\t6\t7\tJNAAAA\tBQFAAA\tHHHHxx\n6333\t3798\t1\t1\t3\t13\t33\t333\t333\t1333\t6333\t66\t67\tPJAAAA\tCQFAAA\tOOOOxx\n2492\t3799\t0\t0\t2\t12\t92\t492\t492\t2492\t2492\t184\t185\tWRAAAA\tDQFAAA\tVVVVxx\n6543\t3800\t1\t3\t3\t3\t43\t543\t543\t1543\t6543\t86\t87\tRRAAAA\tEQFAAA\tAAAAxx\n5548\t3801\t0\t0\t8\t8\t48\t548\t1548\t548\t5548\t96\t97\tKFAAAA\tFQFAAA\tHHHHxx\n3458\t3802\t0\t2\t8\t18\t58\t458\t1458\t3458\t3458\t116\t117\tADAAAA\tGQFAAA\tOOOOxx\n2588\t3803\t0\t0\t8\t8\t88\t588\t588\t2588\t2588\t176\t177\tOVAAAA\tHQFAAA\tVVVVxx\n1364\t3804\t0\t0\t4\t4\t64\t364\t1364\t1364\t1364\t128\t129\tMAAAAA\tIQFAAA\tAAAAxx\n9856\t3805\t0\t0\t6\t16\t56\t856\t1856\t4856\t9856\t112\t113\tCPAAAA\tJQFAAA\tHHHHxx\n4964\t3806\t0\t0\t4\t4\t64\t964\t964\t4964\t4964\t128\t129\tYIAAAA\tKQFAAA\tOOOOxx\n773\t3807\t1\t1\t3\t13\t73\t773\t773\t773\t773\t146\t147\tTDAAAA\tLQFAAA\tVVVVxx\n6402\t3808\t0\t2\t2\t2\t2\t402\t402\t1402\t6402\t4\t5\tGMAAAA\tMQFAAA\tAAAAxx\n7213\t3809\t1\t1\t3\t13\t13\t213\t1213\t2213\t7213\t26\t27\tLRAAAA\tNQFAAA\tHHHHxx\n3385\t3810\t1\t1\t5\t5\t85\t385\t1385\t3385\t3385\t170\t171\tFAAAAA\tOQFAAA\tOOOOxx\n6005\t3811\t1\t1\t5\t5\t5\t5\t5\t1005\t6005\t10\t11\tZWAAAA\tPQFAAA\tVVVVxx\n9346\t3812\t0\t2\t6\t6\t46\t346\t1346\t4346\t9346\t92\t93\tMVAAAA\tQQFAAA\tAAAAxx\n1831\t3813\t1\t3\t1\t11\t31\t831\t1831\t1831\t1831\t62\t63\tLSAAAA\tRQFAAA\tHHHHxx\n5406\t3814\t0\t2\t6\t6\t6\t406\t1406\t406\t5406\t12\t13\tYZAAAA\tSQFAAA\tOOOOxx\n2154\t3815\t0\t2\t4\t14\t54\t154\t154\t2154\t2154\t108\t109\tWEAAAA\tTQFAAA\tVVVVxx\n3721\t3816\t1\t1\t1\t1\t21\t721\t1721\t3721\t3721\t42\t43\tDNAAAA\tUQFAAA\tAAAAxx\n2889\t3817\t1\t1\t9\t9\t89\t889\t889\t2889\t2889\t178\t179\tDHAAAA\tVQFAAA\tHHHHxx\n4410\t3818\t0\t2\t0\t10\t10\t410\t410\t4410\t4410\t20\t21\tQNAAAA\tWQFAAA\tOOOOxx\n7102\t3819\t0\t2\t2\t2\t2\t102\t1102\t2102\t7102\t4\t5\tENAAAA\tXQFAAA\tVVVVxx\n4057\t3820\t1\t1\t7\t17\t57\t57\t57\t4057\t4057\t114\t115\tBAAAAA\tYQFAAA\tAAAAxx\n9780\t3821\t0\t0\t0\t0\t80\t780\t1780\t4780\t9780\t160\t161\tEMAAAA\tZQFAAA\tHHHHxx\n9481\t3822\t1\t1\t1\t1\t81\t481\t1481\t4481\t9481\t162\t163\tRAAAAA\tARFAAA\tOOOOxx\n2366\t3823\t0\t2\t6\t6\t66\t366\t366\t2366\t2366\t132\t133\tANAAAA\tBRFAAA\tVVVVxx\n2708\t3824\t0\t0\t8\t8\t8\t708\t708\t2708\t2708\t16\t17\tEAAAAA\tCRFAAA\tAAAAxx\n7399\t3825\t1\t3\t9\t19\t99\t399\t1399\t2399\t7399\t198\t199\tPYAAAA\tDRFAAA\tHHHHxx\n5234\t3826\t0\t2\t4\t14\t34\t234\t1234\t234\t5234\t68\t69\tITAAAA\tERFAAA\tOOOOxx\n1843\t3827\t1\t3\t3\t3\t43\t843\t1843\t1843\t1843\t86\t87\tXSAAAA\tFRFAAA\tVVVVxx\n1006\t3828\t0\t2\t6\t6\t6\t6\t1006\t1006\t1006\t12\t13\tSMAAAA\tGRFAAA\tAAAAxx\n7696\t3829\t0\t0\t6\t16\t96\t696\t1696\t2696\t7696\t192\t193\tAKAAAA\tHRFAAA\tHHHHxx\n6411\t3830\t1\t3\t1\t11\t11\t411\t411\t1411\t6411\t22\t23\tPMAAAA\tIRFAAA\tOOOOxx\n3913\t3831\t1\t1\t3\t13\t13\t913\t1913\t3913\t3913\t26\t27\tNUAAAA\tJRFAAA\tVVVVxx\n2538\t3832\t0\t2\t8\t18\t38\t538\t538\t2538\t2538\t76\t77\tQTAAAA\tKRFAAA\tAAAAxx\n3019\t3833\t1\t3\t9\t19\t19\t19\t1019\t3019\t3019\t38\t39\tDMAAAA\tLRFAAA\tHHHHxx\n107\t3834\t1\t3\t7\t7\t7\t107\t107\t107\t107\t14\t15\tDEAAAA\tMRFAAA\tOOOOxx\n427\t3835\t1\t3\t7\t7\t27\t427\t427\t427\t427\t54\t55\tLQAAAA\tNRFAAA\tVVVVxx\n9849\t3836\t1\t1\t9\t9\t49\t849\t1849\t4849\t9849\t98\t99\tVOAAAA\tORFAAA\tAAAAxx\n4195\t3837\t1\t3\t5\t15\t95\t195\t195\t4195\t4195\t190\t191\tJFAAAA\tPRFAAA\tHHHHxx\n9215\t3838\t1\t3\t5\t15\t15\t215\t1215\t4215\t9215\t30\t31\tLQAAAA\tQRFAAA\tOOOOxx\n3165\t3839\t1\t1\t5\t5\t65\t165\t1165\t3165\t3165\t130\t131\tTRAAAA\tRRFAAA\tVVVVxx\n3280\t3840\t0\t0\t0\t0\t80\t280\t1280\t3280\t3280\t160\t161\tEWAAAA\tSRFAAA\tAAAAxx\n4477\t3841\t1\t1\t7\t17\t77\t477\t477\t4477\t4477\t154\t155\tFQAAAA\tTRFAAA\tHHHHxx\n5885\t3842\t1\t1\t5\t5\t85\t885\t1885\t885\t5885\t170\t171\tJSAAAA\tURFAAA\tOOOOxx\n3311\t3843\t1\t3\t1\t11\t11\t311\t1311\t3311\t3311\t22\t23\tJXAAAA\tVRFAAA\tVVVVxx\n6453\t3844\t1\t1\t3\t13\t53\t453\t453\t1453\t6453\t106\t107\tFOAAAA\tWRFAAA\tAAAAxx\n8527\t3845\t1\t3\t7\t7\t27\t527\t527\t3527\t8527\t54\t55\tZPAAAA\tXRFAAA\tHHHHxx\n1921\t3846\t1\t1\t1\t1\t21\t921\t1921\t1921\t1921\t42\t43\tXVAAAA\tYRFAAA\tOOOOxx\n2427\t3847\t1\t3\t7\t7\t27\t427\t427\t2427\t2427\t54\t55\tJPAAAA\tZRFAAA\tVVVVxx\n3691\t3848\t1\t3\t1\t11\t91\t691\t1691\t3691\t3691\t182\t183\tZLAAAA\tASFAAA\tAAAAxx\n3882\t3849\t0\t2\t2\t2\t82\t882\t1882\t3882\t3882\t164\t165\tITAAAA\tBSFAAA\tHHHHxx\n562\t3850\t0\t2\t2\t2\t62\t562\t562\t562\t562\t124\t125\tQVAAAA\tCSFAAA\tOOOOxx\n377\t3851\t1\t1\t7\t17\t77\t377\t377\t377\t377\t154\t155\tNOAAAA\tDSFAAA\tVVVVxx\n1497\t3852\t1\t1\t7\t17\t97\t497\t1497\t1497\t1497\t194\t195\tPFAAAA\tESFAAA\tAAAAxx\n4453\t3853\t1\t1\t3\t13\t53\t453\t453\t4453\t4453\t106\t107\tHPAAAA\tFSFAAA\tHHHHxx\n4678\t3854\t0\t2\t8\t18\t78\t678\t678\t4678\t4678\t156\t157\tYXAAAA\tGSFAAA\tOOOOxx\n2234\t3855\t0\t2\t4\t14\t34\t234\t234\t2234\t2234\t68\t69\tYHAAAA\tHSFAAA\tVVVVxx\n1073\t3856\t1\t1\t3\t13\t73\t73\t1073\t1073\t1073\t146\t147\tHPAAAA\tISFAAA\tAAAAxx\n6479\t3857\t1\t3\t9\t19\t79\t479\t479\t1479\t6479\t158\t159\tFPAAAA\tJSFAAA\tHHHHxx\n5665\t3858\t1\t1\t5\t5\t65\t665\t1665\t665\t5665\t130\t131\tXJAAAA\tKSFAAA\tOOOOxx\n586\t3859\t0\t2\t6\t6\t86\t586\t586\t586\t586\t172\t173\tOWAAAA\tLSFAAA\tVVVVxx\n1584\t3860\t0\t0\t4\t4\t84\t584\t1584\t1584\t1584\t168\t169\tYIAAAA\tMSFAAA\tAAAAxx\n2574\t3861\t0\t2\t4\t14\t74\t574\t574\t2574\t2574\t148\t149\tAVAAAA\tNSFAAA\tHHHHxx\n9833\t3862\t1\t1\t3\t13\t33\t833\t1833\t4833\t9833\t66\t67\tFOAAAA\tOSFAAA\tOOOOxx\n6726\t3863\t0\t2\t6\t6\t26\t726\t726\t1726\t6726\t52\t53\tSYAAAA\tPSFAAA\tVVVVxx\n8497\t3864\t1\t1\t7\t17\t97\t497\t497\t3497\t8497\t194\t195\tVOAAAA\tQSFAAA\tAAAAxx\n2914\t3865\t0\t2\t4\t14\t14\t914\t914\t2914\t2914\t28\t29\tCIAAAA\tRSFAAA\tHHHHxx\n8586\t3866\t0\t2\t6\t6\t86\t586\t586\t3586\t8586\t172\t173\tGSAAAA\tSSFAAA\tOOOOxx\n6973\t3867\t1\t1\t3\t13\t73\t973\t973\t1973\t6973\t146\t147\tFIAAAA\tTSFAAA\tVVVVxx\n1322\t3868\t0\t2\t2\t2\t22\t322\t1322\t1322\t1322\t44\t45\tWYAAAA\tUSFAAA\tAAAAxx\n5242\t3869\t0\t2\t2\t2\t42\t242\t1242\t242\t5242\t84\t85\tQTAAAA\tVSFAAA\tHHHHxx\n5581\t3870\t1\t1\t1\t1\t81\t581\t1581\t581\t5581\t162\t163\tRGAAAA\tWSFAAA\tOOOOxx\n1365\t3871\t1\t1\t5\t5\t65\t365\t1365\t1365\t1365\t130\t131\tNAAAAA\tXSFAAA\tVVVVxx\n2818\t3872\t0\t2\t8\t18\t18\t818\t818\t2818\t2818\t36\t37\tKEAAAA\tYSFAAA\tAAAAxx\n3758\t3873\t0\t2\t8\t18\t58\t758\t1758\t3758\t3758\t116\t117\tOOAAAA\tZSFAAA\tHHHHxx\n2665\t3874\t1\t1\t5\t5\t65\t665\t665\t2665\t2665\t130\t131\tNYAAAA\tATFAAA\tOOOOxx\n9823\t3875\t1\t3\t3\t3\t23\t823\t1823\t4823\t9823\t46\t47\tVNAAAA\tBTFAAA\tVVVVxx\n7057\t3876\t1\t1\t7\t17\t57\t57\t1057\t2057\t7057\t114\t115\tLLAAAA\tCTFAAA\tAAAAxx\n543\t3877\t1\t3\t3\t3\t43\t543\t543\t543\t543\t86\t87\tXUAAAA\tDTFAAA\tHHHHxx\n4008\t3878\t0\t0\t8\t8\t8\t8\t8\t4008\t4008\t16\t17\tEYAAAA\tETFAAA\tOOOOxx\n4397\t3879\t1\t1\t7\t17\t97\t397\t397\t4397\t4397\t194\t195\tDNAAAA\tFTFAAA\tVVVVxx\n8533\t3880\t1\t1\t3\t13\t33\t533\t533\t3533\t8533\t66\t67\tFQAAAA\tGTFAAA\tAAAAxx\n9728\t3881\t0\t0\t8\t8\t28\t728\t1728\t4728\t9728\t56\t57\tEKAAAA\tHTFAAA\tHHHHxx\n5198\t3882\t0\t2\t8\t18\t98\t198\t1198\t198\t5198\t196\t197\tYRAAAA\tITFAAA\tOOOOxx\n5036\t3883\t0\t0\t6\t16\t36\t36\t1036\t36\t5036\t72\t73\tSLAAAA\tJTFAAA\tVVVVxx\n4394\t3884\t0\t2\t4\t14\t94\t394\t394\t4394\t4394\t188\t189\tANAAAA\tKTFAAA\tAAAAxx\n9633\t3885\t1\t1\t3\t13\t33\t633\t1633\t4633\t9633\t66\t67\tNGAAAA\tLTFAAA\tHHHHxx\n3339\t3886\t1\t3\t9\t19\t39\t339\t1339\t3339\t3339\t78\t79\tLYAAAA\tMTFAAA\tOOOOxx\n9529\t3887\t1\t1\t9\t9\t29\t529\t1529\t4529\t9529\t58\t59\tNCAAAA\tNTFAAA\tVVVVxx\n4780\t3888\t0\t0\t0\t0\t80\t780\t780\t4780\t4780\t160\t161\tWBAAAA\tOTFAAA\tAAAAxx\n4862\t3889\t0\t2\t2\t2\t62\t862\t862\t4862\t4862\t124\t125\tAFAAAA\tPTFAAA\tHHHHxx\n8152\t3890\t0\t0\t2\t12\t52\t152\t152\t3152\t8152\t104\t105\tOBAAAA\tQTFAAA\tOOOOxx\n9330\t3891\t0\t2\t0\t10\t30\t330\t1330\t4330\t9330\t60\t61\tWUAAAA\tRTFAAA\tVVVVxx\n4362\t3892\t0\t2\t2\t2\t62\t362\t362\t4362\t4362\t124\t125\tULAAAA\tSTFAAA\tAAAAxx\n4688\t3893\t0\t0\t8\t8\t88\t688\t688\t4688\t4688\t176\t177\tIYAAAA\tTTFAAA\tHHHHxx\n1903\t3894\t1\t3\t3\t3\t3\t903\t1903\t1903\t1903\t6\t7\tFVAAAA\tUTFAAA\tOOOOxx\n9027\t3895\t1\t3\t7\t7\t27\t27\t1027\t4027\t9027\t54\t55\tFJAAAA\tVTFAAA\tVVVVxx\n5385\t3896\t1\t1\t5\t5\t85\t385\t1385\t385\t5385\t170\t171\tDZAAAA\tWTFAAA\tAAAAxx\n9854\t3897\t0\t2\t4\t14\t54\t854\t1854\t4854\t9854\t108\t109\tAPAAAA\tXTFAAA\tHHHHxx\n9033\t3898\t1\t1\t3\t13\t33\t33\t1033\t4033\t9033\t66\t67\tLJAAAA\tYTFAAA\tOOOOxx\n3185\t3899\t1\t1\t5\t5\t85\t185\t1185\t3185\t3185\t170\t171\tNSAAAA\tZTFAAA\tVVVVxx\n2618\t3900\t0\t2\t8\t18\t18\t618\t618\t2618\t2618\t36\t37\tSWAAAA\tAUFAAA\tAAAAxx\n371\t3901\t1\t3\t1\t11\t71\t371\t371\t371\t371\t142\t143\tHOAAAA\tBUFAAA\tHHHHxx\n3697\t3902\t1\t1\t7\t17\t97\t697\t1697\t3697\t3697\t194\t195\tFMAAAA\tCUFAAA\tOOOOxx\n1682\t3903\t0\t2\t2\t2\t82\t682\t1682\t1682\t1682\t164\t165\tSMAAAA\tDUFAAA\tVVVVxx\n3333\t3904\t1\t1\t3\t13\t33\t333\t1333\t3333\t3333\t66\t67\tFYAAAA\tEUFAAA\tAAAAxx\n1722\t3905\t0\t2\t2\t2\t22\t722\t1722\t1722\t1722\t44\t45\tGOAAAA\tFUFAAA\tHHHHxx\n2009\t3906\t1\t1\t9\t9\t9\t9\t9\t2009\t2009\t18\t19\tHZAAAA\tGUFAAA\tOOOOxx\n3517\t3907\t1\t1\t7\t17\t17\t517\t1517\t3517\t3517\t34\t35\tHFAAAA\tHUFAAA\tVVVVxx\n7640\t3908\t0\t0\t0\t0\t40\t640\t1640\t2640\t7640\t80\t81\tWHAAAA\tIUFAAA\tAAAAxx\n259\t3909\t1\t3\t9\t19\t59\t259\t259\t259\t259\t118\t119\tZJAAAA\tJUFAAA\tHHHHxx\n1400\t3910\t0\t0\t0\t0\t0\t400\t1400\t1400\t1400\t0\t1\tWBAAAA\tKUFAAA\tOOOOxx\n6663\t3911\t1\t3\t3\t3\t63\t663\t663\t1663\t6663\t126\t127\tHWAAAA\tLUFAAA\tVVVVxx\n1576\t3912\t0\t0\t6\t16\t76\t576\t1576\t1576\t1576\t152\t153\tQIAAAA\tMUFAAA\tAAAAxx\n8843\t3913\t1\t3\t3\t3\t43\t843\t843\t3843\t8843\t86\t87\tDCAAAA\tNUFAAA\tHHHHxx\n9474\t3914\t0\t2\t4\t14\t74\t474\t1474\t4474\t9474\t148\t149\tKAAAAA\tOUFAAA\tOOOOxx\n1597\t3915\t1\t1\t7\t17\t97\t597\t1597\t1597\t1597\t194\t195\tLJAAAA\tPUFAAA\tVVVVxx\n1143\t3916\t1\t3\t3\t3\t43\t143\t1143\t1143\t1143\t86\t87\tZRAAAA\tQUFAAA\tAAAAxx\n4162\t3917\t0\t2\t2\t2\t62\t162\t162\t4162\t4162\t124\t125\tCEAAAA\tRUFAAA\tHHHHxx\n1301\t3918\t1\t1\t1\t1\t1\t301\t1301\t1301\t1301\t2\t3\tBYAAAA\tSUFAAA\tOOOOxx\n2935\t3919\t1\t3\t5\t15\t35\t935\t935\t2935\t2935\t70\t71\tXIAAAA\tTUFAAA\tVVVVxx\n886\t3920\t0\t2\t6\t6\t86\t886\t886\t886\t886\t172\t173\tCIAAAA\tUUFAAA\tAAAAxx\n1661\t3921\t1\t1\t1\t1\t61\t661\t1661\t1661\t1661\t122\t123\tXLAAAA\tVUFAAA\tHHHHxx\n1026\t3922\t0\t2\t6\t6\t26\t26\t1026\t1026\t1026\t52\t53\tMNAAAA\tWUFAAA\tOOOOxx\n7034\t3923\t0\t2\t4\t14\t34\t34\t1034\t2034\t7034\t68\t69\tOKAAAA\tXUFAAA\tVVVVxx\n2305\t3924\t1\t1\t5\t5\t5\t305\t305\t2305\t2305\t10\t11\tRKAAAA\tYUFAAA\tAAAAxx\n1725\t3925\t1\t1\t5\t5\t25\t725\t1725\t1725\t1725\t50\t51\tJOAAAA\tZUFAAA\tHHHHxx\n909\t3926\t1\t1\t9\t9\t9\t909\t909\t909\t909\t18\t19\tZIAAAA\tAVFAAA\tOOOOxx\n9906\t3927\t0\t2\t6\t6\t6\t906\t1906\t4906\t9906\t12\t13\tARAAAA\tBVFAAA\tVVVVxx\n3309\t3928\t1\t1\t9\t9\t9\t309\t1309\t3309\t3309\t18\t19\tHXAAAA\tCVFAAA\tAAAAxx\n515\t3929\t1\t3\t5\t15\t15\t515\t515\t515\t515\t30\t31\tVTAAAA\tDVFAAA\tHHHHxx\n932\t3930\t0\t0\t2\t12\t32\t932\t932\t932\t932\t64\t65\tWJAAAA\tEVFAAA\tOOOOxx\n8144\t3931\t0\t0\t4\t4\t44\t144\t144\t3144\t8144\t88\t89\tGBAAAA\tFVFAAA\tVVVVxx\n5592\t3932\t0\t0\t2\t12\t92\t592\t1592\t592\t5592\t184\t185\tCHAAAA\tGVFAAA\tAAAAxx\n4003\t3933\t1\t3\t3\t3\t3\t3\t3\t4003\t4003\t6\t7\tZXAAAA\tHVFAAA\tHHHHxx\n9566\t3934\t0\t2\t6\t6\t66\t566\t1566\t4566\t9566\t132\t133\tYDAAAA\tIVFAAA\tOOOOxx\n4556\t3935\t0\t0\t6\t16\t56\t556\t556\t4556\t4556\t112\t113\tGTAAAA\tJVFAAA\tVVVVxx\n268\t3936\t0\t0\t8\t8\t68\t268\t268\t268\t268\t136\t137\tIKAAAA\tKVFAAA\tAAAAxx\n8107\t3937\t1\t3\t7\t7\t7\t107\t107\t3107\t8107\t14\t15\tVZAAAA\tLVFAAA\tHHHHxx\n5816\t3938\t0\t0\t6\t16\t16\t816\t1816\t816\t5816\t32\t33\tSPAAAA\tMVFAAA\tOOOOxx\n8597\t3939\t1\t1\t7\t17\t97\t597\t597\t3597\t8597\t194\t195\tRSAAAA\tNVFAAA\tVVVVxx\n9611\t3940\t1\t3\t1\t11\t11\t611\t1611\t4611\t9611\t22\t23\tRFAAAA\tOVFAAA\tAAAAxx\n8070\t3941\t0\t2\t0\t10\t70\t70\t70\t3070\t8070\t140\t141\tKYAAAA\tPVFAAA\tHHHHxx\n6040\t3942\t0\t0\t0\t0\t40\t40\t40\t1040\t6040\t80\t81\tIYAAAA\tQVFAAA\tOOOOxx\n3184\t3943\t0\t0\t4\t4\t84\t184\t1184\t3184\t3184\t168\t169\tMSAAAA\tRVFAAA\tVVVVxx\n9656\t3944\t0\t0\t6\t16\t56\t656\t1656\t4656\t9656\t112\t113\tKHAAAA\tSVFAAA\tAAAAxx\n1577\t3945\t1\t1\t7\t17\t77\t577\t1577\t1577\t1577\t154\t155\tRIAAAA\tTVFAAA\tHHHHxx\n1805\t3946\t1\t1\t5\t5\t5\t805\t1805\t1805\t1805\t10\t11\tLRAAAA\tUVFAAA\tOOOOxx\n8268\t3947\t0\t0\t8\t8\t68\t268\t268\t3268\t8268\t136\t137\tAGAAAA\tVVFAAA\tVVVVxx\n3489\t3948\t1\t1\t9\t9\t89\t489\t1489\t3489\t3489\t178\t179\tFEAAAA\tWVFAAA\tAAAAxx\n4564\t3949\t0\t0\t4\t4\t64\t564\t564\t4564\t4564\t128\t129\tOTAAAA\tXVFAAA\tHHHHxx\n4006\t3950\t0\t2\t6\t6\t6\t6\t6\t4006\t4006\t12\t13\tCYAAAA\tYVFAAA\tOOOOxx\n8466\t3951\t0\t2\t6\t6\t66\t466\t466\t3466\t8466\t132\t133\tQNAAAA\tZVFAAA\tVVVVxx\n938\t3952\t0\t2\t8\t18\t38\t938\t938\t938\t938\t76\t77\tCKAAAA\tAWFAAA\tAAAAxx\n5944\t3953\t0\t0\t4\t4\t44\t944\t1944\t944\t5944\t88\t89\tQUAAAA\tBWFAAA\tHHHHxx\n8363\t3954\t1\t3\t3\t3\t63\t363\t363\t3363\t8363\t126\t127\tRJAAAA\tCWFAAA\tOOOOxx\n5348\t3955\t0\t0\t8\t8\t48\t348\t1348\t348\t5348\t96\t97\tSXAAAA\tDWFAAA\tVVVVxx\n71\t3956\t1\t3\t1\t11\t71\t71\t71\t71\t71\t142\t143\tTCAAAA\tEWFAAA\tAAAAxx\n3620\t3957\t0\t0\t0\t0\t20\t620\t1620\t3620\t3620\t40\t41\tGJAAAA\tFWFAAA\tHHHHxx\n3230\t3958\t0\t2\t0\t10\t30\t230\t1230\t3230\t3230\t60\t61\tGUAAAA\tGWFAAA\tOOOOxx\n6132\t3959\t0\t0\t2\t12\t32\t132\t132\t1132\t6132\t64\t65\tWBAAAA\tHWFAAA\tVVVVxx\n6143\t3960\t1\t3\t3\t3\t43\t143\t143\t1143\t6143\t86\t87\tHCAAAA\tIWFAAA\tAAAAxx\n8781\t3961\t1\t1\t1\t1\t81\t781\t781\t3781\t8781\t162\t163\tTZAAAA\tJWFAAA\tHHHHxx\n5522\t3962\t0\t2\t2\t2\t22\t522\t1522\t522\t5522\t44\t45\tKEAAAA\tKWFAAA\tOOOOxx\n6320\t3963\t0\t0\t0\t0\t20\t320\t320\t1320\t6320\t40\t41\tCJAAAA\tLWFAAA\tVVVVxx\n3923\t3964\t1\t3\t3\t3\t23\t923\t1923\t3923\t3923\t46\t47\tXUAAAA\tMWFAAA\tAAAAxx\n2207\t3965\t1\t3\t7\t7\t7\t207\t207\t2207\t2207\t14\t15\tXGAAAA\tNWFAAA\tHHHHxx\n966\t3966\t0\t2\t6\t6\t66\t966\t966\t966\t966\t132\t133\tELAAAA\tOWFAAA\tOOOOxx\n9020\t3967\t0\t0\t0\t0\t20\t20\t1020\t4020\t9020\t40\t41\tYIAAAA\tPWFAAA\tVVVVxx\n4616\t3968\t0\t0\t6\t16\t16\t616\t616\t4616\t4616\t32\t33\tOVAAAA\tQWFAAA\tAAAAxx\n8289\t3969\t1\t1\t9\t9\t89\t289\t289\t3289\t8289\t178\t179\tVGAAAA\tRWFAAA\tHHHHxx\n5796\t3970\t0\t0\t6\t16\t96\t796\t1796\t796\t5796\t192\t193\tYOAAAA\tSWFAAA\tOOOOxx\n9259\t3971\t1\t3\t9\t19\t59\t259\t1259\t4259\t9259\t118\t119\tDSAAAA\tTWFAAA\tVVVVxx\n3710\t3972\t0\t2\t0\t10\t10\t710\t1710\t3710\t3710\t20\t21\tSMAAAA\tUWFAAA\tAAAAxx\n251\t3973\t1\t3\t1\t11\t51\t251\t251\t251\t251\t102\t103\tRJAAAA\tVWFAAA\tHHHHxx\n7669\t3974\t1\t1\t9\t9\t69\t669\t1669\t2669\t7669\t138\t139\tZIAAAA\tWWFAAA\tOOOOxx\n6304\t3975\t0\t0\t4\t4\t4\t304\t304\t1304\t6304\t8\t9\tMIAAAA\tXWFAAA\tVVVVxx\n6454\t3976\t0\t2\t4\t14\t54\t454\t454\t1454\t6454\t108\t109\tGOAAAA\tYWFAAA\tAAAAxx\n1489\t3977\t1\t1\t9\t9\t89\t489\t1489\t1489\t1489\t178\t179\tHFAAAA\tZWFAAA\tHHHHxx\n715\t3978\t1\t3\t5\t15\t15\t715\t715\t715\t715\t30\t31\tNBAAAA\tAXFAAA\tOOOOxx\n4319\t3979\t1\t3\t9\t19\t19\t319\t319\t4319\t4319\t38\t39\tDKAAAA\tBXFAAA\tVVVVxx\n7112\t3980\t0\t0\t2\t12\t12\t112\t1112\t2112\t7112\t24\t25\tONAAAA\tCXFAAA\tAAAAxx\n3726\t3981\t0\t2\t6\t6\t26\t726\t1726\t3726\t3726\t52\t53\tINAAAA\tDXFAAA\tHHHHxx\n7727\t3982\t1\t3\t7\t7\t27\t727\t1727\t2727\t7727\t54\t55\tFLAAAA\tEXFAAA\tOOOOxx\n8387\t3983\t1\t3\t7\t7\t87\t387\t387\t3387\t8387\t174\t175\tPKAAAA\tFXFAAA\tVVVVxx\n6555\t3984\t1\t3\t5\t15\t55\t555\t555\t1555\t6555\t110\t111\tDSAAAA\tGXFAAA\tAAAAxx\n1148\t3985\t0\t0\t8\t8\t48\t148\t1148\t1148\t1148\t96\t97\tESAAAA\tHXFAAA\tHHHHxx\n9000\t3986\t0\t0\t0\t0\t0\t0\t1000\t4000\t9000\t0\t1\tEIAAAA\tIXFAAA\tOOOOxx\n5278\t3987\t0\t2\t8\t18\t78\t278\t1278\t278\t5278\t156\t157\tAVAAAA\tJXFAAA\tVVVVxx\n2388\t3988\t0\t0\t8\t8\t88\t388\t388\t2388\t2388\t176\t177\tWNAAAA\tKXFAAA\tAAAAxx\n7984\t3989\t0\t0\t4\t4\t84\t984\t1984\t2984\t7984\t168\t169\tCVAAAA\tLXFAAA\tHHHHxx\n881\t3990\t1\t1\t1\t1\t81\t881\t881\t881\t881\t162\t163\tXHAAAA\tMXFAAA\tOOOOxx\n6830\t3991\t0\t2\t0\t10\t30\t830\t830\t1830\t6830\t60\t61\tSCAAAA\tNXFAAA\tVVVVxx\n7056\t3992\t0\t0\t6\t16\t56\t56\t1056\t2056\t7056\t112\t113\tKLAAAA\tOXFAAA\tAAAAxx\n7581\t3993\t1\t1\t1\t1\t81\t581\t1581\t2581\t7581\t162\t163\tPFAAAA\tPXFAAA\tHHHHxx\n5214\t3994\t0\t2\t4\t14\t14\t214\t1214\t214\t5214\t28\t29\tOSAAAA\tQXFAAA\tOOOOxx\n2505\t3995\t1\t1\t5\t5\t5\t505\t505\t2505\t2505\t10\t11\tJSAAAA\tRXFAAA\tVVVVxx\n5112\t3996\t0\t0\t2\t12\t12\t112\t1112\t112\t5112\t24\t25\tQOAAAA\tSXFAAA\tAAAAxx\n9884\t3997\t0\t0\t4\t4\t84\t884\t1884\t4884\t9884\t168\t169\tEQAAAA\tTXFAAA\tHHHHxx\n8040\t3998\t0\t0\t0\t0\t40\t40\t40\t3040\t8040\t80\t81\tGXAAAA\tUXFAAA\tOOOOxx\n7033\t3999\t1\t1\t3\t13\t33\t33\t1033\t2033\t7033\t66\t67\tNKAAAA\tVXFAAA\tVVVVxx\n9343\t4000\t1\t3\t3\t3\t43\t343\t1343\t4343\t9343\t86\t87\tJVAAAA\tWXFAAA\tAAAAxx\n2931\t4001\t1\t3\t1\t11\t31\t931\t931\t2931\t2931\t62\t63\tTIAAAA\tXXFAAA\tHHHHxx\n9024\t4002\t0\t0\t4\t4\t24\t24\t1024\t4024\t9024\t48\t49\tCJAAAA\tYXFAAA\tOOOOxx\n6485\t4003\t1\t1\t5\t5\t85\t485\t485\t1485\t6485\t170\t171\tLPAAAA\tZXFAAA\tVVVVxx\n3465\t4004\t1\t1\t5\t5\t65\t465\t1465\t3465\t3465\t130\t131\tHDAAAA\tAYFAAA\tAAAAxx\n3357\t4005\t1\t1\t7\t17\t57\t357\t1357\t3357\t3357\t114\t115\tDZAAAA\tBYFAAA\tHHHHxx\n2929\t4006\t1\t1\t9\t9\t29\t929\t929\t2929\t2929\t58\t59\tRIAAAA\tCYFAAA\tOOOOxx\n3086\t4007\t0\t2\t6\t6\t86\t86\t1086\t3086\t3086\t172\t173\tSOAAAA\tDYFAAA\tVVVVxx\n8897\t4008\t1\t1\t7\t17\t97\t897\t897\t3897\t8897\t194\t195\tFEAAAA\tEYFAAA\tAAAAxx\n9688\t4009\t0\t0\t8\t8\t88\t688\t1688\t4688\t9688\t176\t177\tQIAAAA\tFYFAAA\tHHHHxx\n6522\t4010\t0\t2\t2\t2\t22\t522\t522\t1522\t6522\t44\t45\tWQAAAA\tGYFAAA\tOOOOxx\n3241\t4011\t1\t1\t1\t1\t41\t241\t1241\t3241\t3241\t82\t83\tRUAAAA\tHYFAAA\tVVVVxx\n8770\t4012\t0\t2\t0\t10\t70\t770\t770\t3770\t8770\t140\t141\tIZAAAA\tIYFAAA\tAAAAxx\n2884\t4013\t0\t0\t4\t4\t84\t884\t884\t2884\t2884\t168\t169\tYGAAAA\tJYFAAA\tHHHHxx\n9579\t4014\t1\t3\t9\t19\t79\t579\t1579\t4579\t9579\t158\t159\tLEAAAA\tKYFAAA\tOOOOxx\n3125\t4015\t1\t1\t5\t5\t25\t125\t1125\t3125\t3125\t50\t51\tFQAAAA\tLYFAAA\tVVVVxx\n4604\t4016\t0\t0\t4\t4\t4\t604\t604\t4604\t4604\t8\t9\tCVAAAA\tMYFAAA\tAAAAxx\n2682\t4017\t0\t2\t2\t2\t82\t682\t682\t2682\t2682\t164\t165\tEZAAAA\tNYFAAA\tHHHHxx\n254\t4018\t0\t2\t4\t14\t54\t254\t254\t254\t254\t108\t109\tUJAAAA\tOYFAAA\tOOOOxx\n6569\t4019\t1\t1\t9\t9\t69\t569\t569\t1569\t6569\t138\t139\tRSAAAA\tPYFAAA\tVVVVxx\n2686\t4020\t0\t2\t6\t6\t86\t686\t686\t2686\t2686\t172\t173\tIZAAAA\tQYFAAA\tAAAAxx\n2123\t4021\t1\t3\t3\t3\t23\t123\t123\t2123\t2123\t46\t47\tRDAAAA\tRYFAAA\tHHHHxx\n1745\t4022\t1\t1\t5\t5\t45\t745\t1745\t1745\t1745\t90\t91\tDPAAAA\tSYFAAA\tOOOOxx\n247\t4023\t1\t3\t7\t7\t47\t247\t247\t247\t247\t94\t95\tNJAAAA\tTYFAAA\tVVVVxx\n5800\t4024\t0\t0\t0\t0\t0\t800\t1800\t800\t5800\t0\t1\tCPAAAA\tUYFAAA\tAAAAxx\n1121\t4025\t1\t1\t1\t1\t21\t121\t1121\t1121\t1121\t42\t43\tDRAAAA\tVYFAAA\tHHHHxx\n8893\t4026\t1\t1\t3\t13\t93\t893\t893\t3893\t8893\t186\t187\tBEAAAA\tWYFAAA\tOOOOxx\n7819\t4027\t1\t3\t9\t19\t19\t819\t1819\t2819\t7819\t38\t39\tTOAAAA\tXYFAAA\tVVVVxx\n1339\t4028\t1\t3\t9\t19\t39\t339\t1339\t1339\t1339\t78\t79\tNZAAAA\tYYFAAA\tAAAAxx\n5680\t4029\t0\t0\t0\t0\t80\t680\t1680\t680\t5680\t160\t161\tMKAAAA\tZYFAAA\tHHHHxx\n5093\t4030\t1\t1\t3\t13\t93\t93\t1093\t93\t5093\t186\t187\tXNAAAA\tAZFAAA\tOOOOxx\n3508\t4031\t0\t0\t8\t8\t8\t508\t1508\t3508\t3508\t16\t17\tYEAAAA\tBZFAAA\tVVVVxx\n933\t4032\t1\t1\t3\t13\t33\t933\t933\t933\t933\t66\t67\tXJAAAA\tCZFAAA\tAAAAxx\n1106\t4033\t0\t2\t6\t6\t6\t106\t1106\t1106\t1106\t12\t13\tOQAAAA\tDZFAAA\tHHHHxx\n4386\t4034\t0\t2\t6\t6\t86\t386\t386\t4386\t4386\t172\t173\tSMAAAA\tEZFAAA\tOOOOxx\n5895\t4035\t1\t3\t5\t15\t95\t895\t1895\t895\t5895\t190\t191\tTSAAAA\tFZFAAA\tVVVVxx\n2980\t4036\t0\t0\t0\t0\t80\t980\t980\t2980\t2980\t160\t161\tQKAAAA\tGZFAAA\tAAAAxx\n4400\t4037\t0\t0\t0\t0\t0\t400\t400\t4400\t4400\t0\t1\tGNAAAA\tHZFAAA\tHHHHxx\n7433\t4038\t1\t1\t3\t13\t33\t433\t1433\t2433\t7433\t66\t67\tXZAAAA\tIZFAAA\tOOOOxx\n6110\t4039\t0\t2\t0\t10\t10\t110\t110\t1110\t6110\t20\t21\tABAAAA\tJZFAAA\tVVVVxx\n867\t4040\t1\t3\t7\t7\t67\t867\t867\t867\t867\t134\t135\tJHAAAA\tKZFAAA\tAAAAxx\n5292\t4041\t0\t0\t2\t12\t92\t292\t1292\t292\t5292\t184\t185\tOVAAAA\tLZFAAA\tHHHHxx\n3926\t4042\t0\t2\t6\t6\t26\t926\t1926\t3926\t3926\t52\t53\tAVAAAA\tMZFAAA\tOOOOxx\n1107\t4043\t1\t3\t7\t7\t7\t107\t1107\t1107\t1107\t14\t15\tPQAAAA\tNZFAAA\tVVVVxx\n7355\t4044\t1\t3\t5\t15\t55\t355\t1355\t2355\t7355\t110\t111\tXWAAAA\tOZFAAA\tAAAAxx\n4689\t4045\t1\t1\t9\t9\t89\t689\t689\t4689\t4689\t178\t179\tJYAAAA\tPZFAAA\tHHHHxx\n4872\t4046\t0\t0\t2\t12\t72\t872\t872\t4872\t4872\t144\t145\tKFAAAA\tQZFAAA\tOOOOxx\n7821\t4047\t1\t1\t1\t1\t21\t821\t1821\t2821\t7821\t42\t43\tVOAAAA\tRZFAAA\tVVVVxx\n7277\t4048\t1\t1\t7\t17\t77\t277\t1277\t2277\t7277\t154\t155\tXTAAAA\tSZFAAA\tAAAAxx\n3268\t4049\t0\t0\t8\t8\t68\t268\t1268\t3268\t3268\t136\t137\tSVAAAA\tTZFAAA\tHHHHxx\n8877\t4050\t1\t1\t7\t17\t77\t877\t877\t3877\t8877\t154\t155\tLDAAAA\tUZFAAA\tOOOOxx\n343\t4051\t1\t3\t3\t3\t43\t343\t343\t343\t343\t86\t87\tFNAAAA\tVZFAAA\tVVVVxx\n621\t4052\t1\t1\t1\t1\t21\t621\t621\t621\t621\t42\t43\tXXAAAA\tWZFAAA\tAAAAxx\n5429\t4053\t1\t1\t9\t9\t29\t429\t1429\t429\t5429\t58\t59\tVAAAAA\tXZFAAA\tHHHHxx\n392\t4054\t0\t0\t2\t12\t92\t392\t392\t392\t392\t184\t185\tCPAAAA\tYZFAAA\tOOOOxx\n6004\t4055\t0\t0\t4\t4\t4\t4\t4\t1004\t6004\t8\t9\tYWAAAA\tZZFAAA\tVVVVxx\n6377\t4056\t1\t1\t7\t17\t77\t377\t377\t1377\t6377\t154\t155\tHLAAAA\tAAGAAA\tAAAAxx\n3037\t4057\t1\t1\t7\t17\t37\t37\t1037\t3037\t3037\t74\t75\tVMAAAA\tBAGAAA\tHHHHxx\n3514\t4058\t0\t2\t4\t14\t14\t514\t1514\t3514\t3514\t28\t29\tEFAAAA\tCAGAAA\tOOOOxx\n8740\t4059\t0\t0\t0\t0\t40\t740\t740\t3740\t8740\t80\t81\tEYAAAA\tDAGAAA\tVVVVxx\n3877\t4060\t1\t1\t7\t17\t77\t877\t1877\t3877\t3877\t154\t155\tDTAAAA\tEAGAAA\tAAAAxx\n5731\t4061\t1\t3\t1\t11\t31\t731\t1731\t731\t5731\t62\t63\tLMAAAA\tFAGAAA\tHHHHxx\n6407\t4062\t1\t3\t7\t7\t7\t407\t407\t1407\t6407\t14\t15\tLMAAAA\tGAGAAA\tOOOOxx\n2044\t4063\t0\t0\t4\t4\t44\t44\t44\t2044\t2044\t88\t89\tQAAAAA\tHAGAAA\tVVVVxx\n7362\t4064\t0\t2\t2\t2\t62\t362\t1362\t2362\t7362\t124\t125\tEXAAAA\tIAGAAA\tAAAAxx\n5458\t4065\t0\t2\t8\t18\t58\t458\t1458\t458\t5458\t116\t117\tYBAAAA\tJAGAAA\tHHHHxx\n6437\t4066\t1\t1\t7\t17\t37\t437\t437\t1437\t6437\t74\t75\tPNAAAA\tKAGAAA\tOOOOxx\n1051\t4067\t1\t3\t1\t11\t51\t51\t1051\t1051\t1051\t102\t103\tLOAAAA\tLAGAAA\tVVVVxx\n1203\t4068\t1\t3\t3\t3\t3\t203\t1203\t1203\t1203\t6\t7\tHUAAAA\tMAGAAA\tAAAAxx\n2176\t4069\t0\t0\t6\t16\t76\t176\t176\t2176\t2176\t152\t153\tSFAAAA\tNAGAAA\tHHHHxx\n8997\t4070\t1\t1\t7\t17\t97\t997\t997\t3997\t8997\t194\t195\tBIAAAA\tOAGAAA\tOOOOxx\n6378\t4071\t0\t2\t8\t18\t78\t378\t378\t1378\t6378\t156\t157\tILAAAA\tPAGAAA\tVVVVxx\n6006\t4072\t0\t2\t6\t6\t6\t6\t6\t1006\t6006\t12\t13\tAXAAAA\tQAGAAA\tAAAAxx\n2308\t4073\t0\t0\t8\t8\t8\t308\t308\t2308\t2308\t16\t17\tUKAAAA\tRAGAAA\tHHHHxx\n625\t4074\t1\t1\t5\t5\t25\t625\t625\t625\t625\t50\t51\tBYAAAA\tSAGAAA\tOOOOxx\n7298\t4075\t0\t2\t8\t18\t98\t298\t1298\t2298\t7298\t196\t197\tSUAAAA\tTAGAAA\tVVVVxx\n5575\t4076\t1\t3\t5\t15\t75\t575\t1575\t575\t5575\t150\t151\tLGAAAA\tUAGAAA\tAAAAxx\n3565\t4077\t1\t1\t5\t5\t65\t565\t1565\t3565\t3565\t130\t131\tDHAAAA\tVAGAAA\tHHHHxx\n47\t4078\t1\t3\t7\t7\t47\t47\t47\t47\t47\t94\t95\tVBAAAA\tWAGAAA\tOOOOxx\n2413\t4079\t1\t1\t3\t13\t13\t413\t413\t2413\t2413\t26\t27\tVOAAAA\tXAGAAA\tVVVVxx\n2153\t4080\t1\t1\t3\t13\t53\t153\t153\t2153\t2153\t106\t107\tVEAAAA\tYAGAAA\tAAAAxx\n752\t4081\t0\t0\t2\t12\t52\t752\t752\t752\t752\t104\t105\tYCAAAA\tZAGAAA\tHHHHxx\n4095\t4082\t1\t3\t5\t15\t95\t95\t95\t4095\t4095\t190\t191\tNBAAAA\tABGAAA\tOOOOxx\n2518\t4083\t0\t2\t8\t18\t18\t518\t518\t2518\t2518\t36\t37\tWSAAAA\tBBGAAA\tVVVVxx\n3681\t4084\t1\t1\t1\t1\t81\t681\t1681\t3681\t3681\t162\t163\tPLAAAA\tCBGAAA\tAAAAxx\n4213\t4085\t1\t1\t3\t13\t13\t213\t213\t4213\t4213\t26\t27\tBGAAAA\tDBGAAA\tHHHHxx\n2615\t4086\t1\t3\t5\t15\t15\t615\t615\t2615\t2615\t30\t31\tPWAAAA\tEBGAAA\tOOOOxx\n1471\t4087\t1\t3\t1\t11\t71\t471\t1471\t1471\t1471\t142\t143\tPEAAAA\tFBGAAA\tVVVVxx\n7315\t4088\t1\t3\t5\t15\t15\t315\t1315\t2315\t7315\t30\t31\tJVAAAA\tGBGAAA\tAAAAxx\n6013\t4089\t1\t1\t3\t13\t13\t13\t13\t1013\t6013\t26\t27\tHXAAAA\tHBGAAA\tHHHHxx\n3077\t4090\t1\t1\t7\t17\t77\t77\t1077\t3077\t3077\t154\t155\tJOAAAA\tIBGAAA\tOOOOxx\n2190\t4091\t0\t2\t0\t10\t90\t190\t190\t2190\t2190\t180\t181\tGGAAAA\tJBGAAA\tVVVVxx\n528\t4092\t0\t0\t8\t8\t28\t528\t528\t528\t528\t56\t57\tIUAAAA\tKBGAAA\tAAAAxx\n9508\t4093\t0\t0\t8\t8\t8\t508\t1508\t4508\t9508\t16\t17\tSBAAAA\tLBGAAA\tHHHHxx\n2473\t4094\t1\t1\t3\t13\t73\t473\t473\t2473\t2473\t146\t147\tDRAAAA\tMBGAAA\tOOOOxx\n167\t4095\t1\t3\t7\t7\t67\t167\t167\t167\t167\t134\t135\tLGAAAA\tNBGAAA\tVVVVxx\n8448\t4096\t0\t0\t8\t8\t48\t448\t448\t3448\t8448\t96\t97\tYMAAAA\tOBGAAA\tAAAAxx\n7538\t4097\t0\t2\t8\t18\t38\t538\t1538\t2538\t7538\t76\t77\tYDAAAA\tPBGAAA\tHHHHxx\n7638\t4098\t0\t2\t8\t18\t38\t638\t1638\t2638\t7638\t76\t77\tUHAAAA\tQBGAAA\tOOOOxx\n4328\t4099\t0\t0\t8\t8\t28\t328\t328\t4328\t4328\t56\t57\tMKAAAA\tRBGAAA\tVVVVxx\n3812\t4100\t0\t0\t2\t12\t12\t812\t1812\t3812\t3812\t24\t25\tQQAAAA\tSBGAAA\tAAAAxx\n2879\t4101\t1\t3\t9\t19\t79\t879\t879\t2879\t2879\t158\t159\tTGAAAA\tTBGAAA\tHHHHxx\n4741\t4102\t1\t1\t1\t1\t41\t741\t741\t4741\t4741\t82\t83\tJAAAAA\tUBGAAA\tOOOOxx\n9155\t4103\t1\t3\t5\t15\t55\t155\t1155\t4155\t9155\t110\t111\tDOAAAA\tVBGAAA\tVVVVxx\n5151\t4104\t1\t3\t1\t11\t51\t151\t1151\t151\t5151\t102\t103\tDQAAAA\tWBGAAA\tAAAAxx\n5591\t4105\t1\t3\t1\t11\t91\t591\t1591\t591\t5591\t182\t183\tBHAAAA\tXBGAAA\tHHHHxx\n1034\t4106\t0\t2\t4\t14\t34\t34\t1034\t1034\t1034\t68\t69\tUNAAAA\tYBGAAA\tOOOOxx\n765\t4107\t1\t1\t5\t5\t65\t765\t765\t765\t765\t130\t131\tLDAAAA\tZBGAAA\tVVVVxx\n2664\t4108\t0\t0\t4\t4\t64\t664\t664\t2664\t2664\t128\t129\tMYAAAA\tACGAAA\tAAAAxx\n6854\t4109\t0\t2\t4\t14\t54\t854\t854\t1854\t6854\t108\t109\tQDAAAA\tBCGAAA\tHHHHxx\n8263\t4110\t1\t3\t3\t3\t63\t263\t263\t3263\t8263\t126\t127\tVFAAAA\tCCGAAA\tOOOOxx\n8658\t4111\t0\t2\t8\t18\t58\t658\t658\t3658\t8658\t116\t117\tAVAAAA\tDCGAAA\tVVVVxx\n587\t4112\t1\t3\t7\t7\t87\t587\t587\t587\t587\t174\t175\tPWAAAA\tECGAAA\tAAAAxx\n4553\t4113\t1\t1\t3\t13\t53\t553\t553\t4553\t4553\t106\t107\tDTAAAA\tFCGAAA\tHHHHxx\n1368\t4114\t0\t0\t8\t8\t68\t368\t1368\t1368\t1368\t136\t137\tQAAAAA\tGCGAAA\tOOOOxx\n1718\t4115\t0\t2\t8\t18\t18\t718\t1718\t1718\t1718\t36\t37\tCOAAAA\tHCGAAA\tVVVVxx\n140\t4116\t0\t0\t0\t0\t40\t140\t140\t140\t140\t80\t81\tKFAAAA\tICGAAA\tAAAAxx\n8341\t4117\t1\t1\t1\t1\t41\t341\t341\t3341\t8341\t82\t83\tVIAAAA\tJCGAAA\tHHHHxx\n72\t4118\t0\t0\t2\t12\t72\t72\t72\t72\t72\t144\t145\tUCAAAA\tKCGAAA\tOOOOxx\n6589\t4119\t1\t1\t9\t9\t89\t589\t589\t1589\t6589\t178\t179\tLTAAAA\tLCGAAA\tVVVVxx\n2024\t4120\t0\t0\t4\t4\t24\t24\t24\t2024\t2024\t48\t49\tWZAAAA\tMCGAAA\tAAAAxx\n8024\t4121\t0\t0\t4\t4\t24\t24\t24\t3024\t8024\t48\t49\tQWAAAA\tNCGAAA\tHHHHxx\n9564\t4122\t0\t0\t4\t4\t64\t564\t1564\t4564\t9564\t128\t129\tWDAAAA\tOCGAAA\tOOOOxx\n8625\t4123\t1\t1\t5\t5\t25\t625\t625\t3625\t8625\t50\t51\tTTAAAA\tPCGAAA\tVVVVxx\n2680\t4124\t0\t0\t0\t0\t80\t680\t680\t2680\t2680\t160\t161\tCZAAAA\tQCGAAA\tAAAAxx\n4323\t4125\t1\t3\t3\t3\t23\t323\t323\t4323\t4323\t46\t47\tHKAAAA\tRCGAAA\tHHHHxx\n8981\t4126\t1\t1\t1\t1\t81\t981\t981\t3981\t8981\t162\t163\tLHAAAA\tSCGAAA\tOOOOxx\n8909\t4127\t1\t1\t9\t9\t9\t909\t909\t3909\t8909\t18\t19\tREAAAA\tTCGAAA\tVVVVxx\n5288\t4128\t0\t0\t8\t8\t88\t288\t1288\t288\t5288\t176\t177\tKVAAAA\tUCGAAA\tAAAAxx\n2057\t4129\t1\t1\t7\t17\t57\t57\t57\t2057\t2057\t114\t115\tDBAAAA\tVCGAAA\tHHHHxx\n5931\t4130\t1\t3\t1\t11\t31\t931\t1931\t931\t5931\t62\t63\tDUAAAA\tWCGAAA\tOOOOxx\n9794\t4131\t0\t2\t4\t14\t94\t794\t1794\t4794\t9794\t188\t189\tSMAAAA\tXCGAAA\tVVVVxx\n1012\t4132\t0\t0\t2\t12\t12\t12\t1012\t1012\t1012\t24\t25\tYMAAAA\tYCGAAA\tAAAAxx\n5496\t4133\t0\t0\t6\t16\t96\t496\t1496\t496\t5496\t192\t193\tKDAAAA\tZCGAAA\tHHHHxx\n9182\t4134\t0\t2\t2\t2\t82\t182\t1182\t4182\t9182\t164\t165\tEPAAAA\tADGAAA\tOOOOxx\n5258\t4135\t0\t2\t8\t18\t58\t258\t1258\t258\t5258\t116\t117\tGUAAAA\tBDGAAA\tVVVVxx\n3050\t4136\t0\t2\t0\t10\t50\t50\t1050\t3050\t3050\t100\t101\tINAAAA\tCDGAAA\tAAAAxx\n2083\t4137\t1\t3\t3\t3\t83\t83\t83\t2083\t2083\t166\t167\tDCAAAA\tDDGAAA\tHHHHxx\n3069\t4138\t1\t1\t9\t9\t69\t69\t1069\t3069\t3069\t138\t139\tBOAAAA\tEDGAAA\tOOOOxx\n8459\t4139\t1\t3\t9\t19\t59\t459\t459\t3459\t8459\t118\t119\tJNAAAA\tFDGAAA\tVVVVxx\n169\t4140\t1\t1\t9\t9\t69\t169\t169\t169\t169\t138\t139\tNGAAAA\tGDGAAA\tAAAAxx\n4379\t4141\t1\t3\t9\t19\t79\t379\t379\t4379\t4379\t158\t159\tLMAAAA\tHDGAAA\tHHHHxx\n5126\t4142\t0\t2\t6\t6\t26\t126\t1126\t126\t5126\t52\t53\tEPAAAA\tIDGAAA\tOOOOxx\n1415\t4143\t1\t3\t5\t15\t15\t415\t1415\t1415\t1415\t30\t31\tLCAAAA\tJDGAAA\tVVVVxx\n1163\t4144\t1\t3\t3\t3\t63\t163\t1163\t1163\t1163\t126\t127\tTSAAAA\tKDGAAA\tAAAAxx\n3500\t4145\t0\t0\t0\t0\t0\t500\t1500\t3500\t3500\t0\t1\tQEAAAA\tLDGAAA\tHHHHxx\n7202\t4146\t0\t2\t2\t2\t2\t202\t1202\t2202\t7202\t4\t5\tARAAAA\tMDGAAA\tOOOOxx\n747\t4147\t1\t3\t7\t7\t47\t747\t747\t747\t747\t94\t95\tTCAAAA\tNDGAAA\tVVVVxx\n9264\t4148\t0\t0\t4\t4\t64\t264\t1264\t4264\t9264\t128\t129\tISAAAA\tODGAAA\tAAAAxx\n8548\t4149\t0\t0\t8\t8\t48\t548\t548\t3548\t8548\t96\t97\tUQAAAA\tPDGAAA\tHHHHxx\n4228\t4150\t0\t0\t8\t8\t28\t228\t228\t4228\t4228\t56\t57\tQGAAAA\tQDGAAA\tOOOOxx\n7122\t4151\t0\t2\t2\t2\t22\t122\t1122\t2122\t7122\t44\t45\tYNAAAA\tRDGAAA\tVVVVxx\n3395\t4152\t1\t3\t5\t15\t95\t395\t1395\t3395\t3395\t190\t191\tPAAAAA\tSDGAAA\tAAAAxx\n5674\t4153\t0\t2\t4\t14\t74\t674\t1674\t674\t5674\t148\t149\tGKAAAA\tTDGAAA\tHHHHxx\n7293\t4154\t1\t1\t3\t13\t93\t293\t1293\t2293\t7293\t186\t187\tNUAAAA\tUDGAAA\tOOOOxx\n737\t4155\t1\t1\t7\t17\t37\t737\t737\t737\t737\t74\t75\tJCAAAA\tVDGAAA\tVVVVxx\n9595\t4156\t1\t3\t5\t15\t95\t595\t1595\t4595\t9595\t190\t191\tBFAAAA\tWDGAAA\tAAAAxx\n594\t4157\t0\t2\t4\t14\t94\t594\t594\t594\t594\t188\t189\tWWAAAA\tXDGAAA\tHHHHxx\n5322\t4158\t0\t2\t2\t2\t22\t322\t1322\t322\t5322\t44\t45\tSWAAAA\tYDGAAA\tOOOOxx\n2933\t4159\t1\t1\t3\t13\t33\t933\t933\t2933\t2933\t66\t67\tVIAAAA\tZDGAAA\tVVVVxx\n4955\t4160\t1\t3\t5\t15\t55\t955\t955\t4955\t4955\t110\t111\tPIAAAA\tAEGAAA\tAAAAxx\n4073\t4161\t1\t1\t3\t13\t73\t73\t73\t4073\t4073\t146\t147\tRAAAAA\tBEGAAA\tHHHHxx\n7249\t4162\t1\t1\t9\t9\t49\t249\t1249\t2249\t7249\t98\t99\tVSAAAA\tCEGAAA\tOOOOxx\n192\t4163\t0\t0\t2\t12\t92\t192\t192\t192\t192\t184\t185\tKHAAAA\tDEGAAA\tVVVVxx\n2617\t4164\t1\t1\t7\t17\t17\t617\t617\t2617\t2617\t34\t35\tRWAAAA\tEEGAAA\tAAAAxx\n7409\t4165\t1\t1\t9\t9\t9\t409\t1409\t2409\t7409\t18\t19\tZYAAAA\tFEGAAA\tHHHHxx\n4903\t4166\t1\t3\t3\t3\t3\t903\t903\t4903\t4903\t6\t7\tPGAAAA\tGEGAAA\tOOOOxx\n9797\t4167\t1\t1\t7\t17\t97\t797\t1797\t4797\t9797\t194\t195\tVMAAAA\tHEGAAA\tVVVVxx\n9919\t4168\t1\t3\t9\t19\t19\t919\t1919\t4919\t9919\t38\t39\tNRAAAA\tIEGAAA\tAAAAxx\n1878\t4169\t0\t2\t8\t18\t78\t878\t1878\t1878\t1878\t156\t157\tGUAAAA\tJEGAAA\tHHHHxx\n4851\t4170\t1\t3\t1\t11\t51\t851\t851\t4851\t4851\t102\t103\tPEAAAA\tKEGAAA\tOOOOxx\n5514\t4171\t0\t2\t4\t14\t14\t514\t1514\t514\t5514\t28\t29\tCEAAAA\tLEGAAA\tVVVVxx\n2582\t4172\t0\t2\t2\t2\t82\t582\t582\t2582\t2582\t164\t165\tIVAAAA\tMEGAAA\tAAAAxx\n3564\t4173\t0\t0\t4\t4\t64\t564\t1564\t3564\t3564\t128\t129\tCHAAAA\tNEGAAA\tHHHHxx\n7085\t4174\t1\t1\t5\t5\t85\t85\t1085\t2085\t7085\t170\t171\tNMAAAA\tOEGAAA\tOOOOxx\n3619\t4175\t1\t3\t9\t19\t19\t619\t1619\t3619\t3619\t38\t39\tFJAAAA\tPEGAAA\tVVVVxx\n261\t4176\t1\t1\t1\t1\t61\t261\t261\t261\t261\t122\t123\tBKAAAA\tQEGAAA\tAAAAxx\n7338\t4177\t0\t2\t8\t18\t38\t338\t1338\t2338\t7338\t76\t77\tGWAAAA\tREGAAA\tHHHHxx\n4251\t4178\t1\t3\t1\t11\t51\t251\t251\t4251\t4251\t102\t103\tNHAAAA\tSEGAAA\tOOOOxx\n5360\t4179\t0\t0\t0\t0\t60\t360\t1360\t360\t5360\t120\t121\tEYAAAA\tTEGAAA\tVVVVxx\n5678\t4180\t0\t2\t8\t18\t78\t678\t1678\t678\t5678\t156\t157\tKKAAAA\tUEGAAA\tAAAAxx\n9162\t4181\t0\t2\t2\t2\t62\t162\t1162\t4162\t9162\t124\t125\tKOAAAA\tVEGAAA\tHHHHxx\n5920\t4182\t0\t0\t0\t0\t20\t920\t1920\t920\t5920\t40\t41\tSTAAAA\tWEGAAA\tOOOOxx\n7156\t4183\t0\t0\t6\t16\t56\t156\t1156\t2156\t7156\t112\t113\tGPAAAA\tXEGAAA\tVVVVxx\n4271\t4184\t1\t3\t1\t11\t71\t271\t271\t4271\t4271\t142\t143\tHIAAAA\tYEGAAA\tAAAAxx\n4698\t4185\t0\t2\t8\t18\t98\t698\t698\t4698\t4698\t196\t197\tSYAAAA\tZEGAAA\tHHHHxx\n1572\t4186\t0\t0\t2\t12\t72\t572\t1572\t1572\t1572\t144\t145\tMIAAAA\tAFGAAA\tOOOOxx\n6974\t4187\t0\t2\t4\t14\t74\t974\t974\t1974\t6974\t148\t149\tGIAAAA\tBFGAAA\tVVVVxx\n4291\t4188\t1\t3\t1\t11\t91\t291\t291\t4291\t4291\t182\t183\tBJAAAA\tCFGAAA\tAAAAxx\n4036\t4189\t0\t0\t6\t16\t36\t36\t36\t4036\t4036\t72\t73\tGZAAAA\tDFGAAA\tHHHHxx\n7473\t4190\t1\t1\t3\t13\t73\t473\t1473\t2473\t7473\t146\t147\tLBAAAA\tEFGAAA\tOOOOxx\n4786\t4191\t0\t2\t6\t6\t86\t786\t786\t4786\t4786\t172\t173\tCCAAAA\tFFGAAA\tVVVVxx\n2662\t4192\t0\t2\t2\t2\t62\t662\t662\t2662\t2662\t124\t125\tKYAAAA\tGFGAAA\tAAAAxx\n916\t4193\t0\t0\t6\t16\t16\t916\t916\t916\t916\t32\t33\tGJAAAA\tHFGAAA\tHHHHxx\n668\t4194\t0\t0\t8\t8\t68\t668\t668\t668\t668\t136\t137\tSZAAAA\tIFGAAA\tOOOOxx\n4874\t4195\t0\t2\t4\t14\t74\t874\t874\t4874\t4874\t148\t149\tMFAAAA\tJFGAAA\tVVVVxx\n3752\t4196\t0\t0\t2\t12\t52\t752\t1752\t3752\t3752\t104\t105\tIOAAAA\tKFGAAA\tAAAAxx\n4865\t4197\t1\t1\t5\t5\t65\t865\t865\t4865\t4865\t130\t131\tDFAAAA\tLFGAAA\tHHHHxx\n7052\t4198\t0\t0\t2\t12\t52\t52\t1052\t2052\t7052\t104\t105\tGLAAAA\tMFGAAA\tOOOOxx\n5712\t4199\t0\t0\t2\t12\t12\t712\t1712\t712\t5712\t24\t25\tSLAAAA\tNFGAAA\tVVVVxx\n31\t4200\t1\t3\t1\t11\t31\t31\t31\t31\t31\t62\t63\tFBAAAA\tOFGAAA\tAAAAxx\n4944\t4201\t0\t0\t4\t4\t44\t944\t944\t4944\t4944\t88\t89\tEIAAAA\tPFGAAA\tHHHHxx\n1435\t4202\t1\t3\t5\t15\t35\t435\t1435\t1435\t1435\t70\t71\tFDAAAA\tQFGAAA\tOOOOxx\n501\t4203\t1\t1\t1\t1\t1\t501\t501\t501\t501\t2\t3\tHTAAAA\tRFGAAA\tVVVVxx\n9401\t4204\t1\t1\t1\t1\t1\t401\t1401\t4401\t9401\t2\t3\tPXAAAA\tSFGAAA\tAAAAxx\n5014\t4205\t0\t2\t4\t14\t14\t14\t1014\t14\t5014\t28\t29\tWKAAAA\tTFGAAA\tHHHHxx\n9125\t4206\t1\t1\t5\t5\t25\t125\t1125\t4125\t9125\t50\t51\tZMAAAA\tUFGAAA\tOOOOxx\n6144\t4207\t0\t0\t4\t4\t44\t144\t144\t1144\t6144\t88\t89\tICAAAA\tVFGAAA\tVVVVxx\n1743\t4208\t1\t3\t3\t3\t43\t743\t1743\t1743\t1743\t86\t87\tBPAAAA\tWFGAAA\tAAAAxx\n4316\t4209\t0\t0\t6\t16\t16\t316\t316\t4316\t4316\t32\t33\tAKAAAA\tXFGAAA\tHHHHxx\n8212\t4210\t0\t0\t2\t12\t12\t212\t212\t3212\t8212\t24\t25\tWDAAAA\tYFGAAA\tOOOOxx\n7344\t4211\t0\t0\t4\t4\t44\t344\t1344\t2344\t7344\t88\t89\tMWAAAA\tZFGAAA\tVVVVxx\n2051\t4212\t1\t3\t1\t11\t51\t51\t51\t2051\t2051\t102\t103\tXAAAAA\tAGGAAA\tAAAAxx\n8131\t4213\t1\t3\t1\t11\t31\t131\t131\t3131\t8131\t62\t63\tTAAAAA\tBGGAAA\tHHHHxx\n7023\t4214\t1\t3\t3\t3\t23\t23\t1023\t2023\t7023\t46\t47\tDKAAAA\tCGGAAA\tOOOOxx\n9674\t4215\t0\t2\t4\t14\t74\t674\t1674\t4674\t9674\t148\t149\tCIAAAA\tDGGAAA\tVVVVxx\n4984\t4216\t0\t0\t4\t4\t84\t984\t984\t4984\t4984\t168\t169\tSJAAAA\tEGGAAA\tAAAAxx\n111\t4217\t1\t3\t1\t11\t11\t111\t111\t111\t111\t22\t23\tHEAAAA\tFGGAAA\tHHHHxx\n2296\t4218\t0\t0\t6\t16\t96\t296\t296\t2296\t2296\t192\t193\tIKAAAA\tGGGAAA\tOOOOxx\n5025\t4219\t1\t1\t5\t5\t25\t25\t1025\t25\t5025\t50\t51\tHLAAAA\tHGGAAA\tVVVVxx\n1756\t4220\t0\t0\t6\t16\t56\t756\t1756\t1756\t1756\t112\t113\tOPAAAA\tIGGAAA\tAAAAxx\n2885\t4221\t1\t1\t5\t5\t85\t885\t885\t2885\t2885\t170\t171\tZGAAAA\tJGGAAA\tHHHHxx\n2541\t4222\t1\t1\t1\t1\t41\t541\t541\t2541\t2541\t82\t83\tTTAAAA\tKGGAAA\tOOOOxx\n1919\t4223\t1\t3\t9\t19\t19\t919\t1919\t1919\t1919\t38\t39\tVVAAAA\tLGGAAA\tVVVVxx\n6496\t4224\t0\t0\t6\t16\t96\t496\t496\t1496\t6496\t192\t193\tWPAAAA\tMGGAAA\tAAAAxx\n6103\t4225\t1\t3\t3\t3\t3\t103\t103\t1103\t6103\t6\t7\tTAAAAA\tNGGAAA\tHHHHxx\n98\t4226\t0\t2\t8\t18\t98\t98\t98\t98\t98\t196\t197\tUDAAAA\tOGGAAA\tOOOOxx\n3727\t4227\t1\t3\t7\t7\t27\t727\t1727\t3727\t3727\t54\t55\tJNAAAA\tPGGAAA\tVVVVxx\n689\t4228\t1\t1\t9\t9\t89\t689\t689\t689\t689\t178\t179\tNAAAAA\tQGGAAA\tAAAAxx\n7181\t4229\t1\t1\t1\t1\t81\t181\t1181\t2181\t7181\t162\t163\tFQAAAA\tRGGAAA\tHHHHxx\n8447\t4230\t1\t3\t7\t7\t47\t447\t447\t3447\t8447\t94\t95\tXMAAAA\tSGGAAA\tOOOOxx\n4569\t4231\t1\t1\t9\t9\t69\t569\t569\t4569\t4569\t138\t139\tTTAAAA\tTGGAAA\tVVVVxx\n8844\t4232\t0\t0\t4\t4\t44\t844\t844\t3844\t8844\t88\t89\tECAAAA\tUGGAAA\tAAAAxx\n2436\t4233\t0\t0\t6\t16\t36\t436\t436\t2436\t2436\t72\t73\tSPAAAA\tVGGAAA\tHHHHxx\n391\t4234\t1\t3\t1\t11\t91\t391\t391\t391\t391\t182\t183\tBPAAAA\tWGGAAA\tOOOOxx\n3035\t4235\t1\t3\t5\t15\t35\t35\t1035\t3035\t3035\t70\t71\tTMAAAA\tXGGAAA\tVVVVxx\n7583\t4236\t1\t3\t3\t3\t83\t583\t1583\t2583\t7583\t166\t167\tRFAAAA\tYGGAAA\tAAAAxx\n1145\t4237\t1\t1\t5\t5\t45\t145\t1145\t1145\t1145\t90\t91\tBSAAAA\tZGGAAA\tHHHHxx\n93\t4238\t1\t1\t3\t13\t93\t93\t93\t93\t93\t186\t187\tPDAAAA\tAHGAAA\tOOOOxx\n8896\t4239\t0\t0\t6\t16\t96\t896\t896\t3896\t8896\t192\t193\tEEAAAA\tBHGAAA\tVVVVxx\n6719\t4240\t1\t3\t9\t19\t19\t719\t719\t1719\t6719\t38\t39\tLYAAAA\tCHGAAA\tAAAAxx\n7728\t4241\t0\t0\t8\t8\t28\t728\t1728\t2728\t7728\t56\t57\tGLAAAA\tDHGAAA\tHHHHxx\n1349\t4242\t1\t1\t9\t9\t49\t349\t1349\t1349\t1349\t98\t99\tXZAAAA\tEHGAAA\tOOOOxx\n5349\t4243\t1\t1\t9\t9\t49\t349\t1349\t349\t5349\t98\t99\tTXAAAA\tFHGAAA\tVVVVxx\n3040\t4244\t0\t0\t0\t0\t40\t40\t1040\t3040\t3040\t80\t81\tYMAAAA\tGHGAAA\tAAAAxx\n2414\t4245\t0\t2\t4\t14\t14\t414\t414\t2414\t2414\t28\t29\tWOAAAA\tHHGAAA\tHHHHxx\n5122\t4246\t0\t2\t2\t2\t22\t122\t1122\t122\t5122\t44\t45\tAPAAAA\tIHGAAA\tOOOOxx\n9553\t4247\t1\t1\t3\t13\t53\t553\t1553\t4553\t9553\t106\t107\tLDAAAA\tJHGAAA\tVVVVxx\n5987\t4248\t1\t3\t7\t7\t87\t987\t1987\t987\t5987\t174\t175\tHWAAAA\tKHGAAA\tAAAAxx\n5939\t4249\t1\t3\t9\t19\t39\t939\t1939\t939\t5939\t78\t79\tLUAAAA\tLHGAAA\tHHHHxx\n3525\t4250\t1\t1\t5\t5\t25\t525\t1525\t3525\t3525\t50\t51\tPFAAAA\tMHGAAA\tOOOOxx\n1371\t4251\t1\t3\t1\t11\t71\t371\t1371\t1371\t1371\t142\t143\tTAAAAA\tNHGAAA\tVVVVxx\n618\t4252\t0\t2\t8\t18\t18\t618\t618\t618\t618\t36\t37\tUXAAAA\tOHGAAA\tAAAAxx\n6529\t4253\t1\t1\t9\t9\t29\t529\t529\t1529\t6529\t58\t59\tDRAAAA\tPHGAAA\tHHHHxx\n4010\t4254\t0\t2\t0\t10\t10\t10\t10\t4010\t4010\t20\t21\tGYAAAA\tQHGAAA\tOOOOxx\n328\t4255\t0\t0\t8\t8\t28\t328\t328\t328\t328\t56\t57\tQMAAAA\tRHGAAA\tVVVVxx\n6121\t4256\t1\t1\t1\t1\t21\t121\t121\t1121\t6121\t42\t43\tLBAAAA\tSHGAAA\tAAAAxx\n3505\t4257\t1\t1\t5\t5\t5\t505\t1505\t3505\t3505\t10\t11\tVEAAAA\tTHGAAA\tHHHHxx\n2033\t4258\t1\t1\t3\t13\t33\t33\t33\t2033\t2033\t66\t67\tFAAAAA\tUHGAAA\tOOOOxx\n4724\t4259\t0\t0\t4\t4\t24\t724\t724\t4724\t4724\t48\t49\tSZAAAA\tVHGAAA\tVVVVxx\n8717\t4260\t1\t1\t7\t17\t17\t717\t717\t3717\t8717\t34\t35\tHXAAAA\tWHGAAA\tAAAAxx\n5639\t4261\t1\t3\t9\t19\t39\t639\t1639\t639\t5639\t78\t79\tXIAAAA\tXHGAAA\tHHHHxx\n3448\t4262\t0\t0\t8\t8\t48\t448\t1448\t3448\t3448\t96\t97\tQCAAAA\tYHGAAA\tOOOOxx\n2919\t4263\t1\t3\t9\t19\t19\t919\t919\t2919\t2919\t38\t39\tHIAAAA\tZHGAAA\tVVVVxx\n3417\t4264\t1\t1\t7\t17\t17\t417\t1417\t3417\t3417\t34\t35\tLBAAAA\tAIGAAA\tAAAAxx\n943\t4265\t1\t3\t3\t3\t43\t943\t943\t943\t943\t86\t87\tHKAAAA\tBIGAAA\tHHHHxx\n775\t4266\t1\t3\t5\t15\t75\t775\t775\t775\t775\t150\t151\tVDAAAA\tCIGAAA\tOOOOxx\n2333\t4267\t1\t1\t3\t13\t33\t333\t333\t2333\t2333\t66\t67\tTLAAAA\tDIGAAA\tVVVVxx\n4801\t4268\t1\t1\t1\t1\t1\t801\t801\t4801\t4801\t2\t3\tRCAAAA\tEIGAAA\tAAAAxx\n7169\t4269\t1\t1\t9\t9\t69\t169\t1169\t2169\t7169\t138\t139\tTPAAAA\tFIGAAA\tHHHHxx\n2840\t4270\t0\t0\t0\t0\t40\t840\t840\t2840\t2840\t80\t81\tGFAAAA\tGIGAAA\tOOOOxx\n9034\t4271\t0\t2\t4\t14\t34\t34\t1034\t4034\t9034\t68\t69\tMJAAAA\tHIGAAA\tVVVVxx\n6154\t4272\t0\t2\t4\t14\t54\t154\t154\t1154\t6154\t108\t109\tSCAAAA\tIIGAAA\tAAAAxx\n1412\t4273\t0\t0\t2\t12\t12\t412\t1412\t1412\t1412\t24\t25\tICAAAA\tJIGAAA\tHHHHxx\n2263\t4274\t1\t3\t3\t3\t63\t263\t263\t2263\t2263\t126\t127\tBJAAAA\tKIGAAA\tOOOOxx\n7118\t4275\t0\t2\t8\t18\t18\t118\t1118\t2118\t7118\t36\t37\tUNAAAA\tLIGAAA\tVVVVxx\n1526\t4276\t0\t2\t6\t6\t26\t526\t1526\t1526\t1526\t52\t53\tSGAAAA\tMIGAAA\tAAAAxx\n491\t4277\t1\t3\t1\t11\t91\t491\t491\t491\t491\t182\t183\tXSAAAA\tNIGAAA\tHHHHxx\n9732\t4278\t0\t0\t2\t12\t32\t732\t1732\t4732\t9732\t64\t65\tIKAAAA\tOIGAAA\tOOOOxx\n7067\t4279\t1\t3\t7\t7\t67\t67\t1067\t2067\t7067\t134\t135\tVLAAAA\tPIGAAA\tVVVVxx\n212\t4280\t0\t0\t2\t12\t12\t212\t212\t212\t212\t24\t25\tEIAAAA\tQIGAAA\tAAAAxx\n1955\t4281\t1\t3\t5\t15\t55\t955\t1955\t1955\t1955\t110\t111\tFXAAAA\tRIGAAA\tHHHHxx\n3303\t4282\t1\t3\t3\t3\t3\t303\t1303\t3303\t3303\t6\t7\tBXAAAA\tSIGAAA\tOOOOxx\n2715\t4283\t1\t3\t5\t15\t15\t715\t715\t2715\t2715\t30\t31\tLAAAAA\tTIGAAA\tVVVVxx\n8168\t4284\t0\t0\t8\t8\t68\t168\t168\t3168\t8168\t136\t137\tECAAAA\tUIGAAA\tAAAAxx\n6799\t4285\t1\t3\t9\t19\t99\t799\t799\t1799\t6799\t198\t199\tNBAAAA\tVIGAAA\tHHHHxx\n5080\t4286\t0\t0\t0\t0\t80\t80\t1080\t80\t5080\t160\t161\tKNAAAA\tWIGAAA\tOOOOxx\n4939\t4287\t1\t3\t9\t19\t39\t939\t939\t4939\t4939\t78\t79\tZHAAAA\tXIGAAA\tVVVVxx\n6604\t4288\t0\t0\t4\t4\t4\t604\t604\t1604\t6604\t8\t9\tAUAAAA\tYIGAAA\tAAAAxx\n6531\t4289\t1\t3\t1\t11\t31\t531\t531\t1531\t6531\t62\t63\tFRAAAA\tZIGAAA\tHHHHxx\n9948\t4290\t0\t0\t8\t8\t48\t948\t1948\t4948\t9948\t96\t97\tQSAAAA\tAJGAAA\tOOOOxx\n7923\t4291\t1\t3\t3\t3\t23\t923\t1923\t2923\t7923\t46\t47\tTSAAAA\tBJGAAA\tVVVVxx\n9905\t4292\t1\t1\t5\t5\t5\t905\t1905\t4905\t9905\t10\t11\tZQAAAA\tCJGAAA\tAAAAxx\n340\t4293\t0\t0\t0\t0\t40\t340\t340\t340\t340\t80\t81\tCNAAAA\tDJGAAA\tHHHHxx\n1721\t4294\t1\t1\t1\t1\t21\t721\t1721\t1721\t1721\t42\t43\tFOAAAA\tEJGAAA\tOOOOxx\n9047\t4295\t1\t3\t7\t7\t47\t47\t1047\t4047\t9047\t94\t95\tZJAAAA\tFJGAAA\tVVVVxx\n4723\t4296\t1\t3\t3\t3\t23\t723\t723\t4723\t4723\t46\t47\tRZAAAA\tGJGAAA\tAAAAxx\n5748\t4297\t0\t0\t8\t8\t48\t748\t1748\t748\t5748\t96\t97\tCNAAAA\tHJGAAA\tHHHHxx\n6845\t4298\t1\t1\t5\t5\t45\t845\t845\t1845\t6845\t90\t91\tHDAAAA\tIJGAAA\tOOOOxx\n1556\t4299\t0\t0\t6\t16\t56\t556\t1556\t1556\t1556\t112\t113\tWHAAAA\tJJGAAA\tVVVVxx\n9505\t4300\t1\t1\t5\t5\t5\t505\t1505\t4505\t9505\t10\t11\tPBAAAA\tKJGAAA\tAAAAxx\n3573\t4301\t1\t1\t3\t13\t73\t573\t1573\t3573\t3573\t146\t147\tLHAAAA\tLJGAAA\tHHHHxx\n3785\t4302\t1\t1\t5\t5\t85\t785\t1785\t3785\t3785\t170\t171\tPPAAAA\tMJGAAA\tOOOOxx\n2772\t4303\t0\t0\t2\t12\t72\t772\t772\t2772\t2772\t144\t145\tQCAAAA\tNJGAAA\tVVVVxx\n7282\t4304\t0\t2\t2\t2\t82\t282\t1282\t2282\t7282\t164\t165\tCUAAAA\tOJGAAA\tAAAAxx\n8106\t4305\t0\t2\t6\t6\t6\t106\t106\t3106\t8106\t12\t13\tUZAAAA\tPJGAAA\tHHHHxx\n2847\t4306\t1\t3\t7\t7\t47\t847\t847\t2847\t2847\t94\t95\tNFAAAA\tQJGAAA\tOOOOxx\n9803\t4307\t1\t3\t3\t3\t3\t803\t1803\t4803\t9803\t6\t7\tBNAAAA\tRJGAAA\tVVVVxx\n7719\t4308\t1\t3\t9\t19\t19\t719\t1719\t2719\t7719\t38\t39\tXKAAAA\tSJGAAA\tAAAAxx\n4649\t4309\t1\t1\t9\t9\t49\t649\t649\t4649\t4649\t98\t99\tVWAAAA\tTJGAAA\tHHHHxx\n6196\t4310\t0\t0\t6\t16\t96\t196\t196\t1196\t6196\t192\t193\tIEAAAA\tUJGAAA\tOOOOxx\n6026\t4311\t0\t2\t6\t6\t26\t26\t26\t1026\t6026\t52\t53\tUXAAAA\tVJGAAA\tVVVVxx\n1646\t4312\t0\t2\t6\t6\t46\t646\t1646\t1646\t1646\t92\t93\tILAAAA\tWJGAAA\tAAAAxx\n6526\t4313\t0\t2\t6\t6\t26\t526\t526\t1526\t6526\t52\t53\tARAAAA\tXJGAAA\tHHHHxx\n5110\t4314\t0\t2\t0\t10\t10\t110\t1110\t110\t5110\t20\t21\tOOAAAA\tYJGAAA\tOOOOxx\n3946\t4315\t0\t2\t6\t6\t46\t946\t1946\t3946\t3946\t92\t93\tUVAAAA\tZJGAAA\tVVVVxx\n445\t4316\t1\t1\t5\t5\t45\t445\t445\t445\t445\t90\t91\tDRAAAA\tAKGAAA\tAAAAxx\n3249\t4317\t1\t1\t9\t9\t49\t249\t1249\t3249\t3249\t98\t99\tZUAAAA\tBKGAAA\tHHHHxx\n2501\t4318\t1\t1\t1\t1\t1\t501\t501\t2501\t2501\t2\t3\tFSAAAA\tCKGAAA\tOOOOxx\n3243\t4319\t1\t3\t3\t3\t43\t243\t1243\t3243\t3243\t86\t87\tTUAAAA\tDKGAAA\tVVVVxx\n4701\t4320\t1\t1\t1\t1\t1\t701\t701\t4701\t4701\t2\t3\tVYAAAA\tEKGAAA\tAAAAxx\n472\t4321\t0\t0\t2\t12\t72\t472\t472\t472\t472\t144\t145\tESAAAA\tFKGAAA\tHHHHxx\n3356\t4322\t0\t0\t6\t16\t56\t356\t1356\t3356\t3356\t112\t113\tCZAAAA\tGKGAAA\tOOOOxx\n9967\t4323\t1\t3\t7\t7\t67\t967\t1967\t4967\t9967\t134\t135\tJTAAAA\tHKGAAA\tVVVVxx\n4292\t4324\t0\t0\t2\t12\t92\t292\t292\t4292\t4292\t184\t185\tCJAAAA\tIKGAAA\tAAAAxx\n7005\t4325\t1\t1\t5\t5\t5\t5\t1005\t2005\t7005\t10\t11\tLJAAAA\tJKGAAA\tHHHHxx\n6267\t4326\t1\t3\t7\t7\t67\t267\t267\t1267\t6267\t134\t135\tBHAAAA\tKKGAAA\tOOOOxx\n6678\t4327\t0\t2\t8\t18\t78\t678\t678\t1678\t6678\t156\t157\tWWAAAA\tLKGAAA\tVVVVxx\n6083\t4328\t1\t3\t3\t3\t83\t83\t83\t1083\t6083\t166\t167\tZZAAAA\tMKGAAA\tAAAAxx\n760\t4329\t0\t0\t0\t0\t60\t760\t760\t760\t760\t120\t121\tGDAAAA\tNKGAAA\tHHHHxx\n7833\t4330\t1\t1\t3\t13\t33\t833\t1833\t2833\t7833\t66\t67\tHPAAAA\tOKGAAA\tOOOOxx\n2877\t4331\t1\t1\t7\t17\t77\t877\t877\t2877\t2877\t154\t155\tRGAAAA\tPKGAAA\tVVVVxx\n8810\t4332\t0\t2\t0\t10\t10\t810\t810\t3810\t8810\t20\t21\tWAAAAA\tQKGAAA\tAAAAxx\n1560\t4333\t0\t0\t0\t0\t60\t560\t1560\t1560\t1560\t120\t121\tAIAAAA\tRKGAAA\tHHHHxx\n1367\t4334\t1\t3\t7\t7\t67\t367\t1367\t1367\t1367\t134\t135\tPAAAAA\tSKGAAA\tOOOOxx\n8756\t4335\t0\t0\t6\t16\t56\t756\t756\t3756\t8756\t112\t113\tUYAAAA\tTKGAAA\tVVVVxx\n1346\t4336\t0\t2\t6\t6\t46\t346\t1346\t1346\t1346\t92\t93\tUZAAAA\tUKGAAA\tAAAAxx\n6449\t4337\t1\t1\t9\t9\t49\t449\t449\t1449\t6449\t98\t99\tBOAAAA\tVKGAAA\tHHHHxx\n6658\t4338\t0\t2\t8\t18\t58\t658\t658\t1658\t6658\t116\t117\tCWAAAA\tWKGAAA\tOOOOxx\n6745\t4339\t1\t1\t5\t5\t45\t745\t745\t1745\t6745\t90\t91\tLZAAAA\tXKGAAA\tVVVVxx\n4866\t4340\t0\t2\t6\t6\t66\t866\t866\t4866\t4866\t132\t133\tEFAAAA\tYKGAAA\tAAAAxx\n14\t4341\t0\t2\t4\t14\t14\t14\t14\t14\t14\t28\t29\tOAAAAA\tZKGAAA\tHHHHxx\n4506\t4342\t0\t2\t6\t6\t6\t506\t506\t4506\t4506\t12\t13\tIRAAAA\tALGAAA\tOOOOxx\n1923\t4343\t1\t3\t3\t3\t23\t923\t1923\t1923\t1923\t46\t47\tZVAAAA\tBLGAAA\tVVVVxx\n8365\t4344\t1\t1\t5\t5\t65\t365\t365\t3365\t8365\t130\t131\tTJAAAA\tCLGAAA\tAAAAxx\n1279\t4345\t1\t3\t9\t19\t79\t279\t1279\t1279\t1279\t158\t159\tFXAAAA\tDLGAAA\tHHHHxx\n7666\t4346\t0\t2\t6\t6\t66\t666\t1666\t2666\t7666\t132\t133\tWIAAAA\tELGAAA\tOOOOxx\n7404\t4347\t0\t0\t4\t4\t4\t404\t1404\t2404\t7404\t8\t9\tUYAAAA\tFLGAAA\tVVVVxx\n65\t4348\t1\t1\t5\t5\t65\t65\t65\t65\t65\t130\t131\tNCAAAA\tGLGAAA\tAAAAxx\n5820\t4349\t0\t0\t0\t0\t20\t820\t1820\t820\t5820\t40\t41\tWPAAAA\tHLGAAA\tHHHHxx\n459\t4350\t1\t3\t9\t19\t59\t459\t459\t459\t459\t118\t119\tRRAAAA\tILGAAA\tOOOOxx\n4787\t4351\t1\t3\t7\t7\t87\t787\t787\t4787\t4787\t174\t175\tDCAAAA\tJLGAAA\tVVVVxx\n5631\t4352\t1\t3\t1\t11\t31\t631\t1631\t631\t5631\t62\t63\tPIAAAA\tKLGAAA\tAAAAxx\n9717\t4353\t1\t1\t7\t17\t17\t717\t1717\t4717\t9717\t34\t35\tTJAAAA\tLLGAAA\tHHHHxx\n2560\t4354\t0\t0\t0\t0\t60\t560\t560\t2560\t2560\t120\t121\tMUAAAA\tMLGAAA\tOOOOxx\n8295\t4355\t1\t3\t5\t15\t95\t295\t295\t3295\t8295\t190\t191\tBHAAAA\tNLGAAA\tVVVVxx\n3596\t4356\t0\t0\t6\t16\t96\t596\t1596\t3596\t3596\t192\t193\tIIAAAA\tOLGAAA\tAAAAxx\n2023\t4357\t1\t3\t3\t3\t23\t23\t23\t2023\t2023\t46\t47\tVZAAAA\tPLGAAA\tHHHHxx\n5055\t4358\t1\t3\t5\t15\t55\t55\t1055\t55\t5055\t110\t111\tLMAAAA\tQLGAAA\tOOOOxx\n763\t4359\t1\t3\t3\t3\t63\t763\t763\t763\t763\t126\t127\tJDAAAA\tRLGAAA\tVVVVxx\n6733\t4360\t1\t1\t3\t13\t33\t733\t733\t1733\t6733\t66\t67\tZYAAAA\tSLGAAA\tAAAAxx\n9266\t4361\t0\t2\t6\t6\t66\t266\t1266\t4266\t9266\t132\t133\tKSAAAA\tTLGAAA\tHHHHxx\n4479\t4362\t1\t3\t9\t19\t79\t479\t479\t4479\t4479\t158\t159\tHQAAAA\tULGAAA\tOOOOxx\n1816\t4363\t0\t0\t6\t16\t16\t816\t1816\t1816\t1816\t32\t33\tWRAAAA\tVLGAAA\tVVVVxx\n899\t4364\t1\t3\t9\t19\t99\t899\t899\t899\t899\t198\t199\tPIAAAA\tWLGAAA\tAAAAxx\n230\t4365\t0\t2\t0\t10\t30\t230\t230\t230\t230\t60\t61\tWIAAAA\tXLGAAA\tHHHHxx\n5362\t4366\t0\t2\t2\t2\t62\t362\t1362\t362\t5362\t124\t125\tGYAAAA\tYLGAAA\tOOOOxx\n1609\t4367\t1\t1\t9\t9\t9\t609\t1609\t1609\t1609\t18\t19\tXJAAAA\tZLGAAA\tVVVVxx\n6750\t4368\t0\t2\t0\t10\t50\t750\t750\t1750\t6750\t100\t101\tQZAAAA\tAMGAAA\tAAAAxx\n9704\t4369\t0\t0\t4\t4\t4\t704\t1704\t4704\t9704\t8\t9\tGJAAAA\tBMGAAA\tHHHHxx\n3991\t4370\t1\t3\t1\t11\t91\t991\t1991\t3991\t3991\t182\t183\tNXAAAA\tCMGAAA\tOOOOxx\n3959\t4371\t1\t3\t9\t19\t59\t959\t1959\t3959\t3959\t118\t119\tHWAAAA\tDMGAAA\tVVVVxx\n9021\t4372\t1\t1\t1\t1\t21\t21\t1021\t4021\t9021\t42\t43\tZIAAAA\tEMGAAA\tAAAAxx\n7585\t4373\t1\t1\t5\t5\t85\t585\t1585\t2585\t7585\t170\t171\tTFAAAA\tFMGAAA\tHHHHxx\n7083\t4374\t1\t3\t3\t3\t83\t83\t1083\t2083\t7083\t166\t167\tLMAAAA\tGMGAAA\tOOOOxx\n7688\t4375\t0\t0\t8\t8\t88\t688\t1688\t2688\t7688\t176\t177\tSJAAAA\tHMGAAA\tVVVVxx\n2673\t4376\t1\t1\t3\t13\t73\t673\t673\t2673\t2673\t146\t147\tVYAAAA\tIMGAAA\tAAAAxx\n3554\t4377\t0\t2\t4\t14\t54\t554\t1554\t3554\t3554\t108\t109\tSGAAAA\tJMGAAA\tHHHHxx\n7416\t4378\t0\t0\t6\t16\t16\t416\t1416\t2416\t7416\t32\t33\tGZAAAA\tKMGAAA\tOOOOxx\n5672\t4379\t0\t0\t2\t12\t72\t672\t1672\t672\t5672\t144\t145\tEKAAAA\tLMGAAA\tVVVVxx\n1355\t4380\t1\t3\t5\t15\t55\t355\t1355\t1355\t1355\t110\t111\tDAAAAA\tMMGAAA\tAAAAxx\n3149\t4381\t1\t1\t9\t9\t49\t149\t1149\t3149\t3149\t98\t99\tDRAAAA\tNMGAAA\tHHHHxx\n5811\t4382\t1\t3\t1\t11\t11\t811\t1811\t811\t5811\t22\t23\tNPAAAA\tOMGAAA\tOOOOxx\n3759\t4383\t1\t3\t9\t19\t59\t759\t1759\t3759\t3759\t118\t119\tPOAAAA\tPMGAAA\tVVVVxx\n5634\t4384\t0\t2\t4\t14\t34\t634\t1634\t634\t5634\t68\t69\tSIAAAA\tQMGAAA\tAAAAxx\n8617\t4385\t1\t1\t7\t17\t17\t617\t617\t3617\t8617\t34\t35\tLTAAAA\tRMGAAA\tHHHHxx\n8949\t4386\t1\t1\t9\t9\t49\t949\t949\t3949\t8949\t98\t99\tFGAAAA\tSMGAAA\tOOOOxx\n3964\t4387\t0\t0\t4\t4\t64\t964\t1964\t3964\t3964\t128\t129\tMWAAAA\tTMGAAA\tVVVVxx\n3852\t4388\t0\t0\t2\t12\t52\t852\t1852\t3852\t3852\t104\t105\tESAAAA\tUMGAAA\tAAAAxx\n1555\t4389\t1\t3\t5\t15\t55\t555\t1555\t1555\t1555\t110\t111\tVHAAAA\tVMGAAA\tHHHHxx\n6536\t4390\t0\t0\t6\t16\t36\t536\t536\t1536\t6536\t72\t73\tKRAAAA\tWMGAAA\tOOOOxx\n4779\t4391\t1\t3\t9\t19\t79\t779\t779\t4779\t4779\t158\t159\tVBAAAA\tXMGAAA\tVVVVxx\n1893\t4392\t1\t1\t3\t13\t93\t893\t1893\t1893\t1893\t186\t187\tVUAAAA\tYMGAAA\tAAAAxx\n9358\t4393\t0\t2\t8\t18\t58\t358\t1358\t4358\t9358\t116\t117\tYVAAAA\tZMGAAA\tHHHHxx\n7438\t4394\t0\t2\t8\t18\t38\t438\t1438\t2438\t7438\t76\t77\tCAAAAA\tANGAAA\tOOOOxx\n941\t4395\t1\t1\t1\t1\t41\t941\t941\t941\t941\t82\t83\tFKAAAA\tBNGAAA\tVVVVxx\n4844\t4396\t0\t0\t4\t4\t44\t844\t844\t4844\t4844\t88\t89\tIEAAAA\tCNGAAA\tAAAAxx\n4745\t4397\t1\t1\t5\t5\t45\t745\t745\t4745\t4745\t90\t91\tNAAAAA\tDNGAAA\tHHHHxx\n1017\t4398\t1\t1\t7\t17\t17\t17\t1017\t1017\t1017\t34\t35\tDNAAAA\tENGAAA\tOOOOxx\n327\t4399\t1\t3\t7\t7\t27\t327\t327\t327\t327\t54\t55\tPMAAAA\tFNGAAA\tVVVVxx\n3152\t4400\t0\t0\t2\t12\t52\t152\t1152\t3152\t3152\t104\t105\tGRAAAA\tGNGAAA\tAAAAxx\n4711\t4401\t1\t3\t1\t11\t11\t711\t711\t4711\t4711\t22\t23\tFZAAAA\tHNGAAA\tHHHHxx\n141\t4402\t1\t1\t1\t1\t41\t141\t141\t141\t141\t82\t83\tLFAAAA\tINGAAA\tOOOOxx\n1303\t4403\t1\t3\t3\t3\t3\t303\t1303\t1303\t1303\t6\t7\tDYAAAA\tJNGAAA\tVVVVxx\n8873\t4404\t1\t1\t3\t13\t73\t873\t873\t3873\t8873\t146\t147\tHDAAAA\tKNGAAA\tAAAAxx\n8481\t4405\t1\t1\t1\t1\t81\t481\t481\t3481\t8481\t162\t163\tFOAAAA\tLNGAAA\tHHHHxx\n5445\t4406\t1\t1\t5\t5\t45\t445\t1445\t445\t5445\t90\t91\tLBAAAA\tMNGAAA\tOOOOxx\n7868\t4407\t0\t0\t8\t8\t68\t868\t1868\t2868\t7868\t136\t137\tQQAAAA\tNNGAAA\tVVVVxx\n6722\t4408\t0\t2\t2\t2\t22\t722\t722\t1722\t6722\t44\t45\tOYAAAA\tONGAAA\tAAAAxx\n6628\t4409\t0\t0\t8\t8\t28\t628\t628\t1628\t6628\t56\t57\tYUAAAA\tPNGAAA\tHHHHxx\n7738\t4410\t0\t2\t8\t18\t38\t738\t1738\t2738\t7738\t76\t77\tQLAAAA\tQNGAAA\tOOOOxx\n1018\t4411\t0\t2\t8\t18\t18\t18\t1018\t1018\t1018\t36\t37\tENAAAA\tRNGAAA\tVVVVxx\n3296\t4412\t0\t0\t6\t16\t96\t296\t1296\t3296\t3296\t192\t193\tUWAAAA\tSNGAAA\tAAAAxx\n1946\t4413\t0\t2\t6\t6\t46\t946\t1946\t1946\t1946\t92\t93\tWWAAAA\tTNGAAA\tHHHHxx\n6603\t4414\t1\t3\t3\t3\t3\t603\t603\t1603\t6603\t6\t7\tZTAAAA\tUNGAAA\tOOOOxx\n3562\t4415\t0\t2\t2\t2\t62\t562\t1562\t3562\t3562\t124\t125\tAHAAAA\tVNGAAA\tVVVVxx\n1147\t4416\t1\t3\t7\t7\t47\t147\t1147\t1147\t1147\t94\t95\tDSAAAA\tWNGAAA\tAAAAxx\n6031\t4417\t1\t3\t1\t11\t31\t31\t31\t1031\t6031\t62\t63\tZXAAAA\tXNGAAA\tHHHHxx\n6484\t4418\t0\t0\t4\t4\t84\t484\t484\t1484\t6484\t168\t169\tKPAAAA\tYNGAAA\tOOOOxx\n496\t4419\t0\t0\t6\t16\t96\t496\t496\t496\t496\t192\t193\tCTAAAA\tZNGAAA\tVVVVxx\n4563\t4420\t1\t3\t3\t3\t63\t563\t563\t4563\t4563\t126\t127\tNTAAAA\tAOGAAA\tAAAAxx\n1037\t4421\t1\t1\t7\t17\t37\t37\t1037\t1037\t1037\t74\t75\tXNAAAA\tBOGAAA\tHHHHxx\n9672\t4422\t0\t0\t2\t12\t72\t672\t1672\t4672\t9672\t144\t145\tAIAAAA\tCOGAAA\tOOOOxx\n9053\t4423\t1\t1\t3\t13\t53\t53\t1053\t4053\t9053\t106\t107\tFKAAAA\tDOGAAA\tVVVVxx\n2523\t4424\t1\t3\t3\t3\t23\t523\t523\t2523\t2523\t46\t47\tBTAAAA\tEOGAAA\tAAAAxx\n8519\t4425\t1\t3\t9\t19\t19\t519\t519\t3519\t8519\t38\t39\tRPAAAA\tFOGAAA\tHHHHxx\n8190\t4426\t0\t2\t0\t10\t90\t190\t190\t3190\t8190\t180\t181\tADAAAA\tGOGAAA\tOOOOxx\n2068\t4427\t0\t0\t8\t8\t68\t68\t68\t2068\t2068\t136\t137\tOBAAAA\tHOGAAA\tVVVVxx\n8569\t4428\t1\t1\t9\t9\t69\t569\t569\t3569\t8569\t138\t139\tPRAAAA\tIOGAAA\tAAAAxx\n6535\t4429\t1\t3\t5\t15\t35\t535\t535\t1535\t6535\t70\t71\tJRAAAA\tJOGAAA\tHHHHxx\n1810\t4430\t0\t2\t0\t10\t10\t810\t1810\t1810\t1810\t20\t21\tQRAAAA\tKOGAAA\tOOOOxx\n3099\t4431\t1\t3\t9\t19\t99\t99\t1099\t3099\t3099\t198\t199\tFPAAAA\tLOGAAA\tVVVVxx\n7466\t4432\t0\t2\t6\t6\t66\t466\t1466\t2466\t7466\t132\t133\tEBAAAA\tMOGAAA\tAAAAxx\n4017\t4433\t1\t1\t7\t17\t17\t17\t17\t4017\t4017\t34\t35\tNYAAAA\tNOGAAA\tHHHHxx\n1097\t4434\t1\t1\t7\t17\t97\t97\t1097\t1097\t1097\t194\t195\tFQAAAA\tOOGAAA\tOOOOxx\n7686\t4435\t0\t2\t6\t6\t86\t686\t1686\t2686\t7686\t172\t173\tQJAAAA\tPOGAAA\tVVVVxx\n6742\t4436\t0\t2\t2\t2\t42\t742\t742\t1742\t6742\t84\t85\tIZAAAA\tQOGAAA\tAAAAxx\n5966\t4437\t0\t2\t6\t6\t66\t966\t1966\t966\t5966\t132\t133\tMVAAAA\tROGAAA\tHHHHxx\n3632\t4438\t0\t0\t2\t12\t32\t632\t1632\t3632\t3632\t64\t65\tSJAAAA\tSOGAAA\tOOOOxx\n8837\t4439\t1\t1\t7\t17\t37\t837\t837\t3837\t8837\t74\t75\tXBAAAA\tTOGAAA\tVVVVxx\n1667\t4440\t1\t3\t7\t7\t67\t667\t1667\t1667\t1667\t134\t135\tDMAAAA\tUOGAAA\tAAAAxx\n8833\t4441\t1\t1\t3\t13\t33\t833\t833\t3833\t8833\t66\t67\tTBAAAA\tVOGAAA\tHHHHxx\n9805\t4442\t1\t1\t5\t5\t5\t805\t1805\t4805\t9805\t10\t11\tDNAAAA\tWOGAAA\tOOOOxx\n3650\t4443\t0\t2\t0\t10\t50\t650\t1650\t3650\t3650\t100\t101\tKKAAAA\tXOGAAA\tVVVVxx\n2237\t4444\t1\t1\t7\t17\t37\t237\t237\t2237\t2237\t74\t75\tBIAAAA\tYOGAAA\tAAAAxx\n9980\t4445\t0\t0\t0\t0\t80\t980\t1980\t4980\t9980\t160\t161\tWTAAAA\tZOGAAA\tHHHHxx\n2861\t4446\t1\t1\t1\t1\t61\t861\t861\t2861\t2861\t122\t123\tBGAAAA\tAPGAAA\tOOOOxx\n1334\t4447\t0\t2\t4\t14\t34\t334\t1334\t1334\t1334\t68\t69\tIZAAAA\tBPGAAA\tVVVVxx\n842\t4448\t0\t2\t2\t2\t42\t842\t842\t842\t842\t84\t85\tKGAAAA\tCPGAAA\tAAAAxx\n1116\t4449\t0\t0\t6\t16\t16\t116\t1116\t1116\t1116\t32\t33\tYQAAAA\tDPGAAA\tHHHHxx\n4055\t4450\t1\t3\t5\t15\t55\t55\t55\t4055\t4055\t110\t111\tZZAAAA\tEPGAAA\tOOOOxx\n3842\t4451\t0\t2\t2\t2\t42\t842\t1842\t3842\t3842\t84\t85\tURAAAA\tFPGAAA\tVVVVxx\n1886\t4452\t0\t2\t6\t6\t86\t886\t1886\t1886\t1886\t172\t173\tOUAAAA\tGPGAAA\tAAAAxx\n8589\t4453\t1\t1\t9\t9\t89\t589\t589\t3589\t8589\t178\t179\tJSAAAA\tHPGAAA\tHHHHxx\n5873\t4454\t1\t1\t3\t13\t73\t873\t1873\t873\t5873\t146\t147\tXRAAAA\tIPGAAA\tOOOOxx\n7711\t4455\t1\t3\t1\t11\t11\t711\t1711\t2711\t7711\t22\t23\tPKAAAA\tJPGAAA\tVVVVxx\n911\t4456\t1\t3\t1\t11\t11\t911\t911\t911\t911\t22\t23\tBJAAAA\tKPGAAA\tAAAAxx\n5837\t4457\t1\t1\t7\t17\t37\t837\t1837\t837\t5837\t74\t75\tNQAAAA\tLPGAAA\tHHHHxx\n897\t4458\t1\t1\t7\t17\t97\t897\t897\t897\t897\t194\t195\tNIAAAA\tMPGAAA\tOOOOxx\n4299\t4459\t1\t3\t9\t19\t99\t299\t299\t4299\t4299\t198\t199\tJJAAAA\tNPGAAA\tVVVVxx\n7774\t4460\t0\t2\t4\t14\t74\t774\t1774\t2774\t7774\t148\t149\tANAAAA\tOPGAAA\tAAAAxx\n7832\t4461\t0\t0\t2\t12\t32\t832\t1832\t2832\t7832\t64\t65\tGPAAAA\tPPGAAA\tHHHHxx\n9915\t4462\t1\t3\t5\t15\t15\t915\t1915\t4915\t9915\t30\t31\tJRAAAA\tQPGAAA\tOOOOxx\n9\t4463\t1\t1\t9\t9\t9\t9\t9\t9\t9\t18\t19\tJAAAAA\tRPGAAA\tVVVVxx\n9675\t4464\t1\t3\t5\t15\t75\t675\t1675\t4675\t9675\t150\t151\tDIAAAA\tSPGAAA\tAAAAxx\n7953\t4465\t1\t1\t3\t13\t53\t953\t1953\t2953\t7953\t106\t107\tXTAAAA\tTPGAAA\tHHHHxx\n8912\t4466\t0\t0\t2\t12\t12\t912\t912\t3912\t8912\t24\t25\tUEAAAA\tUPGAAA\tOOOOxx\n4188\t4467\t0\t0\t8\t8\t88\t188\t188\t4188\t4188\t176\t177\tCFAAAA\tVPGAAA\tVVVVxx\n8446\t4468\t0\t2\t6\t6\t46\t446\t446\t3446\t8446\t92\t93\tWMAAAA\tWPGAAA\tAAAAxx\n1600\t4469\t0\t0\t0\t0\t0\t600\t1600\t1600\t1600\t0\t1\tOJAAAA\tXPGAAA\tHHHHxx\n43\t4470\t1\t3\t3\t3\t43\t43\t43\t43\t43\t86\t87\tRBAAAA\tYPGAAA\tOOOOxx\n544\t4471\t0\t0\t4\t4\t44\t544\t544\t544\t544\t88\t89\tYUAAAA\tZPGAAA\tVVVVxx\n6977\t4472\t1\t1\t7\t17\t77\t977\t977\t1977\t6977\t154\t155\tJIAAAA\tAQGAAA\tAAAAxx\n3191\t4473\t1\t3\t1\t11\t91\t191\t1191\t3191\t3191\t182\t183\tTSAAAA\tBQGAAA\tHHHHxx\n418\t4474\t0\t2\t8\t18\t18\t418\t418\t418\t418\t36\t37\tCQAAAA\tCQGAAA\tOOOOxx\n3142\t4475\t0\t2\t2\t2\t42\t142\t1142\t3142\t3142\t84\t85\tWQAAAA\tDQGAAA\tVVVVxx\n5042\t4476\t0\t2\t2\t2\t42\t42\t1042\t42\t5042\t84\t85\tYLAAAA\tEQGAAA\tAAAAxx\n2194\t4477\t0\t2\t4\t14\t94\t194\t194\t2194\t2194\t188\t189\tKGAAAA\tFQGAAA\tHHHHxx\n2397\t4478\t1\t1\t7\t17\t97\t397\t397\t2397\t2397\t194\t195\tFOAAAA\tGQGAAA\tOOOOxx\n4684\t4479\t0\t0\t4\t4\t84\t684\t684\t4684\t4684\t168\t169\tEYAAAA\tHQGAAA\tVVVVxx\n34\t4480\t0\t2\t4\t14\t34\t34\t34\t34\t34\t68\t69\tIBAAAA\tIQGAAA\tAAAAxx\n3844\t4481\t0\t0\t4\t4\t44\t844\t1844\t3844\t3844\t88\t89\tWRAAAA\tJQGAAA\tHHHHxx\n7824\t4482\t0\t0\t4\t4\t24\t824\t1824\t2824\t7824\t48\t49\tYOAAAA\tKQGAAA\tOOOOxx\n6177\t4483\t1\t1\t7\t17\t77\t177\t177\t1177\t6177\t154\t155\tPDAAAA\tLQGAAA\tVVVVxx\n9657\t4484\t1\t1\t7\t17\t57\t657\t1657\t4657\t9657\t114\t115\tLHAAAA\tMQGAAA\tAAAAxx\n4546\t4485\t0\t2\t6\t6\t46\t546\t546\t4546\t4546\t92\t93\tWSAAAA\tNQGAAA\tHHHHxx\n599\t4486\t1\t3\t9\t19\t99\t599\t599\t599\t599\t198\t199\tBXAAAA\tOQGAAA\tOOOOxx\n153\t4487\t1\t1\t3\t13\t53\t153\t153\t153\t153\t106\t107\tXFAAAA\tPQGAAA\tVVVVxx\n6910\t4488\t0\t2\t0\t10\t10\t910\t910\t1910\t6910\t20\t21\tUFAAAA\tQQGAAA\tAAAAxx\n4408\t4489\t0\t0\t8\t8\t8\t408\t408\t4408\t4408\t16\t17\tONAAAA\tRQGAAA\tHHHHxx\n1164\t4490\t0\t0\t4\t4\t64\t164\t1164\t1164\t1164\t128\t129\tUSAAAA\tSQGAAA\tOOOOxx\n6469\t4491\t1\t1\t9\t9\t69\t469\t469\t1469\t6469\t138\t139\tVOAAAA\tTQGAAA\tVVVVxx\n5996\t4492\t0\t0\t6\t16\t96\t996\t1996\t996\t5996\t192\t193\tQWAAAA\tUQGAAA\tAAAAxx\n2639\t4493\t1\t3\t9\t19\t39\t639\t639\t2639\t2639\t78\t79\tNXAAAA\tVQGAAA\tHHHHxx\n2678\t4494\t0\t2\t8\t18\t78\t678\t678\t2678\t2678\t156\t157\tAZAAAA\tWQGAAA\tOOOOxx\n8392\t4495\t0\t0\t2\t12\t92\t392\t392\t3392\t8392\t184\t185\tUKAAAA\tXQGAAA\tVVVVxx\n1386\t4496\t0\t2\t6\t6\t86\t386\t1386\t1386\t1386\t172\t173\tIBAAAA\tYQGAAA\tAAAAxx\n5125\t4497\t1\t1\t5\t5\t25\t125\t1125\t125\t5125\t50\t51\tDPAAAA\tZQGAAA\tHHHHxx\n8453\t4498\t1\t1\t3\t13\t53\t453\t453\t3453\t8453\t106\t107\tDNAAAA\tARGAAA\tOOOOxx\n2369\t4499\t1\t1\t9\t9\t69\t369\t369\t2369\t2369\t138\t139\tDNAAAA\tBRGAAA\tVVVVxx\n1608\t4500\t0\t0\t8\t8\t8\t608\t1608\t1608\t1608\t16\t17\tWJAAAA\tCRGAAA\tAAAAxx\n3781\t4501\t1\t1\t1\t1\t81\t781\t1781\t3781\t3781\t162\t163\tLPAAAA\tDRGAAA\tHHHHxx\n903\t4502\t1\t3\t3\t3\t3\t903\t903\t903\t903\t6\t7\tTIAAAA\tERGAAA\tOOOOxx\n2099\t4503\t1\t3\t9\t19\t99\t99\t99\t2099\t2099\t198\t199\tTCAAAA\tFRGAAA\tVVVVxx\n538\t4504\t0\t2\t8\t18\t38\t538\t538\t538\t538\t76\t77\tSUAAAA\tGRGAAA\tAAAAxx\n9177\t4505\t1\t1\t7\t17\t77\t177\t1177\t4177\t9177\t154\t155\tZOAAAA\tHRGAAA\tHHHHxx\n420\t4506\t0\t0\t0\t0\t20\t420\t420\t420\t420\t40\t41\tEQAAAA\tIRGAAA\tOOOOxx\n9080\t4507\t0\t0\t0\t0\t80\t80\t1080\t4080\t9080\t160\t161\tGLAAAA\tJRGAAA\tVVVVxx\n2630\t4508\t0\t2\t0\t10\t30\t630\t630\t2630\t2630\t60\t61\tEXAAAA\tKRGAAA\tAAAAxx\n5978\t4509\t0\t2\t8\t18\t78\t978\t1978\t978\t5978\t156\t157\tYVAAAA\tLRGAAA\tHHHHxx\n9239\t4510\t1\t3\t9\t19\t39\t239\t1239\t4239\t9239\t78\t79\tJRAAAA\tMRGAAA\tOOOOxx\n4372\t4511\t0\t0\t2\t12\t72\t372\t372\t4372\t4372\t144\t145\tEMAAAA\tNRGAAA\tVVVVxx\n4357\t4512\t1\t1\t7\t17\t57\t357\t357\t4357\t4357\t114\t115\tPLAAAA\tORGAAA\tAAAAxx\n9857\t4513\t1\t1\t7\t17\t57\t857\t1857\t4857\t9857\t114\t115\tDPAAAA\tPRGAAA\tHHHHxx\n7933\t4514\t1\t1\t3\t13\t33\t933\t1933\t2933\t7933\t66\t67\tDTAAAA\tQRGAAA\tOOOOxx\n9574\t4515\t0\t2\t4\t14\t74\t574\t1574\t4574\t9574\t148\t149\tGEAAAA\tRRGAAA\tVVVVxx\n8294\t4516\t0\t2\t4\t14\t94\t294\t294\t3294\t8294\t188\t189\tAHAAAA\tSRGAAA\tAAAAxx\n627\t4517\t1\t3\t7\t7\t27\t627\t627\t627\t627\t54\t55\tDYAAAA\tTRGAAA\tHHHHxx\n3229\t4518\t1\t1\t9\t9\t29\t229\t1229\t3229\t3229\t58\t59\tFUAAAA\tURGAAA\tOOOOxx\n3163\t4519\t1\t3\t3\t3\t63\t163\t1163\t3163\t3163\t126\t127\tRRAAAA\tVRGAAA\tVVVVxx\n7349\t4520\t1\t1\t9\t9\t49\t349\t1349\t2349\t7349\t98\t99\tRWAAAA\tWRGAAA\tAAAAxx\n6889\t4521\t1\t1\t9\t9\t89\t889\t889\t1889\t6889\t178\t179\tZEAAAA\tXRGAAA\tHHHHxx\n2101\t4522\t1\t1\t1\t1\t1\t101\t101\t2101\t2101\t2\t3\tVCAAAA\tYRGAAA\tOOOOxx\n6476\t4523\t0\t0\t6\t16\t76\t476\t476\t1476\t6476\t152\t153\tCPAAAA\tZRGAAA\tVVVVxx\n6765\t4524\t1\t1\t5\t5\t65\t765\t765\t1765\t6765\t130\t131\tFAAAAA\tASGAAA\tAAAAxx\n4204\t4525\t0\t0\t4\t4\t4\t204\t204\t4204\t4204\t8\t9\tSFAAAA\tBSGAAA\tHHHHxx\n5915\t4526\t1\t3\t5\t15\t15\t915\t1915\t915\t5915\t30\t31\tNTAAAA\tCSGAAA\tOOOOxx\n2318\t4527\t0\t2\t8\t18\t18\t318\t318\t2318\t2318\t36\t37\tELAAAA\tDSGAAA\tVVVVxx\n294\t4528\t0\t2\t4\t14\t94\t294\t294\t294\t294\t188\t189\tILAAAA\tESGAAA\tAAAAxx\n5245\t4529\t1\t1\t5\t5\t45\t245\t1245\t245\t5245\t90\t91\tTTAAAA\tFSGAAA\tHHHHxx\n4481\t4530\t1\t1\t1\t1\t81\t481\t481\t4481\t4481\t162\t163\tJQAAAA\tGSGAAA\tOOOOxx\n7754\t4531\t0\t2\t4\t14\t54\t754\t1754\t2754\t7754\t108\t109\tGMAAAA\tHSGAAA\tVVVVxx\n8494\t4532\t0\t2\t4\t14\t94\t494\t494\t3494\t8494\t188\t189\tSOAAAA\tISGAAA\tAAAAxx\n4014\t4533\t0\t2\t4\t14\t14\t14\t14\t4014\t4014\t28\t29\tKYAAAA\tJSGAAA\tHHHHxx\n2197\t4534\t1\t1\t7\t17\t97\t197\t197\t2197\t2197\t194\t195\tNGAAAA\tKSGAAA\tOOOOxx\n1297\t4535\t1\t1\t7\t17\t97\t297\t1297\t1297\t1297\t194\t195\tXXAAAA\tLSGAAA\tVVVVxx\n1066\t4536\t0\t2\t6\t6\t66\t66\t1066\t1066\t1066\t132\t133\tAPAAAA\tMSGAAA\tAAAAxx\n5710\t4537\t0\t2\t0\t10\t10\t710\t1710\t710\t5710\t20\t21\tQLAAAA\tNSGAAA\tHHHHxx\n4100\t4538\t0\t0\t0\t0\t0\t100\t100\t4100\t4100\t0\t1\tSBAAAA\tOSGAAA\tOOOOxx\n7356\t4539\t0\t0\t6\t16\t56\t356\t1356\t2356\t7356\t112\t113\tYWAAAA\tPSGAAA\tVVVVxx\n7658\t4540\t0\t2\t8\t18\t58\t658\t1658\t2658\t7658\t116\t117\tOIAAAA\tQSGAAA\tAAAAxx\n3666\t4541\t0\t2\t6\t6\t66\t666\t1666\t3666\t3666\t132\t133\tALAAAA\tRSGAAA\tHHHHxx\n9713\t4542\t1\t1\t3\t13\t13\t713\t1713\t4713\t9713\t26\t27\tPJAAAA\tSSGAAA\tOOOOxx\n691\t4543\t1\t3\t1\t11\t91\t691\t691\t691\t691\t182\t183\tPAAAAA\tTSGAAA\tVVVVxx\n3112\t4544\t0\t0\t2\t12\t12\t112\t1112\t3112\t3112\t24\t25\tSPAAAA\tUSGAAA\tAAAAxx\n6035\t4545\t1\t3\t5\t15\t35\t35\t35\t1035\t6035\t70\t71\tDYAAAA\tVSGAAA\tHHHHxx\n8353\t4546\t1\t1\t3\t13\t53\t353\t353\t3353\t8353\t106\t107\tHJAAAA\tWSGAAA\tOOOOxx\n5679\t4547\t1\t3\t9\t19\t79\t679\t1679\t679\t5679\t158\t159\tLKAAAA\tXSGAAA\tVVVVxx\n2124\t4548\t0\t0\t4\t4\t24\t124\t124\t2124\t2124\t48\t49\tSDAAAA\tYSGAAA\tAAAAxx\n4714\t4549\t0\t2\t4\t14\t14\t714\t714\t4714\t4714\t28\t29\tIZAAAA\tZSGAAA\tHHHHxx\n9048\t4550\t0\t0\t8\t8\t48\t48\t1048\t4048\t9048\t96\t97\tAKAAAA\tATGAAA\tOOOOxx\n7692\t4551\t0\t0\t2\t12\t92\t692\t1692\t2692\t7692\t184\t185\tWJAAAA\tBTGAAA\tVVVVxx\n4542\t4552\t0\t2\t2\t2\t42\t542\t542\t4542\t4542\t84\t85\tSSAAAA\tCTGAAA\tAAAAxx\n8737\t4553\t1\t1\t7\t17\t37\t737\t737\t3737\t8737\t74\t75\tBYAAAA\tDTGAAA\tHHHHxx\n4977\t4554\t1\t1\t7\t17\t77\t977\t977\t4977\t4977\t154\t155\tLJAAAA\tETGAAA\tOOOOxx\n9349\t4555\t1\t1\t9\t9\t49\t349\t1349\t4349\t9349\t98\t99\tPVAAAA\tFTGAAA\tVVVVxx\n731\t4556\t1\t3\t1\t11\t31\t731\t731\t731\t731\t62\t63\tDCAAAA\tGTGAAA\tAAAAxx\n1788\t4557\t0\t0\t8\t8\t88\t788\t1788\t1788\t1788\t176\t177\tUQAAAA\tHTGAAA\tHHHHxx\n7830\t4558\t0\t2\t0\t10\t30\t830\t1830\t2830\t7830\t60\t61\tEPAAAA\tITGAAA\tOOOOxx\n3977\t4559\t1\t1\t7\t17\t77\t977\t1977\t3977\t3977\t154\t155\tZWAAAA\tJTGAAA\tVVVVxx\n2421\t4560\t1\t1\t1\t1\t21\t421\t421\t2421\t2421\t42\t43\tDPAAAA\tKTGAAA\tAAAAxx\n5891\t4561\t1\t3\t1\t11\t91\t891\t1891\t891\t5891\t182\t183\tPSAAAA\tLTGAAA\tHHHHxx\n1111\t4562\t1\t3\t1\t11\t11\t111\t1111\t1111\t1111\t22\t23\tTQAAAA\tMTGAAA\tOOOOxx\n9224\t4563\t0\t0\t4\t4\t24\t224\t1224\t4224\t9224\t48\t49\tUQAAAA\tNTGAAA\tVVVVxx\n9872\t4564\t0\t0\t2\t12\t72\t872\t1872\t4872\t9872\t144\t145\tSPAAAA\tOTGAAA\tAAAAxx\n2433\t4565\t1\t1\t3\t13\t33\t433\t433\t2433\t2433\t66\t67\tPPAAAA\tPTGAAA\tHHHHxx\n1491\t4566\t1\t3\t1\t11\t91\t491\t1491\t1491\t1491\t182\t183\tJFAAAA\tQTGAAA\tOOOOxx\n6653\t4567\t1\t1\t3\t13\t53\t653\t653\t1653\t6653\t106\t107\tXVAAAA\tRTGAAA\tVVVVxx\n1907\t4568\t1\t3\t7\t7\t7\t907\t1907\t1907\t1907\t14\t15\tJVAAAA\tSTGAAA\tAAAAxx\n889\t4569\t1\t1\t9\t9\t89\t889\t889\t889\t889\t178\t179\tFIAAAA\tTTGAAA\tHHHHxx\n561\t4570\t1\t1\t1\t1\t61\t561\t561\t561\t561\t122\t123\tPVAAAA\tUTGAAA\tOOOOxx\n7415\t4571\t1\t3\t5\t15\t15\t415\t1415\t2415\t7415\t30\t31\tFZAAAA\tVTGAAA\tVVVVxx\n2703\t4572\t1\t3\t3\t3\t3\t703\t703\t2703\t2703\t6\t7\tZZAAAA\tWTGAAA\tAAAAxx\n2561\t4573\t1\t1\t1\t1\t61\t561\t561\t2561\t2561\t122\t123\tNUAAAA\tXTGAAA\tHHHHxx\n1257\t4574\t1\t1\t7\t17\t57\t257\t1257\t1257\t1257\t114\t115\tJWAAAA\tYTGAAA\tOOOOxx\n2390\t4575\t0\t2\t0\t10\t90\t390\t390\t2390\t2390\t180\t181\tYNAAAA\tZTGAAA\tVVVVxx\n3915\t4576\t1\t3\t5\t15\t15\t915\t1915\t3915\t3915\t30\t31\tPUAAAA\tAUGAAA\tAAAAxx\n8476\t4577\t0\t0\t6\t16\t76\t476\t476\t3476\t8476\t152\t153\tAOAAAA\tBUGAAA\tHHHHxx\n607\t4578\t1\t3\t7\t7\t7\t607\t607\t607\t607\t14\t15\tJXAAAA\tCUGAAA\tOOOOxx\n3891\t4579\t1\t3\t1\t11\t91\t891\t1891\t3891\t3891\t182\t183\tRTAAAA\tDUGAAA\tVVVVxx\n7269\t4580\t1\t1\t9\t9\t69\t269\t1269\t2269\t7269\t138\t139\tPTAAAA\tEUGAAA\tAAAAxx\n9537\t4581\t1\t1\t7\t17\t37\t537\t1537\t4537\t9537\t74\t75\tVCAAAA\tFUGAAA\tHHHHxx\n8518\t4582\t0\t2\t8\t18\t18\t518\t518\t3518\t8518\t36\t37\tQPAAAA\tGUGAAA\tOOOOxx\n5221\t4583\t1\t1\t1\t1\t21\t221\t1221\t221\t5221\t42\t43\tVSAAAA\tHUGAAA\tVVVVxx\n3274\t4584\t0\t2\t4\t14\t74\t274\t1274\t3274\t3274\t148\t149\tYVAAAA\tIUGAAA\tAAAAxx\n6677\t4585\t1\t1\t7\t17\t77\t677\t677\t1677\t6677\t154\t155\tVWAAAA\tJUGAAA\tHHHHxx\n3114\t4586\t0\t2\t4\t14\t14\t114\t1114\t3114\t3114\t28\t29\tUPAAAA\tKUGAAA\tOOOOxx\n1966\t4587\t0\t2\t6\t6\t66\t966\t1966\t1966\t1966\t132\t133\tQXAAAA\tLUGAAA\tVVVVxx\n5941\t4588\t1\t1\t1\t1\t41\t941\t1941\t941\t5941\t82\t83\tNUAAAA\tMUGAAA\tAAAAxx\n9463\t4589\t1\t3\t3\t3\t63\t463\t1463\t4463\t9463\t126\t127\tZZAAAA\tNUGAAA\tHHHHxx\n8966\t4590\t0\t2\t6\t6\t66\t966\t966\t3966\t8966\t132\t133\tWGAAAA\tOUGAAA\tOOOOxx\n4402\t4591\t0\t2\t2\t2\t2\t402\t402\t4402\t4402\t4\t5\tINAAAA\tPUGAAA\tVVVVxx\n3364\t4592\t0\t0\t4\t4\t64\t364\t1364\t3364\t3364\t128\t129\tKZAAAA\tQUGAAA\tAAAAxx\n3698\t4593\t0\t2\t8\t18\t98\t698\t1698\t3698\t3698\t196\t197\tGMAAAA\tRUGAAA\tHHHHxx\n4651\t4594\t1\t3\t1\t11\t51\t651\t651\t4651\t4651\t102\t103\tXWAAAA\tSUGAAA\tOOOOxx\n2127\t4595\t1\t3\t7\t7\t27\t127\t127\t2127\t2127\t54\t55\tVDAAAA\tTUGAAA\tVVVVxx\n3614\t4596\t0\t2\t4\t14\t14\t614\t1614\t3614\t3614\t28\t29\tAJAAAA\tUUGAAA\tAAAAxx\n5430\t4597\t0\t2\t0\t10\t30\t430\t1430\t430\t5430\t60\t61\tWAAAAA\tVUGAAA\tHHHHxx\n3361\t4598\t1\t1\t1\t1\t61\t361\t1361\t3361\t3361\t122\t123\tHZAAAA\tWUGAAA\tOOOOxx\n4798\t4599\t0\t2\t8\t18\t98\t798\t798\t4798\t4798\t196\t197\tOCAAAA\tXUGAAA\tVVVVxx\n8269\t4600\t1\t1\t9\t9\t69\t269\t269\t3269\t8269\t138\t139\tBGAAAA\tYUGAAA\tAAAAxx\n6458\t4601\t0\t2\t8\t18\t58\t458\t458\t1458\t6458\t116\t117\tKOAAAA\tZUGAAA\tHHHHxx\n3358\t4602\t0\t2\t8\t18\t58\t358\t1358\t3358\t3358\t116\t117\tEZAAAA\tAVGAAA\tOOOOxx\n5898\t4603\t0\t2\t8\t18\t98\t898\t1898\t898\t5898\t196\t197\tWSAAAA\tBVGAAA\tVVVVxx\n1880\t4604\t0\t0\t0\t0\t80\t880\t1880\t1880\t1880\t160\t161\tIUAAAA\tCVGAAA\tAAAAxx\n782\t4605\t0\t2\t2\t2\t82\t782\t782\t782\t782\t164\t165\tCEAAAA\tDVGAAA\tHHHHxx\n3102\t4606\t0\t2\t2\t2\t2\t102\t1102\t3102\t3102\t4\t5\tIPAAAA\tEVGAAA\tOOOOxx\n6366\t4607\t0\t2\t6\t6\t66\t366\t366\t1366\t6366\t132\t133\tWKAAAA\tFVGAAA\tVVVVxx\n399\t4608\t1\t3\t9\t19\t99\t399\t399\t399\t399\t198\t199\tJPAAAA\tGVGAAA\tAAAAxx\n6773\t4609\t1\t1\t3\t13\t73\t773\t773\t1773\t6773\t146\t147\tNAAAAA\tHVGAAA\tHHHHxx\n7942\t4610\t0\t2\t2\t2\t42\t942\t1942\t2942\t7942\t84\t85\tMTAAAA\tIVGAAA\tOOOOxx\n6274\t4611\t0\t2\t4\t14\t74\t274\t274\t1274\t6274\t148\t149\tIHAAAA\tJVGAAA\tVVVVxx\n7447\t4612\t1\t3\t7\t7\t47\t447\t1447\t2447\t7447\t94\t95\tLAAAAA\tKVGAAA\tAAAAxx\n7648\t4613\t0\t0\t8\t8\t48\t648\t1648\t2648\t7648\t96\t97\tEIAAAA\tLVGAAA\tHHHHxx\n3997\t4614\t1\t1\t7\t17\t97\t997\t1997\t3997\t3997\t194\t195\tTXAAAA\tMVGAAA\tOOOOxx\n1759\t4615\t1\t3\t9\t19\t59\t759\t1759\t1759\t1759\t118\t119\tRPAAAA\tNVGAAA\tVVVVxx\n1785\t4616\t1\t1\t5\t5\t85\t785\t1785\t1785\t1785\t170\t171\tRQAAAA\tOVGAAA\tAAAAxx\n8930\t4617\t0\t2\t0\t10\t30\t930\t930\t3930\t8930\t60\t61\tMFAAAA\tPVGAAA\tHHHHxx\n7595\t4618\t1\t3\t5\t15\t95\t595\t1595\t2595\t7595\t190\t191\tDGAAAA\tQVGAAA\tOOOOxx\n6752\t4619\t0\t0\t2\t12\t52\t752\t752\t1752\t6752\t104\t105\tSZAAAA\tRVGAAA\tVVVVxx\n5635\t4620\t1\t3\t5\t15\t35\t635\t1635\t635\t5635\t70\t71\tTIAAAA\tSVGAAA\tAAAAxx\n1579\t4621\t1\t3\t9\t19\t79\t579\t1579\t1579\t1579\t158\t159\tTIAAAA\tTVGAAA\tHHHHxx\n7743\t4622\t1\t3\t3\t3\t43\t743\t1743\t2743\t7743\t86\t87\tVLAAAA\tUVGAAA\tOOOOxx\n5856\t4623\t0\t0\t6\t16\t56\t856\t1856\t856\t5856\t112\t113\tGRAAAA\tVVGAAA\tVVVVxx\n7273\t4624\t1\t1\t3\t13\t73\t273\t1273\t2273\t7273\t146\t147\tTTAAAA\tWVGAAA\tAAAAxx\n1399\t4625\t1\t3\t9\t19\t99\t399\t1399\t1399\t1399\t198\t199\tVBAAAA\tXVGAAA\tHHHHxx\n3694\t4626\t0\t2\t4\t14\t94\t694\t1694\t3694\t3694\t188\t189\tCMAAAA\tYVGAAA\tOOOOxx\n2782\t4627\t0\t2\t2\t2\t82\t782\t782\t2782\t2782\t164\t165\tADAAAA\tZVGAAA\tVVVVxx\n6951\t4628\t1\t3\t1\t11\t51\t951\t951\t1951\t6951\t102\t103\tJHAAAA\tAWGAAA\tAAAAxx\n6053\t4629\t1\t1\t3\t13\t53\t53\t53\t1053\t6053\t106\t107\tVYAAAA\tBWGAAA\tHHHHxx\n1753\t4630\t1\t1\t3\t13\t53\t753\t1753\t1753\t1753\t106\t107\tLPAAAA\tCWGAAA\tOOOOxx\n3985\t4631\t1\t1\t5\t5\t85\t985\t1985\t3985\t3985\t170\t171\tHXAAAA\tDWGAAA\tVVVVxx\n6159\t4632\t1\t3\t9\t19\t59\t159\t159\t1159\t6159\t118\t119\tXCAAAA\tEWGAAA\tAAAAxx\n6250\t4633\t0\t2\t0\t10\t50\t250\t250\t1250\t6250\t100\t101\tKGAAAA\tFWGAAA\tHHHHxx\n6240\t4634\t0\t0\t0\t0\t40\t240\t240\t1240\t6240\t80\t81\tAGAAAA\tGWGAAA\tOOOOxx\n6571\t4635\t1\t3\t1\t11\t71\t571\t571\t1571\t6571\t142\t143\tTSAAAA\tHWGAAA\tVVVVxx\n8624\t4636\t0\t0\t4\t4\t24\t624\t624\t3624\t8624\t48\t49\tSTAAAA\tIWGAAA\tAAAAxx\n9718\t4637\t0\t2\t8\t18\t18\t718\t1718\t4718\t9718\t36\t37\tUJAAAA\tJWGAAA\tHHHHxx\n5529\t4638\t1\t1\t9\t9\t29\t529\t1529\t529\t5529\t58\t59\tREAAAA\tKWGAAA\tOOOOxx\n7089\t4639\t1\t1\t9\t9\t89\t89\t1089\t2089\t7089\t178\t179\tRMAAAA\tLWGAAA\tVVVVxx\n5488\t4640\t0\t0\t8\t8\t88\t488\t1488\t488\t5488\t176\t177\tCDAAAA\tMWGAAA\tAAAAxx\n5444\t4641\t0\t0\t4\t4\t44\t444\t1444\t444\t5444\t88\t89\tKBAAAA\tNWGAAA\tHHHHxx\n4899\t4642\t1\t3\t9\t19\t99\t899\t899\t4899\t4899\t198\t199\tLGAAAA\tOWGAAA\tOOOOxx\n7928\t4643\t0\t0\t8\t8\t28\t928\t1928\t2928\t7928\t56\t57\tYSAAAA\tPWGAAA\tVVVVxx\n4736\t4644\t0\t0\t6\t16\t36\t736\t736\t4736\t4736\t72\t73\tEAAAAA\tQWGAAA\tAAAAxx\n4317\t4645\t1\t1\t7\t17\t17\t317\t317\t4317\t4317\t34\t35\tBKAAAA\tRWGAAA\tHHHHxx\n1174\t4646\t0\t2\t4\t14\t74\t174\t1174\t1174\t1174\t148\t149\tETAAAA\tSWGAAA\tOOOOxx\n6138\t4647\t0\t2\t8\t18\t38\t138\t138\t1138\t6138\t76\t77\tCCAAAA\tTWGAAA\tVVVVxx\n3943\t4648\t1\t3\t3\t3\t43\t943\t1943\t3943\t3943\t86\t87\tRVAAAA\tUWGAAA\tAAAAxx\n1545\t4649\t1\t1\t5\t5\t45\t545\t1545\t1545\t1545\t90\t91\tLHAAAA\tVWGAAA\tHHHHxx\n6867\t4650\t1\t3\t7\t7\t67\t867\t867\t1867\t6867\t134\t135\tDEAAAA\tWWGAAA\tOOOOxx\n6832\t4651\t0\t0\t2\t12\t32\t832\t832\t1832\t6832\t64\t65\tUCAAAA\tXWGAAA\tVVVVxx\n2987\t4652\t1\t3\t7\t7\t87\t987\t987\t2987\t2987\t174\t175\tXKAAAA\tYWGAAA\tAAAAxx\n5169\t4653\t1\t1\t9\t9\t69\t169\t1169\t169\t5169\t138\t139\tVQAAAA\tZWGAAA\tHHHHxx\n8998\t4654\t0\t2\t8\t18\t98\t998\t998\t3998\t8998\t196\t197\tCIAAAA\tAXGAAA\tOOOOxx\n9347\t4655\t1\t3\t7\t7\t47\t347\t1347\t4347\t9347\t94\t95\tNVAAAA\tBXGAAA\tVVVVxx\n4800\t4656\t0\t0\t0\t0\t0\t800\t800\t4800\t4800\t0\t1\tQCAAAA\tCXGAAA\tAAAAxx\n4200\t4657\t0\t0\t0\t0\t0\t200\t200\t4200\t4200\t0\t1\tOFAAAA\tDXGAAA\tHHHHxx\n4046\t4658\t0\t2\t6\t6\t46\t46\t46\t4046\t4046\t92\t93\tQZAAAA\tEXGAAA\tOOOOxx\n7142\t4659\t0\t2\t2\t2\t42\t142\t1142\t2142\t7142\t84\t85\tSOAAAA\tFXGAAA\tVVVVxx\n2733\t4660\t1\t1\t3\t13\t33\t733\t733\t2733\t2733\t66\t67\tDBAAAA\tGXGAAA\tAAAAxx\n1568\t4661\t0\t0\t8\t8\t68\t568\t1568\t1568\t1568\t136\t137\tIIAAAA\tHXGAAA\tHHHHxx\n5105\t4662\t1\t1\t5\t5\t5\t105\t1105\t105\t5105\t10\t11\tJOAAAA\tIXGAAA\tOOOOxx\n9115\t4663\t1\t3\t5\t15\t15\t115\t1115\t4115\t9115\t30\t31\tPMAAAA\tJXGAAA\tVVVVxx\n6475\t4664\t1\t3\t5\t15\t75\t475\t475\t1475\t6475\t150\t151\tBPAAAA\tKXGAAA\tAAAAxx\n3796\t4665\t0\t0\t6\t16\t96\t796\t1796\t3796\t3796\t192\t193\tAQAAAA\tLXGAAA\tHHHHxx\n5410\t4666\t0\t2\t0\t10\t10\t410\t1410\t410\t5410\t20\t21\tCAAAAA\tMXGAAA\tOOOOxx\n4023\t4667\t1\t3\t3\t3\t23\t23\t23\t4023\t4023\t46\t47\tTYAAAA\tNXGAAA\tVVVVxx\n8904\t4668\t0\t0\t4\t4\t4\t904\t904\t3904\t8904\t8\t9\tMEAAAA\tOXGAAA\tAAAAxx\n450\t4669\t0\t2\t0\t10\t50\t450\t450\t450\t450\t100\t101\tIRAAAA\tPXGAAA\tHHHHxx\n8087\t4670\t1\t3\t7\t7\t87\t87\t87\t3087\t8087\t174\t175\tBZAAAA\tQXGAAA\tOOOOxx\n6478\t4671\t0\t2\t8\t18\t78\t478\t478\t1478\t6478\t156\t157\tEPAAAA\tRXGAAA\tVVVVxx\n2696\t4672\t0\t0\t6\t16\t96\t696\t696\t2696\t2696\t192\t193\tSZAAAA\tSXGAAA\tAAAAxx\n1792\t4673\t0\t0\t2\t12\t92\t792\t1792\t1792\t1792\t184\t185\tYQAAAA\tTXGAAA\tHHHHxx\n9699\t4674\t1\t3\t9\t19\t99\t699\t1699\t4699\t9699\t198\t199\tBJAAAA\tUXGAAA\tOOOOxx\n9160\t4675\t0\t0\t0\t0\t60\t160\t1160\t4160\t9160\t120\t121\tIOAAAA\tVXGAAA\tVVVVxx\n9989\t4676\t1\t1\t9\t9\t89\t989\t1989\t4989\t9989\t178\t179\tFUAAAA\tWXGAAA\tAAAAxx\n9568\t4677\t0\t0\t8\t8\t68\t568\t1568\t4568\t9568\t136\t137\tAEAAAA\tXXGAAA\tHHHHxx\n487\t4678\t1\t3\t7\t7\t87\t487\t487\t487\t487\t174\t175\tTSAAAA\tYXGAAA\tOOOOxx\n7863\t4679\t1\t3\t3\t3\t63\t863\t1863\t2863\t7863\t126\t127\tLQAAAA\tZXGAAA\tVVVVxx\n1884\t4680\t0\t0\t4\t4\t84\t884\t1884\t1884\t1884\t168\t169\tMUAAAA\tAYGAAA\tAAAAxx\n2651\t4681\t1\t3\t1\t11\t51\t651\t651\t2651\t2651\t102\t103\tZXAAAA\tBYGAAA\tHHHHxx\n8285\t4682\t1\t1\t5\t5\t85\t285\t285\t3285\t8285\t170\t171\tRGAAAA\tCYGAAA\tOOOOxx\n3927\t4683\t1\t3\t7\t7\t27\t927\t1927\t3927\t3927\t54\t55\tBVAAAA\tDYGAAA\tVVVVxx\n4076\t4684\t0\t0\t6\t16\t76\t76\t76\t4076\t4076\t152\t153\tUAAAAA\tEYGAAA\tAAAAxx\n6149\t4685\t1\t1\t9\t9\t49\t149\t149\t1149\t6149\t98\t99\tNCAAAA\tFYGAAA\tHHHHxx\n6581\t4686\t1\t1\t1\t1\t81\t581\t581\t1581\t6581\t162\t163\tDTAAAA\tGYGAAA\tOOOOxx\n8293\t4687\t1\t1\t3\t13\t93\t293\t293\t3293\t8293\t186\t187\tZGAAAA\tHYGAAA\tVVVVxx\n7665\t4688\t1\t1\t5\t5\t65\t665\t1665\t2665\t7665\t130\t131\tVIAAAA\tIYGAAA\tAAAAxx\n4435\t4689\t1\t3\t5\t15\t35\t435\t435\t4435\t4435\t70\t71\tPOAAAA\tJYGAAA\tHHHHxx\n1271\t4690\t1\t3\t1\t11\t71\t271\t1271\t1271\t1271\t142\t143\tXWAAAA\tKYGAAA\tOOOOxx\n3928\t4691\t0\t0\t8\t8\t28\t928\t1928\t3928\t3928\t56\t57\tCVAAAA\tLYGAAA\tVVVVxx\n7045\t4692\t1\t1\t5\t5\t45\t45\t1045\t2045\t7045\t90\t91\tZKAAAA\tMYGAAA\tAAAAxx\n4943\t4693\t1\t3\t3\t3\t43\t943\t943\t4943\t4943\t86\t87\tDIAAAA\tNYGAAA\tHHHHxx\n8473\t4694\t1\t1\t3\t13\t73\t473\t473\t3473\t8473\t146\t147\tXNAAAA\tOYGAAA\tOOOOxx\n1707\t4695\t1\t3\t7\t7\t7\t707\t1707\t1707\t1707\t14\t15\tRNAAAA\tPYGAAA\tVVVVxx\n7509\t4696\t1\t1\t9\t9\t9\t509\t1509\t2509\t7509\t18\t19\tVCAAAA\tQYGAAA\tAAAAxx\n1593\t4697\t1\t1\t3\t13\t93\t593\t1593\t1593\t1593\t186\t187\tHJAAAA\tRYGAAA\tHHHHxx\n9281\t4698\t1\t1\t1\t1\t81\t281\t1281\t4281\t9281\t162\t163\tZSAAAA\tSYGAAA\tOOOOxx\n8986\t4699\t0\t2\t6\t6\t86\t986\t986\t3986\t8986\t172\t173\tQHAAAA\tTYGAAA\tVVVVxx\n3740\t4700\t0\t0\t0\t0\t40\t740\t1740\t3740\t3740\t80\t81\tWNAAAA\tUYGAAA\tAAAAxx\n9265\t4701\t1\t1\t5\t5\t65\t265\t1265\t4265\t9265\t130\t131\tJSAAAA\tVYGAAA\tHHHHxx\n1510\t4702\t0\t2\t0\t10\t10\t510\t1510\t1510\t1510\t20\t21\tCGAAAA\tWYGAAA\tOOOOxx\n3022\t4703\t0\t2\t2\t2\t22\t22\t1022\t3022\t3022\t44\t45\tGMAAAA\tXYGAAA\tVVVVxx\n9014\t4704\t0\t2\t4\t14\t14\t14\t1014\t4014\t9014\t28\t29\tSIAAAA\tYYGAAA\tAAAAxx\n6816\t4705\t0\t0\t6\t16\t16\t816\t816\t1816\t6816\t32\t33\tECAAAA\tZYGAAA\tHHHHxx\n5518\t4706\t0\t2\t8\t18\t18\t518\t1518\t518\t5518\t36\t37\tGEAAAA\tAZGAAA\tOOOOxx\n4451\t4707\t1\t3\t1\t11\t51\t451\t451\t4451\t4451\t102\t103\tFPAAAA\tBZGAAA\tVVVVxx\n8747\t4708\t1\t3\t7\t7\t47\t747\t747\t3747\t8747\t94\t95\tLYAAAA\tCZGAAA\tAAAAxx\n4646\t4709\t0\t2\t6\t6\t46\t646\t646\t4646\t4646\t92\t93\tSWAAAA\tDZGAAA\tHHHHxx\n7296\t4710\t0\t0\t6\t16\t96\t296\t1296\t2296\t7296\t192\t193\tQUAAAA\tEZGAAA\tOOOOxx\n9644\t4711\t0\t0\t4\t4\t44\t644\t1644\t4644\t9644\t88\t89\tYGAAAA\tFZGAAA\tVVVVxx\n5977\t4712\t1\t1\t7\t17\t77\t977\t1977\t977\t5977\t154\t155\tXVAAAA\tGZGAAA\tAAAAxx\n6270\t4713\t0\t2\t0\t10\t70\t270\t270\t1270\t6270\t140\t141\tEHAAAA\tHZGAAA\tHHHHxx\n5578\t4714\t0\t2\t8\t18\t78\t578\t1578\t578\t5578\t156\t157\tOGAAAA\tIZGAAA\tOOOOxx\n2465\t4715\t1\t1\t5\t5\t65\t465\t465\t2465\t2465\t130\t131\tVQAAAA\tJZGAAA\tVVVVxx\n6436\t4716\t0\t0\t6\t16\t36\t436\t436\t1436\t6436\t72\t73\tONAAAA\tKZGAAA\tAAAAxx\n8089\t4717\t1\t1\t9\t9\t89\t89\t89\t3089\t8089\t178\t179\tDZAAAA\tLZGAAA\tHHHHxx\n2409\t4718\t1\t1\t9\t9\t9\t409\t409\t2409\t2409\t18\t19\tROAAAA\tMZGAAA\tOOOOxx\n284\t4719\t0\t0\t4\t4\t84\t284\t284\t284\t284\t168\t169\tYKAAAA\tNZGAAA\tVVVVxx\n5576\t4720\t0\t0\t6\t16\t76\t576\t1576\t576\t5576\t152\t153\tMGAAAA\tOZGAAA\tAAAAxx\n6534\t4721\t0\t2\t4\t14\t34\t534\t534\t1534\t6534\t68\t69\tIRAAAA\tPZGAAA\tHHHHxx\n8848\t4722\t0\t0\t8\t8\t48\t848\t848\t3848\t8848\t96\t97\tICAAAA\tQZGAAA\tOOOOxx\n4305\t4723\t1\t1\t5\t5\t5\t305\t305\t4305\t4305\t10\t11\tPJAAAA\tRZGAAA\tVVVVxx\n5574\t4724\t0\t2\t4\t14\t74\t574\t1574\t574\t5574\t148\t149\tKGAAAA\tSZGAAA\tAAAAxx\n596\t4725\t0\t0\t6\t16\t96\t596\t596\t596\t596\t192\t193\tYWAAAA\tTZGAAA\tHHHHxx\n1253\t4726\t1\t1\t3\t13\t53\t253\t1253\t1253\t1253\t106\t107\tFWAAAA\tUZGAAA\tOOOOxx\n521\t4727\t1\t1\t1\t1\t21\t521\t521\t521\t521\t42\t43\tBUAAAA\tVZGAAA\tVVVVxx\n8739\t4728\t1\t3\t9\t19\t39\t739\t739\t3739\t8739\t78\t79\tDYAAAA\tWZGAAA\tAAAAxx\n908\t4729\t0\t0\t8\t8\t8\t908\t908\t908\t908\t16\t17\tYIAAAA\tXZGAAA\tHHHHxx\n6937\t4730\t1\t1\t7\t17\t37\t937\t937\t1937\t6937\t74\t75\tVGAAAA\tYZGAAA\tOOOOxx\n4515\t4731\t1\t3\t5\t15\t15\t515\t515\t4515\t4515\t30\t31\tRRAAAA\tZZGAAA\tVVVVxx\n8630\t4732\t0\t2\t0\t10\t30\t630\t630\t3630\t8630\t60\t61\tYTAAAA\tAAHAAA\tAAAAxx\n7518\t4733\t0\t2\t8\t18\t18\t518\t1518\t2518\t7518\t36\t37\tEDAAAA\tBAHAAA\tHHHHxx\n8300\t4734\t0\t0\t0\t0\t0\t300\t300\t3300\t8300\t0\t1\tGHAAAA\tCAHAAA\tOOOOxx\n8434\t4735\t0\t2\t4\t14\t34\t434\t434\t3434\t8434\t68\t69\tKMAAAA\tDAHAAA\tVVVVxx\n6000\t4736\t0\t0\t0\t0\t0\t0\t0\t1000\t6000\t0\t1\tUWAAAA\tEAHAAA\tAAAAxx\n4508\t4737\t0\t0\t8\t8\t8\t508\t508\t4508\t4508\t16\t17\tKRAAAA\tFAHAAA\tHHHHxx\n7861\t4738\t1\t1\t1\t1\t61\t861\t1861\t2861\t7861\t122\t123\tJQAAAA\tGAHAAA\tOOOOxx\n5953\t4739\t1\t1\t3\t13\t53\t953\t1953\t953\t5953\t106\t107\tZUAAAA\tHAHAAA\tVVVVxx\n5063\t4740\t1\t3\t3\t3\t63\t63\t1063\t63\t5063\t126\t127\tTMAAAA\tIAHAAA\tAAAAxx\n4501\t4741\t1\t1\t1\t1\t1\t501\t501\t4501\t4501\t2\t3\tDRAAAA\tJAHAAA\tHHHHxx\n7092\t4742\t0\t0\t2\t12\t92\t92\t1092\t2092\t7092\t184\t185\tUMAAAA\tKAHAAA\tOOOOxx\n4388\t4743\t0\t0\t8\t8\t88\t388\t388\t4388\t4388\t176\t177\tUMAAAA\tLAHAAA\tVVVVxx\n1826\t4744\t0\t2\t6\t6\t26\t826\t1826\t1826\t1826\t52\t53\tGSAAAA\tMAHAAA\tAAAAxx\n568\t4745\t0\t0\t8\t8\t68\t568\t568\t568\t568\t136\t137\tWVAAAA\tNAHAAA\tHHHHxx\n8184\t4746\t0\t0\t4\t4\t84\t184\t184\t3184\t8184\t168\t169\tUCAAAA\tOAHAAA\tOOOOxx\n4268\t4747\t0\t0\t8\t8\t68\t268\t268\t4268\t4268\t136\t137\tEIAAAA\tPAHAAA\tVVVVxx\n5798\t4748\t0\t2\t8\t18\t98\t798\t1798\t798\t5798\t196\t197\tAPAAAA\tQAHAAA\tAAAAxx\n5190\t4749\t0\t2\t0\t10\t90\t190\t1190\t190\t5190\t180\t181\tQRAAAA\tRAHAAA\tHHHHxx\n1298\t4750\t0\t2\t8\t18\t98\t298\t1298\t1298\t1298\t196\t197\tYXAAAA\tSAHAAA\tOOOOxx\n4035\t4751\t1\t3\t5\t15\t35\t35\t35\t4035\t4035\t70\t71\tFZAAAA\tTAHAAA\tVVVVxx\n4504\t4752\t0\t0\t4\t4\t4\t504\t504\t4504\t4504\t8\t9\tGRAAAA\tUAHAAA\tAAAAxx\n5992\t4753\t0\t0\t2\t12\t92\t992\t1992\t992\t5992\t184\t185\tMWAAAA\tVAHAAA\tHHHHxx\n770\t4754\t0\t2\t0\t10\t70\t770\t770\t770\t770\t140\t141\tQDAAAA\tWAHAAA\tOOOOxx\n7502\t4755\t0\t2\t2\t2\t2\t502\t1502\t2502\t7502\t4\t5\tOCAAAA\tXAHAAA\tVVVVxx\n824\t4756\t0\t0\t4\t4\t24\t824\t824\t824\t824\t48\t49\tSFAAAA\tYAHAAA\tAAAAxx\n7716\t4757\t0\t0\t6\t16\t16\t716\t1716\t2716\t7716\t32\t33\tUKAAAA\tZAHAAA\tHHHHxx\n5749\t4758\t1\t1\t9\t9\t49\t749\t1749\t749\t5749\t98\t99\tDNAAAA\tABHAAA\tOOOOxx\n9814\t4759\t0\t2\t4\t14\t14\t814\t1814\t4814\t9814\t28\t29\tMNAAAA\tBBHAAA\tVVVVxx\n350\t4760\t0\t2\t0\t10\t50\t350\t350\t350\t350\t100\t101\tMNAAAA\tCBHAAA\tAAAAxx\n1390\t4761\t0\t2\t0\t10\t90\t390\t1390\t1390\t1390\t180\t181\tMBAAAA\tDBHAAA\tHHHHxx\n6994\t4762\t0\t2\t4\t14\t94\t994\t994\t1994\t6994\t188\t189\tAJAAAA\tEBHAAA\tOOOOxx\n3629\t4763\t1\t1\t9\t9\t29\t629\t1629\t3629\t3629\t58\t59\tPJAAAA\tFBHAAA\tVVVVxx\n9937\t4764\t1\t1\t7\t17\t37\t937\t1937\t4937\t9937\t74\t75\tFSAAAA\tGBHAAA\tAAAAxx\n5285\t4765\t1\t1\t5\t5\t85\t285\t1285\t285\t5285\t170\t171\tHVAAAA\tHBHAAA\tHHHHxx\n3157\t4766\t1\t1\t7\t17\t57\t157\t1157\t3157\t3157\t114\t115\tLRAAAA\tIBHAAA\tOOOOxx\n9549\t4767\t1\t1\t9\t9\t49\t549\t1549\t4549\t9549\t98\t99\tHDAAAA\tJBHAAA\tVVVVxx\n4118\t4768\t0\t2\t8\t18\t18\t118\t118\t4118\t4118\t36\t37\tKCAAAA\tKBHAAA\tAAAAxx\n756\t4769\t0\t0\t6\t16\t56\t756\t756\t756\t756\t112\t113\tCDAAAA\tLBHAAA\tHHHHxx\n5964\t4770\t0\t0\t4\t4\t64\t964\t1964\t964\t5964\t128\t129\tKVAAAA\tMBHAAA\tOOOOxx\n7701\t4771\t1\t1\t1\t1\t1\t701\t1701\t2701\t7701\t2\t3\tFKAAAA\tNBHAAA\tVVVVxx\n1242\t4772\t0\t2\t2\t2\t42\t242\t1242\t1242\t1242\t84\t85\tUVAAAA\tOBHAAA\tAAAAxx\n7890\t4773\t0\t2\t0\t10\t90\t890\t1890\t2890\t7890\t180\t181\tMRAAAA\tPBHAAA\tHHHHxx\n1991\t4774\t1\t3\t1\t11\t91\t991\t1991\t1991\t1991\t182\t183\tPYAAAA\tQBHAAA\tOOOOxx\n110\t4775\t0\t2\t0\t10\t10\t110\t110\t110\t110\t20\t21\tGEAAAA\tRBHAAA\tVVVVxx\n9334\t4776\t0\t2\t4\t14\t34\t334\t1334\t4334\t9334\t68\t69\tAVAAAA\tSBHAAA\tAAAAxx\n6231\t4777\t1\t3\t1\t11\t31\t231\t231\t1231\t6231\t62\t63\tRFAAAA\tTBHAAA\tHHHHxx\n9871\t4778\t1\t3\t1\t11\t71\t871\t1871\t4871\t9871\t142\t143\tRPAAAA\tUBHAAA\tOOOOxx\n9471\t4779\t1\t3\t1\t11\t71\t471\t1471\t4471\t9471\t142\t143\tHAAAAA\tVBHAAA\tVVVVxx\n2697\t4780\t1\t1\t7\t17\t97\t697\t697\t2697\t2697\t194\t195\tTZAAAA\tWBHAAA\tAAAAxx\n4761\t4781\t1\t1\t1\t1\t61\t761\t761\t4761\t4761\t122\t123\tDBAAAA\tXBHAAA\tHHHHxx\n8493\t4782\t1\t1\t3\t13\t93\t493\t493\t3493\t8493\t186\t187\tROAAAA\tYBHAAA\tOOOOxx\n1045\t4783\t1\t1\t5\t5\t45\t45\t1045\t1045\t1045\t90\t91\tFOAAAA\tZBHAAA\tVVVVxx\n3403\t4784\t1\t3\t3\t3\t3\t403\t1403\t3403\t3403\t6\t7\tXAAAAA\tACHAAA\tAAAAxx\n9412\t4785\t0\t0\t2\t12\t12\t412\t1412\t4412\t9412\t24\t25\tAYAAAA\tBCHAAA\tHHHHxx\n7652\t4786\t0\t0\t2\t12\t52\t652\t1652\t2652\t7652\t104\t105\tIIAAAA\tCCHAAA\tOOOOxx\n5866\t4787\t0\t2\t6\t6\t66\t866\t1866\t866\t5866\t132\t133\tQRAAAA\tDCHAAA\tVVVVxx\n6942\t4788\t0\t2\t2\t2\t42\t942\t942\t1942\t6942\t84\t85\tAHAAAA\tECHAAA\tAAAAxx\n9353\t4789\t1\t1\t3\t13\t53\t353\t1353\t4353\t9353\t106\t107\tTVAAAA\tFCHAAA\tHHHHxx\n2600\t4790\t0\t0\t0\t0\t0\t600\t600\t2600\t2600\t0\t1\tAWAAAA\tGCHAAA\tOOOOxx\n6971\t4791\t1\t3\t1\t11\t71\t971\t971\t1971\t6971\t142\t143\tDIAAAA\tHCHAAA\tVVVVxx\n5391\t4792\t1\t3\t1\t11\t91\t391\t1391\t391\t5391\t182\t183\tJZAAAA\tICHAAA\tAAAAxx\n7654\t4793\t0\t2\t4\t14\t54\t654\t1654\t2654\t7654\t108\t109\tKIAAAA\tJCHAAA\tHHHHxx\n1797\t4794\t1\t1\t7\t17\t97\t797\t1797\t1797\t1797\t194\t195\tDRAAAA\tKCHAAA\tOOOOxx\n4530\t4795\t0\t2\t0\t10\t30\t530\t530\t4530\t4530\t60\t61\tGSAAAA\tLCHAAA\tVVVVxx\n3130\t4796\t0\t2\t0\t10\t30\t130\t1130\t3130\t3130\t60\t61\tKQAAAA\tMCHAAA\tAAAAxx\n9442\t4797\t0\t2\t2\t2\t42\t442\t1442\t4442\t9442\t84\t85\tEZAAAA\tNCHAAA\tHHHHxx\n6659\t4798\t1\t3\t9\t19\t59\t659\t659\t1659\t6659\t118\t119\tDWAAAA\tOCHAAA\tOOOOxx\n9714\t4799\t0\t2\t4\t14\t14\t714\t1714\t4714\t9714\t28\t29\tQJAAAA\tPCHAAA\tVVVVxx\n3660\t4800\t0\t0\t0\t0\t60\t660\t1660\t3660\t3660\t120\t121\tUKAAAA\tQCHAAA\tAAAAxx\n1906\t4801\t0\t2\t6\t6\t6\t906\t1906\t1906\t1906\t12\t13\tIVAAAA\tRCHAAA\tHHHHxx\n7927\t4802\t1\t3\t7\t7\t27\t927\t1927\t2927\t7927\t54\t55\tXSAAAA\tSCHAAA\tOOOOxx\n1767\t4803\t1\t3\t7\t7\t67\t767\t1767\t1767\t1767\t134\t135\tZPAAAA\tTCHAAA\tVVVVxx\n5523\t4804\t1\t3\t3\t3\t23\t523\t1523\t523\t5523\t46\t47\tLEAAAA\tUCHAAA\tAAAAxx\n9289\t4805\t1\t1\t9\t9\t89\t289\t1289\t4289\t9289\t178\t179\tHTAAAA\tVCHAAA\tHHHHxx\n2717\t4806\t1\t1\t7\t17\t17\t717\t717\t2717\t2717\t34\t35\tNAAAAA\tWCHAAA\tOOOOxx\n4099\t4807\t1\t3\t9\t19\t99\t99\t99\t4099\t4099\t198\t199\tRBAAAA\tXCHAAA\tVVVVxx\n4387\t4808\t1\t3\t7\t7\t87\t387\t387\t4387\t4387\t174\t175\tTMAAAA\tYCHAAA\tAAAAxx\n8864\t4809\t0\t0\t4\t4\t64\t864\t864\t3864\t8864\t128\t129\tYCAAAA\tZCHAAA\tHHHHxx\n1774\t4810\t0\t2\t4\t14\t74\t774\t1774\t1774\t1774\t148\t149\tGQAAAA\tADHAAA\tOOOOxx\n6292\t4811\t0\t0\t2\t12\t92\t292\t292\t1292\t6292\t184\t185\tAIAAAA\tBDHAAA\tVVVVxx\n847\t4812\t1\t3\t7\t7\t47\t847\t847\t847\t847\t94\t95\tPGAAAA\tCDHAAA\tAAAAxx\n5954\t4813\t0\t2\t4\t14\t54\t954\t1954\t954\t5954\t108\t109\tAVAAAA\tDDHAAA\tHHHHxx\n8032\t4814\t0\t0\t2\t12\t32\t32\t32\t3032\t8032\t64\t65\tYWAAAA\tEDHAAA\tOOOOxx\n3295\t4815\t1\t3\t5\t15\t95\t295\t1295\t3295\t3295\t190\t191\tTWAAAA\tFDHAAA\tVVVVxx\n8984\t4816\t0\t0\t4\t4\t84\t984\t984\t3984\t8984\t168\t169\tOHAAAA\tGDHAAA\tAAAAxx\n7809\t4817\t1\t1\t9\t9\t9\t809\t1809\t2809\t7809\t18\t19\tJOAAAA\tHDHAAA\tHHHHxx\n1670\t4818\t0\t2\t0\t10\t70\t670\t1670\t1670\t1670\t140\t141\tGMAAAA\tIDHAAA\tOOOOxx\n7733\t4819\t1\t1\t3\t13\t33\t733\t1733\t2733\t7733\t66\t67\tLLAAAA\tJDHAAA\tVVVVxx\n6187\t4820\t1\t3\t7\t7\t87\t187\t187\t1187\t6187\t174\t175\tZDAAAA\tKDHAAA\tAAAAxx\n9326\t4821\t0\t2\t6\t6\t26\t326\t1326\t4326\t9326\t52\t53\tSUAAAA\tLDHAAA\tHHHHxx\n2493\t4822\t1\t1\t3\t13\t93\t493\t493\t2493\t2493\t186\t187\tXRAAAA\tMDHAAA\tOOOOxx\n9512\t4823\t0\t0\t2\t12\t12\t512\t1512\t4512\t9512\t24\t25\tWBAAAA\tNDHAAA\tVVVVxx\n4342\t4824\t0\t2\t2\t2\t42\t342\t342\t4342\t4342\t84\t85\tALAAAA\tODHAAA\tAAAAxx\n5350\t4825\t0\t2\t0\t10\t50\t350\t1350\t350\t5350\t100\t101\tUXAAAA\tPDHAAA\tHHHHxx\n6009\t4826\t1\t1\t9\t9\t9\t9\t9\t1009\t6009\t18\t19\tDXAAAA\tQDHAAA\tOOOOxx\n1208\t4827\t0\t0\t8\t8\t8\t208\t1208\t1208\t1208\t16\t17\tMUAAAA\tRDHAAA\tVVVVxx\n7014\t4828\t0\t2\t4\t14\t14\t14\t1014\t2014\t7014\t28\t29\tUJAAAA\tSDHAAA\tAAAAxx\n2967\t4829\t1\t3\t7\t7\t67\t967\t967\t2967\t2967\t134\t135\tDKAAAA\tTDHAAA\tHHHHxx\n5831\t4830\t1\t3\t1\t11\t31\t831\t1831\t831\t5831\t62\t63\tHQAAAA\tUDHAAA\tOOOOxx\n3097\t4831\t1\t1\t7\t17\t97\t97\t1097\t3097\t3097\t194\t195\tDPAAAA\tVDHAAA\tVVVVxx\n1528\t4832\t0\t0\t8\t8\t28\t528\t1528\t1528\t1528\t56\t57\tUGAAAA\tWDHAAA\tAAAAxx\n6429\t4833\t1\t1\t9\t9\t29\t429\t429\t1429\t6429\t58\t59\tHNAAAA\tXDHAAA\tHHHHxx\n7320\t4834\t0\t0\t0\t0\t20\t320\t1320\t2320\t7320\t40\t41\tOVAAAA\tYDHAAA\tOOOOxx\n844\t4835\t0\t0\t4\t4\t44\t844\t844\t844\t844\t88\t89\tMGAAAA\tZDHAAA\tVVVVxx\n7054\t4836\t0\t2\t4\t14\t54\t54\t1054\t2054\t7054\t108\t109\tILAAAA\tAEHAAA\tAAAAxx\n1643\t4837\t1\t3\t3\t3\t43\t643\t1643\t1643\t1643\t86\t87\tFLAAAA\tBEHAAA\tHHHHxx\n7626\t4838\t0\t2\t6\t6\t26\t626\t1626\t2626\t7626\t52\t53\tIHAAAA\tCEHAAA\tOOOOxx\n8728\t4839\t0\t0\t8\t8\t28\t728\t728\t3728\t8728\t56\t57\tSXAAAA\tDEHAAA\tVVVVxx\n8277\t4840\t1\t1\t7\t17\t77\t277\t277\t3277\t8277\t154\t155\tJGAAAA\tEEHAAA\tAAAAxx\n189\t4841\t1\t1\t9\t9\t89\t189\t189\t189\t189\t178\t179\tHHAAAA\tFEHAAA\tHHHHxx\n3717\t4842\t1\t1\t7\t17\t17\t717\t1717\t3717\t3717\t34\t35\tZMAAAA\tGEHAAA\tOOOOxx\n1020\t4843\t0\t0\t0\t0\t20\t20\t1020\t1020\t1020\t40\t41\tGNAAAA\tHEHAAA\tVVVVxx\n9234\t4844\t0\t2\t4\t14\t34\t234\t1234\t4234\t9234\t68\t69\tERAAAA\tIEHAAA\tAAAAxx\n9541\t4845\t1\t1\t1\t1\t41\t541\t1541\t4541\t9541\t82\t83\tZCAAAA\tJEHAAA\tHHHHxx\n380\t4846\t0\t0\t0\t0\t80\t380\t380\t380\t380\t160\t161\tQOAAAA\tKEHAAA\tOOOOxx\n397\t4847\t1\t1\t7\t17\t97\t397\t397\t397\t397\t194\t195\tHPAAAA\tLEHAAA\tVVVVxx\n835\t4848\t1\t3\t5\t15\t35\t835\t835\t835\t835\t70\t71\tDGAAAA\tMEHAAA\tAAAAxx\n347\t4849\t1\t3\t7\t7\t47\t347\t347\t347\t347\t94\t95\tJNAAAA\tNEHAAA\tHHHHxx\n2490\t4850\t0\t2\t0\t10\t90\t490\t490\t2490\t2490\t180\t181\tURAAAA\tOEHAAA\tOOOOxx\n605\t4851\t1\t1\t5\t5\t5\t605\t605\t605\t605\t10\t11\tHXAAAA\tPEHAAA\tVVVVxx\n7960\t4852\t0\t0\t0\t0\t60\t960\t1960\t2960\t7960\t120\t121\tEUAAAA\tQEHAAA\tAAAAxx\n9681\t4853\t1\t1\t1\t1\t81\t681\t1681\t4681\t9681\t162\t163\tJIAAAA\tREHAAA\tHHHHxx\n5753\t4854\t1\t1\t3\t13\t53\t753\t1753\t753\t5753\t106\t107\tHNAAAA\tSEHAAA\tOOOOxx\n1676\t4855\t0\t0\t6\t16\t76\t676\t1676\t1676\t1676\t152\t153\tMMAAAA\tTEHAAA\tVVVVxx\n5533\t4856\t1\t1\t3\t13\t33\t533\t1533\t533\t5533\t66\t67\tVEAAAA\tUEHAAA\tAAAAxx\n8958\t4857\t0\t2\t8\t18\t58\t958\t958\t3958\t8958\t116\t117\tOGAAAA\tVEHAAA\tHHHHxx\n664\t4858\t0\t0\t4\t4\t64\t664\t664\t664\t664\t128\t129\tOZAAAA\tWEHAAA\tOOOOxx\n3005\t4859\t1\t1\t5\t5\t5\t5\t1005\t3005\t3005\t10\t11\tPLAAAA\tXEHAAA\tVVVVxx\n8576\t4860\t0\t0\t6\t16\t76\t576\t576\t3576\t8576\t152\t153\tWRAAAA\tYEHAAA\tAAAAxx\n7304\t4861\t0\t0\t4\t4\t4\t304\t1304\t2304\t7304\t8\t9\tYUAAAA\tZEHAAA\tHHHHxx\n3375\t4862\t1\t3\t5\t15\t75\t375\t1375\t3375\t3375\t150\t151\tVZAAAA\tAFHAAA\tOOOOxx\n6336\t4863\t0\t0\t6\t16\t36\t336\t336\t1336\t6336\t72\t73\tSJAAAA\tBFHAAA\tVVVVxx\n1392\t4864\t0\t0\t2\t12\t92\t392\t1392\t1392\t1392\t184\t185\tOBAAAA\tCFHAAA\tAAAAxx\n2925\t4865\t1\t1\t5\t5\t25\t925\t925\t2925\t2925\t50\t51\tNIAAAA\tDFHAAA\tHHHHxx\n1217\t4866\t1\t1\t7\t17\t17\t217\t1217\t1217\t1217\t34\t35\tVUAAAA\tEFHAAA\tOOOOxx\n3714\t4867\t0\t2\t4\t14\t14\t714\t1714\t3714\t3714\t28\t29\tWMAAAA\tFFHAAA\tVVVVxx\n2120\t4868\t0\t0\t0\t0\t20\t120\t120\t2120\t2120\t40\t41\tODAAAA\tGFHAAA\tAAAAxx\n2845\t4869\t1\t1\t5\t5\t45\t845\t845\t2845\t2845\t90\t91\tLFAAAA\tHFHAAA\tHHHHxx\n3865\t4870\t1\t1\t5\t5\t65\t865\t1865\t3865\t3865\t130\t131\tRSAAAA\tIFHAAA\tOOOOxx\n124\t4871\t0\t0\t4\t4\t24\t124\t124\t124\t124\t48\t49\tUEAAAA\tJFHAAA\tVVVVxx\n865\t4872\t1\t1\t5\t5\t65\t865\t865\t865\t865\t130\t131\tHHAAAA\tKFHAAA\tAAAAxx\n9361\t4873\t1\t1\t1\t1\t61\t361\t1361\t4361\t9361\t122\t123\tBWAAAA\tLFHAAA\tHHHHxx\n6338\t4874\t0\t2\t8\t18\t38\t338\t338\t1338\t6338\t76\t77\tUJAAAA\tMFHAAA\tOOOOxx\n7330\t4875\t0\t2\t0\t10\t30\t330\t1330\t2330\t7330\t60\t61\tYVAAAA\tNFHAAA\tVVVVxx\n513\t4876\t1\t1\t3\t13\t13\t513\t513\t513\t513\t26\t27\tTTAAAA\tOFHAAA\tAAAAxx\n5001\t4877\t1\t1\t1\t1\t1\t1\t1001\t1\t5001\t2\t3\tJKAAAA\tPFHAAA\tHHHHxx\n549\t4878\t1\t1\t9\t9\t49\t549\t549\t549\t549\t98\t99\tDVAAAA\tQFHAAA\tOOOOxx\n1808\t4879\t0\t0\t8\t8\t8\t808\t1808\t1808\t1808\t16\t17\tORAAAA\tRFHAAA\tVVVVxx\n7168\t4880\t0\t0\t8\t8\t68\t168\t1168\t2168\t7168\t136\t137\tSPAAAA\tSFHAAA\tAAAAxx\n9878\t4881\t0\t2\t8\t18\t78\t878\t1878\t4878\t9878\t156\t157\tYPAAAA\tTFHAAA\tHHHHxx\n233\t4882\t1\t1\t3\t13\t33\t233\t233\t233\t233\t66\t67\tZIAAAA\tUFHAAA\tOOOOxx\n4262\t4883\t0\t2\t2\t2\t62\t262\t262\t4262\t4262\t124\t125\tYHAAAA\tVFHAAA\tVVVVxx\n7998\t4884\t0\t2\t8\t18\t98\t998\t1998\t2998\t7998\t196\t197\tQVAAAA\tWFHAAA\tAAAAxx\n2419\t4885\t1\t3\t9\t19\t19\t419\t419\t2419\t2419\t38\t39\tBPAAAA\tXFHAAA\tHHHHxx\n9960\t4886\t0\t0\t0\t0\t60\t960\t1960\t4960\t9960\t120\t121\tCTAAAA\tYFHAAA\tOOOOxx\n3523\t4887\t1\t3\t3\t3\t23\t523\t1523\t3523\t3523\t46\t47\tNFAAAA\tZFHAAA\tVVVVxx\n5440\t4888\t0\t0\t0\t0\t40\t440\t1440\t440\t5440\t80\t81\tGBAAAA\tAGHAAA\tAAAAxx\n3030\t4889\t0\t2\t0\t10\t30\t30\t1030\t3030\t3030\t60\t61\tOMAAAA\tBGHAAA\tHHHHxx\n2745\t4890\t1\t1\t5\t5\t45\t745\t745\t2745\t2745\t90\t91\tPBAAAA\tCGHAAA\tOOOOxx\n7175\t4891\t1\t3\t5\t15\t75\t175\t1175\t2175\t7175\t150\t151\tZPAAAA\tDGHAAA\tVVVVxx\n640\t4892\t0\t0\t0\t0\t40\t640\t640\t640\t640\t80\t81\tQYAAAA\tEGHAAA\tAAAAxx\n1798\t4893\t0\t2\t8\t18\t98\t798\t1798\t1798\t1798\t196\t197\tERAAAA\tFGHAAA\tHHHHxx\n7499\t4894\t1\t3\t9\t19\t99\t499\t1499\t2499\t7499\t198\t199\tLCAAAA\tGGHAAA\tOOOOxx\n1924\t4895\t0\t0\t4\t4\t24\t924\t1924\t1924\t1924\t48\t49\tAWAAAA\tHGHAAA\tVVVVxx\n1327\t4896\t1\t3\t7\t7\t27\t327\t1327\t1327\t1327\t54\t55\tBZAAAA\tIGHAAA\tAAAAxx\n73\t4897\t1\t1\t3\t13\t73\t73\t73\t73\t73\t146\t147\tVCAAAA\tJGHAAA\tHHHHxx\n9558\t4898\t0\t2\t8\t18\t58\t558\t1558\t4558\t9558\t116\t117\tQDAAAA\tKGHAAA\tOOOOxx\n818\t4899\t0\t2\t8\t18\t18\t818\t818\t818\t818\t36\t37\tMFAAAA\tLGHAAA\tVVVVxx\n9916\t4900\t0\t0\t6\t16\t16\t916\t1916\t4916\t9916\t32\t33\tKRAAAA\tMGHAAA\tAAAAxx\n2978\t4901\t0\t2\t8\t18\t78\t978\t978\t2978\t2978\t156\t157\tOKAAAA\tNGHAAA\tHHHHxx\n8469\t4902\t1\t1\t9\t9\t69\t469\t469\t3469\t8469\t138\t139\tTNAAAA\tOGHAAA\tOOOOxx\n9845\t4903\t1\t1\t5\t5\t45\t845\t1845\t4845\t9845\t90\t91\tROAAAA\tPGHAAA\tVVVVxx\n2326\t4904\t0\t2\t6\t6\t26\t326\t326\t2326\t2326\t52\t53\tMLAAAA\tQGHAAA\tAAAAxx\n4032\t4905\t0\t0\t2\t12\t32\t32\t32\t4032\t4032\t64\t65\tCZAAAA\tRGHAAA\tHHHHxx\n5604\t4906\t0\t0\t4\t4\t4\t604\t1604\t604\t5604\t8\t9\tOHAAAA\tSGHAAA\tOOOOxx\n9610\t4907\t0\t2\t0\t10\t10\t610\t1610\t4610\t9610\t20\t21\tQFAAAA\tTGHAAA\tVVVVxx\n5101\t4908\t1\t1\t1\t1\t1\t101\t1101\t101\t5101\t2\t3\tFOAAAA\tUGHAAA\tAAAAxx\n7246\t4909\t0\t2\t6\t6\t46\t246\t1246\t2246\t7246\t92\t93\tSSAAAA\tVGHAAA\tHHHHxx\n1292\t4910\t0\t0\t2\t12\t92\t292\t1292\t1292\t1292\t184\t185\tSXAAAA\tWGHAAA\tOOOOxx\n6235\t4911\t1\t3\t5\t15\t35\t235\t235\t1235\t6235\t70\t71\tVFAAAA\tXGHAAA\tVVVVxx\n1733\t4912\t1\t1\t3\t13\t33\t733\t1733\t1733\t1733\t66\t67\tROAAAA\tYGHAAA\tAAAAxx\n4647\t4913\t1\t3\t7\t7\t47\t647\t647\t4647\t4647\t94\t95\tTWAAAA\tZGHAAA\tHHHHxx\n258\t4914\t0\t2\t8\t18\t58\t258\t258\t258\t258\t116\t117\tYJAAAA\tAHHAAA\tOOOOxx\n8438\t4915\t0\t2\t8\t18\t38\t438\t438\t3438\t8438\t76\t77\tOMAAAA\tBHHAAA\tVVVVxx\n7869\t4916\t1\t1\t9\t9\t69\t869\t1869\t2869\t7869\t138\t139\tRQAAAA\tCHHAAA\tAAAAxx\n9691\t4917\t1\t3\t1\t11\t91\t691\t1691\t4691\t9691\t182\t183\tTIAAAA\tDHHAAA\tHHHHxx\n5422\t4918\t0\t2\t2\t2\t22\t422\t1422\t422\t5422\t44\t45\tOAAAAA\tEHHAAA\tOOOOxx\n9630\t4919\t0\t2\t0\t10\t30\t630\t1630\t4630\t9630\t60\t61\tKGAAAA\tFHHAAA\tVVVVxx\n4439\t4920\t1\t3\t9\t19\t39\t439\t439\t4439\t4439\t78\t79\tTOAAAA\tGHHAAA\tAAAAxx\n3140\t4921\t0\t0\t0\t0\t40\t140\t1140\t3140\t3140\t80\t81\tUQAAAA\tHHHAAA\tHHHHxx\n9111\t4922\t1\t3\t1\t11\t11\t111\t1111\t4111\t9111\t22\t23\tLMAAAA\tIHHAAA\tOOOOxx\n4606\t4923\t0\t2\t6\t6\t6\t606\t606\t4606\t4606\t12\t13\tEVAAAA\tJHHAAA\tVVVVxx\n8620\t4924\t0\t0\t0\t0\t20\t620\t620\t3620\t8620\t40\t41\tOTAAAA\tKHHAAA\tAAAAxx\n7849\t4925\t1\t1\t9\t9\t49\t849\t1849\t2849\t7849\t98\t99\tXPAAAA\tLHHAAA\tHHHHxx\n346\t4926\t0\t2\t6\t6\t46\t346\t346\t346\t346\t92\t93\tINAAAA\tMHHAAA\tOOOOxx\n9528\t4927\t0\t0\t8\t8\t28\t528\t1528\t4528\t9528\t56\t57\tMCAAAA\tNHHAAA\tVVVVxx\n1811\t4928\t1\t3\t1\t11\t11\t811\t1811\t1811\t1811\t22\t23\tRRAAAA\tOHHAAA\tAAAAxx\n6068\t4929\t0\t0\t8\t8\t68\t68\t68\t1068\t6068\t136\t137\tKZAAAA\tPHHAAA\tHHHHxx\n6260\t4930\t0\t0\t0\t0\t60\t260\t260\t1260\t6260\t120\t121\tUGAAAA\tQHHAAA\tOOOOxx\n5909\t4931\t1\t1\t9\t9\t9\t909\t1909\t909\t5909\t18\t19\tHTAAAA\tRHHAAA\tVVVVxx\n4518\t4932\t0\t2\t8\t18\t18\t518\t518\t4518\t4518\t36\t37\tURAAAA\tSHHAAA\tAAAAxx\n7530\t4933\t0\t2\t0\t10\t30\t530\t1530\t2530\t7530\t60\t61\tQDAAAA\tTHHAAA\tHHHHxx\n3900\t4934\t0\t0\t0\t0\t0\t900\t1900\t3900\t3900\t0\t1\tAUAAAA\tUHHAAA\tOOOOxx\n3969\t4935\t1\t1\t9\t9\t69\t969\t1969\t3969\t3969\t138\t139\tRWAAAA\tVHHAAA\tVVVVxx\n8690\t4936\t0\t2\t0\t10\t90\t690\t690\t3690\t8690\t180\t181\tGWAAAA\tWHHAAA\tAAAAxx\n5532\t4937\t0\t0\t2\t12\t32\t532\t1532\t532\t5532\t64\t65\tUEAAAA\tXHHAAA\tHHHHxx\n5989\t4938\t1\t1\t9\t9\t89\t989\t1989\t989\t5989\t178\t179\tJWAAAA\tYHHAAA\tOOOOxx\n1870\t4939\t0\t2\t0\t10\t70\t870\t1870\t1870\t1870\t140\t141\tYTAAAA\tZHHAAA\tVVVVxx\n1113\t4940\t1\t1\t3\t13\t13\t113\t1113\t1113\t1113\t26\t27\tVQAAAA\tAIHAAA\tAAAAxx\n5155\t4941\t1\t3\t5\t15\t55\t155\t1155\t155\t5155\t110\t111\tHQAAAA\tBIHAAA\tHHHHxx\n7460\t4942\t0\t0\t0\t0\t60\t460\t1460\t2460\t7460\t120\t121\tYAAAAA\tCIHAAA\tOOOOxx\n6217\t4943\t1\t1\t7\t17\t17\t217\t217\t1217\t6217\t34\t35\tDFAAAA\tDIHAAA\tVVVVxx\n8333\t4944\t1\t1\t3\t13\t33\t333\t333\t3333\t8333\t66\t67\tNIAAAA\tEIHAAA\tAAAAxx\n6341\t4945\t1\t1\t1\t1\t41\t341\t341\t1341\t6341\t82\t83\tXJAAAA\tFIHAAA\tHHHHxx\n6230\t4946\t0\t2\t0\t10\t30\t230\t230\t1230\t6230\t60\t61\tQFAAAA\tGIHAAA\tOOOOxx\n6902\t4947\t0\t2\t2\t2\t2\t902\t902\t1902\t6902\t4\t5\tMFAAAA\tHIHAAA\tVVVVxx\n670\t4948\t0\t2\t0\t10\t70\t670\t670\t670\t670\t140\t141\tUZAAAA\tIIHAAA\tAAAAxx\n805\t4949\t1\t1\t5\t5\t5\t805\t805\t805\t805\t10\t11\tZEAAAA\tJIHAAA\tHHHHxx\n1340\t4950\t0\t0\t0\t0\t40\t340\t1340\t1340\t1340\t80\t81\tOZAAAA\tKIHAAA\tOOOOxx\n8649\t4951\t1\t1\t9\t9\t49\t649\t649\t3649\t8649\t98\t99\tRUAAAA\tLIHAAA\tVVVVxx\n3887\t4952\t1\t3\t7\t7\t87\t887\t1887\t3887\t3887\t174\t175\tNTAAAA\tMIHAAA\tAAAAxx\n5400\t4953\t0\t0\t0\t0\t0\t400\t1400\t400\t5400\t0\t1\tSZAAAA\tNIHAAA\tHHHHxx\n4354\t4954\t0\t2\t4\t14\t54\t354\t354\t4354\t4354\t108\t109\tMLAAAA\tOIHAAA\tOOOOxx\n950\t4955\t0\t2\t0\t10\t50\t950\t950\t950\t950\t100\t101\tOKAAAA\tPIHAAA\tVVVVxx\n1544\t4956\t0\t0\t4\t4\t44\t544\t1544\t1544\t1544\t88\t89\tKHAAAA\tQIHAAA\tAAAAxx\n3898\t4957\t0\t2\t8\t18\t98\t898\t1898\t3898\t3898\t196\t197\tYTAAAA\tRIHAAA\tHHHHxx\n8038\t4958\t0\t2\t8\t18\t38\t38\t38\t3038\t8038\t76\t77\tEXAAAA\tSIHAAA\tOOOOxx\n1095\t4959\t1\t3\t5\t15\t95\t95\t1095\t1095\t1095\t190\t191\tDQAAAA\tTIHAAA\tVVVVxx\n1748\t4960\t0\t0\t8\t8\t48\t748\t1748\t1748\t1748\t96\t97\tGPAAAA\tUIHAAA\tAAAAxx\n9154\t4961\t0\t2\t4\t14\t54\t154\t1154\t4154\t9154\t108\t109\tCOAAAA\tVIHAAA\tHHHHxx\n2182\t4962\t0\t2\t2\t2\t82\t182\t182\t2182\t2182\t164\t165\tYFAAAA\tWIHAAA\tOOOOxx\n6797\t4963\t1\t1\t7\t17\t97\t797\t797\t1797\t6797\t194\t195\tLBAAAA\tXIHAAA\tVVVVxx\n9149\t4964\t1\t1\t9\t9\t49\t149\t1149\t4149\t9149\t98\t99\tXNAAAA\tYIHAAA\tAAAAxx\n7351\t4965\t1\t3\t1\t11\t51\t351\t1351\t2351\t7351\t102\t103\tTWAAAA\tZIHAAA\tHHHHxx\n2820\t4966\t0\t0\t0\t0\t20\t820\t820\t2820\t2820\t40\t41\tMEAAAA\tAJHAAA\tOOOOxx\n9696\t4967\t0\t0\t6\t16\t96\t696\t1696\t4696\t9696\t192\t193\tYIAAAA\tBJHAAA\tVVVVxx\n253\t4968\t1\t1\t3\t13\t53\t253\t253\t253\t253\t106\t107\tTJAAAA\tCJHAAA\tAAAAxx\n3600\t4969\t0\t0\t0\t0\t0\t600\t1600\t3600\t3600\t0\t1\tMIAAAA\tDJHAAA\tHHHHxx\n3892\t4970\t0\t0\t2\t12\t92\t892\t1892\t3892\t3892\t184\t185\tSTAAAA\tEJHAAA\tOOOOxx\n231\t4971\t1\t3\t1\t11\t31\t231\t231\t231\t231\t62\t63\tXIAAAA\tFJHAAA\tVVVVxx\n8331\t4972\t1\t3\t1\t11\t31\t331\t331\t3331\t8331\t62\t63\tLIAAAA\tGJHAAA\tAAAAxx\n403\t4973\t1\t3\t3\t3\t3\t403\t403\t403\t403\t6\t7\tNPAAAA\tHJHAAA\tHHHHxx\n8642\t4974\t0\t2\t2\t2\t42\t642\t642\t3642\t8642\t84\t85\tKUAAAA\tIJHAAA\tOOOOxx\n3118\t4975\t0\t2\t8\t18\t18\t118\t1118\t3118\t3118\t36\t37\tYPAAAA\tJJHAAA\tVVVVxx\n3835\t4976\t1\t3\t5\t15\t35\t835\t1835\t3835\t3835\t70\t71\tNRAAAA\tKJHAAA\tAAAAxx\n1117\t4977\t1\t1\t7\t17\t17\t117\t1117\t1117\t1117\t34\t35\tZQAAAA\tLJHAAA\tHHHHxx\n7024\t4978\t0\t0\t4\t4\t24\t24\t1024\t2024\t7024\t48\t49\tEKAAAA\tMJHAAA\tOOOOxx\n2636\t4979\t0\t0\t6\t16\t36\t636\t636\t2636\t2636\t72\t73\tKXAAAA\tNJHAAA\tVVVVxx\n3778\t4980\t0\t2\t8\t18\t78\t778\t1778\t3778\t3778\t156\t157\tIPAAAA\tOJHAAA\tAAAAxx\n2003\t4981\t1\t3\t3\t3\t3\t3\t3\t2003\t2003\t6\t7\tBZAAAA\tPJHAAA\tHHHHxx\n5717\t4982\t1\t1\t7\t17\t17\t717\t1717\t717\t5717\t34\t35\tXLAAAA\tQJHAAA\tOOOOxx\n4869\t4983\t1\t1\t9\t9\t69\t869\t869\t4869\t4869\t138\t139\tHFAAAA\tRJHAAA\tVVVVxx\n8921\t4984\t1\t1\t1\t1\t21\t921\t921\t3921\t8921\t42\t43\tDFAAAA\tSJHAAA\tAAAAxx\n888\t4985\t0\t0\t8\t8\t88\t888\t888\t888\t888\t176\t177\tEIAAAA\tTJHAAA\tHHHHxx\n7599\t4986\t1\t3\t9\t19\t99\t599\t1599\t2599\t7599\t198\t199\tHGAAAA\tUJHAAA\tOOOOxx\n8621\t4987\t1\t1\t1\t1\t21\t621\t621\t3621\t8621\t42\t43\tPTAAAA\tVJHAAA\tVVVVxx\n811\t4988\t1\t3\t1\t11\t11\t811\t811\t811\t811\t22\t23\tFFAAAA\tWJHAAA\tAAAAxx\n9147\t4989\t1\t3\t7\t7\t47\t147\t1147\t4147\t9147\t94\t95\tVNAAAA\tXJHAAA\tHHHHxx\n1413\t4990\t1\t1\t3\t13\t13\t413\t1413\t1413\t1413\t26\t27\tJCAAAA\tYJHAAA\tOOOOxx\n5232\t4991\t0\t0\t2\t12\t32\t232\t1232\t232\t5232\t64\t65\tGTAAAA\tZJHAAA\tVVVVxx\n5912\t4992\t0\t0\t2\t12\t12\t912\t1912\t912\t5912\t24\t25\tKTAAAA\tAKHAAA\tAAAAxx\n3418\t4993\t0\t2\t8\t18\t18\t418\t1418\t3418\t3418\t36\t37\tMBAAAA\tBKHAAA\tHHHHxx\n3912\t4994\t0\t0\t2\t12\t12\t912\t1912\t3912\t3912\t24\t25\tMUAAAA\tCKHAAA\tOOOOxx\n9576\t4995\t0\t0\t6\t16\t76\t576\t1576\t4576\t9576\t152\t153\tIEAAAA\tDKHAAA\tVVVVxx\n4225\t4996\t1\t1\t5\t5\t25\t225\t225\t4225\t4225\t50\t51\tNGAAAA\tEKHAAA\tAAAAxx\n8222\t4997\t0\t2\t2\t2\t22\t222\t222\t3222\t8222\t44\t45\tGEAAAA\tFKHAAA\tHHHHxx\n7013\t4998\t1\t1\t3\t13\t13\t13\t1013\t2013\t7013\t26\t27\tTJAAAA\tGKHAAA\tOOOOxx\n7037\t4999\t1\t1\t7\t17\t37\t37\t1037\t2037\t7037\t74\t75\tRKAAAA\tHKHAAA\tVVVVxx\n1205\t5000\t1\t1\t5\t5\t5\t205\t1205\t1205\t1205\t10\t11\tJUAAAA\tIKHAAA\tAAAAxx\n8114\t5001\t0\t2\t4\t14\t14\t114\t114\t3114\t8114\t28\t29\tCAAAAA\tJKHAAA\tHHHHxx\n6585\t5002\t1\t1\t5\t5\t85\t585\t585\t1585\t6585\t170\t171\tHTAAAA\tKKHAAA\tOOOOxx\n155\t5003\t1\t3\t5\t15\t55\t155\t155\t155\t155\t110\t111\tZFAAAA\tLKHAAA\tVVVVxx\n2841\t5004\t1\t1\t1\t1\t41\t841\t841\t2841\t2841\t82\t83\tHFAAAA\tMKHAAA\tAAAAxx\n1996\t5005\t0\t0\t6\t16\t96\t996\t1996\t1996\t1996\t192\t193\tUYAAAA\tNKHAAA\tHHHHxx\n4948\t5006\t0\t0\t8\t8\t48\t948\t948\t4948\t4948\t96\t97\tIIAAAA\tOKHAAA\tOOOOxx\n3304\t5007\t0\t0\t4\t4\t4\t304\t1304\t3304\t3304\t8\t9\tCXAAAA\tPKHAAA\tVVVVxx\n5684\t5008\t0\t0\t4\t4\t84\t684\t1684\t684\t5684\t168\t169\tQKAAAA\tQKHAAA\tAAAAxx\n6962\t5009\t0\t2\t2\t2\t62\t962\t962\t1962\t6962\t124\t125\tUHAAAA\tRKHAAA\tHHHHxx\n8691\t5010\t1\t3\t1\t11\t91\t691\t691\t3691\t8691\t182\t183\tHWAAAA\tSKHAAA\tOOOOxx\n8501\t5011\t1\t1\t1\t1\t1\t501\t501\t3501\t8501\t2\t3\tZOAAAA\tTKHAAA\tVVVVxx\n4783\t5012\t1\t3\t3\t3\t83\t783\t783\t4783\t4783\t166\t167\tZBAAAA\tUKHAAA\tAAAAxx\n3762\t5013\t0\t2\t2\t2\t62\t762\t1762\t3762\t3762\t124\t125\tSOAAAA\tVKHAAA\tHHHHxx\n4534\t5014\t0\t2\t4\t14\t34\t534\t534\t4534\t4534\t68\t69\tKSAAAA\tWKHAAA\tOOOOxx\n4999\t5015\t1\t3\t9\t19\t99\t999\t999\t4999\t4999\t198\t199\tHKAAAA\tXKHAAA\tVVVVxx\n4618\t5016\t0\t2\t8\t18\t18\t618\t618\t4618\t4618\t36\t37\tQVAAAA\tYKHAAA\tAAAAxx\n4220\t5017\t0\t0\t0\t0\t20\t220\t220\t4220\t4220\t40\t41\tIGAAAA\tZKHAAA\tHHHHxx\n3384\t5018\t0\t0\t4\t4\t84\t384\t1384\t3384\t3384\t168\t169\tEAAAAA\tALHAAA\tOOOOxx\n3036\t5019\t0\t0\t6\t16\t36\t36\t1036\t3036\t3036\t72\t73\tUMAAAA\tBLHAAA\tVVVVxx\n545\t5020\t1\t1\t5\t5\t45\t545\t545\t545\t545\t90\t91\tZUAAAA\tCLHAAA\tAAAAxx\n9946\t5021\t0\t2\t6\t6\t46\t946\t1946\t4946\t9946\t92\t93\tOSAAAA\tDLHAAA\tHHHHxx\n1985\t5022\t1\t1\t5\t5\t85\t985\t1985\t1985\t1985\t170\t171\tJYAAAA\tELHAAA\tOOOOxx\n2310\t5023\t0\t2\t0\t10\t10\t310\t310\t2310\t2310\t20\t21\tWKAAAA\tFLHAAA\tVVVVxx\n6563\t5024\t1\t3\t3\t3\t63\t563\t563\t1563\t6563\t126\t127\tLSAAAA\tGLHAAA\tAAAAxx\n4886\t5025\t0\t2\t6\t6\t86\t886\t886\t4886\t4886\t172\t173\tYFAAAA\tHLHAAA\tHHHHxx\n9359\t5026\t1\t3\t9\t19\t59\t359\t1359\t4359\t9359\t118\t119\tZVAAAA\tILHAAA\tOOOOxx\n400\t5027\t0\t0\t0\t0\t0\t400\t400\t400\t400\t0\t1\tKPAAAA\tJLHAAA\tVVVVxx\n9742\t5028\t0\t2\t2\t2\t42\t742\t1742\t4742\t9742\t84\t85\tSKAAAA\tKLHAAA\tAAAAxx\n6736\t5029\t0\t0\t6\t16\t36\t736\t736\t1736\t6736\t72\t73\tCZAAAA\tLLHAAA\tHHHHxx\n8166\t5030\t0\t2\t6\t6\t66\t166\t166\t3166\t8166\t132\t133\tCCAAAA\tMLHAAA\tOOOOxx\n861\t5031\t1\t1\t1\t1\t61\t861\t861\t861\t861\t122\t123\tDHAAAA\tNLHAAA\tVVVVxx\n7492\t5032\t0\t0\t2\t12\t92\t492\t1492\t2492\t7492\t184\t185\tECAAAA\tOLHAAA\tAAAAxx\n1155\t5033\t1\t3\t5\t15\t55\t155\t1155\t1155\t1155\t110\t111\tLSAAAA\tPLHAAA\tHHHHxx\n9769\t5034\t1\t1\t9\t9\t69\t769\t1769\t4769\t9769\t138\t139\tTLAAAA\tQLHAAA\tOOOOxx\n6843\t5035\t1\t3\t3\t3\t43\t843\t843\t1843\t6843\t86\t87\tFDAAAA\tRLHAAA\tVVVVxx\n5625\t5036\t1\t1\t5\t5\t25\t625\t1625\t625\t5625\t50\t51\tJIAAAA\tSLHAAA\tAAAAxx\n1910\t5037\t0\t2\t0\t10\t10\t910\t1910\t1910\t1910\t20\t21\tMVAAAA\tTLHAAA\tHHHHxx\n9796\t5038\t0\t0\t6\t16\t96\t796\t1796\t4796\t9796\t192\t193\tUMAAAA\tULHAAA\tOOOOxx\n6950\t5039\t0\t2\t0\t10\t50\t950\t950\t1950\t6950\t100\t101\tIHAAAA\tVLHAAA\tVVVVxx\n3084\t5040\t0\t0\t4\t4\t84\t84\t1084\t3084\t3084\t168\t169\tQOAAAA\tWLHAAA\tAAAAxx\n2959\t5041\t1\t3\t9\t19\t59\t959\t959\t2959\t2959\t118\t119\tVJAAAA\tXLHAAA\tHHHHxx\n2093\t5042\t1\t1\t3\t13\t93\t93\t93\t2093\t2093\t186\t187\tNCAAAA\tYLHAAA\tOOOOxx\n2738\t5043\t0\t2\t8\t18\t38\t738\t738\t2738\t2738\t76\t77\tIBAAAA\tZLHAAA\tVVVVxx\n6406\t5044\t0\t2\t6\t6\t6\t406\t406\t1406\t6406\t12\t13\tKMAAAA\tAMHAAA\tAAAAxx\n9082\t5045\t0\t2\t2\t2\t82\t82\t1082\t4082\t9082\t164\t165\tILAAAA\tBMHAAA\tHHHHxx\n8568\t5046\t0\t0\t8\t8\t68\t568\t568\t3568\t8568\t136\t137\tORAAAA\tCMHAAA\tOOOOxx\n3566\t5047\t0\t2\t6\t6\t66\t566\t1566\t3566\t3566\t132\t133\tEHAAAA\tDMHAAA\tVVVVxx\n3016\t5048\t0\t0\t6\t16\t16\t16\t1016\t3016\t3016\t32\t33\tAMAAAA\tEMHAAA\tAAAAxx\n1207\t5049\t1\t3\t7\t7\t7\t207\t1207\t1207\t1207\t14\t15\tLUAAAA\tFMHAAA\tHHHHxx\n4045\t5050\t1\t1\t5\t5\t45\t45\t45\t4045\t4045\t90\t91\tPZAAAA\tGMHAAA\tOOOOxx\n4173\t5051\t1\t1\t3\t13\t73\t173\t173\t4173\t4173\t146\t147\tNEAAAA\tHMHAAA\tVVVVxx\n3939\t5052\t1\t3\t9\t19\t39\t939\t1939\t3939\t3939\t78\t79\tNVAAAA\tIMHAAA\tAAAAxx\n9683\t5053\t1\t3\t3\t3\t83\t683\t1683\t4683\t9683\t166\t167\tLIAAAA\tJMHAAA\tHHHHxx\n1684\t5054\t0\t0\t4\t4\t84\t684\t1684\t1684\t1684\t168\t169\tUMAAAA\tKMHAAA\tOOOOxx\n9271\t5055\t1\t3\t1\t11\t71\t271\t1271\t4271\t9271\t142\t143\tPSAAAA\tLMHAAA\tVVVVxx\n9317\t5056\t1\t1\t7\t17\t17\t317\t1317\t4317\t9317\t34\t35\tJUAAAA\tMMHAAA\tAAAAxx\n5793\t5057\t1\t1\t3\t13\t93\t793\t1793\t793\t5793\t186\t187\tVOAAAA\tNMHAAA\tHHHHxx\n352\t5058\t0\t0\t2\t12\t52\t352\t352\t352\t352\t104\t105\tONAAAA\tOMHAAA\tOOOOxx\n7328\t5059\t0\t0\t8\t8\t28\t328\t1328\t2328\t7328\t56\t57\tWVAAAA\tPMHAAA\tVVVVxx\n4582\t5060\t0\t2\t2\t2\t82\t582\t582\t4582\t4582\t164\t165\tGUAAAA\tQMHAAA\tAAAAxx\n7413\t5061\t1\t1\t3\t13\t13\t413\t1413\t2413\t7413\t26\t27\tDZAAAA\tRMHAAA\tHHHHxx\n6772\t5062\t0\t0\t2\t12\t72\t772\t772\t1772\t6772\t144\t145\tMAAAAA\tSMHAAA\tOOOOxx\n4973\t5063\t1\t1\t3\t13\t73\t973\t973\t4973\t4973\t146\t147\tHJAAAA\tTMHAAA\tVVVVxx\n7480\t5064\t0\t0\t0\t0\t80\t480\t1480\t2480\t7480\t160\t161\tSBAAAA\tUMHAAA\tAAAAxx\n5555\t5065\t1\t3\t5\t15\t55\t555\t1555\t555\t5555\t110\t111\tRFAAAA\tVMHAAA\tHHHHxx\n4227\t5066\t1\t3\t7\t7\t27\t227\t227\t4227\t4227\t54\t55\tPGAAAA\tWMHAAA\tOOOOxx\n4153\t5067\t1\t1\t3\t13\t53\t153\t153\t4153\t4153\t106\t107\tTDAAAA\tXMHAAA\tVVVVxx\n4601\t5068\t1\t1\t1\t1\t1\t601\t601\t4601\t4601\t2\t3\tZUAAAA\tYMHAAA\tAAAAxx\n3782\t5069\t0\t2\t2\t2\t82\t782\t1782\t3782\t3782\t164\t165\tMPAAAA\tZMHAAA\tHHHHxx\n3872\t5070\t0\t0\t2\t12\t72\t872\t1872\t3872\t3872\t144\t145\tYSAAAA\tANHAAA\tOOOOxx\n893\t5071\t1\t1\t3\t13\t93\t893\t893\t893\t893\t186\t187\tJIAAAA\tBNHAAA\tVVVVxx\n2430\t5072\t0\t2\t0\t10\t30\t430\t430\t2430\t2430\t60\t61\tMPAAAA\tCNHAAA\tAAAAxx\n2591\t5073\t1\t3\t1\t11\t91\t591\t591\t2591\t2591\t182\t183\tRVAAAA\tDNHAAA\tHHHHxx\n264\t5074\t0\t0\t4\t4\t64\t264\t264\t264\t264\t128\t129\tEKAAAA\tENHAAA\tOOOOxx\n6238\t5075\t0\t2\t8\t18\t38\t238\t238\t1238\t6238\t76\t77\tYFAAAA\tFNHAAA\tVVVVxx\n633\t5076\t1\t1\t3\t13\t33\t633\t633\t633\t633\t66\t67\tJYAAAA\tGNHAAA\tAAAAxx\n1029\t5077\t1\t1\t9\t9\t29\t29\t1029\t1029\t1029\t58\t59\tPNAAAA\tHNHAAA\tHHHHxx\n5934\t5078\t0\t2\t4\t14\t34\t934\t1934\t934\t5934\t68\t69\tGUAAAA\tINHAAA\tOOOOxx\n8694\t5079\t0\t2\t4\t14\t94\t694\t694\t3694\t8694\t188\t189\tKWAAAA\tJNHAAA\tVVVVxx\n7401\t5080\t1\t1\t1\t1\t1\t401\t1401\t2401\t7401\t2\t3\tRYAAAA\tKNHAAA\tAAAAxx\n1165\t5081\t1\t1\t5\t5\t65\t165\t1165\t1165\t1165\t130\t131\tVSAAAA\tLNHAAA\tHHHHxx\n9438\t5082\t0\t2\t8\t18\t38\t438\t1438\t4438\t9438\t76\t77\tAZAAAA\tMNHAAA\tOOOOxx\n4790\t5083\t0\t2\t0\t10\t90\t790\t790\t4790\t4790\t180\t181\tGCAAAA\tNNHAAA\tVVVVxx\n4531\t5084\t1\t3\t1\t11\t31\t531\t531\t4531\t4531\t62\t63\tHSAAAA\tONHAAA\tAAAAxx\n6099\t5085\t1\t3\t9\t19\t99\t99\t99\t1099\t6099\t198\t199\tPAAAAA\tPNHAAA\tHHHHxx\n8236\t5086\t0\t0\t6\t16\t36\t236\t236\t3236\t8236\t72\t73\tUEAAAA\tQNHAAA\tOOOOxx\n8551\t5087\t1\t3\t1\t11\t51\t551\t551\t3551\t8551\t102\t103\tXQAAAA\tRNHAAA\tVVVVxx\n3128\t5088\t0\t0\t8\t8\t28\t128\t1128\t3128\t3128\t56\t57\tIQAAAA\tSNHAAA\tAAAAxx\n3504\t5089\t0\t0\t4\t4\t4\t504\t1504\t3504\t3504\t8\t9\tUEAAAA\tTNHAAA\tHHHHxx\n9071\t5090\t1\t3\t1\t11\t71\t71\t1071\t4071\t9071\t142\t143\tXKAAAA\tUNHAAA\tOOOOxx\n5930\t5091\t0\t2\t0\t10\t30\t930\t1930\t930\t5930\t60\t61\tCUAAAA\tVNHAAA\tVVVVxx\n6825\t5092\t1\t1\t5\t5\t25\t825\t825\t1825\t6825\t50\t51\tNCAAAA\tWNHAAA\tAAAAxx\n2218\t5093\t0\t2\t8\t18\t18\t218\t218\t2218\t2218\t36\t37\tIHAAAA\tXNHAAA\tHHHHxx\n3604\t5094\t0\t0\t4\t4\t4\t604\t1604\t3604\t3604\t8\t9\tQIAAAA\tYNHAAA\tOOOOxx\n5761\t5095\t1\t1\t1\t1\t61\t761\t1761\t761\t5761\t122\t123\tPNAAAA\tZNHAAA\tVVVVxx\n5414\t5096\t0\t2\t4\t14\t14\t414\t1414\t414\t5414\t28\t29\tGAAAAA\tAOHAAA\tAAAAxx\n5892\t5097\t0\t0\t2\t12\t92\t892\t1892\t892\t5892\t184\t185\tQSAAAA\tBOHAAA\tHHHHxx\n4080\t5098\t0\t0\t0\t0\t80\t80\t80\t4080\t4080\t160\t161\tYAAAAA\tCOHAAA\tOOOOxx\n8018\t5099\t0\t2\t8\t18\t18\t18\t18\t3018\t8018\t36\t37\tKWAAAA\tDOHAAA\tVVVVxx\n1757\t5100\t1\t1\t7\t17\t57\t757\t1757\t1757\t1757\t114\t115\tPPAAAA\tEOHAAA\tAAAAxx\n5854\t5101\t0\t2\t4\t14\t54\t854\t1854\t854\t5854\t108\t109\tERAAAA\tFOHAAA\tHHHHxx\n1335\t5102\t1\t3\t5\t15\t35\t335\t1335\t1335\t1335\t70\t71\tJZAAAA\tGOHAAA\tOOOOxx\n3811\t5103\t1\t3\t1\t11\t11\t811\t1811\t3811\t3811\t22\t23\tPQAAAA\tHOHAAA\tVVVVxx\n9917\t5104\t1\t1\t7\t17\t17\t917\t1917\t4917\t9917\t34\t35\tLRAAAA\tIOHAAA\tAAAAxx\n5947\t5105\t1\t3\t7\t7\t47\t947\t1947\t947\t5947\t94\t95\tTUAAAA\tJOHAAA\tHHHHxx\n7263\t5106\t1\t3\t3\t3\t63\t263\t1263\t2263\t7263\t126\t127\tJTAAAA\tKOHAAA\tOOOOxx\n1730\t5107\t0\t2\t0\t10\t30\t730\t1730\t1730\t1730\t60\t61\tOOAAAA\tLOHAAA\tVVVVxx\n5747\t5108\t1\t3\t7\t7\t47\t747\t1747\t747\t5747\t94\t95\tBNAAAA\tMOHAAA\tAAAAxx\n3876\t5109\t0\t0\t6\t16\t76\t876\t1876\t3876\t3876\t152\t153\tCTAAAA\tNOHAAA\tHHHHxx\n2762\t5110\t0\t2\t2\t2\t62\t762\t762\t2762\t2762\t124\t125\tGCAAAA\tOOHAAA\tOOOOxx\n7613\t5111\t1\t1\t3\t13\t13\t613\t1613\t2613\t7613\t26\t27\tVGAAAA\tPOHAAA\tVVVVxx\n152\t5112\t0\t0\t2\t12\t52\t152\t152\t152\t152\t104\t105\tWFAAAA\tQOHAAA\tAAAAxx\n3941\t5113\t1\t1\t1\t1\t41\t941\t1941\t3941\t3941\t82\t83\tPVAAAA\tROHAAA\tHHHHxx\n5614\t5114\t0\t2\t4\t14\t14\t614\t1614\t614\t5614\t28\t29\tYHAAAA\tSOHAAA\tOOOOxx\n9279\t5115\t1\t3\t9\t19\t79\t279\t1279\t4279\t9279\t158\t159\tXSAAAA\tTOHAAA\tVVVVxx\n3048\t5116\t0\t0\t8\t8\t48\t48\t1048\t3048\t3048\t96\t97\tGNAAAA\tUOHAAA\tAAAAxx\n6152\t5117\t0\t0\t2\t12\t52\t152\t152\t1152\t6152\t104\t105\tQCAAAA\tVOHAAA\tHHHHxx\n5481\t5118\t1\t1\t1\t1\t81\t481\t1481\t481\t5481\t162\t163\tVCAAAA\tWOHAAA\tOOOOxx\n4675\t5119\t1\t3\t5\t15\t75\t675\t675\t4675\t4675\t150\t151\tVXAAAA\tXOHAAA\tVVVVxx\n3334\t5120\t0\t2\t4\t14\t34\t334\t1334\t3334\t3334\t68\t69\tGYAAAA\tYOHAAA\tAAAAxx\n4691\t5121\t1\t3\t1\t11\t91\t691\t691\t4691\t4691\t182\t183\tLYAAAA\tZOHAAA\tHHHHxx\n803\t5122\t1\t3\t3\t3\t3\t803\t803\t803\t803\t6\t7\tXEAAAA\tAPHAAA\tOOOOxx\n5409\t5123\t1\t1\t9\t9\t9\t409\t1409\t409\t5409\t18\t19\tBAAAAA\tBPHAAA\tVVVVxx\n1054\t5124\t0\t2\t4\t14\t54\t54\t1054\t1054\t1054\t108\t109\tOOAAAA\tCPHAAA\tAAAAxx\n103\t5125\t1\t3\t3\t3\t3\t103\t103\t103\t103\t6\t7\tZDAAAA\tDPHAAA\tHHHHxx\n8565\t5126\t1\t1\t5\t5\t65\t565\t565\t3565\t8565\t130\t131\tLRAAAA\tEPHAAA\tOOOOxx\n4666\t5127\t0\t2\t6\t6\t66\t666\t666\t4666\t4666\t132\t133\tMXAAAA\tFPHAAA\tVVVVxx\n6634\t5128\t0\t2\t4\t14\t34\t634\t634\t1634\t6634\t68\t69\tEVAAAA\tGPHAAA\tAAAAxx\n5538\t5129\t0\t2\t8\t18\t38\t538\t1538\t538\t5538\t76\t77\tAFAAAA\tHPHAAA\tHHHHxx\n3789\t5130\t1\t1\t9\t9\t89\t789\t1789\t3789\t3789\t178\t179\tTPAAAA\tIPHAAA\tOOOOxx\n4641\t5131\t1\t1\t1\t1\t41\t641\t641\t4641\t4641\t82\t83\tNWAAAA\tJPHAAA\tVVVVxx\n2458\t5132\t0\t2\t8\t18\t58\t458\t458\t2458\t2458\t116\t117\tOQAAAA\tKPHAAA\tAAAAxx\n5667\t5133\t1\t3\t7\t7\t67\t667\t1667\t667\t5667\t134\t135\tZJAAAA\tLPHAAA\tHHHHxx\n6524\t5134\t0\t0\t4\t4\t24\t524\t524\t1524\t6524\t48\t49\tYQAAAA\tMPHAAA\tOOOOxx\n9179\t5135\t1\t3\t9\t19\t79\t179\t1179\t4179\t9179\t158\t159\tBPAAAA\tNPHAAA\tVVVVxx\n6358\t5136\t0\t2\t8\t18\t58\t358\t358\t1358\t6358\t116\t117\tOKAAAA\tOPHAAA\tAAAAxx\n6668\t5137\t0\t0\t8\t8\t68\t668\t668\t1668\t6668\t136\t137\tMWAAAA\tPPHAAA\tHHHHxx\n6414\t5138\t0\t2\t4\t14\t14\t414\t414\t1414\t6414\t28\t29\tSMAAAA\tQPHAAA\tOOOOxx\n2813\t5139\t1\t1\t3\t13\t13\t813\t813\t2813\t2813\t26\t27\tFEAAAA\tRPHAAA\tVVVVxx\n8927\t5140\t1\t3\t7\t7\t27\t927\t927\t3927\t8927\t54\t55\tJFAAAA\tSPHAAA\tAAAAxx\n8695\t5141\t1\t3\t5\t15\t95\t695\t695\t3695\t8695\t190\t191\tLWAAAA\tTPHAAA\tHHHHxx\n363\t5142\t1\t3\t3\t3\t63\t363\t363\t363\t363\t126\t127\tZNAAAA\tUPHAAA\tOOOOxx\n9966\t5143\t0\t2\t6\t6\t66\t966\t1966\t4966\t9966\t132\t133\tITAAAA\tVPHAAA\tVVVVxx\n1323\t5144\t1\t3\t3\t3\t23\t323\t1323\t1323\t1323\t46\t47\tXYAAAA\tWPHAAA\tAAAAxx\n8211\t5145\t1\t3\t1\t11\t11\t211\t211\t3211\t8211\t22\t23\tVDAAAA\tXPHAAA\tHHHHxx\n4375\t5146\t1\t3\t5\t15\t75\t375\t375\t4375\t4375\t150\t151\tHMAAAA\tYPHAAA\tOOOOxx\n3257\t5147\t1\t1\t7\t17\t57\t257\t1257\t3257\t3257\t114\t115\tHVAAAA\tZPHAAA\tVVVVxx\n6239\t5148\t1\t3\t9\t19\t39\t239\t239\t1239\t6239\t78\t79\tZFAAAA\tAQHAAA\tAAAAxx\n3602\t5149\t0\t2\t2\t2\t2\t602\t1602\t3602\t3602\t4\t5\tOIAAAA\tBQHAAA\tHHHHxx\n9830\t5150\t0\t2\t0\t10\t30\t830\t1830\t4830\t9830\t60\t61\tCOAAAA\tCQHAAA\tOOOOxx\n7826\t5151\t0\t2\t6\t6\t26\t826\t1826\t2826\t7826\t52\t53\tAPAAAA\tDQHAAA\tVVVVxx\n2108\t5152\t0\t0\t8\t8\t8\t108\t108\t2108\t2108\t16\t17\tCDAAAA\tEQHAAA\tAAAAxx\n7245\t5153\t1\t1\t5\t5\t45\t245\t1245\t2245\t7245\t90\t91\tRSAAAA\tFQHAAA\tHHHHxx\n8330\t5154\t0\t2\t0\t10\t30\t330\t330\t3330\t8330\t60\t61\tKIAAAA\tGQHAAA\tOOOOxx\n7441\t5155\t1\t1\t1\t1\t41\t441\t1441\t2441\t7441\t82\t83\tFAAAAA\tHQHAAA\tVVVVxx\n9848\t5156\t0\t0\t8\t8\t48\t848\t1848\t4848\t9848\t96\t97\tUOAAAA\tIQHAAA\tAAAAxx\n1226\t5157\t0\t2\t6\t6\t26\t226\t1226\t1226\t1226\t52\t53\tEVAAAA\tJQHAAA\tHHHHxx\n414\t5158\t0\t2\t4\t14\t14\t414\t414\t414\t414\t28\t29\tYPAAAA\tKQHAAA\tOOOOxx\n1273\t5159\t1\t1\t3\t13\t73\t273\t1273\t1273\t1273\t146\t147\tZWAAAA\tLQHAAA\tVVVVxx\n9866\t5160\t0\t2\t6\t6\t66\t866\t1866\t4866\t9866\t132\t133\tMPAAAA\tMQHAAA\tAAAAxx\n4633\t5161\t1\t1\t3\t13\t33\t633\t633\t4633\t4633\t66\t67\tFWAAAA\tNQHAAA\tHHHHxx\n8727\t5162\t1\t3\t7\t7\t27\t727\t727\t3727\t8727\t54\t55\tRXAAAA\tOQHAAA\tOOOOxx\n5308\t5163\t0\t0\t8\t8\t8\t308\t1308\t308\t5308\t16\t17\tEWAAAA\tPQHAAA\tVVVVxx\n1395\t5164\t1\t3\t5\t15\t95\t395\t1395\t1395\t1395\t190\t191\tRBAAAA\tQQHAAA\tAAAAxx\n1825\t5165\t1\t1\t5\t5\t25\t825\t1825\t1825\t1825\t50\t51\tFSAAAA\tRQHAAA\tHHHHxx\n7606\t5166\t0\t2\t6\t6\t6\t606\t1606\t2606\t7606\t12\t13\tOGAAAA\tSQHAAA\tOOOOxx\n9390\t5167\t0\t2\t0\t10\t90\t390\t1390\t4390\t9390\t180\t181\tEXAAAA\tTQHAAA\tVVVVxx\n2376\t5168\t0\t0\t6\t16\t76\t376\t376\t2376\t2376\t152\t153\tKNAAAA\tUQHAAA\tAAAAxx\n2377\t5169\t1\t1\t7\t17\t77\t377\t377\t2377\t2377\t154\t155\tLNAAAA\tVQHAAA\tHHHHxx\n5346\t5170\t0\t2\t6\t6\t46\t346\t1346\t346\t5346\t92\t93\tQXAAAA\tWQHAAA\tOOOOxx\n4140\t5171\t0\t0\t0\t0\t40\t140\t140\t4140\t4140\t80\t81\tGDAAAA\tXQHAAA\tVVVVxx\n6032\t5172\t0\t0\t2\t12\t32\t32\t32\t1032\t6032\t64\t65\tAYAAAA\tYQHAAA\tAAAAxx\n9453\t5173\t1\t1\t3\t13\t53\t453\t1453\t4453\t9453\t106\t107\tPZAAAA\tZQHAAA\tHHHHxx\n9297\t5174\t1\t1\t7\t17\t97\t297\t1297\t4297\t9297\t194\t195\tPTAAAA\tARHAAA\tOOOOxx\n6455\t5175\t1\t3\t5\t15\t55\t455\t455\t1455\t6455\t110\t111\tHOAAAA\tBRHAAA\tVVVVxx\n4458\t5176\t0\t2\t8\t18\t58\t458\t458\t4458\t4458\t116\t117\tMPAAAA\tCRHAAA\tAAAAxx\n9516\t5177\t0\t0\t6\t16\t16\t516\t1516\t4516\t9516\t32\t33\tACAAAA\tDRHAAA\tHHHHxx\n6211\t5178\t1\t3\t1\t11\t11\t211\t211\t1211\t6211\t22\t23\tXEAAAA\tERHAAA\tOOOOxx\n526\t5179\t0\t2\t6\t6\t26\t526\t526\t526\t526\t52\t53\tGUAAAA\tFRHAAA\tVVVVxx\n3570\t5180\t0\t2\t0\t10\t70\t570\t1570\t3570\t3570\t140\t141\tIHAAAA\tGRHAAA\tAAAAxx\n4885\t5181\t1\t1\t5\t5\t85\t885\t885\t4885\t4885\t170\t171\tXFAAAA\tHRHAAA\tHHHHxx\n6390\t5182\t0\t2\t0\t10\t90\t390\t390\t1390\t6390\t180\t181\tULAAAA\tIRHAAA\tOOOOxx\n1606\t5183\t0\t2\t6\t6\t6\t606\t1606\t1606\t1606\t12\t13\tUJAAAA\tJRHAAA\tVVVVxx\n7850\t5184\t0\t2\t0\t10\t50\t850\t1850\t2850\t7850\t100\t101\tYPAAAA\tKRHAAA\tAAAAxx\n3315\t5185\t1\t3\t5\t15\t15\t315\t1315\t3315\t3315\t30\t31\tNXAAAA\tLRHAAA\tHHHHxx\n8322\t5186\t0\t2\t2\t2\t22\t322\t322\t3322\t8322\t44\t45\tCIAAAA\tMRHAAA\tOOOOxx\n3703\t5187\t1\t3\t3\t3\t3\t703\t1703\t3703\t3703\t6\t7\tLMAAAA\tNRHAAA\tVVVVxx\n9489\t5188\t1\t1\t9\t9\t89\t489\t1489\t4489\t9489\t178\t179\tZAAAAA\tORHAAA\tAAAAxx\n6104\t5189\t0\t0\t4\t4\t4\t104\t104\t1104\t6104\t8\t9\tUAAAAA\tPRHAAA\tHHHHxx\n3067\t5190\t1\t3\t7\t7\t67\t67\t1067\t3067\t3067\t134\t135\tZNAAAA\tQRHAAA\tOOOOxx\n2521\t5191\t1\t1\t1\t1\t21\t521\t521\t2521\t2521\t42\t43\tZSAAAA\tRRHAAA\tVVVVxx\n2581\t5192\t1\t1\t1\t1\t81\t581\t581\t2581\t2581\t162\t163\tHVAAAA\tSRHAAA\tAAAAxx\n595\t5193\t1\t3\t5\t15\t95\t595\t595\t595\t595\t190\t191\tXWAAAA\tTRHAAA\tHHHHxx\n8291\t5194\t1\t3\t1\t11\t91\t291\t291\t3291\t8291\t182\t183\tXGAAAA\tURHAAA\tOOOOxx\n1727\t5195\t1\t3\t7\t7\t27\t727\t1727\t1727\t1727\t54\t55\tLOAAAA\tVRHAAA\tVVVVxx\n6847\t5196\t1\t3\t7\t7\t47\t847\t847\t1847\t6847\t94\t95\tJDAAAA\tWRHAAA\tAAAAxx\n7494\t5197\t0\t2\t4\t14\t94\t494\t1494\t2494\t7494\t188\t189\tGCAAAA\tXRHAAA\tHHHHxx\n7093\t5198\t1\t1\t3\t13\t93\t93\t1093\t2093\t7093\t186\t187\tVMAAAA\tYRHAAA\tOOOOxx\n7357\t5199\t1\t1\t7\t17\t57\t357\t1357\t2357\t7357\t114\t115\tZWAAAA\tZRHAAA\tVVVVxx\n620\t5200\t0\t0\t0\t0\t20\t620\t620\t620\t620\t40\t41\tWXAAAA\tASHAAA\tAAAAxx\n2460\t5201\t0\t0\t0\t0\t60\t460\t460\t2460\t2460\t120\t121\tQQAAAA\tBSHAAA\tHHHHxx\n1598\t5202\t0\t2\t8\t18\t98\t598\t1598\t1598\t1598\t196\t197\tMJAAAA\tCSHAAA\tOOOOxx\n4112\t5203\t0\t0\t2\t12\t12\t112\t112\t4112\t4112\t24\t25\tECAAAA\tDSHAAA\tVVVVxx\n2956\t5204\t0\t0\t6\t16\t56\t956\t956\t2956\t2956\t112\t113\tSJAAAA\tESHAAA\tAAAAxx\n3193\t5205\t1\t1\t3\t13\t93\t193\t1193\t3193\t3193\t186\t187\tVSAAAA\tFSHAAA\tHHHHxx\n6356\t5206\t0\t0\t6\t16\t56\t356\t356\t1356\t6356\t112\t113\tMKAAAA\tGSHAAA\tOOOOxx\n730\t5207\t0\t2\t0\t10\t30\t730\t730\t730\t730\t60\t61\tCCAAAA\tHSHAAA\tVVVVxx\n8826\t5208\t0\t2\t6\t6\t26\t826\t826\t3826\t8826\t52\t53\tMBAAAA\tISHAAA\tAAAAxx\n9036\t5209\t0\t0\t6\t16\t36\t36\t1036\t4036\t9036\t72\t73\tOJAAAA\tJSHAAA\tHHHHxx\n2085\t5210\t1\t1\t5\t5\t85\t85\t85\t2085\t2085\t170\t171\tFCAAAA\tKSHAAA\tOOOOxx\n9007\t5211\t1\t3\t7\t7\t7\t7\t1007\t4007\t9007\t14\t15\tLIAAAA\tLSHAAA\tVVVVxx\n6047\t5212\t1\t3\t7\t7\t47\t47\t47\t1047\t6047\t94\t95\tPYAAAA\tMSHAAA\tAAAAxx\n3953\t5213\t1\t1\t3\t13\t53\t953\t1953\t3953\t3953\t106\t107\tBWAAAA\tNSHAAA\tHHHHxx\n1214\t5214\t0\t2\t4\t14\t14\t214\t1214\t1214\t1214\t28\t29\tSUAAAA\tOSHAAA\tOOOOxx\n4814\t5215\t0\t2\t4\t14\t14\t814\t814\t4814\t4814\t28\t29\tEDAAAA\tPSHAAA\tVVVVxx\n5738\t5216\t0\t2\t8\t18\t38\t738\t1738\t738\t5738\t76\t77\tSMAAAA\tQSHAAA\tAAAAxx\n7176\t5217\t0\t0\t6\t16\t76\t176\t1176\t2176\t7176\t152\t153\tAQAAAA\tRSHAAA\tHHHHxx\n3609\t5218\t1\t1\t9\t9\t9\t609\t1609\t3609\t3609\t18\t19\tVIAAAA\tSSHAAA\tOOOOxx\n592\t5219\t0\t0\t2\t12\t92\t592\t592\t592\t592\t184\t185\tUWAAAA\tTSHAAA\tVVVVxx\n9391\t5220\t1\t3\t1\t11\t91\t391\t1391\t4391\t9391\t182\t183\tFXAAAA\tUSHAAA\tAAAAxx\n5345\t5221\t1\t1\t5\t5\t45\t345\t1345\t345\t5345\t90\t91\tPXAAAA\tVSHAAA\tHHHHxx\n1171\t5222\t1\t3\t1\t11\t71\t171\t1171\t1171\t1171\t142\t143\tBTAAAA\tWSHAAA\tOOOOxx\n7238\t5223\t0\t2\t8\t18\t38\t238\t1238\t2238\t7238\t76\t77\tKSAAAA\tXSHAAA\tVVVVxx\n7561\t5224\t1\t1\t1\t1\t61\t561\t1561\t2561\t7561\t122\t123\tVEAAAA\tYSHAAA\tAAAAxx\n5876\t5225\t0\t0\t6\t16\t76\t876\t1876\t876\t5876\t152\t153\tASAAAA\tZSHAAA\tHHHHxx\n6611\t5226\t1\t3\t1\t11\t11\t611\t611\t1611\t6611\t22\t23\tHUAAAA\tATHAAA\tOOOOxx\n7300\t5227\t0\t0\t0\t0\t0\t300\t1300\t2300\t7300\t0\t1\tUUAAAA\tBTHAAA\tVVVVxx\n1506\t5228\t0\t2\t6\t6\t6\t506\t1506\t1506\t1506\t12\t13\tYFAAAA\tCTHAAA\tAAAAxx\n1153\t5229\t1\t1\t3\t13\t53\t153\t1153\t1153\t1153\t106\t107\tJSAAAA\tDTHAAA\tHHHHxx\n3831\t5230\t1\t3\t1\t11\t31\t831\t1831\t3831\t3831\t62\t63\tJRAAAA\tETHAAA\tOOOOxx\n9255\t5231\t1\t3\t5\t15\t55\t255\t1255\t4255\t9255\t110\t111\tZRAAAA\tFTHAAA\tVVVVxx\n1841\t5232\t1\t1\t1\t1\t41\t841\t1841\t1841\t1841\t82\t83\tVSAAAA\tGTHAAA\tAAAAxx\n5075\t5233\t1\t3\t5\t15\t75\t75\t1075\t75\t5075\t150\t151\tFNAAAA\tHTHAAA\tHHHHxx\n101\t5234\t1\t1\t1\t1\t1\t101\t101\t101\t101\t2\t3\tXDAAAA\tITHAAA\tOOOOxx\n2627\t5235\t1\t3\t7\t7\t27\t627\t627\t2627\t2627\t54\t55\tBXAAAA\tJTHAAA\tVVVVxx\n7078\t5236\t0\t2\t8\t18\t78\t78\t1078\t2078\t7078\t156\t157\tGMAAAA\tKTHAAA\tAAAAxx\n2850\t5237\t0\t2\t0\t10\t50\t850\t850\t2850\t2850\t100\t101\tQFAAAA\tLTHAAA\tHHHHxx\n8703\t5238\t1\t3\t3\t3\t3\t703\t703\t3703\t8703\t6\t7\tTWAAAA\tMTHAAA\tOOOOxx\n4101\t5239\t1\t1\t1\t1\t1\t101\t101\t4101\t4101\t2\t3\tTBAAAA\tNTHAAA\tVVVVxx\n318\t5240\t0\t2\t8\t18\t18\t318\t318\t318\t318\t36\t37\tGMAAAA\tOTHAAA\tAAAAxx\n6452\t5241\t0\t0\t2\t12\t52\t452\t452\t1452\t6452\t104\t105\tEOAAAA\tPTHAAA\tHHHHxx\n5558\t5242\t0\t2\t8\t18\t58\t558\t1558\t558\t5558\t116\t117\tUFAAAA\tQTHAAA\tOOOOxx\n3127\t5243\t1\t3\t7\t7\t27\t127\t1127\t3127\t3127\t54\t55\tHQAAAA\tRTHAAA\tVVVVxx\n535\t5244\t1\t3\t5\t15\t35\t535\t535\t535\t535\t70\t71\tPUAAAA\tSTHAAA\tAAAAxx\n270\t5245\t0\t2\t0\t10\t70\t270\t270\t270\t270\t140\t141\tKKAAAA\tTTHAAA\tHHHHxx\n4038\t5246\t0\t2\t8\t18\t38\t38\t38\t4038\t4038\t76\t77\tIZAAAA\tUTHAAA\tOOOOxx\n3404\t5247\t0\t0\t4\t4\t4\t404\t1404\t3404\t3404\t8\t9\tYAAAAA\tVTHAAA\tVVVVxx\n2374\t5248\t0\t2\t4\t14\t74\t374\t374\t2374\t2374\t148\t149\tINAAAA\tWTHAAA\tAAAAxx\n6446\t5249\t0\t2\t6\t6\t46\t446\t446\t1446\t6446\t92\t93\tYNAAAA\tXTHAAA\tHHHHxx\n7758\t5250\t0\t2\t8\t18\t58\t758\t1758\t2758\t7758\t116\t117\tKMAAAA\tYTHAAA\tOOOOxx\n356\t5251\t0\t0\t6\t16\t56\t356\t356\t356\t356\t112\t113\tSNAAAA\tZTHAAA\tVVVVxx\n9197\t5252\t1\t1\t7\t17\t97\t197\t1197\t4197\t9197\t194\t195\tTPAAAA\tAUHAAA\tAAAAxx\n9765\t5253\t1\t1\t5\t5\t65\t765\t1765\t4765\t9765\t130\t131\tPLAAAA\tBUHAAA\tHHHHxx\n4974\t5254\t0\t2\t4\t14\t74\t974\t974\t4974\t4974\t148\t149\tIJAAAA\tCUHAAA\tOOOOxx\n442\t5255\t0\t2\t2\t2\t42\t442\t442\t442\t442\t84\t85\tARAAAA\tDUHAAA\tVVVVxx\n4349\t5256\t1\t1\t9\t9\t49\t349\t349\t4349\t4349\t98\t99\tHLAAAA\tEUHAAA\tAAAAxx\n6119\t5257\t1\t3\t9\t19\t19\t119\t119\t1119\t6119\t38\t39\tJBAAAA\tFUHAAA\tHHHHxx\n7574\t5258\t0\t2\t4\t14\t74\t574\t1574\t2574\t7574\t148\t149\tIFAAAA\tGUHAAA\tOOOOxx\n4445\t5259\t1\t1\t5\t5\t45\t445\t445\t4445\t4445\t90\t91\tZOAAAA\tHUHAAA\tVVVVxx\n940\t5260\t0\t0\t0\t0\t40\t940\t940\t940\t940\t80\t81\tEKAAAA\tIUHAAA\tAAAAxx\n1875\t5261\t1\t3\t5\t15\t75\t875\t1875\t1875\t1875\t150\t151\tDUAAAA\tJUHAAA\tHHHHxx\n5951\t5262\t1\t3\t1\t11\t51\t951\t1951\t951\t5951\t102\t103\tXUAAAA\tKUHAAA\tOOOOxx\n9132\t5263\t0\t0\t2\t12\t32\t132\t1132\t4132\t9132\t64\t65\tGNAAAA\tLUHAAA\tVVVVxx\n6913\t5264\t1\t1\t3\t13\t13\t913\t913\t1913\t6913\t26\t27\tXFAAAA\tMUHAAA\tAAAAxx\n3308\t5265\t0\t0\t8\t8\t8\t308\t1308\t3308\t3308\t16\t17\tGXAAAA\tNUHAAA\tHHHHxx\n7553\t5266\t1\t1\t3\t13\t53\t553\t1553\t2553\t7553\t106\t107\tNEAAAA\tOUHAAA\tOOOOxx\n2138\t5267\t0\t2\t8\t18\t38\t138\t138\t2138\t2138\t76\t77\tGEAAAA\tPUHAAA\tVVVVxx\n6252\t5268\t0\t0\t2\t12\t52\t252\t252\t1252\t6252\t104\t105\tMGAAAA\tQUHAAA\tAAAAxx\n2171\t5269\t1\t3\t1\t11\t71\t171\t171\t2171\t2171\t142\t143\tNFAAAA\tRUHAAA\tHHHHxx\n4159\t5270\t1\t3\t9\t19\t59\t159\t159\t4159\t4159\t118\t119\tZDAAAA\tSUHAAA\tOOOOxx\n2401\t5271\t1\t1\t1\t1\t1\t401\t401\t2401\t2401\t2\t3\tJOAAAA\tTUHAAA\tVVVVxx\n6553\t5272\t1\t1\t3\t13\t53\t553\t553\t1553\t6553\t106\t107\tBSAAAA\tUUHAAA\tAAAAxx\n5217\t5273\t1\t1\t7\t17\t17\t217\t1217\t217\t5217\t34\t35\tRSAAAA\tVUHAAA\tHHHHxx\n1405\t5274\t1\t1\t5\t5\t5\t405\t1405\t1405\t1405\t10\t11\tBCAAAA\tWUHAAA\tOOOOxx\n1494\t5275\t0\t2\t4\t14\t94\t494\t1494\t1494\t1494\t188\t189\tMFAAAA\tXUHAAA\tVVVVxx\n5553\t5276\t1\t1\t3\t13\t53\t553\t1553\t553\t5553\t106\t107\tPFAAAA\tYUHAAA\tAAAAxx\n8296\t5277\t0\t0\t6\t16\t96\t296\t296\t3296\t8296\t192\t193\tCHAAAA\tZUHAAA\tHHHHxx\n6565\t5278\t1\t1\t5\t5\t65\t565\t565\t1565\t6565\t130\t131\tNSAAAA\tAVHAAA\tOOOOxx\n817\t5279\t1\t1\t7\t17\t17\t817\t817\t817\t817\t34\t35\tLFAAAA\tBVHAAA\tVVVVxx\n6947\t5280\t1\t3\t7\t7\t47\t947\t947\t1947\t6947\t94\t95\tFHAAAA\tCVHAAA\tAAAAxx\n4184\t5281\t0\t0\t4\t4\t84\t184\t184\t4184\t4184\t168\t169\tYEAAAA\tDVHAAA\tHHHHxx\n6577\t5282\t1\t1\t7\t17\t77\t577\t577\t1577\t6577\t154\t155\tZSAAAA\tEVHAAA\tOOOOxx\n6424\t5283\t0\t0\t4\t4\t24\t424\t424\t1424\t6424\t48\t49\tCNAAAA\tFVHAAA\tVVVVxx\n2482\t5284\t0\t2\t2\t2\t82\t482\t482\t2482\t2482\t164\t165\tMRAAAA\tGVHAAA\tAAAAxx\n6874\t5285\t0\t2\t4\t14\t74\t874\t874\t1874\t6874\t148\t149\tKEAAAA\tHVHAAA\tHHHHxx\n7601\t5286\t1\t1\t1\t1\t1\t601\t1601\t2601\t7601\t2\t3\tJGAAAA\tIVHAAA\tOOOOxx\n4552\t5287\t0\t0\t2\t12\t52\t552\t552\t4552\t4552\t104\t105\tCTAAAA\tJVHAAA\tVVVVxx\n8406\t5288\t0\t2\t6\t6\t6\t406\t406\t3406\t8406\t12\t13\tILAAAA\tKVHAAA\tAAAAxx\n2924\t5289\t0\t0\t4\t4\t24\t924\t924\t2924\t2924\t48\t49\tMIAAAA\tLVHAAA\tHHHHxx\n8255\t5290\t1\t3\t5\t15\t55\t255\t255\t3255\t8255\t110\t111\tNFAAAA\tMVHAAA\tOOOOxx\n4920\t5291\t0\t0\t0\t0\t20\t920\t920\t4920\t4920\t40\t41\tGHAAAA\tNVHAAA\tVVVVxx\n228\t5292\t0\t0\t8\t8\t28\t228\t228\t228\t228\t56\t57\tUIAAAA\tOVHAAA\tAAAAxx\n9431\t5293\t1\t3\t1\t11\t31\t431\t1431\t4431\t9431\t62\t63\tTYAAAA\tPVHAAA\tHHHHxx\n4021\t5294\t1\t1\t1\t1\t21\t21\t21\t4021\t4021\t42\t43\tRYAAAA\tQVHAAA\tOOOOxx\n2966\t5295\t0\t2\t6\t6\t66\t966\t966\t2966\t2966\t132\t133\tCKAAAA\tRVHAAA\tVVVVxx\n2862\t5296\t0\t2\t2\t2\t62\t862\t862\t2862\t2862\t124\t125\tCGAAAA\tSVHAAA\tAAAAxx\n4303\t5297\t1\t3\t3\t3\t3\t303\t303\t4303\t4303\t6\t7\tNJAAAA\tTVHAAA\tHHHHxx\n9643\t5298\t1\t3\t3\t3\t43\t643\t1643\t4643\t9643\t86\t87\tXGAAAA\tUVHAAA\tOOOOxx\n3008\t5299\t0\t0\t8\t8\t8\t8\t1008\t3008\t3008\t16\t17\tSLAAAA\tVVHAAA\tVVVVxx\n7476\t5300\t0\t0\t6\t16\t76\t476\t1476\t2476\t7476\t152\t153\tOBAAAA\tWVHAAA\tAAAAxx\n3686\t5301\t0\t2\t6\t6\t86\t686\t1686\t3686\t3686\t172\t173\tULAAAA\tXVHAAA\tHHHHxx\n9051\t5302\t1\t3\t1\t11\t51\t51\t1051\t4051\t9051\t102\t103\tDKAAAA\tYVHAAA\tOOOOxx\n6592\t5303\t0\t0\t2\t12\t92\t592\t592\t1592\t6592\t184\t185\tOTAAAA\tZVHAAA\tVVVVxx\n924\t5304\t0\t0\t4\t4\t24\t924\t924\t924\t924\t48\t49\tOJAAAA\tAWHAAA\tAAAAxx\n4406\t5305\t0\t2\t6\t6\t6\t406\t406\t4406\t4406\t12\t13\tMNAAAA\tBWHAAA\tHHHHxx\n5233\t5306\t1\t1\t3\t13\t33\t233\t1233\t233\t5233\t66\t67\tHTAAAA\tCWHAAA\tOOOOxx\n8881\t5307\t1\t1\t1\t1\t81\t881\t881\t3881\t8881\t162\t163\tPDAAAA\tDWHAAA\tVVVVxx\n2212\t5308\t0\t0\t2\t12\t12\t212\t212\t2212\t2212\t24\t25\tCHAAAA\tEWHAAA\tAAAAxx\n5804\t5309\t0\t0\t4\t4\t4\t804\t1804\t804\t5804\t8\t9\tGPAAAA\tFWHAAA\tHHHHxx\n2990\t5310\t0\t2\t0\t10\t90\t990\t990\t2990\t2990\t180\t181\tALAAAA\tGWHAAA\tOOOOxx\n4069\t5311\t1\t1\t9\t9\t69\t69\t69\t4069\t4069\t138\t139\tNAAAAA\tHWHAAA\tVVVVxx\n5380\t5312\t0\t0\t0\t0\t80\t380\t1380\t380\t5380\t160\t161\tYYAAAA\tIWHAAA\tAAAAxx\n5016\t5313\t0\t0\t6\t16\t16\t16\t1016\t16\t5016\t32\t33\tYKAAAA\tJWHAAA\tHHHHxx\n5056\t5314\t0\t0\t6\t16\t56\t56\t1056\t56\t5056\t112\t113\tMMAAAA\tKWHAAA\tOOOOxx\n3732\t5315\t0\t0\t2\t12\t32\t732\t1732\t3732\t3732\t64\t65\tONAAAA\tLWHAAA\tVVVVxx\n5527\t5316\t1\t3\t7\t7\t27\t527\t1527\t527\t5527\t54\t55\tPEAAAA\tMWHAAA\tAAAAxx\n1151\t5317\t1\t3\t1\t11\t51\t151\t1151\t1151\t1151\t102\t103\tHSAAAA\tNWHAAA\tHHHHxx\n7900\t5318\t0\t0\t0\t0\t0\t900\t1900\t2900\t7900\t0\t1\tWRAAAA\tOWHAAA\tOOOOxx\n1660\t5319\t0\t0\t0\t0\t60\t660\t1660\t1660\t1660\t120\t121\tWLAAAA\tPWHAAA\tVVVVxx\n8064\t5320\t0\t0\t4\t4\t64\t64\t64\t3064\t8064\t128\t129\tEYAAAA\tQWHAAA\tAAAAxx\n8240\t5321\t0\t0\t0\t0\t40\t240\t240\t3240\t8240\t80\t81\tYEAAAA\tRWHAAA\tHHHHxx\n413\t5322\t1\t1\t3\t13\t13\t413\t413\t413\t413\t26\t27\tXPAAAA\tSWHAAA\tOOOOxx\n8311\t5323\t1\t3\t1\t11\t11\t311\t311\t3311\t8311\t22\t23\tRHAAAA\tTWHAAA\tVVVVxx\n1065\t5324\t1\t1\t5\t5\t65\t65\t1065\t1065\t1065\t130\t131\tZOAAAA\tUWHAAA\tAAAAxx\n2741\t5325\t1\t1\t1\t1\t41\t741\t741\t2741\t2741\t82\t83\tLBAAAA\tVWHAAA\tHHHHxx\n5306\t5326\t0\t2\t6\t6\t6\t306\t1306\t306\t5306\t12\t13\tCWAAAA\tWWHAAA\tOOOOxx\n5464\t5327\t0\t0\t4\t4\t64\t464\t1464\t464\t5464\t128\t129\tECAAAA\tXWHAAA\tVVVVxx\n4237\t5328\t1\t1\t7\t17\t37\t237\t237\t4237\t4237\t74\t75\tZGAAAA\tYWHAAA\tAAAAxx\n3822\t5329\t0\t2\t2\t2\t22\t822\t1822\t3822\t3822\t44\t45\tARAAAA\tZWHAAA\tHHHHxx\n2548\t5330\t0\t0\t8\t8\t48\t548\t548\t2548\t2548\t96\t97\tAUAAAA\tAXHAAA\tOOOOxx\n2688\t5331\t0\t0\t8\t8\t88\t688\t688\t2688\t2688\t176\t177\tKZAAAA\tBXHAAA\tVVVVxx\n8061\t5332\t1\t1\t1\t1\t61\t61\t61\t3061\t8061\t122\t123\tBYAAAA\tCXHAAA\tAAAAxx\n9340\t5333\t0\t0\t0\t0\t40\t340\t1340\t4340\t9340\t80\t81\tGVAAAA\tDXHAAA\tHHHHxx\n4031\t5334\t1\t3\t1\t11\t31\t31\t31\t4031\t4031\t62\t63\tBZAAAA\tEXHAAA\tOOOOxx\n2635\t5335\t1\t3\t5\t15\t35\t635\t635\t2635\t2635\t70\t71\tJXAAAA\tFXHAAA\tVVVVxx\n809\t5336\t1\t1\t9\t9\t9\t809\t809\t809\t809\t18\t19\tDFAAAA\tGXHAAA\tAAAAxx\n3209\t5337\t1\t1\t9\t9\t9\t209\t1209\t3209\t3209\t18\t19\tLTAAAA\tHXHAAA\tHHHHxx\n3825\t5338\t1\t1\t5\t5\t25\t825\t1825\t3825\t3825\t50\t51\tDRAAAA\tIXHAAA\tOOOOxx\n1448\t5339\t0\t0\t8\t8\t48\t448\t1448\t1448\t1448\t96\t97\tSDAAAA\tJXHAAA\tVVVVxx\n9077\t5340\t1\t1\t7\t17\t77\t77\t1077\t4077\t9077\t154\t155\tDLAAAA\tKXHAAA\tAAAAxx\n3730\t5341\t0\t2\t0\t10\t30\t730\t1730\t3730\t3730\t60\t61\tMNAAAA\tLXHAAA\tHHHHxx\n9596\t5342\t0\t0\t6\t16\t96\t596\t1596\t4596\t9596\t192\t193\tCFAAAA\tMXHAAA\tOOOOxx\n3563\t5343\t1\t3\t3\t3\t63\t563\t1563\t3563\t3563\t126\t127\tBHAAAA\tNXHAAA\tVVVVxx\n4116\t5344\t0\t0\t6\t16\t16\t116\t116\t4116\t4116\t32\t33\tICAAAA\tOXHAAA\tAAAAxx\n4825\t5345\t1\t1\t5\t5\t25\t825\t825\t4825\t4825\t50\t51\tPDAAAA\tPXHAAA\tHHHHxx\n8376\t5346\t0\t0\t6\t16\t76\t376\t376\t3376\t8376\t152\t153\tEKAAAA\tQXHAAA\tOOOOxx\n3917\t5347\t1\t1\t7\t17\t17\t917\t1917\t3917\t3917\t34\t35\tRUAAAA\tRXHAAA\tVVVVxx\n4407\t5348\t1\t3\t7\t7\t7\t407\t407\t4407\t4407\t14\t15\tNNAAAA\tSXHAAA\tAAAAxx\n8202\t5349\t0\t2\t2\t2\t2\t202\t202\t3202\t8202\t4\t5\tMDAAAA\tTXHAAA\tHHHHxx\n7675\t5350\t1\t3\t5\t15\t75\t675\t1675\t2675\t7675\t150\t151\tFJAAAA\tUXHAAA\tOOOOxx\n4104\t5351\t0\t0\t4\t4\t4\t104\t104\t4104\t4104\t8\t9\tWBAAAA\tVXHAAA\tVVVVxx\n9225\t5352\t1\t1\t5\t5\t25\t225\t1225\t4225\t9225\t50\t51\tVQAAAA\tWXHAAA\tAAAAxx\n2834\t5353\t0\t2\t4\t14\t34\t834\t834\t2834\t2834\t68\t69\tAFAAAA\tXXHAAA\tHHHHxx\n1227\t5354\t1\t3\t7\t7\t27\t227\t1227\t1227\t1227\t54\t55\tFVAAAA\tYXHAAA\tOOOOxx\n3383\t5355\t1\t3\t3\t3\t83\t383\t1383\t3383\t3383\t166\t167\tDAAAAA\tZXHAAA\tVVVVxx\n67\t5356\t1\t3\t7\t7\t67\t67\t67\t67\t67\t134\t135\tPCAAAA\tAYHAAA\tAAAAxx\n1751\t5357\t1\t3\t1\t11\t51\t751\t1751\t1751\t1751\t102\t103\tJPAAAA\tBYHAAA\tHHHHxx\n8054\t5358\t0\t2\t4\t14\t54\t54\t54\t3054\t8054\t108\t109\tUXAAAA\tCYHAAA\tOOOOxx\n8571\t5359\t1\t3\t1\t11\t71\t571\t571\t3571\t8571\t142\t143\tRRAAAA\tDYHAAA\tVVVVxx\n2466\t5360\t0\t2\t6\t6\t66\t466\t466\t2466\t2466\t132\t133\tWQAAAA\tEYHAAA\tAAAAxx\n9405\t5361\t1\t1\t5\t5\t5\t405\t1405\t4405\t9405\t10\t11\tTXAAAA\tFYHAAA\tHHHHxx\n6883\t5362\t1\t3\t3\t3\t83\t883\t883\t1883\t6883\t166\t167\tTEAAAA\tGYHAAA\tOOOOxx\n4301\t5363\t1\t1\t1\t1\t1\t301\t301\t4301\t4301\t2\t3\tLJAAAA\tHYHAAA\tVVVVxx\n3705\t5364\t1\t1\t5\t5\t5\t705\t1705\t3705\t3705\t10\t11\tNMAAAA\tIYHAAA\tAAAAxx\n5420\t5365\t0\t0\t0\t0\t20\t420\t1420\t420\t5420\t40\t41\tMAAAAA\tJYHAAA\tHHHHxx\n3692\t5366\t0\t0\t2\t12\t92\t692\t1692\t3692\t3692\t184\t185\tAMAAAA\tKYHAAA\tOOOOxx\n6851\t5367\t1\t3\t1\t11\t51\t851\t851\t1851\t6851\t102\t103\tNDAAAA\tLYHAAA\tVVVVxx\n9363\t5368\t1\t3\t3\t3\t63\t363\t1363\t4363\t9363\t126\t127\tDWAAAA\tMYHAAA\tAAAAxx\n2269\t5369\t1\t1\t9\t9\t69\t269\t269\t2269\t2269\t138\t139\tHJAAAA\tNYHAAA\tHHHHxx\n4918\t5370\t0\t2\t8\t18\t18\t918\t918\t4918\t4918\t36\t37\tEHAAAA\tOYHAAA\tOOOOxx\n4297\t5371\t1\t1\t7\t17\t97\t297\t297\t4297\t4297\t194\t195\tHJAAAA\tPYHAAA\tVVVVxx\n1836\t5372\t0\t0\t6\t16\t36\t836\t1836\t1836\t1836\t72\t73\tQSAAAA\tQYHAAA\tAAAAxx\n237\t5373\t1\t1\t7\t17\t37\t237\t237\t237\t237\t74\t75\tDJAAAA\tRYHAAA\tHHHHxx\n6131\t5374\t1\t3\t1\t11\t31\t131\t131\t1131\t6131\t62\t63\tVBAAAA\tSYHAAA\tOOOOxx\n3174\t5375\t0\t2\t4\t14\t74\t174\t1174\t3174\t3174\t148\t149\tCSAAAA\tTYHAAA\tVVVVxx\n9987\t5376\t1\t3\t7\t7\t87\t987\t1987\t4987\t9987\t174\t175\tDUAAAA\tUYHAAA\tAAAAxx\n3630\t5377\t0\t2\t0\t10\t30\t630\t1630\t3630\t3630\t60\t61\tQJAAAA\tVYHAAA\tHHHHxx\n2899\t5378\t1\t3\t9\t19\t99\t899\t899\t2899\t2899\t198\t199\tNHAAAA\tWYHAAA\tOOOOxx\n4079\t5379\t1\t3\t9\t19\t79\t79\t79\t4079\t4079\t158\t159\tXAAAAA\tXYHAAA\tVVVVxx\n5049\t5380\t1\t1\t9\t9\t49\t49\t1049\t49\t5049\t98\t99\tFMAAAA\tYYHAAA\tAAAAxx\n2963\t5381\t1\t3\t3\t3\t63\t963\t963\t2963\t2963\t126\t127\tZJAAAA\tZYHAAA\tHHHHxx\n3962\t5382\t0\t2\t2\t2\t62\t962\t1962\t3962\t3962\t124\t125\tKWAAAA\tAZHAAA\tOOOOxx\n7921\t5383\t1\t1\t1\t1\t21\t921\t1921\t2921\t7921\t42\t43\tRSAAAA\tBZHAAA\tVVVVxx\n3967\t5384\t1\t3\t7\t7\t67\t967\t1967\t3967\t3967\t134\t135\tPWAAAA\tCZHAAA\tAAAAxx\n2752\t5385\t0\t0\t2\t12\t52\t752\t752\t2752\t2752\t104\t105\tWBAAAA\tDZHAAA\tHHHHxx\n7944\t5386\t0\t0\t4\t4\t44\t944\t1944\t2944\t7944\t88\t89\tOTAAAA\tEZHAAA\tOOOOxx\n2205\t5387\t1\t1\t5\t5\t5\t205\t205\t2205\t2205\t10\t11\tVGAAAA\tFZHAAA\tVVVVxx\n5035\t5388\t1\t3\t5\t15\t35\t35\t1035\t35\t5035\t70\t71\tRLAAAA\tGZHAAA\tAAAAxx\n1425\t5389\t1\t1\t5\t5\t25\t425\t1425\t1425\t1425\t50\t51\tVCAAAA\tHZHAAA\tHHHHxx\n832\t5390\t0\t0\t2\t12\t32\t832\t832\t832\t832\t64\t65\tAGAAAA\tIZHAAA\tOOOOxx\n1447\t5391\t1\t3\t7\t7\t47\t447\t1447\t1447\t1447\t94\t95\tRDAAAA\tJZHAAA\tVVVVxx\n6108\t5392\t0\t0\t8\t8\t8\t108\t108\t1108\t6108\t16\t17\tYAAAAA\tKZHAAA\tAAAAxx\n4936\t5393\t0\t0\t6\t16\t36\t936\t936\t4936\t4936\t72\t73\tWHAAAA\tLZHAAA\tHHHHxx\n7704\t5394\t0\t0\t4\t4\t4\t704\t1704\t2704\t7704\t8\t9\tIKAAAA\tMZHAAA\tOOOOxx\n142\t5395\t0\t2\t2\t2\t42\t142\t142\t142\t142\t84\t85\tMFAAAA\tNZHAAA\tVVVVxx\n4272\t5396\t0\t0\t2\t12\t72\t272\t272\t4272\t4272\t144\t145\tIIAAAA\tOZHAAA\tAAAAxx\n7667\t5397\t1\t3\t7\t7\t67\t667\t1667\t2667\t7667\t134\t135\tXIAAAA\tPZHAAA\tHHHHxx\n366\t5398\t0\t2\t6\t6\t66\t366\t366\t366\t366\t132\t133\tCOAAAA\tQZHAAA\tOOOOxx\n8866\t5399\t0\t2\t6\t6\t66\t866\t866\t3866\t8866\t132\t133\tADAAAA\tRZHAAA\tVVVVxx\n7712\t5400\t0\t0\t2\t12\t12\t712\t1712\t2712\t7712\t24\t25\tQKAAAA\tSZHAAA\tAAAAxx\n3880\t5401\t0\t0\t0\t0\t80\t880\t1880\t3880\t3880\t160\t161\tGTAAAA\tTZHAAA\tHHHHxx\n4631\t5402\t1\t3\t1\t11\t31\t631\t631\t4631\t4631\t62\t63\tDWAAAA\tUZHAAA\tOOOOxx\n2789\t5403\t1\t1\t9\t9\t89\t789\t789\t2789\t2789\t178\t179\tHDAAAA\tVZHAAA\tVVVVxx\n7720\t5404\t0\t0\t0\t0\t20\t720\t1720\t2720\t7720\t40\t41\tYKAAAA\tWZHAAA\tAAAAxx\n7618\t5405\t0\t2\t8\t18\t18\t618\t1618\t2618\t7618\t36\t37\tAHAAAA\tXZHAAA\tHHHHxx\n4990\t5406\t0\t2\t0\t10\t90\t990\t990\t4990\t4990\t180\t181\tYJAAAA\tYZHAAA\tOOOOxx\n7918\t5407\t0\t2\t8\t18\t18\t918\t1918\t2918\t7918\t36\t37\tOSAAAA\tZZHAAA\tVVVVxx\n5067\t5408\t1\t3\t7\t7\t67\t67\t1067\t67\t5067\t134\t135\tXMAAAA\tAAIAAA\tAAAAxx\n6370\t5409\t0\t2\t0\t10\t70\t370\t370\t1370\t6370\t140\t141\tALAAAA\tBAIAAA\tHHHHxx\n2268\t5410\t0\t0\t8\t8\t68\t268\t268\t2268\t2268\t136\t137\tGJAAAA\tCAIAAA\tOOOOxx\n1949\t5411\t1\t1\t9\t9\t49\t949\t1949\t1949\t1949\t98\t99\tZWAAAA\tDAIAAA\tVVVVxx\n5503\t5412\t1\t3\t3\t3\t3\t503\t1503\t503\t5503\t6\t7\tRDAAAA\tEAIAAA\tAAAAxx\n9951\t5413\t1\t3\t1\t11\t51\t951\t1951\t4951\t9951\t102\t103\tTSAAAA\tFAIAAA\tHHHHxx\n6823\t5414\t1\t3\t3\t3\t23\t823\t823\t1823\t6823\t46\t47\tLCAAAA\tGAIAAA\tOOOOxx\n6287\t5415\t1\t3\t7\t7\t87\t287\t287\t1287\t6287\t174\t175\tVHAAAA\tHAIAAA\tVVVVxx\n6016\t5416\t0\t0\t6\t16\t16\t16\t16\t1016\t6016\t32\t33\tKXAAAA\tIAIAAA\tAAAAxx\n1977\t5417\t1\t1\t7\t17\t77\t977\t1977\t1977\t1977\t154\t155\tBYAAAA\tJAIAAA\tHHHHxx\n8579\t5418\t1\t3\t9\t19\t79\t579\t579\t3579\t8579\t158\t159\tZRAAAA\tKAIAAA\tOOOOxx\n6204\t5419\t0\t0\t4\t4\t4\t204\t204\t1204\t6204\t8\t9\tQEAAAA\tLAIAAA\tVVVVxx\n9764\t5420\t0\t0\t4\t4\t64\t764\t1764\t4764\t9764\t128\t129\tOLAAAA\tMAIAAA\tAAAAxx\n2005\t5421\t1\t1\t5\t5\t5\t5\t5\t2005\t2005\t10\t11\tDZAAAA\tNAIAAA\tHHHHxx\n1648\t5422\t0\t0\t8\t8\t48\t648\t1648\t1648\t1648\t96\t97\tKLAAAA\tOAIAAA\tOOOOxx\n2457\t5423\t1\t1\t7\t17\t57\t457\t457\t2457\t2457\t114\t115\tNQAAAA\tPAIAAA\tVVVVxx\n2698\t5424\t0\t2\t8\t18\t98\t698\t698\t2698\t2698\t196\t197\tUZAAAA\tQAIAAA\tAAAAxx\n7730\t5425\t0\t2\t0\t10\t30\t730\t1730\t2730\t7730\t60\t61\tILAAAA\tRAIAAA\tHHHHxx\n7287\t5426\t1\t3\t7\t7\t87\t287\t1287\t2287\t7287\t174\t175\tHUAAAA\tSAIAAA\tOOOOxx\n2937\t5427\t1\t1\t7\t17\t37\t937\t937\t2937\t2937\t74\t75\tZIAAAA\tTAIAAA\tVVVVxx\n6824\t5428\t0\t0\t4\t4\t24\t824\t824\t1824\t6824\t48\t49\tMCAAAA\tUAIAAA\tAAAAxx\n9256\t5429\t0\t0\t6\t16\t56\t256\t1256\t4256\t9256\t112\t113\tASAAAA\tVAIAAA\tHHHHxx\n4810\t5430\t0\t2\t0\t10\t10\t810\t810\t4810\t4810\t20\t21\tADAAAA\tWAIAAA\tOOOOxx\n3869\t5431\t1\t1\t9\t9\t69\t869\t1869\t3869\t3869\t138\t139\tVSAAAA\tXAIAAA\tVVVVxx\n1993\t5432\t1\t1\t3\t13\t93\t993\t1993\t1993\t1993\t186\t187\tRYAAAA\tYAIAAA\tAAAAxx\n6048\t5433\t0\t0\t8\t8\t48\t48\t48\t1048\t6048\t96\t97\tQYAAAA\tZAIAAA\tHHHHxx\n6922\t5434\t0\t2\t2\t2\t22\t922\t922\t1922\t6922\t44\t45\tGGAAAA\tABIAAA\tOOOOxx\n8\t5435\t0\t0\t8\t8\t8\t8\t8\t8\t8\t16\t17\tIAAAAA\tBBIAAA\tVVVVxx\n6706\t5436\t0\t2\t6\t6\t6\t706\t706\t1706\t6706\t12\t13\tYXAAAA\tCBIAAA\tAAAAxx\n9159\t5437\t1\t3\t9\t19\t59\t159\t1159\t4159\t9159\t118\t119\tHOAAAA\tDBIAAA\tHHHHxx\n7020\t5438\t0\t0\t0\t0\t20\t20\t1020\t2020\t7020\t40\t41\tAKAAAA\tEBIAAA\tOOOOxx\n767\t5439\t1\t3\t7\t7\t67\t767\t767\t767\t767\t134\t135\tNDAAAA\tFBIAAA\tVVVVxx\n8602\t5440\t0\t2\t2\t2\t2\t602\t602\t3602\t8602\t4\t5\tWSAAAA\tGBIAAA\tAAAAxx\n4442\t5441\t0\t2\t2\t2\t42\t442\t442\t4442\t4442\t84\t85\tWOAAAA\tHBIAAA\tHHHHxx\n2040\t5442\t0\t0\t0\t0\t40\t40\t40\t2040\t2040\t80\t81\tMAAAAA\tIBIAAA\tOOOOxx\n5493\t5443\t1\t1\t3\t13\t93\t493\t1493\t493\t5493\t186\t187\tHDAAAA\tJBIAAA\tVVVVxx\n275\t5444\t1\t3\t5\t15\t75\t275\t275\t275\t275\t150\t151\tPKAAAA\tKBIAAA\tAAAAxx\n8876\t5445\t0\t0\t6\t16\t76\t876\t876\t3876\t8876\t152\t153\tKDAAAA\tLBIAAA\tHHHHxx\n7381\t5446\t1\t1\t1\t1\t81\t381\t1381\t2381\t7381\t162\t163\tXXAAAA\tMBIAAA\tOOOOxx\n1827\t5447\t1\t3\t7\t7\t27\t827\t1827\t1827\t1827\t54\t55\tHSAAAA\tNBIAAA\tVVVVxx\n3537\t5448\t1\t1\t7\t17\t37\t537\t1537\t3537\t3537\t74\t75\tBGAAAA\tOBIAAA\tAAAAxx\n6978\t5449\t0\t2\t8\t18\t78\t978\t978\t1978\t6978\t156\t157\tKIAAAA\tPBIAAA\tHHHHxx\n6160\t5450\t0\t0\t0\t0\t60\t160\t160\t1160\t6160\t120\t121\tYCAAAA\tQBIAAA\tOOOOxx\n9219\t5451\t1\t3\t9\t19\t19\t219\t1219\t4219\t9219\t38\t39\tPQAAAA\tRBIAAA\tVVVVxx\n5034\t5452\t0\t2\t4\t14\t34\t34\t1034\t34\t5034\t68\t69\tQLAAAA\tSBIAAA\tAAAAxx\n8463\t5453\t1\t3\t3\t3\t63\t463\t463\t3463\t8463\t126\t127\tNNAAAA\tTBIAAA\tHHHHxx\n2038\t5454\t0\t2\t8\t18\t38\t38\t38\t2038\t2038\t76\t77\tKAAAAA\tUBIAAA\tOOOOxx\n9562\t5455\t0\t2\t2\t2\t62\t562\t1562\t4562\t9562\t124\t125\tUDAAAA\tVBIAAA\tVVVVxx\n2687\t5456\t1\t3\t7\t7\t87\t687\t687\t2687\t2687\t174\t175\tJZAAAA\tWBIAAA\tAAAAxx\n5092\t5457\t0\t0\t2\t12\t92\t92\t1092\t92\t5092\t184\t185\tWNAAAA\tXBIAAA\tHHHHxx\n539\t5458\t1\t3\t9\t19\t39\t539\t539\t539\t539\t78\t79\tTUAAAA\tYBIAAA\tOOOOxx\n2139\t5459\t1\t3\t9\t19\t39\t139\t139\t2139\t2139\t78\t79\tHEAAAA\tZBIAAA\tVVVVxx\n9221\t5460\t1\t1\t1\t1\t21\t221\t1221\t4221\t9221\t42\t43\tRQAAAA\tACIAAA\tAAAAxx\n965\t5461\t1\t1\t5\t5\t65\t965\t965\t965\t965\t130\t131\tDLAAAA\tBCIAAA\tHHHHxx\n6051\t5462\t1\t3\t1\t11\t51\t51\t51\t1051\t6051\t102\t103\tTYAAAA\tCCIAAA\tOOOOxx\n5822\t5463\t0\t2\t2\t2\t22\t822\t1822\t822\t5822\t44\t45\tYPAAAA\tDCIAAA\tVVVVxx\n6397\t5464\t1\t1\t7\t17\t97\t397\t397\t1397\t6397\t194\t195\tBMAAAA\tECIAAA\tAAAAxx\n2375\t5465\t1\t3\t5\t15\t75\t375\t375\t2375\t2375\t150\t151\tJNAAAA\tFCIAAA\tHHHHxx\n9415\t5466\t1\t3\t5\t15\t15\t415\t1415\t4415\t9415\t30\t31\tDYAAAA\tGCIAAA\tOOOOxx\n6552\t5467\t0\t0\t2\t12\t52\t552\t552\t1552\t6552\t104\t105\tASAAAA\tHCIAAA\tVVVVxx\n2248\t5468\t0\t0\t8\t8\t48\t248\t248\t2248\t2248\t96\t97\tMIAAAA\tICIAAA\tAAAAxx\n2611\t5469\t1\t3\t1\t11\t11\t611\t611\t2611\t2611\t22\t23\tLWAAAA\tJCIAAA\tHHHHxx\n9609\t5470\t1\t1\t9\t9\t9\t609\t1609\t4609\t9609\t18\t19\tPFAAAA\tKCIAAA\tOOOOxx\n2132\t5471\t0\t0\t2\t12\t32\t132\t132\t2132\t2132\t64\t65\tAEAAAA\tLCIAAA\tVVVVxx\n8452\t5472\t0\t0\t2\t12\t52\t452\t452\t3452\t8452\t104\t105\tCNAAAA\tMCIAAA\tAAAAxx\n9407\t5473\t1\t3\t7\t7\t7\t407\t1407\t4407\t9407\t14\t15\tVXAAAA\tNCIAAA\tHHHHxx\n2814\t5474\t0\t2\t4\t14\t14\t814\t814\t2814\t2814\t28\t29\tGEAAAA\tOCIAAA\tOOOOxx\n1889\t5475\t1\t1\t9\t9\t89\t889\t1889\t1889\t1889\t178\t179\tRUAAAA\tPCIAAA\tVVVVxx\n7489\t5476\t1\t1\t9\t9\t89\t489\t1489\t2489\t7489\t178\t179\tBCAAAA\tQCIAAA\tAAAAxx\n2255\t5477\t1\t3\t5\t15\t55\t255\t255\t2255\t2255\t110\t111\tTIAAAA\tRCIAAA\tHHHHxx\n3380\t5478\t0\t0\t0\t0\t80\t380\t1380\t3380\t3380\t160\t161\tAAAAAA\tSCIAAA\tOOOOxx\n1167\t5479\t1\t3\t7\t7\t67\t167\t1167\t1167\t1167\t134\t135\tXSAAAA\tTCIAAA\tVVVVxx\n5369\t5480\t1\t1\t9\t9\t69\t369\t1369\t369\t5369\t138\t139\tNYAAAA\tUCIAAA\tAAAAxx\n2378\t5481\t0\t2\t8\t18\t78\t378\t378\t2378\t2378\t156\t157\tMNAAAA\tVCIAAA\tHHHHxx\n8315\t5482\t1\t3\t5\t15\t15\t315\t315\t3315\t8315\t30\t31\tVHAAAA\tWCIAAA\tOOOOxx\n2934\t5483\t0\t2\t4\t14\t34\t934\t934\t2934\t2934\t68\t69\tWIAAAA\tXCIAAA\tVVVVxx\n7924\t5484\t0\t0\t4\t4\t24\t924\t1924\t2924\t7924\t48\t49\tUSAAAA\tYCIAAA\tAAAAxx\n2867\t5485\t1\t3\t7\t7\t67\t867\t867\t2867\t2867\t134\t135\tHGAAAA\tZCIAAA\tHHHHxx\n9141\t5486\t1\t1\t1\t1\t41\t141\t1141\t4141\t9141\t82\t83\tPNAAAA\tADIAAA\tOOOOxx\n3613\t5487\t1\t1\t3\t13\t13\t613\t1613\t3613\t3613\t26\t27\tZIAAAA\tBDIAAA\tVVVVxx\n2461\t5488\t1\t1\t1\t1\t61\t461\t461\t2461\t2461\t122\t123\tRQAAAA\tCDIAAA\tAAAAxx\n4567\t5489\t1\t3\t7\t7\t67\t567\t567\t4567\t4567\t134\t135\tRTAAAA\tDDIAAA\tHHHHxx\n2906\t5490\t0\t2\t6\t6\t6\t906\t906\t2906\t2906\t12\t13\tUHAAAA\tEDIAAA\tOOOOxx\n4848\t5491\t0\t0\t8\t8\t48\t848\t848\t4848\t4848\t96\t97\tMEAAAA\tFDIAAA\tVVVVxx\n6614\t5492\t0\t2\t4\t14\t14\t614\t614\t1614\t6614\t28\t29\tKUAAAA\tGDIAAA\tAAAAxx\n6200\t5493\t0\t0\t0\t0\t0\t200\t200\t1200\t6200\t0\t1\tMEAAAA\tHDIAAA\tHHHHxx\n7895\t5494\t1\t3\t5\t15\t95\t895\t1895\t2895\t7895\t190\t191\tRRAAAA\tIDIAAA\tOOOOxx\n6829\t5495\t1\t1\t9\t9\t29\t829\t829\t1829\t6829\t58\t59\tRCAAAA\tJDIAAA\tVVVVxx\n4087\t5496\t1\t3\t7\t7\t87\t87\t87\t4087\t4087\t174\t175\tFBAAAA\tKDIAAA\tAAAAxx\n8787\t5497\t1\t3\t7\t7\t87\t787\t787\t3787\t8787\t174\t175\tZZAAAA\tLDIAAA\tHHHHxx\n3322\t5498\t0\t2\t2\t2\t22\t322\t1322\t3322\t3322\t44\t45\tUXAAAA\tMDIAAA\tOOOOxx\n9091\t5499\t1\t3\t1\t11\t91\t91\t1091\t4091\t9091\t182\t183\tRLAAAA\tNDIAAA\tVVVVxx\n5268\t5500\t0\t0\t8\t8\t68\t268\t1268\t268\t5268\t136\t137\tQUAAAA\tODIAAA\tAAAAxx\n2719\t5501\t1\t3\t9\t19\t19\t719\t719\t2719\t2719\t38\t39\tPAAAAA\tPDIAAA\tHHHHxx\n30\t5502\t0\t2\t0\t10\t30\t30\t30\t30\t30\t60\t61\tEBAAAA\tQDIAAA\tOOOOxx\n1975\t5503\t1\t3\t5\t15\t75\t975\t1975\t1975\t1975\t150\t151\tZXAAAA\tRDIAAA\tVVVVxx\n2641\t5504\t1\t1\t1\t1\t41\t641\t641\t2641\t2641\t82\t83\tPXAAAA\tSDIAAA\tAAAAxx\n8616\t5505\t0\t0\t6\t16\t16\t616\t616\t3616\t8616\t32\t33\tKTAAAA\tTDIAAA\tHHHHxx\n5980\t5506\t0\t0\t0\t0\t80\t980\t1980\t980\t5980\t160\t161\tAWAAAA\tUDIAAA\tOOOOxx\n5170\t5507\t0\t2\t0\t10\t70\t170\t1170\t170\t5170\t140\t141\tWQAAAA\tVDIAAA\tVVVVxx\n1960\t5508\t0\t0\t0\t0\t60\t960\t1960\t1960\t1960\t120\t121\tKXAAAA\tWDIAAA\tAAAAxx\n8141\t5509\t1\t1\t1\t1\t41\t141\t141\t3141\t8141\t82\t83\tDBAAAA\tXDIAAA\tHHHHxx\n6692\t5510\t0\t0\t2\t12\t92\t692\t692\t1692\t6692\t184\t185\tKXAAAA\tYDIAAA\tOOOOxx\n7621\t5511\t1\t1\t1\t1\t21\t621\t1621\t2621\t7621\t42\t43\tDHAAAA\tZDIAAA\tVVVVxx\n3890\t5512\t0\t2\t0\t10\t90\t890\t1890\t3890\t3890\t180\t181\tQTAAAA\tAEIAAA\tAAAAxx\n4300\t5513\t0\t0\t0\t0\t0\t300\t300\t4300\t4300\t0\t1\tKJAAAA\tBEIAAA\tHHHHxx\n736\t5514\t0\t0\t6\t16\t36\t736\t736\t736\t736\t72\t73\tICAAAA\tCEIAAA\tOOOOxx\n6626\t5515\t0\t2\t6\t6\t26\t626\t626\t1626\t6626\t52\t53\tWUAAAA\tDEIAAA\tVVVVxx\n1800\t5516\t0\t0\t0\t0\t0\t800\t1800\t1800\t1800\t0\t1\tGRAAAA\tEEIAAA\tAAAAxx\n3430\t5517\t0\t2\t0\t10\t30\t430\t1430\t3430\t3430\t60\t61\tYBAAAA\tFEIAAA\tHHHHxx\n9519\t5518\t1\t3\t9\t19\t19\t519\t1519\t4519\t9519\t38\t39\tDCAAAA\tGEIAAA\tOOOOxx\n5111\t5519\t1\t3\t1\t11\t11\t111\t1111\t111\t5111\t22\t23\tPOAAAA\tHEIAAA\tVVVVxx\n6915\t5520\t1\t3\t5\t15\t15\t915\t915\t1915\t6915\t30\t31\tZFAAAA\tIEIAAA\tAAAAxx\n9246\t5521\t0\t2\t6\t6\t46\t246\t1246\t4246\t9246\t92\t93\tQRAAAA\tJEIAAA\tHHHHxx\n5141\t5522\t1\t1\t1\t1\t41\t141\t1141\t141\t5141\t82\t83\tTPAAAA\tKEIAAA\tOOOOxx\n5922\t5523\t0\t2\t2\t2\t22\t922\t1922\t922\t5922\t44\t45\tUTAAAA\tLEIAAA\tVVVVxx\n3087\t5524\t1\t3\t7\t7\t87\t87\t1087\t3087\t3087\t174\t175\tTOAAAA\tMEIAAA\tAAAAxx\n1859\t5525\t1\t3\t9\t19\t59\t859\t1859\t1859\t1859\t118\t119\tNTAAAA\tNEIAAA\tHHHHxx\n8482\t5526\t0\t2\t2\t2\t82\t482\t482\t3482\t8482\t164\t165\tGOAAAA\tOEIAAA\tOOOOxx\n8414\t5527\t0\t2\t4\t14\t14\t414\t414\t3414\t8414\t28\t29\tQLAAAA\tPEIAAA\tVVVVxx\n6662\t5528\t0\t2\t2\t2\t62\t662\t662\t1662\t6662\t124\t125\tGWAAAA\tQEIAAA\tAAAAxx\n8614\t5529\t0\t2\t4\t14\t14\t614\t614\t3614\t8614\t28\t29\tITAAAA\tREIAAA\tHHHHxx\n42\t5530\t0\t2\t2\t2\t42\t42\t42\t42\t42\t84\t85\tQBAAAA\tSEIAAA\tOOOOxx\n7582\t5531\t0\t2\t2\t2\t82\t582\t1582\t2582\t7582\t164\t165\tQFAAAA\tTEIAAA\tVVVVxx\n8183\t5532\t1\t3\t3\t3\t83\t183\t183\t3183\t8183\t166\t167\tTCAAAA\tUEIAAA\tAAAAxx\n1299\t5533\t1\t3\t9\t19\t99\t299\t1299\t1299\t1299\t198\t199\tZXAAAA\tVEIAAA\tHHHHxx\n7004\t5534\t0\t0\t4\t4\t4\t4\t1004\t2004\t7004\t8\t9\tKJAAAA\tWEIAAA\tOOOOxx\n3298\t5535\t0\t2\t8\t18\t98\t298\t1298\t3298\t3298\t196\t197\tWWAAAA\tXEIAAA\tVVVVxx\n7884\t5536\t0\t0\t4\t4\t84\t884\t1884\t2884\t7884\t168\t169\tGRAAAA\tYEIAAA\tAAAAxx\n4191\t5537\t1\t3\t1\t11\t91\t191\t191\t4191\t4191\t182\t183\tFFAAAA\tZEIAAA\tHHHHxx\n7346\t5538\t0\t2\t6\t6\t46\t346\t1346\t2346\t7346\t92\t93\tOWAAAA\tAFIAAA\tOOOOxx\n7989\t5539\t1\t1\t9\t9\t89\t989\t1989\t2989\t7989\t178\t179\tHVAAAA\tBFIAAA\tVVVVxx\n5719\t5540\t1\t3\t9\t19\t19\t719\t1719\t719\t5719\t38\t39\tZLAAAA\tCFIAAA\tAAAAxx\n800\t5541\t0\t0\t0\t0\t0\t800\t800\t800\t800\t0\t1\tUEAAAA\tDFIAAA\tHHHHxx\n6509\t5542\t1\t1\t9\t9\t9\t509\t509\t1509\t6509\t18\t19\tJQAAAA\tEFIAAA\tOOOOxx\n4672\t5543\t0\t0\t2\t12\t72\t672\t672\t4672\t4672\t144\t145\tSXAAAA\tFFIAAA\tVVVVxx\n4434\t5544\t0\t2\t4\t14\t34\t434\t434\t4434\t4434\t68\t69\tOOAAAA\tGFIAAA\tAAAAxx\n8309\t5545\t1\t1\t9\t9\t9\t309\t309\t3309\t8309\t18\t19\tPHAAAA\tHFIAAA\tHHHHxx\n5134\t5546\t0\t2\t4\t14\t34\t134\t1134\t134\t5134\t68\t69\tMPAAAA\tIFIAAA\tOOOOxx\n5153\t5547\t1\t1\t3\t13\t53\t153\t1153\t153\t5153\t106\t107\tFQAAAA\tJFIAAA\tVVVVxx\n1522\t5548\t0\t2\t2\t2\t22\t522\t1522\t1522\t1522\t44\t45\tOGAAAA\tKFIAAA\tAAAAxx\n8629\t5549\t1\t1\t9\t9\t29\t629\t629\t3629\t8629\t58\t59\tXTAAAA\tLFIAAA\tHHHHxx\n4549\t5550\t1\t1\t9\t9\t49\t549\t549\t4549\t4549\t98\t99\tZSAAAA\tMFIAAA\tOOOOxx\n9506\t5551\t0\t2\t6\t6\t6\t506\t1506\t4506\t9506\t12\t13\tQBAAAA\tNFIAAA\tVVVVxx\n6542\t5552\t0\t2\t2\t2\t42\t542\t542\t1542\t6542\t84\t85\tQRAAAA\tOFIAAA\tAAAAxx\n2579\t5553\t1\t3\t9\t19\t79\t579\t579\t2579\t2579\t158\t159\tFVAAAA\tPFIAAA\tHHHHxx\n4664\t5554\t0\t0\t4\t4\t64\t664\t664\t4664\t4664\t128\t129\tKXAAAA\tQFIAAA\tOOOOxx\n696\t5555\t0\t0\t6\t16\t96\t696\t696\t696\t696\t192\t193\tUAAAAA\tRFIAAA\tVVVVxx\n7950\t5556\t0\t2\t0\t10\t50\t950\t1950\t2950\t7950\t100\t101\tUTAAAA\tSFIAAA\tAAAAxx\n5\t5557\t1\t1\t5\t5\t5\t5\t5\t5\t5\t10\t11\tFAAAAA\tTFIAAA\tHHHHxx\n7806\t5558\t0\t2\t6\t6\t6\t806\t1806\t2806\t7806\t12\t13\tGOAAAA\tUFIAAA\tOOOOxx\n2770\t5559\t0\t2\t0\t10\t70\t770\t770\t2770\t2770\t140\t141\tOCAAAA\tVFIAAA\tVVVVxx\n1344\t5560\t0\t0\t4\t4\t44\t344\t1344\t1344\t1344\t88\t89\tSZAAAA\tWFIAAA\tAAAAxx\n511\t5561\t1\t3\t1\t11\t11\t511\t511\t511\t511\t22\t23\tRTAAAA\tXFIAAA\tHHHHxx\n9070\t5562\t0\t2\t0\t10\t70\t70\t1070\t4070\t9070\t140\t141\tWKAAAA\tYFIAAA\tOOOOxx\n2961\t5563\t1\t1\t1\t1\t61\t961\t961\t2961\t2961\t122\t123\tXJAAAA\tZFIAAA\tVVVVxx\n8031\t5564\t1\t3\t1\t11\t31\t31\t31\t3031\t8031\t62\t63\tXWAAAA\tAGIAAA\tAAAAxx\n326\t5565\t0\t2\t6\t6\t26\t326\t326\t326\t326\t52\t53\tOMAAAA\tBGIAAA\tHHHHxx\n183\t5566\t1\t3\t3\t3\t83\t183\t183\t183\t183\t166\t167\tBHAAAA\tCGIAAA\tOOOOxx\n5917\t5567\t1\t1\t7\t17\t17\t917\t1917\t917\t5917\t34\t35\tPTAAAA\tDGIAAA\tVVVVxx\n8256\t5568\t0\t0\t6\t16\t56\t256\t256\t3256\t8256\t112\t113\tOFAAAA\tEGIAAA\tAAAAxx\n7889\t5569\t1\t1\t9\t9\t89\t889\t1889\t2889\t7889\t178\t179\tLRAAAA\tFGIAAA\tHHHHxx\n9029\t5570\t1\t1\t9\t9\t29\t29\t1029\t4029\t9029\t58\t59\tHJAAAA\tGGIAAA\tOOOOxx\n1316\t5571\t0\t0\t6\t16\t16\t316\t1316\t1316\t1316\t32\t33\tQYAAAA\tHGIAAA\tVVVVxx\n7442\t5572\t0\t2\t2\t2\t42\t442\t1442\t2442\t7442\t84\t85\tGAAAAA\tIGIAAA\tAAAAxx\n2810\t5573\t0\t2\t0\t10\t10\t810\t810\t2810\t2810\t20\t21\tCEAAAA\tJGIAAA\tHHHHxx\n20\t5574\t0\t0\t0\t0\t20\t20\t20\t20\t20\t40\t41\tUAAAAA\tKGIAAA\tOOOOxx\n2306\t5575\t0\t2\t6\t6\t6\t306\t306\t2306\t2306\t12\t13\tSKAAAA\tLGIAAA\tVVVVxx\n4694\t5576\t0\t2\t4\t14\t94\t694\t694\t4694\t4694\t188\t189\tOYAAAA\tMGIAAA\tAAAAxx\n9710\t5577\t0\t2\t0\t10\t10\t710\t1710\t4710\t9710\t20\t21\tMJAAAA\tNGIAAA\tHHHHxx\n1791\t5578\t1\t3\t1\t11\t91\t791\t1791\t1791\t1791\t182\t183\tXQAAAA\tOGIAAA\tOOOOxx\n6730\t5579\t0\t2\t0\t10\t30\t730\t730\t1730\t6730\t60\t61\tWYAAAA\tPGIAAA\tVVVVxx\n359\t5580\t1\t3\t9\t19\t59\t359\t359\t359\t359\t118\t119\tVNAAAA\tQGIAAA\tAAAAxx\n8097\t5581\t1\t1\t7\t17\t97\t97\t97\t3097\t8097\t194\t195\tLZAAAA\tRGIAAA\tHHHHxx\n6147\t5582\t1\t3\t7\t7\t47\t147\t147\t1147\t6147\t94\t95\tLCAAAA\tSGIAAA\tOOOOxx\n643\t5583\t1\t3\t3\t3\t43\t643\t643\t643\t643\t86\t87\tTYAAAA\tTGIAAA\tVVVVxx\n698\t5584\t0\t2\t8\t18\t98\t698\t698\t698\t698\t196\t197\tWAAAAA\tUGIAAA\tAAAAxx\n3881\t5585\t1\t1\t1\t1\t81\t881\t1881\t3881\t3881\t162\t163\tHTAAAA\tVGIAAA\tHHHHxx\n7600\t5586\t0\t0\t0\t0\t0\t600\t1600\t2600\t7600\t0\t1\tIGAAAA\tWGIAAA\tOOOOxx\n1583\t5587\t1\t3\t3\t3\t83\t583\t1583\t1583\t1583\t166\t167\tXIAAAA\tXGIAAA\tVVVVxx\n9612\t5588\t0\t0\t2\t12\t12\t612\t1612\t4612\t9612\t24\t25\tSFAAAA\tYGIAAA\tAAAAxx\n1032\t5589\t0\t0\t2\t12\t32\t32\t1032\t1032\t1032\t64\t65\tSNAAAA\tZGIAAA\tHHHHxx\n4834\t5590\t0\t2\t4\t14\t34\t834\t834\t4834\t4834\t68\t69\tYDAAAA\tAHIAAA\tOOOOxx\n5076\t5591\t0\t0\t6\t16\t76\t76\t1076\t76\t5076\t152\t153\tGNAAAA\tBHIAAA\tVVVVxx\n3070\t5592\t0\t2\t0\t10\t70\t70\t1070\t3070\t3070\t140\t141\tCOAAAA\tCHIAAA\tAAAAxx\n1421\t5593\t1\t1\t1\t1\t21\t421\t1421\t1421\t1421\t42\t43\tRCAAAA\tDHIAAA\tHHHHxx\n8970\t5594\t0\t2\t0\t10\t70\t970\t970\t3970\t8970\t140\t141\tAHAAAA\tEHIAAA\tOOOOxx\n6271\t5595\t1\t3\t1\t11\t71\t271\t271\t1271\t6271\t142\t143\tFHAAAA\tFHIAAA\tVVVVxx\n8547\t5596\t1\t3\t7\t7\t47\t547\t547\t3547\t8547\t94\t95\tTQAAAA\tGHIAAA\tAAAAxx\n1259\t5597\t1\t3\t9\t19\t59\t259\t1259\t1259\t1259\t118\t119\tLWAAAA\tHHIAAA\tHHHHxx\n8328\t5598\t0\t0\t8\t8\t28\t328\t328\t3328\t8328\t56\t57\tIIAAAA\tIHIAAA\tOOOOxx\n1503\t5599\t1\t3\t3\t3\t3\t503\t1503\t1503\t1503\t6\t7\tVFAAAA\tJHIAAA\tVVVVxx\n2253\t5600\t1\t1\t3\t13\t53\t253\t253\t2253\t2253\t106\t107\tRIAAAA\tKHIAAA\tAAAAxx\n7449\t5601\t1\t1\t9\t9\t49\t449\t1449\t2449\t7449\t98\t99\tNAAAAA\tLHIAAA\tHHHHxx\n3579\t5602\t1\t3\t9\t19\t79\t579\t1579\t3579\t3579\t158\t159\tRHAAAA\tMHIAAA\tOOOOxx\n1585\t5603\t1\t1\t5\t5\t85\t585\t1585\t1585\t1585\t170\t171\tZIAAAA\tNHIAAA\tVVVVxx\n5543\t5604\t1\t3\t3\t3\t43\t543\t1543\t543\t5543\t86\t87\tFFAAAA\tOHIAAA\tAAAAxx\n8627\t5605\t1\t3\t7\t7\t27\t627\t627\t3627\t8627\t54\t55\tVTAAAA\tPHIAAA\tHHHHxx\n8618\t5606\t0\t2\t8\t18\t18\t618\t618\t3618\t8618\t36\t37\tMTAAAA\tQHIAAA\tOOOOxx\n1911\t5607\t1\t3\t1\t11\t11\t911\t1911\t1911\t1911\t22\t23\tNVAAAA\tRHIAAA\tVVVVxx\n2758\t5608\t0\t2\t8\t18\t58\t758\t758\t2758\t2758\t116\t117\tCCAAAA\tSHIAAA\tAAAAxx\n5744\t5609\t0\t0\t4\t4\t44\t744\t1744\t744\t5744\t88\t89\tYMAAAA\tTHIAAA\tHHHHxx\n4976\t5610\t0\t0\t6\t16\t76\t976\t976\t4976\t4976\t152\t153\tKJAAAA\tUHIAAA\tOOOOxx\n6380\t5611\t0\t0\t0\t0\t80\t380\t380\t1380\t6380\t160\t161\tKLAAAA\tVHIAAA\tVVVVxx\n1937\t5612\t1\t1\t7\t17\t37\t937\t1937\t1937\t1937\t74\t75\tNWAAAA\tWHIAAA\tAAAAxx\n9903\t5613\t1\t3\t3\t3\t3\t903\t1903\t4903\t9903\t6\t7\tXQAAAA\tXHIAAA\tHHHHxx\n4409\t5614\t1\t1\t9\t9\t9\t409\t409\t4409\t4409\t18\t19\tPNAAAA\tYHIAAA\tOOOOxx\n4133\t5615\t1\t1\t3\t13\t33\t133\t133\t4133\t4133\t66\t67\tZCAAAA\tZHIAAA\tVVVVxx\n5263\t5616\t1\t3\t3\t3\t63\t263\t1263\t263\t5263\t126\t127\tLUAAAA\tAIIAAA\tAAAAxx\n7888\t5617\t0\t0\t8\t8\t88\t888\t1888\t2888\t7888\t176\t177\tKRAAAA\tBIIAAA\tHHHHxx\n6060\t5618\t0\t0\t0\t0\t60\t60\t60\t1060\t6060\t120\t121\tCZAAAA\tCIIAAA\tOOOOxx\n2522\t5619\t0\t2\t2\t2\t22\t522\t522\t2522\t2522\t44\t45\tATAAAA\tDIIAAA\tVVVVxx\n5550\t5620\t0\t2\t0\t10\t50\t550\t1550\t550\t5550\t100\t101\tMFAAAA\tEIIAAA\tAAAAxx\n9396\t5621\t0\t0\t6\t16\t96\t396\t1396\t4396\t9396\t192\t193\tKXAAAA\tFIIAAA\tHHHHxx\n176\t5622\t0\t0\t6\t16\t76\t176\t176\t176\t176\t152\t153\tUGAAAA\tGIIAAA\tOOOOxx\n5148\t5623\t0\t0\t8\t8\t48\t148\t1148\t148\t5148\t96\t97\tAQAAAA\tHIIAAA\tVVVVxx\n6691\t5624\t1\t3\t1\t11\t91\t691\t691\t1691\t6691\t182\t183\tJXAAAA\tIIIAAA\tAAAAxx\n4652\t5625\t0\t0\t2\t12\t52\t652\t652\t4652\t4652\t104\t105\tYWAAAA\tJIIAAA\tHHHHxx\n5096\t5626\t0\t0\t6\t16\t96\t96\t1096\t96\t5096\t192\t193\tAOAAAA\tKIIAAA\tOOOOxx\n2408\t5627\t0\t0\t8\t8\t8\t408\t408\t2408\t2408\t16\t17\tQOAAAA\tLIIAAA\tVVVVxx\n7322\t5628\t0\t2\t2\t2\t22\t322\t1322\t2322\t7322\t44\t45\tQVAAAA\tMIIAAA\tAAAAxx\n6782\t5629\t0\t2\t2\t2\t82\t782\t782\t1782\t6782\t164\t165\tWAAAAA\tNIIAAA\tHHHHxx\n4642\t5630\t0\t2\t2\t2\t42\t642\t642\t4642\t4642\t84\t85\tOWAAAA\tOIIAAA\tOOOOxx\n5427\t5631\t1\t3\t7\t7\t27\t427\t1427\t427\t5427\t54\t55\tTAAAAA\tPIIAAA\tVVVVxx\n4461\t5632\t1\t1\t1\t1\t61\t461\t461\t4461\t4461\t122\t123\tPPAAAA\tQIIAAA\tAAAAxx\n8416\t5633\t0\t0\t6\t16\t16\t416\t416\t3416\t8416\t32\t33\tSLAAAA\tRIIAAA\tHHHHxx\n2593\t5634\t1\t1\t3\t13\t93\t593\t593\t2593\t2593\t186\t187\tTVAAAA\tSIIAAA\tOOOOxx\n6202\t5635\t0\t2\t2\t2\t2\t202\t202\t1202\t6202\t4\t5\tOEAAAA\tTIIAAA\tVVVVxx\n3826\t5636\t0\t2\t6\t6\t26\t826\t1826\t3826\t3826\t52\t53\tERAAAA\tUIIAAA\tAAAAxx\n4417\t5637\t1\t1\t7\t17\t17\t417\t417\t4417\t4417\t34\t35\tXNAAAA\tVIIAAA\tHHHHxx\n7871\t5638\t1\t3\t1\t11\t71\t871\t1871\t2871\t7871\t142\t143\tTQAAAA\tWIIAAA\tOOOOxx\n5622\t5639\t0\t2\t2\t2\t22\t622\t1622\t622\t5622\t44\t45\tGIAAAA\tXIIAAA\tVVVVxx\n3010\t5640\t0\t2\t0\t10\t10\t10\t1010\t3010\t3010\t20\t21\tULAAAA\tYIIAAA\tAAAAxx\n3407\t5641\t1\t3\t7\t7\t7\t407\t1407\t3407\t3407\t14\t15\tBBAAAA\tZIIAAA\tHHHHxx\n1274\t5642\t0\t2\t4\t14\t74\t274\t1274\t1274\t1274\t148\t149\tAXAAAA\tAJIAAA\tOOOOxx\n2828\t5643\t0\t0\t8\t8\t28\t828\t828\t2828\t2828\t56\t57\tUEAAAA\tBJIAAA\tVVVVxx\n3427\t5644\t1\t3\t7\t7\t27\t427\t1427\t3427\t3427\t54\t55\tVBAAAA\tCJIAAA\tAAAAxx\n612\t5645\t0\t0\t2\t12\t12\t612\t612\t612\t612\t24\t25\tOXAAAA\tDJIAAA\tHHHHxx\n8729\t5646\t1\t1\t9\t9\t29\t729\t729\t3729\t8729\t58\t59\tTXAAAA\tEJIAAA\tOOOOxx\n1239\t5647\t1\t3\t9\t19\t39\t239\t1239\t1239\t1239\t78\t79\tRVAAAA\tFJIAAA\tVVVVxx\n8990\t5648\t0\t2\t0\t10\t90\t990\t990\t3990\t8990\t180\t181\tUHAAAA\tGJIAAA\tAAAAxx\n5609\t5649\t1\t1\t9\t9\t9\t609\t1609\t609\t5609\t18\t19\tTHAAAA\tHJIAAA\tHHHHxx\n4441\t5650\t1\t1\t1\t1\t41\t441\t441\t4441\t4441\t82\t83\tVOAAAA\tIJIAAA\tOOOOxx\n9078\t5651\t0\t2\t8\t18\t78\t78\t1078\t4078\t9078\t156\t157\tELAAAA\tJJIAAA\tVVVVxx\n6699\t5652\t1\t3\t9\t19\t99\t699\t699\t1699\t6699\t198\t199\tRXAAAA\tKJIAAA\tAAAAxx\n8390\t5653\t0\t2\t0\t10\t90\t390\t390\t3390\t8390\t180\t181\tSKAAAA\tLJIAAA\tHHHHxx\n5455\t5654\t1\t3\t5\t15\t55\t455\t1455\t455\t5455\t110\t111\tVBAAAA\tMJIAAA\tOOOOxx\n7537\t5655\t1\t1\t7\t17\t37\t537\t1537\t2537\t7537\t74\t75\tXDAAAA\tNJIAAA\tVVVVxx\n4669\t5656\t1\t1\t9\t9\t69\t669\t669\t4669\t4669\t138\t139\tPXAAAA\tOJIAAA\tAAAAxx\n5534\t5657\t0\t2\t4\t14\t34\t534\t1534\t534\t5534\t68\t69\tWEAAAA\tPJIAAA\tHHHHxx\n1920\t5658\t0\t0\t0\t0\t20\t920\t1920\t1920\t1920\t40\t41\tWVAAAA\tQJIAAA\tOOOOxx\n9465\t5659\t1\t1\t5\t5\t65\t465\t1465\t4465\t9465\t130\t131\tBAAAAA\tRJIAAA\tVVVVxx\n4897\t5660\t1\t1\t7\t17\t97\t897\t897\t4897\t4897\t194\t195\tJGAAAA\tSJIAAA\tAAAAxx\n1990\t5661\t0\t2\t0\t10\t90\t990\t1990\t1990\t1990\t180\t181\tOYAAAA\tTJIAAA\tHHHHxx\n7148\t5662\t0\t0\t8\t8\t48\t148\t1148\t2148\t7148\t96\t97\tYOAAAA\tUJIAAA\tOOOOxx\n533\t5663\t1\t1\t3\t13\t33\t533\t533\t533\t533\t66\t67\tNUAAAA\tVJIAAA\tVVVVxx\n4339\t5664\t1\t3\t9\t19\t39\t339\t339\t4339\t4339\t78\t79\tXKAAAA\tWJIAAA\tAAAAxx\n6450\t5665\t0\t2\t0\t10\t50\t450\t450\t1450\t6450\t100\t101\tCOAAAA\tXJIAAA\tHHHHxx\n9627\t5666\t1\t3\t7\t7\t27\t627\t1627\t4627\t9627\t54\t55\tHGAAAA\tYJIAAA\tOOOOxx\n5539\t5667\t1\t3\t9\t19\t39\t539\t1539\t539\t5539\t78\t79\tBFAAAA\tZJIAAA\tVVVVxx\n6758\t5668\t0\t2\t8\t18\t58\t758\t758\t1758\t6758\t116\t117\tYZAAAA\tAKIAAA\tAAAAxx\n3435\t5669\t1\t3\t5\t15\t35\t435\t1435\t3435\t3435\t70\t71\tDCAAAA\tBKIAAA\tHHHHxx\n4350\t5670\t0\t2\t0\t10\t50\t350\t350\t4350\t4350\t100\t101\tILAAAA\tCKIAAA\tOOOOxx\n9088\t5671\t0\t0\t8\t8\t88\t88\t1088\t4088\t9088\t176\t177\tOLAAAA\tDKIAAA\tVVVVxx\n6368\t5672\t0\t0\t8\t8\t68\t368\t368\t1368\t6368\t136\t137\tYKAAAA\tEKIAAA\tAAAAxx\n6337\t5673\t1\t1\t7\t17\t37\t337\t337\t1337\t6337\t74\t75\tTJAAAA\tFKIAAA\tHHHHxx\n4361\t5674\t1\t1\t1\t1\t61\t361\t361\t4361\t4361\t122\t123\tTLAAAA\tGKIAAA\tOOOOxx\n1719\t5675\t1\t3\t9\t19\t19\t719\t1719\t1719\t1719\t38\t39\tDOAAAA\tHKIAAA\tVVVVxx\n3109\t5676\t1\t1\t9\t9\t9\t109\t1109\t3109\t3109\t18\t19\tPPAAAA\tIKIAAA\tAAAAxx\n7135\t5677\t1\t3\t5\t15\t35\t135\t1135\t2135\t7135\t70\t71\tLOAAAA\tJKIAAA\tHHHHxx\n1964\t5678\t0\t0\t4\t4\t64\t964\t1964\t1964\t1964\t128\t129\tOXAAAA\tKKIAAA\tOOOOxx\n3\t5679\t1\t3\t3\t3\t3\t3\t3\t3\t3\t6\t7\tDAAAAA\tLKIAAA\tVVVVxx\n1868\t5680\t0\t0\t8\t8\t68\t868\t1868\t1868\t1868\t136\t137\tWTAAAA\tMKIAAA\tAAAAxx\n5182\t5681\t0\t2\t2\t2\t82\t182\t1182\t182\t5182\t164\t165\tIRAAAA\tNKIAAA\tHHHHxx\n7567\t5682\t1\t3\t7\t7\t67\t567\t1567\t2567\t7567\t134\t135\tBFAAAA\tOKIAAA\tOOOOxx\n3676\t5683\t0\t0\t6\t16\t76\t676\t1676\t3676\t3676\t152\t153\tKLAAAA\tPKIAAA\tVVVVxx\n9382\t5684\t0\t2\t2\t2\t82\t382\t1382\t4382\t9382\t164\t165\tWWAAAA\tQKIAAA\tAAAAxx\n8645\t5685\t1\t1\t5\t5\t45\t645\t645\t3645\t8645\t90\t91\tNUAAAA\tRKIAAA\tHHHHxx\n2018\t5686\t0\t2\t8\t18\t18\t18\t18\t2018\t2018\t36\t37\tQZAAAA\tSKIAAA\tOOOOxx\n217\t5687\t1\t1\t7\t17\t17\t217\t217\t217\t217\t34\t35\tJIAAAA\tTKIAAA\tVVVVxx\n6793\t5688\t1\t1\t3\t13\t93\t793\t793\t1793\t6793\t186\t187\tHBAAAA\tUKIAAA\tAAAAxx\n7280\t5689\t0\t0\t0\t0\t80\t280\t1280\t2280\t7280\t160\t161\tAUAAAA\tVKIAAA\tHHHHxx\n2168\t5690\t0\t0\t8\t8\t68\t168\t168\t2168\t2168\t136\t137\tKFAAAA\tWKIAAA\tOOOOxx\n5259\t5691\t1\t3\t9\t19\t59\t259\t1259\t259\t5259\t118\t119\tHUAAAA\tXKIAAA\tVVVVxx\n6019\t5692\t1\t3\t9\t19\t19\t19\t19\t1019\t6019\t38\t39\tNXAAAA\tYKIAAA\tAAAAxx\n877\t5693\t1\t1\t7\t17\t77\t877\t877\t877\t877\t154\t155\tTHAAAA\tZKIAAA\tHHHHxx\n4961\t5694\t1\t1\t1\t1\t61\t961\t961\t4961\t4961\t122\t123\tVIAAAA\tALIAAA\tOOOOxx\n1873\t5695\t1\t1\t3\t13\t73\t873\t1873\t1873\t1873\t146\t147\tBUAAAA\tBLIAAA\tVVVVxx\n13\t5696\t1\t1\t3\t13\t13\t13\t13\t13\t13\t26\t27\tNAAAAA\tCLIAAA\tAAAAxx\n1537\t5697\t1\t1\t7\t17\t37\t537\t1537\t1537\t1537\t74\t75\tDHAAAA\tDLIAAA\tHHHHxx\n3129\t5698\t1\t1\t9\t9\t29\t129\t1129\t3129\t3129\t58\t59\tJQAAAA\tELIAAA\tOOOOxx\n6473\t5699\t1\t1\t3\t13\t73\t473\t473\t1473\t6473\t146\t147\tZOAAAA\tFLIAAA\tVVVVxx\n7865\t5700\t1\t1\t5\t5\t65\t865\t1865\t2865\t7865\t130\t131\tNQAAAA\tGLIAAA\tAAAAxx\n7822\t5701\t0\t2\t2\t2\t22\t822\t1822\t2822\t7822\t44\t45\tWOAAAA\tHLIAAA\tHHHHxx\n239\t5702\t1\t3\t9\t19\t39\t239\t239\t239\t239\t78\t79\tFJAAAA\tILIAAA\tOOOOxx\n2062\t5703\t0\t2\t2\t2\t62\t62\t62\t2062\t2062\t124\t125\tIBAAAA\tJLIAAA\tVVVVxx\n762\t5704\t0\t2\t2\t2\t62\t762\t762\t762\t762\t124\t125\tIDAAAA\tKLIAAA\tAAAAxx\n3764\t5705\t0\t0\t4\t4\t64\t764\t1764\t3764\t3764\t128\t129\tUOAAAA\tLLIAAA\tHHHHxx\n465\t5706\t1\t1\t5\t5\t65\t465\t465\t465\t465\t130\t131\tXRAAAA\tMLIAAA\tOOOOxx\n2587\t5707\t1\t3\t7\t7\t87\t587\t587\t2587\t2587\t174\t175\tNVAAAA\tNLIAAA\tVVVVxx\n8402\t5708\t0\t2\t2\t2\t2\t402\t402\t3402\t8402\t4\t5\tELAAAA\tOLIAAA\tAAAAxx\n1055\t5709\t1\t3\t5\t15\t55\t55\t1055\t1055\t1055\t110\t111\tPOAAAA\tPLIAAA\tHHHHxx\n3072\t5710\t0\t0\t2\t12\t72\t72\t1072\t3072\t3072\t144\t145\tEOAAAA\tQLIAAA\tOOOOxx\n7359\t5711\t1\t3\t9\t19\t59\t359\t1359\t2359\t7359\t118\t119\tBXAAAA\tRLIAAA\tVVVVxx\n6558\t5712\t0\t2\t8\t18\t58\t558\t558\t1558\t6558\t116\t117\tGSAAAA\tSLIAAA\tAAAAxx\n48\t5713\t0\t0\t8\t8\t48\t48\t48\t48\t48\t96\t97\tWBAAAA\tTLIAAA\tHHHHxx\n5382\t5714\t0\t2\t2\t2\t82\t382\t1382\t382\t5382\t164\t165\tAZAAAA\tULIAAA\tOOOOxx\n947\t5715\t1\t3\t7\t7\t47\t947\t947\t947\t947\t94\t95\tLKAAAA\tVLIAAA\tVVVVxx\n2644\t5716\t0\t0\t4\t4\t44\t644\t644\t2644\t2644\t88\t89\tSXAAAA\tWLIAAA\tAAAAxx\n7516\t5717\t0\t0\t6\t16\t16\t516\t1516\t2516\t7516\t32\t33\tCDAAAA\tXLIAAA\tHHHHxx\n2362\t5718\t0\t2\t2\t2\t62\t362\t362\t2362\t2362\t124\t125\tWMAAAA\tYLIAAA\tOOOOxx\n839\t5719\t1\t3\t9\t19\t39\t839\t839\t839\t839\t78\t79\tHGAAAA\tZLIAAA\tVVVVxx\n2216\t5720\t0\t0\t6\t16\t16\t216\t216\t2216\t2216\t32\t33\tGHAAAA\tAMIAAA\tAAAAxx\n7673\t5721\t1\t1\t3\t13\t73\t673\t1673\t2673\t7673\t146\t147\tDJAAAA\tBMIAAA\tHHHHxx\n8173\t5722\t1\t1\t3\t13\t73\t173\t173\t3173\t8173\t146\t147\tJCAAAA\tCMIAAA\tOOOOxx\n1630\t5723\t0\t2\t0\t10\t30\t630\t1630\t1630\t1630\t60\t61\tSKAAAA\tDMIAAA\tVVVVxx\n9057\t5724\t1\t1\t7\t17\t57\t57\t1057\t4057\t9057\t114\t115\tJKAAAA\tEMIAAA\tAAAAxx\n4392\t5725\t0\t0\t2\t12\t92\t392\t392\t4392\t4392\t184\t185\tYMAAAA\tFMIAAA\tHHHHxx\n3695\t5726\t1\t3\t5\t15\t95\t695\t1695\t3695\t3695\t190\t191\tDMAAAA\tGMIAAA\tOOOOxx\n5751\t5727\t1\t3\t1\t11\t51\t751\t1751\t751\t5751\t102\t103\tFNAAAA\tHMIAAA\tVVVVxx\n5745\t5728\t1\t1\t5\t5\t45\t745\t1745\t745\t5745\t90\t91\tZMAAAA\tIMIAAA\tAAAAxx\n7945\t5729\t1\t1\t5\t5\t45\t945\t1945\t2945\t7945\t90\t91\tPTAAAA\tJMIAAA\tHHHHxx\n5174\t5730\t0\t2\t4\t14\t74\t174\t1174\t174\t5174\t148\t149\tARAAAA\tKMIAAA\tOOOOxx\n3829\t5731\t1\t1\t9\t9\t29\t829\t1829\t3829\t3829\t58\t59\tHRAAAA\tLMIAAA\tVVVVxx\n3317\t5732\t1\t1\t7\t17\t17\t317\t1317\t3317\t3317\t34\t35\tPXAAAA\tMMIAAA\tAAAAxx\n4253\t5733\t1\t1\t3\t13\t53\t253\t253\t4253\t4253\t106\t107\tPHAAAA\tNMIAAA\tHHHHxx\n1291\t5734\t1\t3\t1\t11\t91\t291\t1291\t1291\t1291\t182\t183\tRXAAAA\tOMIAAA\tOOOOxx\n3266\t5735\t0\t2\t6\t6\t66\t266\t1266\t3266\t3266\t132\t133\tQVAAAA\tPMIAAA\tVVVVxx\n2939\t5736\t1\t3\t9\t19\t39\t939\t939\t2939\t2939\t78\t79\tBJAAAA\tQMIAAA\tAAAAxx\n2755\t5737\t1\t3\t5\t15\t55\t755\t755\t2755\t2755\t110\t111\tZBAAAA\tRMIAAA\tHHHHxx\n6844\t5738\t0\t0\t4\t4\t44\t844\t844\t1844\t6844\t88\t89\tGDAAAA\tSMIAAA\tOOOOxx\n8594\t5739\t0\t2\t4\t14\t94\t594\t594\t3594\t8594\t188\t189\tOSAAAA\tTMIAAA\tVVVVxx\n704\t5740\t0\t0\t4\t4\t4\t704\t704\t704\t704\t8\t9\tCBAAAA\tUMIAAA\tAAAAxx\n1681\t5741\t1\t1\t1\t1\t81\t681\t1681\t1681\t1681\t162\t163\tRMAAAA\tVMIAAA\tHHHHxx\n364\t5742\t0\t0\t4\t4\t64\t364\t364\t364\t364\t128\t129\tAOAAAA\tWMIAAA\tOOOOxx\n2928\t5743\t0\t0\t8\t8\t28\t928\t928\t2928\t2928\t56\t57\tQIAAAA\tXMIAAA\tVVVVxx\n117\t5744\t1\t1\t7\t17\t17\t117\t117\t117\t117\t34\t35\tNEAAAA\tYMIAAA\tAAAAxx\n96\t5745\t0\t0\t6\t16\t96\t96\t96\t96\t96\t192\t193\tSDAAAA\tZMIAAA\tHHHHxx\n7796\t5746\t0\t0\t6\t16\t96\t796\t1796\t2796\t7796\t192\t193\tWNAAAA\tANIAAA\tOOOOxx\n3101\t5747\t1\t1\t1\t1\t1\t101\t1101\t3101\t3101\t2\t3\tHPAAAA\tBNIAAA\tVVVVxx\n3397\t5748\t1\t1\t7\t17\t97\t397\t1397\t3397\t3397\t194\t195\tRAAAAA\tCNIAAA\tAAAAxx\n1605\t5749\t1\t1\t5\t5\t5\t605\t1605\t1605\t1605\t10\t11\tTJAAAA\tDNIAAA\tHHHHxx\n4881\t5750\t1\t1\t1\t1\t81\t881\t881\t4881\t4881\t162\t163\tTFAAAA\tENIAAA\tOOOOxx\n4521\t5751\t1\t1\t1\t1\t21\t521\t521\t4521\t4521\t42\t43\tXRAAAA\tFNIAAA\tVVVVxx\n6430\t5752\t0\t2\t0\t10\t30\t430\t430\t1430\t6430\t60\t61\tINAAAA\tGNIAAA\tAAAAxx\n282\t5753\t0\t2\t2\t2\t82\t282\t282\t282\t282\t164\t165\tWKAAAA\tHNIAAA\tHHHHxx\n9645\t5754\t1\t1\t5\t5\t45\t645\t1645\t4645\t9645\t90\t91\tZGAAAA\tINIAAA\tOOOOxx\n8946\t5755\t0\t2\t6\t6\t46\t946\t946\t3946\t8946\t92\t93\tCGAAAA\tJNIAAA\tVVVVxx\n5064\t5756\t0\t0\t4\t4\t64\t64\t1064\t64\t5064\t128\t129\tUMAAAA\tKNIAAA\tAAAAxx\n7470\t5757\t0\t2\t0\t10\t70\t470\t1470\t2470\t7470\t140\t141\tIBAAAA\tLNIAAA\tHHHHxx\n5886\t5758\t0\t2\t6\t6\t86\t886\t1886\t886\t5886\t172\t173\tKSAAAA\tMNIAAA\tOOOOxx\n6280\t5759\t0\t0\t0\t0\t80\t280\t280\t1280\t6280\t160\t161\tOHAAAA\tNNIAAA\tVVVVxx\n5247\t5760\t1\t3\t7\t7\t47\t247\t1247\t247\t5247\t94\t95\tVTAAAA\tONIAAA\tAAAAxx\n412\t5761\t0\t0\t2\t12\t12\t412\t412\t412\t412\t24\t25\tWPAAAA\tPNIAAA\tHHHHxx\n5342\t5762\t0\t2\t2\t2\t42\t342\t1342\t342\t5342\t84\t85\tMXAAAA\tQNIAAA\tOOOOxx\n2271\t5763\t1\t3\t1\t11\t71\t271\t271\t2271\t2271\t142\t143\tJJAAAA\tRNIAAA\tVVVVxx\n849\t5764\t1\t1\t9\t9\t49\t849\t849\t849\t849\t98\t99\tRGAAAA\tSNIAAA\tAAAAxx\n1885\t5765\t1\t1\t5\t5\t85\t885\t1885\t1885\t1885\t170\t171\tNUAAAA\tTNIAAA\tHHHHxx\n5620\t5766\t0\t0\t0\t0\t20\t620\t1620\t620\t5620\t40\t41\tEIAAAA\tUNIAAA\tOOOOxx\n7079\t5767\t1\t3\t9\t19\t79\t79\t1079\t2079\t7079\t158\t159\tHMAAAA\tVNIAAA\tVVVVxx\n5819\t5768\t1\t3\t9\t19\t19\t819\t1819\t819\t5819\t38\t39\tVPAAAA\tWNIAAA\tAAAAxx\n7497\t5769\t1\t1\t7\t17\t97\t497\t1497\t2497\t7497\t194\t195\tJCAAAA\tXNIAAA\tHHHHxx\n5993\t5770\t1\t1\t3\t13\t93\t993\t1993\t993\t5993\t186\t187\tNWAAAA\tYNIAAA\tOOOOxx\n3739\t5771\t1\t3\t9\t19\t39\t739\t1739\t3739\t3739\t78\t79\tVNAAAA\tZNIAAA\tVVVVxx\n6296\t5772\t0\t0\t6\t16\t96\t296\t296\t1296\t6296\t192\t193\tEIAAAA\tAOIAAA\tAAAAxx\n2716\t5773\t0\t0\t6\t16\t16\t716\t716\t2716\t2716\t32\t33\tMAAAAA\tBOIAAA\tHHHHxx\n1130\t5774\t0\t2\t0\t10\t30\t130\t1130\t1130\t1130\t60\t61\tMRAAAA\tCOIAAA\tOOOOxx\n5593\t5775\t1\t1\t3\t13\t93\t593\t1593\t593\t5593\t186\t187\tDHAAAA\tDOIAAA\tVVVVxx\n6972\t5776\t0\t0\t2\t12\t72\t972\t972\t1972\t6972\t144\t145\tEIAAAA\tEOIAAA\tAAAAxx\n8360\t5777\t0\t0\t0\t0\t60\t360\t360\t3360\t8360\t120\t121\tOJAAAA\tFOIAAA\tHHHHxx\n6448\t5778\t0\t0\t8\t8\t48\t448\t448\t1448\t6448\t96\t97\tAOAAAA\tGOIAAA\tOOOOxx\n3689\t5779\t1\t1\t9\t9\t89\t689\t1689\t3689\t3689\t178\t179\tXLAAAA\tHOIAAA\tVVVVxx\n7951\t5780\t1\t3\t1\t11\t51\t951\t1951\t2951\t7951\t102\t103\tVTAAAA\tIOIAAA\tAAAAxx\n2974\t5781\t0\t2\t4\t14\t74\t974\t974\t2974\t2974\t148\t149\tKKAAAA\tJOIAAA\tHHHHxx\n6600\t5782\t0\t0\t0\t0\t0\t600\t600\t1600\t6600\t0\t1\tWTAAAA\tKOIAAA\tOOOOxx\n4662\t5783\t0\t2\t2\t2\t62\t662\t662\t4662\t4662\t124\t125\tIXAAAA\tLOIAAA\tVVVVxx\n4765\t5784\t1\t1\t5\t5\t65\t765\t765\t4765\t4765\t130\t131\tHBAAAA\tMOIAAA\tAAAAxx\n355\t5785\t1\t3\t5\t15\t55\t355\t355\t355\t355\t110\t111\tRNAAAA\tNOIAAA\tHHHHxx\n6228\t5786\t0\t0\t8\t8\t28\t228\t228\t1228\t6228\t56\t57\tOFAAAA\tOOIAAA\tOOOOxx\n964\t5787\t0\t0\t4\t4\t64\t964\t964\t964\t964\t128\t129\tCLAAAA\tPOIAAA\tVVVVxx\n3082\t5788\t0\t2\t2\t2\t82\t82\t1082\t3082\t3082\t164\t165\tOOAAAA\tQOIAAA\tAAAAxx\n7028\t5789\t0\t0\t8\t8\t28\t28\t1028\t2028\t7028\t56\t57\tIKAAAA\tROIAAA\tHHHHxx\n4505\t5790\t1\t1\t5\t5\t5\t505\t505\t4505\t4505\t10\t11\tHRAAAA\tSOIAAA\tOOOOxx\n8961\t5791\t1\t1\t1\t1\t61\t961\t961\t3961\t8961\t122\t123\tRGAAAA\tTOIAAA\tVVVVxx\n9571\t5792\t1\t3\t1\t11\t71\t571\t1571\t4571\t9571\t142\t143\tDEAAAA\tUOIAAA\tAAAAxx\n9394\t5793\t0\t2\t4\t14\t94\t394\t1394\t4394\t9394\t188\t189\tIXAAAA\tVOIAAA\tHHHHxx\n4245\t5794\t1\t1\t5\t5\t45\t245\t245\t4245\t4245\t90\t91\tHHAAAA\tWOIAAA\tOOOOxx\n7560\t5795\t0\t0\t0\t0\t60\t560\t1560\t2560\t7560\t120\t121\tUEAAAA\tXOIAAA\tVVVVxx\n2907\t5796\t1\t3\t7\t7\t7\t907\t907\t2907\t2907\t14\t15\tVHAAAA\tYOIAAA\tAAAAxx\n7817\t5797\t1\t1\t7\t17\t17\t817\t1817\t2817\t7817\t34\t35\tROAAAA\tZOIAAA\tHHHHxx\n5408\t5798\t0\t0\t8\t8\t8\t408\t1408\t408\t5408\t16\t17\tAAAAAA\tAPIAAA\tOOOOxx\n8092\t5799\t0\t0\t2\t12\t92\t92\t92\t3092\t8092\t184\t185\tGZAAAA\tBPIAAA\tVVVVxx\n1309\t5800\t1\t1\t9\t9\t9\t309\t1309\t1309\t1309\t18\t19\tJYAAAA\tCPIAAA\tAAAAxx\n6673\t5801\t1\t1\t3\t13\t73\t673\t673\t1673\t6673\t146\t147\tRWAAAA\tDPIAAA\tHHHHxx\n1245\t5802\t1\t1\t5\t5\t45\t245\t1245\t1245\t1245\t90\t91\tXVAAAA\tEPIAAA\tOOOOxx\n6790\t5803\t0\t2\t0\t10\t90\t790\t790\t1790\t6790\t180\t181\tEBAAAA\tFPIAAA\tVVVVxx\n8380\t5804\t0\t0\t0\t0\t80\t380\t380\t3380\t8380\t160\t161\tIKAAAA\tGPIAAA\tAAAAxx\n5786\t5805\t0\t2\t6\t6\t86\t786\t1786\t786\t5786\t172\t173\tOOAAAA\tHPIAAA\tHHHHxx\n9590\t5806\t0\t2\t0\t10\t90\t590\t1590\t4590\t9590\t180\t181\tWEAAAA\tIPIAAA\tOOOOxx\n5763\t5807\t1\t3\t3\t3\t63\t763\t1763\t763\t5763\t126\t127\tRNAAAA\tJPIAAA\tVVVVxx\n1345\t5808\t1\t1\t5\t5\t45\t345\t1345\t1345\t1345\t90\t91\tTZAAAA\tKPIAAA\tAAAAxx\n3480\t5809\t0\t0\t0\t0\t80\t480\t1480\t3480\t3480\t160\t161\tWDAAAA\tLPIAAA\tHHHHxx\n7864\t5810\t0\t0\t4\t4\t64\t864\t1864\t2864\t7864\t128\t129\tMQAAAA\tMPIAAA\tOOOOxx\n4853\t5811\t1\t1\t3\t13\t53\t853\t853\t4853\t4853\t106\t107\tREAAAA\tNPIAAA\tVVVVxx\n1445\t5812\t1\t1\t5\t5\t45\t445\t1445\t1445\t1445\t90\t91\tPDAAAA\tOPIAAA\tAAAAxx\n170\t5813\t0\t2\t0\t10\t70\t170\t170\t170\t170\t140\t141\tOGAAAA\tPPIAAA\tHHHHxx\n7348\t5814\t0\t0\t8\t8\t48\t348\t1348\t2348\t7348\t96\t97\tQWAAAA\tQPIAAA\tOOOOxx\n3920\t5815\t0\t0\t0\t0\t20\t920\t1920\t3920\t3920\t40\t41\tUUAAAA\tRPIAAA\tVVVVxx\n3307\t5816\t1\t3\t7\t7\t7\t307\t1307\t3307\t3307\t14\t15\tFXAAAA\tSPIAAA\tAAAAxx\n4584\t5817\t0\t0\t4\t4\t84\t584\t584\t4584\t4584\t168\t169\tIUAAAA\tTPIAAA\tHHHHxx\n3344\t5818\t0\t0\t4\t4\t44\t344\t1344\t3344\t3344\t88\t89\tQYAAAA\tUPIAAA\tOOOOxx\n4360\t5819\t0\t0\t0\t0\t60\t360\t360\t4360\t4360\t120\t121\tSLAAAA\tVPIAAA\tVVVVxx\n8757\t5820\t1\t1\t7\t17\t57\t757\t757\t3757\t8757\t114\t115\tVYAAAA\tWPIAAA\tAAAAxx\n4315\t5821\t1\t3\t5\t15\t15\t315\t315\t4315\t4315\t30\t31\tZJAAAA\tXPIAAA\tHHHHxx\n5243\t5822\t1\t3\t3\t3\t43\t243\t1243\t243\t5243\t86\t87\tRTAAAA\tYPIAAA\tOOOOxx\n8550\t5823\t0\t2\t0\t10\t50\t550\t550\t3550\t8550\t100\t101\tWQAAAA\tZPIAAA\tVVVVxx\n159\t5824\t1\t3\t9\t19\t59\t159\t159\t159\t159\t118\t119\tDGAAAA\tAQIAAA\tAAAAxx\n4710\t5825\t0\t2\t0\t10\t10\t710\t710\t4710\t4710\t20\t21\tEZAAAA\tBQIAAA\tHHHHxx\n7179\t5826\t1\t3\t9\t19\t79\t179\t1179\t2179\t7179\t158\t159\tDQAAAA\tCQIAAA\tOOOOxx\n2509\t5827\t1\t1\t9\t9\t9\t509\t509\t2509\t2509\t18\t19\tNSAAAA\tDQIAAA\tVVVVxx\n6981\t5828\t1\t1\t1\t1\t81\t981\t981\t1981\t6981\t162\t163\tNIAAAA\tEQIAAA\tAAAAxx\n5060\t5829\t0\t0\t0\t0\t60\t60\t1060\t60\t5060\t120\t121\tQMAAAA\tFQIAAA\tHHHHxx\n5601\t5830\t1\t1\t1\t1\t1\t601\t1601\t601\t5601\t2\t3\tLHAAAA\tGQIAAA\tOOOOxx\n703\t5831\t1\t3\t3\t3\t3\t703\t703\t703\t703\t6\t7\tBBAAAA\tHQIAAA\tVVVVxx\n8719\t5832\t1\t3\t9\t19\t19\t719\t719\t3719\t8719\t38\t39\tJXAAAA\tIQIAAA\tAAAAxx\n1570\t5833\t0\t2\t0\t10\t70\t570\t1570\t1570\t1570\t140\t141\tKIAAAA\tJQIAAA\tHHHHxx\n1036\t5834\t0\t0\t6\t16\t36\t36\t1036\t1036\t1036\t72\t73\tWNAAAA\tKQIAAA\tOOOOxx\n6703\t5835\t1\t3\t3\t3\t3\t703\t703\t1703\t6703\t6\t7\tVXAAAA\tLQIAAA\tVVVVxx\n252\t5836\t0\t0\t2\t12\t52\t252\t252\t252\t252\t104\t105\tSJAAAA\tMQIAAA\tAAAAxx\n631\t5837\t1\t3\t1\t11\t31\t631\t631\t631\t631\t62\t63\tHYAAAA\tNQIAAA\tHHHHxx\n5098\t5838\t0\t2\t8\t18\t98\t98\t1098\t98\t5098\t196\t197\tCOAAAA\tOQIAAA\tOOOOxx\n8346\t5839\t0\t2\t6\t6\t46\t346\t346\t3346\t8346\t92\t93\tAJAAAA\tPQIAAA\tVVVVxx\n4910\t5840\t0\t2\t0\t10\t10\t910\t910\t4910\t4910\t20\t21\tWGAAAA\tQQIAAA\tAAAAxx\n559\t5841\t1\t3\t9\t19\t59\t559\t559\t559\t559\t118\t119\tNVAAAA\tRQIAAA\tHHHHxx\n1477\t5842\t1\t1\t7\t17\t77\t477\t1477\t1477\t1477\t154\t155\tVEAAAA\tSQIAAA\tOOOOxx\n5115\t5843\t1\t3\t5\t15\t15\t115\t1115\t115\t5115\t30\t31\tTOAAAA\tTQIAAA\tVVVVxx\n8784\t5844\t0\t0\t4\t4\t84\t784\t784\t3784\t8784\t168\t169\tWZAAAA\tUQIAAA\tAAAAxx\n4422\t5845\t0\t2\t2\t2\t22\t422\t422\t4422\t4422\t44\t45\tCOAAAA\tVQIAAA\tHHHHxx\n2702\t5846\t0\t2\t2\t2\t2\t702\t702\t2702\t2702\t4\t5\tYZAAAA\tWQIAAA\tOOOOxx\n9599\t5847\t1\t3\t9\t19\t99\t599\t1599\t4599\t9599\t198\t199\tFFAAAA\tXQIAAA\tVVVVxx\n2463\t5848\t1\t3\t3\t3\t63\t463\t463\t2463\t2463\t126\t127\tTQAAAA\tYQIAAA\tAAAAxx\n498\t5849\t0\t2\t8\t18\t98\t498\t498\t498\t498\t196\t197\tETAAAA\tZQIAAA\tHHHHxx\n494\t5850\t0\t2\t4\t14\t94\t494\t494\t494\t494\t188\t189\tATAAAA\tARIAAA\tOOOOxx\n8632\t5851\t0\t0\t2\t12\t32\t632\t632\t3632\t8632\t64\t65\tAUAAAA\tBRIAAA\tVVVVxx\n3449\t5852\t1\t1\t9\t9\t49\t449\t1449\t3449\t3449\t98\t99\tRCAAAA\tCRIAAA\tAAAAxx\n5888\t5853\t0\t0\t8\t8\t88\t888\t1888\t888\t5888\t176\t177\tMSAAAA\tDRIAAA\tHHHHxx\n2211\t5854\t1\t3\t1\t11\t11\t211\t211\t2211\t2211\t22\t23\tBHAAAA\tERIAAA\tOOOOxx\n2835\t5855\t1\t3\t5\t15\t35\t835\t835\t2835\t2835\t70\t71\tBFAAAA\tFRIAAA\tVVVVxx\n4196\t5856\t0\t0\t6\t16\t96\t196\t196\t4196\t4196\t192\t193\tKFAAAA\tGRIAAA\tAAAAxx\n2177\t5857\t1\t1\t7\t17\t77\t177\t177\t2177\t2177\t154\t155\tTFAAAA\tHRIAAA\tHHHHxx\n1959\t5858\t1\t3\t9\t19\t59\t959\t1959\t1959\t1959\t118\t119\tJXAAAA\tIRIAAA\tOOOOxx\n5172\t5859\t0\t0\t2\t12\t72\t172\t1172\t172\t5172\t144\t145\tYQAAAA\tJRIAAA\tVVVVxx\n7898\t5860\t0\t2\t8\t18\t98\t898\t1898\t2898\t7898\t196\t197\tURAAAA\tKRIAAA\tAAAAxx\n5729\t5861\t1\t1\t9\t9\t29\t729\t1729\t729\t5729\t58\t59\tJMAAAA\tLRIAAA\tHHHHxx\n469\t5862\t1\t1\t9\t9\t69\t469\t469\t469\t469\t138\t139\tBSAAAA\tMRIAAA\tOOOOxx\n4456\t5863\t0\t0\t6\t16\t56\t456\t456\t4456\t4456\t112\t113\tKPAAAA\tNRIAAA\tVVVVxx\n3578\t5864\t0\t2\t8\t18\t78\t578\t1578\t3578\t3578\t156\t157\tQHAAAA\tORIAAA\tAAAAxx\n8623\t5865\t1\t3\t3\t3\t23\t623\t623\t3623\t8623\t46\t47\tRTAAAA\tPRIAAA\tHHHHxx\n6749\t5866\t1\t1\t9\t9\t49\t749\t749\t1749\t6749\t98\t99\tPZAAAA\tQRIAAA\tOOOOxx\n6735\t5867\t1\t3\t5\t15\t35\t735\t735\t1735\t6735\t70\t71\tBZAAAA\tRRIAAA\tVVVVxx\n5197\t5868\t1\t1\t7\t17\t97\t197\t1197\t197\t5197\t194\t195\tXRAAAA\tSRIAAA\tAAAAxx\n2067\t5869\t1\t3\t7\t7\t67\t67\t67\t2067\t2067\t134\t135\tNBAAAA\tTRIAAA\tHHHHxx\n5600\t5870\t0\t0\t0\t0\t0\t600\t1600\t600\t5600\t0\t1\tKHAAAA\tURIAAA\tOOOOxx\n7741\t5871\t1\t1\t1\t1\t41\t741\t1741\t2741\t7741\t82\t83\tTLAAAA\tVRIAAA\tVVVVxx\n9925\t5872\t1\t1\t5\t5\t25\t925\t1925\t4925\t9925\t50\t51\tTRAAAA\tWRIAAA\tAAAAxx\n9685\t5873\t1\t1\t5\t5\t85\t685\t1685\t4685\t9685\t170\t171\tNIAAAA\tXRIAAA\tHHHHxx\n7622\t5874\t0\t2\t2\t2\t22\t622\t1622\t2622\t7622\t44\t45\tEHAAAA\tYRIAAA\tOOOOxx\n6859\t5875\t1\t3\t9\t19\t59\t859\t859\t1859\t6859\t118\t119\tVDAAAA\tZRIAAA\tVVVVxx\n3094\t5876\t0\t2\t4\t14\t94\t94\t1094\t3094\t3094\t188\t189\tAPAAAA\tASIAAA\tAAAAxx\n2628\t5877\t0\t0\t8\t8\t28\t628\t628\t2628\t2628\t56\t57\tCXAAAA\tBSIAAA\tHHHHxx\n40\t5878\t0\t0\t0\t0\t40\t40\t40\t40\t40\t80\t81\tOBAAAA\tCSIAAA\tOOOOxx\n1644\t5879\t0\t0\t4\t4\t44\t644\t1644\t1644\t1644\t88\t89\tGLAAAA\tDSIAAA\tVVVVxx\n588\t5880\t0\t0\t8\t8\t88\t588\t588\t588\t588\t176\t177\tQWAAAA\tESIAAA\tAAAAxx\n7522\t5881\t0\t2\t2\t2\t22\t522\t1522\t2522\t7522\t44\t45\tIDAAAA\tFSIAAA\tHHHHxx\n162\t5882\t0\t2\t2\t2\t62\t162\t162\t162\t162\t124\t125\tGGAAAA\tGSIAAA\tOOOOxx\n3610\t5883\t0\t2\t0\t10\t10\t610\t1610\t3610\t3610\t20\t21\tWIAAAA\tHSIAAA\tVVVVxx\n3561\t5884\t1\t1\t1\t1\t61\t561\t1561\t3561\t3561\t122\t123\tZGAAAA\tISIAAA\tAAAAxx\n8185\t5885\t1\t1\t5\t5\t85\t185\t185\t3185\t8185\t170\t171\tVCAAAA\tJSIAAA\tHHHHxx\n7237\t5886\t1\t1\t7\t17\t37\t237\t1237\t2237\t7237\t74\t75\tJSAAAA\tKSIAAA\tOOOOxx\n4592\t5887\t0\t0\t2\t12\t92\t592\t592\t4592\t4592\t184\t185\tQUAAAA\tLSIAAA\tVVVVxx\n7082\t5888\t0\t2\t2\t2\t82\t82\t1082\t2082\t7082\t164\t165\tKMAAAA\tMSIAAA\tAAAAxx\n4719\t5889\t1\t3\t9\t19\t19\t719\t719\t4719\t4719\t38\t39\tNZAAAA\tNSIAAA\tHHHHxx\n3879\t5890\t1\t3\t9\t19\t79\t879\t1879\t3879\t3879\t158\t159\tFTAAAA\tOSIAAA\tOOOOxx\n1662\t5891\t0\t2\t2\t2\t62\t662\t1662\t1662\t1662\t124\t125\tYLAAAA\tPSIAAA\tVVVVxx\n3995\t5892\t1\t3\t5\t15\t95\t995\t1995\t3995\t3995\t190\t191\tRXAAAA\tQSIAAA\tAAAAxx\n5828\t5893\t0\t0\t8\t8\t28\t828\t1828\t828\t5828\t56\t57\tEQAAAA\tRSIAAA\tHHHHxx\n4197\t5894\t1\t1\t7\t17\t97\t197\t197\t4197\t4197\t194\t195\tLFAAAA\tSSIAAA\tOOOOxx\n5146\t5895\t0\t2\t6\t6\t46\t146\t1146\t146\t5146\t92\t93\tYPAAAA\tTSIAAA\tVVVVxx\n753\t5896\t1\t1\t3\t13\t53\t753\t753\t753\t753\t106\t107\tZCAAAA\tUSIAAA\tAAAAxx\n7064\t5897\t0\t0\t4\t4\t64\t64\t1064\t2064\t7064\t128\t129\tSLAAAA\tVSIAAA\tHHHHxx\n1312\t5898\t0\t0\t2\t12\t12\t312\t1312\t1312\t1312\t24\t25\tMYAAAA\tWSIAAA\tOOOOxx\n5573\t5899\t1\t1\t3\t13\t73\t573\t1573\t573\t5573\t146\t147\tJGAAAA\tXSIAAA\tVVVVxx\n7634\t5900\t0\t2\t4\t14\t34\t634\t1634\t2634\t7634\t68\t69\tQHAAAA\tYSIAAA\tAAAAxx\n2459\t5901\t1\t3\t9\t19\t59\t459\t459\t2459\t2459\t118\t119\tPQAAAA\tZSIAAA\tHHHHxx\n8636\t5902\t0\t0\t6\t16\t36\t636\t636\t3636\t8636\t72\t73\tEUAAAA\tATIAAA\tOOOOxx\n5318\t5903\t0\t2\t8\t18\t18\t318\t1318\t318\t5318\t36\t37\tOWAAAA\tBTIAAA\tVVVVxx\n1064\t5904\t0\t0\t4\t4\t64\t64\t1064\t1064\t1064\t128\t129\tYOAAAA\tCTIAAA\tAAAAxx\n9779\t5905\t1\t3\t9\t19\t79\t779\t1779\t4779\t9779\t158\t159\tDMAAAA\tDTIAAA\tHHHHxx\n6512\t5906\t0\t0\t2\t12\t12\t512\t512\t1512\t6512\t24\t25\tMQAAAA\tETIAAA\tOOOOxx\n3572\t5907\t0\t0\t2\t12\t72\t572\t1572\t3572\t3572\t144\t145\tKHAAAA\tFTIAAA\tVVVVxx\n816\t5908\t0\t0\t6\t16\t16\t816\t816\t816\t816\t32\t33\tKFAAAA\tGTIAAA\tAAAAxx\n3978\t5909\t0\t2\t8\t18\t78\t978\t1978\t3978\t3978\t156\t157\tAXAAAA\tHTIAAA\tHHHHxx\n5390\t5910\t0\t2\t0\t10\t90\t390\t1390\t390\t5390\t180\t181\tIZAAAA\tITIAAA\tOOOOxx\n4685\t5911\t1\t1\t5\t5\t85\t685\t685\t4685\t4685\t170\t171\tFYAAAA\tJTIAAA\tVVVVxx\n3003\t5912\t1\t3\t3\t3\t3\t3\t1003\t3003\t3003\t6\t7\tNLAAAA\tKTIAAA\tAAAAxx\n2638\t5913\t0\t2\t8\t18\t38\t638\t638\t2638\t2638\t76\t77\tMXAAAA\tLTIAAA\tHHHHxx\n9716\t5914\t0\t0\t6\t16\t16\t716\t1716\t4716\t9716\t32\t33\tSJAAAA\tMTIAAA\tOOOOxx\n9598\t5915\t0\t2\t8\t18\t98\t598\t1598\t4598\t9598\t196\t197\tEFAAAA\tNTIAAA\tVVVVxx\n9501\t5916\t1\t1\t1\t1\t1\t501\t1501\t4501\t9501\t2\t3\tLBAAAA\tOTIAAA\tAAAAxx\n1704\t5917\t0\t0\t4\t4\t4\t704\t1704\t1704\t1704\t8\t9\tONAAAA\tPTIAAA\tHHHHxx\n8609\t5918\t1\t1\t9\t9\t9\t609\t609\t3609\t8609\t18\t19\tDTAAAA\tQTIAAA\tOOOOxx\n5211\t5919\t1\t3\t1\t11\t11\t211\t1211\t211\t5211\t22\t23\tLSAAAA\tRTIAAA\tVVVVxx\n3605\t5920\t1\t1\t5\t5\t5\t605\t1605\t3605\t3605\t10\t11\tRIAAAA\tSTIAAA\tAAAAxx\n8730\t5921\t0\t2\t0\t10\t30\t730\t730\t3730\t8730\t60\t61\tUXAAAA\tTTIAAA\tHHHHxx\n4208\t5922\t0\t0\t8\t8\t8\t208\t208\t4208\t4208\t16\t17\tWFAAAA\tUTIAAA\tOOOOxx\n7784\t5923\t0\t0\t4\t4\t84\t784\t1784\t2784\t7784\t168\t169\tKNAAAA\tVTIAAA\tVVVVxx\n7501\t5924\t1\t1\t1\t1\t1\t501\t1501\t2501\t7501\t2\t3\tNCAAAA\tWTIAAA\tAAAAxx\n7862\t5925\t0\t2\t2\t2\t62\t862\t1862\t2862\t7862\t124\t125\tKQAAAA\tXTIAAA\tHHHHxx\n8922\t5926\t0\t2\t2\t2\t22\t922\t922\t3922\t8922\t44\t45\tEFAAAA\tYTIAAA\tOOOOxx\n3857\t5927\t1\t1\t7\t17\t57\t857\t1857\t3857\t3857\t114\t115\tJSAAAA\tZTIAAA\tVVVVxx\n6393\t5928\t1\t1\t3\t13\t93\t393\t393\t1393\t6393\t186\t187\tXLAAAA\tAUIAAA\tAAAAxx\n506\t5929\t0\t2\t6\t6\t6\t506\t506\t506\t506\t12\t13\tMTAAAA\tBUIAAA\tHHHHxx\n4232\t5930\t0\t0\t2\t12\t32\t232\t232\t4232\t4232\t64\t65\tUGAAAA\tCUIAAA\tOOOOxx\n8991\t5931\t1\t3\t1\t11\t91\t991\t991\t3991\t8991\t182\t183\tVHAAAA\tDUIAAA\tVVVVxx\n8578\t5932\t0\t2\t8\t18\t78\t578\t578\t3578\t8578\t156\t157\tYRAAAA\tEUIAAA\tAAAAxx\n3235\t5933\t1\t3\t5\t15\t35\t235\t1235\t3235\t3235\t70\t71\tLUAAAA\tFUIAAA\tHHHHxx\n963\t5934\t1\t3\t3\t3\t63\t963\t963\t963\t963\t126\t127\tBLAAAA\tGUIAAA\tOOOOxx\n113\t5935\t1\t1\t3\t13\t13\t113\t113\t113\t113\t26\t27\tJEAAAA\tHUIAAA\tVVVVxx\n8234\t5936\t0\t2\t4\t14\t34\t234\t234\t3234\t8234\t68\t69\tSEAAAA\tIUIAAA\tAAAAxx\n2613\t5937\t1\t1\t3\t13\t13\t613\t613\t2613\t2613\t26\t27\tNWAAAA\tJUIAAA\tHHHHxx\n5540\t5938\t0\t0\t0\t0\t40\t540\t1540\t540\t5540\t80\t81\tCFAAAA\tKUIAAA\tOOOOxx\n9727\t5939\t1\t3\t7\t7\t27\t727\t1727\t4727\t9727\t54\t55\tDKAAAA\tLUIAAA\tVVVVxx\n2229\t5940\t1\t1\t9\t9\t29\t229\t229\t2229\t2229\t58\t59\tTHAAAA\tMUIAAA\tAAAAxx\n6242\t5941\t0\t2\t2\t2\t42\t242\t242\t1242\t6242\t84\t85\tCGAAAA\tNUIAAA\tHHHHxx\n2502\t5942\t0\t2\t2\t2\t2\t502\t502\t2502\t2502\t4\t5\tGSAAAA\tOUIAAA\tOOOOxx\n6212\t5943\t0\t0\t2\t12\t12\t212\t212\t1212\t6212\t24\t25\tYEAAAA\tPUIAAA\tVVVVxx\n3495\t5944\t1\t3\t5\t15\t95\t495\t1495\t3495\t3495\t190\t191\tLEAAAA\tQUIAAA\tAAAAxx\n2364\t5945\t0\t0\t4\t4\t64\t364\t364\t2364\t2364\t128\t129\tYMAAAA\tRUIAAA\tHHHHxx\n6777\t5946\t1\t1\t7\t17\t77\t777\t777\t1777\t6777\t154\t155\tRAAAAA\tSUIAAA\tOOOOxx\n9811\t5947\t1\t3\t1\t11\t11\t811\t1811\t4811\t9811\t22\t23\tJNAAAA\tTUIAAA\tVVVVxx\n1450\t5948\t0\t2\t0\t10\t50\t450\t1450\t1450\t1450\t100\t101\tUDAAAA\tUUIAAA\tAAAAxx\n5008\t5949\t0\t0\t8\t8\t8\t8\t1008\t8\t5008\t16\t17\tQKAAAA\tVUIAAA\tHHHHxx\n1318\t5950\t0\t2\t8\t18\t18\t318\t1318\t1318\t1318\t36\t37\tSYAAAA\tWUIAAA\tOOOOxx\n3373\t5951\t1\t1\t3\t13\t73\t373\t1373\t3373\t3373\t146\t147\tTZAAAA\tXUIAAA\tVVVVxx\n398\t5952\t0\t2\t8\t18\t98\t398\t398\t398\t398\t196\t197\tIPAAAA\tYUIAAA\tAAAAxx\n3804\t5953\t0\t0\t4\t4\t4\t804\t1804\t3804\t3804\t8\t9\tIQAAAA\tZUIAAA\tHHHHxx\n9148\t5954\t0\t0\t8\t8\t48\t148\t1148\t4148\t9148\t96\t97\tWNAAAA\tAVIAAA\tOOOOxx\n4382\t5955\t0\t2\t2\t2\t82\t382\t382\t4382\t4382\t164\t165\tOMAAAA\tBVIAAA\tVVVVxx\n4026\t5956\t0\t2\t6\t6\t26\t26\t26\t4026\t4026\t52\t53\tWYAAAA\tCVIAAA\tAAAAxx\n7804\t5957\t0\t0\t4\t4\t4\t804\t1804\t2804\t7804\t8\t9\tEOAAAA\tDVIAAA\tHHHHxx\n6839\t5958\t1\t3\t9\t19\t39\t839\t839\t1839\t6839\t78\t79\tBDAAAA\tEVIAAA\tOOOOxx\n3756\t5959\t0\t0\t6\t16\t56\t756\t1756\t3756\t3756\t112\t113\tMOAAAA\tFVIAAA\tVVVVxx\n6734\t5960\t0\t2\t4\t14\t34\t734\t734\t1734\t6734\t68\t69\tAZAAAA\tGVIAAA\tAAAAxx\n2228\t5961\t0\t0\t8\t8\t28\t228\t228\t2228\t2228\t56\t57\tSHAAAA\tHVIAAA\tHHHHxx\n3273\t5962\t1\t1\t3\t13\t73\t273\t1273\t3273\t3273\t146\t147\tXVAAAA\tIVIAAA\tOOOOxx\n3708\t5963\t0\t0\t8\t8\t8\t708\t1708\t3708\t3708\t16\t17\tQMAAAA\tJVIAAA\tVVVVxx\n4320\t5964\t0\t0\t0\t0\t20\t320\t320\t4320\t4320\t40\t41\tEKAAAA\tKVIAAA\tAAAAxx\n74\t5965\t0\t2\t4\t14\t74\t74\t74\t74\t74\t148\t149\tWCAAAA\tLVIAAA\tHHHHxx\n2520\t5966\t0\t0\t0\t0\t20\t520\t520\t2520\t2520\t40\t41\tYSAAAA\tMVIAAA\tOOOOxx\n9619\t5967\t1\t3\t9\t19\t19\t619\t1619\t4619\t9619\t38\t39\tZFAAAA\tNVIAAA\tVVVVxx\n1801\t5968\t1\t1\t1\t1\t1\t801\t1801\t1801\t1801\t2\t3\tHRAAAA\tOVIAAA\tAAAAxx\n6399\t5969\t1\t3\t9\t19\t99\t399\t399\t1399\t6399\t198\t199\tDMAAAA\tPVIAAA\tHHHHxx\n8313\t5970\t1\t1\t3\t13\t13\t313\t313\t3313\t8313\t26\t27\tTHAAAA\tQVIAAA\tOOOOxx\n7003\t5971\t1\t3\t3\t3\t3\t3\t1003\t2003\t7003\t6\t7\tJJAAAA\tRVIAAA\tVVVVxx\n329\t5972\t1\t1\t9\t9\t29\t329\t329\t329\t329\t58\t59\tRMAAAA\tSVIAAA\tAAAAxx\n9090\t5973\t0\t2\t0\t10\t90\t90\t1090\t4090\t9090\t180\t181\tQLAAAA\tTVIAAA\tHHHHxx\n2299\t5974\t1\t3\t9\t19\t99\t299\t299\t2299\t2299\t198\t199\tLKAAAA\tUVIAAA\tOOOOxx\n3925\t5975\t1\t1\t5\t5\t25\t925\t1925\t3925\t3925\t50\t51\tZUAAAA\tVVIAAA\tVVVVxx\n8145\t5976\t1\t1\t5\t5\t45\t145\t145\t3145\t8145\t90\t91\tHBAAAA\tWVIAAA\tAAAAxx\n8561\t5977\t1\t1\t1\t1\t61\t561\t561\t3561\t8561\t122\t123\tHRAAAA\tXVIAAA\tHHHHxx\n2797\t5978\t1\t1\t7\t17\t97\t797\t797\t2797\t2797\t194\t195\tPDAAAA\tYVIAAA\tOOOOxx\n1451\t5979\t1\t3\t1\t11\t51\t451\t1451\t1451\t1451\t102\t103\tVDAAAA\tZVIAAA\tVVVVxx\n7977\t5980\t1\t1\t7\t17\t77\t977\t1977\t2977\t7977\t154\t155\tVUAAAA\tAWIAAA\tAAAAxx\n112\t5981\t0\t0\t2\t12\t12\t112\t112\t112\t112\t24\t25\tIEAAAA\tBWIAAA\tHHHHxx\n5265\t5982\t1\t1\t5\t5\t65\t265\t1265\t265\t5265\t130\t131\tNUAAAA\tCWIAAA\tOOOOxx\n3819\t5983\t1\t3\t9\t19\t19\t819\t1819\t3819\t3819\t38\t39\tXQAAAA\tDWIAAA\tVVVVxx\n3648\t5984\t0\t0\t8\t8\t48\t648\t1648\t3648\t3648\t96\t97\tIKAAAA\tEWIAAA\tAAAAxx\n6306\t5985\t0\t2\t6\t6\t6\t306\t306\t1306\t6306\t12\t13\tOIAAAA\tFWIAAA\tHHHHxx\n2385\t5986\t1\t1\t5\t5\t85\t385\t385\t2385\t2385\t170\t171\tTNAAAA\tGWIAAA\tOOOOxx\n9084\t5987\t0\t0\t4\t4\t84\t84\t1084\t4084\t9084\t168\t169\tKLAAAA\tHWIAAA\tVVVVxx\n4499\t5988\t1\t3\t9\t19\t99\t499\t499\t4499\t4499\t198\t199\tBRAAAA\tIWIAAA\tAAAAxx\n1154\t5989\t0\t2\t4\t14\t54\t154\t1154\t1154\t1154\t108\t109\tKSAAAA\tJWIAAA\tHHHHxx\n6800\t5990\t0\t0\t0\t0\t0\t800\t800\t1800\t6800\t0\t1\tOBAAAA\tKWIAAA\tOOOOxx\n8049\t5991\t1\t1\t9\t9\t49\t49\t49\t3049\t8049\t98\t99\tPXAAAA\tLWIAAA\tVVVVxx\n3733\t5992\t1\t1\t3\t13\t33\t733\t1733\t3733\t3733\t66\t67\tPNAAAA\tMWIAAA\tAAAAxx\n8496\t5993\t0\t0\t6\t16\t96\t496\t496\t3496\t8496\t192\t193\tUOAAAA\tNWIAAA\tHHHHxx\n9952\t5994\t0\t0\t2\t12\t52\t952\t1952\t4952\t9952\t104\t105\tUSAAAA\tOWIAAA\tOOOOxx\n9792\t5995\t0\t0\t2\t12\t92\t792\t1792\t4792\t9792\t184\t185\tQMAAAA\tPWIAAA\tVVVVxx\n5081\t5996\t1\t1\t1\t1\t81\t81\t1081\t81\t5081\t162\t163\tLNAAAA\tQWIAAA\tAAAAxx\n7908\t5997\t0\t0\t8\t8\t8\t908\t1908\t2908\t7908\t16\t17\tESAAAA\tRWIAAA\tHHHHxx\n5398\t5998\t0\t2\t8\t18\t98\t398\t1398\t398\t5398\t196\t197\tQZAAAA\tSWIAAA\tOOOOxx\n8423\t5999\t1\t3\t3\t3\t23\t423\t423\t3423\t8423\t46\t47\tZLAAAA\tTWIAAA\tVVVVxx\n3362\t6000\t0\t2\t2\t2\t62\t362\t1362\t3362\t3362\t124\t125\tIZAAAA\tUWIAAA\tAAAAxx\n7767\t6001\t1\t3\t7\t7\t67\t767\t1767\t2767\t7767\t134\t135\tTMAAAA\tVWIAAA\tHHHHxx\n7063\t6002\t1\t3\t3\t3\t63\t63\t1063\t2063\t7063\t126\t127\tRLAAAA\tWWIAAA\tOOOOxx\n8350\t6003\t0\t2\t0\t10\t50\t350\t350\t3350\t8350\t100\t101\tEJAAAA\tXWIAAA\tVVVVxx\n6779\t6004\t1\t3\t9\t19\t79\t779\t779\t1779\t6779\t158\t159\tTAAAAA\tYWIAAA\tAAAAxx\n5742\t6005\t0\t2\t2\t2\t42\t742\t1742\t742\t5742\t84\t85\tWMAAAA\tZWIAAA\tHHHHxx\n9045\t6006\t1\t1\t5\t5\t45\t45\t1045\t4045\t9045\t90\t91\tXJAAAA\tAXIAAA\tOOOOxx\n8792\t6007\t0\t0\t2\t12\t92\t792\t792\t3792\t8792\t184\t185\tEAAAAA\tBXIAAA\tVVVVxx\n8160\t6008\t0\t0\t0\t0\t60\t160\t160\t3160\t8160\t120\t121\tWBAAAA\tCXIAAA\tAAAAxx\n3061\t6009\t1\t1\t1\t1\t61\t61\t1061\t3061\t3061\t122\t123\tTNAAAA\tDXIAAA\tHHHHxx\n4721\t6010\t1\t1\t1\t1\t21\t721\t721\t4721\t4721\t42\t43\tPZAAAA\tEXIAAA\tOOOOxx\n9817\t6011\t1\t1\t7\t17\t17\t817\t1817\t4817\t9817\t34\t35\tPNAAAA\tFXIAAA\tVVVVxx\n9257\t6012\t1\t1\t7\t17\t57\t257\t1257\t4257\t9257\t114\t115\tBSAAAA\tGXIAAA\tAAAAxx\n7779\t6013\t1\t3\t9\t19\t79\t779\t1779\t2779\t7779\t158\t159\tFNAAAA\tHXIAAA\tHHHHxx\n2663\t6014\t1\t3\t3\t3\t63\t663\t663\t2663\t2663\t126\t127\tLYAAAA\tIXIAAA\tOOOOxx\n3885\t6015\t1\t1\t5\t5\t85\t885\t1885\t3885\t3885\t170\t171\tLTAAAA\tJXIAAA\tVVVVxx\n9469\t6016\t1\t1\t9\t9\t69\t469\t1469\t4469\t9469\t138\t139\tFAAAAA\tKXIAAA\tAAAAxx\n6766\t6017\t0\t2\t6\t6\t66\t766\t766\t1766\t6766\t132\t133\tGAAAAA\tLXIAAA\tHHHHxx\n7173\t6018\t1\t1\t3\t13\t73\t173\t1173\t2173\t7173\t146\t147\tXPAAAA\tMXIAAA\tOOOOxx\n4709\t6019\t1\t1\t9\t9\t9\t709\t709\t4709\t4709\t18\t19\tDZAAAA\tNXIAAA\tVVVVxx\n4210\t6020\t0\t2\t0\t10\t10\t210\t210\t4210\t4210\t20\t21\tYFAAAA\tOXIAAA\tAAAAxx\n3715\t6021\t1\t3\t5\t15\t15\t715\t1715\t3715\t3715\t30\t31\tXMAAAA\tPXIAAA\tHHHHxx\n5089\t6022\t1\t1\t9\t9\t89\t89\t1089\t89\t5089\t178\t179\tTNAAAA\tQXIAAA\tOOOOxx\n1639\t6023\t1\t3\t9\t19\t39\t639\t1639\t1639\t1639\t78\t79\tBLAAAA\tRXIAAA\tVVVVxx\n5757\t6024\t1\t1\t7\t17\t57\t757\t1757\t757\t5757\t114\t115\tLNAAAA\tSXIAAA\tAAAAxx\n3545\t6025\t1\t1\t5\t5\t45\t545\t1545\t3545\t3545\t90\t91\tJGAAAA\tTXIAAA\tHHHHxx\n709\t6026\t1\t1\t9\t9\t9\t709\t709\t709\t709\t18\t19\tHBAAAA\tUXIAAA\tOOOOxx\n6519\t6027\t1\t3\t9\t19\t19\t519\t519\t1519\t6519\t38\t39\tTQAAAA\tVXIAAA\tVVVVxx\n4341\t6028\t1\t1\t1\t1\t41\t341\t341\t4341\t4341\t82\t83\tZKAAAA\tWXIAAA\tAAAAxx\n2381\t6029\t1\t1\t1\t1\t81\t381\t381\t2381\t2381\t162\t163\tPNAAAA\tXXIAAA\tHHHHxx\n7215\t6030\t1\t3\t5\t15\t15\t215\t1215\t2215\t7215\t30\t31\tNRAAAA\tYXIAAA\tOOOOxx\n9323\t6031\t1\t3\t3\t3\t23\t323\t1323\t4323\t9323\t46\t47\tPUAAAA\tZXIAAA\tVVVVxx\n3593\t6032\t1\t1\t3\t13\t93\t593\t1593\t3593\t3593\t186\t187\tFIAAAA\tAYIAAA\tAAAAxx\n3123\t6033\t1\t3\t3\t3\t23\t123\t1123\t3123\t3123\t46\t47\tDQAAAA\tBYIAAA\tHHHHxx\n8673\t6034\t1\t1\t3\t13\t73\t673\t673\t3673\t8673\t146\t147\tPVAAAA\tCYIAAA\tOOOOxx\n5094\t6035\t0\t2\t4\t14\t94\t94\t1094\t94\t5094\t188\t189\tYNAAAA\tDYIAAA\tVVVVxx\n6477\t6036\t1\t1\t7\t17\t77\t477\t477\t1477\t6477\t154\t155\tDPAAAA\tEYIAAA\tAAAAxx\n9734\t6037\t0\t2\t4\t14\t34\t734\t1734\t4734\t9734\t68\t69\tKKAAAA\tFYIAAA\tHHHHxx\n2998\t6038\t0\t2\t8\t18\t98\t998\t998\t2998\t2998\t196\t197\tILAAAA\tGYIAAA\tOOOOxx\n7807\t6039\t1\t3\t7\t7\t7\t807\t1807\t2807\t7807\t14\t15\tHOAAAA\tHYIAAA\tVVVVxx\n5739\t6040\t1\t3\t9\t19\t39\t739\t1739\t739\t5739\t78\t79\tTMAAAA\tIYIAAA\tAAAAxx\n138\t6041\t0\t2\t8\t18\t38\t138\t138\t138\t138\t76\t77\tIFAAAA\tJYIAAA\tHHHHxx\n2403\t6042\t1\t3\t3\t3\t3\t403\t403\t2403\t2403\t6\t7\tLOAAAA\tKYIAAA\tOOOOxx\n2484\t6043\t0\t0\t4\t4\t84\t484\t484\t2484\t2484\t168\t169\tORAAAA\tLYIAAA\tVVVVxx\n2805\t6044\t1\t1\t5\t5\t5\t805\t805\t2805\t2805\t10\t11\tXDAAAA\tMYIAAA\tAAAAxx\n5189\t6045\t1\t1\t9\t9\t89\t189\t1189\t189\t5189\t178\t179\tPRAAAA\tNYIAAA\tHHHHxx\n8336\t6046\t0\t0\t6\t16\t36\t336\t336\t3336\t8336\t72\t73\tQIAAAA\tOYIAAA\tOOOOxx\n5241\t6047\t1\t1\t1\t1\t41\t241\t1241\t241\t5241\t82\t83\tPTAAAA\tPYIAAA\tVVVVxx\n2612\t6048\t0\t0\t2\t12\t12\t612\t612\t2612\t2612\t24\t25\tMWAAAA\tQYIAAA\tAAAAxx\n2571\t6049\t1\t3\t1\t11\t71\t571\t571\t2571\t2571\t142\t143\tXUAAAA\tRYIAAA\tHHHHxx\n926\t6050\t0\t2\t6\t6\t26\t926\t926\t926\t926\t52\t53\tQJAAAA\tSYIAAA\tOOOOxx\n337\t6051\t1\t1\t7\t17\t37\t337\t337\t337\t337\t74\t75\tZMAAAA\tTYIAAA\tVVVVxx\n2821\t6052\t1\t1\t1\t1\t21\t821\t821\t2821\t2821\t42\t43\tNEAAAA\tUYIAAA\tAAAAxx\n2658\t6053\t0\t2\t8\t18\t58\t658\t658\t2658\t2658\t116\t117\tGYAAAA\tVYIAAA\tHHHHxx\n9054\t6054\t0\t2\t4\t14\t54\t54\t1054\t4054\t9054\t108\t109\tGKAAAA\tWYIAAA\tOOOOxx\n5492\t6055\t0\t0\t2\t12\t92\t492\t1492\t492\t5492\t184\t185\tGDAAAA\tXYIAAA\tVVVVxx\n7313\t6056\t1\t1\t3\t13\t13\t313\t1313\t2313\t7313\t26\t27\tHVAAAA\tYYIAAA\tAAAAxx\n75\t6057\t1\t3\t5\t15\t75\t75\t75\t75\t75\t150\t151\tXCAAAA\tZYIAAA\tHHHHxx\n5489\t6058\t1\t1\t9\t9\t89\t489\t1489\t489\t5489\t178\t179\tDDAAAA\tAZIAAA\tOOOOxx\n8413\t6059\t1\t1\t3\t13\t13\t413\t413\t3413\t8413\t26\t27\tPLAAAA\tBZIAAA\tVVVVxx\n3693\t6060\t1\t1\t3\t13\t93\t693\t1693\t3693\t3693\t186\t187\tBMAAAA\tCZIAAA\tAAAAxx\n9820\t6061\t0\t0\t0\t0\t20\t820\t1820\t4820\t9820\t40\t41\tSNAAAA\tDZIAAA\tHHHHxx\n8157\t6062\t1\t1\t7\t17\t57\t157\t157\t3157\t8157\t114\t115\tTBAAAA\tEZIAAA\tOOOOxx\n4161\t6063\t1\t1\t1\t1\t61\t161\t161\t4161\t4161\t122\t123\tBEAAAA\tFZIAAA\tVVVVxx\n8339\t6064\t1\t3\t9\t19\t39\t339\t339\t3339\t8339\t78\t79\tTIAAAA\tGZIAAA\tAAAAxx\n4141\t6065\t1\t1\t1\t1\t41\t141\t141\t4141\t4141\t82\t83\tHDAAAA\tHZIAAA\tHHHHxx\n9001\t6066\t1\t1\t1\t1\t1\t1\t1001\t4001\t9001\t2\t3\tFIAAAA\tIZIAAA\tOOOOxx\n8247\t6067\t1\t3\t7\t7\t47\t247\t247\t3247\t8247\t94\t95\tFFAAAA\tJZIAAA\tVVVVxx\n1182\t6068\t0\t2\t2\t2\t82\t182\t1182\t1182\t1182\t164\t165\tMTAAAA\tKZIAAA\tAAAAxx\n9876\t6069\t0\t0\t6\t16\t76\t876\t1876\t4876\t9876\t152\t153\tWPAAAA\tLZIAAA\tHHHHxx\n4302\t6070\t0\t2\t2\t2\t2\t302\t302\t4302\t4302\t4\t5\tMJAAAA\tMZIAAA\tOOOOxx\n6674\t6071\t0\t2\t4\t14\t74\t674\t674\t1674\t6674\t148\t149\tSWAAAA\tNZIAAA\tVVVVxx\n4214\t6072\t0\t2\t4\t14\t14\t214\t214\t4214\t4214\t28\t29\tCGAAAA\tOZIAAA\tAAAAxx\n5584\t6073\t0\t0\t4\t4\t84\t584\t1584\t584\t5584\t168\t169\tUGAAAA\tPZIAAA\tHHHHxx\n265\t6074\t1\t1\t5\t5\t65\t265\t265\t265\t265\t130\t131\tFKAAAA\tQZIAAA\tOOOOxx\n9207\t6075\t1\t3\t7\t7\t7\t207\t1207\t4207\t9207\t14\t15\tDQAAAA\tRZIAAA\tVVVVxx\n9434\t6076\t0\t2\t4\t14\t34\t434\t1434\t4434\t9434\t68\t69\tWYAAAA\tSZIAAA\tAAAAxx\n2921\t6077\t1\t1\t1\t1\t21\t921\t921\t2921\t2921\t42\t43\tJIAAAA\tTZIAAA\tHHHHxx\n9355\t6078\t1\t3\t5\t15\t55\t355\t1355\t4355\t9355\t110\t111\tVVAAAA\tUZIAAA\tOOOOxx\n8538\t6079\t0\t2\t8\t18\t38\t538\t538\t3538\t8538\t76\t77\tKQAAAA\tVZIAAA\tVVVVxx\n4559\t6080\t1\t3\t9\t19\t59\t559\t559\t4559\t4559\t118\t119\tJTAAAA\tWZIAAA\tAAAAxx\n9175\t6081\t1\t3\t5\t15\t75\t175\t1175\t4175\t9175\t150\t151\tXOAAAA\tXZIAAA\tHHHHxx\n4489\t6082\t1\t1\t9\t9\t89\t489\t489\t4489\t4489\t178\t179\tRQAAAA\tYZIAAA\tOOOOxx\n1485\t6083\t1\t1\t5\t5\t85\t485\t1485\t1485\t1485\t170\t171\tDFAAAA\tZZIAAA\tVVVVxx\n8853\t6084\t1\t1\t3\t13\t53\t853\t853\t3853\t8853\t106\t107\tNCAAAA\tAAJAAA\tAAAAxx\n9143\t6085\t1\t3\t3\t3\t43\t143\t1143\t4143\t9143\t86\t87\tRNAAAA\tBAJAAA\tHHHHxx\n9551\t6086\t1\t3\t1\t11\t51\t551\t1551\t4551\t9551\t102\t103\tJDAAAA\tCAJAAA\tOOOOxx\n49\t6087\t1\t1\t9\t9\t49\t49\t49\t49\t49\t98\t99\tXBAAAA\tDAJAAA\tVVVVxx\n8351\t6088\t1\t3\t1\t11\t51\t351\t351\t3351\t8351\t102\t103\tFJAAAA\tEAJAAA\tAAAAxx\n9748\t6089\t0\t0\t8\t8\t48\t748\t1748\t4748\t9748\t96\t97\tYKAAAA\tFAJAAA\tHHHHxx\n4536\t6090\t0\t0\t6\t16\t36\t536\t536\t4536\t4536\t72\t73\tMSAAAA\tGAJAAA\tOOOOxx\n930\t6091\t0\t2\t0\t10\t30\t930\t930\t930\t930\t60\t61\tUJAAAA\tHAJAAA\tVVVVxx\n2206\t6092\t0\t2\t6\t6\t6\t206\t206\t2206\t2206\t12\t13\tWGAAAA\tIAJAAA\tAAAAxx\n8004\t6093\t0\t0\t4\t4\t4\t4\t4\t3004\t8004\t8\t9\tWVAAAA\tJAJAAA\tHHHHxx\n219\t6094\t1\t3\t9\t19\t19\t219\t219\t219\t219\t38\t39\tLIAAAA\tKAJAAA\tOOOOxx\n2724\t6095\t0\t0\t4\t4\t24\t724\t724\t2724\t2724\t48\t49\tUAAAAA\tLAJAAA\tVVVVxx\n4868\t6096\t0\t0\t8\t8\t68\t868\t868\t4868\t4868\t136\t137\tGFAAAA\tMAJAAA\tAAAAxx\n5952\t6097\t0\t0\t2\t12\t52\t952\t1952\t952\t5952\t104\t105\tYUAAAA\tNAJAAA\tHHHHxx\n2094\t6098\t0\t2\t4\t14\t94\t94\t94\t2094\t2094\t188\t189\tOCAAAA\tOAJAAA\tOOOOxx\n5707\t6099\t1\t3\t7\t7\t7\t707\t1707\t707\t5707\t14\t15\tNLAAAA\tPAJAAA\tVVVVxx\n5200\t6100\t0\t0\t0\t0\t0\t200\t1200\t200\t5200\t0\t1\tASAAAA\tQAJAAA\tAAAAxx\n967\t6101\t1\t3\t7\t7\t67\t967\t967\t967\t967\t134\t135\tFLAAAA\tRAJAAA\tHHHHxx\n1982\t6102\t0\t2\t2\t2\t82\t982\t1982\t1982\t1982\t164\t165\tGYAAAA\tSAJAAA\tOOOOxx\n3410\t6103\t0\t2\t0\t10\t10\t410\t1410\t3410\t3410\t20\t21\tEBAAAA\tTAJAAA\tVVVVxx\n174\t6104\t0\t2\t4\t14\t74\t174\t174\t174\t174\t148\t149\tSGAAAA\tUAJAAA\tAAAAxx\n9217\t6105\t1\t1\t7\t17\t17\t217\t1217\t4217\t9217\t34\t35\tNQAAAA\tVAJAAA\tHHHHxx\n9103\t6106\t1\t3\t3\t3\t3\t103\t1103\t4103\t9103\t6\t7\tDMAAAA\tWAJAAA\tOOOOxx\n868\t6107\t0\t0\t8\t8\t68\t868\t868\t868\t868\t136\t137\tKHAAAA\tXAJAAA\tVVVVxx\n8261\t6108\t1\t1\t1\t1\t61\t261\t261\t3261\t8261\t122\t123\tTFAAAA\tYAJAAA\tAAAAxx\n2720\t6109\t0\t0\t0\t0\t20\t720\t720\t2720\t2720\t40\t41\tQAAAAA\tZAJAAA\tHHHHxx\n2999\t6110\t1\t3\t9\t19\t99\t999\t999\t2999\t2999\t198\t199\tJLAAAA\tABJAAA\tOOOOxx\n769\t6111\t1\t1\t9\t9\t69\t769\t769\t769\t769\t138\t139\tPDAAAA\tBBJAAA\tVVVVxx\n4533\t6112\t1\t1\t3\t13\t33\t533\t533\t4533\t4533\t66\t67\tJSAAAA\tCBJAAA\tAAAAxx\n2030\t6113\t0\t2\t0\t10\t30\t30\t30\t2030\t2030\t60\t61\tCAAAAA\tDBJAAA\tHHHHxx\n5824\t6114\t0\t0\t4\t4\t24\t824\t1824\t824\t5824\t48\t49\tAQAAAA\tEBJAAA\tOOOOxx\n2328\t6115\t0\t0\t8\t8\t28\t328\t328\t2328\t2328\t56\t57\tOLAAAA\tFBJAAA\tVVVVxx\n9970\t6116\t0\t2\t0\t10\t70\t970\t1970\t4970\t9970\t140\t141\tMTAAAA\tGBJAAA\tAAAAxx\n3192\t6117\t0\t0\t2\t12\t92\t192\t1192\t3192\t3192\t184\t185\tUSAAAA\tHBJAAA\tHHHHxx\n3387\t6118\t1\t3\t7\t7\t87\t387\t1387\t3387\t3387\t174\t175\tHAAAAA\tIBJAAA\tOOOOxx\n1936\t6119\t0\t0\t6\t16\t36\t936\t1936\t1936\t1936\t72\t73\tMWAAAA\tJBJAAA\tVVVVxx\n6934\t6120\t0\t2\t4\t14\t34\t934\t934\t1934\t6934\t68\t69\tSGAAAA\tKBJAAA\tAAAAxx\n5615\t6121\t1\t3\t5\t15\t15\t615\t1615\t615\t5615\t30\t31\tZHAAAA\tLBJAAA\tHHHHxx\n2241\t6122\t1\t1\t1\t1\t41\t241\t241\t2241\t2241\t82\t83\tFIAAAA\tMBJAAA\tOOOOxx\n1842\t6123\t0\t2\t2\t2\t42\t842\t1842\t1842\t1842\t84\t85\tWSAAAA\tNBJAAA\tVVVVxx\n8044\t6124\t0\t0\t4\t4\t44\t44\t44\t3044\t8044\t88\t89\tKXAAAA\tOBJAAA\tAAAAxx\n8902\t6125\t0\t2\t2\t2\t2\t902\t902\t3902\t8902\t4\t5\tKEAAAA\tPBJAAA\tHHHHxx\n4519\t6126\t1\t3\t9\t19\t19\t519\t519\t4519\t4519\t38\t39\tVRAAAA\tQBJAAA\tOOOOxx\n492\t6127\t0\t0\t2\t12\t92\t492\t492\t492\t492\t184\t185\tYSAAAA\tRBJAAA\tVVVVxx\n2694\t6128\t0\t2\t4\t14\t94\t694\t694\t2694\t2694\t188\t189\tQZAAAA\tSBJAAA\tAAAAxx\n5861\t6129\t1\t1\t1\t1\t61\t861\t1861\t861\t5861\t122\t123\tLRAAAA\tTBJAAA\tHHHHxx\n2104\t6130\t0\t0\t4\t4\t4\t104\t104\t2104\t2104\t8\t9\tYCAAAA\tUBJAAA\tOOOOxx\n5376\t6131\t0\t0\t6\t16\t76\t376\t1376\t376\t5376\t152\t153\tUYAAAA\tVBJAAA\tVVVVxx\n3147\t6132\t1\t3\t7\t7\t47\t147\t1147\t3147\t3147\t94\t95\tBRAAAA\tWBJAAA\tAAAAxx\n9880\t6133\t0\t0\t0\t0\t80\t880\t1880\t4880\t9880\t160\t161\tAQAAAA\tXBJAAA\tHHHHxx\n6171\t6134\t1\t3\t1\t11\t71\t171\t171\t1171\t6171\t142\t143\tJDAAAA\tYBJAAA\tOOOOxx\n1850\t6135\t0\t2\t0\t10\t50\t850\t1850\t1850\t1850\t100\t101\tETAAAA\tZBJAAA\tVVVVxx\n1775\t6136\t1\t3\t5\t15\t75\t775\t1775\t1775\t1775\t150\t151\tHQAAAA\tACJAAA\tAAAAxx\n9261\t6137\t1\t1\t1\t1\t61\t261\t1261\t4261\t9261\t122\t123\tFSAAAA\tBCJAAA\tHHHHxx\n9648\t6138\t0\t0\t8\t8\t48\t648\t1648\t4648\t9648\t96\t97\tCHAAAA\tCCJAAA\tOOOOxx\n7846\t6139\t0\t2\t6\t6\t46\t846\t1846\t2846\t7846\t92\t93\tUPAAAA\tDCJAAA\tVVVVxx\n1446\t6140\t0\t2\t6\t6\t46\t446\t1446\t1446\t1446\t92\t93\tQDAAAA\tECJAAA\tAAAAxx\n3139\t6141\t1\t3\t9\t19\t39\t139\t1139\t3139\t3139\t78\t79\tTQAAAA\tFCJAAA\tHHHHxx\n6142\t6142\t0\t2\t2\t2\t42\t142\t142\t1142\t6142\t84\t85\tGCAAAA\tGCJAAA\tOOOOxx\n5812\t6143\t0\t0\t2\t12\t12\t812\t1812\t812\t5812\t24\t25\tOPAAAA\tHCJAAA\tVVVVxx\n6728\t6144\t0\t0\t8\t8\t28\t728\t728\t1728\t6728\t56\t57\tUYAAAA\tICJAAA\tAAAAxx\n4428\t6145\t0\t0\t8\t8\t28\t428\t428\t4428\t4428\t56\t57\tIOAAAA\tJCJAAA\tHHHHxx\n502\t6146\t0\t2\t2\t2\t2\t502\t502\t502\t502\t4\t5\tITAAAA\tKCJAAA\tOOOOxx\n2363\t6147\t1\t3\t3\t3\t63\t363\t363\t2363\t2363\t126\t127\tXMAAAA\tLCJAAA\tVVVVxx\n3808\t6148\t0\t0\t8\t8\t8\t808\t1808\t3808\t3808\t16\t17\tMQAAAA\tMCJAAA\tAAAAxx\n1010\t6149\t0\t2\t0\t10\t10\t10\t1010\t1010\t1010\t20\t21\tWMAAAA\tNCJAAA\tHHHHxx\n9565\t6150\t1\t1\t5\t5\t65\t565\t1565\t4565\t9565\t130\t131\tXDAAAA\tOCJAAA\tOOOOxx\n1587\t6151\t1\t3\t7\t7\t87\t587\t1587\t1587\t1587\t174\t175\tBJAAAA\tPCJAAA\tVVVVxx\n1474\t6152\t0\t2\t4\t14\t74\t474\t1474\t1474\t1474\t148\t149\tSEAAAA\tQCJAAA\tAAAAxx\n6215\t6153\t1\t3\t5\t15\t15\t215\t215\t1215\t6215\t30\t31\tBFAAAA\tRCJAAA\tHHHHxx\n2395\t6154\t1\t3\t5\t15\t95\t395\t395\t2395\t2395\t190\t191\tDOAAAA\tSCJAAA\tOOOOxx\n8753\t6155\t1\t1\t3\t13\t53\t753\t753\t3753\t8753\t106\t107\tRYAAAA\tTCJAAA\tVVVVxx\n2446\t6156\t0\t2\t6\t6\t46\t446\t446\t2446\t2446\t92\t93\tCQAAAA\tUCJAAA\tAAAAxx\n60\t6157\t0\t0\t0\t0\t60\t60\t60\t60\t60\t120\t121\tICAAAA\tVCJAAA\tHHHHxx\n982\t6158\t0\t2\t2\t2\t82\t982\t982\t982\t982\t164\t165\tULAAAA\tWCJAAA\tOOOOxx\n6489\t6159\t1\t1\t9\t9\t89\t489\t489\t1489\t6489\t178\t179\tPPAAAA\tXCJAAA\tVVVVxx\n5334\t6160\t0\t2\t4\t14\t34\t334\t1334\t334\t5334\t68\t69\tEXAAAA\tYCJAAA\tAAAAxx\n8540\t6161\t0\t0\t0\t0\t40\t540\t540\t3540\t8540\t80\t81\tMQAAAA\tZCJAAA\tHHHHxx\n490\t6162\t0\t2\t0\t10\t90\t490\t490\t490\t490\t180\t181\tWSAAAA\tADJAAA\tOOOOxx\n6763\t6163\t1\t3\t3\t3\t63\t763\t763\t1763\t6763\t126\t127\tDAAAAA\tBDJAAA\tVVVVxx\n8273\t6164\t1\t1\t3\t13\t73\t273\t273\t3273\t8273\t146\t147\tFGAAAA\tCDJAAA\tAAAAxx\n8327\t6165\t1\t3\t7\t7\t27\t327\t327\t3327\t8327\t54\t55\tHIAAAA\tDDJAAA\tHHHHxx\n8541\t6166\t1\t1\t1\t1\t41\t541\t541\t3541\t8541\t82\t83\tNQAAAA\tEDJAAA\tOOOOxx\n3459\t6167\t1\t3\t9\t19\t59\t459\t1459\t3459\t3459\t118\t119\tBDAAAA\tFDJAAA\tVVVVxx\n5557\t6168\t1\t1\t7\t17\t57\t557\t1557\t557\t5557\t114\t115\tTFAAAA\tGDJAAA\tAAAAxx\n158\t6169\t0\t2\t8\t18\t58\t158\t158\t158\t158\t116\t117\tCGAAAA\tHDJAAA\tHHHHxx\n1741\t6170\t1\t1\t1\t1\t41\t741\t1741\t1741\t1741\t82\t83\tZOAAAA\tIDJAAA\tOOOOxx\n8385\t6171\t1\t1\t5\t5\t85\t385\t385\t3385\t8385\t170\t171\tNKAAAA\tJDJAAA\tVVVVxx\n617\t6172\t1\t1\t7\t17\t17\t617\t617\t617\t617\t34\t35\tTXAAAA\tKDJAAA\tAAAAxx\n3560\t6173\t0\t0\t0\t0\t60\t560\t1560\t3560\t3560\t120\t121\tYGAAAA\tLDJAAA\tHHHHxx\n5216\t6174\t0\t0\t6\t16\t16\t216\t1216\t216\t5216\t32\t33\tQSAAAA\tMDJAAA\tOOOOxx\n8443\t6175\t1\t3\t3\t3\t43\t443\t443\t3443\t8443\t86\t87\tTMAAAA\tNDJAAA\tVVVVxx\n2700\t6176\t0\t0\t0\t0\t0\t700\t700\t2700\t2700\t0\t1\tWZAAAA\tODJAAA\tAAAAxx\n3661\t6177\t1\t1\t1\t1\t61\t661\t1661\t3661\t3661\t122\t123\tVKAAAA\tPDJAAA\tHHHHxx\n4875\t6178\t1\t3\t5\t15\t75\t875\t875\t4875\t4875\t150\t151\tNFAAAA\tQDJAAA\tOOOOxx\n6721\t6179\t1\t1\t1\t1\t21\t721\t721\t1721\t6721\t42\t43\tNYAAAA\tRDJAAA\tVVVVxx\n3659\t6180\t1\t3\t9\t19\t59\t659\t1659\t3659\t3659\t118\t119\tTKAAAA\tSDJAAA\tAAAAxx\n8944\t6181\t0\t0\t4\t4\t44\t944\t944\t3944\t8944\t88\t89\tAGAAAA\tTDJAAA\tHHHHxx\n9133\t6182\t1\t1\t3\t13\t33\t133\t1133\t4133\t9133\t66\t67\tHNAAAA\tUDJAAA\tOOOOxx\n9882\t6183\t0\t2\t2\t2\t82\t882\t1882\t4882\t9882\t164\t165\tCQAAAA\tVDJAAA\tVVVVxx\n2102\t6184\t0\t2\t2\t2\t2\t102\t102\t2102\t2102\t4\t5\tWCAAAA\tWDJAAA\tAAAAxx\n9445\t6185\t1\t1\t5\t5\t45\t445\t1445\t4445\t9445\t90\t91\tHZAAAA\tXDJAAA\tHHHHxx\n5559\t6186\t1\t3\t9\t19\t59\t559\t1559\t559\t5559\t118\t119\tVFAAAA\tYDJAAA\tOOOOxx\n6096\t6187\t0\t0\t6\t16\t96\t96\t96\t1096\t6096\t192\t193\tMAAAAA\tZDJAAA\tVVVVxx\n9336\t6188\t0\t0\t6\t16\t36\t336\t1336\t4336\t9336\t72\t73\tCVAAAA\tAEJAAA\tAAAAxx\n2162\t6189\t0\t2\t2\t2\t62\t162\t162\t2162\t2162\t124\t125\tEFAAAA\tBEJAAA\tHHHHxx\n7459\t6190\t1\t3\t9\t19\t59\t459\t1459\t2459\t7459\t118\t119\tXAAAAA\tCEJAAA\tOOOOxx\n3248\t6191\t0\t0\t8\t8\t48\t248\t1248\t3248\t3248\t96\t97\tYUAAAA\tDEJAAA\tVVVVxx\n9539\t6192\t1\t3\t9\t19\t39\t539\t1539\t4539\t9539\t78\t79\tXCAAAA\tEEJAAA\tAAAAxx\n4449\t6193\t1\t1\t9\t9\t49\t449\t449\t4449\t4449\t98\t99\tDPAAAA\tFEJAAA\tHHHHxx\n2809\t6194\t1\t1\t9\t9\t9\t809\t809\t2809\t2809\t18\t19\tBEAAAA\tGEJAAA\tOOOOxx\n7058\t6195\t0\t2\t8\t18\t58\t58\t1058\t2058\t7058\t116\t117\tMLAAAA\tHEJAAA\tVVVVxx\n3512\t6196\t0\t0\t2\t12\t12\t512\t1512\t3512\t3512\t24\t25\tCFAAAA\tIEJAAA\tAAAAxx\n2802\t6197\t0\t2\t2\t2\t2\t802\t802\t2802\t2802\t4\t5\tUDAAAA\tJEJAAA\tHHHHxx\n6289\t6198\t1\t1\t9\t9\t89\t289\t289\t1289\t6289\t178\t179\tXHAAAA\tKEJAAA\tOOOOxx\n1947\t6199\t1\t3\t7\t7\t47\t947\t1947\t1947\t1947\t94\t95\tXWAAAA\tLEJAAA\tVVVVxx\n9572\t6200\t0\t0\t2\t12\t72\t572\t1572\t4572\t9572\t144\t145\tEEAAAA\tMEJAAA\tAAAAxx\n2356\t6201\t0\t0\t6\t16\t56\t356\t356\t2356\t2356\t112\t113\tQMAAAA\tNEJAAA\tHHHHxx\n3039\t6202\t1\t3\t9\t19\t39\t39\t1039\t3039\t3039\t78\t79\tXMAAAA\tOEJAAA\tOOOOxx\n9452\t6203\t0\t0\t2\t12\t52\t452\t1452\t4452\t9452\t104\t105\tOZAAAA\tPEJAAA\tVVVVxx\n6328\t6204\t0\t0\t8\t8\t28\t328\t328\t1328\t6328\t56\t57\tKJAAAA\tQEJAAA\tAAAAxx\n7661\t6205\t1\t1\t1\t1\t61\t661\t1661\t2661\t7661\t122\t123\tRIAAAA\tREJAAA\tHHHHxx\n2566\t6206\t0\t2\t6\t6\t66\t566\t566\t2566\t2566\t132\t133\tSUAAAA\tSEJAAA\tOOOOxx\n6095\t6207\t1\t3\t5\t15\t95\t95\t95\t1095\t6095\t190\t191\tLAAAAA\tTEJAAA\tVVVVxx\n6367\t6208\t1\t3\t7\t7\t67\t367\t367\t1367\t6367\t134\t135\tXKAAAA\tUEJAAA\tAAAAxx\n3368\t6209\t0\t0\t8\t8\t68\t368\t1368\t3368\t3368\t136\t137\tOZAAAA\tVEJAAA\tHHHHxx\n5567\t6210\t1\t3\t7\t7\t67\t567\t1567\t567\t5567\t134\t135\tDGAAAA\tWEJAAA\tOOOOxx\n9834\t6211\t0\t2\t4\t14\t34\t834\t1834\t4834\t9834\t68\t69\tGOAAAA\tXEJAAA\tVVVVxx\n9695\t6212\t1\t3\t5\t15\t95\t695\t1695\t4695\t9695\t190\t191\tXIAAAA\tYEJAAA\tAAAAxx\n7291\t6213\t1\t3\t1\t11\t91\t291\t1291\t2291\t7291\t182\t183\tLUAAAA\tZEJAAA\tHHHHxx\n4806\t6214\t0\t2\t6\t6\t6\t806\t806\t4806\t4806\t12\t13\tWCAAAA\tAFJAAA\tOOOOxx\n2000\t6215\t0\t0\t0\t0\t0\t0\t0\t2000\t2000\t0\t1\tYYAAAA\tBFJAAA\tVVVVxx\n6817\t6216\t1\t1\t7\t17\t17\t817\t817\t1817\t6817\t34\t35\tFCAAAA\tCFJAAA\tAAAAxx\n8487\t6217\t1\t3\t7\t7\t87\t487\t487\t3487\t8487\t174\t175\tLOAAAA\tDFJAAA\tHHHHxx\n3245\t6218\t1\t1\t5\t5\t45\t245\t1245\t3245\t3245\t90\t91\tVUAAAA\tEFJAAA\tOOOOxx\n632\t6219\t0\t0\t2\t12\t32\t632\t632\t632\t632\t64\t65\tIYAAAA\tFFJAAA\tVVVVxx\n8067\t6220\t1\t3\t7\t7\t67\t67\t67\t3067\t8067\t134\t135\tHYAAAA\tGFJAAA\tAAAAxx\n7140\t6221\t0\t0\t0\t0\t40\t140\t1140\t2140\t7140\t80\t81\tQOAAAA\tHFJAAA\tHHHHxx\n6802\t6222\t0\t2\t2\t2\t2\t802\t802\t1802\t6802\t4\t5\tQBAAAA\tIFJAAA\tOOOOxx\n3980\t6223\t0\t0\t0\t0\t80\t980\t1980\t3980\t3980\t160\t161\tCXAAAA\tJFJAAA\tVVVVxx\n1321\t6224\t1\t1\t1\t1\t21\t321\t1321\t1321\t1321\t42\t43\tVYAAAA\tKFJAAA\tAAAAxx\n2273\t6225\t1\t1\t3\t13\t73\t273\t273\t2273\t2273\t146\t147\tLJAAAA\tLFJAAA\tHHHHxx\n6787\t6226\t1\t3\t7\t7\t87\t787\t787\t1787\t6787\t174\t175\tBBAAAA\tMFJAAA\tOOOOxx\n9480\t6227\t0\t0\t0\t0\t80\t480\t1480\t4480\t9480\t160\t161\tQAAAAA\tNFJAAA\tVVVVxx\n9404\t6228\t0\t0\t4\t4\t4\t404\t1404\t4404\t9404\t8\t9\tSXAAAA\tOFJAAA\tAAAAxx\n3914\t6229\t0\t2\t4\t14\t14\t914\t1914\t3914\t3914\t28\t29\tOUAAAA\tPFJAAA\tHHHHxx\n5507\t6230\t1\t3\t7\t7\t7\t507\t1507\t507\t5507\t14\t15\tVDAAAA\tQFJAAA\tOOOOxx\n1813\t6231\t1\t1\t3\t13\t13\t813\t1813\t1813\t1813\t26\t27\tTRAAAA\tRFJAAA\tVVVVxx\n1999\t6232\t1\t3\t9\t19\t99\t999\t1999\t1999\t1999\t198\t199\tXYAAAA\tSFJAAA\tAAAAxx\n3848\t6233\t0\t0\t8\t8\t48\t848\t1848\t3848\t3848\t96\t97\tASAAAA\tTFJAAA\tHHHHxx\n9693\t6234\t1\t1\t3\t13\t93\t693\t1693\t4693\t9693\t186\t187\tVIAAAA\tUFJAAA\tOOOOxx\n1353\t6235\t1\t1\t3\t13\t53\t353\t1353\t1353\t1353\t106\t107\tBAAAAA\tVFJAAA\tVVVVxx\n7218\t6236\t0\t2\t8\t18\t18\t218\t1218\t2218\t7218\t36\t37\tQRAAAA\tWFJAAA\tAAAAxx\n8223\t6237\t1\t3\t3\t3\t23\t223\t223\t3223\t8223\t46\t47\tHEAAAA\tXFJAAA\tHHHHxx\n9982\t6238\t0\t2\t2\t2\t82\t982\t1982\t4982\t9982\t164\t165\tYTAAAA\tYFJAAA\tOOOOxx\n8799\t6239\t1\t3\t9\t19\t99\t799\t799\t3799\t8799\t198\t199\tLAAAAA\tZFJAAA\tVVVVxx\n8929\t6240\t1\t1\t9\t9\t29\t929\t929\t3929\t8929\t58\t59\tLFAAAA\tAGJAAA\tAAAAxx\n4626\t6241\t0\t2\t6\t6\t26\t626\t626\t4626\t4626\t52\t53\tYVAAAA\tBGJAAA\tHHHHxx\n7958\t6242\t0\t2\t8\t18\t58\t958\t1958\t2958\t7958\t116\t117\tCUAAAA\tCGJAAA\tOOOOxx\n3743\t6243\t1\t3\t3\t3\t43\t743\t1743\t3743\t3743\t86\t87\tZNAAAA\tDGJAAA\tVVVVxx\n8165\t6244\t1\t1\t5\t5\t65\t165\t165\t3165\t8165\t130\t131\tBCAAAA\tEGJAAA\tAAAAxx\n7899\t6245\t1\t3\t9\t19\t99\t899\t1899\t2899\t7899\t198\t199\tVRAAAA\tFGJAAA\tHHHHxx\n8698\t6246\t0\t2\t8\t18\t98\t698\t698\t3698\t8698\t196\t197\tOWAAAA\tGGJAAA\tOOOOxx\n9270\t6247\t0\t2\t0\t10\t70\t270\t1270\t4270\t9270\t140\t141\tOSAAAA\tHGJAAA\tVVVVxx\n6348\t6248\t0\t0\t8\t8\t48\t348\t348\t1348\t6348\t96\t97\tEKAAAA\tIGJAAA\tAAAAxx\n6999\t6249\t1\t3\t9\t19\t99\t999\t999\t1999\t6999\t198\t199\tFJAAAA\tJGJAAA\tHHHHxx\n8467\t6250\t1\t3\t7\t7\t67\t467\t467\t3467\t8467\t134\t135\tRNAAAA\tKGJAAA\tOOOOxx\n3907\t6251\t1\t3\t7\t7\t7\t907\t1907\t3907\t3907\t14\t15\tHUAAAA\tLGJAAA\tVVVVxx\n4738\t6252\t0\t2\t8\t18\t38\t738\t738\t4738\t4738\t76\t77\tGAAAAA\tMGJAAA\tAAAAxx\n248\t6253\t0\t0\t8\t8\t48\t248\t248\t248\t248\t96\t97\tOJAAAA\tNGJAAA\tHHHHxx\n8769\t6254\t1\t1\t9\t9\t69\t769\t769\t3769\t8769\t138\t139\tHZAAAA\tOGJAAA\tOOOOxx\n9922\t6255\t0\t2\t2\t2\t22\t922\t1922\t4922\t9922\t44\t45\tQRAAAA\tPGJAAA\tVVVVxx\n778\t6256\t0\t2\t8\t18\t78\t778\t778\t778\t778\t156\t157\tYDAAAA\tQGJAAA\tAAAAxx\n1233\t6257\t1\t1\t3\t13\t33\t233\t1233\t1233\t1233\t66\t67\tLVAAAA\tRGJAAA\tHHHHxx\n1183\t6258\t1\t3\t3\t3\t83\t183\t1183\t1183\t1183\t166\t167\tNTAAAA\tSGJAAA\tOOOOxx\n2838\t6259\t0\t2\t8\t18\t38\t838\t838\t2838\t2838\t76\t77\tEFAAAA\tTGJAAA\tVVVVxx\n3096\t6260\t0\t0\t6\t16\t96\t96\t1096\t3096\t3096\t192\t193\tCPAAAA\tUGJAAA\tAAAAxx\n8566\t6261\t0\t2\t6\t6\t66\t566\t566\t3566\t8566\t132\t133\tMRAAAA\tVGJAAA\tHHHHxx\n7635\t6262\t1\t3\t5\t15\t35\t635\t1635\t2635\t7635\t70\t71\tRHAAAA\tWGJAAA\tOOOOxx\n5428\t6263\t0\t0\t8\t8\t28\t428\t1428\t428\t5428\t56\t57\tUAAAAA\tXGJAAA\tVVVVxx\n7430\t6264\t0\t2\t0\t10\t30\t430\t1430\t2430\t7430\t60\t61\tUZAAAA\tYGJAAA\tAAAAxx\n7210\t6265\t0\t2\t0\t10\t10\t210\t1210\t2210\t7210\t20\t21\tIRAAAA\tZGJAAA\tHHHHxx\n4485\t6266\t1\t1\t5\t5\t85\t485\t485\t4485\t4485\t170\t171\tNQAAAA\tAHJAAA\tOOOOxx\n9623\t6267\t1\t3\t3\t3\t23\t623\t1623\t4623\t9623\t46\t47\tDGAAAA\tBHJAAA\tVVVVxx\n3670\t6268\t0\t2\t0\t10\t70\t670\t1670\t3670\t3670\t140\t141\tELAAAA\tCHJAAA\tAAAAxx\n1575\t6269\t1\t3\t5\t15\t75\t575\t1575\t1575\t1575\t150\t151\tPIAAAA\tDHJAAA\tHHHHxx\n5874\t6270\t0\t2\t4\t14\t74\t874\t1874\t874\t5874\t148\t149\tYRAAAA\tEHJAAA\tOOOOxx\n673\t6271\t1\t1\t3\t13\t73\t673\t673\t673\t673\t146\t147\tXZAAAA\tFHJAAA\tVVVVxx\n9712\t6272\t0\t0\t2\t12\t12\t712\t1712\t4712\t9712\t24\t25\tOJAAAA\tGHJAAA\tAAAAxx\n7729\t6273\t1\t1\t9\t9\t29\t729\t1729\t2729\t7729\t58\t59\tHLAAAA\tHHJAAA\tHHHHxx\n4318\t6274\t0\t2\t8\t18\t18\t318\t318\t4318\t4318\t36\t37\tCKAAAA\tIHJAAA\tOOOOxx\n4143\t6275\t1\t3\t3\t3\t43\t143\t143\t4143\t4143\t86\t87\tJDAAAA\tJHJAAA\tVVVVxx\n4932\t6276\t0\t0\t2\t12\t32\t932\t932\t4932\t4932\t64\t65\tSHAAAA\tKHJAAA\tAAAAxx\n5835\t6277\t1\t3\t5\t15\t35\t835\t1835\t835\t5835\t70\t71\tLQAAAA\tLHJAAA\tHHHHxx\n4966\t6278\t0\t2\t6\t6\t66\t966\t966\t4966\t4966\t132\t133\tAJAAAA\tMHJAAA\tOOOOxx\n6711\t6279\t1\t3\t1\t11\t11\t711\t711\t1711\t6711\t22\t23\tDYAAAA\tNHJAAA\tVVVVxx\n3990\t6280\t0\t2\t0\t10\t90\t990\t1990\t3990\t3990\t180\t181\tMXAAAA\tOHJAAA\tAAAAxx\n990\t6281\t0\t2\t0\t10\t90\t990\t990\t990\t990\t180\t181\tCMAAAA\tPHJAAA\tHHHHxx\n220\t6282\t0\t0\t0\t0\t20\t220\t220\t220\t220\t40\t41\tMIAAAA\tQHJAAA\tOOOOxx\n5693\t6283\t1\t1\t3\t13\t93\t693\t1693\t693\t5693\t186\t187\tZKAAAA\tRHJAAA\tVVVVxx\n3662\t6284\t0\t2\t2\t2\t62\t662\t1662\t3662\t3662\t124\t125\tWKAAAA\tSHJAAA\tAAAAxx\n7844\t6285\t0\t0\t4\t4\t44\t844\t1844\t2844\t7844\t88\t89\tSPAAAA\tTHJAAA\tHHHHxx\n5515\t6286\t1\t3\t5\t15\t15\t515\t1515\t515\t5515\t30\t31\tDEAAAA\tUHJAAA\tOOOOxx\n5551\t6287\t1\t3\t1\t11\t51\t551\t1551\t551\t5551\t102\t103\tNFAAAA\tVHJAAA\tVVVVxx\n2358\t6288\t0\t2\t8\t18\t58\t358\t358\t2358\t2358\t116\t117\tSMAAAA\tWHJAAA\tAAAAxx\n8977\t6289\t1\t1\t7\t17\t77\t977\t977\t3977\t8977\t154\t155\tHHAAAA\tXHJAAA\tHHHHxx\n7040\t6290\t0\t0\t0\t0\t40\t40\t1040\t2040\t7040\t80\t81\tUKAAAA\tYHJAAA\tOOOOxx\n105\t6291\t1\t1\t5\t5\t5\t105\t105\t105\t105\t10\t11\tBEAAAA\tZHJAAA\tVVVVxx\n4496\t6292\t0\t0\t6\t16\t96\t496\t496\t4496\t4496\t192\t193\tYQAAAA\tAIJAAA\tAAAAxx\n2254\t6293\t0\t2\t4\t14\t54\t254\t254\t2254\t2254\t108\t109\tSIAAAA\tBIJAAA\tHHHHxx\n411\t6294\t1\t3\t1\t11\t11\t411\t411\t411\t411\t22\t23\tVPAAAA\tCIJAAA\tOOOOxx\n2373\t6295\t1\t1\t3\t13\t73\t373\t373\t2373\t2373\t146\t147\tHNAAAA\tDIJAAA\tVVVVxx\n3477\t6296\t1\t1\t7\t17\t77\t477\t1477\t3477\t3477\t154\t155\tTDAAAA\tEIJAAA\tAAAAxx\n8964\t6297\t0\t0\t4\t4\t64\t964\t964\t3964\t8964\t128\t129\tUGAAAA\tFIJAAA\tHHHHxx\n8471\t6298\t1\t3\t1\t11\t71\t471\t471\t3471\t8471\t142\t143\tVNAAAA\tGIJAAA\tOOOOxx\n5776\t6299\t0\t0\t6\t16\t76\t776\t1776\t776\t5776\t152\t153\tEOAAAA\tHIJAAA\tVVVVxx\n9921\t6300\t1\t1\t1\t1\t21\t921\t1921\t4921\t9921\t42\t43\tPRAAAA\tIIJAAA\tAAAAxx\n7816\t6301\t0\t0\t6\t16\t16\t816\t1816\t2816\t7816\t32\t33\tQOAAAA\tJIJAAA\tHHHHxx\n2439\t6302\t1\t3\t9\t19\t39\t439\t439\t2439\t2439\t78\t79\tVPAAAA\tKIJAAA\tOOOOxx\n9298\t6303\t0\t2\t8\t18\t98\t298\t1298\t4298\t9298\t196\t197\tQTAAAA\tLIJAAA\tVVVVxx\n9424\t6304\t0\t0\t4\t4\t24\t424\t1424\t4424\t9424\t48\t49\tMYAAAA\tMIJAAA\tAAAAxx\n3252\t6305\t0\t0\t2\t12\t52\t252\t1252\t3252\t3252\t104\t105\tCVAAAA\tNIJAAA\tHHHHxx\n1401\t6306\t1\t1\t1\t1\t1\t401\t1401\t1401\t1401\t2\t3\tXBAAAA\tOIJAAA\tOOOOxx\n9632\t6307\t0\t0\t2\t12\t32\t632\t1632\t4632\t9632\t64\t65\tMGAAAA\tPIJAAA\tVVVVxx\n370\t6308\t0\t2\t0\t10\t70\t370\t370\t370\t370\t140\t141\tGOAAAA\tQIJAAA\tAAAAxx\n728\t6309\t0\t0\t8\t8\t28\t728\t728\t728\t728\t56\t57\tACAAAA\tRIJAAA\tHHHHxx\n2888\t6310\t0\t0\t8\t8\t88\t888\t888\t2888\t2888\t176\t177\tCHAAAA\tSIJAAA\tOOOOxx\n1441\t6311\t1\t1\t1\t1\t41\t441\t1441\t1441\t1441\t82\t83\tLDAAAA\tTIJAAA\tVVVVxx\n8308\t6312\t0\t0\t8\t8\t8\t308\t308\t3308\t8308\t16\t17\tOHAAAA\tUIJAAA\tAAAAxx\n2165\t6313\t1\t1\t5\t5\t65\t165\t165\t2165\t2165\t130\t131\tHFAAAA\tVIJAAA\tHHHHxx\n6359\t6314\t1\t3\t9\t19\t59\t359\t359\t1359\t6359\t118\t119\tPKAAAA\tWIJAAA\tOOOOxx\n9637\t6315\t1\t1\t7\t17\t37\t637\t1637\t4637\t9637\t74\t75\tRGAAAA\tXIJAAA\tVVVVxx\n5208\t6316\t0\t0\t8\t8\t8\t208\t1208\t208\t5208\t16\t17\tISAAAA\tYIJAAA\tAAAAxx\n4705\t6317\t1\t1\t5\t5\t5\t705\t705\t4705\t4705\t10\t11\tZYAAAA\tZIJAAA\tHHHHxx\n2341\t6318\t1\t1\t1\t1\t41\t341\t341\t2341\t2341\t82\t83\tBMAAAA\tAJJAAA\tOOOOxx\n8539\t6319\t1\t3\t9\t19\t39\t539\t539\t3539\t8539\t78\t79\tLQAAAA\tBJJAAA\tVVVVxx\n7528\t6320\t0\t0\t8\t8\t28\t528\t1528\t2528\t7528\t56\t57\tODAAAA\tCJJAAA\tAAAAxx\n7969\t6321\t1\t1\t9\t9\t69\t969\t1969\t2969\t7969\t138\t139\tNUAAAA\tDJJAAA\tHHHHxx\n6381\t6322\t1\t1\t1\t1\t81\t381\t381\t1381\t6381\t162\t163\tLLAAAA\tEJJAAA\tOOOOxx\n4906\t6323\t0\t2\t6\t6\t6\t906\t906\t4906\t4906\t12\t13\tSGAAAA\tFJJAAA\tVVVVxx\n8697\t6324\t1\t1\t7\t17\t97\t697\t697\t3697\t8697\t194\t195\tNWAAAA\tGJJAAA\tAAAAxx\n6301\t6325\t1\t1\t1\t1\t1\t301\t301\t1301\t6301\t2\t3\tJIAAAA\tHJJAAA\tHHHHxx\n7554\t6326\t0\t2\t4\t14\t54\t554\t1554\t2554\t7554\t108\t109\tOEAAAA\tIJJAAA\tOOOOxx\n5107\t6327\t1\t3\t7\t7\t7\t107\t1107\t107\t5107\t14\t15\tLOAAAA\tJJJAAA\tVVVVxx\n5046\t6328\t0\t2\t6\t6\t46\t46\t1046\t46\t5046\t92\t93\tCMAAAA\tKJJAAA\tAAAAxx\n4063\t6329\t1\t3\t3\t3\t63\t63\t63\t4063\t4063\t126\t127\tHAAAAA\tLJJAAA\tHHHHxx\n7580\t6330\t0\t0\t0\t0\t80\t580\t1580\t2580\t7580\t160\t161\tOFAAAA\tMJJAAA\tOOOOxx\n2245\t6331\t1\t1\t5\t5\t45\t245\t245\t2245\t2245\t90\t91\tJIAAAA\tNJJAAA\tVVVVxx\n3711\t6332\t1\t3\t1\t11\t11\t711\t1711\t3711\t3711\t22\t23\tTMAAAA\tOJJAAA\tAAAAxx\n3220\t6333\t0\t0\t0\t0\t20\t220\t1220\t3220\t3220\t40\t41\tWTAAAA\tPJJAAA\tHHHHxx\n6463\t6334\t1\t3\t3\t3\t63\t463\t463\t1463\t6463\t126\t127\tPOAAAA\tQJJAAA\tOOOOxx\n8196\t6335\t0\t0\t6\t16\t96\t196\t196\t3196\t8196\t192\t193\tGDAAAA\tRJJAAA\tVVVVxx\n9875\t6336\t1\t3\t5\t15\t75\t875\t1875\t4875\t9875\t150\t151\tVPAAAA\tSJJAAA\tAAAAxx\n1333\t6337\t1\t1\t3\t13\t33\t333\t1333\t1333\t1333\t66\t67\tHZAAAA\tTJJAAA\tHHHHxx\n7880\t6338\t0\t0\t0\t0\t80\t880\t1880\t2880\t7880\t160\t161\tCRAAAA\tUJJAAA\tOOOOxx\n2322\t6339\t0\t2\t2\t2\t22\t322\t322\t2322\t2322\t44\t45\tILAAAA\tVJJAAA\tVVVVxx\n2163\t6340\t1\t3\t3\t3\t63\t163\t163\t2163\t2163\t126\t127\tFFAAAA\tWJJAAA\tAAAAxx\n421\t6341\t1\t1\t1\t1\t21\t421\t421\t421\t421\t42\t43\tFQAAAA\tXJJAAA\tHHHHxx\n2042\t6342\t0\t2\t2\t2\t42\t42\t42\t2042\t2042\t84\t85\tOAAAAA\tYJJAAA\tOOOOxx\n1424\t6343\t0\t0\t4\t4\t24\t424\t1424\t1424\t1424\t48\t49\tUCAAAA\tZJJAAA\tVVVVxx\n7870\t6344\t0\t2\t0\t10\t70\t870\t1870\t2870\t7870\t140\t141\tSQAAAA\tAKJAAA\tAAAAxx\n2653\t6345\t1\t1\t3\t13\t53\t653\t653\t2653\t2653\t106\t107\tBYAAAA\tBKJAAA\tHHHHxx\n4216\t6346\t0\t0\t6\t16\t16\t216\t216\t4216\t4216\t32\t33\tEGAAAA\tCKJAAA\tOOOOxx\n1515\t6347\t1\t3\t5\t15\t15\t515\t1515\t1515\t1515\t30\t31\tHGAAAA\tDKJAAA\tVVVVxx\n7860\t6348\t0\t0\t0\t0\t60\t860\t1860\t2860\t7860\t120\t121\tIQAAAA\tEKJAAA\tAAAAxx\n2984\t6349\t0\t0\t4\t4\t84\t984\t984\t2984\t2984\t168\t169\tUKAAAA\tFKJAAA\tHHHHxx\n6269\t6350\t1\t1\t9\t9\t69\t269\t269\t1269\t6269\t138\t139\tDHAAAA\tGKJAAA\tOOOOxx\n2609\t6351\t1\t1\t9\t9\t9\t609\t609\t2609\t2609\t18\t19\tJWAAAA\tHKJAAA\tVVVVxx\n3671\t6352\t1\t3\t1\t11\t71\t671\t1671\t3671\t3671\t142\t143\tFLAAAA\tIKJAAA\tAAAAxx\n4544\t6353\t0\t0\t4\t4\t44\t544\t544\t4544\t4544\t88\t89\tUSAAAA\tJKJAAA\tHHHHxx\n4668\t6354\t0\t0\t8\t8\t68\t668\t668\t4668\t4668\t136\t137\tOXAAAA\tKKJAAA\tOOOOxx\n2565\t6355\t1\t1\t5\t5\t65\t565\t565\t2565\t2565\t130\t131\tRUAAAA\tLKJAAA\tVVVVxx\n3126\t6356\t0\t2\t6\t6\t26\t126\t1126\t3126\t3126\t52\t53\tGQAAAA\tMKJAAA\tAAAAxx\n7573\t6357\t1\t1\t3\t13\t73\t573\t1573\t2573\t7573\t146\t147\tHFAAAA\tNKJAAA\tHHHHxx\n1476\t6358\t0\t0\t6\t16\t76\t476\t1476\t1476\t1476\t152\t153\tUEAAAA\tOKJAAA\tOOOOxx\n2146\t6359\t0\t2\t6\t6\t46\t146\t146\t2146\t2146\t92\t93\tOEAAAA\tPKJAAA\tVVVVxx\n9990\t6360\t0\t2\t0\t10\t90\t990\t1990\t4990\t9990\t180\t181\tGUAAAA\tQKJAAA\tAAAAxx\n2530\t6361\t0\t2\t0\t10\t30\t530\t530\t2530\t2530\t60\t61\tITAAAA\tRKJAAA\tHHHHxx\n9288\t6362\t0\t0\t8\t8\t88\t288\t1288\t4288\t9288\t176\t177\tGTAAAA\tSKJAAA\tOOOOxx\n9755\t6363\t1\t3\t5\t15\t55\t755\t1755\t4755\t9755\t110\t111\tFLAAAA\tTKJAAA\tVVVVxx\n5305\t6364\t1\t1\t5\t5\t5\t305\t1305\t305\t5305\t10\t11\tBWAAAA\tUKJAAA\tAAAAxx\n2495\t6365\t1\t3\t5\t15\t95\t495\t495\t2495\t2495\t190\t191\tZRAAAA\tVKJAAA\tHHHHxx\n5443\t6366\t1\t3\t3\t3\t43\t443\t1443\t443\t5443\t86\t87\tJBAAAA\tWKJAAA\tOOOOxx\n1930\t6367\t0\t2\t0\t10\t30\t930\t1930\t1930\t1930\t60\t61\tGWAAAA\tXKJAAA\tVVVVxx\n9134\t6368\t0\t2\t4\t14\t34\t134\t1134\t4134\t9134\t68\t69\tINAAAA\tYKJAAA\tAAAAxx\n2844\t6369\t0\t0\t4\t4\t44\t844\t844\t2844\t2844\t88\t89\tKFAAAA\tZKJAAA\tHHHHxx\n896\t6370\t0\t0\t6\t16\t96\t896\t896\t896\t896\t192\t193\tMIAAAA\tALJAAA\tOOOOxx\n1330\t6371\t0\t2\t0\t10\t30\t330\t1330\t1330\t1330\t60\t61\tEZAAAA\tBLJAAA\tVVVVxx\n8980\t6372\t0\t0\t0\t0\t80\t980\t980\t3980\t8980\t160\t161\tKHAAAA\tCLJAAA\tAAAAxx\n5940\t6373\t0\t0\t0\t0\t40\t940\t1940\t940\t5940\t80\t81\tMUAAAA\tDLJAAA\tHHHHxx\n6494\t6374\t0\t2\t4\t14\t94\t494\t494\t1494\t6494\t188\t189\tUPAAAA\tELJAAA\tOOOOxx\n165\t6375\t1\t1\t5\t5\t65\t165\t165\t165\t165\t130\t131\tJGAAAA\tFLJAAA\tVVVVxx\n2510\t6376\t0\t2\t0\t10\t10\t510\t510\t2510\t2510\t20\t21\tOSAAAA\tGLJAAA\tAAAAxx\n9950\t6377\t0\t2\t0\t10\t50\t950\t1950\t4950\t9950\t100\t101\tSSAAAA\tHLJAAA\tHHHHxx\n3854\t6378\t0\t2\t4\t14\t54\t854\t1854\t3854\t3854\t108\t109\tGSAAAA\tILJAAA\tOOOOxx\n7493\t6379\t1\t1\t3\t13\t93\t493\t1493\t2493\t7493\t186\t187\tFCAAAA\tJLJAAA\tVVVVxx\n4124\t6380\t0\t0\t4\t4\t24\t124\t124\t4124\t4124\t48\t49\tQCAAAA\tKLJAAA\tAAAAxx\n8563\t6381\t1\t3\t3\t3\t63\t563\t563\t3563\t8563\t126\t127\tJRAAAA\tLLJAAA\tHHHHxx\n8735\t6382\t1\t3\t5\t15\t35\t735\t735\t3735\t8735\t70\t71\tZXAAAA\tMLJAAA\tOOOOxx\n9046\t6383\t0\t2\t6\t6\t46\t46\t1046\t4046\t9046\t92\t93\tYJAAAA\tNLJAAA\tVVVVxx\n1754\t6384\t0\t2\t4\t14\t54\t754\t1754\t1754\t1754\t108\t109\tMPAAAA\tOLJAAA\tAAAAxx\n6954\t6385\t0\t2\t4\t14\t54\t954\t954\t1954\t6954\t108\t109\tMHAAAA\tPLJAAA\tHHHHxx\n4953\t6386\t1\t1\t3\t13\t53\t953\t953\t4953\t4953\t106\t107\tNIAAAA\tQLJAAA\tOOOOxx\n8142\t6387\t0\t2\t2\t2\t42\t142\t142\t3142\t8142\t84\t85\tEBAAAA\tRLJAAA\tVVVVxx\n9661\t6388\t1\t1\t1\t1\t61\t661\t1661\t4661\t9661\t122\t123\tPHAAAA\tSLJAAA\tAAAAxx\n6415\t6389\t1\t3\t5\t15\t15\t415\t415\t1415\t6415\t30\t31\tTMAAAA\tTLJAAA\tHHHHxx\n5782\t6390\t0\t2\t2\t2\t82\t782\t1782\t782\t5782\t164\t165\tKOAAAA\tULJAAA\tOOOOxx\n7721\t6391\t1\t1\t1\t1\t21\t721\t1721\t2721\t7721\t42\t43\tZKAAAA\tVLJAAA\tVVVVxx\n580\t6392\t0\t0\t0\t0\t80\t580\t580\t580\t580\t160\t161\tIWAAAA\tWLJAAA\tAAAAxx\n3784\t6393\t0\t0\t4\t4\t84\t784\t1784\t3784\t3784\t168\t169\tOPAAAA\tXLJAAA\tHHHHxx\n9810\t6394\t0\t2\t0\t10\t10\t810\t1810\t4810\t9810\t20\t21\tINAAAA\tYLJAAA\tOOOOxx\n8488\t6395\t0\t0\t8\t8\t88\t488\t488\t3488\t8488\t176\t177\tMOAAAA\tZLJAAA\tVVVVxx\n6214\t6396\t0\t2\t4\t14\t14\t214\t214\t1214\t6214\t28\t29\tAFAAAA\tAMJAAA\tAAAAxx\n9433\t6397\t1\t1\t3\t13\t33\t433\t1433\t4433\t9433\t66\t67\tVYAAAA\tBMJAAA\tHHHHxx\n9959\t6398\t1\t3\t9\t19\t59\t959\t1959\t4959\t9959\t118\t119\tBTAAAA\tCMJAAA\tOOOOxx\n554\t6399\t0\t2\t4\t14\t54\t554\t554\t554\t554\t108\t109\tIVAAAA\tDMJAAA\tVVVVxx\n6646\t6400\t0\t2\t6\t6\t46\t646\t646\t1646\t6646\t92\t93\tQVAAAA\tEMJAAA\tAAAAxx\n1138\t6401\t0\t2\t8\t18\t38\t138\t1138\t1138\t1138\t76\t77\tURAAAA\tFMJAAA\tHHHHxx\n9331\t6402\t1\t3\t1\t11\t31\t331\t1331\t4331\t9331\t62\t63\tXUAAAA\tGMJAAA\tOOOOxx\n7331\t6403\t1\t3\t1\t11\t31\t331\t1331\t2331\t7331\t62\t63\tZVAAAA\tHMJAAA\tVVVVxx\n3482\t6404\t0\t2\t2\t2\t82\t482\t1482\t3482\t3482\t164\t165\tYDAAAA\tIMJAAA\tAAAAxx\n3795\t6405\t1\t3\t5\t15\t95\t795\t1795\t3795\t3795\t190\t191\tZPAAAA\tJMJAAA\tHHHHxx\n2441\t6406\t1\t1\t1\t1\t41\t441\t441\t2441\t2441\t82\t83\tXPAAAA\tKMJAAA\tOOOOxx\n5229\t6407\t1\t1\t9\t9\t29\t229\t1229\t229\t5229\t58\t59\tDTAAAA\tLMJAAA\tVVVVxx\n7012\t6408\t0\t0\t2\t12\t12\t12\t1012\t2012\t7012\t24\t25\tSJAAAA\tMMJAAA\tAAAAxx\n7036\t6409\t0\t0\t6\t16\t36\t36\t1036\t2036\t7036\t72\t73\tQKAAAA\tNMJAAA\tHHHHxx\n8243\t6410\t1\t3\t3\t3\t43\t243\t243\t3243\t8243\t86\t87\tBFAAAA\tOMJAAA\tOOOOxx\n9320\t6411\t0\t0\t0\t0\t20\t320\t1320\t4320\t9320\t40\t41\tMUAAAA\tPMJAAA\tVVVVxx\n4693\t6412\t1\t1\t3\t13\t93\t693\t693\t4693\t4693\t186\t187\tNYAAAA\tQMJAAA\tAAAAxx\n6741\t6413\t1\t1\t1\t1\t41\t741\t741\t1741\t6741\t82\t83\tHZAAAA\tRMJAAA\tHHHHxx\n2997\t6414\t1\t1\t7\t17\t97\t997\t997\t2997\t2997\t194\t195\tHLAAAA\tSMJAAA\tOOOOxx\n4838\t6415\t0\t2\t8\t18\t38\t838\t838\t4838\t4838\t76\t77\tCEAAAA\tTMJAAA\tVVVVxx\n6945\t6416\t1\t1\t5\t5\t45\t945\t945\t1945\t6945\t90\t91\tDHAAAA\tUMJAAA\tAAAAxx\n8253\t6417\t1\t1\t3\t13\t53\t253\t253\t3253\t8253\t106\t107\tLFAAAA\tVMJAAA\tHHHHxx\n8989\t6418\t1\t1\t9\t9\t89\t989\t989\t3989\t8989\t178\t179\tTHAAAA\tWMJAAA\tOOOOxx\n2640\t6419\t0\t0\t0\t0\t40\t640\t640\t2640\t2640\t80\t81\tOXAAAA\tXMJAAA\tVVVVxx\n5647\t6420\t1\t3\t7\t7\t47\t647\t1647\t647\t5647\t94\t95\tFJAAAA\tYMJAAA\tAAAAxx\n7186\t6421\t0\t2\t6\t6\t86\t186\t1186\t2186\t7186\t172\t173\tKQAAAA\tZMJAAA\tHHHHxx\n3278\t6422\t0\t2\t8\t18\t78\t278\t1278\t3278\t3278\t156\t157\tCWAAAA\tANJAAA\tOOOOxx\n8546\t6423\t0\t2\t6\t6\t46\t546\t546\t3546\t8546\t92\t93\tSQAAAA\tBNJAAA\tVVVVxx\n8297\t6424\t1\t1\t7\t17\t97\t297\t297\t3297\t8297\t194\t195\tDHAAAA\tCNJAAA\tAAAAxx\n9534\t6425\t0\t2\t4\t14\t34\t534\t1534\t4534\t9534\t68\t69\tSCAAAA\tDNJAAA\tHHHHxx\n9618\t6426\t0\t2\t8\t18\t18\t618\t1618\t4618\t9618\t36\t37\tYFAAAA\tENJAAA\tOOOOxx\n8839\t6427\t1\t3\t9\t19\t39\t839\t839\t3839\t8839\t78\t79\tZBAAAA\tFNJAAA\tVVVVxx\n7605\t6428\t1\t1\t5\t5\t5\t605\t1605\t2605\t7605\t10\t11\tNGAAAA\tGNJAAA\tAAAAxx\n6421\t6429\t1\t1\t1\t1\t21\t421\t421\t1421\t6421\t42\t43\tZMAAAA\tHNJAAA\tHHHHxx\n3582\t6430\t0\t2\t2\t2\t82\t582\t1582\t3582\t3582\t164\t165\tUHAAAA\tINJAAA\tOOOOxx\n485\t6431\t1\t1\t5\t5\t85\t485\t485\t485\t485\t170\t171\tRSAAAA\tJNJAAA\tVVVVxx\n1925\t6432\t1\t1\t5\t5\t25\t925\t1925\t1925\t1925\t50\t51\tBWAAAA\tKNJAAA\tAAAAxx\n4296\t6433\t0\t0\t6\t16\t96\t296\t296\t4296\t4296\t192\t193\tGJAAAA\tLNJAAA\tHHHHxx\n8874\t6434\t0\t2\t4\t14\t74\t874\t874\t3874\t8874\t148\t149\tIDAAAA\tMNJAAA\tOOOOxx\n1443\t6435\t1\t3\t3\t3\t43\t443\t1443\t1443\t1443\t86\t87\tNDAAAA\tNNJAAA\tVVVVxx\n4239\t6436\t1\t3\t9\t19\t39\t239\t239\t4239\t4239\t78\t79\tBHAAAA\tONJAAA\tAAAAxx\n9760\t6437\t0\t0\t0\t0\t60\t760\t1760\t4760\t9760\t120\t121\tKLAAAA\tPNJAAA\tHHHHxx\n136\t6438\t0\t0\t6\t16\t36\t136\t136\t136\t136\t72\t73\tGFAAAA\tQNJAAA\tOOOOxx\n6472\t6439\t0\t0\t2\t12\t72\t472\t472\t1472\t6472\t144\t145\tYOAAAA\tRNJAAA\tVVVVxx\n4896\t6440\t0\t0\t6\t16\t96\t896\t896\t4896\t4896\t192\t193\tIGAAAA\tSNJAAA\tAAAAxx\n9028\t6441\t0\t0\t8\t8\t28\t28\t1028\t4028\t9028\t56\t57\tGJAAAA\tTNJAAA\tHHHHxx\n8354\t6442\t0\t2\t4\t14\t54\t354\t354\t3354\t8354\t108\t109\tIJAAAA\tUNJAAA\tOOOOxx\n8648\t6443\t0\t0\t8\t8\t48\t648\t648\t3648\t8648\t96\t97\tQUAAAA\tVNJAAA\tVVVVxx\n918\t6444\t0\t2\t8\t18\t18\t918\t918\t918\t918\t36\t37\tIJAAAA\tWNJAAA\tAAAAxx\n6606\t6445\t0\t2\t6\t6\t6\t606\t606\t1606\t6606\t12\t13\tCUAAAA\tXNJAAA\tHHHHxx\n2462\t6446\t0\t2\t2\t2\t62\t462\t462\t2462\t2462\t124\t125\tSQAAAA\tYNJAAA\tOOOOxx\n7536\t6447\t0\t0\t6\t16\t36\t536\t1536\t2536\t7536\t72\t73\tWDAAAA\tZNJAAA\tVVVVxx\n1700\t6448\t0\t0\t0\t0\t0\t700\t1700\t1700\t1700\t0\t1\tKNAAAA\tAOJAAA\tAAAAxx\n6740\t6449\t0\t0\t0\t0\t40\t740\t740\t1740\t6740\t80\t81\tGZAAAA\tBOJAAA\tHHHHxx\n28\t6450\t0\t0\t8\t8\t28\t28\t28\t28\t28\t56\t57\tCBAAAA\tCOJAAA\tOOOOxx\n6044\t6451\t0\t0\t4\t4\t44\t44\t44\t1044\t6044\t88\t89\tMYAAAA\tDOJAAA\tVVVVxx\n5053\t6452\t1\t1\t3\t13\t53\t53\t1053\t53\t5053\t106\t107\tJMAAAA\tEOJAAA\tAAAAxx\n4832\t6453\t0\t0\t2\t12\t32\t832\t832\t4832\t4832\t64\t65\tWDAAAA\tFOJAAA\tHHHHxx\n9145\t6454\t1\t1\t5\t5\t45\t145\t1145\t4145\t9145\t90\t91\tTNAAAA\tGOJAAA\tOOOOxx\n5482\t6455\t0\t2\t2\t2\t82\t482\t1482\t482\t5482\t164\t165\tWCAAAA\tHOJAAA\tVVVVxx\n7644\t6456\t0\t0\t4\t4\t44\t644\t1644\t2644\t7644\t88\t89\tAIAAAA\tIOJAAA\tAAAAxx\n2128\t6457\t0\t0\t8\t8\t28\t128\t128\t2128\t2128\t56\t57\tWDAAAA\tJOJAAA\tHHHHxx\n6583\t6458\t1\t3\t3\t3\t83\t583\t583\t1583\t6583\t166\t167\tFTAAAA\tKOJAAA\tOOOOxx\n4224\t6459\t0\t0\t4\t4\t24\t224\t224\t4224\t4224\t48\t49\tMGAAAA\tLOJAAA\tVVVVxx\n5253\t6460\t1\t1\t3\t13\t53\t253\t1253\t253\t5253\t106\t107\tBUAAAA\tMOJAAA\tAAAAxx\n8219\t6461\t1\t3\t9\t19\t19\t219\t219\t3219\t8219\t38\t39\tDEAAAA\tNOJAAA\tHHHHxx\n8113\t6462\t1\t1\t3\t13\t13\t113\t113\t3113\t8113\t26\t27\tBAAAAA\tOOJAAA\tOOOOxx\n3616\t6463\t0\t0\t6\t16\t16\t616\t1616\t3616\t3616\t32\t33\tCJAAAA\tPOJAAA\tVVVVxx\n1361\t6464\t1\t1\t1\t1\t61\t361\t1361\t1361\t1361\t122\t123\tJAAAAA\tQOJAAA\tAAAAxx\n949\t6465\t1\t1\t9\t9\t49\t949\t949\t949\t949\t98\t99\tNKAAAA\tROJAAA\tHHHHxx\n8582\t6466\t0\t2\t2\t2\t82\t582\t582\t3582\t8582\t164\t165\tCSAAAA\tSOJAAA\tOOOOxx\n5104\t6467\t0\t0\t4\t4\t4\t104\t1104\t104\t5104\t8\t9\tIOAAAA\tTOJAAA\tVVVVxx\n6146\t6468\t0\t2\t6\t6\t46\t146\t146\t1146\t6146\t92\t93\tKCAAAA\tUOJAAA\tAAAAxx\n7681\t6469\t1\t1\t1\t1\t81\t681\t1681\t2681\t7681\t162\t163\tLJAAAA\tVOJAAA\tHHHHxx\n1904\t6470\t0\t0\t4\t4\t4\t904\t1904\t1904\t1904\t8\t9\tGVAAAA\tWOJAAA\tOOOOxx\n1989\t6471\t1\t1\t9\t9\t89\t989\t1989\t1989\t1989\t178\t179\tNYAAAA\tXOJAAA\tVVVVxx\n4179\t6472\t1\t3\t9\t19\t79\t179\t179\t4179\t4179\t158\t159\tTEAAAA\tYOJAAA\tAAAAxx\n1739\t6473\t1\t3\t9\t19\t39\t739\t1739\t1739\t1739\t78\t79\tXOAAAA\tZOJAAA\tHHHHxx\n2447\t6474\t1\t3\t7\t7\t47\t447\t447\t2447\t2447\t94\t95\tDQAAAA\tAPJAAA\tOOOOxx\n3029\t6475\t1\t1\t9\t9\t29\t29\t1029\t3029\t3029\t58\t59\tNMAAAA\tBPJAAA\tVVVVxx\n9783\t6476\t1\t3\t3\t3\t83\t783\t1783\t4783\t9783\t166\t167\tHMAAAA\tCPJAAA\tAAAAxx\n8381\t6477\t1\t1\t1\t1\t81\t381\t381\t3381\t8381\t162\t163\tJKAAAA\tDPJAAA\tHHHHxx\n8755\t6478\t1\t3\t5\t15\t55\t755\t755\t3755\t8755\t110\t111\tTYAAAA\tEPJAAA\tOOOOxx\n8384\t6479\t0\t0\t4\t4\t84\t384\t384\t3384\t8384\t168\t169\tMKAAAA\tFPJAAA\tVVVVxx\n7655\t6480\t1\t3\t5\t15\t55\t655\t1655\t2655\t7655\t110\t111\tLIAAAA\tGPJAAA\tAAAAxx\n4766\t6481\t0\t2\t6\t6\t66\t766\t766\t4766\t4766\t132\t133\tIBAAAA\tHPJAAA\tHHHHxx\n3324\t6482\t0\t0\t4\t4\t24\t324\t1324\t3324\t3324\t48\t49\tWXAAAA\tIPJAAA\tOOOOxx\n5022\t6483\t0\t2\t2\t2\t22\t22\t1022\t22\t5022\t44\t45\tELAAAA\tJPJAAA\tVVVVxx\n2856\t6484\t0\t0\t6\t16\t56\t856\t856\t2856\t2856\t112\t113\tWFAAAA\tKPJAAA\tAAAAxx\n6503\t6485\t1\t3\t3\t3\t3\t503\t503\t1503\t6503\t6\t7\tDQAAAA\tLPJAAA\tHHHHxx\n6872\t6486\t0\t0\t2\t12\t72\t872\t872\t1872\t6872\t144\t145\tIEAAAA\tMPJAAA\tOOOOxx\n1663\t6487\t1\t3\t3\t3\t63\t663\t1663\t1663\t1663\t126\t127\tZLAAAA\tNPJAAA\tVVVVxx\n6964\t6488\t0\t0\t4\t4\t64\t964\t964\t1964\t6964\t128\t129\tWHAAAA\tOPJAAA\tAAAAxx\n4622\t6489\t0\t2\t2\t2\t22\t622\t622\t4622\t4622\t44\t45\tUVAAAA\tPPJAAA\tHHHHxx\n6089\t6490\t1\t1\t9\t9\t89\t89\t89\t1089\t6089\t178\t179\tFAAAAA\tQPJAAA\tOOOOxx\n8567\t6491\t1\t3\t7\t7\t67\t567\t567\t3567\t8567\t134\t135\tNRAAAA\tRPJAAA\tVVVVxx\n597\t6492\t1\t1\t7\t17\t97\t597\t597\t597\t597\t194\t195\tZWAAAA\tSPJAAA\tAAAAxx\n4222\t6493\t0\t2\t2\t2\t22\t222\t222\t4222\t4222\t44\t45\tKGAAAA\tTPJAAA\tHHHHxx\n9322\t6494\t0\t2\t2\t2\t22\t322\t1322\t4322\t9322\t44\t45\tOUAAAA\tUPJAAA\tOOOOxx\n624\t6495\t0\t0\t4\t4\t24\t624\t624\t624\t624\t48\t49\tAYAAAA\tVPJAAA\tVVVVxx\n4329\t6496\t1\t1\t9\t9\t29\t329\t329\t4329\t4329\t58\t59\tNKAAAA\tWPJAAA\tAAAAxx\n6781\t6497\t1\t1\t1\t1\t81\t781\t781\t1781\t6781\t162\t163\tVAAAAA\tXPJAAA\tHHHHxx\n1673\t6498\t1\t1\t3\t13\t73\t673\t1673\t1673\t1673\t146\t147\tJMAAAA\tYPJAAA\tOOOOxx\n6633\t6499\t1\t1\t3\t13\t33\t633\t633\t1633\t6633\t66\t67\tDVAAAA\tZPJAAA\tVVVVxx\n2569\t6500\t1\t1\t9\t9\t69\t569\t569\t2569\t2569\t138\t139\tVUAAAA\tAQJAAA\tAAAAxx\n4995\t6501\t1\t3\t5\t15\t95\t995\t995\t4995\t4995\t190\t191\tDKAAAA\tBQJAAA\tHHHHxx\n2749\t6502\t1\t1\t9\t9\t49\t749\t749\t2749\t2749\t98\t99\tTBAAAA\tCQJAAA\tOOOOxx\n9044\t6503\t0\t0\t4\t4\t44\t44\t1044\t4044\t9044\t88\t89\tWJAAAA\tDQJAAA\tVVVVxx\n5823\t6504\t1\t3\t3\t3\t23\t823\t1823\t823\t5823\t46\t47\tZPAAAA\tEQJAAA\tAAAAxx\n9366\t6505\t0\t2\t6\t6\t66\t366\t1366\t4366\t9366\t132\t133\tGWAAAA\tFQJAAA\tHHHHxx\n1169\t6506\t1\t1\t9\t9\t69\t169\t1169\t1169\t1169\t138\t139\tZSAAAA\tGQJAAA\tOOOOxx\n1300\t6507\t0\t0\t0\t0\t0\t300\t1300\t1300\t1300\t0\t1\tAYAAAA\tHQJAAA\tVVVVxx\n9973\t6508\t1\t1\t3\t13\t73\t973\t1973\t4973\t9973\t146\t147\tPTAAAA\tIQJAAA\tAAAAxx\n2092\t6509\t0\t0\t2\t12\t92\t92\t92\t2092\t2092\t184\t185\tMCAAAA\tJQJAAA\tHHHHxx\n9776\t6510\t0\t0\t6\t16\t76\t776\t1776\t4776\t9776\t152\t153\tAMAAAA\tKQJAAA\tOOOOxx\n7612\t6511\t0\t0\t2\t12\t12\t612\t1612\t2612\t7612\t24\t25\tUGAAAA\tLQJAAA\tVVVVxx\n7190\t6512\t0\t2\t0\t10\t90\t190\t1190\t2190\t7190\t180\t181\tOQAAAA\tMQJAAA\tAAAAxx\n5147\t6513\t1\t3\t7\t7\t47\t147\t1147\t147\t5147\t94\t95\tZPAAAA\tNQJAAA\tHHHHxx\n3722\t6514\t0\t2\t2\t2\t22\t722\t1722\t3722\t3722\t44\t45\tENAAAA\tOQJAAA\tOOOOxx\n5858\t6515\t0\t2\t8\t18\t58\t858\t1858\t858\t5858\t116\t117\tIRAAAA\tPQJAAA\tVVVVxx\n3204\t6516\t0\t0\t4\t4\t4\t204\t1204\t3204\t3204\t8\t9\tGTAAAA\tQQJAAA\tAAAAxx\n8994\t6517\t0\t2\t4\t14\t94\t994\t994\t3994\t8994\t188\t189\tYHAAAA\tRQJAAA\tHHHHxx\n7478\t6518\t0\t2\t8\t18\t78\t478\t1478\t2478\t7478\t156\t157\tQBAAAA\tSQJAAA\tOOOOxx\n9624\t6519\t0\t0\t4\t4\t24\t624\t1624\t4624\t9624\t48\t49\tEGAAAA\tTQJAAA\tVVVVxx\n6639\t6520\t1\t3\t9\t19\t39\t639\t639\t1639\t6639\t78\t79\tJVAAAA\tUQJAAA\tAAAAxx\n369\t6521\t1\t1\t9\t9\t69\t369\t369\t369\t369\t138\t139\tFOAAAA\tVQJAAA\tHHHHxx\n7766\t6522\t0\t2\t6\t6\t66\t766\t1766\t2766\t7766\t132\t133\tSMAAAA\tWQJAAA\tOOOOxx\n4094\t6523\t0\t2\t4\t14\t94\t94\t94\t4094\t4094\t188\t189\tMBAAAA\tXQJAAA\tVVVVxx\n9556\t6524\t0\t0\t6\t16\t56\t556\t1556\t4556\t9556\t112\t113\tODAAAA\tYQJAAA\tAAAAxx\n4887\t6525\t1\t3\t7\t7\t87\t887\t887\t4887\t4887\t174\t175\tZFAAAA\tZQJAAA\tHHHHxx\n2321\t6526\t1\t1\t1\t1\t21\t321\t321\t2321\t2321\t42\t43\tHLAAAA\tARJAAA\tOOOOxx\n9201\t6527\t1\t1\t1\t1\t1\t201\t1201\t4201\t9201\t2\t3\tXPAAAA\tBRJAAA\tVVVVxx\n1627\t6528\t1\t3\t7\t7\t27\t627\t1627\t1627\t1627\t54\t55\tPKAAAA\tCRJAAA\tAAAAxx\n150\t6529\t0\t2\t0\t10\t50\t150\t150\t150\t150\t100\t101\tUFAAAA\tDRJAAA\tHHHHxx\n8010\t6530\t0\t2\t0\t10\t10\t10\t10\t3010\t8010\t20\t21\tCWAAAA\tERJAAA\tOOOOxx\n8026\t6531\t0\t2\t6\t6\t26\t26\t26\t3026\t8026\t52\t53\tSWAAAA\tFRJAAA\tVVVVxx\n5495\t6532\t1\t3\t5\t15\t95\t495\t1495\t495\t5495\t190\t191\tJDAAAA\tGRJAAA\tAAAAxx\n6213\t6533\t1\t1\t3\t13\t13\t213\t213\t1213\t6213\t26\t27\tZEAAAA\tHRJAAA\tHHHHxx\n6464\t6534\t0\t0\t4\t4\t64\t464\t464\t1464\t6464\t128\t129\tQOAAAA\tIRJAAA\tOOOOxx\n1158\t6535\t0\t2\t8\t18\t58\t158\t1158\t1158\t1158\t116\t117\tOSAAAA\tJRJAAA\tVVVVxx\n8669\t6536\t1\t1\t9\t9\t69\t669\t669\t3669\t8669\t138\t139\tLVAAAA\tKRJAAA\tAAAAxx\n3225\t6537\t1\t1\t5\t5\t25\t225\t1225\t3225\t3225\t50\t51\tBUAAAA\tLRJAAA\tHHHHxx\n1294\t6538\t0\t2\t4\t14\t94\t294\t1294\t1294\t1294\t188\t189\tUXAAAA\tMRJAAA\tOOOOxx\n2166\t6539\t0\t2\t6\t6\t66\t166\t166\t2166\t2166\t132\t133\tIFAAAA\tNRJAAA\tVVVVxx\n9328\t6540\t0\t0\t8\t8\t28\t328\t1328\t4328\t9328\t56\t57\tUUAAAA\tORJAAA\tAAAAxx\n8431\t6541\t1\t3\t1\t11\t31\t431\t431\t3431\t8431\t62\t63\tHMAAAA\tPRJAAA\tHHHHxx\n7100\t6542\t0\t0\t0\t0\t0\t100\t1100\t2100\t7100\t0\t1\tCNAAAA\tQRJAAA\tOOOOxx\n8126\t6543\t0\t2\t6\t6\t26\t126\t126\t3126\t8126\t52\t53\tOAAAAA\tRRJAAA\tVVVVxx\n2185\t6544\t1\t1\t5\t5\t85\t185\t185\t2185\t2185\t170\t171\tBGAAAA\tSRJAAA\tAAAAxx\n5697\t6545\t1\t1\t7\t17\t97\t697\t1697\t697\t5697\t194\t195\tDLAAAA\tTRJAAA\tHHHHxx\n5531\t6546\t1\t3\t1\t11\t31\t531\t1531\t531\t5531\t62\t63\tTEAAAA\tURJAAA\tOOOOxx\n3020\t6547\t0\t0\t0\t0\t20\t20\t1020\t3020\t3020\t40\t41\tEMAAAA\tVRJAAA\tVVVVxx\n3076\t6548\t0\t0\t6\t16\t76\t76\t1076\t3076\t3076\t152\t153\tIOAAAA\tWRJAAA\tAAAAxx\n9228\t6549\t0\t0\t8\t8\t28\t228\t1228\t4228\t9228\t56\t57\tYQAAAA\tXRJAAA\tHHHHxx\n1734\t6550\t0\t2\t4\t14\t34\t734\t1734\t1734\t1734\t68\t69\tSOAAAA\tYRJAAA\tOOOOxx\n7616\t6551\t0\t0\t6\t16\t16\t616\t1616\t2616\t7616\t32\t33\tYGAAAA\tZRJAAA\tVVVVxx\n9059\t6552\t1\t3\t9\t19\t59\t59\t1059\t4059\t9059\t118\t119\tLKAAAA\tASJAAA\tAAAAxx\n323\t6553\t1\t3\t3\t3\t23\t323\t323\t323\t323\t46\t47\tLMAAAA\tBSJAAA\tHHHHxx\n1283\t6554\t1\t3\t3\t3\t83\t283\t1283\t1283\t1283\t166\t167\tJXAAAA\tCSJAAA\tOOOOxx\n9535\t6555\t1\t3\t5\t15\t35\t535\t1535\t4535\t9535\t70\t71\tTCAAAA\tDSJAAA\tVVVVxx\n2580\t6556\t0\t0\t0\t0\t80\t580\t580\t2580\t2580\t160\t161\tGVAAAA\tESJAAA\tAAAAxx\n7633\t6557\t1\t1\t3\t13\t33\t633\t1633\t2633\t7633\t66\t67\tPHAAAA\tFSJAAA\tHHHHxx\n9497\t6558\t1\t1\t7\t17\t97\t497\t1497\t4497\t9497\t194\t195\tHBAAAA\tGSJAAA\tOOOOxx\n9842\t6559\t0\t2\t2\t2\t42\t842\t1842\t4842\t9842\t84\t85\tOOAAAA\tHSJAAA\tVVVVxx\n3426\t6560\t0\t2\t6\t6\t26\t426\t1426\t3426\t3426\t52\t53\tUBAAAA\tISJAAA\tAAAAxx\n7650\t6561\t0\t2\t0\t10\t50\t650\t1650\t2650\t7650\t100\t101\tGIAAAA\tJSJAAA\tHHHHxx\n9935\t6562\t1\t3\t5\t15\t35\t935\t1935\t4935\t9935\t70\t71\tDSAAAA\tKSJAAA\tOOOOxx\n9354\t6563\t0\t2\t4\t14\t54\t354\t1354\t4354\t9354\t108\t109\tUVAAAA\tLSJAAA\tVVVVxx\n5569\t6564\t1\t1\t9\t9\t69\t569\t1569\t569\t5569\t138\t139\tFGAAAA\tMSJAAA\tAAAAxx\n5765\t6565\t1\t1\t5\t5\t65\t765\t1765\t765\t5765\t130\t131\tTNAAAA\tNSJAAA\tHHHHxx\n7283\t6566\t1\t3\t3\t3\t83\t283\t1283\t2283\t7283\t166\t167\tDUAAAA\tOSJAAA\tOOOOxx\n1068\t6567\t0\t0\t8\t8\t68\t68\t1068\t1068\t1068\t136\t137\tCPAAAA\tPSJAAA\tVVVVxx\n1641\t6568\t1\t1\t1\t1\t41\t641\t1641\t1641\t1641\t82\t83\tDLAAAA\tQSJAAA\tAAAAxx\n1688\t6569\t0\t0\t8\t8\t88\t688\t1688\t1688\t1688\t176\t177\tYMAAAA\tRSJAAA\tHHHHxx\n1133\t6570\t1\t1\t3\t13\t33\t133\t1133\t1133\t1133\t66\t67\tPRAAAA\tSSJAAA\tOOOOxx\n4493\t6571\t1\t1\t3\t13\t93\t493\t493\t4493\t4493\t186\t187\tVQAAAA\tTSJAAA\tVVVVxx\n3354\t6572\t0\t2\t4\t14\t54\t354\t1354\t3354\t3354\t108\t109\tAZAAAA\tUSJAAA\tAAAAxx\n4029\t6573\t1\t1\t9\t9\t29\t29\t29\t4029\t4029\t58\t59\tZYAAAA\tVSJAAA\tHHHHxx\n6704\t6574\t0\t0\t4\t4\t4\t704\t704\t1704\t6704\t8\t9\tWXAAAA\tWSJAAA\tOOOOxx\n3221\t6575\t1\t1\t1\t1\t21\t221\t1221\t3221\t3221\t42\t43\tXTAAAA\tXSJAAA\tVVVVxx\n9432\t6576\t0\t0\t2\t12\t32\t432\t1432\t4432\t9432\t64\t65\tUYAAAA\tYSJAAA\tAAAAxx\n6990\t6577\t0\t2\t0\t10\t90\t990\t990\t1990\t6990\t180\t181\tWIAAAA\tZSJAAA\tHHHHxx\n1760\t6578\t0\t0\t0\t0\t60\t760\t1760\t1760\t1760\t120\t121\tSPAAAA\tATJAAA\tOOOOxx\n4754\t6579\t0\t2\t4\t14\t54\t754\t754\t4754\t4754\t108\t109\tWAAAAA\tBTJAAA\tVVVVxx\n7724\t6580\t0\t0\t4\t4\t24\t724\t1724\t2724\t7724\t48\t49\tCLAAAA\tCTJAAA\tAAAAxx\n9487\t6581\t1\t3\t7\t7\t87\t487\t1487\t4487\t9487\t174\t175\tXAAAAA\tDTJAAA\tHHHHxx\n166\t6582\t0\t2\t6\t6\t66\t166\t166\t166\t166\t132\t133\tKGAAAA\tETJAAA\tOOOOxx\n5479\t6583\t1\t3\t9\t19\t79\t479\t1479\t479\t5479\t158\t159\tTCAAAA\tFTJAAA\tVVVVxx\n8744\t6584\t0\t0\t4\t4\t44\t744\t744\t3744\t8744\t88\t89\tIYAAAA\tGTJAAA\tAAAAxx\n5746\t6585\t0\t2\t6\t6\t46\t746\t1746\t746\t5746\t92\t93\tANAAAA\tHTJAAA\tHHHHxx\n907\t6586\t1\t3\t7\t7\t7\t907\t907\t907\t907\t14\t15\tXIAAAA\tITJAAA\tOOOOxx\n3968\t6587\t0\t0\t8\t8\t68\t968\t1968\t3968\t3968\t136\t137\tQWAAAA\tJTJAAA\tVVVVxx\n5721\t6588\t1\t1\t1\t1\t21\t721\t1721\t721\t5721\t42\t43\tBMAAAA\tKTJAAA\tAAAAxx\n6738\t6589\t0\t2\t8\t18\t38\t738\t738\t1738\t6738\t76\t77\tEZAAAA\tLTJAAA\tHHHHxx\n4097\t6590\t1\t1\t7\t17\t97\t97\t97\t4097\t4097\t194\t195\tPBAAAA\tMTJAAA\tOOOOxx\n8456\t6591\t0\t0\t6\t16\t56\t456\t456\t3456\t8456\t112\t113\tGNAAAA\tNTJAAA\tVVVVxx\n1269\t6592\t1\t1\t9\t9\t69\t269\t1269\t1269\t1269\t138\t139\tVWAAAA\tOTJAAA\tAAAAxx\n7997\t6593\t1\t1\t7\t17\t97\t997\t1997\t2997\t7997\t194\t195\tPVAAAA\tPTJAAA\tHHHHxx\n9457\t6594\t1\t1\t7\t17\t57\t457\t1457\t4457\t9457\t114\t115\tTZAAAA\tQTJAAA\tOOOOxx\n1159\t6595\t1\t3\t9\t19\t59\t159\t1159\t1159\t1159\t118\t119\tPSAAAA\tRTJAAA\tVVVVxx\n1631\t6596\t1\t3\t1\t11\t31\t631\t1631\t1631\t1631\t62\t63\tTKAAAA\tSTJAAA\tAAAAxx\n2019\t6597\t1\t3\t9\t19\t19\t19\t19\t2019\t2019\t38\t39\tRZAAAA\tTTJAAA\tHHHHxx\n3186\t6598\t0\t2\t6\t6\t86\t186\t1186\t3186\t3186\t172\t173\tOSAAAA\tUTJAAA\tOOOOxx\n5587\t6599\t1\t3\t7\t7\t87\t587\t1587\t587\t5587\t174\t175\tXGAAAA\tVTJAAA\tVVVVxx\n9172\t6600\t0\t0\t2\t12\t72\t172\t1172\t4172\t9172\t144\t145\tUOAAAA\tWTJAAA\tAAAAxx\n5589\t6601\t1\t1\t9\t9\t89\t589\t1589\t589\t5589\t178\t179\tZGAAAA\tXTJAAA\tHHHHxx\n5103\t6602\t1\t3\t3\t3\t3\t103\t1103\t103\t5103\t6\t7\tHOAAAA\tYTJAAA\tOOOOxx\n3177\t6603\t1\t1\t7\t17\t77\t177\t1177\t3177\t3177\t154\t155\tFSAAAA\tZTJAAA\tVVVVxx\n8887\t6604\t1\t3\t7\t7\t87\t887\t887\t3887\t8887\t174\t175\tVDAAAA\tAUJAAA\tAAAAxx\n12\t6605\t0\t0\t2\t12\t12\t12\t12\t12\t12\t24\t25\tMAAAAA\tBUJAAA\tHHHHxx\n8575\t6606\t1\t3\t5\t15\t75\t575\t575\t3575\t8575\t150\t151\tVRAAAA\tCUJAAA\tOOOOxx\n4335\t6607\t1\t3\t5\t15\t35\t335\t335\t4335\t4335\t70\t71\tTKAAAA\tDUJAAA\tVVVVxx\n4581\t6608\t1\t1\t1\t1\t81\t581\t581\t4581\t4581\t162\t163\tFUAAAA\tEUJAAA\tAAAAxx\n4444\t6609\t0\t0\t4\t4\t44\t444\t444\t4444\t4444\t88\t89\tYOAAAA\tFUJAAA\tHHHHxx\n7978\t6610\t0\t2\t8\t18\t78\t978\t1978\t2978\t7978\t156\t157\tWUAAAA\tGUJAAA\tOOOOxx\n3081\t6611\t1\t1\t1\t1\t81\t81\t1081\t3081\t3081\t162\t163\tNOAAAA\tHUJAAA\tVVVVxx\n4059\t6612\t1\t3\t9\t19\t59\t59\t59\t4059\t4059\t118\t119\tDAAAAA\tIUJAAA\tAAAAxx\n5711\t6613\t1\t3\t1\t11\t11\t711\t1711\t711\t5711\t22\t23\tRLAAAA\tJUJAAA\tHHHHxx\n7069\t6614\t1\t1\t9\t9\t69\t69\t1069\t2069\t7069\t138\t139\tXLAAAA\tKUJAAA\tOOOOxx\n6150\t6615\t0\t2\t0\t10\t50\t150\t150\t1150\t6150\t100\t101\tOCAAAA\tLUJAAA\tVVVVxx\n9550\t6616\t0\t2\t0\t10\t50\t550\t1550\t4550\t9550\t100\t101\tIDAAAA\tMUJAAA\tAAAAxx\n7087\t6617\t1\t3\t7\t7\t87\t87\t1087\t2087\t7087\t174\t175\tPMAAAA\tNUJAAA\tHHHHxx\n9557\t6618\t1\t1\t7\t17\t57\t557\t1557\t4557\t9557\t114\t115\tPDAAAA\tOUJAAA\tOOOOxx\n7856\t6619\t0\t0\t6\t16\t56\t856\t1856\t2856\t7856\t112\t113\tEQAAAA\tPUJAAA\tVVVVxx\n1115\t6620\t1\t3\t5\t15\t15\t115\t1115\t1115\t1115\t30\t31\tXQAAAA\tQUJAAA\tAAAAxx\n1086\t6621\t0\t2\t6\t6\t86\t86\t1086\t1086\t1086\t172\t173\tUPAAAA\tRUJAAA\tHHHHxx\n5048\t6622\t0\t0\t8\t8\t48\t48\t1048\t48\t5048\t96\t97\tEMAAAA\tSUJAAA\tOOOOxx\n5168\t6623\t0\t0\t8\t8\t68\t168\t1168\t168\t5168\t136\t137\tUQAAAA\tTUJAAA\tVVVVxx\n6029\t6624\t1\t1\t9\t9\t29\t29\t29\t1029\t6029\t58\t59\tXXAAAA\tUUJAAA\tAAAAxx\n546\t6625\t0\t2\t6\t6\t46\t546\t546\t546\t546\t92\t93\tAVAAAA\tVUJAAA\tHHHHxx\n2908\t6626\t0\t0\t8\t8\t8\t908\t908\t2908\t2908\t16\t17\tWHAAAA\tWUJAAA\tOOOOxx\n779\t6627\t1\t3\t9\t19\t79\t779\t779\t779\t779\t158\t159\tZDAAAA\tXUJAAA\tVVVVxx\n4202\t6628\t0\t2\t2\t2\t2\t202\t202\t4202\t4202\t4\t5\tQFAAAA\tYUJAAA\tAAAAxx\n9984\t6629\t0\t0\t4\t4\t84\t984\t1984\t4984\t9984\t168\t169\tAUAAAA\tZUJAAA\tHHHHxx\n4730\t6630\t0\t2\t0\t10\t30\t730\t730\t4730\t4730\t60\t61\tYZAAAA\tAVJAAA\tOOOOxx\n6517\t6631\t1\t1\t7\t17\t17\t517\t517\t1517\t6517\t34\t35\tRQAAAA\tBVJAAA\tVVVVxx\n8410\t6632\t0\t2\t0\t10\t10\t410\t410\t3410\t8410\t20\t21\tMLAAAA\tCVJAAA\tAAAAxx\n4793\t6633\t1\t1\t3\t13\t93\t793\t793\t4793\t4793\t186\t187\tJCAAAA\tDVJAAA\tHHHHxx\n3431\t6634\t1\t3\t1\t11\t31\t431\t1431\t3431\t3431\t62\t63\tZBAAAA\tEVJAAA\tOOOOxx\n2481\t6635\t1\t1\t1\t1\t81\t481\t481\t2481\t2481\t162\t163\tLRAAAA\tFVJAAA\tVVVVxx\n3905\t6636\t1\t1\t5\t5\t5\t905\t1905\t3905\t3905\t10\t11\tFUAAAA\tGVJAAA\tAAAAxx\n8807\t6637\t1\t3\t7\t7\t7\t807\t807\t3807\t8807\t14\t15\tTAAAAA\tHVJAAA\tHHHHxx\n2660\t6638\t0\t0\t0\t0\t60\t660\t660\t2660\t2660\t120\t121\tIYAAAA\tIVJAAA\tOOOOxx\n4985\t6639\t1\t1\t5\t5\t85\t985\t985\t4985\t4985\t170\t171\tTJAAAA\tJVJAAA\tVVVVxx\n3080\t6640\t0\t0\t0\t0\t80\t80\t1080\t3080\t3080\t160\t161\tMOAAAA\tKVJAAA\tAAAAxx\n1090\t6641\t0\t2\t0\t10\t90\t90\t1090\t1090\t1090\t180\t181\tYPAAAA\tLVJAAA\tHHHHxx\n6917\t6642\t1\t1\t7\t17\t17\t917\t917\t1917\t6917\t34\t35\tBGAAAA\tMVJAAA\tOOOOxx\n5177\t6643\t1\t1\t7\t17\t77\t177\t1177\t177\t5177\t154\t155\tDRAAAA\tNVJAAA\tVVVVxx\n2729\t6644\t1\t1\t9\t9\t29\t729\t729\t2729\t2729\t58\t59\tZAAAAA\tOVJAAA\tAAAAxx\n9706\t6645\t0\t2\t6\t6\t6\t706\t1706\t4706\t9706\t12\t13\tIJAAAA\tPVJAAA\tHHHHxx\n9929\t6646\t1\t1\t9\t9\t29\t929\t1929\t4929\t9929\t58\t59\tXRAAAA\tQVJAAA\tOOOOxx\n1547\t6647\t1\t3\t7\t7\t47\t547\t1547\t1547\t1547\t94\t95\tNHAAAA\tRVJAAA\tVVVVxx\n2798\t6648\t0\t2\t8\t18\t98\t798\t798\t2798\t2798\t196\t197\tQDAAAA\tSVJAAA\tAAAAxx\n4420\t6649\t0\t0\t0\t0\t20\t420\t420\t4420\t4420\t40\t41\tAOAAAA\tTVJAAA\tHHHHxx\n6771\t6650\t1\t3\t1\t11\t71\t771\t771\t1771\t6771\t142\t143\tLAAAAA\tUVJAAA\tOOOOxx\n2004\t6651\t0\t0\t4\t4\t4\t4\t4\t2004\t2004\t8\t9\tCZAAAA\tVVJAAA\tVVVVxx\n8686\t6652\t0\t2\t6\t6\t86\t686\t686\t3686\t8686\t172\t173\tCWAAAA\tWVJAAA\tAAAAxx\n3663\t6653\t1\t3\t3\t3\t63\t663\t1663\t3663\t3663\t126\t127\tXKAAAA\tXVJAAA\tHHHHxx\n806\t6654\t0\t2\t6\t6\t6\t806\t806\t806\t806\t12\t13\tAFAAAA\tYVJAAA\tOOOOxx\n4309\t6655\t1\t1\t9\t9\t9\t309\t309\t4309\t4309\t18\t19\tTJAAAA\tZVJAAA\tVVVVxx\n7443\t6656\t1\t3\t3\t3\t43\t443\t1443\t2443\t7443\t86\t87\tHAAAAA\tAWJAAA\tAAAAxx\n5779\t6657\t1\t3\t9\t19\t79\t779\t1779\t779\t5779\t158\t159\tHOAAAA\tBWJAAA\tHHHHxx\n8821\t6658\t1\t1\t1\t1\t21\t821\t821\t3821\t8821\t42\t43\tHBAAAA\tCWJAAA\tOOOOxx\n4198\t6659\t0\t2\t8\t18\t98\t198\t198\t4198\t4198\t196\t197\tMFAAAA\tDWJAAA\tVVVVxx\n8115\t6660\t1\t3\t5\t15\t15\t115\t115\t3115\t8115\t30\t31\tDAAAAA\tEWJAAA\tAAAAxx\n9554\t6661\t0\t2\t4\t14\t54\t554\t1554\t4554\t9554\t108\t109\tMDAAAA\tFWJAAA\tHHHHxx\n8956\t6662\t0\t0\t6\t16\t56\t956\t956\t3956\t8956\t112\t113\tMGAAAA\tGWJAAA\tOOOOxx\n4733\t6663\t1\t1\t3\t13\t33\t733\t733\t4733\t4733\t66\t67\tBAAAAA\tHWJAAA\tVVVVxx\n5417\t6664\t1\t1\t7\t17\t17\t417\t1417\t417\t5417\t34\t35\tJAAAAA\tIWJAAA\tAAAAxx\n4792\t6665\t0\t0\t2\t12\t92\t792\t792\t4792\t4792\t184\t185\tICAAAA\tJWJAAA\tHHHHxx\n462\t6666\t0\t2\t2\t2\t62\t462\t462\t462\t462\t124\t125\tURAAAA\tKWJAAA\tOOOOxx\n3687\t6667\t1\t3\t7\t7\t87\t687\t1687\t3687\t3687\t174\t175\tVLAAAA\tLWJAAA\tVVVVxx\n2013\t6668\t1\t1\t3\t13\t13\t13\t13\t2013\t2013\t26\t27\tLZAAAA\tMWJAAA\tAAAAxx\n5386\t6669\t0\t2\t6\t6\t86\t386\t1386\t386\t5386\t172\t173\tEZAAAA\tNWJAAA\tHHHHxx\n2816\t6670\t0\t0\t6\t16\t16\t816\t816\t2816\t2816\t32\t33\tIEAAAA\tOWJAAA\tOOOOxx\n7827\t6671\t1\t3\t7\t7\t27\t827\t1827\t2827\t7827\t54\t55\tBPAAAA\tPWJAAA\tVVVVxx\n5077\t6672\t1\t1\t7\t17\t77\t77\t1077\t77\t5077\t154\t155\tHNAAAA\tQWJAAA\tAAAAxx\n6039\t6673\t1\t3\t9\t19\t39\t39\t39\t1039\t6039\t78\t79\tHYAAAA\tRWJAAA\tHHHHxx\n215\t6674\t1\t3\t5\t15\t15\t215\t215\t215\t215\t30\t31\tHIAAAA\tSWJAAA\tOOOOxx\n855\t6675\t1\t3\t5\t15\t55\t855\t855\t855\t855\t110\t111\tXGAAAA\tTWJAAA\tVVVVxx\n9692\t6676\t0\t0\t2\t12\t92\t692\t1692\t4692\t9692\t184\t185\tUIAAAA\tUWJAAA\tAAAAxx\n8391\t6677\t1\t3\t1\t11\t91\t391\t391\t3391\t8391\t182\t183\tTKAAAA\tVWJAAA\tHHHHxx\n8424\t6678\t0\t0\t4\t4\t24\t424\t424\t3424\t8424\t48\t49\tAMAAAA\tWWJAAA\tOOOOxx\n6331\t6679\t1\t3\t1\t11\t31\t331\t331\t1331\t6331\t62\t63\tNJAAAA\tXWJAAA\tVVVVxx\n6561\t6680\t1\t1\t1\t1\t61\t561\t561\t1561\t6561\t122\t123\tJSAAAA\tYWJAAA\tAAAAxx\n8955\t6681\t1\t3\t5\t15\t55\t955\t955\t3955\t8955\t110\t111\tLGAAAA\tZWJAAA\tHHHHxx\n1764\t6682\t0\t0\t4\t4\t64\t764\t1764\t1764\t1764\t128\t129\tWPAAAA\tAXJAAA\tOOOOxx\n6623\t6683\t1\t3\t3\t3\t23\t623\t623\t1623\t6623\t46\t47\tTUAAAA\tBXJAAA\tVVVVxx\n2900\t6684\t0\t0\t0\t0\t0\t900\t900\t2900\t2900\t0\t1\tOHAAAA\tCXJAAA\tAAAAxx\n7048\t6685\t0\t0\t8\t8\t48\t48\t1048\t2048\t7048\t96\t97\tCLAAAA\tDXJAAA\tHHHHxx\n3843\t6686\t1\t3\t3\t3\t43\t843\t1843\t3843\t3843\t86\t87\tVRAAAA\tEXJAAA\tOOOOxx\n4855\t6687\t1\t3\t5\t15\t55\t855\t855\t4855\t4855\t110\t111\tTEAAAA\tFXJAAA\tVVVVxx\n7383\t6688\t1\t3\t3\t3\t83\t383\t1383\t2383\t7383\t166\t167\tZXAAAA\tGXJAAA\tAAAAxx\n7765\t6689\t1\t1\t5\t5\t65\t765\t1765\t2765\t7765\t130\t131\tRMAAAA\tHXJAAA\tHHHHxx\n1125\t6690\t1\t1\t5\t5\t25\t125\t1125\t1125\t1125\t50\t51\tHRAAAA\tIXJAAA\tOOOOxx\n755\t6691\t1\t3\t5\t15\t55\t755\t755\t755\t755\t110\t111\tBDAAAA\tJXJAAA\tVVVVxx\n2995\t6692\t1\t3\t5\t15\t95\t995\t995\t2995\t2995\t190\t191\tFLAAAA\tKXJAAA\tAAAAxx\n8907\t6693\t1\t3\t7\t7\t7\t907\t907\t3907\t8907\t14\t15\tPEAAAA\tLXJAAA\tHHHHxx\n9357\t6694\t1\t1\t7\t17\t57\t357\t1357\t4357\t9357\t114\t115\tXVAAAA\tMXJAAA\tOOOOxx\n4469\t6695\t1\t1\t9\t9\t69\t469\t469\t4469\t4469\t138\t139\tXPAAAA\tNXJAAA\tVVVVxx\n2147\t6696\t1\t3\t7\t7\t47\t147\t147\t2147\t2147\t94\t95\tPEAAAA\tOXJAAA\tAAAAxx\n2952\t6697\t0\t0\t2\t12\t52\t952\t952\t2952\t2952\t104\t105\tOJAAAA\tPXJAAA\tHHHHxx\n1324\t6698\t0\t0\t4\t4\t24\t324\t1324\t1324\t1324\t48\t49\tYYAAAA\tQXJAAA\tOOOOxx\n1173\t6699\t1\t1\t3\t13\t73\t173\t1173\t1173\t1173\t146\t147\tDTAAAA\tRXJAAA\tVVVVxx\n3169\t6700\t1\t1\t9\t9\t69\t169\t1169\t3169\t3169\t138\t139\tXRAAAA\tSXJAAA\tAAAAxx\n5149\t6701\t1\t1\t9\t9\t49\t149\t1149\t149\t5149\t98\t99\tBQAAAA\tTXJAAA\tHHHHxx\n9660\t6702\t0\t0\t0\t0\t60\t660\t1660\t4660\t9660\t120\t121\tOHAAAA\tUXJAAA\tOOOOxx\n3446\t6703\t0\t2\t6\t6\t46\t446\t1446\t3446\t3446\t92\t93\tOCAAAA\tVXJAAA\tVVVVxx\n6988\t6704\t0\t0\t8\t8\t88\t988\t988\t1988\t6988\t176\t177\tUIAAAA\tWXJAAA\tAAAAxx\n5829\t6705\t1\t1\t9\t9\t29\t829\t1829\t829\t5829\t58\t59\tFQAAAA\tXXJAAA\tHHHHxx\n7166\t6706\t0\t2\t6\t6\t66\t166\t1166\t2166\t7166\t132\t133\tQPAAAA\tYXJAAA\tOOOOxx\n3940\t6707\t0\t0\t0\t0\t40\t940\t1940\t3940\t3940\t80\t81\tOVAAAA\tZXJAAA\tVVVVxx\n2645\t6708\t1\t1\t5\t5\t45\t645\t645\t2645\t2645\t90\t91\tTXAAAA\tAYJAAA\tAAAAxx\n478\t6709\t0\t2\t8\t18\t78\t478\t478\t478\t478\t156\t157\tKSAAAA\tBYJAAA\tHHHHxx\n1156\t6710\t0\t0\t6\t16\t56\t156\t1156\t1156\t1156\t112\t113\tMSAAAA\tCYJAAA\tOOOOxx\n2731\t6711\t1\t3\t1\t11\t31\t731\t731\t2731\t2731\t62\t63\tBBAAAA\tDYJAAA\tVVVVxx\n5637\t6712\t1\t1\t7\t17\t37\t637\t1637\t637\t5637\t74\t75\tVIAAAA\tEYJAAA\tAAAAxx\n7517\t6713\t1\t1\t7\t17\t17\t517\t1517\t2517\t7517\t34\t35\tDDAAAA\tFYJAAA\tHHHHxx\n5331\t6714\t1\t3\t1\t11\t31\t331\t1331\t331\t5331\t62\t63\tBXAAAA\tGYJAAA\tOOOOxx\n9640\t6715\t0\t0\t0\t0\t40\t640\t1640\t4640\t9640\t80\t81\tUGAAAA\tHYJAAA\tVVVVxx\n4108\t6716\t0\t0\t8\t8\t8\t108\t108\t4108\t4108\t16\t17\tACAAAA\tIYJAAA\tAAAAxx\n1087\t6717\t1\t3\t7\t7\t87\t87\t1087\t1087\t1087\t174\t175\tVPAAAA\tJYJAAA\tHHHHxx\n8017\t6718\t1\t1\t7\t17\t17\t17\t17\t3017\t8017\t34\t35\tJWAAAA\tKYJAAA\tOOOOxx\n8795\t6719\t1\t3\t5\t15\t95\t795\t795\t3795\t8795\t190\t191\tHAAAAA\tLYJAAA\tVVVVxx\n7060\t6720\t0\t0\t0\t0\t60\t60\t1060\t2060\t7060\t120\t121\tOLAAAA\tMYJAAA\tAAAAxx\n9450\t6721\t0\t2\t0\t10\t50\t450\t1450\t4450\t9450\t100\t101\tMZAAAA\tNYJAAA\tHHHHxx\n390\t6722\t0\t2\t0\t10\t90\t390\t390\t390\t390\t180\t181\tAPAAAA\tOYJAAA\tOOOOxx\n66\t6723\t0\t2\t6\t6\t66\t66\t66\t66\t66\t132\t133\tOCAAAA\tPYJAAA\tVVVVxx\n8789\t6724\t1\t1\t9\t9\t89\t789\t789\t3789\t8789\t178\t179\tBAAAAA\tQYJAAA\tAAAAxx\n9260\t6725\t0\t0\t0\t0\t60\t260\t1260\t4260\t9260\t120\t121\tESAAAA\tRYJAAA\tHHHHxx\n6679\t6726\t1\t3\t9\t19\t79\t679\t679\t1679\t6679\t158\t159\tXWAAAA\tSYJAAA\tOOOOxx\n9052\t6727\t0\t0\t2\t12\t52\t52\t1052\t4052\t9052\t104\t105\tEKAAAA\tTYJAAA\tVVVVxx\n9561\t6728\t1\t1\t1\t1\t61\t561\t1561\t4561\t9561\t122\t123\tTDAAAA\tUYJAAA\tAAAAxx\n9725\t6729\t1\t1\t5\t5\t25\t725\t1725\t4725\t9725\t50\t51\tBKAAAA\tVYJAAA\tHHHHxx\n6298\t6730\t0\t2\t8\t18\t98\t298\t298\t1298\t6298\t196\t197\tGIAAAA\tWYJAAA\tOOOOxx\n8654\t6731\t0\t2\t4\t14\t54\t654\t654\t3654\t8654\t108\t109\tWUAAAA\tXYJAAA\tVVVVxx\n8725\t6732\t1\t1\t5\t5\t25\t725\t725\t3725\t8725\t50\t51\tPXAAAA\tYYJAAA\tAAAAxx\n9377\t6733\t1\t1\t7\t17\t77\t377\t1377\t4377\t9377\t154\t155\tRWAAAA\tZYJAAA\tHHHHxx\n3807\t6734\t1\t3\t7\t7\t7\t807\t1807\t3807\t3807\t14\t15\tLQAAAA\tAZJAAA\tOOOOxx\n8048\t6735\t0\t0\t8\t8\t48\t48\t48\t3048\t8048\t96\t97\tOXAAAA\tBZJAAA\tVVVVxx\n764\t6736\t0\t0\t4\t4\t64\t764\t764\t764\t764\t128\t129\tKDAAAA\tCZJAAA\tAAAAxx\n9702\t6737\t0\t2\t2\t2\t2\t702\t1702\t4702\t9702\t4\t5\tEJAAAA\tDZJAAA\tHHHHxx\n8060\t6738\t0\t0\t0\t0\t60\t60\t60\t3060\t8060\t120\t121\tAYAAAA\tEZJAAA\tOOOOxx\n6371\t6739\t1\t3\t1\t11\t71\t371\t371\t1371\t6371\t142\t143\tBLAAAA\tFZJAAA\tVVVVxx\n5237\t6740\t1\t1\t7\t17\t37\t237\t1237\t237\t5237\t74\t75\tLTAAAA\tGZJAAA\tAAAAxx\n743\t6741\t1\t3\t3\t3\t43\t743\t743\t743\t743\t86\t87\tPCAAAA\tHZJAAA\tHHHHxx\n7395\t6742\t1\t3\t5\t15\t95\t395\t1395\t2395\t7395\t190\t191\tLYAAAA\tIZJAAA\tOOOOxx\n3365\t6743\t1\t1\t5\t5\t65\t365\t1365\t3365\t3365\t130\t131\tLZAAAA\tJZJAAA\tVVVVxx\n6667\t6744\t1\t3\t7\t7\t67\t667\t667\t1667\t6667\t134\t135\tLWAAAA\tKZJAAA\tAAAAxx\n3445\t6745\t1\t1\t5\t5\t45\t445\t1445\t3445\t3445\t90\t91\tNCAAAA\tLZJAAA\tHHHHxx\n4019\t6746\t1\t3\t9\t19\t19\t19\t19\t4019\t4019\t38\t39\tPYAAAA\tMZJAAA\tOOOOxx\n7035\t6747\t1\t3\t5\t15\t35\t35\t1035\t2035\t7035\t70\t71\tPKAAAA\tNZJAAA\tVVVVxx\n5274\t6748\t0\t2\t4\t14\t74\t274\t1274\t274\t5274\t148\t149\tWUAAAA\tOZJAAA\tAAAAxx\n519\t6749\t1\t3\t9\t19\t19\t519\t519\t519\t519\t38\t39\tZTAAAA\tPZJAAA\tHHHHxx\n2801\t6750\t1\t1\t1\t1\t1\t801\t801\t2801\t2801\t2\t3\tTDAAAA\tQZJAAA\tOOOOxx\n3320\t6751\t0\t0\t0\t0\t20\t320\t1320\t3320\t3320\t40\t41\tSXAAAA\tRZJAAA\tVVVVxx\n3153\t6752\t1\t1\t3\t13\t53\t153\t1153\t3153\t3153\t106\t107\tHRAAAA\tSZJAAA\tAAAAxx\n7680\t6753\t0\t0\t0\t0\t80\t680\t1680\t2680\t7680\t160\t161\tKJAAAA\tTZJAAA\tHHHHxx\n8942\t6754\t0\t2\t2\t2\t42\t942\t942\t3942\t8942\t84\t85\tYFAAAA\tUZJAAA\tOOOOxx\n3195\t6755\t1\t3\t5\t15\t95\t195\t1195\t3195\t3195\t190\t191\tXSAAAA\tVZJAAA\tVVVVxx\n2287\t6756\t1\t3\t7\t7\t87\t287\t287\t2287\t2287\t174\t175\tZJAAAA\tWZJAAA\tAAAAxx\n8325\t6757\t1\t1\t5\t5\t25\t325\t325\t3325\t8325\t50\t51\tFIAAAA\tXZJAAA\tHHHHxx\n2603\t6758\t1\t3\t3\t3\t3\t603\t603\t2603\t2603\t6\t7\tDWAAAA\tYZJAAA\tOOOOxx\n5871\t6759\t1\t3\t1\t11\t71\t871\t1871\t871\t5871\t142\t143\tVRAAAA\tZZJAAA\tVVVVxx\n1773\t6760\t1\t1\t3\t13\t73\t773\t1773\t1773\t1773\t146\t147\tFQAAAA\tAAKAAA\tAAAAxx\n3323\t6761\t1\t3\t3\t3\t23\t323\t1323\t3323\t3323\t46\t47\tVXAAAA\tBAKAAA\tHHHHxx\n2053\t6762\t1\t1\t3\t13\t53\t53\t53\t2053\t2053\t106\t107\tZAAAAA\tCAKAAA\tOOOOxx\n4062\t6763\t0\t2\t2\t2\t62\t62\t62\t4062\t4062\t124\t125\tGAAAAA\tDAKAAA\tVVVVxx\n4611\t6764\t1\t3\t1\t11\t11\t611\t611\t4611\t4611\t22\t23\tJVAAAA\tEAKAAA\tAAAAxx\n3451\t6765\t1\t3\t1\t11\t51\t451\t1451\t3451\t3451\t102\t103\tTCAAAA\tFAKAAA\tHHHHxx\n1819\t6766\t1\t3\t9\t19\t19\t819\t1819\t1819\t1819\t38\t39\tZRAAAA\tGAKAAA\tOOOOxx\n9806\t6767\t0\t2\t6\t6\t6\t806\t1806\t4806\t9806\t12\t13\tENAAAA\tHAKAAA\tVVVVxx\n6619\t6768\t1\t3\t9\t19\t19\t619\t619\t1619\t6619\t38\t39\tPUAAAA\tIAKAAA\tAAAAxx\n1031\t6769\t1\t3\t1\t11\t31\t31\t1031\t1031\t1031\t62\t63\tRNAAAA\tJAKAAA\tHHHHxx\n1865\t6770\t1\t1\t5\t5\t65\t865\t1865\t1865\t1865\t130\t131\tTTAAAA\tKAKAAA\tOOOOxx\n6282\t6771\t0\t2\t2\t2\t82\t282\t282\t1282\t6282\t164\t165\tQHAAAA\tLAKAAA\tVVVVxx\n1178\t6772\t0\t2\t8\t18\t78\t178\t1178\t1178\t1178\t156\t157\tITAAAA\tMAKAAA\tAAAAxx\n8007\t6773\t1\t3\t7\t7\t7\t7\t7\t3007\t8007\t14\t15\tZVAAAA\tNAKAAA\tHHHHxx\n9126\t6774\t0\t2\t6\t6\t26\t126\t1126\t4126\t9126\t52\t53\tANAAAA\tOAKAAA\tOOOOxx\n9113\t6775\t1\t1\t3\t13\t13\t113\t1113\t4113\t9113\t26\t27\tNMAAAA\tPAKAAA\tVVVVxx\n537\t6776\t1\t1\t7\t17\t37\t537\t537\t537\t537\t74\t75\tRUAAAA\tQAKAAA\tAAAAxx\n6208\t6777\t0\t0\t8\t8\t8\t208\t208\t1208\t6208\t16\t17\tUEAAAA\tRAKAAA\tHHHHxx\n1626\t6778\t0\t2\t6\t6\t26\t626\t1626\t1626\t1626\t52\t53\tOKAAAA\tSAKAAA\tOOOOxx\n7188\t6779\t0\t0\t8\t8\t88\t188\t1188\t2188\t7188\t176\t177\tMQAAAA\tTAKAAA\tVVVVxx\n9216\t6780\t0\t0\t6\t16\t16\t216\t1216\t4216\t9216\t32\t33\tMQAAAA\tUAKAAA\tAAAAxx\n6134\t6781\t0\t2\t4\t14\t34\t134\t134\t1134\t6134\t68\t69\tYBAAAA\tVAKAAA\tHHHHxx\n2074\t6782\t0\t2\t4\t14\t74\t74\t74\t2074\t2074\t148\t149\tUBAAAA\tWAKAAA\tOOOOxx\n6369\t6783\t1\t1\t9\t9\t69\t369\t369\t1369\t6369\t138\t139\tZKAAAA\tXAKAAA\tVVVVxx\n9306\t6784\t0\t2\t6\t6\t6\t306\t1306\t4306\t9306\t12\t13\tYTAAAA\tYAKAAA\tAAAAxx\n3155\t6785\t1\t3\t5\t15\t55\t155\t1155\t3155\t3155\t110\t111\tJRAAAA\tZAKAAA\tHHHHxx\n3611\t6786\t1\t3\t1\t11\t11\t611\t1611\t3611\t3611\t22\t23\tXIAAAA\tABKAAA\tOOOOxx\n6530\t6787\t0\t2\t0\t10\t30\t530\t530\t1530\t6530\t60\t61\tERAAAA\tBBKAAA\tVVVVxx\n6979\t6788\t1\t3\t9\t19\t79\t979\t979\t1979\t6979\t158\t159\tLIAAAA\tCBKAAA\tAAAAxx\n9129\t6789\t1\t1\t9\t9\t29\t129\t1129\t4129\t9129\t58\t59\tDNAAAA\tDBKAAA\tHHHHxx\n8013\t6790\t1\t1\t3\t13\t13\t13\t13\t3013\t8013\t26\t27\tFWAAAA\tEBKAAA\tOOOOxx\n6926\t6791\t0\t2\t6\t6\t26\t926\t926\t1926\t6926\t52\t53\tKGAAAA\tFBKAAA\tVVVVxx\n1877\t6792\t1\t1\t7\t17\t77\t877\t1877\t1877\t1877\t154\t155\tFUAAAA\tGBKAAA\tAAAAxx\n1882\t6793\t0\t2\t2\t2\t82\t882\t1882\t1882\t1882\t164\t165\tKUAAAA\tHBKAAA\tHHHHxx\n6720\t6794\t0\t0\t0\t0\t20\t720\t720\t1720\t6720\t40\t41\tMYAAAA\tIBKAAA\tOOOOxx\n690\t6795\t0\t2\t0\t10\t90\t690\t690\t690\t690\t180\t181\tOAAAAA\tJBKAAA\tVVVVxx\n143\t6796\t1\t3\t3\t3\t43\t143\t143\t143\t143\t86\t87\tNFAAAA\tKBKAAA\tAAAAxx\n7241\t6797\t1\t1\t1\t1\t41\t241\t1241\t2241\t7241\t82\t83\tNSAAAA\tLBKAAA\tHHHHxx\n6461\t6798\t1\t1\t1\t1\t61\t461\t461\t1461\t6461\t122\t123\tNOAAAA\tMBKAAA\tOOOOxx\n2258\t6799\t0\t2\t8\t18\t58\t258\t258\t2258\t2258\t116\t117\tWIAAAA\tNBKAAA\tVVVVxx\n2280\t6800\t0\t0\t0\t0\t80\t280\t280\t2280\t2280\t160\t161\tSJAAAA\tOBKAAA\tAAAAxx\n7556\t6801\t0\t0\t6\t16\t56\t556\t1556\t2556\t7556\t112\t113\tQEAAAA\tPBKAAA\tHHHHxx\n1038\t6802\t0\t2\t8\t18\t38\t38\t1038\t1038\t1038\t76\t77\tYNAAAA\tQBKAAA\tOOOOxx\n2634\t6803\t0\t2\t4\t14\t34\t634\t634\t2634\t2634\t68\t69\tIXAAAA\tRBKAAA\tVVVVxx\n7847\t6804\t1\t3\t7\t7\t47\t847\t1847\t2847\t7847\t94\t95\tVPAAAA\tSBKAAA\tAAAAxx\n4415\t6805\t1\t3\t5\t15\t15\t415\t415\t4415\t4415\t30\t31\tVNAAAA\tTBKAAA\tHHHHxx\n1933\t6806\t1\t1\t3\t13\t33\t933\t1933\t1933\t1933\t66\t67\tJWAAAA\tUBKAAA\tOOOOxx\n8034\t6807\t0\t2\t4\t14\t34\t34\t34\t3034\t8034\t68\t69\tAXAAAA\tVBKAAA\tVVVVxx\n9233\t6808\t1\t1\t3\t13\t33\t233\t1233\t4233\t9233\t66\t67\tDRAAAA\tWBKAAA\tAAAAxx\n6572\t6809\t0\t0\t2\t12\t72\t572\t572\t1572\t6572\t144\t145\tUSAAAA\tXBKAAA\tHHHHxx\n1586\t6810\t0\t2\t6\t6\t86\t586\t1586\t1586\t1586\t172\t173\tAJAAAA\tYBKAAA\tOOOOxx\n8512\t6811\t0\t0\t2\t12\t12\t512\t512\t3512\t8512\t24\t25\tKPAAAA\tZBKAAA\tVVVVxx\n7421\t6812\t1\t1\t1\t1\t21\t421\t1421\t2421\t7421\t42\t43\tLZAAAA\tACKAAA\tAAAAxx\n503\t6813\t1\t3\t3\t3\t3\t503\t503\t503\t503\t6\t7\tJTAAAA\tBCKAAA\tHHHHxx\n5332\t6814\t0\t0\t2\t12\t32\t332\t1332\t332\t5332\t64\t65\tCXAAAA\tCCKAAA\tOOOOxx\n2602\t6815\t0\t2\t2\t2\t2\t602\t602\t2602\t2602\t4\t5\tCWAAAA\tDCKAAA\tVVVVxx\n2902\t6816\t0\t2\t2\t2\t2\t902\t902\t2902\t2902\t4\t5\tQHAAAA\tECKAAA\tAAAAxx\n2979\t6817\t1\t3\t9\t19\t79\t979\t979\t2979\t2979\t158\t159\tPKAAAA\tFCKAAA\tHHHHxx\n1431\t6818\t1\t3\t1\t11\t31\t431\t1431\t1431\t1431\t62\t63\tBDAAAA\tGCKAAA\tOOOOxx\n8639\t6819\t1\t3\t9\t19\t39\t639\t639\t3639\t8639\t78\t79\tHUAAAA\tHCKAAA\tVVVVxx\n4218\t6820\t0\t2\t8\t18\t18\t218\t218\t4218\t4218\t36\t37\tGGAAAA\tICKAAA\tAAAAxx\n7453\t6821\t1\t1\t3\t13\t53\t453\t1453\t2453\t7453\t106\t107\tRAAAAA\tJCKAAA\tHHHHxx\n5448\t6822\t0\t0\t8\t8\t48\t448\t1448\t448\t5448\t96\t97\tOBAAAA\tKCKAAA\tOOOOxx\n6768\t6823\t0\t0\t8\t8\t68\t768\t768\t1768\t6768\t136\t137\tIAAAAA\tLCKAAA\tVVVVxx\n3104\t6824\t0\t0\t4\t4\t4\t104\t1104\t3104\t3104\t8\t9\tKPAAAA\tMCKAAA\tAAAAxx\n2297\t6825\t1\t1\t7\t17\t97\t297\t297\t2297\t2297\t194\t195\tJKAAAA\tNCKAAA\tHHHHxx\n7994\t6826\t0\t2\t4\t14\t94\t994\t1994\t2994\t7994\t188\t189\tMVAAAA\tOCKAAA\tOOOOxx\n550\t6827\t0\t2\t0\t10\t50\t550\t550\t550\t550\t100\t101\tEVAAAA\tPCKAAA\tVVVVxx\n4777\t6828\t1\t1\t7\t17\t77\t777\t777\t4777\t4777\t154\t155\tTBAAAA\tQCKAAA\tAAAAxx\n5962\t6829\t0\t2\t2\t2\t62\t962\t1962\t962\t5962\t124\t125\tIVAAAA\tRCKAAA\tHHHHxx\n1763\t6830\t1\t3\t3\t3\t63\t763\t1763\t1763\t1763\t126\t127\tVPAAAA\tSCKAAA\tOOOOxx\n3654\t6831\t0\t2\t4\t14\t54\t654\t1654\t3654\t3654\t108\t109\tOKAAAA\tTCKAAA\tVVVVxx\n4106\t6832\t0\t2\t6\t6\t6\t106\t106\t4106\t4106\t12\t13\tYBAAAA\tUCKAAA\tAAAAxx\n5156\t6833\t0\t0\t6\t16\t56\t156\t1156\t156\t5156\t112\t113\tIQAAAA\tVCKAAA\tHHHHxx\n422\t6834\t0\t2\t2\t2\t22\t422\t422\t422\t422\t44\t45\tGQAAAA\tWCKAAA\tOOOOxx\n5011\t6835\t1\t3\t1\t11\t11\t11\t1011\t11\t5011\t22\t23\tTKAAAA\tXCKAAA\tVVVVxx\n218\t6836\t0\t2\t8\t18\t18\t218\t218\t218\t218\t36\t37\tKIAAAA\tYCKAAA\tAAAAxx\n9762\t6837\t0\t2\t2\t2\t62\t762\t1762\t4762\t9762\t124\t125\tMLAAAA\tZCKAAA\tHHHHxx\n6074\t6838\t0\t2\t4\t14\t74\t74\t74\t1074\t6074\t148\t149\tQZAAAA\tADKAAA\tOOOOxx\n4060\t6839\t0\t0\t0\t0\t60\t60\t60\t4060\t4060\t120\t121\tEAAAAA\tBDKAAA\tVVVVxx\n8680\t6840\t0\t0\t0\t0\t80\t680\t680\t3680\t8680\t160\t161\tWVAAAA\tCDKAAA\tAAAAxx\n5863\t6841\t1\t3\t3\t3\t63\t863\t1863\t863\t5863\t126\t127\tNRAAAA\tDDKAAA\tHHHHxx\n8042\t6842\t0\t2\t2\t2\t42\t42\t42\t3042\t8042\t84\t85\tIXAAAA\tEDKAAA\tOOOOxx\n2964\t6843\t0\t0\t4\t4\t64\t964\t964\t2964\t2964\t128\t129\tAKAAAA\tFDKAAA\tVVVVxx\n6931\t6844\t1\t3\t1\t11\t31\t931\t931\t1931\t6931\t62\t63\tPGAAAA\tGDKAAA\tAAAAxx\n6715\t6845\t1\t3\t5\t15\t15\t715\t715\t1715\t6715\t30\t31\tHYAAAA\tHDKAAA\tHHHHxx\n5859\t6846\t1\t3\t9\t19\t59\t859\t1859\t859\t5859\t118\t119\tJRAAAA\tIDKAAA\tOOOOxx\n6173\t6847\t1\t1\t3\t13\t73\t173\t173\t1173\t6173\t146\t147\tLDAAAA\tJDKAAA\tVVVVxx\n7788\t6848\t0\t0\t8\t8\t88\t788\t1788\t2788\t7788\t176\t177\tONAAAA\tKDKAAA\tAAAAxx\n9370\t6849\t0\t2\t0\t10\t70\t370\t1370\t4370\t9370\t140\t141\tKWAAAA\tLDKAAA\tHHHHxx\n3038\t6850\t0\t2\t8\t18\t38\t38\t1038\t3038\t3038\t76\t77\tWMAAAA\tMDKAAA\tOOOOxx\n6483\t6851\t1\t3\t3\t3\t83\t483\t483\t1483\t6483\t166\t167\tJPAAAA\tNDKAAA\tVVVVxx\n7534\t6852\t0\t2\t4\t14\t34\t534\t1534\t2534\t7534\t68\t69\tUDAAAA\tODKAAA\tAAAAxx\n5769\t6853\t1\t1\t9\t9\t69\t769\t1769\t769\t5769\t138\t139\tXNAAAA\tPDKAAA\tHHHHxx\n9152\t6854\t0\t0\t2\t12\t52\t152\t1152\t4152\t9152\t104\t105\tAOAAAA\tQDKAAA\tOOOOxx\n6251\t6855\t1\t3\t1\t11\t51\t251\t251\t1251\t6251\t102\t103\tLGAAAA\tRDKAAA\tVVVVxx\n9209\t6856\t1\t1\t9\t9\t9\t209\t1209\t4209\t9209\t18\t19\tFQAAAA\tSDKAAA\tAAAAxx\n5365\t6857\t1\t1\t5\t5\t65\t365\t1365\t365\t5365\t130\t131\tJYAAAA\tTDKAAA\tHHHHxx\n509\t6858\t1\t1\t9\t9\t9\t509\t509\t509\t509\t18\t19\tPTAAAA\tUDKAAA\tOOOOxx\n3132\t6859\t0\t0\t2\t12\t32\t132\t1132\t3132\t3132\t64\t65\tMQAAAA\tVDKAAA\tVVVVxx\n5373\t6860\t1\t1\t3\t13\t73\t373\t1373\t373\t5373\t146\t147\tRYAAAA\tWDKAAA\tAAAAxx\n4247\t6861\t1\t3\t7\t7\t47\t247\t247\t4247\t4247\t94\t95\tJHAAAA\tXDKAAA\tHHHHxx\n3491\t6862\t1\t3\t1\t11\t91\t491\t1491\t3491\t3491\t182\t183\tHEAAAA\tYDKAAA\tOOOOxx\n495\t6863\t1\t3\t5\t15\t95\t495\t495\t495\t495\t190\t191\tBTAAAA\tZDKAAA\tVVVVxx\n1594\t6864\t0\t2\t4\t14\t94\t594\t1594\t1594\t1594\t188\t189\tIJAAAA\tAEKAAA\tAAAAxx\n2243\t6865\t1\t3\t3\t3\t43\t243\t243\t2243\t2243\t86\t87\tHIAAAA\tBEKAAA\tHHHHxx\n7780\t6866\t0\t0\t0\t0\t80\t780\t1780\t2780\t7780\t160\t161\tGNAAAA\tCEKAAA\tOOOOxx\n5632\t6867\t0\t0\t2\t12\t32\t632\t1632\t632\t5632\t64\t65\tQIAAAA\tDEKAAA\tVVVVxx\n2679\t6868\t1\t3\t9\t19\t79\t679\t679\t2679\t2679\t158\t159\tBZAAAA\tEEKAAA\tAAAAxx\n1354\t6869\t0\t2\t4\t14\t54\t354\t1354\t1354\t1354\t108\t109\tCAAAAA\tFEKAAA\tHHHHxx\n180\t6870\t0\t0\t0\t0\t80\t180\t180\t180\t180\t160\t161\tYGAAAA\tGEKAAA\tOOOOxx\n7017\t6871\t1\t1\t7\t17\t17\t17\t1017\t2017\t7017\t34\t35\tXJAAAA\tHEKAAA\tVVVVxx\n1867\t6872\t1\t3\t7\t7\t67\t867\t1867\t1867\t1867\t134\t135\tVTAAAA\tIEKAAA\tAAAAxx\n2213\t6873\t1\t1\t3\t13\t13\t213\t213\t2213\t2213\t26\t27\tDHAAAA\tJEKAAA\tHHHHxx\n8773\t6874\t1\t1\t3\t13\t73\t773\t773\t3773\t8773\t146\t147\tLZAAAA\tKEKAAA\tOOOOxx\n1784\t6875\t0\t0\t4\t4\t84\t784\t1784\t1784\t1784\t168\t169\tQQAAAA\tLEKAAA\tVVVVxx\n5961\t6876\t1\t1\t1\t1\t61\t961\t1961\t961\t5961\t122\t123\tHVAAAA\tMEKAAA\tAAAAxx\n8801\t6877\t1\t1\t1\t1\t1\t801\t801\t3801\t8801\t2\t3\tNAAAAA\tNEKAAA\tHHHHxx\n4860\t6878\t0\t0\t0\t0\t60\t860\t860\t4860\t4860\t120\t121\tYEAAAA\tOEKAAA\tOOOOxx\n2214\t6879\t0\t2\t4\t14\t14\t214\t214\t2214\t2214\t28\t29\tEHAAAA\tPEKAAA\tVVVVxx\n1735\t6880\t1\t3\t5\t15\t35\t735\t1735\t1735\t1735\t70\t71\tTOAAAA\tQEKAAA\tAAAAxx\n578\t6881\t0\t2\t8\t18\t78\t578\t578\t578\t578\t156\t157\tGWAAAA\tREKAAA\tHHHHxx\n7853\t6882\t1\t1\t3\t13\t53\t853\t1853\t2853\t7853\t106\t107\tBQAAAA\tSEKAAA\tOOOOxx\n2215\t6883\t1\t3\t5\t15\t15\t215\t215\t2215\t2215\t30\t31\tFHAAAA\tTEKAAA\tVVVVxx\n4704\t6884\t0\t0\t4\t4\t4\t704\t704\t4704\t4704\t8\t9\tYYAAAA\tUEKAAA\tAAAAxx\n9379\t6885\t1\t3\t9\t19\t79\t379\t1379\t4379\t9379\t158\t159\tTWAAAA\tVEKAAA\tHHHHxx\n9745\t6886\t1\t1\t5\t5\t45\t745\t1745\t4745\t9745\t90\t91\tVKAAAA\tWEKAAA\tOOOOxx\n5636\t6887\t0\t0\t6\t16\t36\t636\t1636\t636\t5636\t72\t73\tUIAAAA\tXEKAAA\tVVVVxx\n4548\t6888\t0\t0\t8\t8\t48\t548\t548\t4548\t4548\t96\t97\tYSAAAA\tYEKAAA\tAAAAxx\n6537\t6889\t1\t1\t7\t17\t37\t537\t537\t1537\t6537\t74\t75\tLRAAAA\tZEKAAA\tHHHHxx\n7748\t6890\t0\t0\t8\t8\t48\t748\t1748\t2748\t7748\t96\t97\tAMAAAA\tAFKAAA\tOOOOxx\n687\t6891\t1\t3\t7\t7\t87\t687\t687\t687\t687\t174\t175\tLAAAAA\tBFKAAA\tVVVVxx\n1243\t6892\t1\t3\t3\t3\t43\t243\t1243\t1243\t1243\t86\t87\tVVAAAA\tCFKAAA\tAAAAxx\n852\t6893\t0\t0\t2\t12\t52\t852\t852\t852\t852\t104\t105\tUGAAAA\tDFKAAA\tHHHHxx\n785\t6894\t1\t1\t5\t5\t85\t785\t785\t785\t785\t170\t171\tFEAAAA\tEFKAAA\tOOOOxx\n2002\t6895\t0\t2\t2\t2\t2\t2\t2\t2002\t2002\t4\t5\tAZAAAA\tFFKAAA\tVVVVxx\n2748\t6896\t0\t0\t8\t8\t48\t748\t748\t2748\t2748\t96\t97\tSBAAAA\tGFKAAA\tAAAAxx\n6075\t6897\t1\t3\t5\t15\t75\t75\t75\t1075\t6075\t150\t151\tRZAAAA\tHFKAAA\tHHHHxx\n7029\t6898\t1\t1\t9\t9\t29\t29\t1029\t2029\t7029\t58\t59\tJKAAAA\tIFKAAA\tOOOOxx\n7474\t6899\t0\t2\t4\t14\t74\t474\t1474\t2474\t7474\t148\t149\tMBAAAA\tJFKAAA\tVVVVxx\n7755\t6900\t1\t3\t5\t15\t55\t755\t1755\t2755\t7755\t110\t111\tHMAAAA\tKFKAAA\tAAAAxx\n1456\t6901\t0\t0\t6\t16\t56\t456\t1456\t1456\t1456\t112\t113\tAEAAAA\tLFKAAA\tHHHHxx\n2808\t6902\t0\t0\t8\t8\t8\t808\t808\t2808\t2808\t16\t17\tAEAAAA\tMFKAAA\tOOOOxx\n4089\t6903\t1\t1\t9\t9\t89\t89\t89\t4089\t4089\t178\t179\tHBAAAA\tNFKAAA\tVVVVxx\n4718\t6904\t0\t2\t8\t18\t18\t718\t718\t4718\t4718\t36\t37\tMZAAAA\tOFKAAA\tAAAAxx\n910\t6905\t0\t2\t0\t10\t10\t910\t910\t910\t910\t20\t21\tAJAAAA\tPFKAAA\tHHHHxx\n2868\t6906\t0\t0\t8\t8\t68\t868\t868\t2868\t2868\t136\t137\tIGAAAA\tQFKAAA\tOOOOxx\n2103\t6907\t1\t3\t3\t3\t3\t103\t103\t2103\t2103\t6\t7\tXCAAAA\tRFKAAA\tVVVVxx\n2407\t6908\t1\t3\t7\t7\t7\t407\t407\t2407\t2407\t14\t15\tPOAAAA\tSFKAAA\tAAAAxx\n4353\t6909\t1\t1\t3\t13\t53\t353\t353\t4353\t4353\t106\t107\tLLAAAA\tTFKAAA\tHHHHxx\n7988\t6910\t0\t0\t8\t8\t88\t988\t1988\t2988\t7988\t176\t177\tGVAAAA\tUFKAAA\tOOOOxx\n2750\t6911\t0\t2\t0\t10\t50\t750\t750\t2750\t2750\t100\t101\tUBAAAA\tVFKAAA\tVVVVxx\n2006\t6912\t0\t2\t6\t6\t6\t6\t6\t2006\t2006\t12\t13\tEZAAAA\tWFKAAA\tAAAAxx\n4617\t6913\t1\t1\t7\t17\t17\t617\t617\t4617\t4617\t34\t35\tPVAAAA\tXFKAAA\tHHHHxx\n1251\t6914\t1\t3\t1\t11\t51\t251\t1251\t1251\t1251\t102\t103\tDWAAAA\tYFKAAA\tOOOOxx\n4590\t6915\t0\t2\t0\t10\t90\t590\t590\t4590\t4590\t180\t181\tOUAAAA\tZFKAAA\tVVVVxx\n1144\t6916\t0\t0\t4\t4\t44\t144\t1144\t1144\t1144\t88\t89\tASAAAA\tAGKAAA\tAAAAxx\n7131\t6917\t1\t3\t1\t11\t31\t131\t1131\t2131\t7131\t62\t63\tHOAAAA\tBGKAAA\tHHHHxx\n95\t6918\t1\t3\t5\t15\t95\t95\t95\t95\t95\t190\t191\tRDAAAA\tCGKAAA\tOOOOxx\n4827\t6919\t1\t3\t7\t7\t27\t827\t827\t4827\t4827\t54\t55\tRDAAAA\tDGKAAA\tVVVVxx\n4307\t6920\t1\t3\t7\t7\t7\t307\t307\t4307\t4307\t14\t15\tRJAAAA\tEGKAAA\tAAAAxx\n1505\t6921\t1\t1\t5\t5\t5\t505\t1505\t1505\t1505\t10\t11\tXFAAAA\tFGKAAA\tHHHHxx\n8191\t6922\t1\t3\t1\t11\t91\t191\t191\t3191\t8191\t182\t183\tBDAAAA\tGGKAAA\tOOOOxx\n5037\t6923\t1\t1\t7\t17\t37\t37\t1037\t37\t5037\t74\t75\tTLAAAA\tHGKAAA\tVVVVxx\n7363\t6924\t1\t3\t3\t3\t63\t363\t1363\t2363\t7363\t126\t127\tFXAAAA\tIGKAAA\tAAAAxx\n8427\t6925\t1\t3\t7\t7\t27\t427\t427\t3427\t8427\t54\t55\tDMAAAA\tJGKAAA\tHHHHxx\n5231\t6926\t1\t3\t1\t11\t31\t231\t1231\t231\t5231\t62\t63\tFTAAAA\tKGKAAA\tOOOOxx\n2943\t6927\t1\t3\t3\t3\t43\t943\t943\t2943\t2943\t86\t87\tFJAAAA\tLGKAAA\tVVVVxx\n4624\t6928\t0\t0\t4\t4\t24\t624\t624\t4624\t4624\t48\t49\tWVAAAA\tMGKAAA\tAAAAxx\n2020\t6929\t0\t0\t0\t0\t20\t20\t20\t2020\t2020\t40\t41\tSZAAAA\tNGKAAA\tHHHHxx\n6155\t6930\t1\t3\t5\t15\t55\t155\t155\t1155\t6155\t110\t111\tTCAAAA\tOGKAAA\tOOOOxx\n4381\t6931\t1\t1\t1\t1\t81\t381\t381\t4381\t4381\t162\t163\tNMAAAA\tPGKAAA\tVVVVxx\n1057\t6932\t1\t1\t7\t17\t57\t57\t1057\t1057\t1057\t114\t115\tROAAAA\tQGKAAA\tAAAAxx\n9010\t6933\t0\t2\t0\t10\t10\t10\t1010\t4010\t9010\t20\t21\tOIAAAA\tRGKAAA\tHHHHxx\n4947\t6934\t1\t3\t7\t7\t47\t947\t947\t4947\t4947\t94\t95\tHIAAAA\tSGKAAA\tOOOOxx\n335\t6935\t1\t3\t5\t15\t35\t335\t335\t335\t335\t70\t71\tXMAAAA\tTGKAAA\tVVVVxx\n6890\t6936\t0\t2\t0\t10\t90\t890\t890\t1890\t6890\t180\t181\tAFAAAA\tUGKAAA\tAAAAxx\n5070\t6937\t0\t2\t0\t10\t70\t70\t1070\t70\t5070\t140\t141\tANAAAA\tVGKAAA\tHHHHxx\n5270\t6938\t0\t2\t0\t10\t70\t270\t1270\t270\t5270\t140\t141\tSUAAAA\tWGKAAA\tOOOOxx\n8657\t6939\t1\t1\t7\t17\t57\t657\t657\t3657\t8657\t114\t115\tZUAAAA\tXGKAAA\tVVVVxx\n7625\t6940\t1\t1\t5\t5\t25\t625\t1625\t2625\t7625\t50\t51\tHHAAAA\tYGKAAA\tAAAAxx\n5759\t6941\t1\t3\t9\t19\t59\t759\t1759\t759\t5759\t118\t119\tNNAAAA\tZGKAAA\tHHHHxx\n9483\t6942\t1\t3\t3\t3\t83\t483\t1483\t4483\t9483\t166\t167\tTAAAAA\tAHKAAA\tOOOOxx\n8304\t6943\t0\t0\t4\t4\t4\t304\t304\t3304\t8304\t8\t9\tKHAAAA\tBHKAAA\tVVVVxx\n296\t6944\t0\t0\t6\t16\t96\t296\t296\t296\t296\t192\t193\tKLAAAA\tCHKAAA\tAAAAxx\n1176\t6945\t0\t0\t6\t16\t76\t176\t1176\t1176\t1176\t152\t153\tGTAAAA\tDHKAAA\tHHHHxx\n2069\t6946\t1\t1\t9\t9\t69\t69\t69\t2069\t2069\t138\t139\tPBAAAA\tEHKAAA\tOOOOxx\n1531\t6947\t1\t3\t1\t11\t31\t531\t1531\t1531\t1531\t62\t63\tXGAAAA\tFHKAAA\tVVVVxx\n5329\t6948\t1\t1\t9\t9\t29\t329\t1329\t329\t5329\t58\t59\tZWAAAA\tGHKAAA\tAAAAxx\n3702\t6949\t0\t2\t2\t2\t2\t702\t1702\t3702\t3702\t4\t5\tKMAAAA\tHHKAAA\tHHHHxx\n6520\t6950\t0\t0\t0\t0\t20\t520\t520\t1520\t6520\t40\t41\tUQAAAA\tIHKAAA\tOOOOxx\n7310\t6951\t0\t2\t0\t10\t10\t310\t1310\t2310\t7310\t20\t21\tEVAAAA\tJHKAAA\tVVVVxx\n1175\t6952\t1\t3\t5\t15\t75\t175\t1175\t1175\t1175\t150\t151\tFTAAAA\tKHKAAA\tAAAAxx\n9107\t6953\t1\t3\t7\t7\t7\t107\t1107\t4107\t9107\t14\t15\tHMAAAA\tLHKAAA\tHHHHxx\n2737\t6954\t1\t1\t7\t17\t37\t737\t737\t2737\t2737\t74\t75\tHBAAAA\tMHKAAA\tOOOOxx\n3437\t6955\t1\t1\t7\t17\t37\t437\t1437\t3437\t3437\t74\t75\tFCAAAA\tNHKAAA\tVVVVxx\n281\t6956\t1\t1\t1\t1\t81\t281\t281\t281\t281\t162\t163\tVKAAAA\tOHKAAA\tAAAAxx\n6676\t6957\t0\t0\t6\t16\t76\t676\t676\t1676\t6676\t152\t153\tUWAAAA\tPHKAAA\tHHHHxx\n145\t6958\t1\t1\t5\t5\t45\t145\t145\t145\t145\t90\t91\tPFAAAA\tQHKAAA\tOOOOxx\n3172\t6959\t0\t0\t2\t12\t72\t172\t1172\t3172\t3172\t144\t145\tASAAAA\tRHKAAA\tVVVVxx\n4049\t6960\t1\t1\t9\t9\t49\t49\t49\t4049\t4049\t98\t99\tTZAAAA\tSHKAAA\tAAAAxx\n6042\t6961\t0\t2\t2\t2\t42\t42\t42\t1042\t6042\t84\t85\tKYAAAA\tTHKAAA\tHHHHxx\n9122\t6962\t0\t2\t2\t2\t22\t122\t1122\t4122\t9122\t44\t45\tWMAAAA\tUHKAAA\tOOOOxx\n7244\t6963\t0\t0\t4\t4\t44\t244\t1244\t2244\t7244\t88\t89\tQSAAAA\tVHKAAA\tVVVVxx\n5361\t6964\t1\t1\t1\t1\t61\t361\t1361\t361\t5361\t122\t123\tFYAAAA\tWHKAAA\tAAAAxx\n8647\t6965\t1\t3\t7\t7\t47\t647\t647\t3647\t8647\t94\t95\tPUAAAA\tXHKAAA\tHHHHxx\n7956\t6966\t0\t0\t6\t16\t56\t956\t1956\t2956\t7956\t112\t113\tAUAAAA\tYHKAAA\tOOOOxx\n7812\t6967\t0\t0\t2\t12\t12\t812\t1812\t2812\t7812\t24\t25\tMOAAAA\tZHKAAA\tVVVVxx\n570\t6968\t0\t2\t0\t10\t70\t570\t570\t570\t570\t140\t141\tYVAAAA\tAIKAAA\tAAAAxx\n4115\t6969\t1\t3\t5\t15\t15\t115\t115\t4115\t4115\t30\t31\tHCAAAA\tBIKAAA\tHHHHxx\n1856\t6970\t0\t0\t6\t16\t56\t856\t1856\t1856\t1856\t112\t113\tKTAAAA\tCIKAAA\tOOOOxx\n9582\t6971\t0\t2\t2\t2\t82\t582\t1582\t4582\t9582\t164\t165\tOEAAAA\tDIKAAA\tVVVVxx\n2025\t6972\t1\t1\t5\t5\t25\t25\t25\t2025\t2025\t50\t51\tXZAAAA\tEIKAAA\tAAAAxx\n986\t6973\t0\t2\t6\t6\t86\t986\t986\t986\t986\t172\t173\tYLAAAA\tFIKAAA\tHHHHxx\n8358\t6974\t0\t2\t8\t18\t58\t358\t358\t3358\t8358\t116\t117\tMJAAAA\tGIKAAA\tOOOOxx\n510\t6975\t0\t2\t0\t10\t10\t510\t510\t510\t510\t20\t21\tQTAAAA\tHIKAAA\tVVVVxx\n6101\t6976\t1\t1\t1\t1\t1\t101\t101\t1101\t6101\t2\t3\tRAAAAA\tIIKAAA\tAAAAxx\n4167\t6977\t1\t3\t7\t7\t67\t167\t167\t4167\t4167\t134\t135\tHEAAAA\tJIKAAA\tHHHHxx\n6139\t6978\t1\t3\t9\t19\t39\t139\t139\t1139\t6139\t78\t79\tDCAAAA\tKIKAAA\tOOOOxx\n6912\t6979\t0\t0\t2\t12\t12\t912\t912\t1912\t6912\t24\t25\tWFAAAA\tLIKAAA\tVVVVxx\n339\t6980\t1\t3\t9\t19\t39\t339\t339\t339\t339\t78\t79\tBNAAAA\tMIKAAA\tAAAAxx\n8759\t6981\t1\t3\t9\t19\t59\t759\t759\t3759\t8759\t118\t119\tXYAAAA\tNIKAAA\tHHHHxx\n246\t6982\t0\t2\t6\t6\t46\t246\t246\t246\t246\t92\t93\tMJAAAA\tOIKAAA\tOOOOxx\n2831\t6983\t1\t3\t1\t11\t31\t831\t831\t2831\t2831\t62\t63\tXEAAAA\tPIKAAA\tVVVVxx\n2327\t6984\t1\t3\t7\t7\t27\t327\t327\t2327\t2327\t54\t55\tNLAAAA\tQIKAAA\tAAAAxx\n7001\t6985\t1\t1\t1\t1\t1\t1\t1001\t2001\t7001\t2\t3\tHJAAAA\tRIKAAA\tHHHHxx\n4398\t6986\t0\t2\t8\t18\t98\t398\t398\t4398\t4398\t196\t197\tENAAAA\tSIKAAA\tOOOOxx\n1495\t6987\t1\t3\t5\t15\t95\t495\t1495\t1495\t1495\t190\t191\tNFAAAA\tTIKAAA\tVVVVxx\n8522\t6988\t0\t2\t2\t2\t22\t522\t522\t3522\t8522\t44\t45\tUPAAAA\tUIKAAA\tAAAAxx\n7090\t6989\t0\t2\t0\t10\t90\t90\t1090\t2090\t7090\t180\t181\tSMAAAA\tVIKAAA\tHHHHxx\n8457\t6990\t1\t1\t7\t17\t57\t457\t457\t3457\t8457\t114\t115\tHNAAAA\tWIKAAA\tOOOOxx\n4238\t6991\t0\t2\t8\t18\t38\t238\t238\t4238\t4238\t76\t77\tAHAAAA\tXIKAAA\tVVVVxx\n6791\t6992\t1\t3\t1\t11\t91\t791\t791\t1791\t6791\t182\t183\tFBAAAA\tYIKAAA\tAAAAxx\n1342\t6993\t0\t2\t2\t2\t42\t342\t1342\t1342\t1342\t84\t85\tQZAAAA\tZIKAAA\tHHHHxx\n4580\t6994\t0\t0\t0\t0\t80\t580\t580\t4580\t4580\t160\t161\tEUAAAA\tAJKAAA\tOOOOxx\n1475\t6995\t1\t3\t5\t15\t75\t475\t1475\t1475\t1475\t150\t151\tTEAAAA\tBJKAAA\tVVVVxx\n9184\t6996\t0\t0\t4\t4\t84\t184\t1184\t4184\t9184\t168\t169\tGPAAAA\tCJKAAA\tAAAAxx\n1189\t6997\t1\t1\t9\t9\t89\t189\t1189\t1189\t1189\t178\t179\tTTAAAA\tDJKAAA\tHHHHxx\n638\t6998\t0\t2\t8\t18\t38\t638\t638\t638\t638\t76\t77\tOYAAAA\tEJKAAA\tOOOOxx\n5867\t6999\t1\t3\t7\t7\t67\t867\t1867\t867\t5867\t134\t135\tRRAAAA\tFJKAAA\tVVVVxx\n9911\t7000\t1\t3\t1\t11\t11\t911\t1911\t4911\t9911\t22\t23\tFRAAAA\tGJKAAA\tAAAAxx\n8147\t7001\t1\t3\t7\t7\t47\t147\t147\t3147\t8147\t94\t95\tJBAAAA\tHJKAAA\tHHHHxx\n4492\t7002\t0\t0\t2\t12\t92\t492\t492\t4492\t4492\t184\t185\tUQAAAA\tIJKAAA\tOOOOxx\n385\t7003\t1\t1\t5\t5\t85\t385\t385\t385\t385\t170\t171\tVOAAAA\tJJKAAA\tVVVVxx\n5235\t7004\t1\t3\t5\t15\t35\t235\t1235\t235\t5235\t70\t71\tJTAAAA\tKJKAAA\tAAAAxx\n4812\t7005\t0\t0\t2\t12\t12\t812\t812\t4812\t4812\t24\t25\tCDAAAA\tLJKAAA\tHHHHxx\n9807\t7006\t1\t3\t7\t7\t7\t807\t1807\t4807\t9807\t14\t15\tFNAAAA\tMJKAAA\tOOOOxx\n9588\t7007\t0\t0\t8\t8\t88\t588\t1588\t4588\t9588\t176\t177\tUEAAAA\tNJKAAA\tVVVVxx\n9832\t7008\t0\t0\t2\t12\t32\t832\t1832\t4832\t9832\t64\t65\tEOAAAA\tOJKAAA\tAAAAxx\n3757\t7009\t1\t1\t7\t17\t57\t757\t1757\t3757\t3757\t114\t115\tNOAAAA\tPJKAAA\tHHHHxx\n9703\t7010\t1\t3\t3\t3\t3\t703\t1703\t4703\t9703\t6\t7\tFJAAAA\tQJKAAA\tOOOOxx\n1022\t7011\t0\t2\t2\t2\t22\t22\t1022\t1022\t1022\t44\t45\tINAAAA\tRJKAAA\tVVVVxx\n5165\t7012\t1\t1\t5\t5\t65\t165\t1165\t165\t5165\t130\t131\tRQAAAA\tSJKAAA\tAAAAxx\n7129\t7013\t1\t1\t9\t9\t29\t129\t1129\t2129\t7129\t58\t59\tFOAAAA\tTJKAAA\tHHHHxx\n4164\t7014\t0\t0\t4\t4\t64\t164\t164\t4164\t4164\t128\t129\tEEAAAA\tUJKAAA\tOOOOxx\n7239\t7015\t1\t3\t9\t19\t39\t239\t1239\t2239\t7239\t78\t79\tLSAAAA\tVJKAAA\tVVVVxx\n523\t7016\t1\t3\t3\t3\t23\t523\t523\t523\t523\t46\t47\tDUAAAA\tWJKAAA\tAAAAxx\n4670\t7017\t0\t2\t0\t10\t70\t670\t670\t4670\t4670\t140\t141\tQXAAAA\tXJKAAA\tHHHHxx\n8503\t7018\t1\t3\t3\t3\t3\t503\t503\t3503\t8503\t6\t7\tBPAAAA\tYJKAAA\tOOOOxx\n714\t7019\t0\t2\t4\t14\t14\t714\t714\t714\t714\t28\t29\tMBAAAA\tZJKAAA\tVVVVxx\n1350\t7020\t0\t2\t0\t10\t50\t350\t1350\t1350\t1350\t100\t101\tYZAAAA\tAKKAAA\tAAAAxx\n8318\t7021\t0\t2\t8\t18\t18\t318\t318\t3318\t8318\t36\t37\tYHAAAA\tBKKAAA\tHHHHxx\n1834\t7022\t0\t2\t4\t14\t34\t834\t1834\t1834\t1834\t68\t69\tOSAAAA\tCKKAAA\tOOOOxx\n4306\t7023\t0\t2\t6\t6\t6\t306\t306\t4306\t4306\t12\t13\tQJAAAA\tDKKAAA\tVVVVxx\n8543\t7024\t1\t3\t3\t3\t43\t543\t543\t3543\t8543\t86\t87\tPQAAAA\tEKKAAA\tAAAAxx\n9397\t7025\t1\t1\t7\t17\t97\t397\t1397\t4397\t9397\t194\t195\tLXAAAA\tFKKAAA\tHHHHxx\n3145\t7026\t1\t1\t5\t5\t45\t145\t1145\t3145\t3145\t90\t91\tZQAAAA\tGKKAAA\tOOOOxx\n3942\t7027\t0\t2\t2\t2\t42\t942\t1942\t3942\t3942\t84\t85\tQVAAAA\tHKKAAA\tVVVVxx\n8583\t7028\t1\t3\t3\t3\t83\t583\t583\t3583\t8583\t166\t167\tDSAAAA\tIKKAAA\tAAAAxx\n8073\t7029\t1\t1\t3\t13\t73\t73\t73\t3073\t8073\t146\t147\tNYAAAA\tJKKAAA\tHHHHxx\n4940\t7030\t0\t0\t0\t0\t40\t940\t940\t4940\t4940\t80\t81\tAIAAAA\tKKKAAA\tOOOOxx\n9573\t7031\t1\t1\t3\t13\t73\t573\t1573\t4573\t9573\t146\t147\tFEAAAA\tLKKAAA\tVVVVxx\n5325\t7032\t1\t1\t5\t5\t25\t325\t1325\t325\t5325\t50\t51\tVWAAAA\tMKKAAA\tAAAAxx\n1833\t7033\t1\t1\t3\t13\t33\t833\t1833\t1833\t1833\t66\t67\tNSAAAA\tNKKAAA\tHHHHxx\n1337\t7034\t1\t1\t7\t17\t37\t337\t1337\t1337\t1337\t74\t75\tLZAAAA\tOKKAAA\tOOOOxx\n9749\t7035\t1\t1\t9\t9\t49\t749\t1749\t4749\t9749\t98\t99\tZKAAAA\tPKKAAA\tVVVVxx\n7505\t7036\t1\t1\t5\t5\t5\t505\t1505\t2505\t7505\t10\t11\tRCAAAA\tQKKAAA\tAAAAxx\n9731\t7037\t1\t3\t1\t11\t31\t731\t1731\t4731\t9731\t62\t63\tHKAAAA\tRKKAAA\tHHHHxx\n4098\t7038\t0\t2\t8\t18\t98\t98\t98\t4098\t4098\t196\t197\tQBAAAA\tSKKAAA\tOOOOxx\n1418\t7039\t0\t2\t8\t18\t18\t418\t1418\t1418\t1418\t36\t37\tOCAAAA\tTKKAAA\tVVVVxx\n63\t7040\t1\t3\t3\t3\t63\t63\t63\t63\t63\t126\t127\tLCAAAA\tUKKAAA\tAAAAxx\n9889\t7041\t1\t1\t9\t9\t89\t889\t1889\t4889\t9889\t178\t179\tJQAAAA\tVKKAAA\tHHHHxx\n2871\t7042\t1\t3\t1\t11\t71\t871\t871\t2871\t2871\t142\t143\tLGAAAA\tWKKAAA\tOOOOxx\n1003\t7043\t1\t3\t3\t3\t3\t3\t1003\t1003\t1003\t6\t7\tPMAAAA\tXKKAAA\tVVVVxx\n8796\t7044\t0\t0\t6\t16\t96\t796\t796\t3796\t8796\t192\t193\tIAAAAA\tYKKAAA\tAAAAxx\n22\t7045\t0\t2\t2\t2\t22\t22\t22\t22\t22\t44\t45\tWAAAAA\tZKKAAA\tHHHHxx\n8244\t7046\t0\t0\t4\t4\t44\t244\t244\t3244\t8244\t88\t89\tCFAAAA\tALKAAA\tOOOOxx\n2282\t7047\t0\t2\t2\t2\t82\t282\t282\t2282\t2282\t164\t165\tUJAAAA\tBLKAAA\tVVVVxx\n3487\t7048\t1\t3\t7\t7\t87\t487\t1487\t3487\t3487\t174\t175\tDEAAAA\tCLKAAA\tAAAAxx\n8633\t7049\t1\t1\t3\t13\t33\t633\t633\t3633\t8633\t66\t67\tBUAAAA\tDLKAAA\tHHHHxx\n6418\t7050\t0\t2\t8\t18\t18\t418\t418\t1418\t6418\t36\t37\tWMAAAA\tELKAAA\tOOOOxx\n4682\t7051\t0\t2\t2\t2\t82\t682\t682\t4682\t4682\t164\t165\tCYAAAA\tFLKAAA\tVVVVxx\n4103\t7052\t1\t3\t3\t3\t3\t103\t103\t4103\t4103\t6\t7\tVBAAAA\tGLKAAA\tAAAAxx\n6256\t7053\t0\t0\t6\t16\t56\t256\t256\t1256\t6256\t112\t113\tQGAAAA\tHLKAAA\tHHHHxx\n4040\t7054\t0\t0\t0\t0\t40\t40\t40\t4040\t4040\t80\t81\tKZAAAA\tILKAAA\tOOOOxx\n9342\t7055\t0\t2\t2\t2\t42\t342\t1342\t4342\t9342\t84\t85\tIVAAAA\tJLKAAA\tVVVVxx\n9969\t7056\t1\t1\t9\t9\t69\t969\t1969\t4969\t9969\t138\t139\tLTAAAA\tKLKAAA\tAAAAxx\n223\t7057\t1\t3\t3\t3\t23\t223\t223\t223\t223\t46\t47\tPIAAAA\tLLKAAA\tHHHHxx\n4593\t7058\t1\t1\t3\t13\t93\t593\t593\t4593\t4593\t186\t187\tRUAAAA\tMLKAAA\tOOOOxx\n44\t7059\t0\t0\t4\t4\t44\t44\t44\t44\t44\t88\t89\tSBAAAA\tNLKAAA\tVVVVxx\n3513\t7060\t1\t1\t3\t13\t13\t513\t1513\t3513\t3513\t26\t27\tDFAAAA\tOLKAAA\tAAAAxx\n5771\t7061\t1\t3\t1\t11\t71\t771\t1771\t771\t5771\t142\t143\tZNAAAA\tPLKAAA\tHHHHxx\n5083\t7062\t1\t3\t3\t3\t83\t83\t1083\t83\t5083\t166\t167\tNNAAAA\tQLKAAA\tOOOOxx\n3839\t7063\t1\t3\t9\t19\t39\t839\t1839\t3839\t3839\t78\t79\tRRAAAA\tRLKAAA\tVVVVxx\n2986\t7064\t0\t2\t6\t6\t86\t986\t986\t2986\t2986\t172\t173\tWKAAAA\tSLKAAA\tAAAAxx\n2200\t7065\t0\t0\t0\t0\t0\t200\t200\t2200\t2200\t0\t1\tQGAAAA\tTLKAAA\tHHHHxx\n197\t7066\t1\t1\t7\t17\t97\t197\t197\t197\t197\t194\t195\tPHAAAA\tULKAAA\tOOOOxx\n7455\t7067\t1\t3\t5\t15\t55\t455\t1455\t2455\t7455\t110\t111\tTAAAAA\tVLKAAA\tVVVVxx\n1379\t7068\t1\t3\t9\t19\t79\t379\t1379\t1379\t1379\t158\t159\tBBAAAA\tWLKAAA\tAAAAxx\n4356\t7069\t0\t0\t6\t16\t56\t356\t356\t4356\t4356\t112\t113\tOLAAAA\tXLKAAA\tHHHHxx\n6888\t7070\t0\t0\t8\t8\t88\t888\t888\t1888\t6888\t176\t177\tYEAAAA\tYLKAAA\tOOOOxx\n9139\t7071\t1\t3\t9\t19\t39\t139\t1139\t4139\t9139\t78\t79\tNNAAAA\tZLKAAA\tVVVVxx\n7682\t7072\t0\t2\t2\t2\t82\t682\t1682\t2682\t7682\t164\t165\tMJAAAA\tAMKAAA\tAAAAxx\n4873\t7073\t1\t1\t3\t13\t73\t873\t873\t4873\t4873\t146\t147\tLFAAAA\tBMKAAA\tHHHHxx\n783\t7074\t1\t3\t3\t3\t83\t783\t783\t783\t783\t166\t167\tDEAAAA\tCMKAAA\tOOOOxx\n6071\t7075\t1\t3\t1\t11\t71\t71\t71\t1071\t6071\t142\t143\tNZAAAA\tDMKAAA\tVVVVxx\n5160\t7076\t0\t0\t0\t0\t60\t160\t1160\t160\t5160\t120\t121\tMQAAAA\tEMKAAA\tAAAAxx\n2291\t7077\t1\t3\t1\t11\t91\t291\t291\t2291\t2291\t182\t183\tDKAAAA\tFMKAAA\tHHHHxx\n187\t7078\t1\t3\t7\t7\t87\t187\t187\t187\t187\t174\t175\tFHAAAA\tGMKAAA\tOOOOxx\n7786\t7079\t0\t2\t6\t6\t86\t786\t1786\t2786\t7786\t172\t173\tMNAAAA\tHMKAAA\tVVVVxx\n3432\t7080\t0\t0\t2\t12\t32\t432\t1432\t3432\t3432\t64\t65\tACAAAA\tIMKAAA\tAAAAxx\n5450\t7081\t0\t2\t0\t10\t50\t450\t1450\t450\t5450\t100\t101\tQBAAAA\tJMKAAA\tHHHHxx\n2699\t7082\t1\t3\t9\t19\t99\t699\t699\t2699\t2699\t198\t199\tVZAAAA\tKMKAAA\tOOOOxx\n692\t7083\t0\t0\t2\t12\t92\t692\t692\t692\t692\t184\t185\tQAAAAA\tLMKAAA\tVVVVxx\n6081\t7084\t1\t1\t1\t1\t81\t81\t81\t1081\t6081\t162\t163\tXZAAAA\tMMKAAA\tAAAAxx\n4829\t7085\t1\t1\t9\t9\t29\t829\t829\t4829\t4829\t58\t59\tTDAAAA\tNMKAAA\tHHHHxx\n238\t7086\t0\t2\t8\t18\t38\t238\t238\t238\t238\t76\t77\tEJAAAA\tOMKAAA\tOOOOxx\n9100\t7087\t0\t0\t0\t0\t0\t100\t1100\t4100\t9100\t0\t1\tAMAAAA\tPMKAAA\tVVVVxx\n1968\t7088\t0\t0\t8\t8\t68\t968\t1968\t1968\t1968\t136\t137\tSXAAAA\tQMKAAA\tAAAAxx\n1872\t7089\t0\t0\t2\t12\t72\t872\t1872\t1872\t1872\t144\t145\tAUAAAA\tRMKAAA\tHHHHxx\n7051\t7090\t1\t3\t1\t11\t51\t51\t1051\t2051\t7051\t102\t103\tFLAAAA\tSMKAAA\tOOOOxx\n2743\t7091\t1\t3\t3\t3\t43\t743\t743\t2743\t2743\t86\t87\tNBAAAA\tTMKAAA\tVVVVxx\n1237\t7092\t1\t1\t7\t17\t37\t237\t1237\t1237\t1237\t74\t75\tPVAAAA\tUMKAAA\tAAAAxx\n3052\t7093\t0\t0\t2\t12\t52\t52\t1052\t3052\t3052\t104\t105\tKNAAAA\tVMKAAA\tHHHHxx\n8021\t7094\t1\t1\t1\t1\t21\t21\t21\t3021\t8021\t42\t43\tNWAAAA\tWMKAAA\tOOOOxx\n657\t7095\t1\t1\t7\t17\t57\t657\t657\t657\t657\t114\t115\tHZAAAA\tXMKAAA\tVVVVxx\n2236\t7096\t0\t0\t6\t16\t36\t236\t236\t2236\t2236\t72\t73\tAIAAAA\tYMKAAA\tAAAAxx\n7011\t7097\t1\t3\t1\t11\t11\t11\t1011\t2011\t7011\t22\t23\tRJAAAA\tZMKAAA\tHHHHxx\n4067\t7098\t1\t3\t7\t7\t67\t67\t67\t4067\t4067\t134\t135\tLAAAAA\tANKAAA\tOOOOxx\n9449\t7099\t1\t1\t9\t9\t49\t449\t1449\t4449\t9449\t98\t99\tLZAAAA\tBNKAAA\tVVVVxx\n7428\t7100\t0\t0\t8\t8\t28\t428\t1428\t2428\t7428\t56\t57\tSZAAAA\tCNKAAA\tAAAAxx\n1272\t7101\t0\t0\t2\t12\t72\t272\t1272\t1272\t1272\t144\t145\tYWAAAA\tDNKAAA\tHHHHxx\n6897\t7102\t1\t1\t7\t17\t97\t897\t897\t1897\t6897\t194\t195\tHFAAAA\tENKAAA\tOOOOxx\n5839\t7103\t1\t3\t9\t19\t39\t839\t1839\t839\t5839\t78\t79\tPQAAAA\tFNKAAA\tVVVVxx\n6835\t7104\t1\t3\t5\t15\t35\t835\t835\t1835\t6835\t70\t71\tXCAAAA\tGNKAAA\tAAAAxx\n1887\t7105\t1\t3\t7\t7\t87\t887\t1887\t1887\t1887\t174\t175\tPUAAAA\tHNKAAA\tHHHHxx\n1551\t7106\t1\t3\t1\t11\t51\t551\t1551\t1551\t1551\t102\t103\tRHAAAA\tINKAAA\tOOOOxx\n4667\t7107\t1\t3\t7\t7\t67\t667\t667\t4667\t4667\t134\t135\tNXAAAA\tJNKAAA\tVVVVxx\n9603\t7108\t1\t3\t3\t3\t3\t603\t1603\t4603\t9603\t6\t7\tJFAAAA\tKNKAAA\tAAAAxx\n4332\t7109\t0\t0\t2\t12\t32\t332\t332\t4332\t4332\t64\t65\tQKAAAA\tLNKAAA\tHHHHxx\n5681\t7110\t1\t1\t1\t1\t81\t681\t1681\t681\t5681\t162\t163\tNKAAAA\tMNKAAA\tOOOOxx\n8062\t7111\t0\t2\t2\t2\t62\t62\t62\t3062\t8062\t124\t125\tCYAAAA\tNNKAAA\tVVVVxx\n2302\t7112\t0\t2\t2\t2\t2\t302\t302\t2302\t2302\t4\t5\tOKAAAA\tONKAAA\tAAAAxx\n2825\t7113\t1\t1\t5\t5\t25\t825\t825\t2825\t2825\t50\t51\tREAAAA\tPNKAAA\tHHHHxx\n4527\t7114\t1\t3\t7\t7\t27\t527\t527\t4527\t4527\t54\t55\tDSAAAA\tQNKAAA\tOOOOxx\n4230\t7115\t0\t2\t0\t10\t30\t230\t230\t4230\t4230\t60\t61\tSGAAAA\tRNKAAA\tVVVVxx\n3053\t7116\t1\t1\t3\t13\t53\t53\t1053\t3053\t3053\t106\t107\tLNAAAA\tSNKAAA\tAAAAxx\n983\t7117\t1\t3\t3\t3\t83\t983\t983\t983\t983\t166\t167\tVLAAAA\tTNKAAA\tHHHHxx\n9458\t7118\t0\t2\t8\t18\t58\t458\t1458\t4458\t9458\t116\t117\tUZAAAA\tUNKAAA\tOOOOxx\n4128\t7119\t0\t0\t8\t8\t28\t128\t128\t4128\t4128\t56\t57\tUCAAAA\tVNKAAA\tVVVVxx\n425\t7120\t1\t1\t5\t5\t25\t425\t425\t425\t425\t50\t51\tJQAAAA\tWNKAAA\tAAAAxx\n3911\t7121\t1\t3\t1\t11\t11\t911\t1911\t3911\t3911\t22\t23\tLUAAAA\tXNKAAA\tHHHHxx\n6607\t7122\t1\t3\t7\t7\t7\t607\t607\t1607\t6607\t14\t15\tDUAAAA\tYNKAAA\tOOOOxx\n5431\t7123\t1\t3\t1\t11\t31\t431\t1431\t431\t5431\t62\t63\tXAAAAA\tZNKAAA\tVVVVxx\n6330\t7124\t0\t2\t0\t10\t30\t330\t330\t1330\t6330\t60\t61\tMJAAAA\tAOKAAA\tAAAAxx\n3592\t7125\t0\t0\t2\t12\t92\t592\t1592\t3592\t3592\t184\t185\tEIAAAA\tBOKAAA\tHHHHxx\n154\t7126\t0\t2\t4\t14\t54\t154\t154\t154\t154\t108\t109\tYFAAAA\tCOKAAA\tOOOOxx\n9879\t7127\t1\t3\t9\t19\t79\t879\t1879\t4879\t9879\t158\t159\tZPAAAA\tDOKAAA\tVVVVxx\n3202\t7128\t0\t2\t2\t2\t2\t202\t1202\t3202\t3202\t4\t5\tETAAAA\tEOKAAA\tAAAAxx\n3056\t7129\t0\t0\t6\t16\t56\t56\t1056\t3056\t3056\t112\t113\tONAAAA\tFOKAAA\tHHHHxx\n9890\t7130\t0\t2\t0\t10\t90\t890\t1890\t4890\t9890\t180\t181\tKQAAAA\tGOKAAA\tOOOOxx\n5840\t7131\t0\t0\t0\t0\t40\t840\t1840\t840\t5840\t80\t81\tQQAAAA\tHOKAAA\tVVVVxx\n9804\t7132\t0\t0\t4\t4\t4\t804\t1804\t4804\t9804\t8\t9\tCNAAAA\tIOKAAA\tAAAAxx\n681\t7133\t1\t1\t1\t1\t81\t681\t681\t681\t681\t162\t163\tFAAAAA\tJOKAAA\tHHHHxx\n3443\t7134\t1\t3\t3\t3\t43\t443\t1443\t3443\t3443\t86\t87\tLCAAAA\tKOKAAA\tOOOOxx\n8088\t7135\t0\t0\t8\t8\t88\t88\t88\t3088\t8088\t176\t177\tCZAAAA\tLOKAAA\tVVVVxx\n9447\t7136\t1\t3\t7\t7\t47\t447\t1447\t4447\t9447\t94\t95\tJZAAAA\tMOKAAA\tAAAAxx\n1490\t7137\t0\t2\t0\t10\t90\t490\t1490\t1490\t1490\t180\t181\tIFAAAA\tNOKAAA\tHHHHxx\n3684\t7138\t0\t0\t4\t4\t84\t684\t1684\t3684\t3684\t168\t169\tSLAAAA\tOOKAAA\tOOOOxx\n3113\t7139\t1\t1\t3\t13\t13\t113\t1113\t3113\t3113\t26\t27\tTPAAAA\tPOKAAA\tVVVVxx\n9004\t7140\t0\t0\t4\t4\t4\t4\t1004\t4004\t9004\t8\t9\tIIAAAA\tQOKAAA\tAAAAxx\n7147\t7141\t1\t3\t7\t7\t47\t147\t1147\t2147\t7147\t94\t95\tXOAAAA\tROKAAA\tHHHHxx\n7571\t7142\t1\t3\t1\t11\t71\t571\t1571\t2571\t7571\t142\t143\tFFAAAA\tSOKAAA\tOOOOxx\n5545\t7143\t1\t1\t5\t5\t45\t545\t1545\t545\t5545\t90\t91\tHFAAAA\tTOKAAA\tVVVVxx\n4558\t7144\t0\t2\t8\t18\t58\t558\t558\t4558\t4558\t116\t117\tITAAAA\tUOKAAA\tAAAAxx\n6206\t7145\t0\t2\t6\t6\t6\t206\t206\t1206\t6206\t12\t13\tSEAAAA\tVOKAAA\tHHHHxx\n5695\t7146\t1\t3\t5\t15\t95\t695\t1695\t695\t5695\t190\t191\tBLAAAA\tWOKAAA\tOOOOxx\n9600\t7147\t0\t0\t0\t0\t0\t600\t1600\t4600\t9600\t0\t1\tGFAAAA\tXOKAAA\tVVVVxx\n5432\t7148\t0\t0\t2\t12\t32\t432\t1432\t432\t5432\t64\t65\tYAAAAA\tYOKAAA\tAAAAxx\n9299\t7149\t1\t3\t9\t19\t99\t299\t1299\t4299\t9299\t198\t199\tRTAAAA\tZOKAAA\tHHHHxx\n2386\t7150\t0\t2\t6\t6\t86\t386\t386\t2386\t2386\t172\t173\tUNAAAA\tAPKAAA\tOOOOxx\n2046\t7151\t0\t2\t6\t6\t46\t46\t46\t2046\t2046\t92\t93\tSAAAAA\tBPKAAA\tVVVVxx\n3293\t7152\t1\t1\t3\t13\t93\t293\t1293\t3293\t3293\t186\t187\tRWAAAA\tCPKAAA\tAAAAxx\n3046\t7153\t0\t2\t6\t6\t46\t46\t1046\t3046\t3046\t92\t93\tENAAAA\tDPKAAA\tHHHHxx\n214\t7154\t0\t2\t4\t14\t14\t214\t214\t214\t214\t28\t29\tGIAAAA\tEPKAAA\tOOOOxx\n7893\t7155\t1\t1\t3\t13\t93\t893\t1893\t2893\t7893\t186\t187\tPRAAAA\tFPKAAA\tVVVVxx\n891\t7156\t1\t3\t1\t11\t91\t891\t891\t891\t891\t182\t183\tHIAAAA\tGPKAAA\tAAAAxx\n6499\t7157\t1\t3\t9\t19\t99\t499\t499\t1499\t6499\t198\t199\tZPAAAA\tHPKAAA\tHHHHxx\n5003\t7158\t1\t3\t3\t3\t3\t3\t1003\t3\t5003\t6\t7\tLKAAAA\tIPKAAA\tOOOOxx\n6487\t7159\t1\t3\t7\t7\t87\t487\t487\t1487\t6487\t174\t175\tNPAAAA\tJPKAAA\tVVVVxx\n9403\t7160\t1\t3\t3\t3\t3\t403\t1403\t4403\t9403\t6\t7\tRXAAAA\tKPKAAA\tAAAAxx\n945\t7161\t1\t1\t5\t5\t45\t945\t945\t945\t945\t90\t91\tJKAAAA\tLPKAAA\tHHHHxx\n6713\t7162\t1\t1\t3\t13\t13\t713\t713\t1713\t6713\t26\t27\tFYAAAA\tMPKAAA\tOOOOxx\n9928\t7163\t0\t0\t8\t8\t28\t928\t1928\t4928\t9928\t56\t57\tWRAAAA\tNPKAAA\tVVVVxx\n8585\t7164\t1\t1\t5\t5\t85\t585\t585\t3585\t8585\t170\t171\tFSAAAA\tOPKAAA\tAAAAxx\n4004\t7165\t0\t0\t4\t4\t4\t4\t4\t4004\t4004\t8\t9\tAYAAAA\tPPKAAA\tHHHHxx\n2528\t7166\t0\t0\t8\t8\t28\t528\t528\t2528\t2528\t56\t57\tGTAAAA\tQPKAAA\tOOOOxx\n3350\t7167\t0\t2\t0\t10\t50\t350\t1350\t3350\t3350\t100\t101\tWYAAAA\tRPKAAA\tVVVVxx\n2160\t7168\t0\t0\t0\t0\t60\t160\t160\t2160\t2160\t120\t121\tCFAAAA\tSPKAAA\tAAAAxx\n1521\t7169\t1\t1\t1\t1\t21\t521\t1521\t1521\t1521\t42\t43\tNGAAAA\tTPKAAA\tHHHHxx\n5660\t7170\t0\t0\t0\t0\t60\t660\t1660\t660\t5660\t120\t121\tSJAAAA\tUPKAAA\tOOOOxx\n5755\t7171\t1\t3\t5\t15\t55\t755\t1755\t755\t5755\t110\t111\tJNAAAA\tVPKAAA\tVVVVxx\n7614\t7172\t0\t2\t4\t14\t14\t614\t1614\t2614\t7614\t28\t29\tWGAAAA\tWPKAAA\tAAAAxx\n3121\t7173\t1\t1\t1\t1\t21\t121\t1121\t3121\t3121\t42\t43\tBQAAAA\tXPKAAA\tHHHHxx\n2735\t7174\t1\t3\t5\t15\t35\t735\t735\t2735\t2735\t70\t71\tFBAAAA\tYPKAAA\tOOOOxx\n7506\t7175\t0\t2\t6\t6\t6\t506\t1506\t2506\t7506\t12\t13\tSCAAAA\tZPKAAA\tVVVVxx\n2693\t7176\t1\t1\t3\t13\t93\t693\t693\t2693\t2693\t186\t187\tPZAAAA\tAQKAAA\tAAAAxx\n2892\t7177\t0\t0\t2\t12\t92\t892\t892\t2892\t2892\t184\t185\tGHAAAA\tBQKAAA\tHHHHxx\n3310\t7178\t0\t2\t0\t10\t10\t310\t1310\t3310\t3310\t20\t21\tIXAAAA\tCQKAAA\tOOOOxx\n3484\t7179\t0\t0\t4\t4\t84\t484\t1484\t3484\t3484\t168\t169\tAEAAAA\tDQKAAA\tVVVVxx\n9733\t7180\t1\t1\t3\t13\t33\t733\t1733\t4733\t9733\t66\t67\tJKAAAA\tEQKAAA\tAAAAxx\n29\t7181\t1\t1\t9\t9\t29\t29\t29\t29\t29\t58\t59\tDBAAAA\tFQKAAA\tHHHHxx\n9013\t7182\t1\t1\t3\t13\t13\t13\t1013\t4013\t9013\t26\t27\tRIAAAA\tGQKAAA\tOOOOxx\n3847\t7183\t1\t3\t7\t7\t47\t847\t1847\t3847\t3847\t94\t95\tZRAAAA\tHQKAAA\tVVVVxx\n6724\t7184\t0\t0\t4\t4\t24\t724\t724\t1724\t6724\t48\t49\tQYAAAA\tIQKAAA\tAAAAxx\n2559\t7185\t1\t3\t9\t19\t59\t559\t559\t2559\t2559\t118\t119\tLUAAAA\tJQKAAA\tHHHHxx\n5326\t7186\t0\t2\t6\t6\t26\t326\t1326\t326\t5326\t52\t53\tWWAAAA\tKQKAAA\tOOOOxx\n4802\t7187\t0\t2\t2\t2\t2\t802\t802\t4802\t4802\t4\t5\tSCAAAA\tLQKAAA\tVVVVxx\n131\t7188\t1\t3\t1\t11\t31\t131\t131\t131\t131\t62\t63\tBFAAAA\tMQKAAA\tAAAAxx\n1634\t7189\t0\t2\t4\t14\t34\t634\t1634\t1634\t1634\t68\t69\tWKAAAA\tNQKAAA\tHHHHxx\n919\t7190\t1\t3\t9\t19\t19\t919\t919\t919\t919\t38\t39\tJJAAAA\tOQKAAA\tOOOOxx\n9575\t7191\t1\t3\t5\t15\t75\t575\t1575\t4575\t9575\t150\t151\tHEAAAA\tPQKAAA\tVVVVxx\n1256\t7192\t0\t0\t6\t16\t56\t256\t1256\t1256\t1256\t112\t113\tIWAAAA\tQQKAAA\tAAAAxx\n9428\t7193\t0\t0\t8\t8\t28\t428\t1428\t4428\t9428\t56\t57\tQYAAAA\tRQKAAA\tHHHHxx\n5121\t7194\t1\t1\t1\t1\t21\t121\t1121\t121\t5121\t42\t43\tZOAAAA\tSQKAAA\tOOOOxx\n6584\t7195\t0\t0\t4\t4\t84\t584\t584\t1584\t6584\t168\t169\tGTAAAA\tTQKAAA\tVVVVxx\n7193\t7196\t1\t1\t3\t13\t93\t193\t1193\t2193\t7193\t186\t187\tRQAAAA\tUQKAAA\tAAAAxx\n4047\t7197\t1\t3\t7\t7\t47\t47\t47\t4047\t4047\t94\t95\tRZAAAA\tVQKAAA\tHHHHxx\n104\t7198\t0\t0\t4\t4\t4\t104\t104\t104\t104\t8\t9\tAEAAAA\tWQKAAA\tOOOOxx\n1527\t7199\t1\t3\t7\t7\t27\t527\t1527\t1527\t1527\t54\t55\tTGAAAA\tXQKAAA\tVVVVxx\n3460\t7200\t0\t0\t0\t0\t60\t460\t1460\t3460\t3460\t120\t121\tCDAAAA\tYQKAAA\tAAAAxx\n8526\t7201\t0\t2\t6\t6\t26\t526\t526\t3526\t8526\t52\t53\tYPAAAA\tZQKAAA\tHHHHxx\n8959\t7202\t1\t3\t9\t19\t59\t959\t959\t3959\t8959\t118\t119\tPGAAAA\tARKAAA\tOOOOxx\n3633\t7203\t1\t1\t3\t13\t33\t633\t1633\t3633\t3633\t66\t67\tTJAAAA\tBRKAAA\tVVVVxx\n1799\t7204\t1\t3\t9\t19\t99\t799\t1799\t1799\t1799\t198\t199\tFRAAAA\tCRKAAA\tAAAAxx\n461\t7205\t1\t1\t1\t1\t61\t461\t461\t461\t461\t122\t123\tTRAAAA\tDRKAAA\tHHHHxx\n718\t7206\t0\t2\t8\t18\t18\t718\t718\t718\t718\t36\t37\tQBAAAA\tERKAAA\tOOOOxx\n3219\t7207\t1\t3\t9\t19\t19\t219\t1219\t3219\t3219\t38\t39\tVTAAAA\tFRKAAA\tVVVVxx\n3494\t7208\t0\t2\t4\t14\t94\t494\t1494\t3494\t3494\t188\t189\tKEAAAA\tGRKAAA\tAAAAxx\n9402\t7209\t0\t2\t2\t2\t2\t402\t1402\t4402\t9402\t4\t5\tQXAAAA\tHRKAAA\tHHHHxx\n7983\t7210\t1\t3\t3\t3\t83\t983\t1983\t2983\t7983\t166\t167\tBVAAAA\tIRKAAA\tOOOOxx\n7919\t7211\t1\t3\t9\t19\t19\t919\t1919\t2919\t7919\t38\t39\tPSAAAA\tJRKAAA\tVVVVxx\n8036\t7212\t0\t0\t6\t16\t36\t36\t36\t3036\t8036\t72\t73\tCXAAAA\tKRKAAA\tAAAAxx\n5164\t7213\t0\t0\t4\t4\t64\t164\t1164\t164\t5164\t128\t129\tQQAAAA\tLRKAAA\tHHHHxx\n4160\t7214\t0\t0\t0\t0\t60\t160\t160\t4160\t4160\t120\t121\tAEAAAA\tMRKAAA\tOOOOxx\n5370\t7215\t0\t2\t0\t10\t70\t370\t1370\t370\t5370\t140\t141\tOYAAAA\tNRKAAA\tVVVVxx\n5347\t7216\t1\t3\t7\t7\t47\t347\t1347\t347\t5347\t94\t95\tRXAAAA\tORKAAA\tAAAAxx\n7109\t7217\t1\t1\t9\t9\t9\t109\t1109\t2109\t7109\t18\t19\tLNAAAA\tPRKAAA\tHHHHxx\n4826\t7218\t0\t2\t6\t6\t26\t826\t826\t4826\t4826\t52\t53\tQDAAAA\tQRKAAA\tOOOOxx\n1338\t7219\t0\t2\t8\t18\t38\t338\t1338\t1338\t1338\t76\t77\tMZAAAA\tRRKAAA\tVVVVxx\n2711\t7220\t1\t3\t1\t11\t11\t711\t711\t2711\t2711\t22\t23\tHAAAAA\tSRKAAA\tAAAAxx\n6299\t7221\t1\t3\t9\t19\t99\t299\t299\t1299\t6299\t198\t199\tHIAAAA\tTRKAAA\tHHHHxx\n1616\t7222\t0\t0\t6\t16\t16\t616\t1616\t1616\t1616\t32\t33\tEKAAAA\tURKAAA\tOOOOxx\n7519\t7223\t1\t3\t9\t19\t19\t519\t1519\t2519\t7519\t38\t39\tFDAAAA\tVRKAAA\tVVVVxx\n1262\t7224\t0\t2\t2\t2\t62\t262\t1262\t1262\t1262\t124\t125\tOWAAAA\tWRKAAA\tAAAAxx\n7228\t7225\t0\t0\t8\t8\t28\t228\t1228\t2228\t7228\t56\t57\tASAAAA\tXRKAAA\tHHHHxx\n7892\t7226\t0\t0\t2\t12\t92\t892\t1892\t2892\t7892\t184\t185\tORAAAA\tYRKAAA\tOOOOxx\n7929\t7227\t1\t1\t9\t9\t29\t929\t1929\t2929\t7929\t58\t59\tZSAAAA\tZRKAAA\tVVVVxx\n7705\t7228\t1\t1\t5\t5\t5\t705\t1705\t2705\t7705\t10\t11\tJKAAAA\tASKAAA\tAAAAxx\n3111\t7229\t1\t3\t1\t11\t11\t111\t1111\t3111\t3111\t22\t23\tRPAAAA\tBSKAAA\tHHHHxx\n3066\t7230\t0\t2\t6\t6\t66\t66\t1066\t3066\t3066\t132\t133\tYNAAAA\tCSKAAA\tOOOOxx\n9559\t7231\t1\t3\t9\t19\t59\t559\t1559\t4559\t9559\t118\t119\tRDAAAA\tDSKAAA\tVVVVxx\n3787\t7232\t1\t3\t7\t7\t87\t787\t1787\t3787\t3787\t174\t175\tRPAAAA\tESKAAA\tAAAAxx\n8710\t7233\t0\t2\t0\t10\t10\t710\t710\t3710\t8710\t20\t21\tAXAAAA\tFSKAAA\tHHHHxx\n4870\t7234\t0\t2\t0\t10\t70\t870\t870\t4870\t4870\t140\t141\tIFAAAA\tGSKAAA\tOOOOxx\n1883\t7235\t1\t3\t3\t3\t83\t883\t1883\t1883\t1883\t166\t167\tLUAAAA\tHSKAAA\tVVVVxx\n9689\t7236\t1\t1\t9\t9\t89\t689\t1689\t4689\t9689\t178\t179\tRIAAAA\tISKAAA\tAAAAxx\n9491\t7237\t1\t3\t1\t11\t91\t491\t1491\t4491\t9491\t182\t183\tBBAAAA\tJSKAAA\tHHHHxx\n2035\t7238\t1\t3\t5\t15\t35\t35\t35\t2035\t2035\t70\t71\tHAAAAA\tKSKAAA\tOOOOxx\n655\t7239\t1\t3\t5\t15\t55\t655\t655\t655\t655\t110\t111\tFZAAAA\tLSKAAA\tVVVVxx\n6305\t7240\t1\t1\t5\t5\t5\t305\t305\t1305\t6305\t10\t11\tNIAAAA\tMSKAAA\tAAAAxx\n9423\t7241\t1\t3\t3\t3\t23\t423\t1423\t4423\t9423\t46\t47\tLYAAAA\tNSKAAA\tHHHHxx\n283\t7242\t1\t3\t3\t3\t83\t283\t283\t283\t283\t166\t167\tXKAAAA\tOSKAAA\tOOOOxx\n2607\t7243\t1\t3\t7\t7\t7\t607\t607\t2607\t2607\t14\t15\tHWAAAA\tPSKAAA\tVVVVxx\n7740\t7244\t0\t0\t0\t0\t40\t740\t1740\t2740\t7740\t80\t81\tSLAAAA\tQSKAAA\tAAAAxx\n6956\t7245\t0\t0\t6\t16\t56\t956\t956\t1956\t6956\t112\t113\tOHAAAA\tRSKAAA\tHHHHxx\n884\t7246\t0\t0\t4\t4\t84\t884\t884\t884\t884\t168\t169\tAIAAAA\tSSKAAA\tOOOOxx\n5730\t7247\t0\t2\t0\t10\t30\t730\t1730\t730\t5730\t60\t61\tKMAAAA\tTSKAAA\tVVVVxx\n3438\t7248\t0\t2\t8\t18\t38\t438\t1438\t3438\t3438\t76\t77\tGCAAAA\tUSKAAA\tAAAAxx\n3250\t7249\t0\t2\t0\t10\t50\t250\t1250\t3250\t3250\t100\t101\tAVAAAA\tVSKAAA\tHHHHxx\n5470\t7250\t0\t2\t0\t10\t70\t470\t1470\t470\t5470\t140\t141\tKCAAAA\tWSKAAA\tOOOOxx\n2037\t7251\t1\t1\t7\t17\t37\t37\t37\t2037\t2037\t74\t75\tJAAAAA\tXSKAAA\tVVVVxx\n6593\t7252\t1\t1\t3\t13\t93\t593\t593\t1593\t6593\t186\t187\tPTAAAA\tYSKAAA\tAAAAxx\n3893\t7253\t1\t1\t3\t13\t93\t893\t1893\t3893\t3893\t186\t187\tTTAAAA\tZSKAAA\tHHHHxx\n3200\t7254\t0\t0\t0\t0\t0\t200\t1200\t3200\t3200\t0\t1\tCTAAAA\tATKAAA\tOOOOxx\n7125\t7255\t1\t1\t5\t5\t25\t125\t1125\t2125\t7125\t50\t51\tBOAAAA\tBTKAAA\tVVVVxx\n2295\t7256\t1\t3\t5\t15\t95\t295\t295\t2295\t2295\t190\t191\tHKAAAA\tCTKAAA\tAAAAxx\n2056\t7257\t0\t0\t6\t16\t56\t56\t56\t2056\t2056\t112\t113\tCBAAAA\tDTKAAA\tHHHHxx\n2962\t7258\t0\t2\t2\t2\t62\t962\t962\t2962\t2962\t124\t125\tYJAAAA\tETKAAA\tOOOOxx\n993\t7259\t1\t1\t3\t13\t93\t993\t993\t993\t993\t186\t187\tFMAAAA\tFTKAAA\tVVVVxx\n9127\t7260\t1\t3\t7\t7\t27\t127\t1127\t4127\t9127\t54\t55\tBNAAAA\tGTKAAA\tAAAAxx\n2075\t7261\t1\t3\t5\t15\t75\t75\t75\t2075\t2075\t150\t151\tVBAAAA\tHTKAAA\tHHHHxx\n9338\t7262\t0\t2\t8\t18\t38\t338\t1338\t4338\t9338\t76\t77\tEVAAAA\tITKAAA\tOOOOxx\n8100\t7263\t0\t0\t0\t0\t0\t100\t100\t3100\t8100\t0\t1\tOZAAAA\tJTKAAA\tVVVVxx\n5047\t7264\t1\t3\t7\t7\t47\t47\t1047\t47\t5047\t94\t95\tDMAAAA\tKTKAAA\tAAAAxx\n7032\t7265\t0\t0\t2\t12\t32\t32\t1032\t2032\t7032\t64\t65\tMKAAAA\tLTKAAA\tHHHHxx\n6374\t7266\t0\t2\t4\t14\t74\t374\t374\t1374\t6374\t148\t149\tELAAAA\tMTKAAA\tOOOOxx\n4137\t7267\t1\t1\t7\t17\t37\t137\t137\t4137\t4137\t74\t75\tDDAAAA\tNTKAAA\tVVVVxx\n7132\t7268\t0\t0\t2\t12\t32\t132\t1132\t2132\t7132\t64\t65\tIOAAAA\tOTKAAA\tAAAAxx\n3064\t7269\t0\t0\t4\t4\t64\t64\t1064\t3064\t3064\t128\t129\tWNAAAA\tPTKAAA\tHHHHxx\n3621\t7270\t1\t1\t1\t1\t21\t621\t1621\t3621\t3621\t42\t43\tHJAAAA\tQTKAAA\tOOOOxx\n6199\t7271\t1\t3\t9\t19\t99\t199\t199\t1199\t6199\t198\t199\tLEAAAA\tRTKAAA\tVVVVxx\n4926\t7272\t0\t2\t6\t6\t26\t926\t926\t4926\t4926\t52\t53\tMHAAAA\tSTKAAA\tAAAAxx\n8035\t7273\t1\t3\t5\t15\t35\t35\t35\t3035\t8035\t70\t71\tBXAAAA\tTTKAAA\tHHHHxx\n2195\t7274\t1\t3\t5\t15\t95\t195\t195\t2195\t2195\t190\t191\tLGAAAA\tUTKAAA\tOOOOxx\n5366\t7275\t0\t2\t6\t6\t66\t366\t1366\t366\t5366\t132\t133\tKYAAAA\tVTKAAA\tVVVVxx\n3478\t7276\t0\t2\t8\t18\t78\t478\t1478\t3478\t3478\t156\t157\tUDAAAA\tWTKAAA\tAAAAxx\n1926\t7277\t0\t2\t6\t6\t26\t926\t1926\t1926\t1926\t52\t53\tCWAAAA\tXTKAAA\tHHHHxx\n7265\t7278\t1\t1\t5\t5\t65\t265\t1265\t2265\t7265\t130\t131\tLTAAAA\tYTKAAA\tOOOOxx\n7668\t7279\t0\t0\t8\t8\t68\t668\t1668\t2668\t7668\t136\t137\tYIAAAA\tZTKAAA\tVVVVxx\n3335\t7280\t1\t3\t5\t15\t35\t335\t1335\t3335\t3335\t70\t71\tHYAAAA\tAUKAAA\tAAAAxx\n7660\t7281\t0\t0\t0\t0\t60\t660\t1660\t2660\t7660\t120\t121\tQIAAAA\tBUKAAA\tHHHHxx\n9604\t7282\t0\t0\t4\t4\t4\t604\t1604\t4604\t9604\t8\t9\tKFAAAA\tCUKAAA\tOOOOxx\n7301\t7283\t1\t1\t1\t1\t1\t301\t1301\t2301\t7301\t2\t3\tVUAAAA\tDUKAAA\tVVVVxx\n4475\t7284\t1\t3\t5\t15\t75\t475\t475\t4475\t4475\t150\t151\tDQAAAA\tEUKAAA\tAAAAxx\n9954\t7285\t0\t2\t4\t14\t54\t954\t1954\t4954\t9954\t108\t109\tWSAAAA\tFUKAAA\tHHHHxx\n5723\t7286\t1\t3\t3\t3\t23\t723\t1723\t723\t5723\t46\t47\tDMAAAA\tGUKAAA\tOOOOxx\n2669\t7287\t1\t1\t9\t9\t69\t669\t669\t2669\t2669\t138\t139\tRYAAAA\tHUKAAA\tVVVVxx\n1685\t7288\t1\t1\t5\t5\t85\t685\t1685\t1685\t1685\t170\t171\tVMAAAA\tIUKAAA\tAAAAxx\n2233\t7289\t1\t1\t3\t13\t33\t233\t233\t2233\t2233\t66\t67\tXHAAAA\tJUKAAA\tHHHHxx\n8111\t7290\t1\t3\t1\t11\t11\t111\t111\t3111\t8111\t22\t23\tZZAAAA\tKUKAAA\tOOOOxx\n7685\t7291\t1\t1\t5\t5\t85\t685\t1685\t2685\t7685\t170\t171\tPJAAAA\tLUKAAA\tVVVVxx\n3773\t7292\t1\t1\t3\t13\t73\t773\t1773\t3773\t3773\t146\t147\tDPAAAA\tMUKAAA\tAAAAxx\n7172\t7293\t0\t0\t2\t12\t72\t172\t1172\t2172\t7172\t144\t145\tWPAAAA\tNUKAAA\tHHHHxx\n1740\t7294\t0\t0\t0\t0\t40\t740\t1740\t1740\t1740\t80\t81\tYOAAAA\tOUKAAA\tOOOOxx\n5416\t7295\t0\t0\t6\t16\t16\t416\t1416\t416\t5416\t32\t33\tIAAAAA\tPUKAAA\tVVVVxx\n1823\t7296\t1\t3\t3\t3\t23\t823\t1823\t1823\t1823\t46\t47\tDSAAAA\tQUKAAA\tAAAAxx\n1668\t7297\t0\t0\t8\t8\t68\t668\t1668\t1668\t1668\t136\t137\tEMAAAA\tRUKAAA\tHHHHxx\n1795\t7298\t1\t3\t5\t15\t95\t795\t1795\t1795\t1795\t190\t191\tBRAAAA\tSUKAAA\tOOOOxx\n8599\t7299\t1\t3\t9\t19\t99\t599\t599\t3599\t8599\t198\t199\tTSAAAA\tTUKAAA\tVVVVxx\n5542\t7300\t0\t2\t2\t2\t42\t542\t1542\t542\t5542\t84\t85\tEFAAAA\tUUKAAA\tAAAAxx\n5658\t7301\t0\t2\t8\t18\t58\t658\t1658\t658\t5658\t116\t117\tQJAAAA\tVUKAAA\tHHHHxx\n9824\t7302\t0\t0\t4\t4\t24\t824\t1824\t4824\t9824\t48\t49\tWNAAAA\tWUKAAA\tOOOOxx\n19\t7303\t1\t3\t9\t19\t19\t19\t19\t19\t19\t38\t39\tTAAAAA\tXUKAAA\tVVVVxx\n9344\t7304\t0\t0\t4\t4\t44\t344\t1344\t4344\t9344\t88\t89\tKVAAAA\tYUKAAA\tAAAAxx\n5900\t7305\t0\t0\t0\t0\t0\t900\t1900\t900\t5900\t0\t1\tYSAAAA\tZUKAAA\tHHHHxx\n7818\t7306\t0\t2\t8\t18\t18\t818\t1818\t2818\t7818\t36\t37\tSOAAAA\tAVKAAA\tOOOOxx\n8377\t7307\t1\t1\t7\t17\t77\t377\t377\t3377\t8377\t154\t155\tFKAAAA\tBVKAAA\tVVVVxx\n6886\t7308\t0\t2\t6\t6\t86\t886\t886\t1886\t6886\t172\t173\tWEAAAA\tCVKAAA\tAAAAxx\n3201\t7309\t1\t1\t1\t1\t1\t201\t1201\t3201\t3201\t2\t3\tDTAAAA\tDVKAAA\tHHHHxx\n87\t7310\t1\t3\t7\t7\t87\t87\t87\t87\t87\t174\t175\tJDAAAA\tEVKAAA\tOOOOxx\n1089\t7311\t1\t1\t9\t9\t89\t89\t1089\t1089\t1089\t178\t179\tXPAAAA\tFVKAAA\tVVVVxx\n3948\t7312\t0\t0\t8\t8\t48\t948\t1948\t3948\t3948\t96\t97\tWVAAAA\tGVKAAA\tAAAAxx\n6383\t7313\t1\t3\t3\t3\t83\t383\t383\t1383\t6383\t166\t167\tNLAAAA\tHVKAAA\tHHHHxx\n837\t7314\t1\t1\t7\t17\t37\t837\t837\t837\t837\t74\t75\tFGAAAA\tIVKAAA\tOOOOxx\n6285\t7315\t1\t1\t5\t5\t85\t285\t285\t1285\t6285\t170\t171\tTHAAAA\tJVKAAA\tVVVVxx\n78\t7316\t0\t2\t8\t18\t78\t78\t78\t78\t78\t156\t157\tADAAAA\tKVKAAA\tAAAAxx\n4389\t7317\t1\t1\t9\t9\t89\t389\t389\t4389\t4389\t178\t179\tVMAAAA\tLVKAAA\tHHHHxx\n4795\t7318\t1\t3\t5\t15\t95\t795\t795\t4795\t4795\t190\t191\tLCAAAA\tMVKAAA\tOOOOxx\n9369\t7319\t1\t1\t9\t9\t69\t369\t1369\t4369\t9369\t138\t139\tJWAAAA\tNVKAAA\tVVVVxx\n69\t7320\t1\t1\t9\t9\t69\t69\t69\t69\t69\t138\t139\tRCAAAA\tOVKAAA\tAAAAxx\n7689\t7321\t1\t1\t9\t9\t89\t689\t1689\t2689\t7689\t178\t179\tTJAAAA\tPVKAAA\tHHHHxx\n5642\t7322\t0\t2\t2\t2\t42\t642\t1642\t642\t5642\t84\t85\tAJAAAA\tQVKAAA\tOOOOxx\n2348\t7323\t0\t0\t8\t8\t48\t348\t348\t2348\t2348\t96\t97\tIMAAAA\tRVKAAA\tVVVVxx\n9308\t7324\t0\t0\t8\t8\t8\t308\t1308\t4308\t9308\t16\t17\tAUAAAA\tSVKAAA\tAAAAxx\n9093\t7325\t1\t1\t3\t13\t93\t93\t1093\t4093\t9093\t186\t187\tTLAAAA\tTVKAAA\tHHHHxx\n1199\t7326\t1\t3\t9\t19\t99\t199\t1199\t1199\t1199\t198\t199\tDUAAAA\tUVKAAA\tOOOOxx\n307\t7327\t1\t3\t7\t7\t7\t307\t307\t307\t307\t14\t15\tVLAAAA\tVVKAAA\tVVVVxx\n3814\t7328\t0\t2\t4\t14\t14\t814\t1814\t3814\t3814\t28\t29\tSQAAAA\tWVKAAA\tAAAAxx\n8817\t7329\t1\t1\t7\t17\t17\t817\t817\t3817\t8817\t34\t35\tDBAAAA\tXVKAAA\tHHHHxx\n2329\t7330\t1\t1\t9\t9\t29\t329\t329\t2329\t2329\t58\t59\tPLAAAA\tYVKAAA\tOOOOxx\n2932\t7331\t0\t0\t2\t12\t32\t932\t932\t2932\t2932\t64\t65\tUIAAAA\tZVKAAA\tVVVVxx\n1986\t7332\t0\t2\t6\t6\t86\t986\t1986\t1986\t1986\t172\t173\tKYAAAA\tAWKAAA\tAAAAxx\n5279\t7333\t1\t3\t9\t19\t79\t279\t1279\t279\t5279\t158\t159\tBVAAAA\tBWKAAA\tHHHHxx\n5357\t7334\t1\t1\t7\t17\t57\t357\t1357\t357\t5357\t114\t115\tBYAAAA\tCWKAAA\tOOOOxx\n6778\t7335\t0\t2\t8\t18\t78\t778\t778\t1778\t6778\t156\t157\tSAAAAA\tDWKAAA\tVVVVxx\n2773\t7336\t1\t1\t3\t13\t73\t773\t773\t2773\t2773\t146\t147\tRCAAAA\tEWKAAA\tAAAAxx\n244\t7337\t0\t0\t4\t4\t44\t244\t244\t244\t244\t88\t89\tKJAAAA\tFWKAAA\tHHHHxx\n6900\t7338\t0\t0\t0\t0\t0\t900\t900\t1900\t6900\t0\t1\tKFAAAA\tGWKAAA\tOOOOxx\n4739\t7339\t1\t3\t9\t19\t39\t739\t739\t4739\t4739\t78\t79\tHAAAAA\tHWKAAA\tVVVVxx\n3217\t7340\t1\t1\t7\t17\t17\t217\t1217\t3217\t3217\t34\t35\tTTAAAA\tIWKAAA\tAAAAxx\n7563\t7341\t1\t3\t3\t3\t63\t563\t1563\t2563\t7563\t126\t127\tXEAAAA\tJWKAAA\tHHHHxx\n1807\t7342\t1\t3\t7\t7\t7\t807\t1807\t1807\t1807\t14\t15\tNRAAAA\tKWKAAA\tOOOOxx\n4199\t7343\t1\t3\t9\t19\t99\t199\t199\t4199\t4199\t198\t199\tNFAAAA\tLWKAAA\tVVVVxx\n1077\t7344\t1\t1\t7\t17\t77\t77\t1077\t1077\t1077\t154\t155\tLPAAAA\tMWKAAA\tAAAAxx\n8348\t7345\t0\t0\t8\t8\t48\t348\t348\t3348\t8348\t96\t97\tCJAAAA\tNWKAAA\tHHHHxx\n841\t7346\t1\t1\t1\t1\t41\t841\t841\t841\t841\t82\t83\tJGAAAA\tOWKAAA\tOOOOxx\n8154\t7347\t0\t2\t4\t14\t54\t154\t154\t3154\t8154\t108\t109\tQBAAAA\tPWKAAA\tVVVVxx\n5261\t7348\t1\t1\t1\t1\t61\t261\t1261\t261\t5261\t122\t123\tJUAAAA\tQWKAAA\tAAAAxx\n1950\t7349\t0\t2\t0\t10\t50\t950\t1950\t1950\t1950\t100\t101\tAXAAAA\tRWKAAA\tHHHHxx\n8472\t7350\t0\t0\t2\t12\t72\t472\t472\t3472\t8472\t144\t145\tWNAAAA\tSWKAAA\tOOOOxx\n8745\t7351\t1\t1\t5\t5\t45\t745\t745\t3745\t8745\t90\t91\tJYAAAA\tTWKAAA\tVVVVxx\n8715\t7352\t1\t3\t5\t15\t15\t715\t715\t3715\t8715\t30\t31\tFXAAAA\tUWKAAA\tAAAAxx\n9708\t7353\t0\t0\t8\t8\t8\t708\t1708\t4708\t9708\t16\t17\tKJAAAA\tVWKAAA\tHHHHxx\n5860\t7354\t0\t0\t0\t0\t60\t860\t1860\t860\t5860\t120\t121\tKRAAAA\tWWKAAA\tOOOOxx\n9142\t7355\t0\t2\t2\t2\t42\t142\t1142\t4142\t9142\t84\t85\tQNAAAA\tXWKAAA\tVVVVxx\n6582\t7356\t0\t2\t2\t2\t82\t582\t582\t1582\t6582\t164\t165\tETAAAA\tYWKAAA\tAAAAxx\n1255\t7357\t1\t3\t5\t15\t55\t255\t1255\t1255\t1255\t110\t111\tHWAAAA\tZWKAAA\tHHHHxx\n6459\t7358\t1\t3\t9\t19\t59\t459\t459\t1459\t6459\t118\t119\tLOAAAA\tAXKAAA\tOOOOxx\n6327\t7359\t1\t3\t7\t7\t27\t327\t327\t1327\t6327\t54\t55\tJJAAAA\tBXKAAA\tVVVVxx\n4692\t7360\t0\t0\t2\t12\t92\t692\t692\t4692\t4692\t184\t185\tMYAAAA\tCXKAAA\tAAAAxx\n3772\t7361\t0\t0\t2\t12\t72\t772\t1772\t3772\t3772\t144\t145\tCPAAAA\tDXKAAA\tHHHHxx\n4203\t7362\t1\t3\t3\t3\t3\t203\t203\t4203\t4203\t6\t7\tRFAAAA\tEXKAAA\tOOOOxx\n2946\t7363\t0\t2\t6\t6\t46\t946\t946\t2946\t2946\t92\t93\tIJAAAA\tFXKAAA\tVVVVxx\n3524\t7364\t0\t0\t4\t4\t24\t524\t1524\t3524\t3524\t48\t49\tOFAAAA\tGXKAAA\tAAAAxx\n8409\t7365\t1\t1\t9\t9\t9\t409\t409\t3409\t8409\t18\t19\tLLAAAA\tHXKAAA\tHHHHxx\n1824\t7366\t0\t0\t4\t4\t24\t824\t1824\t1824\t1824\t48\t49\tESAAAA\tIXKAAA\tOOOOxx\n4637\t7367\t1\t1\t7\t17\t37\t637\t637\t4637\t4637\t74\t75\tJWAAAA\tJXKAAA\tVVVVxx\n589\t7368\t1\t1\t9\t9\t89\t589\t589\t589\t589\t178\t179\tRWAAAA\tKXKAAA\tAAAAxx\n484\t7369\t0\t0\t4\t4\t84\t484\t484\t484\t484\t168\t169\tQSAAAA\tLXKAAA\tHHHHxx\n8963\t7370\t1\t3\t3\t3\t63\t963\t963\t3963\t8963\t126\t127\tTGAAAA\tMXKAAA\tOOOOxx\n5502\t7371\t0\t2\t2\t2\t2\t502\t1502\t502\t5502\t4\t5\tQDAAAA\tNXKAAA\tVVVVxx\n6982\t7372\t0\t2\t2\t2\t82\t982\t982\t1982\t6982\t164\t165\tOIAAAA\tOXKAAA\tAAAAxx\n8029\t7373\t1\t1\t9\t9\t29\t29\t29\t3029\t8029\t58\t59\tVWAAAA\tPXKAAA\tHHHHxx\n4395\t7374\t1\t3\t5\t15\t95\t395\t395\t4395\t4395\t190\t191\tBNAAAA\tQXKAAA\tOOOOxx\n2595\t7375\t1\t3\t5\t15\t95\t595\t595\t2595\t2595\t190\t191\tVVAAAA\tRXKAAA\tVVVVxx\n2133\t7376\t1\t1\t3\t13\t33\t133\t133\t2133\t2133\t66\t67\tBEAAAA\tSXKAAA\tAAAAxx\n1414\t7377\t0\t2\t4\t14\t14\t414\t1414\t1414\t1414\t28\t29\tKCAAAA\tTXKAAA\tHHHHxx\n8201\t7378\t1\t1\t1\t1\t1\t201\t201\t3201\t8201\t2\t3\tLDAAAA\tUXKAAA\tOOOOxx\n4706\t7379\t0\t2\t6\t6\t6\t706\t706\t4706\t4706\t12\t13\tAZAAAA\tVXKAAA\tVVVVxx\n5310\t7380\t0\t2\t0\t10\t10\t310\t1310\t310\t5310\t20\t21\tGWAAAA\tWXKAAA\tAAAAxx\n7333\t7381\t1\t1\t3\t13\t33\t333\t1333\t2333\t7333\t66\t67\tBWAAAA\tXXKAAA\tHHHHxx\n9420\t7382\t0\t0\t0\t0\t20\t420\t1420\t4420\t9420\t40\t41\tIYAAAA\tYXKAAA\tOOOOxx\n1383\t7383\t1\t3\t3\t3\t83\t383\t1383\t1383\t1383\t166\t167\tFBAAAA\tZXKAAA\tVVVVxx\n6225\t7384\t1\t1\t5\t5\t25\t225\t225\t1225\t6225\t50\t51\tLFAAAA\tAYKAAA\tAAAAxx\n2064\t7385\t0\t0\t4\t4\t64\t64\t64\t2064\t2064\t128\t129\tKBAAAA\tBYKAAA\tHHHHxx\n6700\t7386\t0\t0\t0\t0\t0\t700\t700\t1700\t6700\t0\t1\tSXAAAA\tCYKAAA\tOOOOxx\n1352\t7387\t0\t0\t2\t12\t52\t352\t1352\t1352\t1352\t104\t105\tAAAAAA\tDYKAAA\tVVVVxx\n4249\t7388\t1\t1\t9\t9\t49\t249\t249\t4249\t4249\t98\t99\tLHAAAA\tEYKAAA\tAAAAxx\n9429\t7389\t1\t1\t9\t9\t29\t429\t1429\t4429\t9429\t58\t59\tRYAAAA\tFYKAAA\tHHHHxx\n8090\t7390\t0\t2\t0\t10\t90\t90\t90\t3090\t8090\t180\t181\tEZAAAA\tGYKAAA\tOOOOxx\n5378\t7391\t0\t2\t8\t18\t78\t378\t1378\t378\t5378\t156\t157\tWYAAAA\tHYKAAA\tVVVVxx\n9085\t7392\t1\t1\t5\t5\t85\t85\t1085\t4085\t9085\t170\t171\tLLAAAA\tIYKAAA\tAAAAxx\n7468\t7393\t0\t0\t8\t8\t68\t468\t1468\t2468\t7468\t136\t137\tGBAAAA\tJYKAAA\tHHHHxx\n9955\t7394\t1\t3\t5\t15\t55\t955\t1955\t4955\t9955\t110\t111\tXSAAAA\tKYKAAA\tOOOOxx\n8692\t7395\t0\t0\t2\t12\t92\t692\t692\t3692\t8692\t184\t185\tIWAAAA\tLYKAAA\tVVVVxx\n1463\t7396\t1\t3\t3\t3\t63\t463\t1463\t1463\t1463\t126\t127\tHEAAAA\tMYKAAA\tAAAAxx\n3577\t7397\t1\t1\t7\t17\t77\t577\t1577\t3577\t3577\t154\t155\tPHAAAA\tNYKAAA\tHHHHxx\n5654\t7398\t0\t2\t4\t14\t54\t654\t1654\t654\t5654\t108\t109\tMJAAAA\tOYKAAA\tOOOOxx\n7955\t7399\t1\t3\t5\t15\t55\t955\t1955\t2955\t7955\t110\t111\tZTAAAA\tPYKAAA\tVVVVxx\n4843\t7400\t1\t3\t3\t3\t43\t843\t843\t4843\t4843\t86\t87\tHEAAAA\tQYKAAA\tAAAAxx\n1776\t7401\t0\t0\t6\t16\t76\t776\t1776\t1776\t1776\t152\t153\tIQAAAA\tRYKAAA\tHHHHxx\n2223\t7402\t1\t3\t3\t3\t23\t223\t223\t2223\t2223\t46\t47\tNHAAAA\tSYKAAA\tOOOOxx\n8442\t7403\t0\t2\t2\t2\t42\t442\t442\t3442\t8442\t84\t85\tSMAAAA\tTYKAAA\tVVVVxx\n9738\t7404\t0\t2\t8\t18\t38\t738\t1738\t4738\t9738\t76\t77\tOKAAAA\tUYKAAA\tAAAAxx\n4867\t7405\t1\t3\t7\t7\t67\t867\t867\t4867\t4867\t134\t135\tFFAAAA\tVYKAAA\tHHHHxx\n2983\t7406\t1\t3\t3\t3\t83\t983\t983\t2983\t2983\t166\t167\tTKAAAA\tWYKAAA\tOOOOxx\n3300\t7407\t0\t0\t0\t0\t0\t300\t1300\t3300\t3300\t0\t1\tYWAAAA\tXYKAAA\tVVVVxx\n3815\t7408\t1\t3\t5\t15\t15\t815\t1815\t3815\t3815\t30\t31\tTQAAAA\tYYKAAA\tAAAAxx\n1779\t7409\t1\t3\t9\t19\t79\t779\t1779\t1779\t1779\t158\t159\tLQAAAA\tZYKAAA\tHHHHxx\n1123\t7410\t1\t3\t3\t3\t23\t123\t1123\t1123\t1123\t46\t47\tFRAAAA\tAZKAAA\tOOOOxx\n4824\t7411\t0\t0\t4\t4\t24\t824\t824\t4824\t4824\t48\t49\tODAAAA\tBZKAAA\tVVVVxx\n5407\t7412\t1\t3\t7\t7\t7\t407\t1407\t407\t5407\t14\t15\tZZAAAA\tCZKAAA\tAAAAxx\n5123\t7413\t1\t3\t3\t3\t23\t123\t1123\t123\t5123\t46\t47\tBPAAAA\tDZKAAA\tHHHHxx\n2515\t7414\t1\t3\t5\t15\t15\t515\t515\t2515\t2515\t30\t31\tTSAAAA\tEZKAAA\tOOOOxx\n4781\t7415\t1\t1\t1\t1\t81\t781\t781\t4781\t4781\t162\t163\tXBAAAA\tFZKAAA\tVVVVxx\n7831\t7416\t1\t3\t1\t11\t31\t831\t1831\t2831\t7831\t62\t63\tFPAAAA\tGZKAAA\tAAAAxx\n6946\t7417\t0\t2\t6\t6\t46\t946\t946\t1946\t6946\t92\t93\tEHAAAA\tHZKAAA\tHHHHxx\n1215\t7418\t1\t3\t5\t15\t15\t215\t1215\t1215\t1215\t30\t31\tTUAAAA\tIZKAAA\tOOOOxx\n7783\t7419\t1\t3\t3\t3\t83\t783\t1783\t2783\t7783\t166\t167\tJNAAAA\tJZKAAA\tVVVVxx\n4532\t7420\t0\t0\t2\t12\t32\t532\t532\t4532\t4532\t64\t65\tISAAAA\tKZKAAA\tAAAAxx\n9068\t7421\t0\t0\t8\t8\t68\t68\t1068\t4068\t9068\t136\t137\tUKAAAA\tLZKAAA\tHHHHxx\n7030\t7422\t0\t2\t0\t10\t30\t30\t1030\t2030\t7030\t60\t61\tKKAAAA\tMZKAAA\tOOOOxx\n436\t7423\t0\t0\t6\t16\t36\t436\t436\t436\t436\t72\t73\tUQAAAA\tNZKAAA\tVVVVxx\n6549\t7424\t1\t1\t9\t9\t49\t549\t549\t1549\t6549\t98\t99\tXRAAAA\tOZKAAA\tAAAAxx\n3348\t7425\t0\t0\t8\t8\t48\t348\t1348\t3348\t3348\t96\t97\tUYAAAA\tPZKAAA\tHHHHxx\n6229\t7426\t1\t1\t9\t9\t29\t229\t229\t1229\t6229\t58\t59\tPFAAAA\tQZKAAA\tOOOOxx\n3933\t7427\t1\t1\t3\t13\t33\t933\t1933\t3933\t3933\t66\t67\tHVAAAA\tRZKAAA\tVVVVxx\n1876\t7428\t0\t0\t6\t16\t76\t876\t1876\t1876\t1876\t152\t153\tEUAAAA\tSZKAAA\tAAAAxx\n8920\t7429\t0\t0\t0\t0\t20\t920\t920\t3920\t8920\t40\t41\tCFAAAA\tTZKAAA\tHHHHxx\n7926\t7430\t0\t2\t6\t6\t26\t926\t1926\t2926\t7926\t52\t53\tWSAAAA\tUZKAAA\tOOOOxx\n8805\t7431\t1\t1\t5\t5\t5\t805\t805\t3805\t8805\t10\t11\tRAAAAA\tVZKAAA\tVVVVxx\n6729\t7432\t1\t1\t9\t9\t29\t729\t729\t1729\t6729\t58\t59\tVYAAAA\tWZKAAA\tAAAAxx\n7397\t7433\t1\t1\t7\t17\t97\t397\t1397\t2397\t7397\t194\t195\tNYAAAA\tXZKAAA\tHHHHxx\n9303\t7434\t1\t3\t3\t3\t3\t303\t1303\t4303\t9303\t6\t7\tVTAAAA\tYZKAAA\tOOOOxx\n4255\t7435\t1\t3\t5\t15\t55\t255\t255\t4255\t4255\t110\t111\tRHAAAA\tZZKAAA\tVVVVxx\n7229\t7436\t1\t1\t9\t9\t29\t229\t1229\t2229\t7229\t58\t59\tBSAAAA\tAALAAA\tAAAAxx\n854\t7437\t0\t2\t4\t14\t54\t854\t854\t854\t854\t108\t109\tWGAAAA\tBALAAA\tHHHHxx\n6723\t7438\t1\t3\t3\t3\t23\t723\t723\t1723\t6723\t46\t47\tPYAAAA\tCALAAA\tOOOOxx\n9597\t7439\t1\t1\t7\t17\t97\t597\t1597\t4597\t9597\t194\t195\tDFAAAA\tDALAAA\tVVVVxx\n6532\t7440\t0\t0\t2\t12\t32\t532\t532\t1532\t6532\t64\t65\tGRAAAA\tEALAAA\tAAAAxx\n2910\t7441\t0\t2\t0\t10\t10\t910\t910\t2910\t2910\t20\t21\tYHAAAA\tFALAAA\tHHHHxx\n6717\t7442\t1\t1\t7\t17\t17\t717\t717\t1717\t6717\t34\t35\tJYAAAA\tGALAAA\tOOOOxx\n1790\t7443\t0\t2\t0\t10\t90\t790\t1790\t1790\t1790\t180\t181\tWQAAAA\tHALAAA\tVVVVxx\n3761\t7444\t1\t1\t1\t1\t61\t761\t1761\t3761\t3761\t122\t123\tROAAAA\tIALAAA\tAAAAxx\n1565\t7445\t1\t1\t5\t5\t65\t565\t1565\t1565\t1565\t130\t131\tFIAAAA\tJALAAA\tHHHHxx\n6205\t7446\t1\t1\t5\t5\t5\t205\t205\t1205\t6205\t10\t11\tREAAAA\tKALAAA\tOOOOxx\n2726\t7447\t0\t2\t6\t6\t26\t726\t726\t2726\t2726\t52\t53\tWAAAAA\tLALAAA\tVVVVxx\n799\t7448\t1\t3\t9\t19\t99\t799\t799\t799\t799\t198\t199\tTEAAAA\tMALAAA\tAAAAxx\n3540\t7449\t0\t0\t0\t0\t40\t540\t1540\t3540\t3540\t80\t81\tEGAAAA\tNALAAA\tHHHHxx\n5878\t7450\t0\t2\t8\t18\t78\t878\t1878\t878\t5878\t156\t157\tCSAAAA\tOALAAA\tOOOOxx\n2542\t7451\t0\t2\t2\t2\t42\t542\t542\t2542\t2542\t84\t85\tUTAAAA\tPALAAA\tVVVVxx\n4888\t7452\t0\t0\t8\t8\t88\t888\t888\t4888\t4888\t176\t177\tAGAAAA\tQALAAA\tAAAAxx\n5290\t7453\t0\t2\t0\t10\t90\t290\t1290\t290\t5290\t180\t181\tMVAAAA\tRALAAA\tHHHHxx\n7995\t7454\t1\t3\t5\t15\t95\t995\t1995\t2995\t7995\t190\t191\tNVAAAA\tSALAAA\tOOOOxx\n3519\t7455\t1\t3\t9\t19\t19\t519\t1519\t3519\t3519\t38\t39\tJFAAAA\tTALAAA\tVVVVxx\n3571\t7456\t1\t3\t1\t11\t71\t571\t1571\t3571\t3571\t142\t143\tJHAAAA\tUALAAA\tAAAAxx\n7854\t7457\t0\t2\t4\t14\t54\t854\t1854\t2854\t7854\t108\t109\tCQAAAA\tVALAAA\tHHHHxx\n5184\t7458\t0\t0\t4\t4\t84\t184\t1184\t184\t5184\t168\t169\tKRAAAA\tWALAAA\tOOOOxx\n3498\t7459\t0\t2\t8\t18\t98\t498\t1498\t3498\t3498\t196\t197\tOEAAAA\tXALAAA\tVVVVxx\n1264\t7460\t0\t0\t4\t4\t64\t264\t1264\t1264\t1264\t128\t129\tQWAAAA\tYALAAA\tAAAAxx\n3159\t7461\t1\t3\t9\t19\t59\t159\t1159\t3159\t3159\t118\t119\tNRAAAA\tZALAAA\tHHHHxx\n5480\t7462\t0\t0\t0\t0\t80\t480\t1480\t480\t5480\t160\t161\tUCAAAA\tABLAAA\tOOOOxx\n1706\t7463\t0\t2\t6\t6\t6\t706\t1706\t1706\t1706\t12\t13\tQNAAAA\tBBLAAA\tVVVVxx\n4540\t7464\t0\t0\t0\t0\t40\t540\t540\t4540\t4540\t80\t81\tQSAAAA\tCBLAAA\tAAAAxx\n2799\t7465\t1\t3\t9\t19\t99\t799\t799\t2799\t2799\t198\t199\tRDAAAA\tDBLAAA\tHHHHxx\n7389\t7466\t1\t1\t9\t9\t89\t389\t1389\t2389\t7389\t178\t179\tFYAAAA\tEBLAAA\tOOOOxx\n5565\t7467\t1\t1\t5\t5\t65\t565\t1565\t565\t5565\t130\t131\tBGAAAA\tFBLAAA\tVVVVxx\n3896\t7468\t0\t0\t6\t16\t96\t896\t1896\t3896\t3896\t192\t193\tWTAAAA\tGBLAAA\tAAAAxx\n2100\t7469\t0\t0\t0\t0\t0\t100\t100\t2100\t2100\t0\t1\tUCAAAA\tHBLAAA\tHHHHxx\n3507\t7470\t1\t3\t7\t7\t7\t507\t1507\t3507\t3507\t14\t15\tXEAAAA\tIBLAAA\tOOOOxx\n7971\t7471\t1\t3\t1\t11\t71\t971\t1971\t2971\t7971\t142\t143\tPUAAAA\tJBLAAA\tVVVVxx\n2312\t7472\t0\t0\t2\t12\t12\t312\t312\t2312\t2312\t24\t25\tYKAAAA\tKBLAAA\tAAAAxx\n2494\t7473\t0\t2\t4\t14\t94\t494\t494\t2494\t2494\t188\t189\tYRAAAA\tLBLAAA\tHHHHxx\n2474\t7474\t0\t2\t4\t14\t74\t474\t474\t2474\t2474\t148\t149\tERAAAA\tMBLAAA\tOOOOxx\n3136\t7475\t0\t0\t6\t16\t36\t136\t1136\t3136\t3136\t72\t73\tQQAAAA\tNBLAAA\tVVVVxx\n7242\t7476\t0\t2\t2\t2\t42\t242\t1242\t2242\t7242\t84\t85\tOSAAAA\tOBLAAA\tAAAAxx\n9430\t7477\t0\t2\t0\t10\t30\t430\t1430\t4430\t9430\t60\t61\tSYAAAA\tPBLAAA\tHHHHxx\n1052\t7478\t0\t0\t2\t12\t52\t52\t1052\t1052\t1052\t104\t105\tMOAAAA\tQBLAAA\tOOOOxx\n4172\t7479\t0\t0\t2\t12\t72\t172\t172\t4172\t4172\t144\t145\tMEAAAA\tRBLAAA\tVVVVxx\n970\t7480\t0\t2\t0\t10\t70\t970\t970\t970\t970\t140\t141\tILAAAA\tSBLAAA\tAAAAxx\n882\t7481\t0\t2\t2\t2\t82\t882\t882\t882\t882\t164\t165\tYHAAAA\tTBLAAA\tHHHHxx\n9799\t7482\t1\t3\t9\t19\t99\t799\t1799\t4799\t9799\t198\t199\tXMAAAA\tUBLAAA\tOOOOxx\n5850\t7483\t0\t2\t0\t10\t50\t850\t1850\t850\t5850\t100\t101\tARAAAA\tVBLAAA\tVVVVxx\n9473\t7484\t1\t1\t3\t13\t73\t473\t1473\t4473\t9473\t146\t147\tJAAAAA\tWBLAAA\tAAAAxx\n8635\t7485\t1\t3\t5\t15\t35\t635\t635\t3635\t8635\t70\t71\tDUAAAA\tXBLAAA\tHHHHxx\n2349\t7486\t1\t1\t9\t9\t49\t349\t349\t2349\t2349\t98\t99\tJMAAAA\tYBLAAA\tOOOOxx\n2270\t7487\t0\t2\t0\t10\t70\t270\t270\t2270\t2270\t140\t141\tIJAAAA\tZBLAAA\tVVVVxx\n7887\t7488\t1\t3\t7\t7\t87\t887\t1887\t2887\t7887\t174\t175\tJRAAAA\tACLAAA\tAAAAxx\n3091\t7489\t1\t3\t1\t11\t91\t91\t1091\t3091\t3091\t182\t183\tXOAAAA\tBCLAAA\tHHHHxx\n3728\t7490\t0\t0\t8\t8\t28\t728\t1728\t3728\t3728\t56\t57\tKNAAAA\tCCLAAA\tOOOOxx\n3658\t7491\t0\t2\t8\t18\t58\t658\t1658\t3658\t3658\t116\t117\tSKAAAA\tDCLAAA\tVVVVxx\n5975\t7492\t1\t3\t5\t15\t75\t975\t1975\t975\t5975\t150\t151\tVVAAAA\tECLAAA\tAAAAxx\n332\t7493\t0\t0\t2\t12\t32\t332\t332\t332\t332\t64\t65\tUMAAAA\tFCLAAA\tHHHHxx\n7990\t7494\t0\t2\t0\t10\t90\t990\t1990\t2990\t7990\t180\t181\tIVAAAA\tGCLAAA\tOOOOxx\n8688\t7495\t0\t0\t8\t8\t88\t688\t688\t3688\t8688\t176\t177\tEWAAAA\tHCLAAA\tVVVVxx\n9601\t7496\t1\t1\t1\t1\t1\t601\t1601\t4601\t9601\t2\t3\tHFAAAA\tICLAAA\tAAAAxx\n8401\t7497\t1\t1\t1\t1\t1\t401\t401\t3401\t8401\t2\t3\tDLAAAA\tJCLAAA\tHHHHxx\n8093\t7498\t1\t1\t3\t13\t93\t93\t93\t3093\t8093\t186\t187\tHZAAAA\tKCLAAA\tOOOOxx\n4278\t7499\t0\t2\t8\t18\t78\t278\t278\t4278\t4278\t156\t157\tOIAAAA\tLCLAAA\tVVVVxx\n5467\t7500\t1\t3\t7\t7\t67\t467\t1467\t467\t5467\t134\t135\tHCAAAA\tMCLAAA\tAAAAxx\n3137\t7501\t1\t1\t7\t17\t37\t137\t1137\t3137\t3137\t74\t75\tRQAAAA\tNCLAAA\tHHHHxx\n204\t7502\t0\t0\t4\t4\t4\t204\t204\t204\t204\t8\t9\tWHAAAA\tOCLAAA\tOOOOxx\n8224\t7503\t0\t0\t4\t4\t24\t224\t224\t3224\t8224\t48\t49\tIEAAAA\tPCLAAA\tVVVVxx\n2944\t7504\t0\t0\t4\t4\t44\t944\t944\t2944\t2944\t88\t89\tGJAAAA\tQCLAAA\tAAAAxx\n7593\t7505\t1\t1\t3\t13\t93\t593\t1593\t2593\t7593\t186\t187\tBGAAAA\tRCLAAA\tHHHHxx\n814\t7506\t0\t2\t4\t14\t14\t814\t814\t814\t814\t28\t29\tIFAAAA\tSCLAAA\tOOOOxx\n8047\t7507\t1\t3\t7\t7\t47\t47\t47\t3047\t8047\t94\t95\tNXAAAA\tTCLAAA\tVVVVxx\n7802\t7508\t0\t2\t2\t2\t2\t802\t1802\t2802\t7802\t4\t5\tCOAAAA\tUCLAAA\tAAAAxx\n901\t7509\t1\t1\t1\t1\t1\t901\t901\t901\t901\t2\t3\tRIAAAA\tVCLAAA\tHHHHxx\n6168\t7510\t0\t0\t8\t8\t68\t168\t168\t1168\t6168\t136\t137\tGDAAAA\tWCLAAA\tOOOOxx\n2950\t7511\t0\t2\t0\t10\t50\t950\t950\t2950\t2950\t100\t101\tMJAAAA\tXCLAAA\tVVVVxx\n5393\t7512\t1\t1\t3\t13\t93\t393\t1393\t393\t5393\t186\t187\tLZAAAA\tYCLAAA\tAAAAxx\n3585\t7513\t1\t1\t5\t5\t85\t585\t1585\t3585\t3585\t170\t171\tXHAAAA\tZCLAAA\tHHHHxx\n9392\t7514\t0\t0\t2\t12\t92\t392\t1392\t4392\t9392\t184\t185\tGXAAAA\tADLAAA\tOOOOxx\n8314\t7515\t0\t2\t4\t14\t14\t314\t314\t3314\t8314\t28\t29\tUHAAAA\tBDLAAA\tVVVVxx\n9972\t7516\t0\t0\t2\t12\t72\t972\t1972\t4972\t9972\t144\t145\tOTAAAA\tCDLAAA\tAAAAxx\n9130\t7517\t0\t2\t0\t10\t30\t130\t1130\t4130\t9130\t60\t61\tENAAAA\tDDLAAA\tHHHHxx\n975\t7518\t1\t3\t5\t15\t75\t975\t975\t975\t975\t150\t151\tNLAAAA\tEDLAAA\tOOOOxx\n5720\t7519\t0\t0\t0\t0\t20\t720\t1720\t720\t5720\t40\t41\tAMAAAA\tFDLAAA\tVVVVxx\n3769\t7520\t1\t1\t9\t9\t69\t769\t1769\t3769\t3769\t138\t139\tZOAAAA\tGDLAAA\tAAAAxx\n5303\t7521\t1\t3\t3\t3\t3\t303\t1303\t303\t5303\t6\t7\tZVAAAA\tHDLAAA\tHHHHxx\n6564\t7522\t0\t0\t4\t4\t64\t564\t564\t1564\t6564\t128\t129\tMSAAAA\tIDLAAA\tOOOOxx\n7855\t7523\t1\t3\t5\t15\t55\t855\t1855\t2855\t7855\t110\t111\tDQAAAA\tJDLAAA\tVVVVxx\n8153\t7524\t1\t1\t3\t13\t53\t153\t153\t3153\t8153\t106\t107\tPBAAAA\tKDLAAA\tAAAAxx\n2292\t7525\t0\t0\t2\t12\t92\t292\t292\t2292\t2292\t184\t185\tEKAAAA\tLDLAAA\tHHHHxx\n3156\t7526\t0\t0\t6\t16\t56\t156\t1156\t3156\t3156\t112\t113\tKRAAAA\tMDLAAA\tOOOOxx\n6580\t7527\t0\t0\t0\t0\t80\t580\t580\t1580\t6580\t160\t161\tCTAAAA\tNDLAAA\tVVVVxx\n5324\t7528\t0\t0\t4\t4\t24\t324\t1324\t324\t5324\t48\t49\tUWAAAA\tODLAAA\tAAAAxx\n8871\t7529\t1\t3\t1\t11\t71\t871\t871\t3871\t8871\t142\t143\tFDAAAA\tPDLAAA\tHHHHxx\n2543\t7530\t1\t3\t3\t3\t43\t543\t543\t2543\t2543\t86\t87\tVTAAAA\tQDLAAA\tOOOOxx\n7857\t7531\t1\t1\t7\t17\t57\t857\t1857\t2857\t7857\t114\t115\tFQAAAA\tRDLAAA\tVVVVxx\n4084\t7532\t0\t0\t4\t4\t84\t84\t84\t4084\t4084\t168\t169\tCBAAAA\tSDLAAA\tAAAAxx\n9887\t7533\t1\t3\t7\t7\t87\t887\t1887\t4887\t9887\t174\t175\tHQAAAA\tTDLAAA\tHHHHxx\n6940\t7534\t0\t0\t0\t0\t40\t940\t940\t1940\t6940\t80\t81\tYGAAAA\tUDLAAA\tOOOOxx\n3415\t7535\t1\t3\t5\t15\t15\t415\t1415\t3415\t3415\t30\t31\tJBAAAA\tVDLAAA\tVVVVxx\n5012\t7536\t0\t0\t2\t12\t12\t12\t1012\t12\t5012\t24\t25\tUKAAAA\tWDLAAA\tAAAAxx\n3187\t7537\t1\t3\t7\t7\t87\t187\t1187\t3187\t3187\t174\t175\tPSAAAA\tXDLAAA\tHHHHxx\n8556\t7538\t0\t0\t6\t16\t56\t556\t556\t3556\t8556\t112\t113\tCRAAAA\tYDLAAA\tOOOOxx\n7966\t7539\t0\t2\t6\t6\t66\t966\t1966\t2966\t7966\t132\t133\tKUAAAA\tZDLAAA\tVVVVxx\n7481\t7540\t1\t1\t1\t1\t81\t481\t1481\t2481\t7481\t162\t163\tTBAAAA\tAELAAA\tAAAAxx\n8524\t7541\t0\t0\t4\t4\t24\t524\t524\t3524\t8524\t48\t49\tWPAAAA\tBELAAA\tHHHHxx\n3021\t7542\t1\t1\t1\t1\t21\t21\t1021\t3021\t3021\t42\t43\tFMAAAA\tCELAAA\tOOOOxx\n6045\t7543\t1\t1\t5\t5\t45\t45\t45\t1045\t6045\t90\t91\tNYAAAA\tDELAAA\tVVVVxx\n8022\t7544\t0\t2\t2\t2\t22\t22\t22\t3022\t8022\t44\t45\tOWAAAA\tEELAAA\tAAAAxx\n3626\t7545\t0\t2\t6\t6\t26\t626\t1626\t3626\t3626\t52\t53\tMJAAAA\tFELAAA\tHHHHxx\n1030\t7546\t0\t2\t0\t10\t30\t30\t1030\t1030\t1030\t60\t61\tQNAAAA\tGELAAA\tOOOOxx\n8903\t7547\t1\t3\t3\t3\t3\t903\t903\t3903\t8903\t6\t7\tLEAAAA\tHELAAA\tVVVVxx\n7488\t7548\t0\t0\t8\t8\t88\t488\t1488\t2488\t7488\t176\t177\tACAAAA\tIELAAA\tAAAAxx\n9293\t7549\t1\t1\t3\t13\t93\t293\t1293\t4293\t9293\t186\t187\tLTAAAA\tJELAAA\tHHHHxx\n4586\t7550\t0\t2\t6\t6\t86\t586\t586\t4586\t4586\t172\t173\tKUAAAA\tKELAAA\tOOOOxx\n9282\t7551\t0\t2\t2\t2\t82\t282\t1282\t4282\t9282\t164\t165\tATAAAA\tLELAAA\tVVVVxx\n1948\t7552\t0\t0\t8\t8\t48\t948\t1948\t1948\t1948\t96\t97\tYWAAAA\tMELAAA\tAAAAxx\n2534\t7553\t0\t2\t4\t14\t34\t534\t534\t2534\t2534\t68\t69\tMTAAAA\tNELAAA\tHHHHxx\n1150\t7554\t0\t2\t0\t10\t50\t150\t1150\t1150\t1150\t100\t101\tGSAAAA\tOELAAA\tOOOOxx\n4931\t7555\t1\t3\t1\t11\t31\t931\t931\t4931\t4931\t62\t63\tRHAAAA\tPELAAA\tVVVVxx\n2866\t7556\t0\t2\t6\t6\t66\t866\t866\t2866\t2866\t132\t133\tGGAAAA\tQELAAA\tAAAAxx\n6172\t7557\t0\t0\t2\t12\t72\t172\t172\t1172\t6172\t144\t145\tKDAAAA\tRELAAA\tHHHHxx\n4819\t7558\t1\t3\t9\t19\t19\t819\t819\t4819\t4819\t38\t39\tJDAAAA\tSELAAA\tOOOOxx\n569\t7559\t1\t1\t9\t9\t69\t569\t569\t569\t569\t138\t139\tXVAAAA\tTELAAA\tVVVVxx\n1146\t7560\t0\t2\t6\t6\t46\t146\t1146\t1146\t1146\t92\t93\tCSAAAA\tUELAAA\tAAAAxx\n3062\t7561\t0\t2\t2\t2\t62\t62\t1062\t3062\t3062\t124\t125\tUNAAAA\tVELAAA\tHHHHxx\n7690\t7562\t0\t2\t0\t10\t90\t690\t1690\t2690\t7690\t180\t181\tUJAAAA\tWELAAA\tOOOOxx\n8611\t7563\t1\t3\t1\t11\t11\t611\t611\t3611\t8611\t22\t23\tFTAAAA\tXELAAA\tVVVVxx\n1142\t7564\t0\t2\t2\t2\t42\t142\t1142\t1142\t1142\t84\t85\tYRAAAA\tYELAAA\tAAAAxx\n1193\t7565\t1\t1\t3\t13\t93\t193\t1193\t1193\t1193\t186\t187\tXTAAAA\tZELAAA\tHHHHxx\n2507\t7566\t1\t3\t7\t7\t7\t507\t507\t2507\t2507\t14\t15\tLSAAAA\tAFLAAA\tOOOOxx\n1043\t7567\t1\t3\t3\t3\t43\t43\t1043\t1043\t1043\t86\t87\tDOAAAA\tBFLAAA\tVVVVxx\n7472\t7568\t0\t0\t2\t12\t72\t472\t1472\t2472\t7472\t144\t145\tKBAAAA\tCFLAAA\tAAAAxx\n1817\t7569\t1\t1\t7\t17\t17\t817\t1817\t1817\t1817\t34\t35\tXRAAAA\tDFLAAA\tHHHHxx\n3868\t7570\t0\t0\t8\t8\t68\t868\t1868\t3868\t3868\t136\t137\tUSAAAA\tEFLAAA\tOOOOxx\n9031\t7571\t1\t3\t1\t11\t31\t31\t1031\t4031\t9031\t62\t63\tJJAAAA\tFFLAAA\tVVVVxx\n7254\t7572\t0\t2\t4\t14\t54\t254\t1254\t2254\t7254\t108\t109\tATAAAA\tGFLAAA\tAAAAxx\n5030\t7573\t0\t2\t0\t10\t30\t30\t1030\t30\t5030\t60\t61\tMLAAAA\tHFLAAA\tHHHHxx\n6594\t7574\t0\t2\t4\t14\t94\t594\t594\t1594\t6594\t188\t189\tQTAAAA\tIFLAAA\tOOOOxx\n6862\t7575\t0\t2\t2\t2\t62\t862\t862\t1862\t6862\t124\t125\tYDAAAA\tJFLAAA\tVVVVxx\n1994\t7576\t0\t2\t4\t14\t94\t994\t1994\t1994\t1994\t188\t189\tSYAAAA\tKFLAAA\tAAAAxx\n9017\t7577\t1\t1\t7\t17\t17\t17\t1017\t4017\t9017\t34\t35\tVIAAAA\tLFLAAA\tHHHHxx\n5716\t7578\t0\t0\t6\t16\t16\t716\t1716\t716\t5716\t32\t33\tWLAAAA\tMFLAAA\tOOOOxx\n1900\t7579\t0\t0\t0\t0\t0\t900\t1900\t1900\t1900\t0\t1\tCVAAAA\tNFLAAA\tVVVVxx\n120\t7580\t0\t0\t0\t0\t20\t120\t120\t120\t120\t40\t41\tQEAAAA\tOFLAAA\tAAAAxx\n9003\t7581\t1\t3\t3\t3\t3\t3\t1003\t4003\t9003\t6\t7\tHIAAAA\tPFLAAA\tHHHHxx\n4178\t7582\t0\t2\t8\t18\t78\t178\t178\t4178\t4178\t156\t157\tSEAAAA\tQFLAAA\tOOOOxx\n8777\t7583\t1\t1\t7\t17\t77\t777\t777\t3777\t8777\t154\t155\tPZAAAA\tRFLAAA\tVVVVxx\n3653\t7584\t1\t1\t3\t13\t53\t653\t1653\t3653\t3653\t106\t107\tNKAAAA\tSFLAAA\tAAAAxx\n1137\t7585\t1\t1\t7\t17\t37\t137\t1137\t1137\t1137\t74\t75\tTRAAAA\tTFLAAA\tHHHHxx\n6362\t7586\t0\t2\t2\t2\t62\t362\t362\t1362\t6362\t124\t125\tSKAAAA\tUFLAAA\tOOOOxx\n8537\t7587\t1\t1\t7\t17\t37\t537\t537\t3537\t8537\t74\t75\tJQAAAA\tVFLAAA\tVVVVxx\n1590\t7588\t0\t2\t0\t10\t90\t590\t1590\t1590\t1590\t180\t181\tEJAAAA\tWFLAAA\tAAAAxx\n374\t7589\t0\t2\t4\t14\t74\t374\t374\t374\t374\t148\t149\tKOAAAA\tXFLAAA\tHHHHxx\n2597\t7590\t1\t1\t7\t17\t97\t597\t597\t2597\t2597\t194\t195\tXVAAAA\tYFLAAA\tOOOOxx\n8071\t7591\t1\t3\t1\t11\t71\t71\t71\t3071\t8071\t142\t143\tLYAAAA\tZFLAAA\tVVVVxx\n9009\t7592\t1\t1\t9\t9\t9\t9\t1009\t4009\t9009\t18\t19\tNIAAAA\tAGLAAA\tAAAAxx\n1978\t7593\t0\t2\t8\t18\t78\t978\t1978\t1978\t1978\t156\t157\tCYAAAA\tBGLAAA\tHHHHxx\n1541\t7594\t1\t1\t1\t1\t41\t541\t1541\t1541\t1541\t82\t83\tHHAAAA\tCGLAAA\tOOOOxx\n4998\t7595\t0\t2\t8\t18\t98\t998\t998\t4998\t4998\t196\t197\tGKAAAA\tDGLAAA\tVVVVxx\n1649\t7596\t1\t1\t9\t9\t49\t649\t1649\t1649\t1649\t98\t99\tLLAAAA\tEGLAAA\tAAAAxx\n5426\t7597\t0\t2\t6\t6\t26\t426\t1426\t426\t5426\t52\t53\tSAAAAA\tFGLAAA\tHHHHxx\n1492\t7598\t0\t0\t2\t12\t92\t492\t1492\t1492\t1492\t184\t185\tKFAAAA\tGGLAAA\tOOOOxx\n9622\t7599\t0\t2\t2\t2\t22\t622\t1622\t4622\t9622\t44\t45\tCGAAAA\tHGLAAA\tVVVVxx\n701\t7600\t1\t1\t1\t1\t1\t701\t701\t701\t701\t2\t3\tZAAAAA\tIGLAAA\tAAAAxx\n2781\t7601\t1\t1\t1\t1\t81\t781\t781\t2781\t2781\t162\t163\tZCAAAA\tJGLAAA\tHHHHxx\n3982\t7602\t0\t2\t2\t2\t82\t982\t1982\t3982\t3982\t164\t165\tEXAAAA\tKGLAAA\tOOOOxx\n7259\t7603\t1\t3\t9\t19\t59\t259\t1259\t2259\t7259\t118\t119\tFTAAAA\tLGLAAA\tVVVVxx\n9868\t7604\t0\t0\t8\t8\t68\t868\t1868\t4868\t9868\t136\t137\tOPAAAA\tMGLAAA\tAAAAxx\n564\t7605\t0\t0\t4\t4\t64\t564\t564\t564\t564\t128\t129\tSVAAAA\tNGLAAA\tHHHHxx\n6315\t7606\t1\t3\t5\t15\t15\t315\t315\t1315\t6315\t30\t31\tXIAAAA\tOGLAAA\tOOOOxx\n9092\t7607\t0\t0\t2\t12\t92\t92\t1092\t4092\t9092\t184\t185\tSLAAAA\tPGLAAA\tVVVVxx\n8237\t7608\t1\t1\t7\t17\t37\t237\t237\t3237\t8237\t74\t75\tVEAAAA\tQGLAAA\tAAAAxx\n1513\t7609\t1\t1\t3\t13\t13\t513\t1513\t1513\t1513\t26\t27\tFGAAAA\tRGLAAA\tHHHHxx\n1922\t7610\t0\t2\t2\t2\t22\t922\t1922\t1922\t1922\t44\t45\tYVAAAA\tSGLAAA\tOOOOxx\n5396\t7611\t0\t0\t6\t16\t96\t396\t1396\t396\t5396\t192\t193\tOZAAAA\tTGLAAA\tVVVVxx\n2485\t7612\t1\t1\t5\t5\t85\t485\t485\t2485\t2485\t170\t171\tPRAAAA\tUGLAAA\tAAAAxx\n5774\t7613\t0\t2\t4\t14\t74\t774\t1774\t774\t5774\t148\t149\tCOAAAA\tVGLAAA\tHHHHxx\n3983\t7614\t1\t3\t3\t3\t83\t983\t1983\t3983\t3983\t166\t167\tFXAAAA\tWGLAAA\tOOOOxx\n221\t7615\t1\t1\t1\t1\t21\t221\t221\t221\t221\t42\t43\tNIAAAA\tXGLAAA\tVVVVxx\n8662\t7616\t0\t2\t2\t2\t62\t662\t662\t3662\t8662\t124\t125\tEVAAAA\tYGLAAA\tAAAAxx\n2456\t7617\t0\t0\t6\t16\t56\t456\t456\t2456\t2456\t112\t113\tMQAAAA\tZGLAAA\tHHHHxx\n9736\t7618\t0\t0\t6\t16\t36\t736\t1736\t4736\t9736\t72\t73\tMKAAAA\tAHLAAA\tOOOOxx\n8936\t7619\t0\t0\t6\t16\t36\t936\t936\t3936\t8936\t72\t73\tSFAAAA\tBHLAAA\tVVVVxx\n5395\t7620\t1\t3\t5\t15\t95\t395\t1395\t395\t5395\t190\t191\tNZAAAA\tCHLAAA\tAAAAxx\n9523\t7621\t1\t3\t3\t3\t23\t523\t1523\t4523\t9523\t46\t47\tHCAAAA\tDHLAAA\tHHHHxx\n6980\t7622\t0\t0\t0\t0\t80\t980\t980\t1980\t6980\t160\t161\tMIAAAA\tEHLAAA\tOOOOxx\n2091\t7623\t1\t3\t1\t11\t91\t91\t91\t2091\t2091\t182\t183\tLCAAAA\tFHLAAA\tVVVVxx\n6807\t7624\t1\t3\t7\t7\t7\t807\t807\t1807\t6807\t14\t15\tVBAAAA\tGHLAAA\tAAAAxx\n8818\t7625\t0\t2\t8\t18\t18\t818\t818\t3818\t8818\t36\t37\tEBAAAA\tHHLAAA\tHHHHxx\n5298\t7626\t0\t2\t8\t18\t98\t298\t1298\t298\t5298\t196\t197\tUVAAAA\tIHLAAA\tOOOOxx\n1726\t7627\t0\t2\t6\t6\t26\t726\t1726\t1726\t1726\t52\t53\tKOAAAA\tJHLAAA\tVVVVxx\n3878\t7628\t0\t2\t8\t18\t78\t878\t1878\t3878\t3878\t156\t157\tETAAAA\tKHLAAA\tAAAAxx\n8700\t7629\t0\t0\t0\t0\t0\t700\t700\t3700\t8700\t0\t1\tQWAAAA\tLHLAAA\tHHHHxx\n5201\t7630\t1\t1\t1\t1\t1\t201\t1201\t201\t5201\t2\t3\tBSAAAA\tMHLAAA\tOOOOxx\n3936\t7631\t0\t0\t6\t16\t36\t936\t1936\t3936\t3936\t72\t73\tKVAAAA\tNHLAAA\tVVVVxx\n776\t7632\t0\t0\t6\t16\t76\t776\t776\t776\t776\t152\t153\tWDAAAA\tOHLAAA\tAAAAxx\n5302\t7633\t0\t2\t2\t2\t2\t302\t1302\t302\t5302\t4\t5\tYVAAAA\tPHLAAA\tHHHHxx\n3595\t7634\t1\t3\t5\t15\t95\t595\t1595\t3595\t3595\t190\t191\tHIAAAA\tQHLAAA\tOOOOxx\n9061\t7635\t1\t1\t1\t1\t61\t61\t1061\t4061\t9061\t122\t123\tNKAAAA\tRHLAAA\tVVVVxx\n6261\t7636\t1\t1\t1\t1\t61\t261\t261\t1261\t6261\t122\t123\tVGAAAA\tSHLAAA\tAAAAxx\n8878\t7637\t0\t2\t8\t18\t78\t878\t878\t3878\t8878\t156\t157\tMDAAAA\tTHLAAA\tHHHHxx\n3312\t7638\t0\t0\t2\t12\t12\t312\t1312\t3312\t3312\t24\t25\tKXAAAA\tUHLAAA\tOOOOxx\n9422\t7639\t0\t2\t2\t2\t22\t422\t1422\t4422\t9422\t44\t45\tKYAAAA\tVHLAAA\tVVVVxx\n7321\t7640\t1\t1\t1\t1\t21\t321\t1321\t2321\t7321\t42\t43\tPVAAAA\tWHLAAA\tAAAAxx\n3813\t7641\t1\t1\t3\t13\t13\t813\t1813\t3813\t3813\t26\t27\tRQAAAA\tXHLAAA\tHHHHxx\n5848\t7642\t0\t0\t8\t8\t48\t848\t1848\t848\t5848\t96\t97\tYQAAAA\tYHLAAA\tOOOOxx\n3535\t7643\t1\t3\t5\t15\t35\t535\t1535\t3535\t3535\t70\t71\tZFAAAA\tZHLAAA\tVVVVxx\n1040\t7644\t0\t0\t0\t0\t40\t40\t1040\t1040\t1040\t80\t81\tAOAAAA\tAILAAA\tAAAAxx\n8572\t7645\t0\t0\t2\t12\t72\t572\t572\t3572\t8572\t144\t145\tSRAAAA\tBILAAA\tHHHHxx\n5435\t7646\t1\t3\t5\t15\t35\t435\t1435\t435\t5435\t70\t71\tBBAAAA\tCILAAA\tOOOOxx\n8199\t7647\t1\t3\t9\t19\t99\t199\t199\t3199\t8199\t198\t199\tJDAAAA\tDILAAA\tVVVVxx\n8775\t7648\t1\t3\t5\t15\t75\t775\t775\t3775\t8775\t150\t151\tNZAAAA\tEILAAA\tAAAAxx\n7722\t7649\t0\t2\t2\t2\t22\t722\t1722\t2722\t7722\t44\t45\tALAAAA\tFILAAA\tHHHHxx\n3549\t7650\t1\t1\t9\t9\t49\t549\t1549\t3549\t3549\t98\t99\tNGAAAA\tGILAAA\tOOOOxx\n2578\t7651\t0\t2\t8\t18\t78\t578\t578\t2578\t2578\t156\t157\tEVAAAA\tHILAAA\tVVVVxx\n1695\t7652\t1\t3\t5\t15\t95\t695\t1695\t1695\t1695\t190\t191\tFNAAAA\tIILAAA\tAAAAxx\n1902\t7653\t0\t2\t2\t2\t2\t902\t1902\t1902\t1902\t4\t5\tEVAAAA\tJILAAA\tHHHHxx\n6058\t7654\t0\t2\t8\t18\t58\t58\t58\t1058\t6058\t116\t117\tAZAAAA\tKILAAA\tOOOOxx\n6591\t7655\t1\t3\t1\t11\t91\t591\t591\t1591\t6591\t182\t183\tNTAAAA\tLILAAA\tVVVVxx\n7962\t7656\t0\t2\t2\t2\t62\t962\t1962\t2962\t7962\t124\t125\tGUAAAA\tMILAAA\tAAAAxx\n5612\t7657\t0\t0\t2\t12\t12\t612\t1612\t612\t5612\t24\t25\tWHAAAA\tNILAAA\tHHHHxx\n3341\t7658\t1\t1\t1\t1\t41\t341\t1341\t3341\t3341\t82\t83\tNYAAAA\tOILAAA\tOOOOxx\n5460\t7659\t0\t0\t0\t0\t60\t460\t1460\t460\t5460\t120\t121\tACAAAA\tPILAAA\tVVVVxx\n2368\t7660\t0\t0\t8\t8\t68\t368\t368\t2368\t2368\t136\t137\tCNAAAA\tQILAAA\tAAAAxx\n8646\t7661\t0\t2\t6\t6\t46\t646\t646\t3646\t8646\t92\t93\tOUAAAA\tRILAAA\tHHHHxx\n4987\t7662\t1\t3\t7\t7\t87\t987\t987\t4987\t4987\t174\t175\tVJAAAA\tSILAAA\tOOOOxx\n9018\t7663\t0\t2\t8\t18\t18\t18\t1018\t4018\t9018\t36\t37\tWIAAAA\tTILAAA\tVVVVxx\n8685\t7664\t1\t1\t5\t5\t85\t685\t685\t3685\t8685\t170\t171\tBWAAAA\tUILAAA\tAAAAxx\n694\t7665\t0\t2\t4\t14\t94\t694\t694\t694\t694\t188\t189\tSAAAAA\tVILAAA\tHHHHxx\n2012\t7666\t0\t0\t2\t12\t12\t12\t12\t2012\t2012\t24\t25\tKZAAAA\tWILAAA\tOOOOxx\n2417\t7667\t1\t1\t7\t17\t17\t417\t417\t2417\t2417\t34\t35\tZOAAAA\tXILAAA\tVVVVxx\n4022\t7668\t0\t2\t2\t2\t22\t22\t22\t4022\t4022\t44\t45\tSYAAAA\tYILAAA\tAAAAxx\n5935\t7669\t1\t3\t5\t15\t35\t935\t1935\t935\t5935\t70\t71\tHUAAAA\tZILAAA\tHHHHxx\n1656\t7670\t0\t0\t6\t16\t56\t656\t1656\t1656\t1656\t112\t113\tSLAAAA\tAJLAAA\tOOOOxx\n6195\t7671\t1\t3\t5\t15\t95\t195\t195\t1195\t6195\t190\t191\tHEAAAA\tBJLAAA\tVVVVxx\n3057\t7672\t1\t1\t7\t17\t57\t57\t1057\t3057\t3057\t114\t115\tPNAAAA\tCJLAAA\tAAAAxx\n2852\t7673\t0\t0\t2\t12\t52\t852\t852\t2852\t2852\t104\t105\tSFAAAA\tDJLAAA\tHHHHxx\n4634\t7674\t0\t2\t4\t14\t34\t634\t634\t4634\t4634\t68\t69\tGWAAAA\tEJLAAA\tOOOOxx\n1689\t7675\t1\t1\t9\t9\t89\t689\t1689\t1689\t1689\t178\t179\tZMAAAA\tFJLAAA\tVVVVxx\n4102\t7676\t0\t2\t2\t2\t2\t102\t102\t4102\t4102\t4\t5\tUBAAAA\tGJLAAA\tAAAAxx\n3287\t7677\t1\t3\t7\t7\t87\t287\t1287\t3287\t3287\t174\t175\tLWAAAA\tHJLAAA\tHHHHxx\n5246\t7678\t0\t2\t6\t6\t46\t246\t1246\t246\t5246\t92\t93\tUTAAAA\tIJLAAA\tOOOOxx\n7450\t7679\t0\t2\t0\t10\t50\t450\t1450\t2450\t7450\t100\t101\tOAAAAA\tJJLAAA\tVVVVxx\n6548\t7680\t0\t0\t8\t8\t48\t548\t548\t1548\t6548\t96\t97\tWRAAAA\tKJLAAA\tAAAAxx\n379\t7681\t1\t3\t9\t19\t79\t379\t379\t379\t379\t158\t159\tPOAAAA\tLJLAAA\tHHHHxx\n7435\t7682\t1\t3\t5\t15\t35\t435\t1435\t2435\t7435\t70\t71\tZZAAAA\tMJLAAA\tOOOOxx\n2041\t7683\t1\t1\t1\t1\t41\t41\t41\t2041\t2041\t82\t83\tNAAAAA\tNJLAAA\tVVVVxx\n8462\t7684\t0\t2\t2\t2\t62\t462\t462\t3462\t8462\t124\t125\tMNAAAA\tOJLAAA\tAAAAxx\n9076\t7685\t0\t0\t6\t16\t76\t76\t1076\t4076\t9076\t152\t153\tCLAAAA\tPJLAAA\tHHHHxx\n761\t7686\t1\t1\t1\t1\t61\t761\t761\t761\t761\t122\t123\tHDAAAA\tQJLAAA\tOOOOxx\n795\t7687\t1\t3\t5\t15\t95\t795\t795\t795\t795\t190\t191\tPEAAAA\tRJLAAA\tVVVVxx\n1671\t7688\t1\t3\t1\t11\t71\t671\t1671\t1671\t1671\t142\t143\tHMAAAA\tSJLAAA\tAAAAxx\n695\t7689\t1\t3\t5\t15\t95\t695\t695\t695\t695\t190\t191\tTAAAAA\tTJLAAA\tHHHHxx\n4981\t7690\t1\t1\t1\t1\t81\t981\t981\t4981\t4981\t162\t163\tPJAAAA\tUJLAAA\tOOOOxx\n1211\t7691\t1\t3\t1\t11\t11\t211\t1211\t1211\t1211\t22\t23\tPUAAAA\tVJLAAA\tVVVVxx\n5914\t7692\t0\t2\t4\t14\t14\t914\t1914\t914\t5914\t28\t29\tMTAAAA\tWJLAAA\tAAAAxx\n9356\t7693\t0\t0\t6\t16\t56\t356\t1356\t4356\t9356\t112\t113\tWVAAAA\tXJLAAA\tHHHHxx\n1500\t7694\t0\t0\t0\t0\t0\t500\t1500\t1500\t1500\t0\t1\tSFAAAA\tYJLAAA\tOOOOxx\n3353\t7695\t1\t1\t3\t13\t53\t353\t1353\t3353\t3353\t106\t107\tZYAAAA\tZJLAAA\tVVVVxx\n1060\t7696\t0\t0\t0\t0\t60\t60\t1060\t1060\t1060\t120\t121\tUOAAAA\tAKLAAA\tAAAAxx\n7910\t7697\t0\t2\t0\t10\t10\t910\t1910\t2910\t7910\t20\t21\tGSAAAA\tBKLAAA\tHHHHxx\n1329\t7698\t1\t1\t9\t9\t29\t329\t1329\t1329\t1329\t58\t59\tDZAAAA\tCKLAAA\tOOOOxx\n6011\t7699\t1\t3\t1\t11\t11\t11\t11\t1011\t6011\t22\t23\tFXAAAA\tDKLAAA\tVVVVxx\n7146\t7700\t0\t2\t6\t6\t46\t146\t1146\t2146\t7146\t92\t93\tWOAAAA\tEKLAAA\tAAAAxx\n4602\t7701\t0\t2\t2\t2\t2\t602\t602\t4602\t4602\t4\t5\tAVAAAA\tFKLAAA\tHHHHxx\n6751\t7702\t1\t3\t1\t11\t51\t751\t751\t1751\t6751\t102\t103\tRZAAAA\tGKLAAA\tOOOOxx\n2666\t7703\t0\t2\t6\t6\t66\t666\t666\t2666\t2666\t132\t133\tOYAAAA\tHKLAAA\tVVVVxx\n2785\t7704\t1\t1\t5\t5\t85\t785\t785\t2785\t2785\t170\t171\tDDAAAA\tIKLAAA\tAAAAxx\n5851\t7705\t1\t3\t1\t11\t51\t851\t1851\t851\t5851\t102\t103\tBRAAAA\tJKLAAA\tHHHHxx\n2435\t7706\t1\t3\t5\t15\t35\t435\t435\t2435\t2435\t70\t71\tRPAAAA\tKKLAAA\tOOOOxx\n7429\t7707\t1\t1\t9\t9\t29\t429\t1429\t2429\t7429\t58\t59\tTZAAAA\tLKLAAA\tVVVVxx\n4241\t7708\t1\t1\t1\t1\t41\t241\t241\t4241\t4241\t82\t83\tDHAAAA\tMKLAAA\tAAAAxx\n5691\t7709\t1\t3\t1\t11\t91\t691\t1691\t691\t5691\t182\t183\tXKAAAA\tNKLAAA\tHHHHxx\n7731\t7710\t1\t3\t1\t11\t31\t731\t1731\t2731\t7731\t62\t63\tJLAAAA\tOKLAAA\tOOOOxx\n249\t7711\t1\t1\t9\t9\t49\t249\t249\t249\t249\t98\t99\tPJAAAA\tPKLAAA\tVVVVxx\n1731\t7712\t1\t3\t1\t11\t31\t731\t1731\t1731\t1731\t62\t63\tPOAAAA\tQKLAAA\tAAAAxx\n8716\t7713\t0\t0\t6\t16\t16\t716\t716\t3716\t8716\t32\t33\tGXAAAA\tRKLAAA\tHHHHxx\n2670\t7714\t0\t2\t0\t10\t70\t670\t670\t2670\t2670\t140\t141\tSYAAAA\tSKLAAA\tOOOOxx\n4654\t7715\t0\t2\t4\t14\t54\t654\t654\t4654\t4654\t108\t109\tAXAAAA\tTKLAAA\tVVVVxx\n1027\t7716\t1\t3\t7\t7\t27\t27\t1027\t1027\t1027\t54\t55\tNNAAAA\tUKLAAA\tAAAAxx\n1099\t7717\t1\t3\t9\t19\t99\t99\t1099\t1099\t1099\t198\t199\tHQAAAA\tVKLAAA\tHHHHxx\n3617\t7718\t1\t1\t7\t17\t17\t617\t1617\t3617\t3617\t34\t35\tDJAAAA\tWKLAAA\tOOOOxx\n4330\t7719\t0\t2\t0\t10\t30\t330\t330\t4330\t4330\t60\t61\tOKAAAA\tXKLAAA\tVVVVxx\n9750\t7720\t0\t2\t0\t10\t50\t750\t1750\t4750\t9750\t100\t101\tALAAAA\tYKLAAA\tAAAAxx\n467\t7721\t1\t3\t7\t7\t67\t467\t467\t467\t467\t134\t135\tZRAAAA\tZKLAAA\tHHHHxx\n8525\t7722\t1\t1\t5\t5\t25\t525\t525\t3525\t8525\t50\t51\tXPAAAA\tALLAAA\tOOOOxx\n5990\t7723\t0\t2\t0\t10\t90\t990\t1990\t990\t5990\t180\t181\tKWAAAA\tBLLAAA\tVVVVxx\n4839\t7724\t1\t3\t9\t19\t39\t839\t839\t4839\t4839\t78\t79\tDEAAAA\tCLLAAA\tAAAAxx\n9914\t7725\t0\t2\t4\t14\t14\t914\t1914\t4914\t9914\t28\t29\tIRAAAA\tDLLAAA\tHHHHxx\n7047\t7726\t1\t3\t7\t7\t47\t47\t1047\t2047\t7047\t94\t95\tBLAAAA\tELLAAA\tOOOOxx\n874\t7727\t0\t2\t4\t14\t74\t874\t874\t874\t874\t148\t149\tQHAAAA\tFLLAAA\tVVVVxx\n6061\t7728\t1\t1\t1\t1\t61\t61\t61\t1061\t6061\t122\t123\tDZAAAA\tGLLAAA\tAAAAxx\n5491\t7729\t1\t3\t1\t11\t91\t491\t1491\t491\t5491\t182\t183\tFDAAAA\tHLLAAA\tHHHHxx\n4344\t7730\t0\t0\t4\t4\t44\t344\t344\t4344\t4344\t88\t89\tCLAAAA\tILLAAA\tOOOOxx\n1281\t7731\t1\t1\t1\t1\t81\t281\t1281\t1281\t1281\t162\t163\tHXAAAA\tJLLAAA\tVVVVxx\n3597\t7732\t1\t1\t7\t17\t97\t597\t1597\t3597\t3597\t194\t195\tJIAAAA\tKLLAAA\tAAAAxx\n4992\t7733\t0\t0\t2\t12\t92\t992\t992\t4992\t4992\t184\t185\tAKAAAA\tLLLAAA\tHHHHxx\n3849\t7734\t1\t1\t9\t9\t49\t849\t1849\t3849\t3849\t98\t99\tBSAAAA\tMLLAAA\tOOOOxx\n2655\t7735\t1\t3\t5\t15\t55\t655\t655\t2655\t2655\t110\t111\tDYAAAA\tNLLAAA\tVVVVxx\n147\t7736\t1\t3\t7\t7\t47\t147\t147\t147\t147\t94\t95\tRFAAAA\tOLLAAA\tAAAAxx\n9110\t7737\t0\t2\t0\t10\t10\t110\t1110\t4110\t9110\t20\t21\tKMAAAA\tPLLAAA\tHHHHxx\n1637\t7738\t1\t1\t7\t17\t37\t637\t1637\t1637\t1637\t74\t75\tZKAAAA\tQLLAAA\tOOOOxx\n9826\t7739\t0\t2\t6\t6\t26\t826\t1826\t4826\t9826\t52\t53\tYNAAAA\tRLLAAA\tVVVVxx\n5957\t7740\t1\t1\t7\t17\t57\t957\t1957\t957\t5957\t114\t115\tDVAAAA\tSLLAAA\tAAAAxx\n6932\t7741\t0\t0\t2\t12\t32\t932\t932\t1932\t6932\t64\t65\tQGAAAA\tTLLAAA\tHHHHxx\n9684\t7742\t0\t0\t4\t4\t84\t684\t1684\t4684\t9684\t168\t169\tMIAAAA\tULLAAA\tOOOOxx\n4653\t7743\t1\t1\t3\t13\t53\t653\t653\t4653\t4653\t106\t107\tZWAAAA\tVLLAAA\tVVVVxx\n8065\t7744\t1\t1\t5\t5\t65\t65\t65\t3065\t8065\t130\t131\tFYAAAA\tWLLAAA\tAAAAxx\n1202\t7745\t0\t2\t2\t2\t2\t202\t1202\t1202\t1202\t4\t5\tGUAAAA\tXLLAAA\tHHHHxx\n9214\t7746\t0\t2\t4\t14\t14\t214\t1214\t4214\t9214\t28\t29\tKQAAAA\tYLLAAA\tOOOOxx\n196\t7747\t0\t0\t6\t16\t96\t196\t196\t196\t196\t192\t193\tOHAAAA\tZLLAAA\tVVVVxx\n4486\t7748\t0\t2\t6\t6\t86\t486\t486\t4486\t4486\t172\t173\tOQAAAA\tAMLAAA\tAAAAxx\n2585\t7749\t1\t1\t5\t5\t85\t585\t585\t2585\t2585\t170\t171\tLVAAAA\tBMLAAA\tHHHHxx\n2464\t7750\t0\t0\t4\t4\t64\t464\t464\t2464\t2464\t128\t129\tUQAAAA\tCMLAAA\tOOOOxx\n3467\t7751\t1\t3\t7\t7\t67\t467\t1467\t3467\t3467\t134\t135\tJDAAAA\tDMLAAA\tVVVVxx\n9295\t7752\t1\t3\t5\t15\t95\t295\t1295\t4295\t9295\t190\t191\tNTAAAA\tEMLAAA\tAAAAxx\n517\t7753\t1\t1\t7\t17\t17\t517\t517\t517\t517\t34\t35\tXTAAAA\tFMLAAA\tHHHHxx\n6870\t7754\t0\t2\t0\t10\t70\t870\t870\t1870\t6870\t140\t141\tGEAAAA\tGMLAAA\tOOOOxx\n5732\t7755\t0\t0\t2\t12\t32\t732\t1732\t732\t5732\t64\t65\tMMAAAA\tHMLAAA\tVVVVxx\n9376\t7756\t0\t0\t6\t16\t76\t376\t1376\t4376\t9376\t152\t153\tQWAAAA\tIMLAAA\tAAAAxx\n838\t7757\t0\t2\t8\t18\t38\t838\t838\t838\t838\t76\t77\tGGAAAA\tJMLAAA\tHHHHxx\n9254\t7758\t0\t2\t4\t14\t54\t254\t1254\t4254\t9254\t108\t109\tYRAAAA\tKMLAAA\tOOOOxx\n8879\t7759\t1\t3\t9\t19\t79\t879\t879\t3879\t8879\t158\t159\tNDAAAA\tLMLAAA\tVVVVxx\n6281\t7760\t1\t1\t1\t1\t81\t281\t281\t1281\t6281\t162\t163\tPHAAAA\tMMLAAA\tAAAAxx\n8216\t7761\t0\t0\t6\t16\t16\t216\t216\t3216\t8216\t32\t33\tAEAAAA\tNMLAAA\tHHHHxx\n9213\t7762\t1\t1\t3\t13\t13\t213\t1213\t4213\t9213\t26\t27\tJQAAAA\tOMLAAA\tOOOOxx\n7234\t7763\t0\t2\t4\t14\t34\t234\t1234\t2234\t7234\t68\t69\tGSAAAA\tPMLAAA\tVVVVxx\n5692\t7764\t0\t0\t2\t12\t92\t692\t1692\t692\t5692\t184\t185\tYKAAAA\tQMLAAA\tAAAAxx\n693\t7765\t1\t1\t3\t13\t93\t693\t693\t693\t693\t186\t187\tRAAAAA\tRMLAAA\tHHHHxx\n9050\t7766\t0\t2\t0\t10\t50\t50\t1050\t4050\t9050\t100\t101\tCKAAAA\tSMLAAA\tOOOOxx\n3623\t7767\t1\t3\t3\t3\t23\t623\t1623\t3623\t3623\t46\t47\tJJAAAA\tTMLAAA\tVVVVxx\n2130\t7768\t0\t2\t0\t10\t30\t130\t130\t2130\t2130\t60\t61\tYDAAAA\tUMLAAA\tAAAAxx\n2514\t7769\t0\t2\t4\t14\t14\t514\t514\t2514\t2514\t28\t29\tSSAAAA\tVMLAAA\tHHHHxx\n1812\t7770\t0\t0\t2\t12\t12\t812\t1812\t1812\t1812\t24\t25\tSRAAAA\tWMLAAA\tOOOOxx\n9037\t7771\t1\t1\t7\t17\t37\t37\t1037\t4037\t9037\t74\t75\tPJAAAA\tXMLAAA\tVVVVxx\n5054\t7772\t0\t2\t4\t14\t54\t54\t1054\t54\t5054\t108\t109\tKMAAAA\tYMLAAA\tAAAAxx\n7801\t7773\t1\t1\t1\t1\t1\t801\t1801\t2801\t7801\t2\t3\tBOAAAA\tZMLAAA\tHHHHxx\n7939\t7774\t1\t3\t9\t19\t39\t939\t1939\t2939\t7939\t78\t79\tJTAAAA\tANLAAA\tOOOOxx\n7374\t7775\t0\t2\t4\t14\t74\t374\t1374\t2374\t7374\t148\t149\tQXAAAA\tBNLAAA\tVVVVxx\n1058\t7776\t0\t2\t8\t18\t58\t58\t1058\t1058\t1058\t116\t117\tSOAAAA\tCNLAAA\tAAAAxx\n1972\t7777\t0\t0\t2\t12\t72\t972\t1972\t1972\t1972\t144\t145\tWXAAAA\tDNLAAA\tHHHHxx\n3741\t7778\t1\t1\t1\t1\t41\t741\t1741\t3741\t3741\t82\t83\tXNAAAA\tENLAAA\tOOOOxx\n2227\t7779\t1\t3\t7\t7\t27\t227\t227\t2227\t2227\t54\t55\tRHAAAA\tFNLAAA\tVVVVxx\n304\t7780\t0\t0\t4\t4\t4\t304\t304\t304\t304\t8\t9\tSLAAAA\tGNLAAA\tAAAAxx\n4914\t7781\t0\t2\t4\t14\t14\t914\t914\t4914\t4914\t28\t29\tAHAAAA\tHNLAAA\tHHHHxx\n2428\t7782\t0\t0\t8\t8\t28\t428\t428\t2428\t2428\t56\t57\tKPAAAA\tINLAAA\tOOOOxx\n6660\t7783\t0\t0\t0\t0\t60\t660\t660\t1660\t6660\t120\t121\tEWAAAA\tJNLAAA\tVVVVxx\n2676\t7784\t0\t0\t6\t16\t76\t676\t676\t2676\t2676\t152\t153\tYYAAAA\tKNLAAA\tAAAAxx\n2454\t7785\t0\t2\t4\t14\t54\t454\t454\t2454\t2454\t108\t109\tKQAAAA\tLNLAAA\tHHHHxx\n3798\t7786\t0\t2\t8\t18\t98\t798\t1798\t3798\t3798\t196\t197\tCQAAAA\tMNLAAA\tOOOOxx\n1341\t7787\t1\t1\t1\t1\t41\t341\t1341\t1341\t1341\t82\t83\tPZAAAA\tNNLAAA\tVVVVxx\n1611\t7788\t1\t3\t1\t11\t11\t611\t1611\t1611\t1611\t22\t23\tZJAAAA\tONLAAA\tAAAAxx\n2681\t7789\t1\t1\t1\t1\t81\t681\t681\t2681\t2681\t162\t163\tDZAAAA\tPNLAAA\tHHHHxx\n7292\t7790\t0\t0\t2\t12\t92\t292\t1292\t2292\t7292\t184\t185\tMUAAAA\tQNLAAA\tOOOOxx\n7775\t7791\t1\t3\t5\t15\t75\t775\t1775\t2775\t7775\t150\t151\tBNAAAA\tRNLAAA\tVVVVxx\n794\t7792\t0\t2\t4\t14\t94\t794\t794\t794\t794\t188\t189\tOEAAAA\tSNLAAA\tAAAAxx\n8709\t7793\t1\t1\t9\t9\t9\t709\t709\t3709\t8709\t18\t19\tZWAAAA\tTNLAAA\tHHHHxx\n1901\t7794\t1\t1\t1\t1\t1\t901\t1901\t1901\t1901\t2\t3\tDVAAAA\tUNLAAA\tOOOOxx\n3089\t7795\t1\t1\t9\t9\t89\t89\t1089\t3089\t3089\t178\t179\tVOAAAA\tVNLAAA\tVVVVxx\n7797\t7796\t1\t1\t7\t17\t97\t797\t1797\t2797\t7797\t194\t195\tXNAAAA\tWNLAAA\tAAAAxx\n6070\t7797\t0\t2\t0\t10\t70\t70\t70\t1070\t6070\t140\t141\tMZAAAA\tXNLAAA\tHHHHxx\n2191\t7798\t1\t3\t1\t11\t91\t191\t191\t2191\t2191\t182\t183\tHGAAAA\tYNLAAA\tOOOOxx\n3497\t7799\t1\t1\t7\t17\t97\t497\t1497\t3497\t3497\t194\t195\tNEAAAA\tZNLAAA\tVVVVxx\n8302\t7800\t0\t2\t2\t2\t2\t302\t302\t3302\t8302\t4\t5\tIHAAAA\tAOLAAA\tAAAAxx\n4365\t7801\t1\t1\t5\t5\t65\t365\t365\t4365\t4365\t130\t131\tXLAAAA\tBOLAAA\tHHHHxx\n3588\t7802\t0\t0\t8\t8\t88\t588\t1588\t3588\t3588\t176\t177\tAIAAAA\tCOLAAA\tOOOOxx\n8292\t7803\t0\t0\t2\t12\t92\t292\t292\t3292\t8292\t184\t185\tYGAAAA\tDOLAAA\tVVVVxx\n4696\t7804\t0\t0\t6\t16\t96\t696\t696\t4696\t4696\t192\t193\tQYAAAA\tEOLAAA\tAAAAxx\n5641\t7805\t1\t1\t1\t1\t41\t641\t1641\t641\t5641\t82\t83\tZIAAAA\tFOLAAA\tHHHHxx\n9386\t7806\t0\t2\t6\t6\t86\t386\t1386\t4386\t9386\t172\t173\tAXAAAA\tGOLAAA\tOOOOxx\n507\t7807\t1\t3\t7\t7\t7\t507\t507\t507\t507\t14\t15\tNTAAAA\tHOLAAA\tVVVVxx\n7201\t7808\t1\t1\t1\t1\t1\t201\t1201\t2201\t7201\t2\t3\tZQAAAA\tIOLAAA\tAAAAxx\n7785\t7809\t1\t1\t5\t5\t85\t785\t1785\t2785\t7785\t170\t171\tLNAAAA\tJOLAAA\tHHHHxx\n463\t7810\t1\t3\t3\t3\t63\t463\t463\t463\t463\t126\t127\tVRAAAA\tKOLAAA\tOOOOxx\n6656\t7811\t0\t0\t6\t16\t56\t656\t656\t1656\t6656\t112\t113\tAWAAAA\tLOLAAA\tVVVVxx\n807\t7812\t1\t3\t7\t7\t7\t807\t807\t807\t807\t14\t15\tBFAAAA\tMOLAAA\tAAAAxx\n7278\t7813\t0\t2\t8\t18\t78\t278\t1278\t2278\t7278\t156\t157\tYTAAAA\tNOLAAA\tHHHHxx\n6237\t7814\t1\t1\t7\t17\t37\t237\t237\t1237\t6237\t74\t75\tXFAAAA\tOOLAAA\tOOOOxx\n7671\t7815\t1\t3\t1\t11\t71\t671\t1671\t2671\t7671\t142\t143\tBJAAAA\tPOLAAA\tVVVVxx\n2235\t7816\t1\t3\t5\t15\t35\t235\t235\t2235\t2235\t70\t71\tZHAAAA\tQOLAAA\tAAAAxx\n4042\t7817\t0\t2\t2\t2\t42\t42\t42\t4042\t4042\t84\t85\tMZAAAA\tROLAAA\tHHHHxx\n5273\t7818\t1\t1\t3\t13\t73\t273\t1273\t273\t5273\t146\t147\tVUAAAA\tSOLAAA\tOOOOxx\n7557\t7819\t1\t1\t7\t17\t57\t557\t1557\t2557\t7557\t114\t115\tREAAAA\tTOLAAA\tVVVVxx\n4007\t7820\t1\t3\t7\t7\t7\t7\t7\t4007\t4007\t14\t15\tDYAAAA\tUOLAAA\tAAAAxx\n1428\t7821\t0\t0\t8\t8\t28\t428\t1428\t1428\t1428\t56\t57\tYCAAAA\tVOLAAA\tHHHHxx\n9739\t7822\t1\t3\t9\t19\t39\t739\t1739\t4739\t9739\t78\t79\tPKAAAA\tWOLAAA\tOOOOxx\n7836\t7823\t0\t0\t6\t16\t36\t836\t1836\t2836\t7836\t72\t73\tKPAAAA\tXOLAAA\tVVVVxx\n1777\t7824\t1\t1\t7\t17\t77\t777\t1777\t1777\t1777\t154\t155\tJQAAAA\tYOLAAA\tAAAAxx\n5192\t7825\t0\t0\t2\t12\t92\t192\t1192\t192\t5192\t184\t185\tSRAAAA\tZOLAAA\tHHHHxx\n7236\t7826\t0\t0\t6\t16\t36\t236\t1236\t2236\t7236\t72\t73\tISAAAA\tAPLAAA\tOOOOxx\n1623\t7827\t1\t3\t3\t3\t23\t623\t1623\t1623\t1623\t46\t47\tLKAAAA\tBPLAAA\tVVVVxx\n8288\t7828\t0\t0\t8\t8\t88\t288\t288\t3288\t8288\t176\t177\tUGAAAA\tCPLAAA\tAAAAxx\n2827\t7829\t1\t3\t7\t7\t27\t827\t827\t2827\t2827\t54\t55\tTEAAAA\tDPLAAA\tHHHHxx\n458\t7830\t0\t2\t8\t18\t58\t458\t458\t458\t458\t116\t117\tQRAAAA\tEPLAAA\tOOOOxx\n1818\t7831\t0\t2\t8\t18\t18\t818\t1818\t1818\t1818\t36\t37\tYRAAAA\tFPLAAA\tVVVVxx\n6837\t7832\t1\t1\t7\t17\t37\t837\t837\t1837\t6837\t74\t75\tZCAAAA\tGPLAAA\tAAAAxx\n7825\t7833\t1\t1\t5\t5\t25\t825\t1825\t2825\t7825\t50\t51\tZOAAAA\tHPLAAA\tHHHHxx\n9146\t7834\t0\t2\t6\t6\t46\t146\t1146\t4146\t9146\t92\t93\tUNAAAA\tIPLAAA\tOOOOxx\n8451\t7835\t1\t3\t1\t11\t51\t451\t451\t3451\t8451\t102\t103\tBNAAAA\tJPLAAA\tVVVVxx\n6438\t7836\t0\t2\t8\t18\t38\t438\t438\t1438\t6438\t76\t77\tQNAAAA\tKPLAAA\tAAAAxx\n4020\t7837\t0\t0\t0\t0\t20\t20\t20\t4020\t4020\t40\t41\tQYAAAA\tLPLAAA\tHHHHxx\n4068\t7838\t0\t0\t8\t8\t68\t68\t68\t4068\t4068\t136\t137\tMAAAAA\tMPLAAA\tOOOOxx\n2411\t7839\t1\t3\t1\t11\t11\t411\t411\t2411\t2411\t22\t23\tTOAAAA\tNPLAAA\tVVVVxx\n6222\t7840\t0\t2\t2\t2\t22\t222\t222\t1222\t6222\t44\t45\tIFAAAA\tOPLAAA\tAAAAxx\n3164\t7841\t0\t0\t4\t4\t64\t164\t1164\t3164\t3164\t128\t129\tSRAAAA\tPPLAAA\tHHHHxx\n311\t7842\t1\t3\t1\t11\t11\t311\t311\t311\t311\t22\t23\tZLAAAA\tQPLAAA\tOOOOxx\n5683\t7843\t1\t3\t3\t3\t83\t683\t1683\t683\t5683\t166\t167\tPKAAAA\tRPLAAA\tVVVVxx\n3993\t7844\t1\t1\t3\t13\t93\t993\t1993\t3993\t3993\t186\t187\tPXAAAA\tSPLAAA\tAAAAxx\n9897\t7845\t1\t1\t7\t17\t97\t897\t1897\t4897\t9897\t194\t195\tRQAAAA\tTPLAAA\tHHHHxx\n6609\t7846\t1\t1\t9\t9\t9\t609\t609\t1609\t6609\t18\t19\tFUAAAA\tUPLAAA\tOOOOxx\n1362\t7847\t0\t2\t2\t2\t62\t362\t1362\t1362\t1362\t124\t125\tKAAAAA\tVPLAAA\tVVVVxx\n3918\t7848\t0\t2\t8\t18\t18\t918\t1918\t3918\t3918\t36\t37\tSUAAAA\tWPLAAA\tAAAAxx\n7376\t7849\t0\t0\t6\t16\t76\t376\t1376\t2376\t7376\t152\t153\tSXAAAA\tXPLAAA\tHHHHxx\n6996\t7850\t0\t0\t6\t16\t96\t996\t996\t1996\t6996\t192\t193\tCJAAAA\tYPLAAA\tOOOOxx\n9567\t7851\t1\t3\t7\t7\t67\t567\t1567\t4567\t9567\t134\t135\tZDAAAA\tZPLAAA\tVVVVxx\n7525\t7852\t1\t1\t5\t5\t25\t525\t1525\t2525\t7525\t50\t51\tLDAAAA\tAQLAAA\tAAAAxx\n9069\t7853\t1\t1\t9\t9\t69\t69\t1069\t4069\t9069\t138\t139\tVKAAAA\tBQLAAA\tHHHHxx\n9999\t7854\t1\t3\t9\t19\t99\t999\t1999\t4999\t9999\t198\t199\tPUAAAA\tCQLAAA\tOOOOxx\n9237\t7855\t1\t1\t7\t17\t37\t237\t1237\t4237\t9237\t74\t75\tHRAAAA\tDQLAAA\tVVVVxx\n8441\t7856\t1\t1\t1\t1\t41\t441\t441\t3441\t8441\t82\t83\tRMAAAA\tEQLAAA\tAAAAxx\n6769\t7857\t1\t1\t9\t9\t69\t769\t769\t1769\t6769\t138\t139\tJAAAAA\tFQLAAA\tHHHHxx\n6073\t7858\t1\t1\t3\t13\t73\t73\t73\t1073\t6073\t146\t147\tPZAAAA\tGQLAAA\tOOOOxx\n1091\t7859\t1\t3\t1\t11\t91\t91\t1091\t1091\t1091\t182\t183\tZPAAAA\tHQLAAA\tVVVVxx\n9886\t7860\t0\t2\t6\t6\t86\t886\t1886\t4886\t9886\t172\t173\tGQAAAA\tIQLAAA\tAAAAxx\n3971\t7861\t1\t3\t1\t11\t71\t971\t1971\t3971\t3971\t142\t143\tTWAAAA\tJQLAAA\tHHHHxx\n4621\t7862\t1\t1\t1\t1\t21\t621\t621\t4621\t4621\t42\t43\tTVAAAA\tKQLAAA\tOOOOxx\n3120\t7863\t0\t0\t0\t0\t20\t120\t1120\t3120\t3120\t40\t41\tAQAAAA\tLQLAAA\tVVVVxx\n9773\t7864\t1\t1\t3\t13\t73\t773\t1773\t4773\t9773\t146\t147\tXLAAAA\tMQLAAA\tAAAAxx\n8712\t7865\t0\t0\t2\t12\t12\t712\t712\t3712\t8712\t24\t25\tCXAAAA\tNQLAAA\tHHHHxx\n801\t7866\t1\t1\t1\t1\t1\t801\t801\t801\t801\t2\t3\tVEAAAA\tOQLAAA\tOOOOxx\n9478\t7867\t0\t2\t8\t18\t78\t478\t1478\t4478\t9478\t156\t157\tOAAAAA\tPQLAAA\tVVVVxx\n3466\t7868\t0\t2\t6\t6\t66\t466\t1466\t3466\t3466\t132\t133\tIDAAAA\tQQLAAA\tAAAAxx\n6326\t7869\t0\t2\t6\t6\t26\t326\t326\t1326\t6326\t52\t53\tIJAAAA\tRQLAAA\tHHHHxx\n1723\t7870\t1\t3\t3\t3\t23\t723\t1723\t1723\t1723\t46\t47\tHOAAAA\tSQLAAA\tOOOOxx\n4978\t7871\t0\t2\t8\t18\t78\t978\t978\t4978\t4978\t156\t157\tMJAAAA\tTQLAAA\tVVVVxx\n2311\t7872\t1\t3\t1\t11\t11\t311\t311\t2311\t2311\t22\t23\tXKAAAA\tUQLAAA\tAAAAxx\n9532\t7873\t0\t0\t2\t12\t32\t532\t1532\t4532\t9532\t64\t65\tQCAAAA\tVQLAAA\tHHHHxx\n3680\t7874\t0\t0\t0\t0\t80\t680\t1680\t3680\t3680\t160\t161\tOLAAAA\tWQLAAA\tOOOOxx\n1244\t7875\t0\t0\t4\t4\t44\t244\t1244\t1244\t1244\t88\t89\tWVAAAA\tXQLAAA\tVVVVxx\n3821\t7876\t1\t1\t1\t1\t21\t821\t1821\t3821\t3821\t42\t43\tZQAAAA\tYQLAAA\tAAAAxx\n9586\t7877\t0\t2\t6\t6\t86\t586\t1586\t4586\t9586\t172\t173\tSEAAAA\tZQLAAA\tHHHHxx\n3894\t7878\t0\t2\t4\t14\t94\t894\t1894\t3894\t3894\t188\t189\tUTAAAA\tARLAAA\tOOOOxx\n6169\t7879\t1\t1\t9\t9\t69\t169\t169\t1169\t6169\t138\t139\tHDAAAA\tBRLAAA\tVVVVxx\n5919\t7880\t1\t3\t9\t19\t19\t919\t1919\t919\t5919\t38\t39\tRTAAAA\tCRLAAA\tAAAAxx\n4187\t7881\t1\t3\t7\t7\t87\t187\t187\t4187\t4187\t174\t175\tBFAAAA\tDRLAAA\tHHHHxx\n5477\t7882\t1\t1\t7\t17\t77\t477\t1477\t477\t5477\t154\t155\tRCAAAA\tERLAAA\tOOOOxx\n2806\t7883\t0\t2\t6\t6\t6\t806\t806\t2806\t2806\t12\t13\tYDAAAA\tFRLAAA\tVVVVxx\n8158\t7884\t0\t2\t8\t18\t58\t158\t158\t3158\t8158\t116\t117\tUBAAAA\tGRLAAA\tAAAAxx\n7130\t7885\t0\t2\t0\t10\t30\t130\t1130\t2130\t7130\t60\t61\tGOAAAA\tHRLAAA\tHHHHxx\n7133\t7886\t1\t1\t3\t13\t33\t133\t1133\t2133\t7133\t66\t67\tJOAAAA\tIRLAAA\tOOOOxx\n6033\t7887\t1\t1\t3\t13\t33\t33\t33\t1033\t6033\t66\t67\tBYAAAA\tJRLAAA\tVVVVxx\n2415\t7888\t1\t3\t5\t15\t15\t415\t415\t2415\t2415\t30\t31\tXOAAAA\tKRLAAA\tAAAAxx\n8091\t7889\t1\t3\t1\t11\t91\t91\t91\t3091\t8091\t182\t183\tFZAAAA\tLRLAAA\tHHHHxx\n8347\t7890\t1\t3\t7\t7\t47\t347\t347\t3347\t8347\t94\t95\tBJAAAA\tMRLAAA\tOOOOxx\n7879\t7891\t1\t3\t9\t19\t79\t879\t1879\t2879\t7879\t158\t159\tBRAAAA\tNRLAAA\tVVVVxx\n9360\t7892\t0\t0\t0\t0\t60\t360\t1360\t4360\t9360\t120\t121\tAWAAAA\tORLAAA\tAAAAxx\n3369\t7893\t1\t1\t9\t9\t69\t369\t1369\t3369\t3369\t138\t139\tPZAAAA\tPRLAAA\tHHHHxx\n8536\t7894\t0\t0\t6\t16\t36\t536\t536\t3536\t8536\t72\t73\tIQAAAA\tQRLAAA\tOOOOxx\n8628\t7895\t0\t0\t8\t8\t28\t628\t628\t3628\t8628\t56\t57\tWTAAAA\tRRLAAA\tVVVVxx\n1580\t7896\t0\t0\t0\t0\t80\t580\t1580\t1580\t1580\t160\t161\tUIAAAA\tSRLAAA\tAAAAxx\n705\t7897\t1\t1\t5\t5\t5\t705\t705\t705\t705\t10\t11\tDBAAAA\tTRLAAA\tHHHHxx\n4650\t7898\t0\t2\t0\t10\t50\t650\t650\t4650\t4650\t100\t101\tWWAAAA\tURLAAA\tOOOOxx\n9165\t7899\t1\t1\t5\t5\t65\t165\t1165\t4165\t9165\t130\t131\tNOAAAA\tVRLAAA\tVVVVxx\n4820\t7900\t0\t0\t0\t0\t20\t820\t820\t4820\t4820\t40\t41\tKDAAAA\tWRLAAA\tAAAAxx\n3538\t7901\t0\t2\t8\t18\t38\t538\t1538\t3538\t3538\t76\t77\tCGAAAA\tXRLAAA\tHHHHxx\n9947\t7902\t1\t3\t7\t7\t47\t947\t1947\t4947\t9947\t94\t95\tPSAAAA\tYRLAAA\tOOOOxx\n4954\t7903\t0\t2\t4\t14\t54\t954\t954\t4954\t4954\t108\t109\tOIAAAA\tZRLAAA\tVVVVxx\n1104\t7904\t0\t0\t4\t4\t4\t104\t1104\t1104\t1104\t8\t9\tMQAAAA\tASLAAA\tAAAAxx\n8455\t7905\t1\t3\t5\t15\t55\t455\t455\t3455\t8455\t110\t111\tFNAAAA\tBSLAAA\tHHHHxx\n8307\t7906\t1\t3\t7\t7\t7\t307\t307\t3307\t8307\t14\t15\tNHAAAA\tCSLAAA\tOOOOxx\n9203\t7907\t1\t3\t3\t3\t3\t203\t1203\t4203\t9203\t6\t7\tZPAAAA\tDSLAAA\tVVVVxx\n7565\t7908\t1\t1\t5\t5\t65\t565\t1565\t2565\t7565\t130\t131\tZEAAAA\tESLAAA\tAAAAxx\n7745\t7909\t1\t1\t5\t5\t45\t745\t1745\t2745\t7745\t90\t91\tXLAAAA\tFSLAAA\tHHHHxx\n1787\t7910\t1\t3\t7\t7\t87\t787\t1787\t1787\t1787\t174\t175\tTQAAAA\tGSLAAA\tOOOOxx\n4861\t7911\t1\t1\t1\t1\t61\t861\t861\t4861\t4861\t122\t123\tZEAAAA\tHSLAAA\tVVVVxx\n5183\t7912\t1\t3\t3\t3\t83\t183\t1183\t183\t5183\t166\t167\tJRAAAA\tISLAAA\tAAAAxx\n529\t7913\t1\t1\t9\t9\t29\t529\t529\t529\t529\t58\t59\tJUAAAA\tJSLAAA\tHHHHxx\n2470\t7914\t0\t2\t0\t10\t70\t470\t470\t2470\t2470\t140\t141\tARAAAA\tKSLAAA\tOOOOxx\n1267\t7915\t1\t3\t7\t7\t67\t267\t1267\t1267\t1267\t134\t135\tTWAAAA\tLSLAAA\tVVVVxx\n2059\t7916\t1\t3\t9\t19\t59\t59\t59\t2059\t2059\t118\t119\tFBAAAA\tMSLAAA\tAAAAxx\n1862\t7917\t0\t2\t2\t2\t62\t862\t1862\t1862\t1862\t124\t125\tQTAAAA\tNSLAAA\tHHHHxx\n7382\t7918\t0\t2\t2\t2\t82\t382\t1382\t2382\t7382\t164\t165\tYXAAAA\tOSLAAA\tOOOOxx\n4796\t7919\t0\t0\t6\t16\t96\t796\t796\t4796\t4796\t192\t193\tMCAAAA\tPSLAAA\tVVVVxx\n2331\t7920\t1\t3\t1\t11\t31\t331\t331\t2331\t2331\t62\t63\tRLAAAA\tQSLAAA\tAAAAxx\n8870\t7921\t0\t2\t0\t10\t70\t870\t870\t3870\t8870\t140\t141\tEDAAAA\tRSLAAA\tHHHHxx\n9581\t7922\t1\t1\t1\t1\t81\t581\t1581\t4581\t9581\t162\t163\tNEAAAA\tSSLAAA\tOOOOxx\n9063\t7923\t1\t3\t3\t3\t63\t63\t1063\t4063\t9063\t126\t127\tPKAAAA\tTSLAAA\tVVVVxx\n2192\t7924\t0\t0\t2\t12\t92\t192\t192\t2192\t2192\t184\t185\tIGAAAA\tUSLAAA\tAAAAxx\n6466\t7925\t0\t2\t6\t6\t66\t466\t466\t1466\t6466\t132\t133\tSOAAAA\tVSLAAA\tHHHHxx\n7096\t7926\t0\t0\t6\t16\t96\t96\t1096\t2096\t7096\t192\t193\tYMAAAA\tWSLAAA\tOOOOxx\n6257\t7927\t1\t1\t7\t17\t57\t257\t257\t1257\t6257\t114\t115\tRGAAAA\tXSLAAA\tVVVVxx\n7009\t7928\t1\t1\t9\t9\t9\t9\t1009\t2009\t7009\t18\t19\tPJAAAA\tYSLAAA\tAAAAxx\n8136\t7929\t0\t0\t6\t16\t36\t136\t136\t3136\t8136\t72\t73\tYAAAAA\tZSLAAA\tHHHHxx\n1854\t7930\t0\t2\t4\t14\t54\t854\t1854\t1854\t1854\t108\t109\tITAAAA\tATLAAA\tOOOOxx\n3644\t7931\t0\t0\t4\t4\t44\t644\t1644\t3644\t3644\t88\t89\tEKAAAA\tBTLAAA\tVVVVxx\n4437\t7932\t1\t1\t7\t17\t37\t437\t437\t4437\t4437\t74\t75\tROAAAA\tCTLAAA\tAAAAxx\n7209\t7933\t1\t1\t9\t9\t9\t209\t1209\t2209\t7209\t18\t19\tHRAAAA\tDTLAAA\tHHHHxx\n1516\t7934\t0\t0\t6\t16\t16\t516\t1516\t1516\t1516\t32\t33\tIGAAAA\tETLAAA\tOOOOxx\n822\t7935\t0\t2\t2\t2\t22\t822\t822\t822\t822\t44\t45\tQFAAAA\tFTLAAA\tVVVVxx\n1778\t7936\t0\t2\t8\t18\t78\t778\t1778\t1778\t1778\t156\t157\tKQAAAA\tGTLAAA\tAAAAxx\n8161\t7937\t1\t1\t1\t1\t61\t161\t161\t3161\t8161\t122\t123\tXBAAAA\tHTLAAA\tHHHHxx\n6030\t7938\t0\t2\t0\t10\t30\t30\t30\t1030\t6030\t60\t61\tYXAAAA\tITLAAA\tOOOOxx\n3515\t7939\t1\t3\t5\t15\t15\t515\t1515\t3515\t3515\t30\t31\tFFAAAA\tJTLAAA\tVVVVxx\n1702\t7940\t0\t2\t2\t2\t2\t702\t1702\t1702\t1702\t4\t5\tMNAAAA\tKTLAAA\tAAAAxx\n2671\t7941\t1\t3\t1\t11\t71\t671\t671\t2671\t2671\t142\t143\tTYAAAA\tLTLAAA\tHHHHxx\n7623\t7942\t1\t3\t3\t3\t23\t623\t1623\t2623\t7623\t46\t47\tFHAAAA\tMTLAAA\tOOOOxx\n9828\t7943\t0\t0\t8\t8\t28\t828\t1828\t4828\t9828\t56\t57\tAOAAAA\tNTLAAA\tVVVVxx\n1888\t7944\t0\t0\t8\t8\t88\t888\t1888\t1888\t1888\t176\t177\tQUAAAA\tOTLAAA\tAAAAxx\n4520\t7945\t0\t0\t0\t0\t20\t520\t520\t4520\t4520\t40\t41\tWRAAAA\tPTLAAA\tHHHHxx\n3461\t7946\t1\t1\t1\t1\t61\t461\t1461\t3461\t3461\t122\t123\tDDAAAA\tQTLAAA\tOOOOxx\n1488\t7947\t0\t0\t8\t8\t88\t488\t1488\t1488\t1488\t176\t177\tGFAAAA\tRTLAAA\tVVVVxx\n7753\t7948\t1\t1\t3\t13\t53\t753\t1753\t2753\t7753\t106\t107\tFMAAAA\tSTLAAA\tAAAAxx\n5525\t7949\t1\t1\t5\t5\t25\t525\t1525\t525\t5525\t50\t51\tNEAAAA\tTTLAAA\tHHHHxx\n5220\t7950\t0\t0\t0\t0\t20\t220\t1220\t220\t5220\t40\t41\tUSAAAA\tUTLAAA\tOOOOxx\n305\t7951\t1\t1\t5\t5\t5\t305\t305\t305\t305\t10\t11\tTLAAAA\tVTLAAA\tVVVVxx\n7883\t7952\t1\t3\t3\t3\t83\t883\t1883\t2883\t7883\t166\t167\tFRAAAA\tWTLAAA\tAAAAxx\n1222\t7953\t0\t2\t2\t2\t22\t222\t1222\t1222\t1222\t44\t45\tAVAAAA\tXTLAAA\tHHHHxx\n8552\t7954\t0\t0\t2\t12\t52\t552\t552\t3552\t8552\t104\t105\tYQAAAA\tYTLAAA\tOOOOxx\n6097\t7955\t1\t1\t7\t17\t97\t97\t97\t1097\t6097\t194\t195\tNAAAAA\tZTLAAA\tVVVVxx\n2298\t7956\t0\t2\t8\t18\t98\t298\t298\t2298\t2298\t196\t197\tKKAAAA\tAULAAA\tAAAAxx\n956\t7957\t0\t0\t6\t16\t56\t956\t956\t956\t956\t112\t113\tUKAAAA\tBULAAA\tHHHHxx\n9351\t7958\t1\t3\t1\t11\t51\t351\t1351\t4351\t9351\t102\t103\tRVAAAA\tCULAAA\tOOOOxx\n6669\t7959\t1\t1\t9\t9\t69\t669\t669\t1669\t6669\t138\t139\tNWAAAA\tDULAAA\tVVVVxx\n9383\t7960\t1\t3\t3\t3\t83\t383\t1383\t4383\t9383\t166\t167\tXWAAAA\tEULAAA\tAAAAxx\n1607\t7961\t1\t3\t7\t7\t7\t607\t1607\t1607\t1607\t14\t15\tVJAAAA\tFULAAA\tHHHHxx\n812\t7962\t0\t0\t2\t12\t12\t812\t812\t812\t812\t24\t25\tGFAAAA\tGULAAA\tOOOOxx\n2109\t7963\t1\t1\t9\t9\t9\t109\t109\t2109\t2109\t18\t19\tDDAAAA\tHULAAA\tVVVVxx\n207\t7964\t1\t3\t7\t7\t7\t207\t207\t207\t207\t14\t15\tZHAAAA\tIULAAA\tAAAAxx\n7124\t7965\t0\t0\t4\t4\t24\t124\t1124\t2124\t7124\t48\t49\tAOAAAA\tJULAAA\tHHHHxx\n9333\t7966\t1\t1\t3\t13\t33\t333\t1333\t4333\t9333\t66\t67\tZUAAAA\tKULAAA\tOOOOxx\n3262\t7967\t0\t2\t2\t2\t62\t262\t1262\t3262\t3262\t124\t125\tMVAAAA\tLULAAA\tVVVVxx\n1070\t7968\t0\t2\t0\t10\t70\t70\t1070\t1070\t1070\t140\t141\tEPAAAA\tMULAAA\tAAAAxx\n7579\t7969\t1\t3\t9\t19\t79\t579\t1579\t2579\t7579\t158\t159\tNFAAAA\tNULAAA\tHHHHxx\n9283\t7970\t1\t3\t3\t3\t83\t283\t1283\t4283\t9283\t166\t167\tBTAAAA\tOULAAA\tOOOOxx\n4917\t7971\t1\t1\t7\t17\t17\t917\t917\t4917\t4917\t34\t35\tDHAAAA\tPULAAA\tVVVVxx\n1328\t7972\t0\t0\t8\t8\t28\t328\t1328\t1328\t1328\t56\t57\tCZAAAA\tQULAAA\tAAAAxx\n3042\t7973\t0\t2\t2\t2\t42\t42\t1042\t3042\t3042\t84\t85\tANAAAA\tRULAAA\tHHHHxx\n8352\t7974\t0\t0\t2\t12\t52\t352\t352\t3352\t8352\t104\t105\tGJAAAA\tSULAAA\tOOOOxx\n2710\t7975\t0\t2\t0\t10\t10\t710\t710\t2710\t2710\t20\t21\tGAAAAA\tTULAAA\tVVVVxx\n3330\t7976\t0\t2\t0\t10\t30\t330\t1330\t3330\t3330\t60\t61\tCYAAAA\tUULAAA\tAAAAxx\n2822\t7977\t0\t2\t2\t2\t22\t822\t822\t2822\t2822\t44\t45\tOEAAAA\tVULAAA\tHHHHxx\n5627\t7978\t1\t3\t7\t7\t27\t627\t1627\t627\t5627\t54\t55\tLIAAAA\tWULAAA\tOOOOxx\n7848\t7979\t0\t0\t8\t8\t48\t848\t1848\t2848\t7848\t96\t97\tWPAAAA\tXULAAA\tVVVVxx\n7384\t7980\t0\t0\t4\t4\t84\t384\t1384\t2384\t7384\t168\t169\tAYAAAA\tYULAAA\tAAAAxx\n727\t7981\t1\t3\t7\t7\t27\t727\t727\t727\t727\t54\t55\tZBAAAA\tZULAAA\tHHHHxx\n9926\t7982\t0\t2\t6\t6\t26\t926\t1926\t4926\t9926\t52\t53\tURAAAA\tAVLAAA\tOOOOxx\n2647\t7983\t1\t3\t7\t7\t47\t647\t647\t2647\t2647\t94\t95\tVXAAAA\tBVLAAA\tVVVVxx\n6416\t7984\t0\t0\t6\t16\t16\t416\t416\t1416\t6416\t32\t33\tUMAAAA\tCVLAAA\tAAAAxx\n8751\t7985\t1\t3\t1\t11\t51\t751\t751\t3751\t8751\t102\t103\tPYAAAA\tDVLAAA\tHHHHxx\n6515\t7986\t1\t3\t5\t15\t15\t515\t515\t1515\t6515\t30\t31\tPQAAAA\tEVLAAA\tOOOOxx\n2472\t7987\t0\t0\t2\t12\t72\t472\t472\t2472\t2472\t144\t145\tCRAAAA\tFVLAAA\tVVVVxx\n7205\t7988\t1\t1\t5\t5\t5\t205\t1205\t2205\t7205\t10\t11\tDRAAAA\tGVLAAA\tAAAAxx\n9654\t7989\t0\t2\t4\t14\t54\t654\t1654\t4654\t9654\t108\t109\tIHAAAA\tHVLAAA\tHHHHxx\n5646\t7990\t0\t2\t6\t6\t46\t646\t1646\t646\t5646\t92\t93\tEJAAAA\tIVLAAA\tOOOOxx\n4217\t7991\t1\t1\t7\t17\t17\t217\t217\t4217\t4217\t34\t35\tFGAAAA\tJVLAAA\tVVVVxx\n4484\t7992\t0\t0\t4\t4\t84\t484\t484\t4484\t4484\t168\t169\tMQAAAA\tKVLAAA\tAAAAxx\n6654\t7993\t0\t2\t4\t14\t54\t654\t654\t1654\t6654\t108\t109\tYVAAAA\tLVLAAA\tHHHHxx\n4876\t7994\t0\t0\t6\t16\t76\t876\t876\t4876\t4876\t152\t153\tOFAAAA\tMVLAAA\tOOOOxx\n9690\t7995\t0\t2\t0\t10\t90\t690\t1690\t4690\t9690\t180\t181\tSIAAAA\tNVLAAA\tVVVVxx\n2453\t7996\t1\t1\t3\t13\t53\t453\t453\t2453\t2453\t106\t107\tJQAAAA\tOVLAAA\tAAAAxx\n829\t7997\t1\t1\t9\t9\t29\t829\t829\t829\t829\t58\t59\tXFAAAA\tPVLAAA\tHHHHxx\n2547\t7998\t1\t3\t7\t7\t47\t547\t547\t2547\t2547\t94\t95\tZTAAAA\tQVLAAA\tOOOOxx\n9726\t7999\t0\t2\t6\t6\t26\t726\t1726\t4726\t9726\t52\t53\tCKAAAA\tRVLAAA\tVVVVxx\n9267\t8000\t1\t3\t7\t7\t67\t267\t1267\t4267\t9267\t134\t135\tLSAAAA\tSVLAAA\tAAAAxx\n7448\t8001\t0\t0\t8\t8\t48\t448\t1448\t2448\t7448\t96\t97\tMAAAAA\tTVLAAA\tHHHHxx\n610\t8002\t0\t2\t0\t10\t10\t610\t610\t610\t610\t20\t21\tMXAAAA\tUVLAAA\tOOOOxx\n2791\t8003\t1\t3\t1\t11\t91\t791\t791\t2791\t2791\t182\t183\tJDAAAA\tVVLAAA\tVVVVxx\n3651\t8004\t1\t3\t1\t11\t51\t651\t1651\t3651\t3651\t102\t103\tLKAAAA\tWVLAAA\tAAAAxx\n5206\t8005\t0\t2\t6\t6\t6\t206\t1206\t206\t5206\t12\t13\tGSAAAA\tXVLAAA\tHHHHxx\n8774\t8006\t0\t2\t4\t14\t74\t774\t774\t3774\t8774\t148\t149\tMZAAAA\tYVLAAA\tOOOOxx\n4753\t8007\t1\t1\t3\t13\t53\t753\t753\t4753\t4753\t106\t107\tVAAAAA\tZVLAAA\tVVVVxx\n4755\t8008\t1\t3\t5\t15\t55\t755\t755\t4755\t4755\t110\t111\tXAAAAA\tAWLAAA\tAAAAxx\n686\t8009\t0\t2\t6\t6\t86\t686\t686\t686\t686\t172\t173\tKAAAAA\tBWLAAA\tHHHHxx\n8281\t8010\t1\t1\t1\t1\t81\t281\t281\t3281\t8281\t162\t163\tNGAAAA\tCWLAAA\tOOOOxx\n2058\t8011\t0\t2\t8\t18\t58\t58\t58\t2058\t2058\t116\t117\tEBAAAA\tDWLAAA\tVVVVxx\n8900\t8012\t0\t0\t0\t0\t0\t900\t900\t3900\t8900\t0\t1\tIEAAAA\tEWLAAA\tAAAAxx\n8588\t8013\t0\t0\t8\t8\t88\t588\t588\t3588\t8588\t176\t177\tISAAAA\tFWLAAA\tHHHHxx\n2904\t8014\t0\t0\t4\t4\t4\t904\t904\t2904\t2904\t8\t9\tSHAAAA\tGWLAAA\tOOOOxx\n8917\t8015\t1\t1\t7\t17\t17\t917\t917\t3917\t8917\t34\t35\tZEAAAA\tHWLAAA\tVVVVxx\n9026\t8016\t0\t2\t6\t6\t26\t26\t1026\t4026\t9026\t52\t53\tEJAAAA\tIWLAAA\tAAAAxx\n2416\t8017\t0\t0\t6\t16\t16\t416\t416\t2416\t2416\t32\t33\tYOAAAA\tJWLAAA\tHHHHxx\n1053\t8018\t1\t1\t3\t13\t53\t53\t1053\t1053\t1053\t106\t107\tNOAAAA\tKWLAAA\tOOOOxx\n7141\t8019\t1\t1\t1\t1\t41\t141\t1141\t2141\t7141\t82\t83\tROAAAA\tLWLAAA\tVVVVxx\n9771\t8020\t1\t3\t1\t11\t71\t771\t1771\t4771\t9771\t142\t143\tVLAAAA\tMWLAAA\tAAAAxx\n2774\t8021\t0\t2\t4\t14\t74\t774\t774\t2774\t2774\t148\t149\tSCAAAA\tNWLAAA\tHHHHxx\n3213\t8022\t1\t1\t3\t13\t13\t213\t1213\t3213\t3213\t26\t27\tPTAAAA\tOWLAAA\tOOOOxx\n5694\t8023\t0\t2\t4\t14\t94\t694\t1694\t694\t5694\t188\t189\tALAAAA\tPWLAAA\tVVVVxx\n6631\t8024\t1\t3\t1\t11\t31\t631\t631\t1631\t6631\t62\t63\tBVAAAA\tQWLAAA\tAAAAxx\n6638\t8025\t0\t2\t8\t18\t38\t638\t638\t1638\t6638\t76\t77\tIVAAAA\tRWLAAA\tHHHHxx\n7407\t8026\t1\t3\t7\t7\t7\t407\t1407\t2407\t7407\t14\t15\tXYAAAA\tSWLAAA\tOOOOxx\n8972\t8027\t0\t0\t2\t12\t72\t972\t972\t3972\t8972\t144\t145\tCHAAAA\tTWLAAA\tVVVVxx\n2202\t8028\t0\t2\t2\t2\t2\t202\t202\t2202\t2202\t4\t5\tSGAAAA\tUWLAAA\tAAAAxx\n6135\t8029\t1\t3\t5\t15\t35\t135\t135\t1135\t6135\t70\t71\tZBAAAA\tVWLAAA\tHHHHxx\n5043\t8030\t1\t3\t3\t3\t43\t43\t1043\t43\t5043\t86\t87\tZLAAAA\tWWLAAA\tOOOOxx\n5163\t8031\t1\t3\t3\t3\t63\t163\t1163\t163\t5163\t126\t127\tPQAAAA\tXWLAAA\tVVVVxx\n1191\t8032\t1\t3\t1\t11\t91\t191\t1191\t1191\t1191\t182\t183\tVTAAAA\tYWLAAA\tAAAAxx\n6576\t8033\t0\t0\t6\t16\t76\t576\t576\t1576\t6576\t152\t153\tYSAAAA\tZWLAAA\tHHHHxx\n3455\t8034\t1\t3\t5\t15\t55\t455\t1455\t3455\t3455\t110\t111\tXCAAAA\tAXLAAA\tOOOOxx\n3688\t8035\t0\t0\t8\t8\t88\t688\t1688\t3688\t3688\t176\t177\tWLAAAA\tBXLAAA\tVVVVxx\n4982\t8036\t0\t2\t2\t2\t82\t982\t982\t4982\t4982\t164\t165\tQJAAAA\tCXLAAA\tAAAAxx\n4180\t8037\t0\t0\t0\t0\t80\t180\t180\t4180\t4180\t160\t161\tUEAAAA\tDXLAAA\tHHHHxx\n4708\t8038\t0\t0\t8\t8\t8\t708\t708\t4708\t4708\t16\t17\tCZAAAA\tEXLAAA\tOOOOxx\n1241\t8039\t1\t1\t1\t1\t41\t241\t1241\t1241\t1241\t82\t83\tTVAAAA\tFXLAAA\tVVVVxx\n4921\t8040\t1\t1\t1\t1\t21\t921\t921\t4921\t4921\t42\t43\tHHAAAA\tGXLAAA\tAAAAxx\n3197\t8041\t1\t1\t7\t17\t97\t197\t1197\t3197\t3197\t194\t195\tZSAAAA\tHXLAAA\tHHHHxx\n8225\t8042\t1\t1\t5\t5\t25\t225\t225\t3225\t8225\t50\t51\tJEAAAA\tIXLAAA\tOOOOxx\n5913\t8043\t1\t1\t3\t13\t13\t913\t1913\t913\t5913\t26\t27\tLTAAAA\tJXLAAA\tVVVVxx\n6387\t8044\t1\t3\t7\t7\t87\t387\t387\t1387\t6387\t174\t175\tRLAAAA\tKXLAAA\tAAAAxx\n2706\t8045\t0\t2\t6\t6\t6\t706\t706\t2706\t2706\t12\t13\tCAAAAA\tLXLAAA\tHHHHxx\n1461\t8046\t1\t1\t1\t1\t61\t461\t1461\t1461\t1461\t122\t123\tFEAAAA\tMXLAAA\tOOOOxx\n7646\t8047\t0\t2\t6\t6\t46\t646\t1646\t2646\t7646\t92\t93\tCIAAAA\tNXLAAA\tVVVVxx\n8066\t8048\t0\t2\t6\t6\t66\t66\t66\t3066\t8066\t132\t133\tGYAAAA\tOXLAAA\tAAAAxx\n4171\t8049\t1\t3\t1\t11\t71\t171\t171\t4171\t4171\t142\t143\tLEAAAA\tPXLAAA\tHHHHxx\n8008\t8050\t0\t0\t8\t8\t8\t8\t8\t3008\t8008\t16\t17\tAWAAAA\tQXLAAA\tOOOOxx\n2088\t8051\t0\t0\t8\t8\t88\t88\t88\t2088\t2088\t176\t177\tICAAAA\tRXLAAA\tVVVVxx\n7907\t8052\t1\t3\t7\t7\t7\t907\t1907\t2907\t7907\t14\t15\tDSAAAA\tSXLAAA\tAAAAxx\n2429\t8053\t1\t1\t9\t9\t29\t429\t429\t2429\t2429\t58\t59\tLPAAAA\tTXLAAA\tHHHHxx\n9629\t8054\t1\t1\t9\t9\t29\t629\t1629\t4629\t9629\t58\t59\tJGAAAA\tUXLAAA\tOOOOxx\n1470\t8055\t0\t2\t0\t10\t70\t470\t1470\t1470\t1470\t140\t141\tOEAAAA\tVXLAAA\tVVVVxx\n4346\t8056\t0\t2\t6\t6\t46\t346\t346\t4346\t4346\t92\t93\tELAAAA\tWXLAAA\tAAAAxx\n7219\t8057\t1\t3\t9\t19\t19\t219\t1219\t2219\t7219\t38\t39\tRRAAAA\tXXLAAA\tHHHHxx\n1185\t8058\t1\t1\t5\t5\t85\t185\t1185\t1185\t1185\t170\t171\tPTAAAA\tYXLAAA\tOOOOxx\n8776\t8059\t0\t0\t6\t16\t76\t776\t776\t3776\t8776\t152\t153\tOZAAAA\tZXLAAA\tVVVVxx\n684\t8060\t0\t0\t4\t4\t84\t684\t684\t684\t684\t168\t169\tIAAAAA\tAYLAAA\tAAAAxx\n2343\t8061\t1\t3\t3\t3\t43\t343\t343\t2343\t2343\t86\t87\tDMAAAA\tBYLAAA\tHHHHxx\n4470\t8062\t0\t2\t0\t10\t70\t470\t470\t4470\t4470\t140\t141\tYPAAAA\tCYLAAA\tOOOOxx\n5116\t8063\t0\t0\t6\t16\t16\t116\t1116\t116\t5116\t32\t33\tUOAAAA\tDYLAAA\tVVVVxx\n1746\t8064\t0\t2\t6\t6\t46\t746\t1746\t1746\t1746\t92\t93\tEPAAAA\tEYLAAA\tAAAAxx\n3216\t8065\t0\t0\t6\t16\t16\t216\t1216\t3216\t3216\t32\t33\tSTAAAA\tFYLAAA\tHHHHxx\n4594\t8066\t0\t2\t4\t14\t94\t594\t594\t4594\t4594\t188\t189\tSUAAAA\tGYLAAA\tOOOOxx\n3013\t8067\t1\t1\t3\t13\t13\t13\t1013\t3013\t3013\t26\t27\tXLAAAA\tHYLAAA\tVVVVxx\n2307\t8068\t1\t3\t7\t7\t7\t307\t307\t2307\t2307\t14\t15\tTKAAAA\tIYLAAA\tAAAAxx\n7663\t8069\t1\t3\t3\t3\t63\t663\t1663\t2663\t7663\t126\t127\tTIAAAA\tJYLAAA\tHHHHxx\n8504\t8070\t0\t0\t4\t4\t4\t504\t504\t3504\t8504\t8\t9\tCPAAAA\tKYLAAA\tOOOOxx\n3683\t8071\t1\t3\t3\t3\t83\t683\t1683\t3683\t3683\t166\t167\tRLAAAA\tLYLAAA\tVVVVxx\n144\t8072\t0\t0\t4\t4\t44\t144\t144\t144\t144\t88\t89\tOFAAAA\tMYLAAA\tAAAAxx\n203\t8073\t1\t3\t3\t3\t3\t203\t203\t203\t203\t6\t7\tVHAAAA\tNYLAAA\tHHHHxx\n5255\t8074\t1\t3\t5\t15\t55\t255\t1255\t255\t5255\t110\t111\tDUAAAA\tOYLAAA\tOOOOxx\n4150\t8075\t0\t2\t0\t10\t50\t150\t150\t4150\t4150\t100\t101\tQDAAAA\tPYLAAA\tVVVVxx\n5701\t8076\t1\t1\t1\t1\t1\t701\t1701\t701\t5701\t2\t3\tHLAAAA\tQYLAAA\tAAAAxx\n7400\t8077\t0\t0\t0\t0\t0\t400\t1400\t2400\t7400\t0\t1\tQYAAAA\tRYLAAA\tHHHHxx\n8203\t8078\t1\t3\t3\t3\t3\t203\t203\t3203\t8203\t6\t7\tNDAAAA\tSYLAAA\tOOOOxx\n637\t8079\t1\t1\t7\t17\t37\t637\t637\t637\t637\t74\t75\tNYAAAA\tTYLAAA\tVVVVxx\n2898\t8080\t0\t2\t8\t18\t98\t898\t898\t2898\t2898\t196\t197\tMHAAAA\tUYLAAA\tAAAAxx\n1110\t8081\t0\t2\t0\t10\t10\t110\t1110\t1110\t1110\t20\t21\tSQAAAA\tVYLAAA\tHHHHxx\n6255\t8082\t1\t3\t5\t15\t55\t255\t255\t1255\t6255\t110\t111\tPGAAAA\tWYLAAA\tOOOOxx\n1071\t8083\t1\t3\t1\t11\t71\t71\t1071\t1071\t1071\t142\t143\tFPAAAA\tXYLAAA\tVVVVxx\n541\t8084\t1\t1\t1\t1\t41\t541\t541\t541\t541\t82\t83\tVUAAAA\tYYLAAA\tAAAAxx\n8077\t8085\t1\t1\t7\t17\t77\t77\t77\t3077\t8077\t154\t155\tRYAAAA\tZYLAAA\tHHHHxx\n6809\t8086\t1\t1\t9\t9\t9\t809\t809\t1809\t6809\t18\t19\tXBAAAA\tAZLAAA\tOOOOxx\n4749\t8087\t1\t1\t9\t9\t49\t749\t749\t4749\t4749\t98\t99\tRAAAAA\tBZLAAA\tVVVVxx\n2886\t8088\t0\t2\t6\t6\t86\t886\t886\t2886\t2886\t172\t173\tAHAAAA\tCZLAAA\tAAAAxx\n5510\t8089\t0\t2\t0\t10\t10\t510\t1510\t510\t5510\t20\t21\tYDAAAA\tDZLAAA\tHHHHxx\n713\t8090\t1\t1\t3\t13\t13\t713\t713\t713\t713\t26\t27\tLBAAAA\tEZLAAA\tOOOOxx\n8388\t8091\t0\t0\t8\t8\t88\t388\t388\t3388\t8388\t176\t177\tQKAAAA\tFZLAAA\tVVVVxx\n9524\t8092\t0\t0\t4\t4\t24\t524\t1524\t4524\t9524\t48\t49\tICAAAA\tGZLAAA\tAAAAxx\n9949\t8093\t1\t1\t9\t9\t49\t949\t1949\t4949\t9949\t98\t99\tRSAAAA\tHZLAAA\tHHHHxx\n885\t8094\t1\t1\t5\t5\t85\t885\t885\t885\t885\t170\t171\tBIAAAA\tIZLAAA\tOOOOxx\n8699\t8095\t1\t3\t9\t19\t99\t699\t699\t3699\t8699\t198\t199\tPWAAAA\tJZLAAA\tVVVVxx\n2232\t8096\t0\t0\t2\t12\t32\t232\t232\t2232\t2232\t64\t65\tWHAAAA\tKZLAAA\tAAAAxx\n5142\t8097\t0\t2\t2\t2\t42\t142\t1142\t142\t5142\t84\t85\tUPAAAA\tLZLAAA\tHHHHxx\n8891\t8098\t1\t3\t1\t11\t91\t891\t891\t3891\t8891\t182\t183\tZDAAAA\tMZLAAA\tOOOOxx\n1881\t8099\t1\t1\t1\t1\t81\t881\t1881\t1881\t1881\t162\t163\tJUAAAA\tNZLAAA\tVVVVxx\n3751\t8100\t1\t3\t1\t11\t51\t751\t1751\t3751\t3751\t102\t103\tHOAAAA\tOZLAAA\tAAAAxx\n1896\t8101\t0\t0\t6\t16\t96\t896\t1896\t1896\t1896\t192\t193\tYUAAAA\tPZLAAA\tHHHHxx\n8258\t8102\t0\t2\t8\t18\t58\t258\t258\t3258\t8258\t116\t117\tQFAAAA\tQZLAAA\tOOOOxx\n3820\t8103\t0\t0\t0\t0\t20\t820\t1820\t3820\t3820\t40\t41\tYQAAAA\tRZLAAA\tVVVVxx\n6617\t8104\t1\t1\t7\t17\t17\t617\t617\t1617\t6617\t34\t35\tNUAAAA\tSZLAAA\tAAAAxx\n5100\t8105\t0\t0\t0\t0\t0\t100\t1100\t100\t5100\t0\t1\tEOAAAA\tTZLAAA\tHHHHxx\n4277\t8106\t1\t1\t7\t17\t77\t277\t277\t4277\t4277\t154\t155\tNIAAAA\tUZLAAA\tOOOOxx\n2498\t8107\t0\t2\t8\t18\t98\t498\t498\t2498\t2498\t196\t197\tCSAAAA\tVZLAAA\tVVVVxx\n4343\t8108\t1\t3\t3\t3\t43\t343\t343\t4343\t4343\t86\t87\tBLAAAA\tWZLAAA\tAAAAxx\n8319\t8109\t1\t3\t9\t19\t19\t319\t319\t3319\t8319\t38\t39\tZHAAAA\tXZLAAA\tHHHHxx\n4803\t8110\t1\t3\t3\t3\t3\t803\t803\t4803\t4803\t6\t7\tTCAAAA\tYZLAAA\tOOOOxx\n3100\t8111\t0\t0\t0\t0\t0\t100\t1100\t3100\t3100\t0\t1\tGPAAAA\tZZLAAA\tVVVVxx\n428\t8112\t0\t0\t8\t8\t28\t428\t428\t428\t428\t56\t57\tMQAAAA\tAAMAAA\tAAAAxx\n2811\t8113\t1\t3\t1\t11\t11\t811\t811\t2811\t2811\t22\t23\tDEAAAA\tBAMAAA\tHHHHxx\n2989\t8114\t1\t1\t9\t9\t89\t989\t989\t2989\t2989\t178\t179\tZKAAAA\tCAMAAA\tOOOOxx\n1100\t8115\t0\t0\t0\t0\t0\t100\t1100\t1100\t1100\t0\t1\tIQAAAA\tDAMAAA\tVVVVxx\n6586\t8116\t0\t2\t6\t6\t86\t586\t586\t1586\t6586\t172\t173\tITAAAA\tEAMAAA\tAAAAxx\n3124\t8117\t0\t0\t4\t4\t24\t124\t1124\t3124\t3124\t48\t49\tEQAAAA\tFAMAAA\tHHHHxx\n1635\t8118\t1\t3\t5\t15\t35\t635\t1635\t1635\t1635\t70\t71\tXKAAAA\tGAMAAA\tOOOOxx\n3888\t8119\t0\t0\t8\t8\t88\t888\t1888\t3888\t3888\t176\t177\tOTAAAA\tHAMAAA\tVVVVxx\n8369\t8120\t1\t1\t9\t9\t69\t369\t369\t3369\t8369\t138\t139\tXJAAAA\tIAMAAA\tAAAAxx\n3148\t8121\t0\t0\t8\t8\t48\t148\t1148\t3148\t3148\t96\t97\tCRAAAA\tJAMAAA\tHHHHxx\n2842\t8122\t0\t2\t2\t2\t42\t842\t842\t2842\t2842\t84\t85\tIFAAAA\tKAMAAA\tOOOOxx\n4965\t8123\t1\t1\t5\t5\t65\t965\t965\t4965\t4965\t130\t131\tZIAAAA\tLAMAAA\tVVVVxx\n3742\t8124\t0\t2\t2\t2\t42\t742\t1742\t3742\t3742\t84\t85\tYNAAAA\tMAMAAA\tAAAAxx\n5196\t8125\t0\t0\t6\t16\t96\t196\t1196\t196\t5196\t192\t193\tWRAAAA\tNAMAAA\tHHHHxx\n9105\t8126\t1\t1\t5\t5\t5\t105\t1105\t4105\t9105\t10\t11\tFMAAAA\tOAMAAA\tOOOOxx\n6806\t8127\t0\t2\t6\t6\t6\t806\t806\t1806\t6806\t12\t13\tUBAAAA\tPAMAAA\tVVVVxx\n5849\t8128\t1\t1\t9\t9\t49\t849\t1849\t849\t5849\t98\t99\tZQAAAA\tQAMAAA\tAAAAxx\n6504\t8129\t0\t0\t4\t4\t4\t504\t504\t1504\t6504\t8\t9\tEQAAAA\tRAMAAA\tHHHHxx\n9841\t8130\t1\t1\t1\t1\t41\t841\t1841\t4841\t9841\t82\t83\tNOAAAA\tSAMAAA\tOOOOxx\n457\t8131\t1\t1\t7\t17\t57\t457\t457\t457\t457\t114\t115\tPRAAAA\tTAMAAA\tVVVVxx\n8856\t8132\t0\t0\t6\t16\t56\t856\t856\t3856\t8856\t112\t113\tQCAAAA\tUAMAAA\tAAAAxx\n8043\t8133\t1\t3\t3\t3\t43\t43\t43\t3043\t8043\t86\t87\tJXAAAA\tVAMAAA\tHHHHxx\n5933\t8134\t1\t1\t3\t13\t33\t933\t1933\t933\t5933\t66\t67\tFUAAAA\tWAMAAA\tOOOOxx\n5725\t8135\t1\t1\t5\t5\t25\t725\t1725\t725\t5725\t50\t51\tFMAAAA\tXAMAAA\tVVVVxx\n8607\t8136\t1\t3\t7\t7\t7\t607\t607\t3607\t8607\t14\t15\tBTAAAA\tYAMAAA\tAAAAxx\n9280\t8137\t0\t0\t0\t0\t80\t280\t1280\t4280\t9280\t160\t161\tYSAAAA\tZAMAAA\tHHHHxx\n6017\t8138\t1\t1\t7\t17\t17\t17\t17\t1017\t6017\t34\t35\tLXAAAA\tABMAAA\tOOOOxx\n4946\t8139\t0\t2\t6\t6\t46\t946\t946\t4946\t4946\t92\t93\tGIAAAA\tBBMAAA\tVVVVxx\n7373\t8140\t1\t1\t3\t13\t73\t373\t1373\t2373\t7373\t146\t147\tPXAAAA\tCBMAAA\tAAAAxx\n8096\t8141\t0\t0\t6\t16\t96\t96\t96\t3096\t8096\t192\t193\tKZAAAA\tDBMAAA\tHHHHxx\n3178\t8142\t0\t2\t8\t18\t78\t178\t1178\t3178\t3178\t156\t157\tGSAAAA\tEBMAAA\tOOOOxx\n1849\t8143\t1\t1\t9\t9\t49\t849\t1849\t1849\t1849\t98\t99\tDTAAAA\tFBMAAA\tVVVVxx\n8813\t8144\t1\t1\t3\t13\t13\t813\t813\t3813\t8813\t26\t27\tZAAAAA\tGBMAAA\tAAAAxx\n460\t8145\t0\t0\t0\t0\t60\t460\t460\t460\t460\t120\t121\tSRAAAA\tHBMAAA\tHHHHxx\n7756\t8146\t0\t0\t6\t16\t56\t756\t1756\t2756\t7756\t112\t113\tIMAAAA\tIBMAAA\tOOOOxx\n4425\t8147\t1\t1\t5\t5\t25\t425\t425\t4425\t4425\t50\t51\tFOAAAA\tJBMAAA\tVVVVxx\n1602\t8148\t0\t2\t2\t2\t2\t602\t1602\t1602\t1602\t4\t5\tQJAAAA\tKBMAAA\tAAAAxx\n5981\t8149\t1\t1\t1\t1\t81\t981\t1981\t981\t5981\t162\t163\tBWAAAA\tLBMAAA\tHHHHxx\n8139\t8150\t1\t3\t9\t19\t39\t139\t139\t3139\t8139\t78\t79\tBBAAAA\tMBMAAA\tOOOOxx\n754\t8151\t0\t2\t4\t14\t54\t754\t754\t754\t754\t108\t109\tADAAAA\tNBMAAA\tVVVVxx\n26\t8152\t0\t2\t6\t6\t26\t26\t26\t26\t26\t52\t53\tABAAAA\tOBMAAA\tAAAAxx\n106\t8153\t0\t2\t6\t6\t6\t106\t106\t106\t106\t12\t13\tCEAAAA\tPBMAAA\tHHHHxx\n7465\t8154\t1\t1\t5\t5\t65\t465\t1465\t2465\t7465\t130\t131\tDBAAAA\tQBMAAA\tOOOOxx\n1048\t8155\t0\t0\t8\t8\t48\t48\t1048\t1048\t1048\t96\t97\tIOAAAA\tRBMAAA\tVVVVxx\n2303\t8156\t1\t3\t3\t3\t3\t303\t303\t2303\t2303\t6\t7\tPKAAAA\tSBMAAA\tAAAAxx\n5794\t8157\t0\t2\t4\t14\t94\t794\t1794\t794\t5794\t188\t189\tWOAAAA\tTBMAAA\tHHHHxx\n3321\t8158\t1\t1\t1\t1\t21\t321\t1321\t3321\t3321\t42\t43\tTXAAAA\tUBMAAA\tOOOOxx\n6122\t8159\t0\t2\t2\t2\t22\t122\t122\t1122\t6122\t44\t45\tMBAAAA\tVBMAAA\tVVVVxx\n6474\t8160\t0\t2\t4\t14\t74\t474\t474\t1474\t6474\t148\t149\tAPAAAA\tWBMAAA\tAAAAxx\n827\t8161\t1\t3\t7\t7\t27\t827\t827\t827\t827\t54\t55\tVFAAAA\tXBMAAA\tHHHHxx\n6616\t8162\t0\t0\t6\t16\t16\t616\t616\t1616\t6616\t32\t33\tMUAAAA\tYBMAAA\tOOOOxx\n2131\t8163\t1\t3\t1\t11\t31\t131\t131\t2131\t2131\t62\t63\tZDAAAA\tZBMAAA\tVVVVxx\n5483\t8164\t1\t3\t3\t3\t83\t483\t1483\t483\t5483\t166\t167\tXCAAAA\tACMAAA\tAAAAxx\n606\t8165\t0\t2\t6\t6\t6\t606\t606\t606\t606\t12\t13\tIXAAAA\tBCMAAA\tHHHHxx\n922\t8166\t0\t2\t2\t2\t22\t922\t922\t922\t922\t44\t45\tMJAAAA\tCCMAAA\tOOOOxx\n8475\t8167\t1\t3\t5\t15\t75\t475\t475\t3475\t8475\t150\t151\tZNAAAA\tDCMAAA\tVVVVxx\n7645\t8168\t1\t1\t5\t5\t45\t645\t1645\t2645\t7645\t90\t91\tBIAAAA\tECMAAA\tAAAAxx\n5097\t8169\t1\t1\t7\t17\t97\t97\t1097\t97\t5097\t194\t195\tBOAAAA\tFCMAAA\tHHHHxx\n5377\t8170\t1\t1\t7\t17\t77\t377\t1377\t377\t5377\t154\t155\tVYAAAA\tGCMAAA\tOOOOxx\n6116\t8171\t0\t0\t6\t16\t16\t116\t116\t1116\t6116\t32\t33\tGBAAAA\tHCMAAA\tVVVVxx\n8674\t8172\t0\t2\t4\t14\t74\t674\t674\t3674\t8674\t148\t149\tQVAAAA\tICMAAA\tAAAAxx\n8063\t8173\t1\t3\t3\t3\t63\t63\t63\t3063\t8063\t126\t127\tDYAAAA\tJCMAAA\tHHHHxx\n5271\t8174\t1\t3\t1\t11\t71\t271\t1271\t271\t5271\t142\t143\tTUAAAA\tKCMAAA\tOOOOxx\n1619\t8175\t1\t3\t9\t19\t19\t619\t1619\t1619\t1619\t38\t39\tHKAAAA\tLCMAAA\tVVVVxx\n6419\t8176\t1\t3\t9\t19\t19\t419\t419\t1419\t6419\t38\t39\tXMAAAA\tMCMAAA\tAAAAxx\n7651\t8177\t1\t3\t1\t11\t51\t651\t1651\t2651\t7651\t102\t103\tHIAAAA\tNCMAAA\tHHHHxx\n2897\t8178\t1\t1\t7\t17\t97\t897\t897\t2897\t2897\t194\t195\tLHAAAA\tOCMAAA\tOOOOxx\n8148\t8179\t0\t0\t8\t8\t48\t148\t148\t3148\t8148\t96\t97\tKBAAAA\tPCMAAA\tVVVVxx\n7461\t8180\t1\t1\t1\t1\t61\t461\t1461\t2461\t7461\t122\t123\tZAAAAA\tQCMAAA\tAAAAxx\n9186\t8181\t0\t2\t6\t6\t86\t186\t1186\t4186\t9186\t172\t173\tIPAAAA\tRCMAAA\tHHHHxx\n7127\t8182\t1\t3\t7\t7\t27\t127\t1127\t2127\t7127\t54\t55\tDOAAAA\tSCMAAA\tOOOOxx\n8233\t8183\t1\t1\t3\t13\t33\t233\t233\t3233\t8233\t66\t67\tREAAAA\tTCMAAA\tVVVVxx\n9651\t8184\t1\t3\t1\t11\t51\t651\t1651\t4651\t9651\t102\t103\tFHAAAA\tUCMAAA\tAAAAxx\n6746\t8185\t0\t2\t6\t6\t46\t746\t746\t1746\t6746\t92\t93\tMZAAAA\tVCMAAA\tHHHHxx\n7835\t8186\t1\t3\t5\t15\t35\t835\t1835\t2835\t7835\t70\t71\tJPAAAA\tWCMAAA\tOOOOxx\n8815\t8187\t1\t3\t5\t15\t15\t815\t815\t3815\t8815\t30\t31\tBBAAAA\tXCMAAA\tVVVVxx\n6398\t8188\t0\t2\t8\t18\t98\t398\t398\t1398\t6398\t196\t197\tCMAAAA\tYCMAAA\tAAAAxx\n5344\t8189\t0\t0\t4\t4\t44\t344\t1344\t344\t5344\t88\t89\tOXAAAA\tZCMAAA\tHHHHxx\n8209\t8190\t1\t1\t9\t9\t9\t209\t209\t3209\t8209\t18\t19\tTDAAAA\tADMAAA\tOOOOxx\n8444\t8191\t0\t0\t4\t4\t44\t444\t444\t3444\t8444\t88\t89\tUMAAAA\tBDMAAA\tVVVVxx\n5669\t8192\t1\t1\t9\t9\t69\t669\t1669\t669\t5669\t138\t139\tBKAAAA\tCDMAAA\tAAAAxx\n2455\t8193\t1\t3\t5\t15\t55\t455\t455\t2455\t2455\t110\t111\tLQAAAA\tDDMAAA\tHHHHxx\n6767\t8194\t1\t3\t7\t7\t67\t767\t767\t1767\t6767\t134\t135\tHAAAAA\tEDMAAA\tOOOOxx\n135\t8195\t1\t3\t5\t15\t35\t135\t135\t135\t135\t70\t71\tFFAAAA\tFDMAAA\tVVVVxx\n3503\t8196\t1\t3\t3\t3\t3\t503\t1503\t3503\t3503\t6\t7\tTEAAAA\tGDMAAA\tAAAAxx\n6102\t8197\t0\t2\t2\t2\t2\t102\t102\t1102\t6102\t4\t5\tSAAAAA\tHDMAAA\tHHHHxx\n7136\t8198\t0\t0\t6\t16\t36\t136\t1136\t2136\t7136\t72\t73\tMOAAAA\tIDMAAA\tOOOOxx\n4933\t8199\t1\t1\t3\t13\t33\t933\t933\t4933\t4933\t66\t67\tTHAAAA\tJDMAAA\tVVVVxx\n8804\t8200\t0\t0\t4\t4\t4\t804\t804\t3804\t8804\t8\t9\tQAAAAA\tKDMAAA\tAAAAxx\n3760\t8201\t0\t0\t0\t0\t60\t760\t1760\t3760\t3760\t120\t121\tQOAAAA\tLDMAAA\tHHHHxx\n8603\t8202\t1\t3\t3\t3\t3\t603\t603\t3603\t8603\t6\t7\tXSAAAA\tMDMAAA\tOOOOxx\n7411\t8203\t1\t3\t1\t11\t11\t411\t1411\t2411\t7411\t22\t23\tBZAAAA\tNDMAAA\tVVVVxx\n834\t8204\t0\t2\t4\t14\t34\t834\t834\t834\t834\t68\t69\tCGAAAA\tODMAAA\tAAAAxx\n7385\t8205\t1\t1\t5\t5\t85\t385\t1385\t2385\t7385\t170\t171\tBYAAAA\tPDMAAA\tHHHHxx\n3696\t8206\t0\t0\t6\t16\t96\t696\t1696\t3696\t3696\t192\t193\tEMAAAA\tQDMAAA\tOOOOxx\n8720\t8207\t0\t0\t0\t0\t20\t720\t720\t3720\t8720\t40\t41\tKXAAAA\tRDMAAA\tVVVVxx\n4539\t8208\t1\t3\t9\t19\t39\t539\t539\t4539\t4539\t78\t79\tPSAAAA\tSDMAAA\tAAAAxx\n9837\t8209\t1\t1\t7\t17\t37\t837\t1837\t4837\t9837\t74\t75\tJOAAAA\tTDMAAA\tHHHHxx\n8595\t8210\t1\t3\t5\t15\t95\t595\t595\t3595\t8595\t190\t191\tPSAAAA\tUDMAAA\tOOOOxx\n3673\t8211\t1\t1\t3\t13\t73\t673\t1673\t3673\t3673\t146\t147\tHLAAAA\tVDMAAA\tVVVVxx\n475\t8212\t1\t3\t5\t15\t75\t475\t475\t475\t475\t150\t151\tHSAAAA\tWDMAAA\tAAAAxx\n2256\t8213\t0\t0\t6\t16\t56\t256\t256\t2256\t2256\t112\t113\tUIAAAA\tXDMAAA\tHHHHxx\n6349\t8214\t1\t1\t9\t9\t49\t349\t349\t1349\t6349\t98\t99\tFKAAAA\tYDMAAA\tOOOOxx\n9968\t8215\t0\t0\t8\t8\t68\t968\t1968\t4968\t9968\t136\t137\tKTAAAA\tZDMAAA\tVVVVxx\n7261\t8216\t1\t1\t1\t1\t61\t261\t1261\t2261\t7261\t122\t123\tHTAAAA\tAEMAAA\tAAAAxx\n5799\t8217\t1\t3\t9\t19\t99\t799\t1799\t799\t5799\t198\t199\tBPAAAA\tBEMAAA\tHHHHxx\n8159\t8218\t1\t3\t9\t19\t59\t159\t159\t3159\t8159\t118\t119\tVBAAAA\tCEMAAA\tOOOOxx\n92\t8219\t0\t0\t2\t12\t92\t92\t92\t92\t92\t184\t185\tODAAAA\tDEMAAA\tVVVVxx\n5927\t8220\t1\t3\t7\t7\t27\t927\t1927\t927\t5927\t54\t55\tZTAAAA\tEEMAAA\tAAAAxx\n7925\t8221\t1\t1\t5\t5\t25\t925\t1925\t2925\t7925\t50\t51\tVSAAAA\tFEMAAA\tHHHHxx\n5836\t8222\t0\t0\t6\t16\t36\t836\t1836\t836\t5836\t72\t73\tMQAAAA\tGEMAAA\tOOOOxx\n7935\t8223\t1\t3\t5\t15\t35\t935\t1935\t2935\t7935\t70\t71\tFTAAAA\tHEMAAA\tVVVVxx\n5505\t8224\t1\t1\t5\t5\t5\t505\t1505\t505\t5505\t10\t11\tTDAAAA\tIEMAAA\tAAAAxx\n5882\t8225\t0\t2\t2\t2\t82\t882\t1882\t882\t5882\t164\t165\tGSAAAA\tJEMAAA\tHHHHxx\n4411\t8226\t1\t3\t1\t11\t11\t411\t411\t4411\t4411\t22\t23\tRNAAAA\tKEMAAA\tOOOOxx\n64\t8227\t0\t0\t4\t4\t64\t64\t64\t64\t64\t128\t129\tMCAAAA\tLEMAAA\tVVVVxx\n2851\t8228\t1\t3\t1\t11\t51\t851\t851\t2851\t2851\t102\t103\tRFAAAA\tMEMAAA\tAAAAxx\n1665\t8229\t1\t1\t5\t5\t65\t665\t1665\t1665\t1665\t130\t131\tBMAAAA\tNEMAAA\tHHHHxx\n2895\t8230\t1\t3\t5\t15\t95\t895\t895\t2895\t2895\t190\t191\tJHAAAA\tOEMAAA\tOOOOxx\n2210\t8231\t0\t2\t0\t10\t10\t210\t210\t2210\t2210\t20\t21\tAHAAAA\tPEMAAA\tVVVVxx\n9873\t8232\t1\t1\t3\t13\t73\t873\t1873\t4873\t9873\t146\t147\tTPAAAA\tQEMAAA\tAAAAxx\n5402\t8233\t0\t2\t2\t2\t2\t402\t1402\t402\t5402\t4\t5\tUZAAAA\tREMAAA\tHHHHxx\n285\t8234\t1\t1\t5\t5\t85\t285\t285\t285\t285\t170\t171\tZKAAAA\tSEMAAA\tOOOOxx\n8545\t8235\t1\t1\t5\t5\t45\t545\t545\t3545\t8545\t90\t91\tRQAAAA\tTEMAAA\tVVVVxx\n5328\t8236\t0\t0\t8\t8\t28\t328\t1328\t328\t5328\t56\t57\tYWAAAA\tUEMAAA\tAAAAxx\n733\t8237\t1\t1\t3\t13\t33\t733\t733\t733\t733\t66\t67\tFCAAAA\tVEMAAA\tHHHHxx\n7726\t8238\t0\t2\t6\t6\t26\t726\t1726\t2726\t7726\t52\t53\tELAAAA\tWEMAAA\tOOOOxx\n5418\t8239\t0\t2\t8\t18\t18\t418\t1418\t418\t5418\t36\t37\tKAAAAA\tXEMAAA\tVVVVxx\n7761\t8240\t1\t1\t1\t1\t61\t761\t1761\t2761\t7761\t122\t123\tNMAAAA\tYEMAAA\tAAAAxx\n9263\t8241\t1\t3\t3\t3\t63\t263\t1263\t4263\t9263\t126\t127\tHSAAAA\tZEMAAA\tHHHHxx\n5579\t8242\t1\t3\t9\t19\t79\t579\t1579\t579\t5579\t158\t159\tPGAAAA\tAFMAAA\tOOOOxx\n5434\t8243\t0\t2\t4\t14\t34\t434\t1434\t434\t5434\t68\t69\tABAAAA\tBFMAAA\tVVVVxx\n5230\t8244\t0\t2\t0\t10\t30\t230\t1230\t230\t5230\t60\t61\tETAAAA\tCFMAAA\tAAAAxx\n9981\t8245\t1\t1\t1\t1\t81\t981\t1981\t4981\t9981\t162\t163\tXTAAAA\tDFMAAA\tHHHHxx\n5830\t8246\t0\t2\t0\t10\t30\t830\t1830\t830\t5830\t60\t61\tGQAAAA\tEFMAAA\tOOOOxx\n128\t8247\t0\t0\t8\t8\t28\t128\t128\t128\t128\t56\t57\tYEAAAA\tFFMAAA\tVVVVxx\n2734\t8248\t0\t2\t4\t14\t34\t734\t734\t2734\t2734\t68\t69\tEBAAAA\tGFMAAA\tAAAAxx\n4537\t8249\t1\t1\t7\t17\t37\t537\t537\t4537\t4537\t74\t75\tNSAAAA\tHFMAAA\tHHHHxx\n3899\t8250\t1\t3\t9\t19\t99\t899\t1899\t3899\t3899\t198\t199\tZTAAAA\tIFMAAA\tOOOOxx\n1000\t8251\t0\t0\t0\t0\t0\t0\t1000\t1000\t1000\t0\t1\tMMAAAA\tJFMAAA\tVVVVxx\n9896\t8252\t0\t0\t6\t16\t96\t896\t1896\t4896\t9896\t192\t193\tQQAAAA\tKFMAAA\tAAAAxx\n3640\t8253\t0\t0\t0\t0\t40\t640\t1640\t3640\t3640\t80\t81\tAKAAAA\tLFMAAA\tHHHHxx\n2568\t8254\t0\t0\t8\t8\t68\t568\t568\t2568\t2568\t136\t137\tUUAAAA\tMFMAAA\tOOOOxx\n2026\t8255\t0\t2\t6\t6\t26\t26\t26\t2026\t2026\t52\t53\tYZAAAA\tNFMAAA\tVVVVxx\n3955\t8256\t1\t3\t5\t15\t55\t955\t1955\t3955\t3955\t110\t111\tDWAAAA\tOFMAAA\tAAAAxx\n7152\t8257\t0\t0\t2\t12\t52\t152\t1152\t2152\t7152\t104\t105\tCPAAAA\tPFMAAA\tHHHHxx\n2402\t8258\t0\t2\t2\t2\t2\t402\t402\t2402\t2402\t4\t5\tKOAAAA\tQFMAAA\tOOOOxx\n9522\t8259\t0\t2\t2\t2\t22\t522\t1522\t4522\t9522\t44\t45\tGCAAAA\tRFMAAA\tVVVVxx\n4011\t8260\t1\t3\t1\t11\t11\t11\t11\t4011\t4011\t22\t23\tHYAAAA\tSFMAAA\tAAAAxx\n3297\t8261\t1\t1\t7\t17\t97\t297\t1297\t3297\t3297\t194\t195\tVWAAAA\tTFMAAA\tHHHHxx\n4915\t8262\t1\t3\t5\t15\t15\t915\t915\t4915\t4915\t30\t31\tBHAAAA\tUFMAAA\tOOOOxx\n5397\t8263\t1\t1\t7\t17\t97\t397\t1397\t397\t5397\t194\t195\tPZAAAA\tVFMAAA\tVVVVxx\n5454\t8264\t0\t2\t4\t14\t54\t454\t1454\t454\t5454\t108\t109\tUBAAAA\tWFMAAA\tAAAAxx\n4568\t8265\t0\t0\t8\t8\t68\t568\t568\t4568\t4568\t136\t137\tSTAAAA\tXFMAAA\tHHHHxx\n5875\t8266\t1\t3\t5\t15\t75\t875\t1875\t875\t5875\t150\t151\tZRAAAA\tYFMAAA\tOOOOxx\n3642\t8267\t0\t2\t2\t2\t42\t642\t1642\t3642\t3642\t84\t85\tCKAAAA\tZFMAAA\tVVVVxx\n8506\t8268\t0\t2\t6\t6\t6\t506\t506\t3506\t8506\t12\t13\tEPAAAA\tAGMAAA\tAAAAxx\n9621\t8269\t1\t1\t1\t1\t21\t621\t1621\t4621\t9621\t42\t43\tBGAAAA\tBGMAAA\tHHHHxx\n7739\t8270\t1\t3\t9\t19\t39\t739\t1739\t2739\t7739\t78\t79\tRLAAAA\tCGMAAA\tOOOOxx\n3987\t8271\t1\t3\t7\t7\t87\t987\t1987\t3987\t3987\t174\t175\tJXAAAA\tDGMAAA\tVVVVxx\n2090\t8272\t0\t2\t0\t10\t90\t90\t90\t2090\t2090\t180\t181\tKCAAAA\tEGMAAA\tAAAAxx\n3838\t8273\t0\t2\t8\t18\t38\t838\t1838\t3838\t3838\t76\t77\tQRAAAA\tFGMAAA\tHHHHxx\n17\t8274\t1\t1\t7\t17\t17\t17\t17\t17\t17\t34\t35\tRAAAAA\tGGMAAA\tOOOOxx\n3406\t8275\t0\t2\t6\t6\t6\t406\t1406\t3406\t3406\t12\t13\tABAAAA\tHGMAAA\tVVVVxx\n8312\t8276\t0\t0\t2\t12\t12\t312\t312\t3312\t8312\t24\t25\tSHAAAA\tIGMAAA\tAAAAxx\n4034\t8277\t0\t2\t4\t14\t34\t34\t34\t4034\t4034\t68\t69\tEZAAAA\tJGMAAA\tHHHHxx\n1535\t8278\t1\t3\t5\t15\t35\t535\t1535\t1535\t1535\t70\t71\tBHAAAA\tKGMAAA\tOOOOxx\n7198\t8279\t0\t2\t8\t18\t98\t198\t1198\t2198\t7198\t196\t197\tWQAAAA\tLGMAAA\tVVVVxx\n8885\t8280\t1\t1\t5\t5\t85\t885\t885\t3885\t8885\t170\t171\tTDAAAA\tMGMAAA\tAAAAxx\n4081\t8281\t1\t1\t1\t1\t81\t81\t81\t4081\t4081\t162\t163\tZAAAAA\tNGMAAA\tHHHHxx\n980\t8282\t0\t0\t0\t0\t80\t980\t980\t980\t980\t160\t161\tSLAAAA\tOGMAAA\tOOOOxx\n551\t8283\t1\t3\t1\t11\t51\t551\t551\t551\t551\t102\t103\tFVAAAA\tPGMAAA\tVVVVxx\n7746\t8284\t0\t2\t6\t6\t46\t746\t1746\t2746\t7746\t92\t93\tYLAAAA\tQGMAAA\tAAAAxx\n4756\t8285\t0\t0\t6\t16\t56\t756\t756\t4756\t4756\t112\t113\tYAAAAA\tRGMAAA\tHHHHxx\n3655\t8286\t1\t3\t5\t15\t55\t655\t1655\t3655\t3655\t110\t111\tPKAAAA\tSGMAAA\tOOOOxx\n7075\t8287\t1\t3\t5\t15\t75\t75\t1075\t2075\t7075\t150\t151\tDMAAAA\tTGMAAA\tVVVVxx\n3950\t8288\t0\t2\t0\t10\t50\t950\t1950\t3950\t3950\t100\t101\tYVAAAA\tUGMAAA\tAAAAxx\n2314\t8289\t0\t2\t4\t14\t14\t314\t314\t2314\t2314\t28\t29\tALAAAA\tVGMAAA\tHHHHxx\n8432\t8290\t0\t0\t2\t12\t32\t432\t432\t3432\t8432\t64\t65\tIMAAAA\tWGMAAA\tOOOOxx\n62\t8291\t0\t2\t2\t2\t62\t62\t62\t62\t62\t124\t125\tKCAAAA\tXGMAAA\tVVVVxx\n6920\t8292\t0\t0\t0\t0\t20\t920\t920\t1920\t6920\t40\t41\tEGAAAA\tYGMAAA\tAAAAxx\n4077\t8293\t1\t1\t7\t17\t77\t77\t77\t4077\t4077\t154\t155\tVAAAAA\tZGMAAA\tHHHHxx\n9118\t8294\t0\t2\t8\t18\t18\t118\t1118\t4118\t9118\t36\t37\tSMAAAA\tAHMAAA\tOOOOxx\n5375\t8295\t1\t3\t5\t15\t75\t375\t1375\t375\t5375\t150\t151\tTYAAAA\tBHMAAA\tVVVVxx\n178\t8296\t0\t2\t8\t18\t78\t178\t178\t178\t178\t156\t157\tWGAAAA\tCHMAAA\tAAAAxx\n1079\t8297\t1\t3\t9\t19\t79\t79\t1079\t1079\t1079\t158\t159\tNPAAAA\tDHMAAA\tHHHHxx\n4279\t8298\t1\t3\t9\t19\t79\t279\t279\t4279\t4279\t158\t159\tPIAAAA\tEHMAAA\tOOOOxx\n8436\t8299\t0\t0\t6\t16\t36\t436\t436\t3436\t8436\t72\t73\tMMAAAA\tFHMAAA\tVVVVxx\n1931\t8300\t1\t3\t1\t11\t31\t931\t1931\t1931\t1931\t62\t63\tHWAAAA\tGHMAAA\tAAAAxx\n2096\t8301\t0\t0\t6\t16\t96\t96\t96\t2096\t2096\t192\t193\tQCAAAA\tHHMAAA\tHHHHxx\n1638\t8302\t0\t2\t8\t18\t38\t638\t1638\t1638\t1638\t76\t77\tALAAAA\tIHMAAA\tOOOOxx\n2788\t8303\t0\t0\t8\t8\t88\t788\t788\t2788\t2788\t176\t177\tGDAAAA\tJHMAAA\tVVVVxx\n4751\t8304\t1\t3\t1\t11\t51\t751\t751\t4751\t4751\t102\t103\tTAAAAA\tKHMAAA\tAAAAxx\n8824\t8305\t0\t0\t4\t4\t24\t824\t824\t3824\t8824\t48\t49\tKBAAAA\tLHMAAA\tHHHHxx\n3098\t8306\t0\t2\t8\t18\t98\t98\t1098\t3098\t3098\t196\t197\tEPAAAA\tMHMAAA\tOOOOxx\n4497\t8307\t1\t1\t7\t17\t97\t497\t497\t4497\t4497\t194\t195\tZQAAAA\tNHMAAA\tVVVVxx\n5223\t8308\t1\t3\t3\t3\t23\t223\t1223\t223\t5223\t46\t47\tXSAAAA\tOHMAAA\tAAAAxx\n9212\t8309\t0\t0\t2\t12\t12\t212\t1212\t4212\t9212\t24\t25\tIQAAAA\tPHMAAA\tHHHHxx\n4265\t8310\t1\t1\t5\t5\t65\t265\t265\t4265\t4265\t130\t131\tBIAAAA\tQHMAAA\tOOOOxx\n6898\t8311\t0\t2\t8\t18\t98\t898\t898\t1898\t6898\t196\t197\tIFAAAA\tRHMAAA\tVVVVxx\n8808\t8312\t0\t0\t8\t8\t8\t808\t808\t3808\t8808\t16\t17\tUAAAAA\tSHMAAA\tAAAAxx\n5629\t8313\t1\t1\t9\t9\t29\t629\t1629\t629\t5629\t58\t59\tNIAAAA\tTHMAAA\tHHHHxx\n3779\t8314\t1\t3\t9\t19\t79\t779\t1779\t3779\t3779\t158\t159\tJPAAAA\tUHMAAA\tOOOOxx\n4972\t8315\t0\t0\t2\t12\t72\t972\t972\t4972\t4972\t144\t145\tGJAAAA\tVHMAAA\tVVVVxx\n4511\t8316\t1\t3\t1\t11\t11\t511\t511\t4511\t4511\t22\t23\tNRAAAA\tWHMAAA\tAAAAxx\n6761\t8317\t1\t1\t1\t1\t61\t761\t761\t1761\t6761\t122\t123\tBAAAAA\tXHMAAA\tHHHHxx\n2335\t8318\t1\t3\t5\t15\t35\t335\t335\t2335\t2335\t70\t71\tVLAAAA\tYHMAAA\tOOOOxx\n732\t8319\t0\t0\t2\t12\t32\t732\t732\t732\t732\t64\t65\tECAAAA\tZHMAAA\tVVVVxx\n4757\t8320\t1\t1\t7\t17\t57\t757\t757\t4757\t4757\t114\t115\tZAAAAA\tAIMAAA\tAAAAxx\n6624\t8321\t0\t0\t4\t4\t24\t624\t624\t1624\t6624\t48\t49\tUUAAAA\tBIMAAA\tHHHHxx\n5869\t8322\t1\t1\t9\t9\t69\t869\t1869\t869\t5869\t138\t139\tTRAAAA\tCIMAAA\tOOOOxx\n5842\t8323\t0\t2\t2\t2\t42\t842\t1842\t842\t5842\t84\t85\tSQAAAA\tDIMAAA\tVVVVxx\n5735\t8324\t1\t3\t5\t15\t35\t735\t1735\t735\t5735\t70\t71\tPMAAAA\tEIMAAA\tAAAAxx\n8276\t8325\t0\t0\t6\t16\t76\t276\t276\t3276\t8276\t152\t153\tIGAAAA\tFIMAAA\tHHHHxx\n7227\t8326\t1\t3\t7\t7\t27\t227\t1227\t2227\t7227\t54\t55\tZRAAAA\tGIMAAA\tOOOOxx\n4923\t8327\t1\t3\t3\t3\t23\t923\t923\t4923\t4923\t46\t47\tJHAAAA\tHIMAAA\tVVVVxx\n9135\t8328\t1\t3\t5\t15\t35\t135\t1135\t4135\t9135\t70\t71\tJNAAAA\tIIMAAA\tAAAAxx\n5813\t8329\t1\t1\t3\t13\t13\t813\t1813\t813\t5813\t26\t27\tPPAAAA\tJIMAAA\tHHHHxx\n9697\t8330\t1\t1\t7\t17\t97\t697\t1697\t4697\t9697\t194\t195\tZIAAAA\tKIMAAA\tOOOOxx\n3222\t8331\t0\t2\t2\t2\t22\t222\t1222\t3222\t3222\t44\t45\tYTAAAA\tLIMAAA\tVVVVxx\n2394\t8332\t0\t2\t4\t14\t94\t394\t394\t2394\t2394\t188\t189\tCOAAAA\tMIMAAA\tAAAAxx\n5784\t8333\t0\t0\t4\t4\t84\t784\t1784\t784\t5784\t168\t169\tMOAAAA\tNIMAAA\tHHHHxx\n3652\t8334\t0\t0\t2\t12\t52\t652\t1652\t3652\t3652\t104\t105\tMKAAAA\tOIMAAA\tOOOOxx\n8175\t8335\t1\t3\t5\t15\t75\t175\t175\t3175\t8175\t150\t151\tLCAAAA\tPIMAAA\tVVVVxx\n7568\t8336\t0\t0\t8\t8\t68\t568\t1568\t2568\t7568\t136\t137\tCFAAAA\tQIMAAA\tAAAAxx\n6645\t8337\t1\t1\t5\t5\t45\t645\t645\t1645\t6645\t90\t91\tPVAAAA\tRIMAAA\tHHHHxx\n8176\t8338\t0\t0\t6\t16\t76\t176\t176\t3176\t8176\t152\t153\tMCAAAA\tSIMAAA\tOOOOxx\n530\t8339\t0\t2\t0\t10\t30\t530\t530\t530\t530\t60\t61\tKUAAAA\tTIMAAA\tVVVVxx\n5439\t8340\t1\t3\t9\t19\t39\t439\t1439\t439\t5439\t78\t79\tFBAAAA\tUIMAAA\tAAAAxx\n61\t8341\t1\t1\t1\t1\t61\t61\t61\t61\t61\t122\t123\tJCAAAA\tVIMAAA\tHHHHxx\n3951\t8342\t1\t3\t1\t11\t51\t951\t1951\t3951\t3951\t102\t103\tZVAAAA\tWIMAAA\tOOOOxx\n5283\t8343\t1\t3\t3\t3\t83\t283\t1283\t283\t5283\t166\t167\tFVAAAA\tXIMAAA\tVVVVxx\n7226\t8344\t0\t2\t6\t6\t26\t226\t1226\t2226\t7226\t52\t53\tYRAAAA\tYIMAAA\tAAAAxx\n1954\t8345\t0\t2\t4\t14\t54\t954\t1954\t1954\t1954\t108\t109\tEXAAAA\tZIMAAA\tHHHHxx\n334\t8346\t0\t2\t4\t14\t34\t334\t334\t334\t334\t68\t69\tWMAAAA\tAJMAAA\tOOOOxx\n3921\t8347\t1\t1\t1\t1\t21\t921\t1921\t3921\t3921\t42\t43\tVUAAAA\tBJMAAA\tVVVVxx\n6276\t8348\t0\t0\t6\t16\t76\t276\t276\t1276\t6276\t152\t153\tKHAAAA\tCJMAAA\tAAAAxx\n3378\t8349\t0\t2\t8\t18\t78\t378\t1378\t3378\t3378\t156\t157\tYZAAAA\tDJMAAA\tHHHHxx\n5236\t8350\t0\t0\t6\t16\t36\t236\t1236\t236\t5236\t72\t73\tKTAAAA\tEJMAAA\tOOOOxx\n7781\t8351\t1\t1\t1\t1\t81\t781\t1781\t2781\t7781\t162\t163\tHNAAAA\tFJMAAA\tVVVVxx\n8601\t8352\t1\t1\t1\t1\t1\t601\t601\t3601\t8601\t2\t3\tVSAAAA\tGJMAAA\tAAAAxx\n1473\t8353\t1\t1\t3\t13\t73\t473\t1473\t1473\t1473\t146\t147\tREAAAA\tHJMAAA\tHHHHxx\n3246\t8354\t0\t2\t6\t6\t46\t246\t1246\t3246\t3246\t92\t93\tWUAAAA\tIJMAAA\tOOOOxx\n3601\t8355\t1\t1\t1\t1\t1\t601\t1601\t3601\t3601\t2\t3\tNIAAAA\tJJMAAA\tVVVVxx\n6861\t8356\t1\t1\t1\t1\t61\t861\t861\t1861\t6861\t122\t123\tXDAAAA\tKJMAAA\tAAAAxx\n9032\t8357\t0\t0\t2\t12\t32\t32\t1032\t4032\t9032\t64\t65\tKJAAAA\tLJMAAA\tHHHHxx\n216\t8358\t0\t0\t6\t16\t16\t216\t216\t216\t216\t32\t33\tIIAAAA\tMJMAAA\tOOOOxx\n3824\t8359\t0\t0\t4\t4\t24\t824\t1824\t3824\t3824\t48\t49\tCRAAAA\tNJMAAA\tVVVVxx\n8486\t8360\t0\t2\t6\t6\t86\t486\t486\t3486\t8486\t172\t173\tKOAAAA\tOJMAAA\tAAAAxx\n276\t8361\t0\t0\t6\t16\t76\t276\t276\t276\t276\t152\t153\tQKAAAA\tPJMAAA\tHHHHxx\n1838\t8362\t0\t2\t8\t18\t38\t838\t1838\t1838\t1838\t76\t77\tSSAAAA\tQJMAAA\tOOOOxx\n6175\t8363\t1\t3\t5\t15\t75\t175\t175\t1175\t6175\t150\t151\tNDAAAA\tRJMAAA\tVVVVxx\n3719\t8364\t1\t3\t9\t19\t19\t719\t1719\t3719\t3719\t38\t39\tBNAAAA\tSJMAAA\tAAAAxx\n6958\t8365\t0\t2\t8\t18\t58\t958\t958\t1958\t6958\t116\t117\tQHAAAA\tTJMAAA\tHHHHxx\n6822\t8366\t0\t2\t2\t2\t22\t822\t822\t1822\t6822\t44\t45\tKCAAAA\tUJMAAA\tOOOOxx\n3318\t8367\t0\t2\t8\t18\t18\t318\t1318\t3318\t3318\t36\t37\tQXAAAA\tVJMAAA\tVVVVxx\n7222\t8368\t0\t2\t2\t2\t22\t222\t1222\t2222\t7222\t44\t45\tURAAAA\tWJMAAA\tAAAAxx\n85\t8369\t1\t1\t5\t5\t85\t85\t85\t85\t85\t170\t171\tHDAAAA\tXJMAAA\tHHHHxx\n5158\t8370\t0\t2\t8\t18\t58\t158\t1158\t158\t5158\t116\t117\tKQAAAA\tYJMAAA\tOOOOxx\n6360\t8371\t0\t0\t0\t0\t60\t360\t360\t1360\t6360\t120\t121\tQKAAAA\tZJMAAA\tVVVVxx\n2599\t8372\t1\t3\t9\t19\t99\t599\t599\t2599\t2599\t198\t199\tZVAAAA\tAKMAAA\tAAAAxx\n4002\t8373\t0\t2\t2\t2\t2\t2\t2\t4002\t4002\t4\t5\tYXAAAA\tBKMAAA\tHHHHxx\n6597\t8374\t1\t1\t7\t17\t97\t597\t597\t1597\t6597\t194\t195\tTTAAAA\tCKMAAA\tOOOOxx\n5762\t8375\t0\t2\t2\t2\t62\t762\t1762\t762\t5762\t124\t125\tQNAAAA\tDKMAAA\tVVVVxx\n8383\t8376\t1\t3\t3\t3\t83\t383\t383\t3383\t8383\t166\t167\tLKAAAA\tEKMAAA\tAAAAxx\n4686\t8377\t0\t2\t6\t6\t86\t686\t686\t4686\t4686\t172\t173\tGYAAAA\tFKMAAA\tHHHHxx\n5972\t8378\t0\t0\t2\t12\t72\t972\t1972\t972\t5972\t144\t145\tSVAAAA\tGKMAAA\tOOOOxx\n1432\t8379\t0\t0\t2\t12\t32\t432\t1432\t1432\t1432\t64\t65\tCDAAAA\tHKMAAA\tVVVVxx\n1601\t8380\t1\t1\t1\t1\t1\t601\t1601\t1601\t1601\t2\t3\tPJAAAA\tIKMAAA\tAAAAxx\n3012\t8381\t0\t0\t2\t12\t12\t12\t1012\t3012\t3012\t24\t25\tWLAAAA\tJKMAAA\tHHHHxx\n9345\t8382\t1\t1\t5\t5\t45\t345\t1345\t4345\t9345\t90\t91\tLVAAAA\tKKMAAA\tOOOOxx\n8869\t8383\t1\t1\t9\t9\t69\t869\t869\t3869\t8869\t138\t139\tDDAAAA\tLKMAAA\tVVVVxx\n6612\t8384\t0\t0\t2\t12\t12\t612\t612\t1612\t6612\t24\t25\tIUAAAA\tMKMAAA\tAAAAxx\n262\t8385\t0\t2\t2\t2\t62\t262\t262\t262\t262\t124\t125\tCKAAAA\tNKMAAA\tHHHHxx\n300\t8386\t0\t0\t0\t0\t0\t300\t300\t300\t300\t0\t1\tOLAAAA\tOKMAAA\tOOOOxx\n3045\t8387\t1\t1\t5\t5\t45\t45\t1045\t3045\t3045\t90\t91\tDNAAAA\tPKMAAA\tVVVVxx\n7252\t8388\t0\t0\t2\t12\t52\t252\t1252\t2252\t7252\t104\t105\tYSAAAA\tQKMAAA\tAAAAxx\n9099\t8389\t1\t3\t9\t19\t99\t99\t1099\t4099\t9099\t198\t199\tZLAAAA\tRKMAAA\tHHHHxx\n9006\t8390\t0\t2\t6\t6\t6\t6\t1006\t4006\t9006\t12\t13\tKIAAAA\tSKMAAA\tOOOOxx\n3078\t8391\t0\t2\t8\t18\t78\t78\t1078\t3078\t3078\t156\t157\tKOAAAA\tTKMAAA\tVVVVxx\n5159\t8392\t1\t3\t9\t19\t59\t159\t1159\t159\t5159\t118\t119\tLQAAAA\tUKMAAA\tAAAAxx\n9329\t8393\t1\t1\t9\t9\t29\t329\t1329\t4329\t9329\t58\t59\tVUAAAA\tVKMAAA\tHHHHxx\n1393\t8394\t1\t1\t3\t13\t93\t393\t1393\t1393\t1393\t186\t187\tPBAAAA\tWKMAAA\tOOOOxx\n5894\t8395\t0\t2\t4\t14\t94\t894\t1894\t894\t5894\t188\t189\tSSAAAA\tXKMAAA\tVVVVxx\n11\t8396\t1\t3\t1\t11\t11\t11\t11\t11\t11\t22\t23\tLAAAAA\tYKMAAA\tAAAAxx\n5606\t8397\t0\t2\t6\t6\t6\t606\t1606\t606\t5606\t12\t13\tQHAAAA\tZKMAAA\tHHHHxx\n5541\t8398\t1\t1\t1\t1\t41\t541\t1541\t541\t5541\t82\t83\tDFAAAA\tALMAAA\tOOOOxx\n2689\t8399\t1\t1\t9\t9\t89\t689\t689\t2689\t2689\t178\t179\tLZAAAA\tBLMAAA\tVVVVxx\n1023\t8400\t1\t3\t3\t3\t23\t23\t1023\t1023\t1023\t46\t47\tJNAAAA\tCLMAAA\tAAAAxx\n8134\t8401\t0\t2\t4\t14\t34\t134\t134\t3134\t8134\t68\t69\tWAAAAA\tDLMAAA\tHHHHxx\n5923\t8402\t1\t3\t3\t3\t23\t923\t1923\t923\t5923\t46\t47\tVTAAAA\tELMAAA\tOOOOxx\n6056\t8403\t0\t0\t6\t16\t56\t56\t56\t1056\t6056\t112\t113\tYYAAAA\tFLMAAA\tVVVVxx\n653\t8404\t1\t1\t3\t13\t53\t653\t653\t653\t653\t106\t107\tDZAAAA\tGLMAAA\tAAAAxx\n367\t8405\t1\t3\t7\t7\t67\t367\t367\t367\t367\t134\t135\tDOAAAA\tHLMAAA\tHHHHxx\n1828\t8406\t0\t0\t8\t8\t28\t828\t1828\t1828\t1828\t56\t57\tISAAAA\tILMAAA\tOOOOxx\n6506\t8407\t0\t2\t6\t6\t6\t506\t506\t1506\t6506\t12\t13\tGQAAAA\tJLMAAA\tVVVVxx\n5772\t8408\t0\t0\t2\t12\t72\t772\t1772\t772\t5772\t144\t145\tAOAAAA\tKLMAAA\tAAAAxx\n8052\t8409\t0\t0\t2\t12\t52\t52\t52\t3052\t8052\t104\t105\tSXAAAA\tLLMAAA\tHHHHxx\n2633\t8410\t1\t1\t3\t13\t33\t633\t633\t2633\t2633\t66\t67\tHXAAAA\tMLMAAA\tOOOOxx\n4878\t8411\t0\t2\t8\t18\t78\t878\t878\t4878\t4878\t156\t157\tQFAAAA\tNLMAAA\tVVVVxx\n5621\t8412\t1\t1\t1\t1\t21\t621\t1621\t621\t5621\t42\t43\tFIAAAA\tOLMAAA\tAAAAxx\n41\t8413\t1\t1\t1\t1\t41\t41\t41\t41\t41\t82\t83\tPBAAAA\tPLMAAA\tHHHHxx\n4613\t8414\t1\t1\t3\t13\t13\t613\t613\t4613\t4613\t26\t27\tLVAAAA\tQLMAAA\tOOOOxx\n9389\t8415\t1\t1\t9\t9\t89\t389\t1389\t4389\t9389\t178\t179\tDXAAAA\tRLMAAA\tVVVVxx\n9414\t8416\t0\t2\t4\t14\t14\t414\t1414\t4414\t9414\t28\t29\tCYAAAA\tSLMAAA\tAAAAxx\n3583\t8417\t1\t3\t3\t3\t83\t583\t1583\t3583\t3583\t166\t167\tVHAAAA\tTLMAAA\tHHHHxx\n3454\t8418\t0\t2\t4\t14\t54\t454\t1454\t3454\t3454\t108\t109\tWCAAAA\tULMAAA\tOOOOxx\n719\t8419\t1\t3\t9\t19\t19\t719\t719\t719\t719\t38\t39\tRBAAAA\tVLMAAA\tVVVVxx\n6188\t8420\t0\t0\t8\t8\t88\t188\t188\t1188\t6188\t176\t177\tAEAAAA\tWLMAAA\tAAAAxx\n2288\t8421\t0\t0\t8\t8\t88\t288\t288\t2288\t2288\t176\t177\tAKAAAA\tXLMAAA\tHHHHxx\n1287\t8422\t1\t3\t7\t7\t87\t287\t1287\t1287\t1287\t174\t175\tNXAAAA\tYLMAAA\tOOOOxx\n1397\t8423\t1\t1\t7\t17\t97\t397\t1397\t1397\t1397\t194\t195\tTBAAAA\tZLMAAA\tVVVVxx\n7763\t8424\t1\t3\t3\t3\t63\t763\t1763\t2763\t7763\t126\t127\tPMAAAA\tAMMAAA\tAAAAxx\n5194\t8425\t0\t2\t4\t14\t94\t194\t1194\t194\t5194\t188\t189\tURAAAA\tBMMAAA\tHHHHxx\n3167\t8426\t1\t3\t7\t7\t67\t167\t1167\t3167\t3167\t134\t135\tVRAAAA\tCMMAAA\tOOOOxx\n9218\t8427\t0\t2\t8\t18\t18\t218\t1218\t4218\t9218\t36\t37\tOQAAAA\tDMMAAA\tVVVVxx\n2065\t8428\t1\t1\t5\t5\t65\t65\t65\t2065\t2065\t130\t131\tLBAAAA\tEMMAAA\tAAAAxx\n9669\t8429\t1\t1\t9\t9\t69\t669\t1669\t4669\t9669\t138\t139\tXHAAAA\tFMMAAA\tHHHHxx\n146\t8430\t0\t2\t6\t6\t46\t146\t146\t146\t146\t92\t93\tQFAAAA\tGMMAAA\tOOOOxx\n6141\t8431\t1\t1\t1\t1\t41\t141\t141\t1141\t6141\t82\t83\tFCAAAA\tHMMAAA\tVVVVxx\n2843\t8432\t1\t3\t3\t3\t43\t843\t843\t2843\t2843\t86\t87\tJFAAAA\tIMMAAA\tAAAAxx\n7934\t8433\t0\t2\t4\t14\t34\t934\t1934\t2934\t7934\t68\t69\tETAAAA\tJMMAAA\tHHHHxx\n2536\t8434\t0\t0\t6\t16\t36\t536\t536\t2536\t2536\t72\t73\tOTAAAA\tKMMAAA\tOOOOxx\n7088\t8435\t0\t0\t8\t8\t88\t88\t1088\t2088\t7088\t176\t177\tQMAAAA\tLMMAAA\tVVVVxx\n2519\t8436\t1\t3\t9\t19\t19\t519\t519\t2519\t2519\t38\t39\tXSAAAA\tMMMAAA\tAAAAxx\n6650\t8437\t0\t2\t0\t10\t50\t650\t650\t1650\t6650\t100\t101\tUVAAAA\tNMMAAA\tHHHHxx\n3007\t8438\t1\t3\t7\t7\t7\t7\t1007\t3007\t3007\t14\t15\tRLAAAA\tOMMAAA\tOOOOxx\n4507\t8439\t1\t3\t7\t7\t7\t507\t507\t4507\t4507\t14\t15\tJRAAAA\tPMMAAA\tVVVVxx\n4892\t8440\t0\t0\t2\t12\t92\t892\t892\t4892\t4892\t184\t185\tEGAAAA\tQMMAAA\tAAAAxx\n7159\t8441\t1\t3\t9\t19\t59\t159\t1159\t2159\t7159\t118\t119\tJPAAAA\tRMMAAA\tHHHHxx\n3171\t8442\t1\t3\t1\t11\t71\t171\t1171\t3171\t3171\t142\t143\tZRAAAA\tSMMAAA\tOOOOxx\n1080\t8443\t0\t0\t0\t0\t80\t80\t1080\t1080\t1080\t160\t161\tOPAAAA\tTMMAAA\tVVVVxx\n7248\t8444\t0\t0\t8\t8\t48\t248\t1248\t2248\t7248\t96\t97\tUSAAAA\tUMMAAA\tAAAAxx\n7230\t8445\t0\t2\t0\t10\t30\t230\t1230\t2230\t7230\t60\t61\tCSAAAA\tVMMAAA\tHHHHxx\n3823\t8446\t1\t3\t3\t3\t23\t823\t1823\t3823\t3823\t46\t47\tBRAAAA\tWMMAAA\tOOOOxx\n5517\t8447\t1\t1\t7\t17\t17\t517\t1517\t517\t5517\t34\t35\tFEAAAA\tXMMAAA\tVVVVxx\n1482\t8448\t0\t2\t2\t2\t82\t482\t1482\t1482\t1482\t164\t165\tAFAAAA\tYMMAAA\tAAAAxx\n9953\t8449\t1\t1\t3\t13\t53\t953\t1953\t4953\t9953\t106\t107\tVSAAAA\tZMMAAA\tHHHHxx\n2754\t8450\t0\t2\t4\t14\t54\t754\t754\t2754\t2754\t108\t109\tYBAAAA\tANMAAA\tOOOOxx\n3875\t8451\t1\t3\t5\t15\t75\t875\t1875\t3875\t3875\t150\t151\tBTAAAA\tBNMAAA\tVVVVxx\n9800\t8452\t0\t0\t0\t0\t0\t800\t1800\t4800\t9800\t0\t1\tYMAAAA\tCNMAAA\tAAAAxx\n8819\t8453\t1\t3\t9\t19\t19\t819\t819\t3819\t8819\t38\t39\tFBAAAA\tDNMAAA\tHHHHxx\n8267\t8454\t1\t3\t7\t7\t67\t267\t267\t3267\t8267\t134\t135\tZFAAAA\tENMAAA\tOOOOxx\n520\t8455\t0\t0\t0\t0\t20\t520\t520\t520\t520\t40\t41\tAUAAAA\tFNMAAA\tVVVVxx\n5770\t8456\t0\t2\t0\t10\t70\t770\t1770\t770\t5770\t140\t141\tYNAAAA\tGNMAAA\tAAAAxx\n2114\t8457\t0\t2\t4\t14\t14\t114\t114\t2114\t2114\t28\t29\tIDAAAA\tHNMAAA\tHHHHxx\n5045\t8458\t1\t1\t5\t5\t45\t45\t1045\t45\t5045\t90\t91\tBMAAAA\tINMAAA\tOOOOxx\n1094\t8459\t0\t2\t4\t14\t94\t94\t1094\t1094\t1094\t188\t189\tCQAAAA\tJNMAAA\tVVVVxx\n8786\t8460\t0\t2\t6\t6\t86\t786\t786\t3786\t8786\t172\t173\tYZAAAA\tKNMAAA\tAAAAxx\n353\t8461\t1\t1\t3\t13\t53\t353\t353\t353\t353\t106\t107\tPNAAAA\tLNMAAA\tHHHHxx\n290\t8462\t0\t2\t0\t10\t90\t290\t290\t290\t290\t180\t181\tELAAAA\tMNMAAA\tOOOOxx\n3376\t8463\t0\t0\t6\t16\t76\t376\t1376\t3376\t3376\t152\t153\tWZAAAA\tNNMAAA\tVVVVxx\n9305\t8464\t1\t1\t5\t5\t5\t305\t1305\t4305\t9305\t10\t11\tXTAAAA\tONMAAA\tAAAAxx\n186\t8465\t0\t2\t6\t6\t86\t186\t186\t186\t186\t172\t173\tEHAAAA\tPNMAAA\tHHHHxx\n4817\t8466\t1\t1\t7\t17\t17\t817\t817\t4817\t4817\t34\t35\tHDAAAA\tQNMAAA\tOOOOxx\n4638\t8467\t0\t2\t8\t18\t38\t638\t638\t4638\t4638\t76\t77\tKWAAAA\tRNMAAA\tVVVVxx\n3558\t8468\t0\t2\t8\t18\t58\t558\t1558\t3558\t3558\t116\t117\tWGAAAA\tSNMAAA\tAAAAxx\n9285\t8469\t1\t1\t5\t5\t85\t285\t1285\t4285\t9285\t170\t171\tDTAAAA\tTNMAAA\tHHHHxx\n848\t8470\t0\t0\t8\t8\t48\t848\t848\t848\t848\t96\t97\tQGAAAA\tUNMAAA\tOOOOxx\n8923\t8471\t1\t3\t3\t3\t23\t923\t923\t3923\t8923\t46\t47\tFFAAAA\tVNMAAA\tVVVVxx\n6826\t8472\t0\t2\t6\t6\t26\t826\t826\t1826\t6826\t52\t53\tOCAAAA\tWNMAAA\tAAAAxx\n5187\t8473\t1\t3\t7\t7\t87\t187\t1187\t187\t5187\t174\t175\tNRAAAA\tXNMAAA\tHHHHxx\n2398\t8474\t0\t2\t8\t18\t98\t398\t398\t2398\t2398\t196\t197\tGOAAAA\tYNMAAA\tOOOOxx\n7653\t8475\t1\t1\t3\t13\t53\t653\t1653\t2653\t7653\t106\t107\tJIAAAA\tZNMAAA\tVVVVxx\n8835\t8476\t1\t3\t5\t15\t35\t835\t835\t3835\t8835\t70\t71\tVBAAAA\tAOMAAA\tAAAAxx\n5736\t8477\t0\t0\t6\t16\t36\t736\t1736\t736\t5736\t72\t73\tQMAAAA\tBOMAAA\tHHHHxx\n1238\t8478\t0\t2\t8\t18\t38\t238\t1238\t1238\t1238\t76\t77\tQVAAAA\tCOMAAA\tOOOOxx\n6021\t8479\t1\t1\t1\t1\t21\t21\t21\t1021\t6021\t42\t43\tPXAAAA\tDOMAAA\tVVVVxx\n6815\t8480\t1\t3\t5\t15\t15\t815\t815\t1815\t6815\t30\t31\tDCAAAA\tEOMAAA\tAAAAxx\n2549\t8481\t1\t1\t9\t9\t49\t549\t549\t2549\t2549\t98\t99\tBUAAAA\tFOMAAA\tHHHHxx\n5657\t8482\t1\t1\t7\t17\t57\t657\t1657\t657\t5657\t114\t115\tPJAAAA\tGOMAAA\tOOOOxx\n6855\t8483\t1\t3\t5\t15\t55\t855\t855\t1855\t6855\t110\t111\tRDAAAA\tHOMAAA\tVVVVxx\n1225\t8484\t1\t1\t5\t5\t25\t225\t1225\t1225\t1225\t50\t51\tDVAAAA\tIOMAAA\tAAAAxx\n7452\t8485\t0\t0\t2\t12\t52\t452\t1452\t2452\t7452\t104\t105\tQAAAAA\tJOMAAA\tHHHHxx\n2479\t8486\t1\t3\t9\t19\t79\t479\t479\t2479\t2479\t158\t159\tJRAAAA\tKOMAAA\tOOOOxx\n7974\t8487\t0\t2\t4\t14\t74\t974\t1974\t2974\t7974\t148\t149\tSUAAAA\tLOMAAA\tVVVVxx\n1212\t8488\t0\t0\t2\t12\t12\t212\t1212\t1212\t1212\t24\t25\tQUAAAA\tMOMAAA\tAAAAxx\n8883\t8489\t1\t3\t3\t3\t83\t883\t883\t3883\t8883\t166\t167\tRDAAAA\tNOMAAA\tHHHHxx\n8150\t8490\t0\t2\t0\t10\t50\t150\t150\t3150\t8150\t100\t101\tMBAAAA\tOOMAAA\tOOOOxx\n3392\t8491\t0\t0\t2\t12\t92\t392\t1392\t3392\t3392\t184\t185\tMAAAAA\tPOMAAA\tVVVVxx\n6774\t8492\t0\t2\t4\t14\t74\t774\t774\t1774\t6774\t148\t149\tOAAAAA\tQOMAAA\tAAAAxx\n904\t8493\t0\t0\t4\t4\t4\t904\t904\t904\t904\t8\t9\tUIAAAA\tROMAAA\tHHHHxx\n5068\t8494\t0\t0\t8\t8\t68\t68\t1068\t68\t5068\t136\t137\tYMAAAA\tSOMAAA\tOOOOxx\n9339\t8495\t1\t3\t9\t19\t39\t339\t1339\t4339\t9339\t78\t79\tFVAAAA\tTOMAAA\tVVVVxx\n1062\t8496\t0\t2\t2\t2\t62\t62\t1062\t1062\t1062\t124\t125\tWOAAAA\tUOMAAA\tAAAAxx\n3841\t8497\t1\t1\t1\t1\t41\t841\t1841\t3841\t3841\t82\t83\tTRAAAA\tVOMAAA\tHHHHxx\n8924\t8498\t0\t0\t4\t4\t24\t924\t924\t3924\t8924\t48\t49\tGFAAAA\tWOMAAA\tOOOOxx\n9795\t8499\t1\t3\t5\t15\t95\t795\t1795\t4795\t9795\t190\t191\tTMAAAA\tXOMAAA\tVVVVxx\n3981\t8500\t1\t1\t1\t1\t81\t981\t1981\t3981\t3981\t162\t163\tDXAAAA\tYOMAAA\tAAAAxx\n4290\t8501\t0\t2\t0\t10\t90\t290\t290\t4290\t4290\t180\t181\tAJAAAA\tZOMAAA\tHHHHxx\n1067\t8502\t1\t3\t7\t7\t67\t67\t1067\t1067\t1067\t134\t135\tBPAAAA\tAPMAAA\tOOOOxx\n8679\t8503\t1\t3\t9\t19\t79\t679\t679\t3679\t8679\t158\t159\tVVAAAA\tBPMAAA\tVVVVxx\n2894\t8504\t0\t2\t4\t14\t94\t894\t894\t2894\t2894\t188\t189\tIHAAAA\tCPMAAA\tAAAAxx\n9248\t8505\t0\t0\t8\t8\t48\t248\t1248\t4248\t9248\t96\t97\tSRAAAA\tDPMAAA\tHHHHxx\n1072\t8506\t0\t0\t2\t12\t72\t72\t1072\t1072\t1072\t144\t145\tGPAAAA\tEPMAAA\tOOOOxx\n3510\t8507\t0\t2\t0\t10\t10\t510\t1510\t3510\t3510\t20\t21\tAFAAAA\tFPMAAA\tVVVVxx\n6871\t8508\t1\t3\t1\t11\t71\t871\t871\t1871\t6871\t142\t143\tHEAAAA\tGPMAAA\tAAAAxx\n8701\t8509\t1\t1\t1\t1\t1\t701\t701\t3701\t8701\t2\t3\tRWAAAA\tHPMAAA\tHHHHxx\n8170\t8510\t0\t2\t0\t10\t70\t170\t170\t3170\t8170\t140\t141\tGCAAAA\tIPMAAA\tOOOOxx\n2730\t8511\t0\t2\t0\t10\t30\t730\t730\t2730\t2730\t60\t61\tABAAAA\tJPMAAA\tVVVVxx\n2668\t8512\t0\t0\t8\t8\t68\t668\t668\t2668\t2668\t136\t137\tQYAAAA\tKPMAAA\tAAAAxx\n8723\t8513\t1\t3\t3\t3\t23\t723\t723\t3723\t8723\t46\t47\tNXAAAA\tLPMAAA\tHHHHxx\n3439\t8514\t1\t3\t9\t19\t39\t439\t1439\t3439\t3439\t78\t79\tHCAAAA\tMPMAAA\tOOOOxx\n6219\t8515\t1\t3\t9\t19\t19\t219\t219\t1219\t6219\t38\t39\tFFAAAA\tNPMAAA\tVVVVxx\n4264\t8516\t0\t0\t4\t4\t64\t264\t264\t4264\t4264\t128\t129\tAIAAAA\tOPMAAA\tAAAAxx\n3929\t8517\t1\t1\t9\t9\t29\t929\t1929\t3929\t3929\t58\t59\tDVAAAA\tPPMAAA\tHHHHxx\n7\t8518\t1\t3\t7\t7\t7\t7\t7\t7\t7\t14\t15\tHAAAAA\tQPMAAA\tOOOOxx\n3737\t8519\t1\t1\t7\t17\t37\t737\t1737\t3737\t3737\t74\t75\tTNAAAA\tRPMAAA\tVVVVxx\n358\t8520\t0\t2\t8\t18\t58\t358\t358\t358\t358\t116\t117\tUNAAAA\tSPMAAA\tAAAAxx\n5128\t8521\t0\t0\t8\t8\t28\t128\t1128\t128\t5128\t56\t57\tGPAAAA\tTPMAAA\tHHHHxx\n7353\t8522\t1\t1\t3\t13\t53\t353\t1353\t2353\t7353\t106\t107\tVWAAAA\tUPMAAA\tOOOOxx\n8758\t8523\t0\t2\t8\t18\t58\t758\t758\t3758\t8758\t116\t117\tWYAAAA\tVPMAAA\tVVVVxx\n7284\t8524\t0\t0\t4\t4\t84\t284\t1284\t2284\t7284\t168\t169\tEUAAAA\tWPMAAA\tAAAAxx\n4037\t8525\t1\t1\t7\t17\t37\t37\t37\t4037\t4037\t74\t75\tHZAAAA\tXPMAAA\tHHHHxx\n435\t8526\t1\t3\t5\t15\t35\t435\t435\t435\t435\t70\t71\tTQAAAA\tYPMAAA\tOOOOxx\n3580\t8527\t0\t0\t0\t0\t80\t580\t1580\t3580\t3580\t160\t161\tSHAAAA\tZPMAAA\tVVVVxx\n4554\t8528\t0\t2\t4\t14\t54\t554\t554\t4554\t4554\t108\t109\tETAAAA\tAQMAAA\tAAAAxx\n4337\t8529\t1\t1\t7\t17\t37\t337\t337\t4337\t4337\t74\t75\tVKAAAA\tBQMAAA\tHHHHxx\n512\t8530\t0\t0\t2\t12\t12\t512\t512\t512\t512\t24\t25\tSTAAAA\tCQMAAA\tOOOOxx\n2032\t8531\t0\t0\t2\t12\t32\t32\t32\t2032\t2032\t64\t65\tEAAAAA\tDQMAAA\tVVVVxx\n1755\t8532\t1\t3\t5\t15\t55\t755\t1755\t1755\t1755\t110\t111\tNPAAAA\tEQMAAA\tAAAAxx\n9923\t8533\t1\t3\t3\t3\t23\t923\t1923\t4923\t9923\t46\t47\tRRAAAA\tFQMAAA\tHHHHxx\n3747\t8534\t1\t3\t7\t7\t47\t747\t1747\t3747\t3747\t94\t95\tDOAAAA\tGQMAAA\tOOOOxx\n27\t8535\t1\t3\t7\t7\t27\t27\t27\t27\t27\t54\t55\tBBAAAA\tHQMAAA\tVVVVxx\n3075\t8536\t1\t3\t5\t15\t75\t75\t1075\t3075\t3075\t150\t151\tHOAAAA\tIQMAAA\tAAAAxx\n6259\t8537\t1\t3\t9\t19\t59\t259\t259\t1259\t6259\t118\t119\tTGAAAA\tJQMAAA\tHHHHxx\n2940\t8538\t0\t0\t0\t0\t40\t940\t940\t2940\t2940\t80\t81\tCJAAAA\tKQMAAA\tOOOOxx\n5724\t8539\t0\t0\t4\t4\t24\t724\t1724\t724\t5724\t48\t49\tEMAAAA\tLQMAAA\tVVVVxx\n5638\t8540\t0\t2\t8\t18\t38\t638\t1638\t638\t5638\t76\t77\tWIAAAA\tMQMAAA\tAAAAxx\n479\t8541\t1\t3\t9\t19\t79\t479\t479\t479\t479\t158\t159\tLSAAAA\tNQMAAA\tHHHHxx\n4125\t8542\t1\t1\t5\t5\t25\t125\t125\t4125\t4125\t50\t51\tRCAAAA\tOQMAAA\tOOOOxx\n1525\t8543\t1\t1\t5\t5\t25\t525\t1525\t1525\t1525\t50\t51\tRGAAAA\tPQMAAA\tVVVVxx\n7529\t8544\t1\t1\t9\t9\t29\t529\t1529\t2529\t7529\t58\t59\tPDAAAA\tQQMAAA\tAAAAxx\n931\t8545\t1\t3\t1\t11\t31\t931\t931\t931\t931\t62\t63\tVJAAAA\tRQMAAA\tHHHHxx\n5175\t8546\t1\t3\t5\t15\t75\t175\t1175\t175\t5175\t150\t151\tBRAAAA\tSQMAAA\tOOOOxx\n6798\t8547\t0\t2\t8\t18\t98\t798\t798\t1798\t6798\t196\t197\tMBAAAA\tTQMAAA\tVVVVxx\n2111\t8548\t1\t3\t1\t11\t11\t111\t111\t2111\t2111\t22\t23\tFDAAAA\tUQMAAA\tAAAAxx\n6145\t8549\t1\t1\t5\t5\t45\t145\t145\t1145\t6145\t90\t91\tJCAAAA\tVQMAAA\tHHHHxx\n4712\t8550\t0\t0\t2\t12\t12\t712\t712\t4712\t4712\t24\t25\tGZAAAA\tWQMAAA\tOOOOxx\n3110\t8551\t0\t2\t0\t10\t10\t110\t1110\t3110\t3110\t20\t21\tQPAAAA\tXQMAAA\tVVVVxx\n97\t8552\t1\t1\t7\t17\t97\t97\t97\t97\t97\t194\t195\tTDAAAA\tYQMAAA\tAAAAxx\n758\t8553\t0\t2\t8\t18\t58\t758\t758\t758\t758\t116\t117\tEDAAAA\tZQMAAA\tHHHHxx\n1895\t8554\t1\t3\t5\t15\t95\t895\t1895\t1895\t1895\t190\t191\tXUAAAA\tARMAAA\tOOOOxx\n5289\t8555\t1\t1\t9\t9\t89\t289\t1289\t289\t5289\t178\t179\tLVAAAA\tBRMAAA\tVVVVxx\n5026\t8556\t0\t2\t6\t6\t26\t26\t1026\t26\t5026\t52\t53\tILAAAA\tCRMAAA\tAAAAxx\n4725\t8557\t1\t1\t5\t5\t25\t725\t725\t4725\t4725\t50\t51\tTZAAAA\tDRMAAA\tHHHHxx\n1679\t8558\t1\t3\t9\t19\t79\t679\t1679\t1679\t1679\t158\t159\tPMAAAA\tERMAAA\tOOOOxx\n4433\t8559\t1\t1\t3\t13\t33\t433\t433\t4433\t4433\t66\t67\tNOAAAA\tFRMAAA\tVVVVxx\n5340\t8560\t0\t0\t0\t0\t40\t340\t1340\t340\t5340\t80\t81\tKXAAAA\tGRMAAA\tAAAAxx\n6340\t8561\t0\t0\t0\t0\t40\t340\t340\t1340\t6340\t80\t81\tWJAAAA\tHRMAAA\tHHHHxx\n3261\t8562\t1\t1\t1\t1\t61\t261\t1261\t3261\t3261\t122\t123\tLVAAAA\tIRMAAA\tOOOOxx\n8108\t8563\t0\t0\t8\t8\t8\t108\t108\t3108\t8108\t16\t17\tWZAAAA\tJRMAAA\tVVVVxx\n8785\t8564\t1\t1\t5\t5\t85\t785\t785\t3785\t8785\t170\t171\tXZAAAA\tKRMAAA\tAAAAxx\n7391\t8565\t1\t3\t1\t11\t91\t391\t1391\t2391\t7391\t182\t183\tHYAAAA\tLRMAAA\tHHHHxx\n1496\t8566\t0\t0\t6\t16\t96\t496\t1496\t1496\t1496\t192\t193\tOFAAAA\tMRMAAA\tOOOOxx\n1484\t8567\t0\t0\t4\t4\t84\t484\t1484\t1484\t1484\t168\t169\tCFAAAA\tNRMAAA\tVVVVxx\n5884\t8568\t0\t0\t4\t4\t84\t884\t1884\t884\t5884\t168\t169\tISAAAA\tORMAAA\tAAAAxx\n342\t8569\t0\t2\t2\t2\t42\t342\t342\t342\t342\t84\t85\tENAAAA\tPRMAAA\tHHHHxx\n7659\t8570\t1\t3\t9\t19\t59\t659\t1659\t2659\t7659\t118\t119\tPIAAAA\tQRMAAA\tOOOOxx\n6635\t8571\t1\t3\t5\t15\t35\t635\t635\t1635\t6635\t70\t71\tFVAAAA\tRRMAAA\tVVVVxx\n8507\t8572\t1\t3\t7\t7\t7\t507\t507\t3507\t8507\t14\t15\tFPAAAA\tSRMAAA\tAAAAxx\n2583\t8573\t1\t3\t3\t3\t83\t583\t583\t2583\t2583\t166\t167\tJVAAAA\tTRMAAA\tHHHHxx\n6533\t8574\t1\t1\t3\t13\t33\t533\t533\t1533\t6533\t66\t67\tHRAAAA\tURMAAA\tOOOOxx\n5879\t8575\t1\t3\t9\t19\t79\t879\t1879\t879\t5879\t158\t159\tDSAAAA\tVRMAAA\tVVVVxx\n5511\t8576\t1\t3\t1\t11\t11\t511\t1511\t511\t5511\t22\t23\tZDAAAA\tWRMAAA\tAAAAxx\n3682\t8577\t0\t2\t2\t2\t82\t682\t1682\t3682\t3682\t164\t165\tQLAAAA\tXRMAAA\tHHHHxx\n7182\t8578\t0\t2\t2\t2\t82\t182\t1182\t2182\t7182\t164\t165\tGQAAAA\tYRMAAA\tOOOOxx\n1409\t8579\t1\t1\t9\t9\t9\t409\t1409\t1409\t1409\t18\t19\tFCAAAA\tZRMAAA\tVVVVxx\n3363\t8580\t1\t3\t3\t3\t63\t363\t1363\t3363\t3363\t126\t127\tJZAAAA\tASMAAA\tAAAAxx\n729\t8581\t1\t1\t9\t9\t29\t729\t729\t729\t729\t58\t59\tBCAAAA\tBSMAAA\tHHHHxx\n5857\t8582\t1\t1\t7\t17\t57\t857\t1857\t857\t5857\t114\t115\tHRAAAA\tCSMAAA\tOOOOxx\n235\t8583\t1\t3\t5\t15\t35\t235\t235\t235\t235\t70\t71\tBJAAAA\tDSMAAA\tVVVVxx\n193\t8584\t1\t1\t3\t13\t93\t193\t193\t193\t193\t186\t187\tLHAAAA\tESMAAA\tAAAAxx\n5586\t8585\t0\t2\t6\t6\t86\t586\t1586\t586\t5586\t172\t173\tWGAAAA\tFSMAAA\tHHHHxx\n6203\t8586\t1\t3\t3\t3\t3\t203\t203\t1203\t6203\t6\t7\tPEAAAA\tGSMAAA\tOOOOxx\n6795\t8587\t1\t3\t5\t15\t95\t795\t795\t1795\t6795\t190\t191\tJBAAAA\tHSMAAA\tVVVVxx\n3211\t8588\t1\t3\t1\t11\t11\t211\t1211\t3211\t3211\t22\t23\tNTAAAA\tISMAAA\tAAAAxx\n9763\t8589\t1\t3\t3\t3\t63\t763\t1763\t4763\t9763\t126\t127\tNLAAAA\tJSMAAA\tHHHHxx\n9043\t8590\t1\t3\t3\t3\t43\t43\t1043\t4043\t9043\t86\t87\tVJAAAA\tKSMAAA\tOOOOxx\n2854\t8591\t0\t2\t4\t14\t54\t854\t854\t2854\t2854\t108\t109\tUFAAAA\tLSMAAA\tVVVVxx\n565\t8592\t1\t1\t5\t5\t65\t565\t565\t565\t565\t130\t131\tTVAAAA\tMSMAAA\tAAAAxx\n9284\t8593\t0\t0\t4\t4\t84\t284\t1284\t4284\t9284\t168\t169\tCTAAAA\tNSMAAA\tHHHHxx\n7886\t8594\t0\t2\t6\t6\t86\t886\t1886\t2886\t7886\t172\t173\tIRAAAA\tOSMAAA\tOOOOxx\n122\t8595\t0\t2\t2\t2\t22\t122\t122\t122\t122\t44\t45\tSEAAAA\tPSMAAA\tVVVVxx\n4934\t8596\t0\t2\t4\t14\t34\t934\t934\t4934\t4934\t68\t69\tUHAAAA\tQSMAAA\tAAAAxx\n1766\t8597\t0\t2\t6\t6\t66\t766\t1766\t1766\t1766\t132\t133\tYPAAAA\tRSMAAA\tHHHHxx\n2554\t8598\t0\t2\t4\t14\t54\t554\t554\t2554\t2554\t108\t109\tGUAAAA\tSSMAAA\tOOOOxx\n488\t8599\t0\t0\t8\t8\t88\t488\t488\t488\t488\t176\t177\tUSAAAA\tTSMAAA\tVVVVxx\n825\t8600\t1\t1\t5\t5\t25\t825\t825\t825\t825\t50\t51\tTFAAAA\tUSMAAA\tAAAAxx\n678\t8601\t0\t2\t8\t18\t78\t678\t678\t678\t678\t156\t157\tCAAAAA\tVSMAAA\tHHHHxx\n4543\t8602\t1\t3\t3\t3\t43\t543\t543\t4543\t4543\t86\t87\tTSAAAA\tWSMAAA\tOOOOxx\n1699\t8603\t1\t3\t9\t19\t99\t699\t1699\t1699\t1699\t198\t199\tJNAAAA\tXSMAAA\tVVVVxx\n3771\t8604\t1\t3\t1\t11\t71\t771\t1771\t3771\t3771\t142\t143\tBPAAAA\tYSMAAA\tAAAAxx\n1234\t8605\t0\t2\t4\t14\t34\t234\t1234\t1234\t1234\t68\t69\tMVAAAA\tZSMAAA\tHHHHxx\n4152\t8606\t0\t0\t2\t12\t52\t152\t152\t4152\t4152\t104\t105\tSDAAAA\tATMAAA\tOOOOxx\n1632\t8607\t0\t0\t2\t12\t32\t632\t1632\t1632\t1632\t64\t65\tUKAAAA\tBTMAAA\tVVVVxx\n4988\t8608\t0\t0\t8\t8\t88\t988\t988\t4988\t4988\t176\t177\tWJAAAA\tCTMAAA\tAAAAxx\n1980\t8609\t0\t0\t0\t0\t80\t980\t1980\t1980\t1980\t160\t161\tEYAAAA\tDTMAAA\tHHHHxx\n7479\t8610\t1\t3\t9\t19\t79\t479\t1479\t2479\t7479\t158\t159\tRBAAAA\tETMAAA\tOOOOxx\n2586\t8611\t0\t2\t6\t6\t86\t586\t586\t2586\t2586\t172\t173\tMVAAAA\tFTMAAA\tVVVVxx\n5433\t8612\t1\t1\t3\t13\t33\t433\t1433\t433\t5433\t66\t67\tZAAAAA\tGTMAAA\tAAAAxx\n2261\t8613\t1\t1\t1\t1\t61\t261\t261\t2261\t2261\t122\t123\tZIAAAA\tHTMAAA\tHHHHxx\n1180\t8614\t0\t0\t0\t0\t80\t180\t1180\t1180\t1180\t160\t161\tKTAAAA\tITMAAA\tOOOOxx\n3938\t8615\t0\t2\t8\t18\t38\t938\t1938\t3938\t3938\t76\t77\tMVAAAA\tJTMAAA\tVVVVxx\n6714\t8616\t0\t2\t4\t14\t14\t714\t714\t1714\t6714\t28\t29\tGYAAAA\tKTMAAA\tAAAAxx\n2890\t8617\t0\t2\t0\t10\t90\t890\t890\t2890\t2890\t180\t181\tEHAAAA\tLTMAAA\tHHHHxx\n7379\t8618\t1\t3\t9\t19\t79\t379\t1379\t2379\t7379\t158\t159\tVXAAAA\tMTMAAA\tOOOOxx\n5896\t8619\t0\t0\t6\t16\t96\t896\t1896\t896\t5896\t192\t193\tUSAAAA\tNTMAAA\tVVVVxx\n5949\t8620\t1\t1\t9\t9\t49\t949\t1949\t949\t5949\t98\t99\tVUAAAA\tOTMAAA\tAAAAxx\n3194\t8621\t0\t2\t4\t14\t94\t194\t1194\t3194\t3194\t188\t189\tWSAAAA\tPTMAAA\tHHHHxx\n9325\t8622\t1\t1\t5\t5\t25\t325\t1325\t4325\t9325\t50\t51\tRUAAAA\tQTMAAA\tOOOOxx\n9531\t8623\t1\t3\t1\t11\t31\t531\t1531\t4531\t9531\t62\t63\tPCAAAA\tRTMAAA\tVVVVxx\n711\t8624\t1\t3\t1\t11\t11\t711\t711\t711\t711\t22\t23\tJBAAAA\tSTMAAA\tAAAAxx\n2450\t8625\t0\t2\t0\t10\t50\t450\t450\t2450\t2450\t100\t101\tGQAAAA\tTTMAAA\tHHHHxx\n1929\t8626\t1\t1\t9\t9\t29\t929\t1929\t1929\t1929\t58\t59\tFWAAAA\tUTMAAA\tOOOOxx\n6165\t8627\t1\t1\t5\t5\t65\t165\t165\t1165\t6165\t130\t131\tDDAAAA\tVTMAAA\tVVVVxx\n4050\t8628\t0\t2\t0\t10\t50\t50\t50\t4050\t4050\t100\t101\tUZAAAA\tWTMAAA\tAAAAxx\n9011\t8629\t1\t3\t1\t11\t11\t11\t1011\t4011\t9011\t22\t23\tPIAAAA\tXTMAAA\tHHHHxx\n7916\t8630\t0\t0\t6\t16\t16\t916\t1916\t2916\t7916\t32\t33\tMSAAAA\tYTMAAA\tOOOOxx\n9136\t8631\t0\t0\t6\t16\t36\t136\t1136\t4136\t9136\t72\t73\tKNAAAA\tZTMAAA\tVVVVxx\n8782\t8632\t0\t2\t2\t2\t82\t782\t782\t3782\t8782\t164\t165\tUZAAAA\tAUMAAA\tAAAAxx\n8491\t8633\t1\t3\t1\t11\t91\t491\t491\t3491\t8491\t182\t183\tPOAAAA\tBUMAAA\tHHHHxx\n5114\t8634\t0\t2\t4\t14\t14\t114\t1114\t114\t5114\t28\t29\tSOAAAA\tCUMAAA\tOOOOxx\n5815\t8635\t1\t3\t5\t15\t15\t815\t1815\t815\t5815\t30\t31\tRPAAAA\tDUMAAA\tVVVVxx\n5628\t8636\t0\t0\t8\t8\t28\t628\t1628\t628\t5628\t56\t57\tMIAAAA\tEUMAAA\tAAAAxx\n810\t8637\t0\t2\t0\t10\t10\t810\t810\t810\t810\t20\t21\tEFAAAA\tFUMAAA\tHHHHxx\n6178\t8638\t0\t2\t8\t18\t78\t178\t178\t1178\t6178\t156\t157\tQDAAAA\tGUMAAA\tOOOOxx\n2619\t8639\t1\t3\t9\t19\t19\t619\t619\t2619\t2619\t38\t39\tTWAAAA\tHUMAAA\tVVVVxx\n3340\t8640\t0\t0\t0\t0\t40\t340\t1340\t3340\t3340\t80\t81\tMYAAAA\tIUMAAA\tAAAAxx\n2491\t8641\t1\t3\t1\t11\t91\t491\t491\t2491\t2491\t182\t183\tVRAAAA\tJUMAAA\tHHHHxx\n3574\t8642\t0\t2\t4\t14\t74\t574\t1574\t3574\t3574\t148\t149\tMHAAAA\tKUMAAA\tOOOOxx\n6754\t8643\t0\t2\t4\t14\t54\t754\t754\t1754\t6754\t108\t109\tUZAAAA\tLUMAAA\tVVVVxx\n1566\t8644\t0\t2\t6\t6\t66\t566\t1566\t1566\t1566\t132\t133\tGIAAAA\tMUMAAA\tAAAAxx\n9174\t8645\t0\t2\t4\t14\t74\t174\t1174\t4174\t9174\t148\t149\tWOAAAA\tNUMAAA\tHHHHxx\n1520\t8646\t0\t0\t0\t0\t20\t520\t1520\t1520\t1520\t40\t41\tMGAAAA\tOUMAAA\tOOOOxx\n2691\t8647\t1\t3\t1\t11\t91\t691\t691\t2691\t2691\t182\t183\tNZAAAA\tPUMAAA\tVVVVxx\n6961\t8648\t1\t1\t1\t1\t61\t961\t961\t1961\t6961\t122\t123\tTHAAAA\tQUMAAA\tAAAAxx\n5722\t8649\t0\t2\t2\t2\t22\t722\t1722\t722\t5722\t44\t45\tCMAAAA\tRUMAAA\tHHHHxx\n9707\t8650\t1\t3\t7\t7\t7\t707\t1707\t4707\t9707\t14\t15\tJJAAAA\tSUMAAA\tOOOOxx\n2891\t8651\t1\t3\t1\t11\t91\t891\t891\t2891\t2891\t182\t183\tFHAAAA\tTUMAAA\tVVVVxx\n341\t8652\t1\t1\t1\t1\t41\t341\t341\t341\t341\t82\t83\tDNAAAA\tUUMAAA\tAAAAxx\n4690\t8653\t0\t2\t0\t10\t90\t690\t690\t4690\t4690\t180\t181\tKYAAAA\tVUMAAA\tHHHHxx\n7841\t8654\t1\t1\t1\t1\t41\t841\t1841\t2841\t7841\t82\t83\tPPAAAA\tWUMAAA\tOOOOxx\n6615\t8655\t1\t3\t5\t15\t15\t615\t615\t1615\t6615\t30\t31\tLUAAAA\tXUMAAA\tVVVVxx\n9169\t8656\t1\t1\t9\t9\t69\t169\t1169\t4169\t9169\t138\t139\tROAAAA\tYUMAAA\tAAAAxx\n6689\t8657\t1\t1\t9\t9\t89\t689\t689\t1689\t6689\t178\t179\tHXAAAA\tZUMAAA\tHHHHxx\n8721\t8658\t1\t1\t1\t1\t21\t721\t721\t3721\t8721\t42\t43\tLXAAAA\tAVMAAA\tOOOOxx\n7508\t8659\t0\t0\t8\t8\t8\t508\t1508\t2508\t7508\t16\t17\tUCAAAA\tBVMAAA\tVVVVxx\n8631\t8660\t1\t3\t1\t11\t31\t631\t631\t3631\t8631\t62\t63\tZTAAAA\tCVMAAA\tAAAAxx\n480\t8661\t0\t0\t0\t0\t80\t480\t480\t480\t480\t160\t161\tMSAAAA\tDVMAAA\tHHHHxx\n7094\t8662\t0\t2\t4\t14\t94\t94\t1094\t2094\t7094\t188\t189\tWMAAAA\tEVMAAA\tOOOOxx\n319\t8663\t1\t3\t9\t19\t19\t319\t319\t319\t319\t38\t39\tHMAAAA\tFVMAAA\tVVVVxx\n9421\t8664\t1\t1\t1\t1\t21\t421\t1421\t4421\t9421\t42\t43\tJYAAAA\tGVMAAA\tAAAAxx\n4352\t8665\t0\t0\t2\t12\t52\t352\t352\t4352\t4352\t104\t105\tKLAAAA\tHVMAAA\tHHHHxx\n5019\t8666\t1\t3\t9\t19\t19\t19\t1019\t19\t5019\t38\t39\tBLAAAA\tIVMAAA\tOOOOxx\n3956\t8667\t0\t0\t6\t16\t56\t956\t1956\t3956\t3956\t112\t113\tEWAAAA\tJVMAAA\tVVVVxx\n114\t8668\t0\t2\t4\t14\t14\t114\t114\t114\t114\t28\t29\tKEAAAA\tKVMAAA\tAAAAxx\n1196\t8669\t0\t0\t6\t16\t96\t196\t1196\t1196\t1196\t192\t193\tAUAAAA\tLVMAAA\tHHHHxx\n1407\t8670\t1\t3\t7\t7\t7\t407\t1407\t1407\t1407\t14\t15\tDCAAAA\tMVMAAA\tOOOOxx\n7432\t8671\t0\t0\t2\t12\t32\t432\t1432\t2432\t7432\t64\t65\tWZAAAA\tNVMAAA\tVVVVxx\n3141\t8672\t1\t1\t1\t1\t41\t141\t1141\t3141\t3141\t82\t83\tVQAAAA\tOVMAAA\tAAAAxx\n2073\t8673\t1\t1\t3\t13\t73\t73\t73\t2073\t2073\t146\t147\tTBAAAA\tPVMAAA\tHHHHxx\n3400\t8674\t0\t0\t0\t0\t0\t400\t1400\t3400\t3400\t0\t1\tUAAAAA\tQVMAAA\tOOOOxx\n505\t8675\t1\t1\t5\t5\t5\t505\t505\t505\t505\t10\t11\tLTAAAA\tRVMAAA\tVVVVxx\n1263\t8676\t1\t3\t3\t3\t63\t263\t1263\t1263\t1263\t126\t127\tPWAAAA\tSVMAAA\tAAAAxx\n190\t8677\t0\t2\t0\t10\t90\t190\t190\t190\t190\t180\t181\tIHAAAA\tTVMAAA\tHHHHxx\n6686\t8678\t0\t2\t6\t6\t86\t686\t686\t1686\t6686\t172\t173\tEXAAAA\tUVMAAA\tOOOOxx\n9821\t8679\t1\t1\t1\t1\t21\t821\t1821\t4821\t9821\t42\t43\tTNAAAA\tVVMAAA\tVVVVxx\n1119\t8680\t1\t3\t9\t19\t19\t119\t1119\t1119\t1119\t38\t39\tBRAAAA\tWVMAAA\tAAAAxx\n2955\t8681\t1\t3\t5\t15\t55\t955\t955\t2955\t2955\t110\t111\tRJAAAA\tXVMAAA\tHHHHxx\n224\t8682\t0\t0\t4\t4\t24\t224\t224\t224\t224\t48\t49\tQIAAAA\tYVMAAA\tOOOOxx\n7562\t8683\t0\t2\t2\t2\t62\t562\t1562\t2562\t7562\t124\t125\tWEAAAA\tZVMAAA\tVVVVxx\n8845\t8684\t1\t1\t5\t5\t45\t845\t845\t3845\t8845\t90\t91\tFCAAAA\tAWMAAA\tAAAAxx\n5405\t8685\t1\t1\t5\t5\t5\t405\t1405\t405\t5405\t10\t11\tXZAAAA\tBWMAAA\tHHHHxx\n9192\t8686\t0\t0\t2\t12\t92\t192\t1192\t4192\t9192\t184\t185\tOPAAAA\tCWMAAA\tOOOOxx\n4927\t8687\t1\t3\t7\t7\t27\t927\t927\t4927\t4927\t54\t55\tNHAAAA\tDWMAAA\tVVVVxx\n997\t8688\t1\t1\t7\t17\t97\t997\t997\t997\t997\t194\t195\tJMAAAA\tEWMAAA\tAAAAxx\n989\t8689\t1\t1\t9\t9\t89\t989\t989\t989\t989\t178\t179\tBMAAAA\tFWMAAA\tHHHHxx\n7258\t8690\t0\t2\t8\t18\t58\t258\t1258\t2258\t7258\t116\t117\tETAAAA\tGWMAAA\tOOOOxx\n6899\t8691\t1\t3\t9\t19\t99\t899\t899\t1899\t6899\t198\t199\tJFAAAA\tHWMAAA\tVVVVxx\n1770\t8692\t0\t2\t0\t10\t70\t770\t1770\t1770\t1770\t140\t141\tCQAAAA\tIWMAAA\tAAAAxx\n4423\t8693\t1\t3\t3\t3\t23\t423\t423\t4423\t4423\t46\t47\tDOAAAA\tJWMAAA\tHHHHxx\n5671\t8694\t1\t3\t1\t11\t71\t671\t1671\t671\t5671\t142\t143\tDKAAAA\tKWMAAA\tOOOOxx\n8393\t8695\t1\t1\t3\t13\t93\t393\t393\t3393\t8393\t186\t187\tVKAAAA\tLWMAAA\tVVVVxx\n4355\t8696\t1\t3\t5\t15\t55\t355\t355\t4355\t4355\t110\t111\tNLAAAA\tMWMAAA\tAAAAxx\n3919\t8697\t1\t3\t9\t19\t19\t919\t1919\t3919\t3919\t38\t39\tTUAAAA\tNWMAAA\tHHHHxx\n338\t8698\t0\t2\t8\t18\t38\t338\t338\t338\t338\t76\t77\tANAAAA\tOWMAAA\tOOOOxx\n5790\t8699\t0\t2\t0\t10\t90\t790\t1790\t790\t5790\t180\t181\tSOAAAA\tPWMAAA\tVVVVxx\n1452\t8700\t0\t0\t2\t12\t52\t452\t1452\t1452\t1452\t104\t105\tWDAAAA\tQWMAAA\tAAAAxx\n939\t8701\t1\t3\t9\t19\t39\t939\t939\t939\t939\t78\t79\tDKAAAA\tRWMAAA\tHHHHxx\n8913\t8702\t1\t1\t3\t13\t13\t913\t913\t3913\t8913\t26\t27\tVEAAAA\tSWMAAA\tOOOOxx\n7157\t8703\t1\t1\t7\t17\t57\t157\t1157\t2157\t7157\t114\t115\tHPAAAA\tTWMAAA\tVVVVxx\n7240\t8704\t0\t0\t0\t0\t40\t240\t1240\t2240\t7240\t80\t81\tMSAAAA\tUWMAAA\tAAAAxx\n3492\t8705\t0\t0\t2\t12\t92\t492\t1492\t3492\t3492\t184\t185\tIEAAAA\tVWMAAA\tHHHHxx\n3464\t8706\t0\t0\t4\t4\t64\t464\t1464\t3464\t3464\t128\t129\tGDAAAA\tWWMAAA\tOOOOxx\n388\t8707\t0\t0\t8\t8\t88\t388\t388\t388\t388\t176\t177\tYOAAAA\tXWMAAA\tVVVVxx\n4135\t8708\t1\t3\t5\t15\t35\t135\t135\t4135\t4135\t70\t71\tBDAAAA\tYWMAAA\tAAAAxx\n1194\t8709\t0\t2\t4\t14\t94\t194\t1194\t1194\t1194\t188\t189\tYTAAAA\tZWMAAA\tHHHHxx\n5476\t8710\t0\t0\t6\t16\t76\t476\t1476\t476\t5476\t152\t153\tQCAAAA\tAXMAAA\tOOOOxx\n9844\t8711\t0\t0\t4\t4\t44\t844\t1844\t4844\t9844\t88\t89\tQOAAAA\tBXMAAA\tVVVVxx\n9364\t8712\t0\t0\t4\t4\t64\t364\t1364\t4364\t9364\t128\t129\tEWAAAA\tCXMAAA\tAAAAxx\n5238\t8713\t0\t2\t8\t18\t38\t238\t1238\t238\t5238\t76\t77\tMTAAAA\tDXMAAA\tHHHHxx\n3712\t8714\t0\t0\t2\t12\t12\t712\t1712\t3712\t3712\t24\t25\tUMAAAA\tEXMAAA\tOOOOxx\n6189\t8715\t1\t1\t9\t9\t89\t189\t189\t1189\t6189\t178\t179\tBEAAAA\tFXMAAA\tVVVVxx\n5257\t8716\t1\t1\t7\t17\t57\t257\t1257\t257\t5257\t114\t115\tFUAAAA\tGXMAAA\tAAAAxx\n81\t8717\t1\t1\t1\t1\t81\t81\t81\t81\t81\t162\t163\tDDAAAA\tHXMAAA\tHHHHxx\n3289\t8718\t1\t1\t9\t9\t89\t289\t1289\t3289\t3289\t178\t179\tNWAAAA\tIXMAAA\tOOOOxx\n1177\t8719\t1\t1\t7\t17\t77\t177\t1177\t1177\t1177\t154\t155\tHTAAAA\tJXMAAA\tVVVVxx\n5038\t8720\t0\t2\t8\t18\t38\t38\t1038\t38\t5038\t76\t77\tULAAAA\tKXMAAA\tAAAAxx\n325\t8721\t1\t1\t5\t5\t25\t325\t325\t325\t325\t50\t51\tNMAAAA\tLXMAAA\tHHHHxx\n7221\t8722\t1\t1\t1\t1\t21\t221\t1221\t2221\t7221\t42\t43\tTRAAAA\tMXMAAA\tOOOOxx\n7123\t8723\t1\t3\t3\t3\t23\t123\t1123\t2123\t7123\t46\t47\tZNAAAA\tNXMAAA\tVVVVxx\n6364\t8724\t0\t0\t4\t4\t64\t364\t364\t1364\t6364\t128\t129\tUKAAAA\tOXMAAA\tAAAAxx\n4468\t8725\t0\t0\t8\t8\t68\t468\t468\t4468\t4468\t136\t137\tWPAAAA\tPXMAAA\tHHHHxx\n9185\t8726\t1\t1\t5\t5\t85\t185\t1185\t4185\t9185\t170\t171\tHPAAAA\tQXMAAA\tOOOOxx\n4158\t8727\t0\t2\t8\t18\t58\t158\t158\t4158\t4158\t116\t117\tYDAAAA\tRXMAAA\tVVVVxx\n9439\t8728\t1\t3\t9\t19\t39\t439\t1439\t4439\t9439\t78\t79\tBZAAAA\tSXMAAA\tAAAAxx\n7759\t8729\t1\t3\t9\t19\t59\t759\t1759\t2759\t7759\t118\t119\tLMAAAA\tTXMAAA\tHHHHxx\n3325\t8730\t1\t1\t5\t5\t25\t325\t1325\t3325\t3325\t50\t51\tXXAAAA\tUXMAAA\tOOOOxx\n7991\t8731\t1\t3\t1\t11\t91\t991\t1991\t2991\t7991\t182\t183\tJVAAAA\tVXMAAA\tVVVVxx\n1650\t8732\t0\t2\t0\t10\t50\t650\t1650\t1650\t1650\t100\t101\tMLAAAA\tWXMAAA\tAAAAxx\n8395\t8733\t1\t3\t5\t15\t95\t395\t395\t3395\t8395\t190\t191\tXKAAAA\tXXMAAA\tHHHHxx\n286\t8734\t0\t2\t6\t6\t86\t286\t286\t286\t286\t172\t173\tALAAAA\tYXMAAA\tOOOOxx\n1507\t8735\t1\t3\t7\t7\t7\t507\t1507\t1507\t1507\t14\t15\tZFAAAA\tZXMAAA\tVVVVxx\n4122\t8736\t0\t2\t2\t2\t22\t122\t122\t4122\t4122\t44\t45\tOCAAAA\tAYMAAA\tAAAAxx\n2625\t8737\t1\t1\t5\t5\t25\t625\t625\t2625\t2625\t50\t51\tZWAAAA\tBYMAAA\tHHHHxx\n1140\t8738\t0\t0\t0\t0\t40\t140\t1140\t1140\t1140\t80\t81\tWRAAAA\tCYMAAA\tOOOOxx\n5262\t8739\t0\t2\t2\t2\t62\t262\t1262\t262\t5262\t124\t125\tKUAAAA\tDYMAAA\tVVVVxx\n4919\t8740\t1\t3\t9\t19\t19\t919\t919\t4919\t4919\t38\t39\tFHAAAA\tEYMAAA\tAAAAxx\n7266\t8741\t0\t2\t6\t6\t66\t266\t1266\t2266\t7266\t132\t133\tMTAAAA\tFYMAAA\tHHHHxx\n630\t8742\t0\t2\t0\t10\t30\t630\t630\t630\t630\t60\t61\tGYAAAA\tGYMAAA\tOOOOxx\n2129\t8743\t1\t1\t9\t9\t29\t129\t129\t2129\t2129\t58\t59\tXDAAAA\tHYMAAA\tVVVVxx\n9552\t8744\t0\t0\t2\t12\t52\t552\t1552\t4552\t9552\t104\t105\tKDAAAA\tIYMAAA\tAAAAxx\n3018\t8745\t0\t2\t8\t18\t18\t18\t1018\t3018\t3018\t36\t37\tCMAAAA\tJYMAAA\tHHHHxx\n7145\t8746\t1\t1\t5\t5\t45\t145\t1145\t2145\t7145\t90\t91\tVOAAAA\tKYMAAA\tOOOOxx\n1633\t8747\t1\t1\t3\t13\t33\t633\t1633\t1633\t1633\t66\t67\tVKAAAA\tLYMAAA\tVVVVxx\n7957\t8748\t1\t1\t7\t17\t57\t957\t1957\t2957\t7957\t114\t115\tBUAAAA\tMYMAAA\tAAAAxx\n774\t8749\t0\t2\t4\t14\t74\t774\t774\t774\t774\t148\t149\tUDAAAA\tNYMAAA\tHHHHxx\n9371\t8750\t1\t3\t1\t11\t71\t371\t1371\t4371\t9371\t142\t143\tLWAAAA\tOYMAAA\tOOOOxx\n6007\t8751\t1\t3\t7\t7\t7\t7\t7\t1007\t6007\t14\t15\tBXAAAA\tPYMAAA\tVVVVxx\n5277\t8752\t1\t1\t7\t17\t77\t277\t1277\t277\t5277\t154\t155\tZUAAAA\tQYMAAA\tAAAAxx\n9426\t8753\t0\t2\t6\t6\t26\t426\t1426\t4426\t9426\t52\t53\tOYAAAA\tRYMAAA\tHHHHxx\n9190\t8754\t0\t2\t0\t10\t90\t190\t1190\t4190\t9190\t180\t181\tMPAAAA\tSYMAAA\tOOOOxx\n8996\t8755\t0\t0\t6\t16\t96\t996\t996\t3996\t8996\t192\t193\tAIAAAA\tTYMAAA\tVVVVxx\n3409\t8756\t1\t1\t9\t9\t9\t409\t1409\t3409\t3409\t18\t19\tDBAAAA\tUYMAAA\tAAAAxx\n7212\t8757\t0\t0\t2\t12\t12\t212\t1212\t2212\t7212\t24\t25\tKRAAAA\tVYMAAA\tHHHHxx\n416\t8758\t0\t0\t6\t16\t16\t416\t416\t416\t416\t32\t33\tAQAAAA\tWYMAAA\tOOOOxx\n7211\t8759\t1\t3\t1\t11\t11\t211\t1211\t2211\t7211\t22\t23\tJRAAAA\tXYMAAA\tVVVVxx\n7454\t8760\t0\t2\t4\t14\t54\t454\t1454\t2454\t7454\t108\t109\tSAAAAA\tYYMAAA\tAAAAxx\n8417\t8761\t1\t1\t7\t17\t17\t417\t417\t3417\t8417\t34\t35\tTLAAAA\tZYMAAA\tHHHHxx\n5562\t8762\t0\t2\t2\t2\t62\t562\t1562\t562\t5562\t124\t125\tYFAAAA\tAZMAAA\tOOOOxx\n4996\t8763\t0\t0\t6\t16\t96\t996\t996\t4996\t4996\t192\t193\tEKAAAA\tBZMAAA\tVVVVxx\n5718\t8764\t0\t2\t8\t18\t18\t718\t1718\t718\t5718\t36\t37\tYLAAAA\tCZMAAA\tAAAAxx\n7838\t8765\t0\t2\t8\t18\t38\t838\t1838\t2838\t7838\t76\t77\tMPAAAA\tDZMAAA\tHHHHxx\n7715\t8766\t1\t3\t5\t15\t15\t715\t1715\t2715\t7715\t30\t31\tTKAAAA\tEZMAAA\tOOOOxx\n2780\t8767\t0\t0\t0\t0\t80\t780\t780\t2780\t2780\t160\t161\tYCAAAA\tFZMAAA\tVVVVxx\n1013\t8768\t1\t1\t3\t13\t13\t13\t1013\t1013\t1013\t26\t27\tZMAAAA\tGZMAAA\tAAAAxx\n8465\t8769\t1\t1\t5\t5\t65\t465\t465\t3465\t8465\t130\t131\tPNAAAA\tHZMAAA\tHHHHxx\n7976\t8770\t0\t0\t6\t16\t76\t976\t1976\t2976\t7976\t152\t153\tUUAAAA\tIZMAAA\tOOOOxx\n7150\t8771\t0\t2\t0\t10\t50\t150\t1150\t2150\t7150\t100\t101\tAPAAAA\tJZMAAA\tVVVVxx\n6471\t8772\t1\t3\t1\t11\t71\t471\t471\t1471\t6471\t142\t143\tXOAAAA\tKZMAAA\tAAAAxx\n1927\t8773\t1\t3\t7\t7\t27\t927\t1927\t1927\t1927\t54\t55\tDWAAAA\tLZMAAA\tHHHHxx\n227\t8774\t1\t3\t7\t7\t27\t227\t227\t227\t227\t54\t55\tTIAAAA\tMZMAAA\tOOOOxx\n6462\t8775\t0\t2\t2\t2\t62\t462\t462\t1462\t6462\t124\t125\tOOAAAA\tNZMAAA\tVVVVxx\n5227\t8776\t1\t3\t7\t7\t27\t227\t1227\t227\t5227\t54\t55\tBTAAAA\tOZMAAA\tAAAAxx\n1074\t8777\t0\t2\t4\t14\t74\t74\t1074\t1074\t1074\t148\t149\tIPAAAA\tPZMAAA\tHHHHxx\n9448\t8778\t0\t0\t8\t8\t48\t448\t1448\t4448\t9448\t96\t97\tKZAAAA\tQZMAAA\tOOOOxx\n4459\t8779\t1\t3\t9\t19\t59\t459\t459\t4459\t4459\t118\t119\tNPAAAA\tRZMAAA\tVVVVxx\n2478\t8780\t0\t2\t8\t18\t78\t478\t478\t2478\t2478\t156\t157\tIRAAAA\tSZMAAA\tAAAAxx\n5005\t8781\t1\t1\t5\t5\t5\t5\t1005\t5\t5005\t10\t11\tNKAAAA\tTZMAAA\tHHHHxx\n2418\t8782\t0\t2\t8\t18\t18\t418\t418\t2418\t2418\t36\t37\tAPAAAA\tUZMAAA\tOOOOxx\n6991\t8783\t1\t3\t1\t11\t91\t991\t991\t1991\t6991\t182\t183\tXIAAAA\tVZMAAA\tVVVVxx\n4729\t8784\t1\t1\t9\t9\t29\t729\t729\t4729\t4729\t58\t59\tXZAAAA\tWZMAAA\tAAAAxx\n3548\t8785\t0\t0\t8\t8\t48\t548\t1548\t3548\t3548\t96\t97\tMGAAAA\tXZMAAA\tHHHHxx\n9616\t8786\t0\t0\t6\t16\t16\t616\t1616\t4616\t9616\t32\t33\tWFAAAA\tYZMAAA\tOOOOxx\n2901\t8787\t1\t1\t1\t1\t1\t901\t901\t2901\t2901\t2\t3\tPHAAAA\tZZMAAA\tVVVVxx\n10\t8788\t0\t2\t0\t10\t10\t10\t10\t10\t10\t20\t21\tKAAAAA\tAANAAA\tAAAAxx\n2637\t8789\t1\t1\t7\t17\t37\t637\t637\t2637\t2637\t74\t75\tLXAAAA\tBANAAA\tHHHHxx\n6747\t8790\t1\t3\t7\t7\t47\t747\t747\t1747\t6747\t94\t95\tNZAAAA\tCANAAA\tOOOOxx\n797\t8791\t1\t1\t7\t17\t97\t797\t797\t797\t797\t194\t195\tREAAAA\tDANAAA\tVVVVxx\n7609\t8792\t1\t1\t9\t9\t9\t609\t1609\t2609\t7609\t18\t19\tRGAAAA\tEANAAA\tAAAAxx\n8290\t8793\t0\t2\t0\t10\t90\t290\t290\t3290\t8290\t180\t181\tWGAAAA\tFANAAA\tHHHHxx\n8765\t8794\t1\t1\t5\t5\t65\t765\t765\t3765\t8765\t130\t131\tDZAAAA\tGANAAA\tOOOOxx\n8053\t8795\t1\t1\t3\t13\t53\t53\t53\t3053\t8053\t106\t107\tTXAAAA\tHANAAA\tVVVVxx\n5602\t8796\t0\t2\t2\t2\t2\t602\t1602\t602\t5602\t4\t5\tMHAAAA\tIANAAA\tAAAAxx\n3672\t8797\t0\t0\t2\t12\t72\t672\t1672\t3672\t3672\t144\t145\tGLAAAA\tJANAAA\tHHHHxx\n7513\t8798\t1\t1\t3\t13\t13\t513\t1513\t2513\t7513\t26\t27\tZCAAAA\tKANAAA\tOOOOxx\n3462\t8799\t0\t2\t2\t2\t62\t462\t1462\t3462\t3462\t124\t125\tEDAAAA\tLANAAA\tVVVVxx\n4457\t8800\t1\t1\t7\t17\t57\t457\t457\t4457\t4457\t114\t115\tLPAAAA\tMANAAA\tAAAAxx\n6547\t8801\t1\t3\t7\t7\t47\t547\t547\t1547\t6547\t94\t95\tVRAAAA\tNANAAA\tHHHHxx\n7417\t8802\t1\t1\t7\t17\t17\t417\t1417\t2417\t7417\t34\t35\tHZAAAA\tOANAAA\tOOOOxx\n8641\t8803\t1\t1\t1\t1\t41\t641\t641\t3641\t8641\t82\t83\tJUAAAA\tPANAAA\tVVVVxx\n149\t8804\t1\t1\t9\t9\t49\t149\t149\t149\t149\t98\t99\tTFAAAA\tQANAAA\tAAAAxx\n5041\t8805\t1\t1\t1\t1\t41\t41\t1041\t41\t5041\t82\t83\tXLAAAA\tRANAAA\tHHHHxx\n9232\t8806\t0\t0\t2\t12\t32\t232\t1232\t4232\t9232\t64\t65\tCRAAAA\tSANAAA\tOOOOxx\n3603\t8807\t1\t3\t3\t3\t3\t603\t1603\t3603\t3603\t6\t7\tPIAAAA\tTANAAA\tVVVVxx\n2792\t8808\t0\t0\t2\t12\t92\t792\t792\t2792\t2792\t184\t185\tKDAAAA\tUANAAA\tAAAAxx\n6620\t8809\t0\t0\t0\t0\t20\t620\t620\t1620\t6620\t40\t41\tQUAAAA\tVANAAA\tHHHHxx\n4000\t8810\t0\t0\t0\t0\t0\t0\t0\t4000\t4000\t0\t1\tWXAAAA\tWANAAA\tOOOOxx\n659\t8811\t1\t3\t9\t19\t59\t659\t659\t659\t659\t118\t119\tJZAAAA\tXANAAA\tVVVVxx\n8174\t8812\t0\t2\t4\t14\t74\t174\t174\t3174\t8174\t148\t149\tKCAAAA\tYANAAA\tAAAAxx\n4599\t8813\t1\t3\t9\t19\t99\t599\t599\t4599\t4599\t198\t199\tXUAAAA\tZANAAA\tHHHHxx\n7851\t8814\t1\t3\t1\t11\t51\t851\t1851\t2851\t7851\t102\t103\tZPAAAA\tABNAAA\tOOOOxx\n6284\t8815\t0\t0\t4\t4\t84\t284\t284\t1284\t6284\t168\t169\tSHAAAA\tBBNAAA\tVVVVxx\n7116\t8816\t0\t0\t6\t16\t16\t116\t1116\t2116\t7116\t32\t33\tSNAAAA\tCBNAAA\tAAAAxx\n5595\t8817\t1\t3\t5\t15\t95\t595\t1595\t595\t5595\t190\t191\tFHAAAA\tDBNAAA\tHHHHxx\n2903\t8818\t1\t3\t3\t3\t3\t903\t903\t2903\t2903\t6\t7\tRHAAAA\tEBNAAA\tOOOOxx\n5948\t8819\t0\t0\t8\t8\t48\t948\t1948\t948\t5948\t96\t97\tUUAAAA\tFBNAAA\tVVVVxx\n225\t8820\t1\t1\t5\t5\t25\t225\t225\t225\t225\t50\t51\tRIAAAA\tGBNAAA\tAAAAxx\n524\t8821\t0\t0\t4\t4\t24\t524\t524\t524\t524\t48\t49\tEUAAAA\tHBNAAA\tHHHHxx\n7639\t8822\t1\t3\t9\t19\t39\t639\t1639\t2639\t7639\t78\t79\tVHAAAA\tIBNAAA\tOOOOxx\n7297\t8823\t1\t1\t7\t17\t97\t297\t1297\t2297\t7297\t194\t195\tRUAAAA\tJBNAAA\tVVVVxx\n2606\t8824\t0\t2\t6\t6\t6\t606\t606\t2606\t2606\t12\t13\tGWAAAA\tKBNAAA\tAAAAxx\n4771\t8825\t1\t3\t1\t11\t71\t771\t771\t4771\t4771\t142\t143\tNBAAAA\tLBNAAA\tHHHHxx\n8162\t8826\t0\t2\t2\t2\t62\t162\t162\t3162\t8162\t124\t125\tYBAAAA\tMBNAAA\tOOOOxx\n8999\t8827\t1\t3\t9\t19\t99\t999\t999\t3999\t8999\t198\t199\tDIAAAA\tNBNAAA\tVVVVxx\n2309\t8828\t1\t1\t9\t9\t9\t309\t309\t2309\t2309\t18\t19\tVKAAAA\tOBNAAA\tAAAAxx\n3594\t8829\t0\t2\t4\t14\t94\t594\t1594\t3594\t3594\t188\t189\tGIAAAA\tPBNAAA\tHHHHxx\n6092\t8830\t0\t0\t2\t12\t92\t92\t92\t1092\t6092\t184\t185\tIAAAAA\tQBNAAA\tOOOOxx\n7467\t8831\t1\t3\t7\t7\t67\t467\t1467\t2467\t7467\t134\t135\tFBAAAA\tRBNAAA\tVVVVxx\n6986\t8832\t0\t2\t6\t6\t86\t986\t986\t1986\t6986\t172\t173\tSIAAAA\tSBNAAA\tAAAAxx\n9898\t8833\t0\t2\t8\t18\t98\t898\t1898\t4898\t9898\t196\t197\tSQAAAA\tTBNAAA\tHHHHxx\n9578\t8834\t0\t2\t8\t18\t78\t578\t1578\t4578\t9578\t156\t157\tKEAAAA\tUBNAAA\tOOOOxx\n156\t8835\t0\t0\t6\t16\t56\t156\t156\t156\t156\t112\t113\tAGAAAA\tVBNAAA\tVVVVxx\n5810\t8836\t0\t2\t0\t10\t10\t810\t1810\t810\t5810\t20\t21\tMPAAAA\tWBNAAA\tAAAAxx\n790\t8837\t0\t2\t0\t10\t90\t790\t790\t790\t790\t180\t181\tKEAAAA\tXBNAAA\tHHHHxx\n6840\t8838\t0\t0\t0\t0\t40\t840\t840\t1840\t6840\t80\t81\tCDAAAA\tYBNAAA\tOOOOxx\n6725\t8839\t1\t1\t5\t5\t25\t725\t725\t1725\t6725\t50\t51\tRYAAAA\tZBNAAA\tVVVVxx\n5528\t8840\t0\t0\t8\t8\t28\t528\t1528\t528\t5528\t56\t57\tQEAAAA\tACNAAA\tAAAAxx\n4120\t8841\t0\t0\t0\t0\t20\t120\t120\t4120\t4120\t40\t41\tMCAAAA\tBCNAAA\tHHHHxx\n6694\t8842\t0\t2\t4\t14\t94\t694\t694\t1694\t6694\t188\t189\tMXAAAA\tCCNAAA\tOOOOxx\n3552\t8843\t0\t0\t2\t12\t52\t552\t1552\t3552\t3552\t104\t105\tQGAAAA\tDCNAAA\tVVVVxx\n1478\t8844\t0\t2\t8\t18\t78\t478\t1478\t1478\t1478\t156\t157\tWEAAAA\tECNAAA\tAAAAxx\n8084\t8845\t0\t0\t4\t4\t84\t84\t84\t3084\t8084\t168\t169\tYYAAAA\tFCNAAA\tHHHHxx\n7578\t8846\t0\t2\t8\t18\t78\t578\t1578\t2578\t7578\t156\t157\tMFAAAA\tGCNAAA\tOOOOxx\n6314\t8847\t0\t2\t4\t14\t14\t314\t314\t1314\t6314\t28\t29\tWIAAAA\tHCNAAA\tVVVVxx\n6123\t8848\t1\t3\t3\t3\t23\t123\t123\t1123\t6123\t46\t47\tNBAAAA\tICNAAA\tAAAAxx\n9443\t8849\t1\t3\t3\t3\t43\t443\t1443\t4443\t9443\t86\t87\tFZAAAA\tJCNAAA\tHHHHxx\n9628\t8850\t0\t0\t8\t8\t28\t628\t1628\t4628\t9628\t56\t57\tIGAAAA\tKCNAAA\tOOOOxx\n8508\t8851\t0\t0\t8\t8\t8\t508\t508\t3508\t8508\t16\t17\tGPAAAA\tLCNAAA\tVVVVxx\n5552\t8852\t0\t0\t2\t12\t52\t552\t1552\t552\t5552\t104\t105\tOFAAAA\tMCNAAA\tAAAAxx\n5327\t8853\t1\t3\t7\t7\t27\t327\t1327\t327\t5327\t54\t55\tXWAAAA\tNCNAAA\tHHHHxx\n7771\t8854\t1\t3\t1\t11\t71\t771\t1771\t2771\t7771\t142\t143\tXMAAAA\tOCNAAA\tOOOOxx\n8932\t8855\t0\t0\t2\t12\t32\t932\t932\t3932\t8932\t64\t65\tOFAAAA\tPCNAAA\tVVVVxx\n3526\t8856\t0\t2\t6\t6\t26\t526\t1526\t3526\t3526\t52\t53\tQFAAAA\tQCNAAA\tAAAAxx\n4340\t8857\t0\t0\t0\t0\t40\t340\t340\t4340\t4340\t80\t81\tYKAAAA\tRCNAAA\tHHHHxx\n9419\t8858\t1\t3\t9\t19\t19\t419\t1419\t4419\t9419\t38\t39\tHYAAAA\tSCNAAA\tOOOOxx\n8421\t8859\t1\t1\t1\t1\t21\t421\t421\t3421\t8421\t42\t43\tXLAAAA\tTCNAAA\tVVVVxx\n7431\t8860\t1\t3\t1\t11\t31\t431\t1431\t2431\t7431\t62\t63\tVZAAAA\tUCNAAA\tAAAAxx\n172\t8861\t0\t0\t2\t12\t72\t172\t172\t172\t172\t144\t145\tQGAAAA\tVCNAAA\tHHHHxx\n3279\t8862\t1\t3\t9\t19\t79\t279\t1279\t3279\t3279\t158\t159\tDWAAAA\tWCNAAA\tOOOOxx\n1508\t8863\t0\t0\t8\t8\t8\t508\t1508\t1508\t1508\t16\t17\tAGAAAA\tXCNAAA\tVVVVxx\n7091\t8864\t1\t3\t1\t11\t91\t91\t1091\t2091\t7091\t182\t183\tTMAAAA\tYCNAAA\tAAAAxx\n1419\t8865\t1\t3\t9\t19\t19\t419\t1419\t1419\t1419\t38\t39\tPCAAAA\tZCNAAA\tHHHHxx\n3032\t8866\t0\t0\t2\t12\t32\t32\t1032\t3032\t3032\t64\t65\tQMAAAA\tADNAAA\tOOOOxx\n8683\t8867\t1\t3\t3\t3\t83\t683\t683\t3683\t8683\t166\t167\tZVAAAA\tBDNAAA\tVVVVxx\n4763\t8868\t1\t3\t3\t3\t63\t763\t763\t4763\t4763\t126\t127\tFBAAAA\tCDNAAA\tAAAAxx\n4424\t8869\t0\t0\t4\t4\t24\t424\t424\t4424\t4424\t48\t49\tEOAAAA\tDDNAAA\tHHHHxx\n8640\t8870\t0\t0\t0\t0\t40\t640\t640\t3640\t8640\t80\t81\tIUAAAA\tEDNAAA\tOOOOxx\n7187\t8871\t1\t3\t7\t7\t87\t187\t1187\t2187\t7187\t174\t175\tLQAAAA\tFDNAAA\tVVVVxx\n6247\t8872\t1\t3\t7\t7\t47\t247\t247\t1247\t6247\t94\t95\tHGAAAA\tGDNAAA\tAAAAxx\n7340\t8873\t0\t0\t0\t0\t40\t340\t1340\t2340\t7340\t80\t81\tIWAAAA\tHDNAAA\tHHHHxx\n182\t8874\t0\t2\t2\t2\t82\t182\t182\t182\t182\t164\t165\tAHAAAA\tIDNAAA\tOOOOxx\n2948\t8875\t0\t0\t8\t8\t48\t948\t948\t2948\t2948\t96\t97\tKJAAAA\tJDNAAA\tVVVVxx\n9462\t8876\t0\t2\t2\t2\t62\t462\t1462\t4462\t9462\t124\t125\tYZAAAA\tKDNAAA\tAAAAxx\n5997\t8877\t1\t1\t7\t17\t97\t997\t1997\t997\t5997\t194\t195\tRWAAAA\tLDNAAA\tHHHHxx\n5608\t8878\t0\t0\t8\t8\t8\t608\t1608\t608\t5608\t16\t17\tSHAAAA\tMDNAAA\tOOOOxx\n1472\t8879\t0\t0\t2\t12\t72\t472\t1472\t1472\t1472\t144\t145\tQEAAAA\tNDNAAA\tVVVVxx\n277\t8880\t1\t1\t7\t17\t77\t277\t277\t277\t277\t154\t155\tRKAAAA\tODNAAA\tAAAAxx\n4807\t8881\t1\t3\t7\t7\t7\t807\t807\t4807\t4807\t14\t15\tXCAAAA\tPDNAAA\tHHHHxx\n4969\t8882\t1\t1\t9\t9\t69\t969\t969\t4969\t4969\t138\t139\tDJAAAA\tQDNAAA\tOOOOxx\n5611\t8883\t1\t3\t1\t11\t11\t611\t1611\t611\t5611\t22\t23\tVHAAAA\tRDNAAA\tVVVVxx\n372\t8884\t0\t0\t2\t12\t72\t372\t372\t372\t372\t144\t145\tIOAAAA\tSDNAAA\tAAAAxx\n6666\t8885\t0\t2\t6\t6\t66\t666\t666\t1666\t6666\t132\t133\tKWAAAA\tTDNAAA\tHHHHxx\n476\t8886\t0\t0\t6\t16\t76\t476\t476\t476\t476\t152\t153\tISAAAA\tUDNAAA\tOOOOxx\n5225\t8887\t1\t1\t5\t5\t25\t225\t1225\t225\t5225\t50\t51\tZSAAAA\tVDNAAA\tVVVVxx\n5143\t8888\t1\t3\t3\t3\t43\t143\t1143\t143\t5143\t86\t87\tVPAAAA\tWDNAAA\tAAAAxx\n1853\t8889\t1\t1\t3\t13\t53\t853\t1853\t1853\t1853\t106\t107\tHTAAAA\tXDNAAA\tHHHHxx\n675\t8890\t1\t3\t5\t15\t75\t675\t675\t675\t675\t150\t151\tZZAAAA\tYDNAAA\tOOOOxx\n5643\t8891\t1\t3\t3\t3\t43\t643\t1643\t643\t5643\t86\t87\tBJAAAA\tZDNAAA\tVVVVxx\n5317\t8892\t1\t1\t7\t17\t17\t317\t1317\t317\t5317\t34\t35\tNWAAAA\tAENAAA\tAAAAxx\n8102\t8893\t0\t2\t2\t2\t2\t102\t102\t3102\t8102\t4\t5\tQZAAAA\tBENAAA\tHHHHxx\n978\t8894\t0\t2\t8\t18\t78\t978\t978\t978\t978\t156\t157\tQLAAAA\tCENAAA\tOOOOxx\n4620\t8895\t0\t0\t0\t0\t20\t620\t620\t4620\t4620\t40\t41\tSVAAAA\tDENAAA\tVVVVxx\n151\t8896\t1\t3\t1\t11\t51\t151\t151\t151\t151\t102\t103\tVFAAAA\tEENAAA\tAAAAxx\n972\t8897\t0\t0\t2\t12\t72\t972\t972\t972\t972\t144\t145\tKLAAAA\tFENAAA\tHHHHxx\n6820\t8898\t0\t0\t0\t0\t20\t820\t820\t1820\t6820\t40\t41\tICAAAA\tGENAAA\tOOOOxx\n7387\t8899\t1\t3\t7\t7\t87\t387\t1387\t2387\t7387\t174\t175\tDYAAAA\tHENAAA\tVVVVxx\n9634\t8900\t0\t2\t4\t14\t34\t634\t1634\t4634\t9634\t68\t69\tOGAAAA\tIENAAA\tAAAAxx\n6308\t8901\t0\t0\t8\t8\t8\t308\t308\t1308\t6308\t16\t17\tQIAAAA\tJENAAA\tHHHHxx\n8323\t8902\t1\t3\t3\t3\t23\t323\t323\t3323\t8323\t46\t47\tDIAAAA\tKENAAA\tOOOOxx\n6672\t8903\t0\t0\t2\t12\t72\t672\t672\t1672\t6672\t144\t145\tQWAAAA\tLENAAA\tVVVVxx\n8283\t8904\t1\t3\t3\t3\t83\t283\t283\t3283\t8283\t166\t167\tPGAAAA\tMENAAA\tAAAAxx\n7996\t8905\t0\t0\t6\t16\t96\t996\t1996\t2996\t7996\t192\t193\tOVAAAA\tNENAAA\tHHHHxx\n6488\t8906\t0\t0\t8\t8\t88\t488\t488\t1488\t6488\t176\t177\tOPAAAA\tOENAAA\tOOOOxx\n2365\t8907\t1\t1\t5\t5\t65\t365\t365\t2365\t2365\t130\t131\tZMAAAA\tPENAAA\tVVVVxx\n9746\t8908\t0\t2\t6\t6\t46\t746\t1746\t4746\t9746\t92\t93\tWKAAAA\tQENAAA\tAAAAxx\n8605\t8909\t1\t1\t5\t5\t5\t605\t605\t3605\t8605\t10\t11\tZSAAAA\tRENAAA\tHHHHxx\n3342\t8910\t0\t2\t2\t2\t42\t342\t1342\t3342\t3342\t84\t85\tOYAAAA\tSENAAA\tOOOOxx\n8429\t8911\t1\t1\t9\t9\t29\t429\t429\t3429\t8429\t58\t59\tFMAAAA\tTENAAA\tVVVVxx\n1162\t8912\t0\t2\t2\t2\t62\t162\t1162\t1162\t1162\t124\t125\tSSAAAA\tUENAAA\tAAAAxx\n531\t8913\t1\t3\t1\t11\t31\t531\t531\t531\t531\t62\t63\tLUAAAA\tVENAAA\tHHHHxx\n8408\t8914\t0\t0\t8\t8\t8\t408\t408\t3408\t8408\t16\t17\tKLAAAA\tWENAAA\tOOOOxx\n8862\t8915\t0\t2\t2\t2\t62\t862\t862\t3862\t8862\t124\t125\tWCAAAA\tXENAAA\tVVVVxx\n5843\t8916\t1\t3\t3\t3\t43\t843\t1843\t843\t5843\t86\t87\tTQAAAA\tYENAAA\tAAAAxx\n8704\t8917\t0\t0\t4\t4\t4\t704\t704\t3704\t8704\t8\t9\tUWAAAA\tZENAAA\tHHHHxx\n7070\t8918\t0\t2\t0\t10\t70\t70\t1070\t2070\t7070\t140\t141\tYLAAAA\tAFNAAA\tOOOOxx\n9119\t8919\t1\t3\t9\t19\t19\t119\t1119\t4119\t9119\t38\t39\tTMAAAA\tBFNAAA\tVVVVxx\n8344\t8920\t0\t0\t4\t4\t44\t344\t344\t3344\t8344\t88\t89\tYIAAAA\tCFNAAA\tAAAAxx\n8979\t8921\t1\t3\t9\t19\t79\t979\t979\t3979\t8979\t158\t159\tJHAAAA\tDFNAAA\tHHHHxx\n2971\t8922\t1\t3\t1\t11\t71\t971\t971\t2971\t2971\t142\t143\tHKAAAA\tEFNAAA\tOOOOxx\n7700\t8923\t0\t0\t0\t0\t0\t700\t1700\t2700\t7700\t0\t1\tEKAAAA\tFFNAAA\tVVVVxx\n8280\t8924\t0\t0\t0\t0\t80\t280\t280\t3280\t8280\t160\t161\tMGAAAA\tGFNAAA\tAAAAxx\n9096\t8925\t0\t0\t6\t16\t96\t96\t1096\t4096\t9096\t192\t193\tWLAAAA\tHFNAAA\tHHHHxx\n99\t8926\t1\t3\t9\t19\t99\t99\t99\t99\t99\t198\t199\tVDAAAA\tIFNAAA\tOOOOxx\n6696\t8927\t0\t0\t6\t16\t96\t696\t696\t1696\t6696\t192\t193\tOXAAAA\tJFNAAA\tVVVVxx\n9490\t8928\t0\t2\t0\t10\t90\t490\t1490\t4490\t9490\t180\t181\tABAAAA\tKFNAAA\tAAAAxx\n9073\t8929\t1\t1\t3\t13\t73\t73\t1073\t4073\t9073\t146\t147\tZKAAAA\tLFNAAA\tHHHHxx\n1861\t8930\t1\t1\t1\t1\t61\t861\t1861\t1861\t1861\t122\t123\tPTAAAA\tMFNAAA\tOOOOxx\n4413\t8931\t1\t1\t3\t13\t13\t413\t413\t4413\t4413\t26\t27\tTNAAAA\tNFNAAA\tVVVVxx\n6002\t8932\t0\t2\t2\t2\t2\t2\t2\t1002\t6002\t4\t5\tWWAAAA\tOFNAAA\tAAAAxx\n439\t8933\t1\t3\t9\t19\t39\t439\t439\t439\t439\t78\t79\tXQAAAA\tPFNAAA\tHHHHxx\n5449\t8934\t1\t1\t9\t9\t49\t449\t1449\t449\t5449\t98\t99\tPBAAAA\tQFNAAA\tOOOOxx\n9737\t8935\t1\t1\t7\t17\t37\t737\t1737\t4737\t9737\t74\t75\tNKAAAA\tRFNAAA\tVVVVxx\n1898\t8936\t0\t2\t8\t18\t98\t898\t1898\t1898\t1898\t196\t197\tAVAAAA\tSFNAAA\tAAAAxx\n4189\t8937\t1\t1\t9\t9\t89\t189\t189\t4189\t4189\t178\t179\tDFAAAA\tTFNAAA\tHHHHxx\n1408\t8938\t0\t0\t8\t8\t8\t408\t1408\t1408\t1408\t16\t17\tECAAAA\tUFNAAA\tOOOOxx\n394\t8939\t0\t2\t4\t14\t94\t394\t394\t394\t394\t188\t189\tEPAAAA\tVFNAAA\tVVVVxx\n1935\t8940\t1\t3\t5\t15\t35\t935\t1935\t1935\t1935\t70\t71\tLWAAAA\tWFNAAA\tAAAAxx\n3965\t8941\t1\t1\t5\t5\t65\t965\t1965\t3965\t3965\t130\t131\tNWAAAA\tXFNAAA\tHHHHxx\n6821\t8942\t1\t1\t1\t1\t21\t821\t821\t1821\t6821\t42\t43\tJCAAAA\tYFNAAA\tOOOOxx\n349\t8943\t1\t1\t9\t9\t49\t349\t349\t349\t349\t98\t99\tLNAAAA\tZFNAAA\tVVVVxx\n8428\t8944\t0\t0\t8\t8\t28\t428\t428\t3428\t8428\t56\t57\tEMAAAA\tAGNAAA\tAAAAxx\n8200\t8945\t0\t0\t0\t0\t0\t200\t200\t3200\t8200\t0\t1\tKDAAAA\tBGNAAA\tHHHHxx\n1737\t8946\t1\t1\t7\t17\t37\t737\t1737\t1737\t1737\t74\t75\tVOAAAA\tCGNAAA\tOOOOxx\n6516\t8947\t0\t0\t6\t16\t16\t516\t516\t1516\t6516\t32\t33\tQQAAAA\tDGNAAA\tVVVVxx\n5441\t8948\t1\t1\t1\t1\t41\t441\t1441\t441\t5441\t82\t83\tHBAAAA\tEGNAAA\tAAAAxx\n5999\t8949\t1\t3\t9\t19\t99\t999\t1999\t999\t5999\t198\t199\tTWAAAA\tFGNAAA\tHHHHxx\n1539\t8950\t1\t3\t9\t19\t39\t539\t1539\t1539\t1539\t78\t79\tFHAAAA\tGGNAAA\tOOOOxx\n9067\t8951\t1\t3\t7\t7\t67\t67\t1067\t4067\t9067\t134\t135\tTKAAAA\tHGNAAA\tVVVVxx\n4061\t8952\t1\t1\t1\t1\t61\t61\t61\t4061\t4061\t122\t123\tFAAAAA\tIGNAAA\tAAAAxx\n1642\t8953\t0\t2\t2\t2\t42\t642\t1642\t1642\t1642\t84\t85\tELAAAA\tJGNAAA\tHHHHxx\n4657\t8954\t1\t1\t7\t17\t57\t657\t657\t4657\t4657\t114\t115\tDXAAAA\tKGNAAA\tOOOOxx\n9934\t8955\t0\t2\t4\t14\t34\t934\t1934\t4934\t9934\t68\t69\tCSAAAA\tLGNAAA\tVVVVxx\n6385\t8956\t1\t1\t5\t5\t85\t385\t385\t1385\t6385\t170\t171\tPLAAAA\tMGNAAA\tAAAAxx\n6775\t8957\t1\t3\t5\t15\t75\t775\t775\t1775\t6775\t150\t151\tPAAAAA\tNGNAAA\tHHHHxx\n3873\t8958\t1\t1\t3\t13\t73\t873\t1873\t3873\t3873\t146\t147\tZSAAAA\tOGNAAA\tOOOOxx\n3862\t8959\t0\t2\t2\t2\t62\t862\t1862\t3862\t3862\t124\t125\tOSAAAA\tPGNAAA\tVVVVxx\n1224\t8960\t0\t0\t4\t4\t24\t224\t1224\t1224\t1224\t48\t49\tCVAAAA\tQGNAAA\tAAAAxx\n4483\t8961\t1\t3\t3\t3\t83\t483\t483\t4483\t4483\t166\t167\tLQAAAA\tRGNAAA\tHHHHxx\n3685\t8962\t1\t1\t5\t5\t85\t685\t1685\t3685\t3685\t170\t171\tTLAAAA\tSGNAAA\tOOOOxx\n6082\t8963\t0\t2\t2\t2\t82\t82\t82\t1082\t6082\t164\t165\tYZAAAA\tTGNAAA\tVVVVxx\n7798\t8964\t0\t2\t8\t18\t98\t798\t1798\t2798\t7798\t196\t197\tYNAAAA\tUGNAAA\tAAAAxx\n9039\t8965\t1\t3\t9\t19\t39\t39\t1039\t4039\t9039\t78\t79\tRJAAAA\tVGNAAA\tHHHHxx\n985\t8966\t1\t1\t5\t5\t85\t985\t985\t985\t985\t170\t171\tXLAAAA\tWGNAAA\tOOOOxx\n5389\t8967\t1\t1\t9\t9\t89\t389\t1389\t389\t5389\t178\t179\tHZAAAA\tXGNAAA\tVVVVxx\n1716\t8968\t0\t0\t6\t16\t16\t716\t1716\t1716\t1716\t32\t33\tAOAAAA\tYGNAAA\tAAAAxx\n4209\t8969\t1\t1\t9\t9\t9\t209\t209\t4209\t4209\t18\t19\tXFAAAA\tZGNAAA\tHHHHxx\n746\t8970\t0\t2\t6\t6\t46\t746\t746\t746\t746\t92\t93\tSCAAAA\tAHNAAA\tOOOOxx\n6295\t8971\t1\t3\t5\t15\t95\t295\t295\t1295\t6295\t190\t191\tDIAAAA\tBHNAAA\tVVVVxx\n9754\t8972\t0\t2\t4\t14\t54\t754\t1754\t4754\t9754\t108\t109\tELAAAA\tCHNAAA\tAAAAxx\n2336\t8973\t0\t0\t6\t16\t36\t336\t336\t2336\t2336\t72\t73\tWLAAAA\tDHNAAA\tHHHHxx\n3701\t8974\t1\t1\t1\t1\t1\t701\t1701\t3701\t3701\t2\t3\tJMAAAA\tEHNAAA\tOOOOxx\n3551\t8975\t1\t3\t1\t11\t51\t551\t1551\t3551\t3551\t102\t103\tPGAAAA\tFHNAAA\tVVVVxx\n8516\t8976\t0\t0\t6\t16\t16\t516\t516\t3516\t8516\t32\t33\tOPAAAA\tGHNAAA\tAAAAxx\n9290\t8977\t0\t2\t0\t10\t90\t290\t1290\t4290\t9290\t180\t181\tITAAAA\tHHNAAA\tHHHHxx\n5686\t8978\t0\t2\t6\t6\t86\t686\t1686\t686\t5686\t172\t173\tSKAAAA\tIHNAAA\tOOOOxx\n2893\t8979\t1\t1\t3\t13\t93\t893\t893\t2893\t2893\t186\t187\tHHAAAA\tJHNAAA\tVVVVxx\n6279\t8980\t1\t3\t9\t19\t79\t279\t279\t1279\t6279\t158\t159\tNHAAAA\tKHNAAA\tAAAAxx\n2278\t8981\t0\t2\t8\t18\t78\t278\t278\t2278\t2278\t156\t157\tQJAAAA\tLHNAAA\tHHHHxx\n1618\t8982\t0\t2\t8\t18\t18\t618\t1618\t1618\t1618\t36\t37\tGKAAAA\tMHNAAA\tOOOOxx\n3450\t8983\t0\t2\t0\t10\t50\t450\t1450\t3450\t3450\t100\t101\tSCAAAA\tNHNAAA\tVVVVxx\n8857\t8984\t1\t1\t7\t17\t57\t857\t857\t3857\t8857\t114\t115\tRCAAAA\tOHNAAA\tAAAAxx\n1005\t8985\t1\t1\t5\t5\t5\t5\t1005\t1005\t1005\t10\t11\tRMAAAA\tPHNAAA\tHHHHxx\n4727\t8986\t1\t3\t7\t7\t27\t727\t727\t4727\t4727\t54\t55\tVZAAAA\tQHNAAA\tOOOOxx\n7617\t8987\t1\t1\t7\t17\t17\t617\t1617\t2617\t7617\t34\t35\tZGAAAA\tRHNAAA\tVVVVxx\n2021\t8988\t1\t1\t1\t1\t21\t21\t21\t2021\t2021\t42\t43\tTZAAAA\tSHNAAA\tAAAAxx\n9124\t8989\t0\t0\t4\t4\t24\t124\t1124\t4124\t9124\t48\t49\tYMAAAA\tTHNAAA\tHHHHxx\n3175\t8990\t1\t3\t5\t15\t75\t175\t1175\t3175\t3175\t150\t151\tDSAAAA\tUHNAAA\tOOOOxx\n2949\t8991\t1\t1\t9\t9\t49\t949\t949\t2949\t2949\t98\t99\tLJAAAA\tVHNAAA\tVVVVxx\n2424\t8992\t0\t0\t4\t4\t24\t424\t424\t2424\t2424\t48\t49\tGPAAAA\tWHNAAA\tAAAAxx\n4791\t8993\t1\t3\t1\t11\t91\t791\t791\t4791\t4791\t182\t183\tHCAAAA\tXHNAAA\tHHHHxx\n7500\t8994\t0\t0\t0\t0\t0\t500\t1500\t2500\t7500\t0\t1\tMCAAAA\tYHNAAA\tOOOOxx\n4893\t8995\t1\t1\t3\t13\t93\t893\t893\t4893\t4893\t186\t187\tFGAAAA\tZHNAAA\tVVVVxx\n121\t8996\t1\t1\t1\t1\t21\t121\t121\t121\t121\t42\t43\tREAAAA\tAINAAA\tAAAAxx\n1965\t8997\t1\t1\t5\t5\t65\t965\t1965\t1965\t1965\t130\t131\tPXAAAA\tBINAAA\tHHHHxx\n2972\t8998\t0\t0\t2\t12\t72\t972\t972\t2972\t2972\t144\t145\tIKAAAA\tCINAAA\tOOOOxx\n662\t8999\t0\t2\t2\t2\t62\t662\t662\t662\t662\t124\t125\tMZAAAA\tDINAAA\tVVVVxx\n7074\t9000\t0\t2\t4\t14\t74\t74\t1074\t2074\t7074\t148\t149\tCMAAAA\tEINAAA\tAAAAxx\n981\t9001\t1\t1\t1\t1\t81\t981\t981\t981\t981\t162\t163\tTLAAAA\tFINAAA\tHHHHxx\n3520\t9002\t0\t0\t0\t0\t20\t520\t1520\t3520\t3520\t40\t41\tKFAAAA\tGINAAA\tOOOOxx\n6540\t9003\t0\t0\t0\t0\t40\t540\t540\t1540\t6540\t80\t81\tORAAAA\tHINAAA\tVVVVxx\n6648\t9004\t0\t0\t8\t8\t48\t648\t648\t1648\t6648\t96\t97\tSVAAAA\tIINAAA\tAAAAxx\n7076\t9005\t0\t0\t6\t16\t76\t76\t1076\t2076\t7076\t152\t153\tEMAAAA\tJINAAA\tHHHHxx\n6919\t9006\t1\t3\t9\t19\t19\t919\t919\t1919\t6919\t38\t39\tDGAAAA\tKINAAA\tOOOOxx\n1108\t9007\t0\t0\t8\t8\t8\t108\t1108\t1108\t1108\t16\t17\tQQAAAA\tLINAAA\tVVVVxx\n317\t9008\t1\t1\t7\t17\t17\t317\t317\t317\t317\t34\t35\tFMAAAA\tMINAAA\tAAAAxx\n3483\t9009\t1\t3\t3\t3\t83\t483\t1483\t3483\t3483\t166\t167\tZDAAAA\tNINAAA\tHHHHxx\n6764\t9010\t0\t0\t4\t4\t64\t764\t764\t1764\t6764\t128\t129\tEAAAAA\tOINAAA\tOOOOxx\n1235\t9011\t1\t3\t5\t15\t35\t235\t1235\t1235\t1235\t70\t71\tNVAAAA\tPINAAA\tVVVVxx\n7121\t9012\t1\t1\t1\t1\t21\t121\t1121\t2121\t7121\t42\t43\tXNAAAA\tQINAAA\tAAAAxx\n426\t9013\t0\t2\t6\t6\t26\t426\t426\t426\t426\t52\t53\tKQAAAA\tRINAAA\tHHHHxx\n6880\t9014\t0\t0\t0\t0\t80\t880\t880\t1880\t6880\t160\t161\tQEAAAA\tSINAAA\tOOOOxx\n5401\t9015\t1\t1\t1\t1\t1\t401\t1401\t401\t5401\t2\t3\tTZAAAA\tTINAAA\tVVVVxx\n7323\t9016\t1\t3\t3\t3\t23\t323\t1323\t2323\t7323\t46\t47\tRVAAAA\tUINAAA\tAAAAxx\n9751\t9017\t1\t3\t1\t11\t51\t751\t1751\t4751\t9751\t102\t103\tBLAAAA\tVINAAA\tHHHHxx\n3436\t9018\t0\t0\t6\t16\t36\t436\t1436\t3436\t3436\t72\t73\tECAAAA\tWINAAA\tOOOOxx\n7319\t9019\t1\t3\t9\t19\t19\t319\t1319\t2319\t7319\t38\t39\tNVAAAA\tXINAAA\tVVVVxx\n7882\t9020\t0\t2\t2\t2\t82\t882\t1882\t2882\t7882\t164\t165\tERAAAA\tYINAAA\tAAAAxx\n8260\t9021\t0\t0\t0\t0\t60\t260\t260\t3260\t8260\t120\t121\tSFAAAA\tZINAAA\tHHHHxx\n9758\t9022\t0\t2\t8\t18\t58\t758\t1758\t4758\t9758\t116\t117\tILAAAA\tAJNAAA\tOOOOxx\n4205\t9023\t1\t1\t5\t5\t5\t205\t205\t4205\t4205\t10\t11\tTFAAAA\tBJNAAA\tVVVVxx\n8884\t9024\t0\t0\t4\t4\t84\t884\t884\t3884\t8884\t168\t169\tSDAAAA\tCJNAAA\tAAAAxx\n1112\t9025\t0\t0\t2\t12\t12\t112\t1112\t1112\t1112\t24\t25\tUQAAAA\tDJNAAA\tHHHHxx\n2186\t9026\t0\t2\t6\t6\t86\t186\t186\t2186\t2186\t172\t173\tCGAAAA\tEJNAAA\tOOOOxx\n8666\t9027\t0\t2\t6\t6\t66\t666\t666\t3666\t8666\t132\t133\tIVAAAA\tFJNAAA\tVVVVxx\n4325\t9028\t1\t1\t5\t5\t25\t325\t325\t4325\t4325\t50\t51\tJKAAAA\tGJNAAA\tAAAAxx\n4912\t9029\t0\t0\t2\t12\t12\t912\t912\t4912\t4912\t24\t25\tYGAAAA\tHJNAAA\tHHHHxx\n6497\t9030\t1\t1\t7\t17\t97\t497\t497\t1497\t6497\t194\t195\tXPAAAA\tIJNAAA\tOOOOxx\n9072\t9031\t0\t0\t2\t12\t72\t72\t1072\t4072\t9072\t144\t145\tYKAAAA\tJJNAAA\tVVVVxx\n8899\t9032\t1\t3\t9\t19\t99\t899\t899\t3899\t8899\t198\t199\tHEAAAA\tKJNAAA\tAAAAxx\n5619\t9033\t1\t3\t9\t19\t19\t619\t1619\t619\t5619\t38\t39\tDIAAAA\tLJNAAA\tHHHHxx\n4110\t9034\t0\t2\t0\t10\t10\t110\t110\t4110\t4110\t20\t21\tCCAAAA\tMJNAAA\tOOOOxx\n7025\t9035\t1\t1\t5\t5\t25\t25\t1025\t2025\t7025\t50\t51\tFKAAAA\tNJNAAA\tVVVVxx\n5605\t9036\t1\t1\t5\t5\t5\t605\t1605\t605\t5605\t10\t11\tPHAAAA\tOJNAAA\tAAAAxx\n2572\t9037\t0\t0\t2\t12\t72\t572\t572\t2572\t2572\t144\t145\tYUAAAA\tPJNAAA\tHHHHxx\n3895\t9038\t1\t3\t5\t15\t95\t895\t1895\t3895\t3895\t190\t191\tVTAAAA\tQJNAAA\tOOOOxx\n9138\t9039\t0\t2\t8\t18\t38\t138\t1138\t4138\t9138\t76\t77\tMNAAAA\tRJNAAA\tVVVVxx\n4713\t9040\t1\t1\t3\t13\t13\t713\t713\t4713\t4713\t26\t27\tHZAAAA\tSJNAAA\tAAAAxx\n6079\t9041\t1\t3\t9\t19\t79\t79\t79\t1079\t6079\t158\t159\tVZAAAA\tTJNAAA\tHHHHxx\n8898\t9042\t0\t2\t8\t18\t98\t898\t898\t3898\t8898\t196\t197\tGEAAAA\tUJNAAA\tOOOOxx\n2650\t9043\t0\t2\t0\t10\t50\t650\t650\t2650\t2650\t100\t101\tYXAAAA\tVJNAAA\tVVVVxx\n5316\t9044\t0\t0\t6\t16\t16\t316\t1316\t316\t5316\t32\t33\tMWAAAA\tWJNAAA\tAAAAxx\n5133\t9045\t1\t1\t3\t13\t33\t133\t1133\t133\t5133\t66\t67\tLPAAAA\tXJNAAA\tHHHHxx\n2184\t9046\t0\t0\t4\t4\t84\t184\t184\t2184\t2184\t168\t169\tAGAAAA\tYJNAAA\tOOOOxx\n2728\t9047\t0\t0\t8\t8\t28\t728\t728\t2728\t2728\t56\t57\tYAAAAA\tZJNAAA\tVVVVxx\n6737\t9048\t1\t1\t7\t17\t37\t737\t737\t1737\t6737\t74\t75\tDZAAAA\tAKNAAA\tAAAAxx\n1128\t9049\t0\t0\t8\t8\t28\t128\t1128\t1128\t1128\t56\t57\tKRAAAA\tBKNAAA\tHHHHxx\n9662\t9050\t0\t2\t2\t2\t62\t662\t1662\t4662\t9662\t124\t125\tQHAAAA\tCKNAAA\tOOOOxx\n9384\t9051\t0\t0\t4\t4\t84\t384\t1384\t4384\t9384\t168\t169\tYWAAAA\tDKNAAA\tVVVVxx\n4576\t9052\t0\t0\t6\t16\t76\t576\t576\t4576\t4576\t152\t153\tAUAAAA\tEKNAAA\tAAAAxx\n9613\t9053\t1\t1\t3\t13\t13\t613\t1613\t4613\t9613\t26\t27\tTFAAAA\tFKNAAA\tHHHHxx\n4001\t9054\t1\t1\t1\t1\t1\t1\t1\t4001\t4001\t2\t3\tXXAAAA\tGKNAAA\tOOOOxx\n3628\t9055\t0\t0\t8\t8\t28\t628\t1628\t3628\t3628\t56\t57\tOJAAAA\tHKNAAA\tVVVVxx\n6968\t9056\t0\t0\t8\t8\t68\t968\t968\t1968\t6968\t136\t137\tAIAAAA\tIKNAAA\tAAAAxx\n6491\t9057\t1\t3\t1\t11\t91\t491\t491\t1491\t6491\t182\t183\tRPAAAA\tJKNAAA\tHHHHxx\n1265\t9058\t1\t1\t5\t5\t65\t265\t1265\t1265\t1265\t130\t131\tRWAAAA\tKKNAAA\tOOOOxx\n6128\t9059\t0\t0\t8\t8\t28\t128\t128\t1128\t6128\t56\t57\tSBAAAA\tLKNAAA\tVVVVxx\n4274\t9060\t0\t2\t4\t14\t74\t274\t274\t4274\t4274\t148\t149\tKIAAAA\tMKNAAA\tAAAAxx\n3598\t9061\t0\t2\t8\t18\t98\t598\t1598\t3598\t3598\t196\t197\tKIAAAA\tNKNAAA\tHHHHxx\n7961\t9062\t1\t1\t1\t1\t61\t961\t1961\t2961\t7961\t122\t123\tFUAAAA\tOKNAAA\tOOOOxx\n2643\t9063\t1\t3\t3\t3\t43\t643\t643\t2643\t2643\t86\t87\tRXAAAA\tPKNAAA\tVVVVxx\n4547\t9064\t1\t3\t7\t7\t47\t547\t547\t4547\t4547\t94\t95\tXSAAAA\tQKNAAA\tAAAAxx\n3568\t9065\t0\t0\t8\t8\t68\t568\t1568\t3568\t3568\t136\t137\tGHAAAA\tRKNAAA\tHHHHxx\n8954\t9066\t0\t2\t4\t14\t54\t954\t954\t3954\t8954\t108\t109\tKGAAAA\tSKNAAA\tOOOOxx\n8802\t9067\t0\t2\t2\t2\t2\t802\t802\t3802\t8802\t4\t5\tOAAAAA\tTKNAAA\tVVVVxx\n7829\t9068\t1\t1\t9\t9\t29\t829\t1829\t2829\t7829\t58\t59\tDPAAAA\tUKNAAA\tAAAAxx\n1008\t9069\t0\t0\t8\t8\t8\t8\t1008\t1008\t1008\t16\t17\tUMAAAA\tVKNAAA\tHHHHxx\n3627\t9070\t1\t3\t7\t7\t27\t627\t1627\t3627\t3627\t54\t55\tNJAAAA\tWKNAAA\tOOOOxx\n3999\t9071\t1\t3\t9\t19\t99\t999\t1999\t3999\t3999\t198\t199\tVXAAAA\tXKNAAA\tVVVVxx\n7697\t9072\t1\t1\t7\t17\t97\t697\t1697\t2697\t7697\t194\t195\tBKAAAA\tYKNAAA\tAAAAxx\n9380\t9073\t0\t0\t0\t0\t80\t380\t1380\t4380\t9380\t160\t161\tUWAAAA\tZKNAAA\tHHHHxx\n2707\t9074\t1\t3\t7\t7\t7\t707\t707\t2707\t2707\t14\t15\tDAAAAA\tALNAAA\tOOOOxx\n4430\t9075\t0\t2\t0\t10\t30\t430\t430\t4430\t4430\t60\t61\tKOAAAA\tBLNAAA\tVVVVxx\n6440\t9076\t0\t0\t0\t0\t40\t440\t440\t1440\t6440\t80\t81\tSNAAAA\tCLNAAA\tAAAAxx\n9958\t9077\t0\t2\t8\t18\t58\t958\t1958\t4958\t9958\t116\t117\tATAAAA\tDLNAAA\tHHHHxx\n7592\t9078\t0\t0\t2\t12\t92\t592\t1592\t2592\t7592\t184\t185\tAGAAAA\tELNAAA\tOOOOxx\n7852\t9079\t0\t0\t2\t12\t52\t852\t1852\t2852\t7852\t104\t105\tAQAAAA\tFLNAAA\tVVVVxx\n9253\t9080\t1\t1\t3\t13\t53\t253\t1253\t4253\t9253\t106\t107\tXRAAAA\tGLNAAA\tAAAAxx\n5910\t9081\t0\t2\t0\t10\t10\t910\t1910\t910\t5910\t20\t21\tITAAAA\tHLNAAA\tHHHHxx\n7487\t9082\t1\t3\t7\t7\t87\t487\t1487\t2487\t7487\t174\t175\tZBAAAA\tILNAAA\tOOOOxx\n6324\t9083\t0\t0\t4\t4\t24\t324\t324\t1324\t6324\t48\t49\tGJAAAA\tJLNAAA\tVVVVxx\n5792\t9084\t0\t0\t2\t12\t92\t792\t1792\t792\t5792\t184\t185\tUOAAAA\tKLNAAA\tAAAAxx\n7390\t9085\t0\t2\t0\t10\t90\t390\t1390\t2390\t7390\t180\t181\tGYAAAA\tLLNAAA\tHHHHxx\n8534\t9086\t0\t2\t4\t14\t34\t534\t534\t3534\t8534\t68\t69\tGQAAAA\tMLNAAA\tOOOOxx\n2690\t9087\t0\t2\t0\t10\t90\t690\t690\t2690\t2690\t180\t181\tMZAAAA\tNLNAAA\tVVVVxx\n3992\t9088\t0\t0\t2\t12\t92\t992\t1992\t3992\t3992\t184\t185\tOXAAAA\tOLNAAA\tAAAAxx\n6928\t9089\t0\t0\t8\t8\t28\t928\t928\t1928\t6928\t56\t57\tMGAAAA\tPLNAAA\tHHHHxx\n7815\t9090\t1\t3\t5\t15\t15\t815\t1815\t2815\t7815\t30\t31\tPOAAAA\tQLNAAA\tOOOOxx\n9477\t9091\t1\t1\t7\t17\t77\t477\t1477\t4477\t9477\t154\t155\tNAAAAA\tRLNAAA\tVVVVxx\n497\t9092\t1\t1\t7\t17\t97\t497\t497\t497\t497\t194\t195\tDTAAAA\tSLNAAA\tAAAAxx\n7532\t9093\t0\t0\t2\t12\t32\t532\t1532\t2532\t7532\t64\t65\tSDAAAA\tTLNAAA\tHHHHxx\n9838\t9094\t0\t2\t8\t18\t38\t838\t1838\t4838\t9838\t76\t77\tKOAAAA\tULNAAA\tOOOOxx\n1557\t9095\t1\t1\t7\t17\t57\t557\t1557\t1557\t1557\t114\t115\tXHAAAA\tVLNAAA\tVVVVxx\n2467\t9096\t1\t3\t7\t7\t67\t467\t467\t2467\t2467\t134\t135\tXQAAAA\tWLNAAA\tAAAAxx\n2367\t9097\t1\t3\t7\t7\t67\t367\t367\t2367\t2367\t134\t135\tBNAAAA\tXLNAAA\tHHHHxx\n5677\t9098\t1\t1\t7\t17\t77\t677\t1677\t677\t5677\t154\t155\tJKAAAA\tYLNAAA\tOOOOxx\n6193\t9099\t1\t1\t3\t13\t93\t193\t193\t1193\t6193\t186\t187\tFEAAAA\tZLNAAA\tVVVVxx\n7126\t9100\t0\t2\t6\t6\t26\t126\t1126\t2126\t7126\t52\t53\tCOAAAA\tAMNAAA\tAAAAxx\n5264\t9101\t0\t0\t4\t4\t64\t264\t1264\t264\t5264\t128\t129\tMUAAAA\tBMNAAA\tHHHHxx\n850\t9102\t0\t2\t0\t10\t50\t850\t850\t850\t850\t100\t101\tSGAAAA\tCMNAAA\tOOOOxx\n4854\t9103\t0\t2\t4\t14\t54\t854\t854\t4854\t4854\t108\t109\tSEAAAA\tDMNAAA\tVVVVxx\n4414\t9104\t0\t2\t4\t14\t14\t414\t414\t4414\t4414\t28\t29\tUNAAAA\tEMNAAA\tAAAAxx\n8971\t9105\t1\t3\t1\t11\t71\t971\t971\t3971\t8971\t142\t143\tBHAAAA\tFMNAAA\tHHHHxx\n9240\t9106\t0\t0\t0\t0\t40\t240\t1240\t4240\t9240\t80\t81\tKRAAAA\tGMNAAA\tOOOOxx\n7341\t9107\t1\t1\t1\t1\t41\t341\t1341\t2341\t7341\t82\t83\tJWAAAA\tHMNAAA\tVVVVxx\n3151\t9108\t1\t3\t1\t11\t51\t151\t1151\t3151\t3151\t102\t103\tFRAAAA\tIMNAAA\tAAAAxx\n1742\t9109\t0\t2\t2\t2\t42\t742\t1742\t1742\t1742\t84\t85\tAPAAAA\tJMNAAA\tHHHHxx\n1347\t9110\t1\t3\t7\t7\t47\t347\t1347\t1347\t1347\t94\t95\tVZAAAA\tKMNAAA\tOOOOxx\n9418\t9111\t0\t2\t8\t18\t18\t418\t1418\t4418\t9418\t36\t37\tGYAAAA\tLMNAAA\tVVVVxx\n5452\t9112\t0\t0\t2\t12\t52\t452\t1452\t452\t5452\t104\t105\tSBAAAA\tMMNAAA\tAAAAxx\n8637\t9113\t1\t1\t7\t17\t37\t637\t637\t3637\t8637\t74\t75\tFUAAAA\tNMNAAA\tHHHHxx\n8287\t9114\t1\t3\t7\t7\t87\t287\t287\t3287\t8287\t174\t175\tTGAAAA\tOMNAAA\tOOOOxx\n9865\t9115\t1\t1\t5\t5\t65\t865\t1865\t4865\t9865\t130\t131\tLPAAAA\tPMNAAA\tVVVVxx\n1664\t9116\t0\t0\t4\t4\t64\t664\t1664\t1664\t1664\t128\t129\tAMAAAA\tQMNAAA\tAAAAxx\n9933\t9117\t1\t1\t3\t13\t33\t933\t1933\t4933\t9933\t66\t67\tBSAAAA\tRMNAAA\tHHHHxx\n3416\t9118\t0\t0\t6\t16\t16\t416\t1416\t3416\t3416\t32\t33\tKBAAAA\tSMNAAA\tOOOOxx\n7981\t9119\t1\t1\t1\t1\t81\t981\t1981\t2981\t7981\t162\t163\tZUAAAA\tTMNAAA\tVVVVxx\n1981\t9120\t1\t1\t1\t1\t81\t981\t1981\t1981\t1981\t162\t163\tFYAAAA\tUMNAAA\tAAAAxx\n441\t9121\t1\t1\t1\t1\t41\t441\t441\t441\t441\t82\t83\tZQAAAA\tVMNAAA\tHHHHxx\n1380\t9122\t0\t0\t0\t0\t80\t380\t1380\t1380\t1380\t160\t161\tCBAAAA\tWMNAAA\tOOOOxx\n7325\t9123\t1\t1\t5\t5\t25\t325\t1325\t2325\t7325\t50\t51\tTVAAAA\tXMNAAA\tVVVVxx\n5682\t9124\t0\t2\t2\t2\t82\t682\t1682\t682\t5682\t164\t165\tOKAAAA\tYMNAAA\tAAAAxx\n1024\t9125\t0\t0\t4\t4\t24\t24\t1024\t1024\t1024\t48\t49\tKNAAAA\tZMNAAA\tHHHHxx\n1096\t9126\t0\t0\t6\t16\t96\t96\t1096\t1096\t1096\t192\t193\tEQAAAA\tANNAAA\tOOOOxx\n4717\t9127\t1\t1\t7\t17\t17\t717\t717\t4717\t4717\t34\t35\tLZAAAA\tBNNAAA\tVVVVxx\n7948\t9128\t0\t0\t8\t8\t48\t948\t1948\t2948\t7948\t96\t97\tSTAAAA\tCNNAAA\tAAAAxx\n4074\t9129\t0\t2\t4\t14\t74\t74\t74\t4074\t4074\t148\t149\tSAAAAA\tDNNAAA\tHHHHxx\n211\t9130\t1\t3\t1\t11\t11\t211\t211\t211\t211\t22\t23\tDIAAAA\tENNAAA\tOOOOxx\n8993\t9131\t1\t1\t3\t13\t93\t993\t993\t3993\t8993\t186\t187\tXHAAAA\tFNNAAA\tVVVVxx\n4509\t9132\t1\t1\t9\t9\t9\t509\t509\t4509\t4509\t18\t19\tLRAAAA\tGNNAAA\tAAAAxx\n823\t9133\t1\t3\t3\t3\t23\t823\t823\t823\t823\t46\t47\tRFAAAA\tHNNAAA\tHHHHxx\n4747\t9134\t1\t3\t7\t7\t47\t747\t747\t4747\t4747\t94\t95\tPAAAAA\tINNAAA\tOOOOxx\n6955\t9135\t1\t3\t5\t15\t55\t955\t955\t1955\t6955\t110\t111\tNHAAAA\tJNNAAA\tVVVVxx\n7922\t9136\t0\t2\t2\t2\t22\t922\t1922\t2922\t7922\t44\t45\tSSAAAA\tKNNAAA\tAAAAxx\n6936\t9137\t0\t0\t6\t16\t36\t936\t936\t1936\t6936\t72\t73\tUGAAAA\tLNNAAA\tHHHHxx\n1546\t9138\t0\t2\t6\t6\t46\t546\t1546\t1546\t1546\t92\t93\tMHAAAA\tMNNAAA\tOOOOxx\n9836\t9139\t0\t0\t6\t16\t36\t836\t1836\t4836\t9836\t72\t73\tIOAAAA\tNNNAAA\tVVVVxx\n5626\t9140\t0\t2\t6\t6\t26\t626\t1626\t626\t5626\t52\t53\tKIAAAA\tONNAAA\tAAAAxx\n4879\t9141\t1\t3\t9\t19\t79\t879\t879\t4879\t4879\t158\t159\tRFAAAA\tPNNAAA\tHHHHxx\n8590\t9142\t0\t2\t0\t10\t90\t590\t590\t3590\t8590\t180\t181\tKSAAAA\tQNNAAA\tOOOOxx\n8842\t9143\t0\t2\t2\t2\t42\t842\t842\t3842\t8842\t84\t85\tCCAAAA\tRNNAAA\tVVVVxx\n6505\t9144\t1\t1\t5\t5\t5\t505\t505\t1505\t6505\t10\t11\tFQAAAA\tSNNAAA\tAAAAxx\n2803\t9145\t1\t3\t3\t3\t3\t803\t803\t2803\t2803\t6\t7\tVDAAAA\tTNNAAA\tHHHHxx\n9258\t9146\t0\t2\t8\t18\t58\t258\t1258\t4258\t9258\t116\t117\tCSAAAA\tUNNAAA\tOOOOxx\n741\t9147\t1\t1\t1\t1\t41\t741\t741\t741\t741\t82\t83\tNCAAAA\tVNNAAA\tVVVVxx\n1457\t9148\t1\t1\t7\t17\t57\t457\t1457\t1457\t1457\t114\t115\tBEAAAA\tWNNAAA\tAAAAxx\n5777\t9149\t1\t1\t7\t17\t77\t777\t1777\t777\t5777\t154\t155\tFOAAAA\tXNNAAA\tHHHHxx\n2883\t9150\t1\t3\t3\t3\t83\t883\t883\t2883\t2883\t166\t167\tXGAAAA\tYNNAAA\tOOOOxx\n6610\t9151\t0\t2\t0\t10\t10\t610\t610\t1610\t6610\t20\t21\tGUAAAA\tZNNAAA\tVVVVxx\n4331\t9152\t1\t3\t1\t11\t31\t331\t331\t4331\t4331\t62\t63\tPKAAAA\tAONAAA\tAAAAxx\n2712\t9153\t0\t0\t2\t12\t12\t712\t712\t2712\t2712\t24\t25\tIAAAAA\tBONAAA\tHHHHxx\n9268\t9154\t0\t0\t8\t8\t68\t268\t1268\t4268\t9268\t136\t137\tMSAAAA\tCONAAA\tOOOOxx\n410\t9155\t0\t2\t0\t10\t10\t410\t410\t410\t410\t20\t21\tUPAAAA\tDONAAA\tVVVVxx\n9411\t9156\t1\t3\t1\t11\t11\t411\t1411\t4411\t9411\t22\t23\tZXAAAA\tEONAAA\tAAAAxx\n4683\t9157\t1\t3\t3\t3\t83\t683\t683\t4683\t4683\t166\t167\tDYAAAA\tFONAAA\tHHHHxx\n7072\t9158\t0\t0\t2\t12\t72\t72\t1072\t2072\t7072\t144\t145\tAMAAAA\tGONAAA\tOOOOxx\n5050\t9159\t0\t2\t0\t10\t50\t50\t1050\t50\t5050\t100\t101\tGMAAAA\tHONAAA\tVVVVxx\n5932\t9160\t0\t0\t2\t12\t32\t932\t1932\t932\t5932\t64\t65\tEUAAAA\tIONAAA\tAAAAxx\n2756\t9161\t0\t0\t6\t16\t56\t756\t756\t2756\t2756\t112\t113\tACAAAA\tJONAAA\tHHHHxx\n9813\t9162\t1\t1\t3\t13\t13\t813\t1813\t4813\t9813\t26\t27\tLNAAAA\tKONAAA\tOOOOxx\n7388\t9163\t0\t0\t8\t8\t88\t388\t1388\t2388\t7388\t176\t177\tEYAAAA\tLONAAA\tVVVVxx\n2596\t9164\t0\t0\t6\t16\t96\t596\t596\t2596\t2596\t192\t193\tWVAAAA\tMONAAA\tAAAAxx\n5102\t9165\t0\t2\t2\t2\t2\t102\t1102\t102\t5102\t4\t5\tGOAAAA\tNONAAA\tHHHHxx\n208\t9166\t0\t0\t8\t8\t8\t208\t208\t208\t208\t16\t17\tAIAAAA\tOONAAA\tOOOOxx\n86\t9167\t0\t2\t6\t6\t86\t86\t86\t86\t86\t172\t173\tIDAAAA\tPONAAA\tVVVVxx\n8127\t9168\t1\t3\t7\t7\t27\t127\t127\t3127\t8127\t54\t55\tPAAAAA\tQONAAA\tAAAAxx\n5154\t9169\t0\t2\t4\t14\t54\t154\t1154\t154\t5154\t108\t109\tGQAAAA\tRONAAA\tHHHHxx\n4491\t9170\t1\t3\t1\t11\t91\t491\t491\t4491\t4491\t182\t183\tTQAAAA\tSONAAA\tOOOOxx\n7423\t9171\t1\t3\t3\t3\t23\t423\t1423\t2423\t7423\t46\t47\tNZAAAA\tTONAAA\tVVVVxx\n6441\t9172\t1\t1\t1\t1\t41\t441\t441\t1441\t6441\t82\t83\tTNAAAA\tUONAAA\tAAAAxx\n2920\t9173\t0\t0\t0\t0\t20\t920\t920\t2920\t2920\t40\t41\tIIAAAA\tVONAAA\tHHHHxx\n6386\t9174\t0\t2\t6\t6\t86\t386\t386\t1386\t6386\t172\t173\tQLAAAA\tWONAAA\tOOOOxx\n9744\t9175\t0\t0\t4\t4\t44\t744\t1744\t4744\t9744\t88\t89\tUKAAAA\tXONAAA\tVVVVxx\n2667\t9176\t1\t3\t7\t7\t67\t667\t667\t2667\t2667\t134\t135\tPYAAAA\tYONAAA\tAAAAxx\n5754\t9177\t0\t2\t4\t14\t54\t754\t1754\t754\t5754\t108\t109\tINAAAA\tZONAAA\tHHHHxx\n4645\t9178\t1\t1\t5\t5\t45\t645\t645\t4645\t4645\t90\t91\tRWAAAA\tAPNAAA\tOOOOxx\n4327\t9179\t1\t3\t7\t7\t27\t327\t327\t4327\t4327\t54\t55\tLKAAAA\tBPNAAA\tVVVVxx\n843\t9180\t1\t3\t3\t3\t43\t843\t843\t843\t843\t86\t87\tLGAAAA\tCPNAAA\tAAAAxx\n4085\t9181\t1\t1\t5\t5\t85\t85\t85\t4085\t4085\t170\t171\tDBAAAA\tDPNAAA\tHHHHxx\n2849\t9182\t1\t1\t9\t9\t49\t849\t849\t2849\t2849\t98\t99\tPFAAAA\tEPNAAA\tOOOOxx\n5734\t9183\t0\t2\t4\t14\t34\t734\t1734\t734\t5734\t68\t69\tOMAAAA\tFPNAAA\tVVVVxx\n5307\t9184\t1\t3\t7\t7\t7\t307\t1307\t307\t5307\t14\t15\tDWAAAA\tGPNAAA\tAAAAxx\n8433\t9185\t1\t1\t3\t13\t33\t433\t433\t3433\t8433\t66\t67\tJMAAAA\tHPNAAA\tHHHHxx\n3031\t9186\t1\t3\t1\t11\t31\t31\t1031\t3031\t3031\t62\t63\tPMAAAA\tIPNAAA\tOOOOxx\n5714\t9187\t0\t2\t4\t14\t14\t714\t1714\t714\t5714\t28\t29\tULAAAA\tJPNAAA\tVVVVxx\n5969\t9188\t1\t1\t9\t9\t69\t969\t1969\t969\t5969\t138\t139\tPVAAAA\tKPNAAA\tAAAAxx\n2532\t9189\t0\t0\t2\t12\t32\t532\t532\t2532\t2532\t64\t65\tKTAAAA\tLPNAAA\tHHHHxx\n5219\t9190\t1\t3\t9\t19\t19\t219\t1219\t219\t5219\t38\t39\tTSAAAA\tMPNAAA\tOOOOxx\n7343\t9191\t1\t3\t3\t3\t43\t343\t1343\t2343\t7343\t86\t87\tLWAAAA\tNPNAAA\tVVVVxx\n9089\t9192\t1\t1\t9\t9\t89\t89\t1089\t4089\t9089\t178\t179\tPLAAAA\tOPNAAA\tAAAAxx\n9337\t9193\t1\t1\t7\t17\t37\t337\t1337\t4337\t9337\t74\t75\tDVAAAA\tPPNAAA\tHHHHxx\n5131\t9194\t1\t3\t1\t11\t31\t131\t1131\t131\t5131\t62\t63\tJPAAAA\tQPNAAA\tOOOOxx\n6253\t9195\t1\t1\t3\t13\t53\t253\t253\t1253\t6253\t106\t107\tNGAAAA\tRPNAAA\tVVVVxx\n5140\t9196\t0\t0\t0\t0\t40\t140\t1140\t140\t5140\t80\t81\tSPAAAA\tSPNAAA\tAAAAxx\n2953\t9197\t1\t1\t3\t13\t53\t953\t953\t2953\t2953\t106\t107\tPJAAAA\tTPNAAA\tHHHHxx\n4293\t9198\t1\t1\t3\t13\t93\t293\t293\t4293\t4293\t186\t187\tDJAAAA\tUPNAAA\tOOOOxx\n9974\t9199\t0\t2\t4\t14\t74\t974\t1974\t4974\t9974\t148\t149\tQTAAAA\tVPNAAA\tVVVVxx\n5061\t9200\t1\t1\t1\t1\t61\t61\t1061\t61\t5061\t122\t123\tRMAAAA\tWPNAAA\tAAAAxx\n8570\t9201\t0\t2\t0\t10\t70\t570\t570\t3570\t8570\t140\t141\tQRAAAA\tXPNAAA\tHHHHxx\n9504\t9202\t0\t0\t4\t4\t4\t504\t1504\t4504\t9504\t8\t9\tOBAAAA\tYPNAAA\tOOOOxx\n604\t9203\t0\t0\t4\t4\t4\t604\t604\t604\t604\t8\t9\tGXAAAA\tZPNAAA\tVVVVxx\n4991\t9204\t1\t3\t1\t11\t91\t991\t991\t4991\t4991\t182\t183\tZJAAAA\tAQNAAA\tAAAAxx\n880\t9205\t0\t0\t0\t0\t80\t880\t880\t880\t880\t160\t161\tWHAAAA\tBQNAAA\tHHHHxx\n3861\t9206\t1\t1\t1\t1\t61\t861\t1861\t3861\t3861\t122\t123\tNSAAAA\tCQNAAA\tOOOOxx\n8262\t9207\t0\t2\t2\t2\t62\t262\t262\t3262\t8262\t124\t125\tUFAAAA\tDQNAAA\tVVVVxx\n5689\t9208\t1\t1\t9\t9\t89\t689\t1689\t689\t5689\t178\t179\tVKAAAA\tEQNAAA\tAAAAxx\n1793\t9209\t1\t1\t3\t13\t93\t793\t1793\t1793\t1793\t186\t187\tZQAAAA\tFQNAAA\tHHHHxx\n2661\t9210\t1\t1\t1\t1\t61\t661\t661\t2661\t2661\t122\t123\tJYAAAA\tGQNAAA\tOOOOxx\n7954\t9211\t0\t2\t4\t14\t54\t954\t1954\t2954\t7954\t108\t109\tYTAAAA\tHQNAAA\tVVVVxx\n1874\t9212\t0\t2\t4\t14\t74\t874\t1874\t1874\t1874\t148\t149\tCUAAAA\tIQNAAA\tAAAAxx\n2982\t9213\t0\t2\t2\t2\t82\t982\t982\t2982\t2982\t164\t165\tSKAAAA\tJQNAAA\tHHHHxx\n331\t9214\t1\t3\t1\t11\t31\t331\t331\t331\t331\t62\t63\tTMAAAA\tKQNAAA\tOOOOxx\n5021\t9215\t1\t1\t1\t1\t21\t21\t1021\t21\t5021\t42\t43\tDLAAAA\tLQNAAA\tVVVVxx\n9894\t9216\t0\t2\t4\t14\t94\t894\t1894\t4894\t9894\t188\t189\tOQAAAA\tMQNAAA\tAAAAxx\n7709\t9217\t1\t1\t9\t9\t9\t709\t1709\t2709\t7709\t18\t19\tNKAAAA\tNQNAAA\tHHHHxx\n4980\t9218\t0\t0\t0\t0\t80\t980\t980\t4980\t4980\t160\t161\tOJAAAA\tOQNAAA\tOOOOxx\n8249\t9219\t1\t1\t9\t9\t49\t249\t249\t3249\t8249\t98\t99\tHFAAAA\tPQNAAA\tVVVVxx\n7120\t9220\t0\t0\t0\t0\t20\t120\t1120\t2120\t7120\t40\t41\tWNAAAA\tQQNAAA\tAAAAxx\n7464\t9221\t0\t0\t4\t4\t64\t464\t1464\t2464\t7464\t128\t129\tCBAAAA\tRQNAAA\tHHHHxx\n8086\t9222\t0\t2\t6\t6\t86\t86\t86\t3086\t8086\t172\t173\tAZAAAA\tSQNAAA\tOOOOxx\n3509\t9223\t1\t1\t9\t9\t9\t509\t1509\t3509\t3509\t18\t19\tZEAAAA\tTQNAAA\tVVVVxx\n3902\t9224\t0\t2\t2\t2\t2\t902\t1902\t3902\t3902\t4\t5\tCUAAAA\tUQNAAA\tAAAAxx\n9907\t9225\t1\t3\t7\t7\t7\t907\t1907\t4907\t9907\t14\t15\tBRAAAA\tVQNAAA\tHHHHxx\n6278\t9226\t0\t2\t8\t18\t78\t278\t278\t1278\t6278\t156\t157\tMHAAAA\tWQNAAA\tOOOOxx\n9316\t9227\t0\t0\t6\t16\t16\t316\t1316\t4316\t9316\t32\t33\tIUAAAA\tXQNAAA\tVVVVxx\n2824\t9228\t0\t0\t4\t4\t24\t824\t824\t2824\t2824\t48\t49\tQEAAAA\tYQNAAA\tAAAAxx\n1558\t9229\t0\t2\t8\t18\t58\t558\t1558\t1558\t1558\t116\t117\tYHAAAA\tZQNAAA\tHHHHxx\n5436\t9230\t0\t0\t6\t16\t36\t436\t1436\t436\t5436\t72\t73\tCBAAAA\tARNAAA\tOOOOxx\n1161\t9231\t1\t1\t1\t1\t61\t161\t1161\t1161\t1161\t122\t123\tRSAAAA\tBRNAAA\tVVVVxx\n7569\t9232\t1\t1\t9\t9\t69\t569\t1569\t2569\t7569\t138\t139\tDFAAAA\tCRNAAA\tAAAAxx\n9614\t9233\t0\t2\t4\t14\t14\t614\t1614\t4614\t9614\t28\t29\tUFAAAA\tDRNAAA\tHHHHxx\n6970\t9234\t0\t2\t0\t10\t70\t970\t970\t1970\t6970\t140\t141\tCIAAAA\tERNAAA\tOOOOxx\n2422\t9235\t0\t2\t2\t2\t22\t422\t422\t2422\t2422\t44\t45\tEPAAAA\tFRNAAA\tVVVVxx\n8860\t9236\t0\t0\t0\t0\t60\t860\t860\t3860\t8860\t120\t121\tUCAAAA\tGRNAAA\tAAAAxx\n9912\t9237\t0\t0\t2\t12\t12\t912\t1912\t4912\t9912\t24\t25\tGRAAAA\tHRNAAA\tHHHHxx\n1109\t9238\t1\t1\t9\t9\t9\t109\t1109\t1109\t1109\t18\t19\tRQAAAA\tIRNAAA\tOOOOxx\n3286\t9239\t0\t2\t6\t6\t86\t286\t1286\t3286\t3286\t172\t173\tKWAAAA\tJRNAAA\tVVVVxx\n2277\t9240\t1\t1\t7\t17\t77\t277\t277\t2277\t2277\t154\t155\tPJAAAA\tKRNAAA\tAAAAxx\n8656\t9241\t0\t0\t6\t16\t56\t656\t656\t3656\t8656\t112\t113\tYUAAAA\tLRNAAA\tHHHHxx\n4656\t9242\t0\t0\t6\t16\t56\t656\t656\t4656\t4656\t112\t113\tCXAAAA\tMRNAAA\tOOOOxx\n6965\t9243\t1\t1\t5\t5\t65\t965\t965\t1965\t6965\t130\t131\tXHAAAA\tNRNAAA\tVVVVxx\n7591\t9244\t1\t3\t1\t11\t91\t591\t1591\t2591\t7591\t182\t183\tZFAAAA\tORNAAA\tAAAAxx\n4883\t9245\t1\t3\t3\t3\t83\t883\t883\t4883\t4883\t166\t167\tVFAAAA\tPRNAAA\tHHHHxx\n452\t9246\t0\t0\t2\t12\t52\t452\t452\t452\t452\t104\t105\tKRAAAA\tQRNAAA\tOOOOxx\n4018\t9247\t0\t2\t8\t18\t18\t18\t18\t4018\t4018\t36\t37\tOYAAAA\tRRNAAA\tVVVVxx\n4066\t9248\t0\t2\t6\t6\t66\t66\t66\t4066\t4066\t132\t133\tKAAAAA\tSRNAAA\tAAAAxx\n6480\t9249\t0\t0\t0\t0\t80\t480\t480\t1480\t6480\t160\t161\tGPAAAA\tTRNAAA\tHHHHxx\n8634\t9250\t0\t2\t4\t14\t34\t634\t634\t3634\t8634\t68\t69\tCUAAAA\tURNAAA\tOOOOxx\n9387\t9251\t1\t3\t7\t7\t87\t387\t1387\t4387\t9387\t174\t175\tBXAAAA\tVRNAAA\tVVVVxx\n3476\t9252\t0\t0\t6\t16\t76\t476\t1476\t3476\t3476\t152\t153\tSDAAAA\tWRNAAA\tAAAAxx\n5995\t9253\t1\t3\t5\t15\t95\t995\t1995\t995\t5995\t190\t191\tPWAAAA\tXRNAAA\tHHHHxx\n9677\t9254\t1\t1\t7\t17\t77\t677\t1677\t4677\t9677\t154\t155\tFIAAAA\tYRNAAA\tOOOOxx\n3884\t9255\t0\t0\t4\t4\t84\t884\t1884\t3884\t3884\t168\t169\tKTAAAA\tZRNAAA\tVVVVxx\n6500\t9256\t0\t0\t0\t0\t0\t500\t500\t1500\t6500\t0\t1\tAQAAAA\tASNAAA\tAAAAxx\n7972\t9257\t0\t0\t2\t12\t72\t972\t1972\t2972\t7972\t144\t145\tQUAAAA\tBSNAAA\tHHHHxx\n5281\t9258\t1\t1\t1\t1\t81\t281\t1281\t281\t5281\t162\t163\tDVAAAA\tCSNAAA\tOOOOxx\n1288\t9259\t0\t0\t8\t8\t88\t288\t1288\t1288\t1288\t176\t177\tOXAAAA\tDSNAAA\tVVVVxx\n4366\t9260\t0\t2\t6\t6\t66\t366\t366\t4366\t4366\t132\t133\tYLAAAA\tESNAAA\tAAAAxx\n6557\t9261\t1\t1\t7\t17\t57\t557\t557\t1557\t6557\t114\t115\tFSAAAA\tFSNAAA\tHHHHxx\n7086\t9262\t0\t2\t6\t6\t86\t86\t1086\t2086\t7086\t172\t173\tOMAAAA\tGSNAAA\tOOOOxx\n6588\t9263\t0\t0\t8\t8\t88\t588\t588\t1588\t6588\t176\t177\tKTAAAA\tHSNAAA\tVVVVxx\n9062\t9264\t0\t2\t2\t2\t62\t62\t1062\t4062\t9062\t124\t125\tOKAAAA\tISNAAA\tAAAAxx\n9230\t9265\t0\t2\t0\t10\t30\t230\t1230\t4230\t9230\t60\t61\tARAAAA\tJSNAAA\tHHHHxx\n7672\t9266\t0\t0\t2\t12\t72\t672\t1672\t2672\t7672\t144\t145\tCJAAAA\tKSNAAA\tOOOOxx\n5204\t9267\t0\t0\t4\t4\t4\t204\t1204\t204\t5204\t8\t9\tESAAAA\tLSNAAA\tVVVVxx\n2836\t9268\t0\t0\t6\t16\t36\t836\t836\t2836\t2836\t72\t73\tCFAAAA\tMSNAAA\tAAAAxx\n7165\t9269\t1\t1\t5\t5\t65\t165\t1165\t2165\t7165\t130\t131\tPPAAAA\tNSNAAA\tHHHHxx\n971\t9270\t1\t3\t1\t11\t71\t971\t971\t971\t971\t142\t143\tJLAAAA\tOSNAAA\tOOOOxx\n3851\t9271\t1\t3\t1\t11\t51\t851\t1851\t3851\t3851\t102\t103\tDSAAAA\tPSNAAA\tVVVVxx\n8593\t9272\t1\t1\t3\t13\t93\t593\t593\t3593\t8593\t186\t187\tNSAAAA\tQSNAAA\tAAAAxx\n7742\t9273\t0\t2\t2\t2\t42\t742\t1742\t2742\t7742\t84\t85\tULAAAA\tRSNAAA\tHHHHxx\n2887\t9274\t1\t3\t7\t7\t87\t887\t887\t2887\t2887\t174\t175\tBHAAAA\tSSNAAA\tOOOOxx\n8479\t9275\t1\t3\t9\t19\t79\t479\t479\t3479\t8479\t158\t159\tDOAAAA\tTSNAAA\tVVVVxx\n9514\t9276\t0\t2\t4\t14\t14\t514\t1514\t4514\t9514\t28\t29\tYBAAAA\tUSNAAA\tAAAAxx\n273\t9277\t1\t1\t3\t13\t73\t273\t273\t273\t273\t146\t147\tNKAAAA\tVSNAAA\tHHHHxx\n2938\t9278\t0\t2\t8\t18\t38\t938\t938\t2938\t2938\t76\t77\tAJAAAA\tWSNAAA\tOOOOxx\n9793\t9279\t1\t1\t3\t13\t93\t793\t1793\t4793\t9793\t186\t187\tRMAAAA\tXSNAAA\tVVVVxx\n8050\t9280\t0\t2\t0\t10\t50\t50\t50\t3050\t8050\t100\t101\tQXAAAA\tYSNAAA\tAAAAxx\n6702\t9281\t0\t2\t2\t2\t2\t702\t702\t1702\t6702\t4\t5\tUXAAAA\tZSNAAA\tHHHHxx\n7290\t9282\t0\t2\t0\t10\t90\t290\t1290\t2290\t7290\t180\t181\tKUAAAA\tATNAAA\tOOOOxx\n1837\t9283\t1\t1\t7\t17\t37\t837\t1837\t1837\t1837\t74\t75\tRSAAAA\tBTNAAA\tVVVVxx\n3206\t9284\t0\t2\t6\t6\t6\t206\t1206\t3206\t3206\t12\t13\tITAAAA\tCTNAAA\tAAAAxx\n4925\t9285\t1\t1\t5\t5\t25\t925\t925\t4925\t4925\t50\t51\tLHAAAA\tDTNAAA\tHHHHxx\n5066\t9286\t0\t2\t6\t6\t66\t66\t1066\t66\t5066\t132\t133\tWMAAAA\tETNAAA\tOOOOxx\n3401\t9287\t1\t1\t1\t1\t1\t401\t1401\t3401\t3401\t2\t3\tVAAAAA\tFTNAAA\tVVVVxx\n3474\t9288\t0\t2\t4\t14\t74\t474\t1474\t3474\t3474\t148\t149\tQDAAAA\tGTNAAA\tAAAAxx\n57\t9289\t1\t1\t7\t17\t57\t57\t57\t57\t57\t114\t115\tFCAAAA\tHTNAAA\tHHHHxx\n2082\t9290\t0\t2\t2\t2\t82\t82\t82\t2082\t2082\t164\t165\tCCAAAA\tITNAAA\tOOOOxx\n100\t9291\t0\t0\t0\t0\t0\t100\t100\t100\t100\t0\t1\tWDAAAA\tJTNAAA\tVVVVxx\n9665\t9292\t1\t1\t5\t5\t65\t665\t1665\t4665\t9665\t130\t131\tTHAAAA\tKTNAAA\tAAAAxx\n8284\t9293\t0\t0\t4\t4\t84\t284\t284\t3284\t8284\t168\t169\tQGAAAA\tLTNAAA\tHHHHxx\n958\t9294\t0\t2\t8\t18\t58\t958\t958\t958\t958\t116\t117\tWKAAAA\tMTNAAA\tOOOOxx\n5282\t9295\t0\t2\t2\t2\t82\t282\t1282\t282\t5282\t164\t165\tEVAAAA\tNTNAAA\tVVVVxx\n4257\t9296\t1\t1\t7\t17\t57\t257\t257\t4257\t4257\t114\t115\tTHAAAA\tOTNAAA\tAAAAxx\n3160\t9297\t0\t0\t0\t0\t60\t160\t1160\t3160\t3160\t120\t121\tORAAAA\tPTNAAA\tHHHHxx\n8449\t9298\t1\t1\t9\t9\t49\t449\t449\t3449\t8449\t98\t99\tZMAAAA\tQTNAAA\tOOOOxx\n500\t9299\t0\t0\t0\t0\t0\t500\t500\t500\t500\t0\t1\tGTAAAA\tRTNAAA\tVVVVxx\n6432\t9300\t0\t0\t2\t12\t32\t432\t432\t1432\t6432\t64\t65\tKNAAAA\tSTNAAA\tAAAAxx\n6220\t9301\t0\t0\t0\t0\t20\t220\t220\t1220\t6220\t40\t41\tGFAAAA\tTTNAAA\tHHHHxx\n7233\t9302\t1\t1\t3\t13\t33\t233\t1233\t2233\t7233\t66\t67\tFSAAAA\tUTNAAA\tOOOOxx\n2723\t9303\t1\t3\t3\t3\t23\t723\t723\t2723\t2723\t46\t47\tTAAAAA\tVTNAAA\tVVVVxx\n1899\t9304\t1\t3\t9\t19\t99\t899\t1899\t1899\t1899\t198\t199\tBVAAAA\tWTNAAA\tAAAAxx\n7158\t9305\t0\t2\t8\t18\t58\t158\t1158\t2158\t7158\t116\t117\tIPAAAA\tXTNAAA\tHHHHxx\n202\t9306\t0\t2\t2\t2\t2\t202\t202\t202\t202\t4\t5\tUHAAAA\tYTNAAA\tOOOOxx\n2286\t9307\t0\t2\t6\t6\t86\t286\t286\t2286\t2286\t172\t173\tYJAAAA\tZTNAAA\tVVVVxx\n5356\t9308\t0\t0\t6\t16\t56\t356\t1356\t356\t5356\t112\t113\tAYAAAA\tAUNAAA\tAAAAxx\n3809\t9309\t1\t1\t9\t9\t9\t809\t1809\t3809\t3809\t18\t19\tNQAAAA\tBUNAAA\tHHHHxx\n3979\t9310\t1\t3\t9\t19\t79\t979\t1979\t3979\t3979\t158\t159\tBXAAAA\tCUNAAA\tOOOOxx\n8359\t9311\t1\t3\t9\t19\t59\t359\t359\t3359\t8359\t118\t119\tNJAAAA\tDUNAAA\tVVVVxx\n3479\t9312\t1\t3\t9\t19\t79\t479\t1479\t3479\t3479\t158\t159\tVDAAAA\tEUNAAA\tAAAAxx\n4895\t9313\t1\t3\t5\t15\t95\t895\t895\t4895\t4895\t190\t191\tHGAAAA\tFUNAAA\tHHHHxx\n6059\t9314\t1\t3\t9\t19\t59\t59\t59\t1059\t6059\t118\t119\tBZAAAA\tGUNAAA\tOOOOxx\n9560\t9315\t0\t0\t0\t0\t60\t560\t1560\t4560\t9560\t120\t121\tSDAAAA\tHUNAAA\tVVVVxx\n6756\t9316\t0\t0\t6\t16\t56\t756\t756\t1756\t6756\t112\t113\tWZAAAA\tIUNAAA\tAAAAxx\n7504\t9317\t0\t0\t4\t4\t4\t504\t1504\t2504\t7504\t8\t9\tQCAAAA\tJUNAAA\tHHHHxx\n6762\t9318\t0\t2\t2\t2\t62\t762\t762\t1762\t6762\t124\t125\tCAAAAA\tKUNAAA\tOOOOxx\n5304\t9319\t0\t0\t4\t4\t4\t304\t1304\t304\t5304\t8\t9\tAWAAAA\tLUNAAA\tVVVVxx\n9533\t9320\t1\t1\t3\t13\t33\t533\t1533\t4533\t9533\t66\t67\tRCAAAA\tMUNAAA\tAAAAxx\n6649\t9321\t1\t1\t9\t9\t49\t649\t649\t1649\t6649\t98\t99\tTVAAAA\tNUNAAA\tHHHHxx\n38\t9322\t0\t2\t8\t18\t38\t38\t38\t38\t38\t76\t77\tMBAAAA\tOUNAAA\tOOOOxx\n5713\t9323\t1\t1\t3\t13\t13\t713\t1713\t713\t5713\t26\t27\tTLAAAA\tPUNAAA\tVVVVxx\n3000\t9324\t0\t0\t0\t0\t0\t0\t1000\t3000\t3000\t0\t1\tKLAAAA\tQUNAAA\tAAAAxx\n3738\t9325\t0\t2\t8\t18\t38\t738\t1738\t3738\t3738\t76\t77\tUNAAAA\tRUNAAA\tHHHHxx\n3327\t9326\t1\t3\t7\t7\t27\t327\t1327\t3327\t3327\t54\t55\tZXAAAA\tSUNAAA\tOOOOxx\n3922\t9327\t0\t2\t2\t2\t22\t922\t1922\t3922\t3922\t44\t45\tWUAAAA\tTUNAAA\tVVVVxx\n9245\t9328\t1\t1\t5\t5\t45\t245\t1245\t4245\t9245\t90\t91\tPRAAAA\tUUNAAA\tAAAAxx\n2172\t9329\t0\t0\t2\t12\t72\t172\t172\t2172\t2172\t144\t145\tOFAAAA\tVUNAAA\tHHHHxx\n7128\t9330\t0\t0\t8\t8\t28\t128\t1128\t2128\t7128\t56\t57\tEOAAAA\tWUNAAA\tOOOOxx\n1195\t9331\t1\t3\t5\t15\t95\t195\t1195\t1195\t1195\t190\t191\tZTAAAA\tXUNAAA\tVVVVxx\n8445\t9332\t1\t1\t5\t5\t45\t445\t445\t3445\t8445\t90\t91\tVMAAAA\tYUNAAA\tAAAAxx\n8638\t9333\t0\t2\t8\t18\t38\t638\t638\t3638\t8638\t76\t77\tGUAAAA\tZUNAAA\tHHHHxx\n1249\t9334\t1\t1\t9\t9\t49\t249\t1249\t1249\t1249\t98\t99\tBWAAAA\tAVNAAA\tOOOOxx\n8659\t9335\t1\t3\t9\t19\t59\t659\t659\t3659\t8659\t118\t119\tBVAAAA\tBVNAAA\tVVVVxx\n3556\t9336\t0\t0\t6\t16\t56\t556\t1556\t3556\t3556\t112\t113\tUGAAAA\tCVNAAA\tAAAAxx\n3347\t9337\t1\t3\t7\t7\t47\t347\t1347\t3347\t3347\t94\t95\tTYAAAA\tDVNAAA\tHHHHxx\n3260\t9338\t0\t0\t0\t0\t60\t260\t1260\t3260\t3260\t120\t121\tKVAAAA\tEVNAAA\tOOOOxx\n5139\t9339\t1\t3\t9\t19\t39\t139\t1139\t139\t5139\t78\t79\tRPAAAA\tFVNAAA\tVVVVxx\n9991\t9340\t1\t3\t1\t11\t91\t991\t1991\t4991\t9991\t182\t183\tHUAAAA\tGVNAAA\tAAAAxx\n5499\t9341\t1\t3\t9\t19\t99\t499\t1499\t499\t5499\t198\t199\tNDAAAA\tHVNAAA\tHHHHxx\n8082\t9342\t0\t2\t2\t2\t82\t82\t82\t3082\t8082\t164\t165\tWYAAAA\tIVNAAA\tOOOOxx\n1640\t9343\t0\t0\t0\t0\t40\t640\t1640\t1640\t1640\t80\t81\tCLAAAA\tJVNAAA\tVVVVxx\n8726\t9344\t0\t2\t6\t6\t26\t726\t726\t3726\t8726\t52\t53\tQXAAAA\tKVNAAA\tAAAAxx\n2339\t9345\t1\t3\t9\t19\t39\t339\t339\t2339\t2339\t78\t79\tZLAAAA\tLVNAAA\tHHHHxx\n2601\t9346\t1\t1\t1\t1\t1\t601\t601\t2601\t2601\t2\t3\tBWAAAA\tMVNAAA\tOOOOxx\n9940\t9347\t0\t0\t0\t0\t40\t940\t1940\t4940\t9940\t80\t81\tISAAAA\tNVNAAA\tVVVVxx\n4185\t9348\t1\t1\t5\t5\t85\t185\t185\t4185\t4185\t170\t171\tZEAAAA\tOVNAAA\tAAAAxx\n9546\t9349\t0\t2\t6\t6\t46\t546\t1546\t4546\t9546\t92\t93\tEDAAAA\tPVNAAA\tHHHHxx\n5218\t9350\t0\t2\t8\t18\t18\t218\t1218\t218\t5218\t36\t37\tSSAAAA\tQVNAAA\tOOOOxx\n4374\t9351\t0\t2\t4\t14\t74\t374\t374\t4374\t4374\t148\t149\tGMAAAA\tRVNAAA\tVVVVxx\n288\t9352\t0\t0\t8\t8\t88\t288\t288\t288\t288\t176\t177\tCLAAAA\tSVNAAA\tAAAAxx\n7445\t9353\t1\t1\t5\t5\t45\t445\t1445\t2445\t7445\t90\t91\tJAAAAA\tTVNAAA\tHHHHxx\n1710\t9354\t0\t2\t0\t10\t10\t710\t1710\t1710\t1710\t20\t21\tUNAAAA\tUVNAAA\tOOOOxx\n6409\t9355\t1\t1\t9\t9\t9\t409\t409\t1409\t6409\t18\t19\tNMAAAA\tVVNAAA\tVVVVxx\n7982\t9356\t0\t2\t2\t2\t82\t982\t1982\t2982\t7982\t164\t165\tAVAAAA\tWVNAAA\tAAAAxx\n4950\t9357\t0\t2\t0\t10\t50\t950\t950\t4950\t4950\t100\t101\tKIAAAA\tXVNAAA\tHHHHxx\n9242\t9358\t0\t2\t2\t2\t42\t242\t1242\t4242\t9242\t84\t85\tMRAAAA\tYVNAAA\tOOOOxx\n3272\t9359\t0\t0\t2\t12\t72\t272\t1272\t3272\t3272\t144\t145\tWVAAAA\tZVNAAA\tVVVVxx\n739\t9360\t1\t3\t9\t19\t39\t739\t739\t739\t739\t78\t79\tLCAAAA\tAWNAAA\tAAAAxx\n5526\t9361\t0\t2\t6\t6\t26\t526\t1526\t526\t5526\t52\t53\tOEAAAA\tBWNAAA\tHHHHxx\n8189\t9362\t1\t1\t9\t9\t89\t189\t189\t3189\t8189\t178\t179\tZCAAAA\tCWNAAA\tOOOOxx\n9106\t9363\t0\t2\t6\t6\t6\t106\t1106\t4106\t9106\t12\t13\tGMAAAA\tDWNAAA\tVVVVxx\n9775\t9364\t1\t3\t5\t15\t75\t775\t1775\t4775\t9775\t150\t151\tZLAAAA\tEWNAAA\tAAAAxx\n4643\t9365\t1\t3\t3\t3\t43\t643\t643\t4643\t4643\t86\t87\tPWAAAA\tFWNAAA\tHHHHxx\n8396\t9366\t0\t0\t6\t16\t96\t396\t396\t3396\t8396\t192\t193\tYKAAAA\tGWNAAA\tOOOOxx\n3255\t9367\t1\t3\t5\t15\t55\t255\t1255\t3255\t3255\t110\t111\tFVAAAA\tHWNAAA\tVVVVxx\n301\t9368\t1\t1\t1\t1\t1\t301\t301\t301\t301\t2\t3\tPLAAAA\tIWNAAA\tAAAAxx\n6014\t9369\t0\t2\t4\t14\t14\t14\t14\t1014\t6014\t28\t29\tIXAAAA\tJWNAAA\tHHHHxx\n6046\t9370\t0\t2\t6\t6\t46\t46\t46\t1046\t6046\t92\t93\tOYAAAA\tKWNAAA\tOOOOxx\n984\t9371\t0\t0\t4\t4\t84\t984\t984\t984\t984\t168\t169\tWLAAAA\tLWNAAA\tVVVVxx\n2420\t9372\t0\t0\t0\t0\t20\t420\t420\t2420\t2420\t40\t41\tCPAAAA\tMWNAAA\tAAAAxx\n2922\t9373\t0\t2\t2\t2\t22\t922\t922\t2922\t2922\t44\t45\tKIAAAA\tNWNAAA\tHHHHxx\n2317\t9374\t1\t1\t7\t17\t17\t317\t317\t2317\t2317\t34\t35\tDLAAAA\tOWNAAA\tOOOOxx\n7332\t9375\t0\t0\t2\t12\t32\t332\t1332\t2332\t7332\t64\t65\tAWAAAA\tPWNAAA\tVVVVxx\n6451\t9376\t1\t3\t1\t11\t51\t451\t451\t1451\t6451\t102\t103\tDOAAAA\tQWNAAA\tAAAAxx\n2589\t9377\t1\t1\t9\t9\t89\t589\t589\t2589\t2589\t178\t179\tPVAAAA\tRWNAAA\tHHHHxx\n4333\t9378\t1\t1\t3\t13\t33\t333\t333\t4333\t4333\t66\t67\tRKAAAA\tSWNAAA\tOOOOxx\n8650\t9379\t0\t2\t0\t10\t50\t650\t650\t3650\t8650\t100\t101\tSUAAAA\tTWNAAA\tVVVVxx\n6856\t9380\t0\t0\t6\t16\t56\t856\t856\t1856\t6856\t112\t113\tSDAAAA\tUWNAAA\tAAAAxx\n4194\t9381\t0\t2\t4\t14\t94\t194\t194\t4194\t4194\t188\t189\tIFAAAA\tVWNAAA\tHHHHxx\n6246\t9382\t0\t2\t6\t6\t46\t246\t246\t1246\t6246\t92\t93\tGGAAAA\tWWNAAA\tOOOOxx\n4371\t9383\t1\t3\t1\t11\t71\t371\t371\t4371\t4371\t142\t143\tDMAAAA\tXWNAAA\tVVVVxx\n1388\t9384\t0\t0\t8\t8\t88\t388\t1388\t1388\t1388\t176\t177\tKBAAAA\tYWNAAA\tAAAAxx\n1056\t9385\t0\t0\t6\t16\t56\t56\t1056\t1056\t1056\t112\t113\tQOAAAA\tZWNAAA\tHHHHxx\n6041\t9386\t1\t1\t1\t1\t41\t41\t41\t1041\t6041\t82\t83\tJYAAAA\tAXNAAA\tOOOOxx\n6153\t9387\t1\t1\t3\t13\t53\t153\t153\t1153\t6153\t106\t107\tRCAAAA\tBXNAAA\tVVVVxx\n8450\t9388\t0\t2\t0\t10\t50\t450\t450\t3450\t8450\t100\t101\tANAAAA\tCXNAAA\tAAAAxx\n3469\t9389\t1\t1\t9\t9\t69\t469\t1469\t3469\t3469\t138\t139\tLDAAAA\tDXNAAA\tHHHHxx\n5226\t9390\t0\t2\t6\t6\t26\t226\t1226\t226\t5226\t52\t53\tATAAAA\tEXNAAA\tOOOOxx\n8112\t9391\t0\t0\t2\t12\t12\t112\t112\t3112\t8112\t24\t25\tAAAAAA\tFXNAAA\tVVVVxx\n647\t9392\t1\t3\t7\t7\t47\t647\t647\t647\t647\t94\t95\tXYAAAA\tGXNAAA\tAAAAxx\n2567\t9393\t1\t3\t7\t7\t67\t567\t567\t2567\t2567\t134\t135\tTUAAAA\tHXNAAA\tHHHHxx\n9064\t9394\t0\t0\t4\t4\t64\t64\t1064\t4064\t9064\t128\t129\tQKAAAA\tIXNAAA\tOOOOxx\n5161\t9395\t1\t1\t1\t1\t61\t161\t1161\t161\t5161\t122\t123\tNQAAAA\tJXNAAA\tVVVVxx\n5260\t9396\t0\t0\t0\t0\t60\t260\t1260\t260\t5260\t120\t121\tIUAAAA\tKXNAAA\tAAAAxx\n8988\t9397\t0\t0\t8\t8\t88\t988\t988\t3988\t8988\t176\t177\tSHAAAA\tLXNAAA\tHHHHxx\n9678\t9398\t0\t2\t8\t18\t78\t678\t1678\t4678\t9678\t156\t157\tGIAAAA\tMXNAAA\tOOOOxx\n6853\t9399\t1\t1\t3\t13\t53\t853\t853\t1853\t6853\t106\t107\tPDAAAA\tNXNAAA\tVVVVxx\n5294\t9400\t0\t2\t4\t14\t94\t294\t1294\t294\t5294\t188\t189\tQVAAAA\tOXNAAA\tAAAAxx\n9864\t9401\t0\t0\t4\t4\t64\t864\t1864\t4864\t9864\t128\t129\tKPAAAA\tPXNAAA\tHHHHxx\n8702\t9402\t0\t2\t2\t2\t2\t702\t702\t3702\t8702\t4\t5\tSWAAAA\tQXNAAA\tOOOOxx\n1132\t9403\t0\t0\t2\t12\t32\t132\t1132\t1132\t1132\t64\t65\tORAAAA\tRXNAAA\tVVVVxx\n1524\t9404\t0\t0\t4\t4\t24\t524\t1524\t1524\t1524\t48\t49\tQGAAAA\tSXNAAA\tAAAAxx\n4560\t9405\t0\t0\t0\t0\t60\t560\t560\t4560\t4560\t120\t121\tKTAAAA\tTXNAAA\tHHHHxx\n2137\t9406\t1\t1\t7\t17\t37\t137\t137\t2137\t2137\t74\t75\tFEAAAA\tUXNAAA\tOOOOxx\n3283\t9407\t1\t3\t3\t3\t83\t283\t1283\t3283\t3283\t166\t167\tHWAAAA\tVXNAAA\tVVVVxx\n3377\t9408\t1\t1\t7\t17\t77\t377\t1377\t3377\t3377\t154\t155\tXZAAAA\tWXNAAA\tAAAAxx\n2267\t9409\t1\t3\t7\t7\t67\t267\t267\t2267\t2267\t134\t135\tFJAAAA\tXXNAAA\tHHHHxx\n8987\t9410\t1\t3\t7\t7\t87\t987\t987\t3987\t8987\t174\t175\tRHAAAA\tYXNAAA\tOOOOxx\n6709\t9411\t1\t1\t9\t9\t9\t709\t709\t1709\t6709\t18\t19\tBYAAAA\tZXNAAA\tVVVVxx\n8059\t9412\t1\t3\t9\t19\t59\t59\t59\t3059\t8059\t118\t119\tZXAAAA\tAYNAAA\tAAAAxx\n3402\t9413\t0\t2\t2\t2\t2\t402\t1402\t3402\t3402\t4\t5\tWAAAAA\tBYNAAA\tHHHHxx\n6443\t9414\t1\t3\t3\t3\t43\t443\t443\t1443\t6443\t86\t87\tVNAAAA\tCYNAAA\tOOOOxx\n8858\t9415\t0\t2\t8\t18\t58\t858\t858\t3858\t8858\t116\t117\tSCAAAA\tDYNAAA\tVVVVxx\n3974\t9416\t0\t2\t4\t14\t74\t974\t1974\t3974\t3974\t148\t149\tWWAAAA\tEYNAAA\tAAAAxx\n3521\t9417\t1\t1\t1\t1\t21\t521\t1521\t3521\t3521\t42\t43\tLFAAAA\tFYNAAA\tHHHHxx\n9509\t9418\t1\t1\t9\t9\t9\t509\t1509\t4509\t9509\t18\t19\tTBAAAA\tGYNAAA\tOOOOxx\n5442\t9419\t0\t2\t2\t2\t42\t442\t1442\t442\t5442\t84\t85\tIBAAAA\tHYNAAA\tVVVVxx\n8968\t9420\t0\t0\t8\t8\t68\t968\t968\t3968\t8968\t136\t137\tYGAAAA\tIYNAAA\tAAAAxx\n333\t9421\t1\t1\t3\t13\t33\t333\t333\t333\t333\t66\t67\tVMAAAA\tJYNAAA\tHHHHxx\n952\t9422\t0\t0\t2\t12\t52\t952\t952\t952\t952\t104\t105\tQKAAAA\tKYNAAA\tOOOOxx\n7482\t9423\t0\t2\t2\t2\t82\t482\t1482\t2482\t7482\t164\t165\tUBAAAA\tLYNAAA\tVVVVxx\n1486\t9424\t0\t2\t6\t6\t86\t486\t1486\t1486\t1486\t172\t173\tEFAAAA\tMYNAAA\tAAAAxx\n1815\t9425\t1\t3\t5\t15\t15\t815\t1815\t1815\t1815\t30\t31\tVRAAAA\tNYNAAA\tHHHHxx\n7937\t9426\t1\t1\t7\t17\t37\t937\t1937\t2937\t7937\t74\t75\tHTAAAA\tOYNAAA\tOOOOxx\n1436\t9427\t0\t0\t6\t16\t36\t436\t1436\t1436\t1436\t72\t73\tGDAAAA\tPYNAAA\tVVVVxx\n3470\t9428\t0\t2\t0\t10\t70\t470\t1470\t3470\t3470\t140\t141\tMDAAAA\tQYNAAA\tAAAAxx\n8195\t9429\t1\t3\t5\t15\t95\t195\t195\t3195\t8195\t190\t191\tFDAAAA\tRYNAAA\tHHHHxx\n6906\t9430\t0\t2\t6\t6\t6\t906\t906\t1906\t6906\t12\t13\tQFAAAA\tSYNAAA\tOOOOxx\n2539\t9431\t1\t3\t9\t19\t39\t539\t539\t2539\t2539\t78\t79\tRTAAAA\tTYNAAA\tVVVVxx\n5988\t9432\t0\t0\t8\t8\t88\t988\t1988\t988\t5988\t176\t177\tIWAAAA\tUYNAAA\tAAAAxx\n8908\t9433\t0\t0\t8\t8\t8\t908\t908\t3908\t8908\t16\t17\tQEAAAA\tVYNAAA\tHHHHxx\n2319\t9434\t1\t3\t9\t19\t19\t319\t319\t2319\t2319\t38\t39\tFLAAAA\tWYNAAA\tOOOOxx\n3263\t9435\t1\t3\t3\t3\t63\t263\t1263\t3263\t3263\t126\t127\tNVAAAA\tXYNAAA\tVVVVxx\n4039\t9436\t1\t3\t9\t19\t39\t39\t39\t4039\t4039\t78\t79\tJZAAAA\tYYNAAA\tAAAAxx\n6373\t9437\t1\t1\t3\t13\t73\t373\t373\t1373\t6373\t146\t147\tDLAAAA\tZYNAAA\tHHHHxx\n1168\t9438\t0\t0\t8\t8\t68\t168\t1168\t1168\t1168\t136\t137\tYSAAAA\tAZNAAA\tOOOOxx\n8338\t9439\t0\t2\t8\t18\t38\t338\t338\t3338\t8338\t76\t77\tSIAAAA\tBZNAAA\tVVVVxx\n1172\t9440\t0\t0\t2\t12\t72\t172\t1172\t1172\t1172\t144\t145\tCTAAAA\tCZNAAA\tAAAAxx\n200\t9441\t0\t0\t0\t0\t0\t200\t200\t200\t200\t0\t1\tSHAAAA\tDZNAAA\tHHHHxx\n6355\t9442\t1\t3\t5\t15\t55\t355\t355\t1355\t6355\t110\t111\tLKAAAA\tEZNAAA\tOOOOxx\n7768\t9443\t0\t0\t8\t8\t68\t768\t1768\t2768\t7768\t136\t137\tUMAAAA\tFZNAAA\tVVVVxx\n25\t9444\t1\t1\t5\t5\t25\t25\t25\t25\t25\t50\t51\tZAAAAA\tGZNAAA\tAAAAxx\n7144\t9445\t0\t0\t4\t4\t44\t144\t1144\t2144\t7144\t88\t89\tUOAAAA\tHZNAAA\tHHHHxx\n8671\t9446\t1\t3\t1\t11\t71\t671\t671\t3671\t8671\t142\t143\tNVAAAA\tIZNAAA\tOOOOxx\n9163\t9447\t1\t3\t3\t3\t63\t163\t1163\t4163\t9163\t126\t127\tLOAAAA\tJZNAAA\tVVVVxx\n8889\t9448\t1\t1\t9\t9\t89\t889\t889\t3889\t8889\t178\t179\tXDAAAA\tKZNAAA\tAAAAxx\n5950\t9449\t0\t2\t0\t10\t50\t950\t1950\t950\t5950\t100\t101\tWUAAAA\tLZNAAA\tHHHHxx\n6163\t9450\t1\t3\t3\t3\t63\t163\t163\t1163\t6163\t126\t127\tBDAAAA\tMZNAAA\tOOOOxx\n8119\t9451\t1\t3\t9\t19\t19\t119\t119\t3119\t8119\t38\t39\tHAAAAA\tNZNAAA\tVVVVxx\n1416\t9452\t0\t0\t6\t16\t16\t416\t1416\t1416\t1416\t32\t33\tMCAAAA\tOZNAAA\tAAAAxx\n4132\t9453\t0\t0\t2\t12\t32\t132\t132\t4132\t4132\t64\t65\tYCAAAA\tPZNAAA\tHHHHxx\n2294\t9454\t0\t2\t4\t14\t94\t294\t294\t2294\t2294\t188\t189\tGKAAAA\tQZNAAA\tOOOOxx\n9094\t9455\t0\t2\t4\t14\t94\t94\t1094\t4094\t9094\t188\t189\tULAAAA\tRZNAAA\tVVVVxx\n4168\t9456\t0\t0\t8\t8\t68\t168\t168\t4168\t4168\t136\t137\tIEAAAA\tSZNAAA\tAAAAxx\n9108\t9457\t0\t0\t8\t8\t8\t108\t1108\t4108\t9108\t16\t17\tIMAAAA\tTZNAAA\tHHHHxx\n5706\t9458\t0\t2\t6\t6\t6\t706\t1706\t706\t5706\t12\t13\tMLAAAA\tUZNAAA\tOOOOxx\n2231\t9459\t1\t3\t1\t11\t31\t231\t231\t2231\t2231\t62\t63\tVHAAAA\tVZNAAA\tVVVVxx\n2173\t9460\t1\t1\t3\t13\t73\t173\t173\t2173\t2173\t146\t147\tPFAAAA\tWZNAAA\tAAAAxx\n90\t9461\t0\t2\t0\t10\t90\t90\t90\t90\t90\t180\t181\tMDAAAA\tXZNAAA\tHHHHxx\n9996\t9462\t0\t0\t6\t16\t96\t996\t1996\t4996\t9996\t192\t193\tMUAAAA\tYZNAAA\tOOOOxx\n330\t9463\t0\t2\t0\t10\t30\t330\t330\t330\t330\t60\t61\tSMAAAA\tZZNAAA\tVVVVxx\n2052\t9464\t0\t0\t2\t12\t52\t52\t52\t2052\t2052\t104\t105\tYAAAAA\tAAOAAA\tAAAAxx\n1093\t9465\t1\t1\t3\t13\t93\t93\t1093\t1093\t1093\t186\t187\tBQAAAA\tBAOAAA\tHHHHxx\n5817\t9466\t1\t1\t7\t17\t17\t817\t1817\t817\t5817\t34\t35\tTPAAAA\tCAOAAA\tOOOOxx\n1559\t9467\t1\t3\t9\t19\t59\t559\t1559\t1559\t1559\t118\t119\tZHAAAA\tDAOAAA\tVVVVxx\n8405\t9468\t1\t1\t5\t5\t5\t405\t405\t3405\t8405\t10\t11\tHLAAAA\tEAOAAA\tAAAAxx\n9962\t9469\t0\t2\t2\t2\t62\t962\t1962\t4962\t9962\t124\t125\tETAAAA\tFAOAAA\tHHHHxx\n9461\t9470\t1\t1\t1\t1\t61\t461\t1461\t4461\t9461\t122\t123\tXZAAAA\tGAOAAA\tOOOOxx\n3028\t9471\t0\t0\t8\t8\t28\t28\t1028\t3028\t3028\t56\t57\tMMAAAA\tHAOAAA\tVVVVxx\n6814\t9472\t0\t2\t4\t14\t14\t814\t814\t1814\t6814\t28\t29\tCCAAAA\tIAOAAA\tAAAAxx\n9587\t9473\t1\t3\t7\t7\t87\t587\t1587\t4587\t9587\t174\t175\tTEAAAA\tJAOAAA\tHHHHxx\n6863\t9474\t1\t3\t3\t3\t63\t863\t863\t1863\t6863\t126\t127\tZDAAAA\tKAOAAA\tOOOOxx\n4963\t9475\t1\t3\t3\t3\t63\t963\t963\t4963\t4963\t126\t127\tXIAAAA\tLAOAAA\tVVVVxx\n7811\t9476\t1\t3\t1\t11\t11\t811\t1811\t2811\t7811\t22\t23\tLOAAAA\tMAOAAA\tAAAAxx\n7608\t9477\t0\t0\t8\t8\t8\t608\t1608\t2608\t7608\t16\t17\tQGAAAA\tNAOAAA\tHHHHxx\n5321\t9478\t1\t1\t1\t1\t21\t321\t1321\t321\t5321\t42\t43\tRWAAAA\tOAOAAA\tOOOOxx\n9971\t9479\t1\t3\t1\t11\t71\t971\t1971\t4971\t9971\t142\t143\tNTAAAA\tPAOAAA\tVVVVxx\n6161\t9480\t1\t1\t1\t1\t61\t161\t161\t1161\t6161\t122\t123\tZCAAAA\tQAOAAA\tAAAAxx\n2181\t9481\t1\t1\t1\t1\t81\t181\t181\t2181\t2181\t162\t163\tXFAAAA\tRAOAAA\tHHHHxx\n3828\t9482\t0\t0\t8\t8\t28\t828\t1828\t3828\t3828\t56\t57\tGRAAAA\tSAOAAA\tOOOOxx\n348\t9483\t0\t0\t8\t8\t48\t348\t348\t348\t348\t96\t97\tKNAAAA\tTAOAAA\tVVVVxx\n5459\t9484\t1\t3\t9\t19\t59\t459\t1459\t459\t5459\t118\t119\tZBAAAA\tUAOAAA\tAAAAxx\n9406\t9485\t0\t2\t6\t6\t6\t406\t1406\t4406\t9406\t12\t13\tUXAAAA\tVAOAAA\tHHHHxx\n9852\t9486\t0\t0\t2\t12\t52\t852\t1852\t4852\t9852\t104\t105\tYOAAAA\tWAOAAA\tOOOOxx\n3095\t9487\t1\t3\t5\t15\t95\t95\t1095\t3095\t3095\t190\t191\tBPAAAA\tXAOAAA\tVVVVxx\n5597\t9488\t1\t1\t7\t17\t97\t597\t1597\t597\t5597\t194\t195\tHHAAAA\tYAOAAA\tAAAAxx\n8841\t9489\t1\t1\t1\t1\t41\t841\t841\t3841\t8841\t82\t83\tBCAAAA\tZAOAAA\tHHHHxx\n3536\t9490\t0\t0\t6\t16\t36\t536\t1536\t3536\t3536\t72\t73\tAGAAAA\tABOAAA\tOOOOxx\n4009\t9491\t1\t1\t9\t9\t9\t9\t9\t4009\t4009\t18\t19\tFYAAAA\tBBOAAA\tVVVVxx\n7366\t9492\t0\t2\t6\t6\t66\t366\t1366\t2366\t7366\t132\t133\tIXAAAA\tCBOAAA\tAAAAxx\n7327\t9493\t1\t3\t7\t7\t27\t327\t1327\t2327\t7327\t54\t55\tVVAAAA\tDBOAAA\tHHHHxx\n1613\t9494\t1\t1\t3\t13\t13\t613\t1613\t1613\t1613\t26\t27\tBKAAAA\tEBOAAA\tOOOOxx\n8619\t9495\t1\t3\t9\t19\t19\t619\t619\t3619\t8619\t38\t39\tNTAAAA\tFBOAAA\tVVVVxx\n4880\t9496\t0\t0\t0\t0\t80\t880\t880\t4880\t4880\t160\t161\tSFAAAA\tGBOAAA\tAAAAxx\n1552\t9497\t0\t0\t2\t12\t52\t552\t1552\t1552\t1552\t104\t105\tSHAAAA\tHBOAAA\tHHHHxx\n7636\t9498\t0\t0\t6\t16\t36\t636\t1636\t2636\t7636\t72\t73\tSHAAAA\tIBOAAA\tOOOOxx\n8397\t9499\t1\t1\t7\t17\t97\t397\t397\t3397\t8397\t194\t195\tZKAAAA\tJBOAAA\tVVVVxx\n6224\t9500\t0\t0\t4\t4\t24\t224\t224\t1224\t6224\t48\t49\tKFAAAA\tKBOAAA\tAAAAxx\n9102\t9501\t0\t2\t2\t2\t2\t102\t1102\t4102\t9102\t4\t5\tCMAAAA\tLBOAAA\tHHHHxx\n7906\t9502\t0\t2\t6\t6\t6\t906\t1906\t2906\t7906\t12\t13\tCSAAAA\tMBOAAA\tOOOOxx\n9467\t9503\t1\t3\t7\t7\t67\t467\t1467\t4467\t9467\t134\t135\tDAAAAA\tNBOAAA\tVVVVxx\n828\t9504\t0\t0\t8\t8\t28\t828\t828\t828\t828\t56\t57\tWFAAAA\tOBOAAA\tAAAAxx\n9585\t9505\t1\t1\t5\t5\t85\t585\t1585\t4585\t9585\t170\t171\tREAAAA\tPBOAAA\tHHHHxx\n925\t9506\t1\t1\t5\t5\t25\t925\t925\t925\t925\t50\t51\tPJAAAA\tQBOAAA\tOOOOxx\n7375\t9507\t1\t3\t5\t15\t75\t375\t1375\t2375\t7375\t150\t151\tRXAAAA\tRBOAAA\tVVVVxx\n4027\t9508\t1\t3\t7\t7\t27\t27\t27\t4027\t4027\t54\t55\tXYAAAA\tSBOAAA\tAAAAxx\n766\t9509\t0\t2\t6\t6\t66\t766\t766\t766\t766\t132\t133\tMDAAAA\tTBOAAA\tHHHHxx\n5633\t9510\t1\t1\t3\t13\t33\t633\t1633\t633\t5633\t66\t67\tRIAAAA\tUBOAAA\tOOOOxx\n5648\t9511\t0\t0\t8\t8\t48\t648\t1648\t648\t5648\t96\t97\tGJAAAA\tVBOAAA\tVVVVxx\n148\t9512\t0\t0\t8\t8\t48\t148\t148\t148\t148\t96\t97\tSFAAAA\tWBOAAA\tAAAAxx\n2072\t9513\t0\t0\t2\t12\t72\t72\t72\t2072\t2072\t144\t145\tSBAAAA\tXBOAAA\tHHHHxx\n431\t9514\t1\t3\t1\t11\t31\t431\t431\t431\t431\t62\t63\tPQAAAA\tYBOAAA\tOOOOxx\n1711\t9515\t1\t3\t1\t11\t11\t711\t1711\t1711\t1711\t22\t23\tVNAAAA\tZBOAAA\tVVVVxx\n9378\t9516\t0\t2\t8\t18\t78\t378\t1378\t4378\t9378\t156\t157\tSWAAAA\tACOAAA\tAAAAxx\n6776\t9517\t0\t0\t6\t16\t76\t776\t776\t1776\t6776\t152\t153\tQAAAAA\tBCOAAA\tHHHHxx\n6842\t9518\t0\t2\t2\t2\t42\t842\t842\t1842\t6842\t84\t85\tEDAAAA\tCCOAAA\tOOOOxx\n2656\t9519\t0\t0\t6\t16\t56\t656\t656\t2656\t2656\t112\t113\tEYAAAA\tDCOAAA\tVVVVxx\n3116\t9520\t0\t0\t6\t16\t16\t116\t1116\t3116\t3116\t32\t33\tWPAAAA\tECOAAA\tAAAAxx\n7904\t9521\t0\t0\t4\t4\t4\t904\t1904\t2904\t7904\t8\t9\tASAAAA\tFCOAAA\tHHHHxx\n3529\t9522\t1\t1\t9\t9\t29\t529\t1529\t3529\t3529\t58\t59\tTFAAAA\tGCOAAA\tOOOOxx\n3240\t9523\t0\t0\t0\t0\t40\t240\t1240\t3240\t3240\t80\t81\tQUAAAA\tHCOAAA\tVVVVxx\n5801\t9524\t1\t1\t1\t1\t1\t801\t1801\t801\t5801\t2\t3\tDPAAAA\tICOAAA\tAAAAxx\n4090\t9525\t0\t2\t0\t10\t90\t90\t90\t4090\t4090\t180\t181\tIBAAAA\tJCOAAA\tHHHHxx\n7687\t9526\t1\t3\t7\t7\t87\t687\t1687\t2687\t7687\t174\t175\tRJAAAA\tKCOAAA\tOOOOxx\n9711\t9527\t1\t3\t1\t11\t11\t711\t1711\t4711\t9711\t22\t23\tNJAAAA\tLCOAAA\tVVVVxx\n4760\t9528\t0\t0\t0\t0\t60\t760\t760\t4760\t4760\t120\t121\tCBAAAA\tMCOAAA\tAAAAxx\n5524\t9529\t0\t0\t4\t4\t24\t524\t1524\t524\t5524\t48\t49\tMEAAAA\tNCOAAA\tHHHHxx\n2251\t9530\t1\t3\t1\t11\t51\t251\t251\t2251\t2251\t102\t103\tPIAAAA\tOCOAAA\tOOOOxx\n1511\t9531\t1\t3\t1\t11\t11\t511\t1511\t1511\t1511\t22\t23\tDGAAAA\tPCOAAA\tVVVVxx\n5991\t9532\t1\t3\t1\t11\t91\t991\t1991\t991\t5991\t182\t183\tLWAAAA\tQCOAAA\tAAAAxx\n7808\t9533\t0\t0\t8\t8\t8\t808\t1808\t2808\t7808\t16\t17\tIOAAAA\tRCOAAA\tHHHHxx\n8708\t9534\t0\t0\t8\t8\t8\t708\t708\t3708\t8708\t16\t17\tYWAAAA\tSCOAAA\tOOOOxx\n8939\t9535\t1\t3\t9\t19\t39\t939\t939\t3939\t8939\t78\t79\tVFAAAA\tTCOAAA\tVVVVxx\n4295\t9536\t1\t3\t5\t15\t95\t295\t295\t4295\t4295\t190\t191\tFJAAAA\tUCOAAA\tAAAAxx\n5905\t9537\t1\t1\t5\t5\t5\t905\t1905\t905\t5905\t10\t11\tDTAAAA\tVCOAAA\tHHHHxx\n2649\t9538\t1\t1\t9\t9\t49\t649\t649\t2649\t2649\t98\t99\tXXAAAA\tWCOAAA\tOOOOxx\n2347\t9539\t1\t3\t7\t7\t47\t347\t347\t2347\t2347\t94\t95\tHMAAAA\tXCOAAA\tVVVVxx\n6339\t9540\t1\t3\t9\t19\t39\t339\t339\t1339\t6339\t78\t79\tVJAAAA\tYCOAAA\tAAAAxx\n292\t9541\t0\t0\t2\t12\t92\t292\t292\t292\t292\t184\t185\tGLAAAA\tZCOAAA\tHHHHxx\n9314\t9542\t0\t2\t4\t14\t14\t314\t1314\t4314\t9314\t28\t29\tGUAAAA\tADOAAA\tOOOOxx\n6893\t9543\t1\t1\t3\t13\t93\t893\t893\t1893\t6893\t186\t187\tDFAAAA\tBDOAAA\tVVVVxx\n3970\t9544\t0\t2\t0\t10\t70\t970\t1970\t3970\t3970\t140\t141\tSWAAAA\tCDOAAA\tAAAAxx\n1652\t9545\t0\t0\t2\t12\t52\t652\t1652\t1652\t1652\t104\t105\tOLAAAA\tDDOAAA\tHHHHxx\n4326\t9546\t0\t2\t6\t6\t26\t326\t326\t4326\t4326\t52\t53\tKKAAAA\tEDOAAA\tOOOOxx\n7881\t9547\t1\t1\t1\t1\t81\t881\t1881\t2881\t7881\t162\t163\tDRAAAA\tFDOAAA\tVVVVxx\n5291\t9548\t1\t3\t1\t11\t91\t291\t1291\t291\t5291\t182\t183\tNVAAAA\tGDOAAA\tAAAAxx\n957\t9549\t1\t1\t7\t17\t57\t957\t957\t957\t957\t114\t115\tVKAAAA\tHDOAAA\tHHHHxx\n2313\t9550\t1\t1\t3\t13\t13\t313\t313\t2313\t2313\t26\t27\tZKAAAA\tIDOAAA\tOOOOxx\n5463\t9551\t1\t3\t3\t3\t63\t463\t1463\t463\t5463\t126\t127\tDCAAAA\tJDOAAA\tVVVVxx\n1268\t9552\t0\t0\t8\t8\t68\t268\t1268\t1268\t1268\t136\t137\tUWAAAA\tKDOAAA\tAAAAxx\n5028\t9553\t0\t0\t8\t8\t28\t28\t1028\t28\t5028\t56\t57\tKLAAAA\tLDOAAA\tHHHHxx\n656\t9554\t0\t0\t6\t16\t56\t656\t656\t656\t656\t112\t113\tGZAAAA\tMDOAAA\tOOOOxx\n9274\t9555\t0\t2\t4\t14\t74\t274\t1274\t4274\t9274\t148\t149\tSSAAAA\tNDOAAA\tVVVVxx\n8217\t9556\t1\t1\t7\t17\t17\t217\t217\t3217\t8217\t34\t35\tBEAAAA\tODOAAA\tAAAAxx\n2175\t9557\t1\t3\t5\t15\t75\t175\t175\t2175\t2175\t150\t151\tRFAAAA\tPDOAAA\tHHHHxx\n6028\t9558\t0\t0\t8\t8\t28\t28\t28\t1028\t6028\t56\t57\tWXAAAA\tQDOAAA\tOOOOxx\n7584\t9559\t0\t0\t4\t4\t84\t584\t1584\t2584\t7584\t168\t169\tSFAAAA\tRDOAAA\tVVVVxx\n4114\t9560\t0\t2\t4\t14\t14\t114\t114\t4114\t4114\t28\t29\tGCAAAA\tSDOAAA\tAAAAxx\n8894\t9561\t0\t2\t4\t14\t94\t894\t894\t3894\t8894\t188\t189\tCEAAAA\tTDOAAA\tHHHHxx\n781\t9562\t1\t1\t1\t1\t81\t781\t781\t781\t781\t162\t163\tBEAAAA\tUDOAAA\tOOOOxx\n133\t9563\t1\t1\t3\t13\t33\t133\t133\t133\t133\t66\t67\tDFAAAA\tVDOAAA\tVVVVxx\n7572\t9564\t0\t0\t2\t12\t72\t572\t1572\t2572\t7572\t144\t145\tGFAAAA\tWDOAAA\tAAAAxx\n8514\t9565\t0\t2\t4\t14\t14\t514\t514\t3514\t8514\t28\t29\tMPAAAA\tXDOAAA\tHHHHxx\n3352\t9566\t0\t0\t2\t12\t52\t352\t1352\t3352\t3352\t104\t105\tYYAAAA\tYDOAAA\tOOOOxx\n8098\t9567\t0\t2\t8\t18\t98\t98\t98\t3098\t8098\t196\t197\tMZAAAA\tZDOAAA\tVVVVxx\n9116\t9568\t0\t0\t6\t16\t16\t116\t1116\t4116\t9116\t32\t33\tQMAAAA\tAEOAAA\tAAAAxx\n9444\t9569\t0\t0\t4\t4\t44\t444\t1444\t4444\t9444\t88\t89\tGZAAAA\tBEOAAA\tHHHHxx\n2590\t9570\t0\t2\t0\t10\t90\t590\t590\t2590\t2590\t180\t181\tQVAAAA\tCEOAAA\tOOOOxx\n7302\t9571\t0\t2\t2\t2\t2\t302\t1302\t2302\t7302\t4\t5\tWUAAAA\tDEOAAA\tVVVVxx\n7444\t9572\t0\t0\t4\t4\t44\t444\t1444\t2444\t7444\t88\t89\tIAAAAA\tEEOAAA\tAAAAxx\n8748\t9573\t0\t0\t8\t8\t48\t748\t748\t3748\t8748\t96\t97\tMYAAAA\tFEOAAA\tHHHHxx\n7615\t9574\t1\t3\t5\t15\t15\t615\t1615\t2615\t7615\t30\t31\tXGAAAA\tGEOAAA\tOOOOxx\n6090\t9575\t0\t2\t0\t10\t90\t90\t90\t1090\t6090\t180\t181\tGAAAAA\tHEOAAA\tVVVVxx\n1529\t9576\t1\t1\t9\t9\t29\t529\t1529\t1529\t1529\t58\t59\tVGAAAA\tIEOAAA\tAAAAxx\n9398\t9577\t0\t2\t8\t18\t98\t398\t1398\t4398\t9398\t196\t197\tMXAAAA\tJEOAAA\tHHHHxx\n6114\t9578\t0\t2\t4\t14\t14\t114\t114\t1114\t6114\t28\t29\tEBAAAA\tKEOAAA\tOOOOxx\n2736\t9579\t0\t0\t6\t16\t36\t736\t736\t2736\t2736\t72\t73\tGBAAAA\tLEOAAA\tVVVVxx\n468\t9580\t0\t0\t8\t8\t68\t468\t468\t468\t468\t136\t137\tASAAAA\tMEOAAA\tAAAAxx\n1487\t9581\t1\t3\t7\t7\t87\t487\t1487\t1487\t1487\t174\t175\tFFAAAA\tNEOAAA\tHHHHxx\n4784\t9582\t0\t0\t4\t4\t84\t784\t784\t4784\t4784\t168\t169\tACAAAA\tOEOAAA\tOOOOxx\n6731\t9583\t1\t3\t1\t11\t31\t731\t731\t1731\t6731\t62\t63\tXYAAAA\tPEOAAA\tVVVVxx\n3328\t9584\t0\t0\t8\t8\t28\t328\t1328\t3328\t3328\t56\t57\tAYAAAA\tQEOAAA\tAAAAxx\n6891\t9585\t1\t3\t1\t11\t91\t891\t891\t1891\t6891\t182\t183\tBFAAAA\tREOAAA\tHHHHxx\n8039\t9586\t1\t3\t9\t19\t39\t39\t39\t3039\t8039\t78\t79\tFXAAAA\tSEOAAA\tOOOOxx\n4064\t9587\t0\t0\t4\t4\t64\t64\t64\t4064\t4064\t128\t129\tIAAAAA\tTEOAAA\tVVVVxx\n542\t9588\t0\t2\t2\t2\t42\t542\t542\t542\t542\t84\t85\tWUAAAA\tUEOAAA\tAAAAxx\n1039\t9589\t1\t3\t9\t19\t39\t39\t1039\t1039\t1039\t78\t79\tZNAAAA\tVEOAAA\tHHHHxx\n5603\t9590\t1\t3\t3\t3\t3\t603\t1603\t603\t5603\t6\t7\tNHAAAA\tWEOAAA\tOOOOxx\n6641\t9591\t1\t1\t1\t1\t41\t641\t641\t1641\t6641\t82\t83\tLVAAAA\tXEOAAA\tVVVVxx\n6307\t9592\t1\t3\t7\t7\t7\t307\t307\t1307\t6307\t14\t15\tPIAAAA\tYEOAAA\tAAAAxx\n5354\t9593\t0\t2\t4\t14\t54\t354\t1354\t354\t5354\t108\t109\tYXAAAA\tZEOAAA\tHHHHxx\n7878\t9594\t0\t2\t8\t18\t78\t878\t1878\t2878\t7878\t156\t157\tARAAAA\tAFOAAA\tOOOOxx\n6391\t9595\t1\t3\t1\t11\t91\t391\t391\t1391\t6391\t182\t183\tVLAAAA\tBFOAAA\tVVVVxx\n4575\t9596\t1\t3\t5\t15\t75\t575\t575\t4575\t4575\t150\t151\tZTAAAA\tCFOAAA\tAAAAxx\n6644\t9597\t0\t0\t4\t4\t44\t644\t644\t1644\t6644\t88\t89\tOVAAAA\tDFOAAA\tHHHHxx\n5207\t9598\t1\t3\t7\t7\t7\t207\t1207\t207\t5207\t14\t15\tHSAAAA\tEFOAAA\tOOOOxx\n1736\t9599\t0\t0\t6\t16\t36\t736\t1736\t1736\t1736\t72\t73\tUOAAAA\tFFOAAA\tVVVVxx\n3547\t9600\t1\t3\t7\t7\t47\t547\t1547\t3547\t3547\t94\t95\tLGAAAA\tGFOAAA\tAAAAxx\n6647\t9601\t1\t3\t7\t7\t47\t647\t647\t1647\t6647\t94\t95\tRVAAAA\tHFOAAA\tHHHHxx\n4107\t9602\t1\t3\t7\t7\t7\t107\t107\t4107\t4107\t14\t15\tZBAAAA\tIFOAAA\tOOOOxx\n8125\t9603\t1\t1\t5\t5\t25\t125\t125\t3125\t8125\t50\t51\tNAAAAA\tJFOAAA\tVVVVxx\n9223\t9604\t1\t3\t3\t3\t23\t223\t1223\t4223\t9223\t46\t47\tTQAAAA\tKFOAAA\tAAAAxx\n6903\t9605\t1\t3\t3\t3\t3\t903\t903\t1903\t6903\t6\t7\tNFAAAA\tLFOAAA\tHHHHxx\n3639\t9606\t1\t3\t9\t19\t39\t639\t1639\t3639\t3639\t78\t79\tZJAAAA\tMFOAAA\tOOOOxx\n9606\t9607\t0\t2\t6\t6\t6\t606\t1606\t4606\t9606\t12\t13\tMFAAAA\tNFOAAA\tVVVVxx\n3232\t9608\t0\t0\t2\t12\t32\t232\t1232\t3232\t3232\t64\t65\tIUAAAA\tOFOAAA\tAAAAxx\n2063\t9609\t1\t3\t3\t3\t63\t63\t63\t2063\t2063\t126\t127\tJBAAAA\tPFOAAA\tHHHHxx\n3731\t9610\t1\t3\t1\t11\t31\t731\t1731\t3731\t3731\t62\t63\tNNAAAA\tQFOAAA\tOOOOxx\n2558\t9611\t0\t2\t8\t18\t58\t558\t558\t2558\t2558\t116\t117\tKUAAAA\tRFOAAA\tVVVVxx\n2357\t9612\t1\t1\t7\t17\t57\t357\t357\t2357\t2357\t114\t115\tRMAAAA\tSFOAAA\tAAAAxx\n6008\t9613\t0\t0\t8\t8\t8\t8\t8\t1008\t6008\t16\t17\tCXAAAA\tTFOAAA\tHHHHxx\n8246\t9614\t0\t2\t6\t6\t46\t246\t246\t3246\t8246\t92\t93\tEFAAAA\tUFOAAA\tOOOOxx\n8220\t9615\t0\t0\t0\t0\t20\t220\t220\t3220\t8220\t40\t41\tEEAAAA\tVFOAAA\tVVVVxx\n1075\t9616\t1\t3\t5\t15\t75\t75\t1075\t1075\t1075\t150\t151\tJPAAAA\tWFOAAA\tAAAAxx\n2410\t9617\t0\t2\t0\t10\t10\t410\t410\t2410\t2410\t20\t21\tSOAAAA\tXFOAAA\tHHHHxx\n3253\t9618\t1\t1\t3\t13\t53\t253\t1253\t3253\t3253\t106\t107\tDVAAAA\tYFOAAA\tOOOOxx\n4370\t9619\t0\t2\t0\t10\t70\t370\t370\t4370\t4370\t140\t141\tCMAAAA\tZFOAAA\tVVVVxx\n8426\t9620\t0\t2\t6\t6\t26\t426\t426\t3426\t8426\t52\t53\tCMAAAA\tAGOAAA\tAAAAxx\n2262\t9621\t0\t2\t2\t2\t62\t262\t262\t2262\t2262\t124\t125\tAJAAAA\tBGOAAA\tHHHHxx\n4149\t9622\t1\t1\t9\t9\t49\t149\t149\t4149\t4149\t98\t99\tPDAAAA\tCGOAAA\tOOOOxx\n2732\t9623\t0\t0\t2\t12\t32\t732\t732\t2732\t2732\t64\t65\tCBAAAA\tDGOAAA\tVVVVxx\n8606\t9624\t0\t2\t6\t6\t6\t606\t606\t3606\t8606\t12\t13\tATAAAA\tEGOAAA\tAAAAxx\n6311\t9625\t1\t3\t1\t11\t11\t311\t311\t1311\t6311\t22\t23\tTIAAAA\tFGOAAA\tHHHHxx\n7223\t9626\t1\t3\t3\t3\t23\t223\t1223\t2223\t7223\t46\t47\tVRAAAA\tGGOAAA\tOOOOxx\n3054\t9627\t0\t2\t4\t14\t54\t54\t1054\t3054\t3054\t108\t109\tMNAAAA\tHGOAAA\tVVVVxx\n3952\t9628\t0\t0\t2\t12\t52\t952\t1952\t3952\t3952\t104\t105\tAWAAAA\tIGOAAA\tAAAAxx\n8252\t9629\t0\t0\t2\t12\t52\t252\t252\t3252\t8252\t104\t105\tKFAAAA\tJGOAAA\tHHHHxx\n6020\t9630\t0\t0\t0\t0\t20\t20\t20\t1020\t6020\t40\t41\tOXAAAA\tKGOAAA\tOOOOxx\n3846\t9631\t0\t2\t6\t6\t46\t846\t1846\t3846\t3846\t92\t93\tYRAAAA\tLGOAAA\tVVVVxx\n3755\t9632\t1\t3\t5\t15\t55\t755\t1755\t3755\t3755\t110\t111\tLOAAAA\tMGOAAA\tAAAAxx\n3765\t9633\t1\t1\t5\t5\t65\t765\t1765\t3765\t3765\t130\t131\tVOAAAA\tNGOAAA\tHHHHxx\n3434\t9634\t0\t2\t4\t14\t34\t434\t1434\t3434\t3434\t68\t69\tCCAAAA\tOGOAAA\tOOOOxx\n1381\t9635\t1\t1\t1\t1\t81\t381\t1381\t1381\t1381\t162\t163\tDBAAAA\tPGOAAA\tVVVVxx\n287\t9636\t1\t3\t7\t7\t87\t287\t287\t287\t287\t174\t175\tBLAAAA\tQGOAAA\tAAAAxx\n4476\t9637\t0\t0\t6\t16\t76\t476\t476\t4476\t4476\t152\t153\tEQAAAA\tRGOAAA\tHHHHxx\n2916\t9638\t0\t0\t6\t16\t16\t916\t916\t2916\t2916\t32\t33\tEIAAAA\tSGOAAA\tOOOOxx\n4517\t9639\t1\t1\t7\t17\t17\t517\t517\t4517\t4517\t34\t35\tTRAAAA\tTGOAAA\tVVVVxx\n4561\t9640\t1\t1\t1\t1\t61\t561\t561\t4561\t4561\t122\t123\tLTAAAA\tUGOAAA\tAAAAxx\n5106\t9641\t0\t2\t6\t6\t6\t106\t1106\t106\t5106\t12\t13\tKOAAAA\tVGOAAA\tHHHHxx\n2077\t9642\t1\t1\t7\t17\t77\t77\t77\t2077\t2077\t154\t155\tXBAAAA\tWGOAAA\tOOOOxx\n5269\t9643\t1\t1\t9\t9\t69\t269\t1269\t269\t5269\t138\t139\tRUAAAA\tXGOAAA\tVVVVxx\n5688\t9644\t0\t0\t8\t8\t88\t688\t1688\t688\t5688\t176\t177\tUKAAAA\tYGOAAA\tAAAAxx\n8831\t9645\t1\t3\t1\t11\t31\t831\t831\t3831\t8831\t62\t63\tRBAAAA\tZGOAAA\tHHHHxx\n3867\t9646\t1\t3\t7\t7\t67\t867\t1867\t3867\t3867\t134\t135\tTSAAAA\tAHOAAA\tOOOOxx\n6062\t9647\t0\t2\t2\t2\t62\t62\t62\t1062\t6062\t124\t125\tEZAAAA\tBHOAAA\tVVVVxx\n8460\t9648\t0\t0\t0\t0\t60\t460\t460\t3460\t8460\t120\t121\tKNAAAA\tCHOAAA\tAAAAxx\n3138\t9649\t0\t2\t8\t18\t38\t138\t1138\t3138\t3138\t76\t77\tSQAAAA\tDHOAAA\tHHHHxx\n3173\t9650\t1\t1\t3\t13\t73\t173\t1173\t3173\t3173\t146\t147\tBSAAAA\tEHOAAA\tOOOOxx\n7018\t9651\t0\t2\t8\t18\t18\t18\t1018\t2018\t7018\t36\t37\tYJAAAA\tFHOAAA\tVVVVxx\n4836\t9652\t0\t0\t6\t16\t36\t836\t836\t4836\t4836\t72\t73\tAEAAAA\tGHOAAA\tAAAAxx\n1007\t9653\t1\t3\t7\t7\t7\t7\t1007\t1007\t1007\t14\t15\tTMAAAA\tHHOAAA\tHHHHxx\n658\t9654\t0\t2\t8\t18\t58\t658\t658\t658\t658\t116\t117\tIZAAAA\tIHOAAA\tOOOOxx\n5205\t9655\t1\t1\t5\t5\t5\t205\t1205\t205\t5205\t10\t11\tFSAAAA\tJHOAAA\tVVVVxx\n5805\t9656\t1\t1\t5\t5\t5\t805\t1805\t805\t5805\t10\t11\tHPAAAA\tKHOAAA\tAAAAxx\n5959\t9657\t1\t3\t9\t19\t59\t959\t1959\t959\t5959\t118\t119\tFVAAAA\tLHOAAA\tHHHHxx\n2863\t9658\t1\t3\t3\t3\t63\t863\t863\t2863\t2863\t126\t127\tDGAAAA\tMHOAAA\tOOOOxx\n7272\t9659\t0\t0\t2\t12\t72\t272\t1272\t2272\t7272\t144\t145\tSTAAAA\tNHOAAA\tVVVVxx\n8437\t9660\t1\t1\t7\t17\t37\t437\t437\t3437\t8437\t74\t75\tNMAAAA\tOHOAAA\tAAAAxx\n4900\t9661\t0\t0\t0\t0\t0\t900\t900\t4900\t4900\t0\t1\tMGAAAA\tPHOAAA\tHHHHxx\n890\t9662\t0\t2\t0\t10\t90\t890\t890\t890\t890\t180\t181\tGIAAAA\tQHOAAA\tOOOOxx\n3530\t9663\t0\t2\t0\t10\t30\t530\t1530\t3530\t3530\t60\t61\tUFAAAA\tRHOAAA\tVVVVxx\n6209\t9664\t1\t1\t9\t9\t9\t209\t209\t1209\t6209\t18\t19\tVEAAAA\tSHOAAA\tAAAAxx\n4595\t9665\t1\t3\t5\t15\t95\t595\t595\t4595\t4595\t190\t191\tTUAAAA\tTHOAAA\tHHHHxx\n5982\t9666\t0\t2\t2\t2\t82\t982\t1982\t982\t5982\t164\t165\tCWAAAA\tUHOAAA\tOOOOxx\n1101\t9667\t1\t1\t1\t1\t1\t101\t1101\t1101\t1101\t2\t3\tJQAAAA\tVHOAAA\tVVVVxx\n9555\t9668\t1\t3\t5\t15\t55\t555\t1555\t4555\t9555\t110\t111\tNDAAAA\tWHOAAA\tAAAAxx\n1918\t9669\t0\t2\t8\t18\t18\t918\t1918\t1918\t1918\t36\t37\tUVAAAA\tXHOAAA\tHHHHxx\n3527\t9670\t1\t3\t7\t7\t27\t527\t1527\t3527\t3527\t54\t55\tRFAAAA\tYHOAAA\tOOOOxx\n7309\t9671\t1\t1\t9\t9\t9\t309\t1309\t2309\t7309\t18\t19\tDVAAAA\tZHOAAA\tVVVVxx\n8213\t9672\t1\t1\t3\t13\t13\t213\t213\t3213\t8213\t26\t27\tXDAAAA\tAIOAAA\tAAAAxx\n306\t9673\t0\t2\t6\t6\t6\t306\t306\t306\t306\t12\t13\tULAAAA\tBIOAAA\tHHHHxx\n845\t9674\t1\t1\t5\t5\t45\t845\t845\t845\t845\t90\t91\tNGAAAA\tCIOAAA\tOOOOxx\n16\t9675\t0\t0\t6\t16\t16\t16\t16\t16\t16\t32\t33\tQAAAAA\tDIOAAA\tVVVVxx\n437\t9676\t1\t1\t7\t17\t37\t437\t437\t437\t437\t74\t75\tVQAAAA\tEIOAAA\tAAAAxx\n9518\t9677\t0\t2\t8\t18\t18\t518\t1518\t4518\t9518\t36\t37\tCCAAAA\tFIOAAA\tHHHHxx\n2142\t9678\t0\t2\t2\t2\t42\t142\t142\t2142\t2142\t84\t85\tKEAAAA\tGIOAAA\tOOOOxx\n8121\t9679\t1\t1\t1\t1\t21\t121\t121\t3121\t8121\t42\t43\tJAAAAA\tHIOAAA\tVVVVxx\n7354\t9680\t0\t2\t4\t14\t54\t354\t1354\t2354\t7354\t108\t109\tWWAAAA\tIIOAAA\tAAAAxx\n1720\t9681\t0\t0\t0\t0\t20\t720\t1720\t1720\t1720\t40\t41\tEOAAAA\tJIOAAA\tHHHHxx\n6078\t9682\t0\t2\t8\t18\t78\t78\t78\t1078\t6078\t156\t157\tUZAAAA\tKIOAAA\tOOOOxx\n5929\t9683\t1\t1\t9\t9\t29\t929\t1929\t929\t5929\t58\t59\tBUAAAA\tLIOAAA\tVVVVxx\n3856\t9684\t0\t0\t6\t16\t56\t856\t1856\t3856\t3856\t112\t113\tISAAAA\tMIOAAA\tAAAAxx\n3424\t9685\t0\t0\t4\t4\t24\t424\t1424\t3424\t3424\t48\t49\tSBAAAA\tNIOAAA\tHHHHxx\n1712\t9686\t0\t0\t2\t12\t12\t712\t1712\t1712\t1712\t24\t25\tWNAAAA\tOIOAAA\tOOOOxx\n2340\t9687\t0\t0\t0\t0\t40\t340\t340\t2340\t2340\t80\t81\tAMAAAA\tPIOAAA\tVVVVxx\n5570\t9688\t0\t2\t0\t10\t70\t570\t1570\t570\t5570\t140\t141\tGGAAAA\tQIOAAA\tAAAAxx\n8734\t9689\t0\t2\t4\t14\t34\t734\t734\t3734\t8734\t68\t69\tYXAAAA\tRIOAAA\tHHHHxx\n6077\t9690\t1\t1\t7\t17\t77\t77\t77\t1077\t6077\t154\t155\tTZAAAA\tSIOAAA\tOOOOxx\n2960\t9691\t0\t0\t0\t0\t60\t960\t960\t2960\t2960\t120\t121\tWJAAAA\tTIOAAA\tVVVVxx\n5062\t9692\t0\t2\t2\t2\t62\t62\t1062\t62\t5062\t124\t125\tSMAAAA\tUIOAAA\tAAAAxx\n1532\t9693\t0\t0\t2\t12\t32\t532\t1532\t1532\t1532\t64\t65\tYGAAAA\tVIOAAA\tHHHHxx\n8298\t9694\t0\t2\t8\t18\t98\t298\t298\t3298\t8298\t196\t197\tEHAAAA\tWIOAAA\tOOOOxx\n2496\t9695\t0\t0\t6\t16\t96\t496\t496\t2496\t2496\t192\t193\tASAAAA\tXIOAAA\tVVVVxx\n8412\t9696\t0\t0\t2\t12\t12\t412\t412\t3412\t8412\t24\t25\tOLAAAA\tYIOAAA\tAAAAxx\n724\t9697\t0\t0\t4\t4\t24\t724\t724\t724\t724\t48\t49\tWBAAAA\tZIOAAA\tHHHHxx\n1019\t9698\t1\t3\t9\t19\t19\t19\t1019\t1019\t1019\t38\t39\tFNAAAA\tAJOAAA\tOOOOxx\n6265\t9699\t1\t1\t5\t5\t65\t265\t265\t1265\t6265\t130\t131\tZGAAAA\tBJOAAA\tVVVVxx\n740\t9700\t0\t0\t0\t0\t40\t740\t740\t740\t740\t80\t81\tMCAAAA\tCJOAAA\tAAAAxx\n8495\t9701\t1\t3\t5\t15\t95\t495\t495\t3495\t8495\t190\t191\tTOAAAA\tDJOAAA\tHHHHxx\n6983\t9702\t1\t3\t3\t3\t83\t983\t983\t1983\t6983\t166\t167\tPIAAAA\tEJOAAA\tOOOOxx\n991\t9703\t1\t3\t1\t11\t91\t991\t991\t991\t991\t182\t183\tDMAAAA\tFJOAAA\tVVVVxx\n3189\t9704\t1\t1\t9\t9\t89\t189\t1189\t3189\t3189\t178\t179\tRSAAAA\tGJOAAA\tAAAAxx\n4487\t9705\t1\t3\t7\t7\t87\t487\t487\t4487\t4487\t174\t175\tPQAAAA\tHJOAAA\tHHHHxx\n5554\t9706\t0\t2\t4\t14\t54\t554\t1554\t554\t5554\t108\t109\tQFAAAA\tIJOAAA\tOOOOxx\n1258\t9707\t0\t2\t8\t18\t58\t258\t1258\t1258\t1258\t116\t117\tKWAAAA\tJJOAAA\tVVVVxx\n5359\t9708\t1\t3\t9\t19\t59\t359\t1359\t359\t5359\t118\t119\tDYAAAA\tKJOAAA\tAAAAxx\n2709\t9709\t1\t1\t9\t9\t9\t709\t709\t2709\t2709\t18\t19\tFAAAAA\tLJOAAA\tHHHHxx\n361\t9710\t1\t1\t1\t1\t61\t361\t361\t361\t361\t122\t123\tXNAAAA\tMJOAAA\tOOOOxx\n4028\t9711\t0\t0\t8\t8\t28\t28\t28\t4028\t4028\t56\t57\tYYAAAA\tNJOAAA\tVVVVxx\n3735\t9712\t1\t3\t5\t15\t35\t735\t1735\t3735\t3735\t70\t71\tRNAAAA\tOJOAAA\tAAAAxx\n4427\t9713\t1\t3\t7\t7\t27\t427\t427\t4427\t4427\t54\t55\tHOAAAA\tPJOAAA\tHHHHxx\n7540\t9714\t0\t0\t0\t0\t40\t540\t1540\t2540\t7540\t80\t81\tAEAAAA\tQJOAAA\tOOOOxx\n3569\t9715\t1\t1\t9\t9\t69\t569\t1569\t3569\t3569\t138\t139\tHHAAAA\tRJOAAA\tVVVVxx\n1916\t9716\t0\t0\t6\t16\t16\t916\t1916\t1916\t1916\t32\t33\tSVAAAA\tSJOAAA\tAAAAxx\n7596\t9717\t0\t0\t6\t16\t96\t596\t1596\t2596\t7596\t192\t193\tEGAAAA\tTJOAAA\tHHHHxx\n9721\t9718\t1\t1\t1\t1\t21\t721\t1721\t4721\t9721\t42\t43\tXJAAAA\tUJOAAA\tOOOOxx\n4429\t9719\t1\t1\t9\t9\t29\t429\t429\t4429\t4429\t58\t59\tJOAAAA\tVJOAAA\tVVVVxx\n3471\t9720\t1\t3\t1\t11\t71\t471\t1471\t3471\t3471\t142\t143\tNDAAAA\tWJOAAA\tAAAAxx\n1157\t9721\t1\t1\t7\t17\t57\t157\t1157\t1157\t1157\t114\t115\tNSAAAA\tXJOAAA\tHHHHxx\n5700\t9722\t0\t0\t0\t0\t0\t700\t1700\t700\t5700\t0\t1\tGLAAAA\tYJOAAA\tOOOOxx\n4431\t9723\t1\t3\t1\t11\t31\t431\t431\t4431\t4431\t62\t63\tLOAAAA\tZJOAAA\tVVVVxx\n9409\t9724\t1\t1\t9\t9\t9\t409\t1409\t4409\t9409\t18\t19\tXXAAAA\tAKOAAA\tAAAAxx\n8752\t9725\t0\t0\t2\t12\t52\t752\t752\t3752\t8752\t104\t105\tQYAAAA\tBKOAAA\tHHHHxx\n9484\t9726\t0\t0\t4\t4\t84\t484\t1484\t4484\t9484\t168\t169\tUAAAAA\tCKOAAA\tOOOOxx\n1266\t9727\t0\t2\t6\t6\t66\t266\t1266\t1266\t1266\t132\t133\tSWAAAA\tDKOAAA\tVVVVxx\n9097\t9728\t1\t1\t7\t17\t97\t97\t1097\t4097\t9097\t194\t195\tXLAAAA\tEKOAAA\tAAAAxx\n3068\t9729\t0\t0\t8\t8\t68\t68\t1068\t3068\t3068\t136\t137\tAOAAAA\tFKOAAA\tHHHHxx\n5490\t9730\t0\t2\t0\t10\t90\t490\t1490\t490\t5490\t180\t181\tEDAAAA\tGKOAAA\tOOOOxx\n1375\t9731\t1\t3\t5\t15\t75\t375\t1375\t1375\t1375\t150\t151\tXAAAAA\tHKOAAA\tVVVVxx\n2487\t9732\t1\t3\t7\t7\t87\t487\t487\t2487\t2487\t174\t175\tRRAAAA\tIKOAAA\tAAAAxx\n1705\t9733\t1\t1\t5\t5\t5\t705\t1705\t1705\t1705\t10\t11\tPNAAAA\tJKOAAA\tHHHHxx\n1571\t9734\t1\t3\t1\t11\t71\t571\t1571\t1571\t1571\t142\t143\tLIAAAA\tKKOAAA\tOOOOxx\n4005\t9735\t1\t1\t5\t5\t5\t5\t5\t4005\t4005\t10\t11\tBYAAAA\tLKOAAA\tVVVVxx\n5497\t9736\t1\t1\t7\t17\t97\t497\t1497\t497\t5497\t194\t195\tLDAAAA\tMKOAAA\tAAAAxx\n2144\t9737\t0\t0\t4\t4\t44\t144\t144\t2144\t2144\t88\t89\tMEAAAA\tNKOAAA\tHHHHxx\n4052\t9738\t0\t0\t2\t12\t52\t52\t52\t4052\t4052\t104\t105\tWZAAAA\tOKOAAA\tOOOOxx\n4942\t9739\t0\t2\t2\t2\t42\t942\t942\t4942\t4942\t84\t85\tCIAAAA\tPKOAAA\tVVVVxx\n5504\t9740\t0\t0\t4\t4\t4\t504\t1504\t504\t5504\t8\t9\tSDAAAA\tQKOAAA\tAAAAxx\n2913\t9741\t1\t1\t3\t13\t13\t913\t913\t2913\t2913\t26\t27\tBIAAAA\tRKOAAA\tHHHHxx\n5617\t9742\t1\t1\t7\t17\t17\t617\t1617\t617\t5617\t34\t35\tBIAAAA\tSKOAAA\tOOOOxx\n8179\t9743\t1\t3\t9\t19\t79\t179\t179\t3179\t8179\t158\t159\tPCAAAA\tTKOAAA\tVVVVxx\n9437\t9744\t1\t1\t7\t17\t37\t437\t1437\t4437\t9437\t74\t75\tZYAAAA\tUKOAAA\tAAAAxx\n1821\t9745\t1\t1\t1\t1\t21\t821\t1821\t1821\t1821\t42\t43\tBSAAAA\tVKOAAA\tHHHHxx\n5737\t9746\t1\t1\t7\t17\t37\t737\t1737\t737\t5737\t74\t75\tRMAAAA\tWKOAAA\tOOOOxx\n4207\t9747\t1\t3\t7\t7\t7\t207\t207\t4207\t4207\t14\t15\tVFAAAA\tXKOAAA\tVVVVxx\n4815\t9748\t1\t3\t5\t15\t15\t815\t815\t4815\t4815\t30\t31\tFDAAAA\tYKOAAA\tAAAAxx\n8707\t9749\t1\t3\t7\t7\t7\t707\t707\t3707\t8707\t14\t15\tXWAAAA\tZKOAAA\tHHHHxx\n5970\t9750\t0\t2\t0\t10\t70\t970\t1970\t970\t5970\t140\t141\tQVAAAA\tALOAAA\tOOOOxx\n5501\t9751\t1\t1\t1\t1\t1\t501\t1501\t501\t5501\t2\t3\tPDAAAA\tBLOAAA\tVVVVxx\n4013\t9752\t1\t1\t3\t13\t13\t13\t13\t4013\t4013\t26\t27\tJYAAAA\tCLOAAA\tAAAAxx\n9235\t9753\t1\t3\t5\t15\t35\t235\t1235\t4235\t9235\t70\t71\tFRAAAA\tDLOAAA\tHHHHxx\n2503\t9754\t1\t3\t3\t3\t3\t503\t503\t2503\t2503\t6\t7\tHSAAAA\tELOAAA\tOOOOxx\n9181\t9755\t1\t1\t1\t1\t81\t181\t1181\t4181\t9181\t162\t163\tDPAAAA\tFLOAAA\tVVVVxx\n2289\t9756\t1\t1\t9\t9\t89\t289\t289\t2289\t2289\t178\t179\tBKAAAA\tGLOAAA\tAAAAxx\n4256\t9757\t0\t0\t6\t16\t56\t256\t256\t4256\t4256\t112\t113\tSHAAAA\tHLOAAA\tHHHHxx\n191\t9758\t1\t3\t1\t11\t91\t191\t191\t191\t191\t182\t183\tJHAAAA\tILOAAA\tOOOOxx\n9655\t9759\t1\t3\t5\t15\t55\t655\t1655\t4655\t9655\t110\t111\tJHAAAA\tJLOAAA\tVVVVxx\n8615\t9760\t1\t3\t5\t15\t15\t615\t615\t3615\t8615\t30\t31\tJTAAAA\tKLOAAA\tAAAAxx\n3011\t9761\t1\t3\t1\t11\t11\t11\t1011\t3011\t3011\t22\t23\tVLAAAA\tLLOAAA\tHHHHxx\n6376\t9762\t0\t0\t6\t16\t76\t376\t376\t1376\t6376\t152\t153\tGLAAAA\tMLOAAA\tOOOOxx\n68\t9763\t0\t0\t8\t8\t68\t68\t68\t68\t68\t136\t137\tQCAAAA\tNLOAAA\tVVVVxx\n4720\t9764\t0\t0\t0\t0\t20\t720\t720\t4720\t4720\t40\t41\tOZAAAA\tOLOAAA\tAAAAxx\n6848\t9765\t0\t0\t8\t8\t48\t848\t848\t1848\t6848\t96\t97\tKDAAAA\tPLOAAA\tHHHHxx\n456\t9766\t0\t0\t6\t16\t56\t456\t456\t456\t456\t112\t113\tORAAAA\tQLOAAA\tOOOOxx\n5887\t9767\t1\t3\t7\t7\t87\t887\t1887\t887\t5887\t174\t175\tLSAAAA\tRLOAAA\tVVVVxx\n9249\t9768\t1\t1\t9\t9\t49\t249\t1249\t4249\t9249\t98\t99\tTRAAAA\tSLOAAA\tAAAAxx\n4041\t9769\t1\t1\t1\t1\t41\t41\t41\t4041\t4041\t82\t83\tLZAAAA\tTLOAAA\tHHHHxx\n2304\t9770\t0\t0\t4\t4\t4\t304\t304\t2304\t2304\t8\t9\tQKAAAA\tULOAAA\tOOOOxx\n8763\t9771\t1\t3\t3\t3\t63\t763\t763\t3763\t8763\t126\t127\tBZAAAA\tVLOAAA\tVVVVxx\n2115\t9772\t1\t3\t5\t15\t15\t115\t115\t2115\t2115\t30\t31\tJDAAAA\tWLOAAA\tAAAAxx\n8014\t9773\t0\t2\t4\t14\t14\t14\t14\t3014\t8014\t28\t29\tGWAAAA\tXLOAAA\tHHHHxx\n9895\t9774\t1\t3\t5\t15\t95\t895\t1895\t4895\t9895\t190\t191\tPQAAAA\tYLOAAA\tOOOOxx\n671\t9775\t1\t3\t1\t11\t71\t671\t671\t671\t671\t142\t143\tVZAAAA\tZLOAAA\tVVVVxx\n3774\t9776\t0\t2\t4\t14\t74\t774\t1774\t3774\t3774\t148\t149\tEPAAAA\tAMOAAA\tAAAAxx\n134\t9777\t0\t2\t4\t14\t34\t134\t134\t134\t134\t68\t69\tEFAAAA\tBMOAAA\tHHHHxx\n534\t9778\t0\t2\t4\t14\t34\t534\t534\t534\t534\t68\t69\tOUAAAA\tCMOAAA\tOOOOxx\n7308\t9779\t0\t0\t8\t8\t8\t308\t1308\t2308\t7308\t16\t17\tCVAAAA\tDMOAAA\tVVVVxx\n5244\t9780\t0\t0\t4\t4\t44\t244\t1244\t244\t5244\t88\t89\tSTAAAA\tEMOAAA\tAAAAxx\n1512\t9781\t0\t0\t2\t12\t12\t512\t1512\t1512\t1512\t24\t25\tEGAAAA\tFMOAAA\tHHHHxx\n8960\t9782\t0\t0\t0\t0\t60\t960\t960\t3960\t8960\t120\t121\tQGAAAA\tGMOAAA\tOOOOxx\n6602\t9783\t0\t2\t2\t2\t2\t602\t602\t1602\t6602\t4\t5\tYTAAAA\tHMOAAA\tVVVVxx\n593\t9784\t1\t1\t3\t13\t93\t593\t593\t593\t593\t186\t187\tVWAAAA\tIMOAAA\tAAAAxx\n2353\t9785\t1\t1\t3\t13\t53\t353\t353\t2353\t2353\t106\t107\tNMAAAA\tJMOAAA\tHHHHxx\n4139\t9786\t1\t3\t9\t19\t39\t139\t139\t4139\t4139\t78\t79\tFDAAAA\tKMOAAA\tOOOOxx\n3063\t9787\t1\t3\t3\t3\t63\t63\t1063\t3063\t3063\t126\t127\tVNAAAA\tLMOAAA\tVVVVxx\n652\t9788\t0\t0\t2\t12\t52\t652\t652\t652\t652\t104\t105\tCZAAAA\tMMOAAA\tAAAAxx\n7405\t9789\t1\t1\t5\t5\t5\t405\t1405\t2405\t7405\t10\t11\tVYAAAA\tNMOAAA\tHHHHxx\n3034\t9790\t0\t2\t4\t14\t34\t34\t1034\t3034\t3034\t68\t69\tSMAAAA\tOMOAAA\tOOOOxx\n4614\t9791\t0\t2\t4\t14\t14\t614\t614\t4614\t4614\t28\t29\tMVAAAA\tPMOAAA\tVVVVxx\n2351\t9792\t1\t3\t1\t11\t51\t351\t351\t2351\t2351\t102\t103\tLMAAAA\tQMOAAA\tAAAAxx\n8208\t9793\t0\t0\t8\t8\t8\t208\t208\t3208\t8208\t16\t17\tSDAAAA\tRMOAAA\tHHHHxx\n5475\t9794\t1\t3\t5\t15\t75\t475\t1475\t475\t5475\t150\t151\tPCAAAA\tSMOAAA\tOOOOxx\n6875\t9795\t1\t3\t5\t15\t75\t875\t875\t1875\t6875\t150\t151\tLEAAAA\tTMOAAA\tVVVVxx\n563\t9796\t1\t3\t3\t3\t63\t563\t563\t563\t563\t126\t127\tRVAAAA\tUMOAAA\tAAAAxx\n3346\t9797\t0\t2\t6\t6\t46\t346\t1346\t3346\t3346\t92\t93\tSYAAAA\tVMOAAA\tHHHHxx\n291\t9798\t1\t3\t1\t11\t91\t291\t291\t291\t291\t182\t183\tFLAAAA\tWMOAAA\tOOOOxx\n6345\t9799\t1\t1\t5\t5\t45\t345\t345\t1345\t6345\t90\t91\tBKAAAA\tXMOAAA\tVVVVxx\n8099\t9800\t1\t3\t9\t19\t99\t99\t99\t3099\t8099\t198\t199\tNZAAAA\tYMOAAA\tAAAAxx\n2078\t9801\t0\t2\t8\t18\t78\t78\t78\t2078\t2078\t156\t157\tYBAAAA\tZMOAAA\tHHHHxx\n8238\t9802\t0\t2\t8\t18\t38\t238\t238\t3238\t8238\t76\t77\tWEAAAA\tANOAAA\tOOOOxx\n4482\t9803\t0\t2\t2\t2\t82\t482\t482\t4482\t4482\t164\t165\tKQAAAA\tBNOAAA\tVVVVxx\n716\t9804\t0\t0\t6\t16\t16\t716\t716\t716\t716\t32\t33\tOBAAAA\tCNOAAA\tAAAAxx\n7288\t9805\t0\t0\t8\t8\t88\t288\t1288\t2288\t7288\t176\t177\tIUAAAA\tDNOAAA\tHHHHxx\n5906\t9806\t0\t2\t6\t6\t6\t906\t1906\t906\t5906\t12\t13\tETAAAA\tENOAAA\tOOOOxx\n5618\t9807\t0\t2\t8\t18\t18\t618\t1618\t618\t5618\t36\t37\tCIAAAA\tFNOAAA\tVVVVxx\n1141\t9808\t1\t1\t1\t1\t41\t141\t1141\t1141\t1141\t82\t83\tXRAAAA\tGNOAAA\tAAAAxx\n8231\t9809\t1\t3\t1\t11\t31\t231\t231\t3231\t8231\t62\t63\tPEAAAA\tHNOAAA\tHHHHxx\n3713\t9810\t1\t1\t3\t13\t13\t713\t1713\t3713\t3713\t26\t27\tVMAAAA\tINOAAA\tOOOOxx\n9158\t9811\t0\t2\t8\t18\t58\t158\t1158\t4158\t9158\t116\t117\tGOAAAA\tJNOAAA\tVVVVxx\n4051\t9812\t1\t3\t1\t11\t51\t51\t51\t4051\t4051\t102\t103\tVZAAAA\tKNOAAA\tAAAAxx\n1973\t9813\t1\t1\t3\t13\t73\t973\t1973\t1973\t1973\t146\t147\tXXAAAA\tLNOAAA\tHHHHxx\n6710\t9814\t0\t2\t0\t10\t10\t710\t710\t1710\t6710\t20\t21\tCYAAAA\tMNOAAA\tOOOOxx\n1021\t9815\t1\t1\t1\t1\t21\t21\t1021\t1021\t1021\t42\t43\tHNAAAA\tNNOAAA\tVVVVxx\n2196\t9816\t0\t0\t6\t16\t96\t196\t196\t2196\t2196\t192\t193\tMGAAAA\tONOAAA\tAAAAxx\n8335\t9817\t1\t3\t5\t15\t35\t335\t335\t3335\t8335\t70\t71\tPIAAAA\tPNOAAA\tHHHHxx\n2272\t9818\t0\t0\t2\t12\t72\t272\t272\t2272\t2272\t144\t145\tKJAAAA\tQNOAAA\tOOOOxx\n3818\t9819\t0\t2\t8\t18\t18\t818\t1818\t3818\t3818\t36\t37\tWQAAAA\tRNOAAA\tVVVVxx\n679\t9820\t1\t3\t9\t19\t79\t679\t679\t679\t679\t158\t159\tDAAAAA\tSNOAAA\tAAAAxx\n7512\t9821\t0\t0\t2\t12\t12\t512\t1512\t2512\t7512\t24\t25\tYCAAAA\tTNOAAA\tHHHHxx\n493\t9822\t1\t1\t3\t13\t93\t493\t493\t493\t493\t186\t187\tZSAAAA\tUNOAAA\tOOOOxx\n5663\t9823\t1\t3\t3\t3\t63\t663\t1663\t663\t5663\t126\t127\tVJAAAA\tVNOAAA\tVVVVxx\n4655\t9824\t1\t3\t5\t15\t55\t655\t655\t4655\t4655\t110\t111\tBXAAAA\tWNOAAA\tAAAAxx\n3996\t9825\t0\t0\t6\t16\t96\t996\t1996\t3996\t3996\t192\t193\tSXAAAA\tXNOAAA\tHHHHxx\n8797\t9826\t1\t1\t7\t17\t97\t797\t797\t3797\t8797\t194\t195\tJAAAAA\tYNOAAA\tOOOOxx\n2991\t9827\t1\t3\t1\t11\t91\t991\t991\t2991\t2991\t182\t183\tBLAAAA\tZNOAAA\tVVVVxx\n7038\t9828\t0\t2\t8\t18\t38\t38\t1038\t2038\t7038\t76\t77\tSKAAAA\tAOOAAA\tAAAAxx\n4174\t9829\t0\t2\t4\t14\t74\t174\t174\t4174\t4174\t148\t149\tOEAAAA\tBOOAAA\tHHHHxx\n6908\t9830\t0\t0\t8\t8\t8\t908\t908\t1908\t6908\t16\t17\tSFAAAA\tCOOAAA\tOOOOxx\n8477\t9831\t1\t1\t7\t17\t77\t477\t477\t3477\t8477\t154\t155\tBOAAAA\tDOOAAA\tVVVVxx\n3576\t9832\t0\t0\t6\t16\t76\t576\t1576\t3576\t3576\t152\t153\tOHAAAA\tEOOAAA\tAAAAxx\n2685\t9833\t1\t1\t5\t5\t85\t685\t685\t2685\t2685\t170\t171\tHZAAAA\tFOOAAA\tHHHHxx\n9161\t9834\t1\t1\t1\t1\t61\t161\t1161\t4161\t9161\t122\t123\tJOAAAA\tGOOAAA\tOOOOxx\n2951\t9835\t1\t3\t1\t11\t51\t951\t951\t2951\t2951\t102\t103\tNJAAAA\tHOOAAA\tVVVVxx\n8362\t9836\t0\t2\t2\t2\t62\t362\t362\t3362\t8362\t124\t125\tQJAAAA\tIOOAAA\tAAAAxx\n2379\t9837\t1\t3\t9\t19\t79\t379\t379\t2379\t2379\t158\t159\tNNAAAA\tJOOAAA\tHHHHxx\n1277\t9838\t1\t1\t7\t17\t77\t277\t1277\t1277\t1277\t154\t155\tDXAAAA\tKOOAAA\tOOOOxx\n1728\t9839\t0\t0\t8\t8\t28\t728\t1728\t1728\t1728\t56\t57\tMOAAAA\tLOOAAA\tVVVVxx\n9816\t9840\t0\t0\t6\t16\t16\t816\t1816\t4816\t9816\t32\t33\tONAAAA\tMOOAAA\tAAAAxx\n6288\t9841\t0\t0\t8\t8\t88\t288\t288\t1288\t6288\t176\t177\tWHAAAA\tNOOAAA\tHHHHxx\n8985\t9842\t1\t1\t5\t5\t85\t985\t985\t3985\t8985\t170\t171\tPHAAAA\tOOOAAA\tOOOOxx\n771\t9843\t1\t3\t1\t11\t71\t771\t771\t771\t771\t142\t143\tRDAAAA\tPOOAAA\tVVVVxx\n464\t9844\t0\t0\t4\t4\t64\t464\t464\t464\t464\t128\t129\tWRAAAA\tQOOAAA\tAAAAxx\n9625\t9845\t1\t1\t5\t5\t25\t625\t1625\t4625\t9625\t50\t51\tFGAAAA\tROOAAA\tHHHHxx\n9608\t9846\t0\t0\t8\t8\t8\t608\t1608\t4608\t9608\t16\t17\tOFAAAA\tSOOAAA\tOOOOxx\n9170\t9847\t0\t2\t0\t10\t70\t170\t1170\t4170\t9170\t140\t141\tSOAAAA\tTOOAAA\tVVVVxx\n9658\t9848\t0\t2\t8\t18\t58\t658\t1658\t4658\t9658\t116\t117\tMHAAAA\tUOOAAA\tAAAAxx\n7515\t9849\t1\t3\t5\t15\t15\t515\t1515\t2515\t7515\t30\t31\tBDAAAA\tVOOAAA\tHHHHxx\n9400\t9850\t0\t0\t0\t0\t0\t400\t1400\t4400\t9400\t0\t1\tOXAAAA\tWOOAAA\tOOOOxx\n2045\t9851\t1\t1\t5\t5\t45\t45\t45\t2045\t2045\t90\t91\tRAAAAA\tXOOAAA\tVVVVxx\n324\t9852\t0\t0\t4\t4\t24\t324\t324\t324\t324\t48\t49\tMMAAAA\tYOOAAA\tAAAAxx\n4252\t9853\t0\t0\t2\t12\t52\t252\t252\t4252\t4252\t104\t105\tOHAAAA\tZOOAAA\tHHHHxx\n8329\t9854\t1\t1\t9\t9\t29\t329\t329\t3329\t8329\t58\t59\tJIAAAA\tAPOAAA\tOOOOxx\n4472\t9855\t0\t0\t2\t12\t72\t472\t472\t4472\t4472\t144\t145\tAQAAAA\tBPOAAA\tVVVVxx\n1047\t9856\t1\t3\t7\t7\t47\t47\t1047\t1047\t1047\t94\t95\tHOAAAA\tCPOAAA\tAAAAxx\n9341\t9857\t1\t1\t1\t1\t41\t341\t1341\t4341\t9341\t82\t83\tHVAAAA\tDPOAAA\tHHHHxx\n7000\t9858\t0\t0\t0\t0\t0\t0\t1000\t2000\t7000\t0\t1\tGJAAAA\tEPOAAA\tOOOOxx\n1429\t9859\t1\t1\t9\t9\t29\t429\t1429\t1429\t1429\t58\t59\tZCAAAA\tFPOAAA\tVVVVxx\n2701\t9860\t1\t1\t1\t1\t1\t701\t701\t2701\t2701\t2\t3\tXZAAAA\tGPOAAA\tAAAAxx\n6630\t9861\t0\t2\t0\t10\t30\t630\t630\t1630\t6630\t60\t61\tAVAAAA\tHPOAAA\tHHHHxx\n3669\t9862\t1\t1\t9\t9\t69\t669\t1669\t3669\t3669\t138\t139\tDLAAAA\tIPOAAA\tOOOOxx\n8613\t9863\t1\t1\t3\t13\t13\t613\t613\t3613\t8613\t26\t27\tHTAAAA\tJPOAAA\tVVVVxx\n7080\t9864\t0\t0\t0\t0\t80\t80\t1080\t2080\t7080\t160\t161\tIMAAAA\tKPOAAA\tAAAAxx\n8788\t9865\t0\t0\t8\t8\t88\t788\t788\t3788\t8788\t176\t177\tAAAAAA\tLPOAAA\tHHHHxx\n6291\t9866\t1\t3\t1\t11\t91\t291\t291\t1291\t6291\t182\t183\tZHAAAA\tMPOAAA\tOOOOxx\n7885\t9867\t1\t1\t5\t5\t85\t885\t1885\t2885\t7885\t170\t171\tHRAAAA\tNPOAAA\tVVVVxx\n7160\t9868\t0\t0\t0\t0\t60\t160\t1160\t2160\t7160\t120\t121\tKPAAAA\tOPOAAA\tAAAAxx\n6140\t9869\t0\t0\t0\t0\t40\t140\t140\t1140\t6140\t80\t81\tECAAAA\tPPOAAA\tHHHHxx\n9881\t9870\t1\t1\t1\t1\t81\t881\t1881\t4881\t9881\t162\t163\tBQAAAA\tQPOAAA\tOOOOxx\n9140\t9871\t0\t0\t0\t0\t40\t140\t1140\t4140\t9140\t80\t81\tONAAAA\tRPOAAA\tVVVVxx\n644\t9872\t0\t0\t4\t4\t44\t644\t644\t644\t644\t88\t89\tUYAAAA\tSPOAAA\tAAAAxx\n3667\t9873\t1\t3\t7\t7\t67\t667\t1667\t3667\t3667\t134\t135\tBLAAAA\tTPOAAA\tHHHHxx\n2675\t9874\t1\t3\t5\t15\t75\t675\t675\t2675\t2675\t150\t151\tXYAAAA\tUPOAAA\tOOOOxx\n9492\t9875\t0\t0\t2\t12\t92\t492\t1492\t4492\t9492\t184\t185\tCBAAAA\tVPOAAA\tVVVVxx\n5004\t9876\t0\t0\t4\t4\t4\t4\t1004\t4\t5004\t8\t9\tMKAAAA\tWPOAAA\tAAAAxx\n9456\t9877\t0\t0\t6\t16\t56\t456\t1456\t4456\t9456\t112\t113\tSZAAAA\tXPOAAA\tHHHHxx\n8197\t9878\t1\t1\t7\t17\t97\t197\t197\t3197\t8197\t194\t195\tHDAAAA\tYPOAAA\tOOOOxx\n2837\t9879\t1\t1\t7\t17\t37\t837\t837\t2837\t2837\t74\t75\tDFAAAA\tZPOAAA\tVVVVxx\n127\t9880\t1\t3\t7\t7\t27\t127\t127\t127\t127\t54\t55\tXEAAAA\tAQOAAA\tAAAAxx\n9772\t9881\t0\t0\t2\t12\t72\t772\t1772\t4772\t9772\t144\t145\tWLAAAA\tBQOAAA\tHHHHxx\n5743\t9882\t1\t3\t3\t3\t43\t743\t1743\t743\t5743\t86\t87\tXMAAAA\tCQOAAA\tOOOOxx\n2007\t9883\t1\t3\t7\t7\t7\t7\t7\t2007\t2007\t14\t15\tFZAAAA\tDQOAAA\tVVVVxx\n7586\t9884\t0\t2\t6\t6\t86\t586\t1586\t2586\t7586\t172\t173\tUFAAAA\tEQOAAA\tAAAAxx\n45\t9885\t1\t1\t5\t5\t45\t45\t45\t45\t45\t90\t91\tTBAAAA\tFQOAAA\tHHHHxx\n6482\t9886\t0\t2\t2\t2\t82\t482\t482\t1482\t6482\t164\t165\tIPAAAA\tGQOAAA\tOOOOxx\n4565\t9887\t1\t1\t5\t5\t65\t565\t565\t4565\t4565\t130\t131\tPTAAAA\tHQOAAA\tVVVVxx\n6975\t9888\t1\t3\t5\t15\t75\t975\t975\t1975\t6975\t150\t151\tHIAAAA\tIQOAAA\tAAAAxx\n7260\t9889\t0\t0\t0\t0\t60\t260\t1260\t2260\t7260\t120\t121\tGTAAAA\tJQOAAA\tHHHHxx\n2830\t9890\t0\t2\t0\t10\t30\t830\t830\t2830\t2830\t60\t61\tWEAAAA\tKQOAAA\tOOOOxx\n9365\t9891\t1\t1\t5\t5\t65\t365\t1365\t4365\t9365\t130\t131\tFWAAAA\tLQOAAA\tVVVVxx\n8207\t9892\t1\t3\t7\t7\t7\t207\t207\t3207\t8207\t14\t15\tRDAAAA\tMQOAAA\tAAAAxx\n2506\t9893\t0\t2\t6\t6\t6\t506\t506\t2506\t2506\t12\t13\tKSAAAA\tNQOAAA\tHHHHxx\n8081\t9894\t1\t1\t1\t1\t81\t81\t81\t3081\t8081\t162\t163\tVYAAAA\tOQOAAA\tOOOOxx\n8678\t9895\t0\t2\t8\t18\t78\t678\t678\t3678\t8678\t156\t157\tUVAAAA\tPQOAAA\tVVVVxx\n9932\t9896\t0\t0\t2\t12\t32\t932\t1932\t4932\t9932\t64\t65\tASAAAA\tQQOAAA\tAAAAxx\n447\t9897\t1\t3\t7\t7\t47\t447\t447\t447\t447\t94\t95\tFRAAAA\tRQOAAA\tHHHHxx\n9187\t9898\t1\t3\t7\t7\t87\t187\t1187\t4187\t9187\t174\t175\tJPAAAA\tSQOAAA\tOOOOxx\n89\t9899\t1\t1\t9\t9\t89\t89\t89\t89\t89\t178\t179\tLDAAAA\tTQOAAA\tVVVVxx\n7027\t9900\t1\t3\t7\t7\t27\t27\t1027\t2027\t7027\t54\t55\tHKAAAA\tUQOAAA\tAAAAxx\n1536\t9901\t0\t0\t6\t16\t36\t536\t1536\t1536\t1536\t72\t73\tCHAAAA\tVQOAAA\tHHHHxx\n160\t9902\t0\t0\t0\t0\t60\t160\t160\t160\t160\t120\t121\tEGAAAA\tWQOAAA\tOOOOxx\n7679\t9903\t1\t3\t9\t19\t79\t679\t1679\t2679\t7679\t158\t159\tJJAAAA\tXQOAAA\tVVVVxx\n5973\t9904\t1\t1\t3\t13\t73\t973\t1973\t973\t5973\t146\t147\tTVAAAA\tYQOAAA\tAAAAxx\n4401\t9905\t1\t1\t1\t1\t1\t401\t401\t4401\t4401\t2\t3\tHNAAAA\tZQOAAA\tHHHHxx\n395\t9906\t1\t3\t5\t15\t95\t395\t395\t395\t395\t190\t191\tFPAAAA\tAROAAA\tOOOOxx\n4904\t9907\t0\t0\t4\t4\t4\t904\t904\t4904\t4904\t8\t9\tQGAAAA\tBROAAA\tVVVVxx\n2759\t9908\t1\t3\t9\t19\t59\t759\t759\t2759\t2759\t118\t119\tDCAAAA\tCROAAA\tAAAAxx\n8713\t9909\t1\t1\t3\t13\t13\t713\t713\t3713\t8713\t26\t27\tDXAAAA\tDROAAA\tHHHHxx\n3770\t9910\t0\t2\t0\t10\t70\t770\t1770\t3770\t3770\t140\t141\tAPAAAA\tEROAAA\tOOOOxx\n8272\t9911\t0\t0\t2\t12\t72\t272\t272\t3272\t8272\t144\t145\tEGAAAA\tFROAAA\tVVVVxx\n5358\t9912\t0\t2\t8\t18\t58\t358\t1358\t358\t5358\t116\t117\tCYAAAA\tGROAAA\tAAAAxx\n9747\t9913\t1\t3\t7\t7\t47\t747\t1747\t4747\t9747\t94\t95\tXKAAAA\tHROAAA\tHHHHxx\n1567\t9914\t1\t3\t7\t7\t67\t567\t1567\t1567\t1567\t134\t135\tHIAAAA\tIROAAA\tOOOOxx\n2136\t9915\t0\t0\t6\t16\t36\t136\t136\t2136\t2136\t72\t73\tEEAAAA\tJROAAA\tVVVVxx\n314\t9916\t0\t2\t4\t14\t14\t314\t314\t314\t314\t28\t29\tCMAAAA\tKROAAA\tAAAAxx\n4583\t9917\t1\t3\t3\t3\t83\t583\t583\t4583\t4583\t166\t167\tHUAAAA\tLROAAA\tHHHHxx\n375\t9918\t1\t3\t5\t15\t75\t375\t375\t375\t375\t150\t151\tLOAAAA\tMROAAA\tOOOOxx\n5566\t9919\t0\t2\t6\t6\t66\t566\t1566\t566\t5566\t132\t133\tCGAAAA\tNROAAA\tVVVVxx\n6865\t9920\t1\t1\t5\t5\t65\t865\t865\t1865\t6865\t130\t131\tBEAAAA\tOROAAA\tAAAAxx\n894\t9921\t0\t2\t4\t14\t94\t894\t894\t894\t894\t188\t189\tKIAAAA\tPROAAA\tHHHHxx\n5399\t9922\t1\t3\t9\t19\t99\t399\t1399\t399\t5399\t198\t199\tRZAAAA\tQROAAA\tOOOOxx\n1385\t9923\t1\t1\t5\t5\t85\t385\t1385\t1385\t1385\t170\t171\tHBAAAA\tRROAAA\tVVVVxx\n2156\t9924\t0\t0\t6\t16\t56\t156\t156\t2156\t2156\t112\t113\tYEAAAA\tSROAAA\tAAAAxx\n9659\t9925\t1\t3\t9\t19\t59\t659\t1659\t4659\t9659\t118\t119\tNHAAAA\tTROAAA\tHHHHxx\n477\t9926\t1\t1\t7\t17\t77\t477\t477\t477\t477\t154\t155\tJSAAAA\tUROAAA\tOOOOxx\n8194\t9927\t0\t2\t4\t14\t94\t194\t194\t3194\t8194\t188\t189\tEDAAAA\tVROAAA\tVVVVxx\n3937\t9928\t1\t1\t7\t17\t37\t937\t1937\t3937\t3937\t74\t75\tLVAAAA\tWROAAA\tAAAAxx\n3745\t9929\t1\t1\t5\t5\t45\t745\t1745\t3745\t3745\t90\t91\tBOAAAA\tXROAAA\tHHHHxx\n4096\t9930\t0\t0\t6\t16\t96\t96\t96\t4096\t4096\t192\t193\tOBAAAA\tYROAAA\tOOOOxx\n5487\t9931\t1\t3\t7\t7\t87\t487\t1487\t487\t5487\t174\t175\tBDAAAA\tZROAAA\tVVVVxx\n2475\t9932\t1\t3\t5\t15\t75\t475\t475\t2475\t2475\t150\t151\tFRAAAA\tASOAAA\tAAAAxx\n6105\t9933\t1\t1\t5\t5\t5\t105\t105\t1105\t6105\t10\t11\tVAAAAA\tBSOAAA\tHHHHxx\n6036\t9934\t0\t0\t6\t16\t36\t36\t36\t1036\t6036\t72\t73\tEYAAAA\tCSOAAA\tOOOOxx\n1315\t9935\t1\t3\t5\t15\t15\t315\t1315\t1315\t1315\t30\t31\tPYAAAA\tDSOAAA\tVVVVxx\n4473\t9936\t1\t1\t3\t13\t73\t473\t473\t4473\t4473\t146\t147\tBQAAAA\tESOAAA\tAAAAxx\n4016\t9937\t0\t0\t6\t16\t16\t16\t16\t4016\t4016\t32\t33\tMYAAAA\tFSOAAA\tHHHHxx\n8135\t9938\t1\t3\t5\t15\t35\t135\t135\t3135\t8135\t70\t71\tXAAAAA\tGSOAAA\tOOOOxx\n8892\t9939\t0\t0\t2\t12\t92\t892\t892\t3892\t8892\t184\t185\tAEAAAA\tHSOAAA\tVVVVxx\n4850\t9940\t0\t2\t0\t10\t50\t850\t850\t4850\t4850\t100\t101\tOEAAAA\tISOAAA\tAAAAxx\n2545\t9941\t1\t1\t5\t5\t45\t545\t545\t2545\t2545\t90\t91\tXTAAAA\tJSOAAA\tHHHHxx\n3788\t9942\t0\t0\t8\t8\t88\t788\t1788\t3788\t3788\t176\t177\tSPAAAA\tKSOAAA\tOOOOxx\n1672\t9943\t0\t0\t2\t12\t72\t672\t1672\t1672\t1672\t144\t145\tIMAAAA\tLSOAAA\tVVVVxx\n3664\t9944\t0\t0\t4\t4\t64\t664\t1664\t3664\t3664\t128\t129\tYKAAAA\tMSOAAA\tAAAAxx\n3775\t9945\t1\t3\t5\t15\t75\t775\t1775\t3775\t3775\t150\t151\tFPAAAA\tNSOAAA\tHHHHxx\n3103\t9946\t1\t3\t3\t3\t3\t103\t1103\t3103\t3103\t6\t7\tJPAAAA\tOSOAAA\tOOOOxx\n9335\t9947\t1\t3\t5\t15\t35\t335\t1335\t4335\t9335\t70\t71\tBVAAAA\tPSOAAA\tVVVVxx\n9200\t9948\t0\t0\t0\t0\t0\t200\t1200\t4200\t9200\t0\t1\tWPAAAA\tQSOAAA\tAAAAxx\n8665\t9949\t1\t1\t5\t5\t65\t665\t665\t3665\t8665\t130\t131\tHVAAAA\tRSOAAA\tHHHHxx\n1356\t9950\t0\t0\t6\t16\t56\t356\t1356\t1356\t1356\t112\t113\tEAAAAA\tSSOAAA\tOOOOxx\n6118\t9951\t0\t2\t8\t18\t18\t118\t118\t1118\t6118\t36\t37\tIBAAAA\tTSOAAA\tVVVVxx\n4605\t9952\t1\t1\t5\t5\t5\t605\t605\t4605\t4605\t10\t11\tDVAAAA\tUSOAAA\tAAAAxx\n5651\t9953\t1\t3\t1\t11\t51\t651\t1651\t651\t5651\t102\t103\tJJAAAA\tVSOAAA\tHHHHxx\n9055\t9954\t1\t3\t5\t15\t55\t55\t1055\t4055\t9055\t110\t111\tHKAAAA\tWSOAAA\tOOOOxx\n8461\t9955\t1\t1\t1\t1\t61\t461\t461\t3461\t8461\t122\t123\tLNAAAA\tXSOAAA\tVVVVxx\n6107\t9956\t1\t3\t7\t7\t7\t107\t107\t1107\t6107\t14\t15\tXAAAAA\tYSOAAA\tAAAAxx\n1967\t9957\t1\t3\t7\t7\t67\t967\t1967\t1967\t1967\t134\t135\tRXAAAA\tZSOAAA\tHHHHxx\n8910\t9958\t0\t2\t0\t10\t10\t910\t910\t3910\t8910\t20\t21\tSEAAAA\tATOAAA\tOOOOxx\n8257\t9959\t1\t1\t7\t17\t57\t257\t257\t3257\t8257\t114\t115\tPFAAAA\tBTOAAA\tVVVVxx\n851\t9960\t1\t3\t1\t11\t51\t851\t851\t851\t851\t102\t103\tTGAAAA\tCTOAAA\tAAAAxx\n7823\t9961\t1\t3\t3\t3\t23\t823\t1823\t2823\t7823\t46\t47\tXOAAAA\tDTOAAA\tHHHHxx\n3208\t9962\t0\t0\t8\t8\t8\t208\t1208\t3208\t3208\t16\t17\tKTAAAA\tETOAAA\tOOOOxx\n856\t9963\t0\t0\t6\t16\t56\t856\t856\t856\t856\t112\t113\tYGAAAA\tFTOAAA\tVVVVxx\n2654\t9964\t0\t2\t4\t14\t54\t654\t654\t2654\t2654\t108\t109\tCYAAAA\tGTOAAA\tAAAAxx\n7185\t9965\t1\t1\t5\t5\t85\t185\t1185\t2185\t7185\t170\t171\tJQAAAA\tHTOAAA\tHHHHxx\n309\t9966\t1\t1\t9\t9\t9\t309\t309\t309\t309\t18\t19\tXLAAAA\tITOAAA\tOOOOxx\n9752\t9967\t0\t0\t2\t12\t52\t752\t1752\t4752\t9752\t104\t105\tCLAAAA\tJTOAAA\tVVVVxx\n6405\t9968\t1\t1\t5\t5\t5\t405\t405\t1405\t6405\t10\t11\tJMAAAA\tKTOAAA\tAAAAxx\n6113\t9969\t1\t1\t3\t13\t13\t113\t113\t1113\t6113\t26\t27\tDBAAAA\tLTOAAA\tHHHHxx\n9774\t9970\t0\t2\t4\t14\t74\t774\t1774\t4774\t9774\t148\t149\tYLAAAA\tMTOAAA\tOOOOxx\n1674\t9971\t0\t2\t4\t14\t74\t674\t1674\t1674\t1674\t148\t149\tKMAAAA\tNTOAAA\tVVVVxx\n9602\t9972\t0\t2\t2\t2\t2\t602\t1602\t4602\t9602\t4\t5\tIFAAAA\tOTOAAA\tAAAAxx\n1363\t9973\t1\t3\t3\t3\t63\t363\t1363\t1363\t1363\t126\t127\tLAAAAA\tPTOAAA\tHHHHxx\n6887\t9974\t1\t3\t7\t7\t87\t887\t887\t1887\t6887\t174\t175\tXEAAAA\tQTOAAA\tOOOOxx\n6170\t9975\t0\t2\t0\t10\t70\t170\t170\t1170\t6170\t140\t141\tIDAAAA\tRTOAAA\tVVVVxx\n8888\t9976\t0\t0\t8\t8\t88\t888\t888\t3888\t8888\t176\t177\tWDAAAA\tSTOAAA\tAAAAxx\n2981\t9977\t1\t1\t1\t1\t81\t981\t981\t2981\t2981\t162\t163\tRKAAAA\tTTOAAA\tHHHHxx\n7369\t9978\t1\t1\t9\t9\t69\t369\t1369\t2369\t7369\t138\t139\tLXAAAA\tUTOAAA\tOOOOxx\n6227\t9979\t1\t3\t7\t7\t27\t227\t227\t1227\t6227\t54\t55\tNFAAAA\tVTOAAA\tVVVVxx\n8002\t9980\t0\t2\t2\t2\t2\t2\t2\t3002\t8002\t4\t5\tUVAAAA\tWTOAAA\tAAAAxx\n4288\t9981\t0\t0\t8\t8\t88\t288\t288\t4288\t4288\t176\t177\tYIAAAA\tXTOAAA\tHHHHxx\n5136\t9982\t0\t0\t6\t16\t36\t136\t1136\t136\t5136\t72\t73\tOPAAAA\tYTOAAA\tOOOOxx\n1084\t9983\t0\t0\t4\t4\t84\t84\t1084\t1084\t1084\t168\t169\tSPAAAA\tZTOAAA\tVVVVxx\n9117\t9984\t1\t1\t7\t17\t17\t117\t1117\t4117\t9117\t34\t35\tRMAAAA\tAUOAAA\tAAAAxx\n2406\t9985\t0\t2\t6\t6\t6\t406\t406\t2406\t2406\t12\t13\tOOAAAA\tBUOAAA\tHHHHxx\n1384\t9986\t0\t0\t4\t4\t84\t384\t1384\t1384\t1384\t168\t169\tGBAAAA\tCUOAAA\tOOOOxx\n9194\t9987\t0\t2\t4\t14\t94\t194\t1194\t4194\t9194\t188\t189\tQPAAAA\tDUOAAA\tVVVVxx\n858\t9988\t0\t2\t8\t18\t58\t858\t858\t858\t858\t116\t117\tAHAAAA\tEUOAAA\tAAAAxx\n8592\t9989\t0\t0\t2\t12\t92\t592\t592\t3592\t8592\t184\t185\tMSAAAA\tFUOAAA\tHHHHxx\n4773\t9990\t1\t1\t3\t13\t73\t773\t773\t4773\t4773\t146\t147\tPBAAAA\tGUOAAA\tOOOOxx\n4093\t9991\t1\t1\t3\t13\t93\t93\t93\t4093\t4093\t186\t187\tLBAAAA\tHUOAAA\tVVVVxx\n6587\t9992\t1\t3\t7\t7\t87\t587\t587\t1587\t6587\t174\t175\tJTAAAA\tIUOAAA\tAAAAxx\n6093\t9993\t1\t1\t3\t13\t93\t93\t93\t1093\t6093\t186\t187\tJAAAAA\tJUOAAA\tHHHHxx\n429\t9994\t1\t1\t9\t9\t29\t429\t429\t429\t429\t58\t59\tNQAAAA\tKUOAAA\tOOOOxx\n5780\t9995\t0\t0\t0\t0\t80\t780\t1780\t780\t5780\t160\t161\tIOAAAA\tLUOAAA\tVVVVxx\n1783\t9996\t1\t3\t3\t3\t83\t783\t1783\t1783\t1783\t166\t167\tPQAAAA\tMUOAAA\tAAAAxx\n2992\t9997\t0\t0\t2\t12\t92\t992\t992\t2992\t2992\t184\t185\tCLAAAA\tNUOAAA\tHHHHxx\n0\t9998\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t1\tAAAAAA\tOUOAAA\tOOOOxx\n2968\t9999\t0\t0\t8\t8\t68\t968\t968\t2968\t2968\t136\t137\tEKAAAA\tPUOAAA\tVVVVxx\n"
  },
  {
    "path": "sqlite_data_norm.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * SQLite functions for data normalization\n * This functions are used for mixed affinity inputs for PostgreSQL data column.\n *\n * Most of UUID functions are implemented here according\n * the uuid SQLite extension, Public Domain\n * https://www.sqlite.org/src/file/ext/misc/uuid.c\n *\n * IDENTIFICATION\n * \t\tsqlite_data_norm.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <ctype.h>\n#include <string.h>\n#include <math.h>\n\n#include \"sqlite3.h\"\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n#include \"utils/uuid.h\"\n\nstatic void error_catcher(sqlite3* db, int rc);\nstatic bool infinity_processing (double* d, const char* t);\n\n/* Also used for BLOBs in sqlite_gis.c */\nconst char hex_dig[] = \"0123456789abcdef\";\n\n#if !defined(SQLITE_ASCII) && !defined(SQLITE_EBCDIC)\n#define SQLITE_ASCII 1\n#endif\n\n#define PARSE_MACADDR(format) \\\nif (count != MACADDR_LEN)  \\\n\tcount = sscanf(str, format, &a, &b, &c, &d, &e, &f, junk);\n\n#define PARSE_MACADDR8(format) \\\nif (count != MACADDR8_LEN)  \\\n\tcount = sscanf(str, format, &a, &b, &c, &d, &e, &f, &g, &h, junk);\n\n/*\n * This UUID SQLite extension as a group of UUID C functions\n * implements functions that handling RFC-4122 UUIDs\n * Three SQL functions are implemented:\n *\n *\t sqlite_fdw_uuid_str(X)   - convert a UUID X into a well-formed UUID string\n *\t sqlite_fdw_uuid_blob(X)  - convert a UUID X into a 16-byte blob\n *\n * The output from sqlite_fdw_uuid_str(X) are always well-formed\n * RFC-4122 UUID strings in this format:\n *\n *\t\txxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx\n *\n * All of the 'x', 'M', and 'N' values are lower-case hexadecimal digits.\n * The M digit indicates the \"version\".  For uuid4()-generated UUIDs, the\n * version is always \"4\" (a random UUID).  The upper three bits of N digit\n * are the \"variant\".  This library only supports variant 1 (indicated\n * by values of N between '8' and 'b') as those are overwhelming the most\n * common.  Other variants are for legacy compatibility only.\n *\n * The output of sqlite_fdw_uuid_blob(X) is always a 16-byte blob. The UUID input\n * string is converted in network byte order (big-endian) in accordance\n * with RFC-4122 specifications for variant-1 UUIDs.  Note that network\n * byte order is *always* used, even if the input self-identifies as a\n * variant-2 UUID.\n *\n * The input X to the sqlite_fdw_uuid_blob() function can be either\n * a string or a BLOB. If it is a BLOB it must be exactly 16 bytes in\n * length or else a NULL is returned.  If the input is a string it must\n * consist of 32 hexadecimal digits, upper or lower case, optionally\n * surrounded by {...} and with optional \"-\" characters interposed in the\n * middle.  The flexibility of input is inspired by the PostgreSQL\n * implementation of UUID functions that accept in all of the following\n * formats:\n *\n *\t A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11\n *\t {a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}\n *\t a0eebc999c0b4ef8bb6d6bb9bd380a11\n *\t a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11\n *\t {a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}\n *\n * Output of sqlite_fdw_uuid_str() always will be\n * in the canonical RFC-4122 format:\n *\n *\t a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11\n *\n * If the X input string has too few or too many digits or contains\n * stray characters other than {, }, or -, then NULL is returned.\n */\n\n/*\n * Translate a single byte of Hex into an integer.\n * This routine only works if h really is a valid hexadecimal\n * character:  0..9a..fA..F\n */\nstatic unsigned char\nsqlite_fdw_data_norm_UuidHexToInt(int h)\n{\n\tassert((h >= '0' && h <= '9') || (h >= 'a' && h <= 'f') || (h >= 'A' && h <= 'F'));\n#ifdef SQLITE_ASCII\n\th += 9 * (1 & (h >> 6));\n#endif\n#ifdef SQLITE_EBCDIC\n\th += 9 * (1 & ~(h >> 4));\n#endif\n\treturn (unsigned char)(h & 0xf);\n}\n\n/*\n * Attempt to parse a zero-terminated input string zs into a binary\n * UUID.  Return 1 on success, or 0 if the input string is not\n * parsable.\n */\nstatic int\nsqlite_fdw_uuid_blob (const unsigned char* s0, unsigned char* Blob)\n{\n\tint i;\n\tunsigned char* s = (unsigned char*)s0;\n\tif (s[0] == '{')\n\t\ts++;\n\tfor (i = 0; i < 16; i++)\n\t{\n\t\tif (s[0] == '-')\n\t\t\ts++;\n\t\tif (isxdigit(s[0]) && isxdigit(s[1]))\n\t\t{\n\t\t\tBlob[i] = (sqlite_fdw_data_norm_UuidHexToInt(s[0]) << 4) + sqlite_fdw_data_norm_UuidHexToInt(s[1]);\n\t\t\ts += 2;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t}\n\tif (s[0] == '}')\n\t\ts++;\n\treturn s[0] == 0;\n}\n\n/*\n * uuid_generate generates a version 4 UUID as a string\n *\n *static void uuid_generate(sqlite3_context* context, int argc, sqlite3_value** argv)\n *{\n *   unsigned char aBlob[16];\n *   unsigned char zs[37];\n *   sqlite3_randomness(16, aBlob);\n *   aBlob[6] = (aBlob[6] & 0x0f) + 0x40;\n *   aBlob[8] = (aBlob[8] & 0x3f) + 0x80;\n *   sqlite_fdw_data_norm_uuid_blob_to_str(aBlob, zs);\n *   sqlite3_result_text(context, (char*)zs, 36, SQLITE_TRANSIENT);\n *}\n */\n\n/*\n * aBlob to RFC UUID string with 36 characters\n */\n\nstatic void\nsqlite3UuidBlobToStr( const unsigned char *aBlob, unsigned char *zs)\n{\n\tunsigned char x;\n\tint i = 0, k=0x550;\n\tfor(; i < UUID_LEN; i++, k = k >> 1)\n\t{\n\t\tif( k&1 )\n\t\t{\n\t\t\tzs[0] = '-';\n\t\t\tzs++;\n\t\t}\n\t\tx = aBlob[i];\n\t\tzs[0] = hex_dig[x>>4];\n\t\tzs[1] = hex_dig[x&0xf];\n\t\tzs += 2;\n\t}\n\t*zs = 0;\n}\n\n/*\n * Converts argument BLOB-UUID into a well-formed UUID string.\n * X can be either a string or a blob.\n */\nstatic void\nsqlite_fdw_uuid_str(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tunsigned char aBlob[UUID_LEN];\n\tconst unsigned char* pBlob;\n\tunsigned char zs[UUID_LEN * 2 + 1];\n\tsqlite3_value* arg = argv[0];\n\tint t = sqlite3_value_type(arg);\n\n\tif (t == SQLITE_BLOB)\n\t{\n\t\tpBlob = sqlite3_value_blob(arg);\n\t}\n\telse if (t == SQLITE3_TEXT)\n\t{\n\t\tconst unsigned char* txt = sqlite3_value_text(arg);\n\t\tif (sqlite_fdw_uuid_blob(txt, aBlob))\n\t\t\tpBlob = aBlob;\n\t\telse\n\t\t{\n\t\t\tsqlite3_result_null(context);\n\t\t\treturn;\n\t\t}\n\t}\n\telse\n\t{\n\t\tsqlite3_result_null(context);\n\t\treturn;\n\t}\n\n\tsqlite3UuidBlobToStr(pBlob, zs);\n\tsqlite3_result_text(context, (char*)zs, 36, SQLITE_TRANSIENT);\n}\n\n/*\n * sqlite_fdw_data_norm_uuid normalize text or blob UUID argv[0] into a 16-byte blob.\n */\nstatic void\nsqlite_fdw_data_norm_uuid(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tunsigned char aBlob[16];\n\tsqlite3_value* arg = argv[0];\n\n\tif (sqlite3_value_type(argv[0]) == SQLITE3_TEXT)\n\t{\n\t\tconst unsigned char* txt = sqlite3_value_text(arg);\n\t\tif (sqlite_fdw_uuid_blob(txt, aBlob))\n\t\t{\n\t\t\tsqlite3_result_blob(context, aBlob, 16, SQLITE_TRANSIENT);\n\t\t\treturn;\n\t\t}\n\t}\n\tsqlite3_result_value(context, arg);\n}\n\n/* ********************* End of UUID SQLite extension *********************** */\n\n/*\n * ISO:SQL valid boolean values with text affinity such as Y, no, f, t, oN etc.\n * will be treated as boolean like in PostgreSQL console input\n */\nstatic void\nsqlite_fdw_data_norm_bool(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\n\tsqlite3_value* arg = argv[0];\n\tint dt = sqlite3_value_type(arg);\n\tconst char* t;\n\tint l;\n\n\tif (dt == SQLITE_INTEGER)\n\t{\n\t\t/* The fastest call because expected very often */\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\tif (dt != SQLITE3_TEXT && dt != SQLITE_BLOB )\n\t{\n\t\t/* NULL, FLOAT */\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\tl = sqlite3_value_bytes(arg);\n\tif (l > 5)\n\t{\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\n\tt = (const char*)sqlite3_value_text(arg);\n\n\tif ( l == 1 )\n\t{\n\t\tif (strcasecmp(t, \"t\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"f\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 0);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"y\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"n\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 0);\n\t\t\treturn;\n\t\t}\n\t\t/* rare but possible cases */\n\t\tif (strcasecmp(t, \"1\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"0\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 0);\n\t\t\treturn;\n\t\t}\n\t}\n\telse if ( l == 2 )\n\t{\n\t\tif (strcasecmp(t, \"on\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"no\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 0);\n\t\t\treturn;\n\t\t}\n\t}\n\telse if ( l == 3 )\n\t{\n\t\tif (strcasecmp(t, \"yes\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 1);\n\t\t\treturn;\n\t\t}\n\t\tif (strcasecmp(t, \"off\") == 0)\n\t\t{\n\t\t\tsqlite3_result_int(context, 0);\n\t\t\treturn;\n\t\t}\n\t}\n\telse if ( l == 4 && strcasecmp(t, \"true\") == 0)\n\t{\n\t\tsqlite3_result_int(context, 1);\n\t\treturn;\n\t}\n\telse if ( l == 5 && strcasecmp(t, \"false\") == 0)\n\t{\n\t\tsqlite3_result_int(context, 0);\n\t\treturn;\n\t}\n\tsqlite3_result_value(context, arg);\n}\n\n/* Base ∞ constants */\nconst char * infs = \"Inf\";\nconst char * infl = \"Infinity\";\n\n/*\n * Try to check SQLite value if there is any ∞ value with text affinity\n */\nstatic bool\ninfinity_processing (double* d, const char* t)\n{\n\tstatic const char * neg_infs = \"-Inf\";\n\tstatic const char * neg_infl = \"-Infinity\";\n\tstatic const char * pos_infs = \"+Inf\";\n\tstatic const char * pos_infl = \"+Infinity\";\n\n\tif (strcasecmp(t, infs) == 0 ||\n\t\tstrcasecmp(t, pos_infs) == 0 ||\n\t\tstrcasecmp(t, infl) == 0 ||\n\t\tstrcasecmp(t, pos_infl) == 0)\n\t{\n\t\t*d = INFINITY;\n\t\treturn true;\n\t}\n\tif (strcasecmp(t, neg_infs) == 0 ||\n\t\tstrcasecmp(t, neg_infl) == 0)\n\t{\n\t\t*d = -INFINITY;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n/*\n * ISO:SQL valid float/double precision values with text affinity such as Infinity or Inf\n * will be treated as float like in PostgreSQL console input\n * Note: SQLite also have Infinity support with real affinity, but this values\n * isn't suitable for insert, there is any overflow number instead\n */\nstatic void\nsqlite_fdw_data_norm_float(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tsqlite3_value* arg = argv[0];\n\tint dt = sqlite3_value_type(arg);\n\tint l;\n\tconst char* t = NULL;\n\tdouble result;\n\n\tif (dt == SQLITE_FLOAT)\n\t{\n\t\t/* The fastest call because expected very often */\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\tif (dt != SQLITE3_TEXT && dt != SQLITE_BLOB )\n\t{\n\t\t/* INT, NULL*/\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\n\tl = sqlite3_value_bytes(arg);\n\tif (l > strlen(infl) + 2 || l < strlen(infs))\n\t{\n\t\tsqlite3_result_value(context, arg);\n\t\treturn;\n\t}\n\tt = (const char*)sqlite3_value_text(arg);\n\tif (infinity_processing (&result, t))\n\t{\n\t\tsqlite3_result_double(context, result);\n\t\treturn;\n\t}\n\tsqlite3_result_value(context, arg);\n}\n\n/*\n * Converts argument int64-MAC address into a well-formed MAC address string.\n */\nstatic void\nsqlite_fdw_macaddr_str(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tsqlite3_value* arg = argv[0];\n\tsqlite3_value* len_arg = argv[1];\n\tint val_aff = sqlite3_value_type(arg);\n\tint len = 0;\n\n\tif (sqlite3_value_type(len_arg) != SQLITE_INTEGER)\n\t{\n\t\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t errmsg(\"no mac address length argument in BLOB creating function %s\", __func__)));\n\t}\n\n\tlen = sqlite3_value_int(len_arg);\n\tif (val_aff != SQLITE_INTEGER || (len !=MACADDR_LEN && len !=MACADDR8_LEN))\n\t{\n\t\tereport(ERROR,\n\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t errmsg(\"internal mac deparse error or SQLite input have not 'int' affinity\")));\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tint\t\t\t\treslen = len * 4;\n\t\tchar\t\t   *result = (char *) palloc(reslen);\n\t\tsqlite3_int64\tvalue = sqlite3_value_int64(arg);\n\n\t\tif (len == MACADDR_LEN )\n\t\t{\n\t\t\tsnprintf(result, reslen, \"%02x:%02x:%02x:%02x:%02x:%02x\",\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 5)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 4)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 3)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 2)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 1)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 0)) & 0xFF));\n\t\t}\n\t\telse if (len == MACADDR8_LEN )\n\t\t{\n\t\t\tsnprintf(result, reslen, \"%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\",\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 7)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 6)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 5)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 4)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 3)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 2)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 1)) & 0xFF),\n  \t\t\t\t(unsigned char)((value >> (CHAR_BIT * 0)) & 0xFF));\n\t\t}\n\t\tsqlite3_result_text(context, (char*)result, reslen, SQLITE_TRANSIENT);\n\t}\n}\n\n/*\n * Attempt to parse a zero-terminated input string zs into a int64\n * as 6 bytes MAC address. Return 1 if ok, or 0 if the input string is not\n * parsable.\n */\nstatic int\nsqlite_fdw_macaddr6_int (const unsigned char* s, sqlite_uint64*\ti)\n{\n\t int\t\t a,\n\t\t\t\t b,\n\t\t\t\t c,\n\t\t\t\t d,\n\t\t\t\t e,\n\t\t\t\t f;\n\t char\t\t junk[2];\n\t int\t\t count = 0;\n\t const char* str = (const char*)s;\n\n\t /* %1s matches if there is trailing non-whitespace garbage */\n\t PARSE_MACADDR(\"%x:%x:%x:%x:%x:%x%1s\");\n\t PARSE_MACADDR(\"%x-%x-%x-%x-%x-%x%1s\");\n\t PARSE_MACADDR(\"%2x%2x%2x:%2x%2x%2x%1s\");\n\t PARSE_MACADDR(\"%2x%2x%2x-%2x%2x%2x%1s\");\n\t PARSE_MACADDR(\"%2x%2x.%2x%2x.%2x%2x%1s\");\n\t PARSE_MACADDR(\"%2x%2x-%2x%2x-%2x%2x%1s\");\n\t PARSE_MACADDR(\"%2x%2x%2x%2x%2x%2x%1s\");\n\t if (count != MACADDR_LEN)\n\t\treturn false;\n\n\tif ((a < 0) || (a > 255) ||\n\t\t(b < 0) || (b > 255) ||\n\t\t(c < 0) || (c > 255) ||\n\t\t(d < 0) || (d > 255) ||\n\t\t(e < 0) || (e > 255) ||\n\t\t(f < 0) || (f > 255) )\n\t\treturn false;\n\n\t*i = (((sqlite_int64)a) << 40) +\n\t\t(((sqlite_int64)b) << 32) +\n\t\t(c<<24) +\n\t\t(d<<16) +\n\t\t(e<<8) +\n\t\tf;\n\treturn true;\n}\n\n/*\n * Attempt to parse a zero-terminated input string zs into a int64\n * as 8 bytes MAC address. Return 1 if ok, or 0 if the input string is not\n * parsable.\n */\nstatic int\nsqlite_fdw_macaddr8_int (const unsigned char* s, sqlite_uint64*\ti)\n{\n\t int \t\t a,\n\t\t\t\t b,\n\t\t\t\t c,\n\t\t\t\t d,\n\t\t\t\t e,\n\t\t\t\t f,\n\t\t\t\t g,\n\t\t\t\t h;\n\t char   \t junk[2];\n\t int\t\t count = 0;\n\t const char* str = (const char*)s;\n\n\t /* %1s matches if there is trailing non-whitespace garbage */\n \t PARSE_MACADDR8(\"%x:%x:%x:%x:%x:%x:%x:%x%1s\");\n\t PARSE_MACADDR8(\"%x-%x-%x-%x-%x-%x-%x-%x%1s\");\n\t PARSE_MACADDR8(\"%2x%2x%2x%2x:%2x%2x%2x%2x%1s\");\n\t PARSE_MACADDR8(\"%2x%2x%2x%2x-%2x%2x%2x%2x%1s\");\n\t PARSE_MACADDR8(\"%2x%2x.%2x%2x.%2x%2x.%2x%2x%1s\");\n\t PARSE_MACADDR8(\"%2x%2x-%2x%2x-%2x%2x-%2x%2x%1s\");\n\t PARSE_MACADDR8(\"%2x%2x%2x%2x%2x%2x%2x%2x%1s\");\n\t if (count != MACADDR8_LEN)\n\t\treturn false;\n\n\t if ((a < 0) || (a > 255) ||\n\t \t (b < 0) || (b > 255) ||\n\t \t (c < 0) || (c > 255) ||\n\t \t (d < 0) || (d > 255) ||\n\t\t (e < 0) || (e > 255) ||\n\t\t (f < 0) || (f > 255) ||\n   \t\t (g < 0) || (g > 255) ||\n\t\t (h < 0) || (h > 255) )\n\t\treturn false;\n\n\t*i = (((sqlite_int64)a) << 56) +\n\t\t(((sqlite_int64)b) << 48) +\n\t\t(((sqlite_int64)c) << 40) +\n\t\t(((sqlite_int64)d) << 32) +\n\t\t(e<<24) +\n\t\t(f<<16) +\n\t\t(g<<8) +\n\t\th;\n\treturn true;\n}\n\n/*\n * sqlite_fdw_data_norm_macaddr normalize text or ineger or blob macaddr argv[0] into 6 or 8 byte blob.\n */\nstatic void\nsqlite_fdw_data_norm_macaddr(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tsqlite3_value* val_arg = argv[0];\n\tsqlite3_value* len_arg = argv[1];\n\tint val_aff = sqlite3_value_type(val_arg);\n\tint len = 0;\n\n\tif (val_aff == SQLITE_INTEGER)\n\t{\n\t\t/* the fastest call for typical case */\n\t\tsqlite3_result_value(context, val_arg);\n\t\treturn;\n\t}\n\n\tif (sqlite3_value_type(len_arg) != SQLITE_INTEGER)\n\t{\n\t\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t errmsg(\"no mac address length argument in MAC addr blob creating function %s\", __func__)));\n\t}\n\n\tlen = sqlite3_value_int(len_arg);\n\n\tif (val_aff == SQLITE3_TEXT)\n\t{\n\t\tconst unsigned char* txt = sqlite3_value_text(val_arg);\n\t\tsqlite3_uint64 mac_int = 0;\n\t\tint res = (len == MACADDR_LEN) ? sqlite_fdw_macaddr6_int(txt, &mac_int) : sqlite_fdw_macaddr8_int(txt, &mac_int);\n\t\tif (res)\n\t\t{\n\t\t\tsqlite3_result_int64(context, mac_int);\n\t\t\treturn;\n\t\t}\n\t}\n\telse if (val_aff == SQLITE_BLOB)\n\t{\n\t\tconst unsigned char*\tpBlob = sqlite3_value_blob(val_arg);\n\t\tint\t\t\t\t\t\tl_blob = sqlite3_value_bytes(val_arg);\n\t\tsqlite3_uint64\t\t\tres = 0;\n\n\t\tif (len == MACADDR_LEN)\n\t\t{\n\t\t\tif (l_blob != MACADDR_LEN)\n\t\t\t{\n\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\terrmsg(\"PostgreSQL macaddr data type allows only %d bytes SQLite blob value\", MACADDR_LEN)));\n\t\t\t}\n\t\t\tres = (((sqlite_int64)(pBlob[0])) << (CHAR_BIT *5)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[1])) << (CHAR_BIT *4)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[2])) << (CHAR_BIT *3)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[3])) << (CHAR_BIT *2)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[4])) << (CHAR_BIT *1)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[5])) << (CHAR_BIT *0));\n\t\t}\n\t\telse if (len == MACADDR8_LEN)\n\t\t{\n\t\t\tif (l_blob != MACADDR8_LEN)\n\t\t\t{\n\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\terrmsg(\"PostgreSQL macaddr8 data type allows only %d bytes SQLite blob value\", MACADDR8_LEN)));\n\t\t\t}\n\t\t\tres = (((sqlite_int64)(pBlob[0])) << (CHAR_BIT *7)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[1])) << (CHAR_BIT *6)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[2])) << (CHAR_BIT *5)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[3])) << (CHAR_BIT *4)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[4])) << (CHAR_BIT *3)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[5])) << (CHAR_BIT *2)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[6])) << (CHAR_BIT *1)) +\n\t\t\t\t  (((sqlite_int64)(pBlob[7])) << (CHAR_BIT *0));\n\t\t}\n\t\tsqlite3_result_int64(context, res);\n\t\treturn;\n\t}\n\tsqlite3_result_value(context, val_arg);\n}\n\n/*\n * Converts argument int-MAC address (both 6 or 8 bytes) to MAC-BLOB address integer.\n */\nstatic void\nsqlite_fdw_macaddr_blob(sqlite3_context* context, int argc, sqlite3_value** argv)\n{\n\tsqlite3_value* arg = argv[0];\n\tsqlite3_value* len_arg = argv[1];\n\tint val_aff = sqlite3_value_type(arg);\n\tint len = 0;\n\n\tif (sqlite3_value_type(len_arg) != SQLITE_INTEGER)\n\t{\n\t\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t errmsg(\"no mac address length argument in MAC addr blob creating function %s\", __func__)));\n\t}\n\n\tlen = sqlite3_value_int(len_arg);\n\tif (val_aff != SQLITE_INTEGER || (len != MACADDR_LEN && len != MACADDR8_LEN))\n\t{\n\t\tereport(ERROR,\n\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t errmsg(\"internal mac deparse error or SQLite input have not 'int' affinity\")));\n\t\treturn;\n\t}\n\n\tif (val_aff == SQLITE_INTEGER)\n\t{\n\t\tunsigned char aBlob[MACADDR8_LEN]; /* max possible, even for macaddr */\n\t\tsqlite_uint64 v = sqlite3_value_int64(arg);\n\t\tint\t\t\t  i;\n\n\t\tfor (i = len - 1; i >=0; i--)\n\t\t{\n\t\t\tint s = CHAR_BIT*i;\n\t\t\taBlob[len-i-1] = (v >> s) & 0xff;\n\t\t}\n\n\t\tif (len == MACADDR_LEN)\n\t\t\tsqlite3_result_blob(context, aBlob, MACADDR_LEN, SQLITE_TRANSIENT);\n\t\telse\n\t\t\tsqlite3_result_blob(context, aBlob, MACADDR8_LEN, SQLITE_TRANSIENT);\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tereport(ERROR,\n\t\t\t(errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t errmsg(\"wrong mac address length argument %d in MAC addr blob creating function %s\", len, __func__)));\n\t}\n}\n\n/*\n * Makes pg error from SQLite error.\n * Interrupts normal executing, no need return after place of calling\n */\nstatic void\nerror_catcher(sqlite3* db, int rc)\n{\n\tif (rc == SQLITE_OK)\n\t\treturn;\n\telse\n\t{\n\t\tconst char * err = sqlite3_errmsg(db);\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t errmsg(\"failed to create data unifying functions for SQLite DB\"),\n\t\t\t\t errhint(\"%s \\n SQLite code %d\", err, rc)));\n\t}\n}\n\n/*\n * Add data normalization fuctions to SQLite internal namespace for calling\n * in deparse context.\n * This is main function of internal SQLite extension presented in this file.\n */\nvoid\nsqlite_fdw_data_norm_functs_init(sqlite3* db)\n{\n\tstatic const int det_flags = SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC;\n\n\tint rc = sqlite3_create_function(db, \"sqlite_fdw_uuid_blob\", 1, det_flags, 0, sqlite_fdw_data_norm_uuid, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_uuid_str\", 1, det_flags, 0, sqlite_fdw_uuid_str, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_bool\", 1, det_flags, 0, sqlite_fdw_data_norm_bool, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_float\", 1, det_flags, 0, sqlite_fdw_data_norm_float, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_macaddr_int\", 2, det_flags, 0, sqlite_fdw_data_norm_macaddr, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_macaddr_str\", 2, det_flags, 0, sqlite_fdw_macaddr_str, 0, 0);\n\terror_catcher(db, rc);\n\trc = sqlite3_create_function(db, \"sqlite_fdw_macaddr_blob\", 2, det_flags, 0, sqlite_fdw_macaddr_blob, 0, 0);\n\terror_catcher(db, rc);\n\n\t/*\n\t *\tstatic const int flags = SQLITE_UTF8 | SQLITE_INNOCUOUS;\n\t *\tsqlite3_create_function(db, \"uuid_generate_v4\", 0, flags, 0, uuid_generate, 0, 0);\n\t *\tsqlite3_create_function(db, \"gen_random_uuid\", 1, flags, 0, uuid_generate, 0, 0);\n\t *\n\t * no rc because in future SQLite releases it can be added UUID generation function\n\t * PostgreSQL 13+, no gen_random_uuid() before\n\t */\n}\n"
  },
  {
    "path": "sqlite_fdw--1.0--1.1.sql",
    "content": "/* contrib/sqlite_fdw/sqlite_fdw--1.0--1.1.sql */\n\n-- complain if script is sourced in psql, rather than via ALTER EXTENSION\n\\echo Use \"ALTER EXTENSION sqlite_fdw UPDATE TO '1.1'\" to load this file. \\quit\n\nCREATE FUNCTION sqlite_fdw_get_connections (OUT server_name text,\n    OUT valid boolean)\nRETURNS SETOF record\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT PARALLEL RESTRICTED;\n\nCREATE FUNCTION sqlite_fdw_disconnect (text)\nRETURNS bool\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT PARALLEL RESTRICTED;\n\nCOMMENT ON FUNCTION sqlite_fdw_disconnect(text)\nIS 'closes a SQLite connection by name of FOREIGN SERVER';\n\nCREATE FUNCTION sqlite_fdw_disconnect_all ()\nRETURNS bool\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT PARALLEL RESTRICTED;\n\nCOMMENT ON FUNCTION sqlite_fdw_disconnect_all()\nIS 'closes all opened SQLite connections';\n\nCOMMENT ON FUNCTION sqlite_fdw_handler()\nIS 'SQLite foreign data wrapper handler';\n\nCOMMENT ON FUNCTION sqlite_fdw_validator(text[], oid)\nIS 'SQLite foreign data wrapper options validator';\n\nCOMMENT ON FOREIGN DATA WRAPPER sqlite_fdw\nIS 'SQLite foreign data wrapper';\n\nCREATE OR REPLACE FUNCTION sqlite_fdw_sqlite_version()\nRETURNS int\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT VOLATILE PARALLEL SAFE;\n\nCOMMENT ON FUNCTION sqlite_fdw_sqlite_version()\nIS 'Returns used SQLite code version';\n\nCREATE OR REPLACE FUNCTION sqlite_fdw_sqlite_code_source()\nRETURNS text\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT VOLATILE PARALLEL SAFE;\n\nCOMMENT ON FUNCTION sqlite_fdw_sqlite_code_source()\nIS 'Returns used SQLite code source with commit point';\n"
  },
  {
    "path": "sqlite_fdw--1.0.sql",
    "content": "/* contrib/sqlite_fdw/sqlite_fdw--1.0.sql */\n\n-- complain if script is sourced in psql, rather than via CREATE EXTENSION\n\\echo Use \"CREATE EXTENSION sqlite_fdw\" to load this file. \\quit\n\nCREATE FUNCTION sqlite_fdw_handler()\nRETURNS fdw_handler\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT;\n\nCREATE FUNCTION sqlite_fdw_validator(text[], oid)\nRETURNS void\nAS 'MODULE_PATHNAME'\nLANGUAGE C STRICT;\n\nCREATE FOREIGN DATA WRAPPER sqlite_fdw\n  HANDLER sqlite_fdw_handler\n  VALIDATOR sqlite_fdw_validator;\n\nCREATE OR REPLACE FUNCTION sqlite_fdw_version()\n  RETURNS pg_catalog.int4 STRICT\n  AS 'MODULE_PATHNAME' LANGUAGE C;\n"
  },
  {
    "path": "sqlite_fdw.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n *        sqlite_fdw.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#include <sqlite3.h>\n\n#include \"catalog/pg_collation.h\"\n#include \"catalog/pg_type.h\"\n#include \"commands/defrem.h\"\n#include \"commands/explain.h\"\n#include \"foreign/fdwapi.h\"\n#include \"funcapi.h\"\n#include \"mb/pg_wchar.h\"\n#include \"miscadmin.h\"\n#include \"nodes/makefuncs.h\"\n#include \"nodes/nodeFuncs.h\"\n#if (PG_VERSION_NUM < 140000)\n\t#include \"optimizer/clauses.h\"\n#endif\n#include \"optimizer/pathnode.h\"\n#if PG_VERSION_NUM >= 120000\n\t#include \"optimizer/appendinfo.h\"\n#endif\n#include \"optimizer/planmain.h\"\n#include \"optimizer/planner.h\"\n#include \"optimizer/cost.h\"\n#if (PG_VERSION_NUM >= 130010 && PG_VERSION_NUM < 140000) || \\\n\t(PG_VERSION_NUM >= 140007 && PG_VERSION_NUM < 150000) || \\\n\t(PG_VERSION_NUM >= 150002)\n\t#include \"optimizer/inherit.h\"\n#endif\n#include \"optimizer/paths.h\"\n#include \"optimizer/prep.h\"\n#include \"optimizer/restrictinfo.h\"\n#include \"optimizer/tlist.h\"\n#include \"parser/parsetree.h\"\n#include \"parser/parse_type.h\"\n#include \"storage/ipc.h\"\n#include \"utils/builtins.h\"\n#include \"utils/formatting.h\"\n#include \"utils/guc.h\"\n#include \"utils/lsyscache.h\"\n#include \"utils/selfuncs.h\"\n\n\nextern PGDLLEXPORT void _PG_init(void);\n\nstatic void sqlite_fdw_exit(int code, Datum arg);\n\nPG_MODULE_MAGIC;\n\n\n/* The number of default estimated rows for table which does not exist in sqlite1_stat1\n * See sqlite3ResultSetOfSelect in select.c of SQLite\n */\n#define DEFAULT_ROW_ESTIMATE 1000000\n#define DEFAULTE_NUM_ROWS\t1000\n#define IS_KEY_COLUMN(A)\t\t((strcmp(A->defname, \"key\") == 0) && \\\n\t\t\t\t\t\t\t\t (strcmp(strVal(A->arg), \"true\") == 0))\n\n\n/* Default CPU cost to start up a foreign query. */\n#define DEFAULT_FDW_STARTUP_COST\t100.0\n\n/* Default CPU cost to process 1 row (above and beyond cpu_tuple_cost). */\n#if PG_VERSION_NUM >= 170000\n#define DEFAULT_FDW_TUPLE_COST 0.2\n#else\n#define DEFAULT_FDW_TUPLE_COST 0.01\n#endif\n\n/* If no remote estimates, assume a sort costs 20% extra */\n#define DEFAULT_FDW_SORT_MULTIPLIER 1.2\n\n/*\n * This enum describes what's kept in the fdw_private list for a ForeignPath.\n * We store:\n *\n * 1) Boolean flag showing if the remote query has the final sort\n * 2) Boolean flag showing if the remote query has the LIMIT clause\n */\nenum FdwPathPrivateIndex\n{\n\t/* has-final-sort flag (as an integer Value node) */\n\tFdwPathPrivateHasFinalSort,\n\t/* has-limit flag (as an integer Value node) */\n\tFdwPathPrivateHasLimit,\n};\n\n/*\n * Indexes of FDW-private information stored in fdw_private lists.\n *\n * These items are indexed with the enum FdwScanPrivateIndex, so an item\n * can be fetched with list_nth().  For example, to get the SELECT statement:\n *\t\tsql = strVal(list_nth(fdw_private, FdwScanPrivateSelectSql));\n */\nenum FdwScanPrivateIndex\n{\n\t/* SQL statement to execute remotely (as a String node) */\n\tFdwScanPrivateSelectSql,\n\t/* Integer list of attribute numbers retrieved by the SELECT */\n\tFdwScanPrivateRetrievedAttrs,\n\t/* Integer representing UPDATE/DELETE target */\n\tFdwScanPrivateForUpdate,\n#if (PG_VERSION_NUM < 100000)\n\t/* rtindex */\n\tFdwScanPrivateRtIndex,\n#endif\n\n\t/*\n\t * String describing join i.e. names of relations being joined and types\n\t * of join, added when the scan is join\n\t */\n\tFdwScanPrivateRelations,\n};\n\n/*\n * Similarly, this enum describes what's kept in the fdw_private list for\n * a ModifyTable node referencing a sqlite_fdw foreign table.  We store:\n *\n * 1) INSERT/UPDATE/DELETE statement text to be sent to the remote server\n * 2) Integer list of target attribute numbers for INSERT/UPDATE\n *\t  (NIL for a DELETE)\n * 3) Length till the end of VALUES clause for INSERT\n *\t  (-1 for a DELETE/UPDATE)\n */\nenum FdwModifyPrivateIndex\n{\n\t/* SQL statement to execute remotely (as a String node) */\n\tFdwModifyPrivateUpdateSql,\n\t/* Integer list of target attribute numbers for INSERT/UPDATE */\n\tFdwModifyPrivateTargetAttnums,\n\t/* Length till the end of VALUES clause (as an Integer node) */\n\tFdwModifyPrivateLen,\n};\n\n/*\n * Similarly, this enum describes what's kept in the fdw_private list for\n * a ForeignScan node that modifies a foreign table directly.  We store:\n *\n * 1) UPDATE/DELETE statement text to be sent to the remote server\n * 2) Boolean flag showing if the remote query has a RETURNING clause\n * 3) Integer list of attribute numbers retrieved by RETURNING, if any\n * 4) Boolean flag showing if we set the command es_processed\n */\nenum FdwDirectModifyPrivateIndex\n{\n\t/* SQL statement to execute remotely (as a String node) */\n\tFdwDirectModifyPrivateUpdateSql,\n\t/* has-returning flag (as a Boolean node) */\n\tFdwDirectModifyPrivateHasReturning,\n\t/* Integer list of attribute numbers retrieved by RETURNING */\n\tFdwDirectModifyPrivateRetrievedAttrs,\n\t/* set-processed flag (as a Boolean node) */\n\tFdwDirectModifyPrivateSetProcessed,\n};\n\nextern PGDLLEXPORT Datum sqlite_fdw_handler(PG_FUNCTION_ARGS);\n\nPG_FUNCTION_INFO_V1(sqlite_fdw_handler);\nPG_FUNCTION_INFO_V1(sqlite_fdw_version);\nPG_FUNCTION_INFO_V1(sqlite_fdw_sqlite_version);\nPG_FUNCTION_INFO_V1(sqlite_fdw_sqlite_code_source);\n\n\nstatic void sqliteGetForeignRelSize(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\tRelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\tOid foreigntableid);\n\nstatic void sqliteGetForeignPaths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t  RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t  Oid foreigntableid);\n\nstatic ForeignScan *sqliteGetForeignPlan(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\t\t Oid foreigntableid,\n\t\t\t\t\t\t\t\t\t\t ForeignPath *best_path,\n\t\t\t\t\t\t\t\t\t\t List *tlist,\n\t\t\t\t\t\t\t\t\t\t List *scan_clauses,\n\t\t\t\t\t\t\t\t\t\t Plan *outer_plan);\n\n\nstatic void sqliteBeginForeignScan(ForeignScanState *node,\n\t\t\t\t\t\t\t\t   int eflags);\n\nstatic TupleTableSlot *sqliteIterateForeignScan(ForeignScanState *node);\n\nstatic void sqliteReScanForeignScan(ForeignScanState *node);\n\nstatic void sqliteEndForeignScan(ForeignScanState *node);\n\n\nstatic void sqliteAddForeignUpdateTargets(\n#if (PG_VERSION_NUM >= 140000)\n\t\t\t\t\t\t\t\t\t\t  PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t  Index rtindex,\n#else\n\t\t\t\t\t\t\t\t\t\t  Query *parsetree,\n#endif\n\t\t\t\t\t\t\t\t\t\t  RangeTblEntry *target_rte,\n\t\t\t\t\t\t\t\t\t\t  Relation target_relation);\n\nstatic List *sqlitePlanForeignModify(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t ModifyTable *plan,\n\t\t\t\t\t\t\t\t\t Index resultRelation,\n\t\t\t\t\t\t\t\t\t int subplan_index);\n\nstatic void sqliteBeginForeignModify(ModifyTableState *mtstate,\n\t\t\t\t\t\t\t\t\t ResultRelInfo *rinfo,\n\t\t\t\t\t\t\t\t\t List *fdw_private,\n\t\t\t\t\t\t\t\t\t int subplan_index,\n\t\t\t\t\t\t\t\t\t int eflags);\n\nstatic TupleTableSlot *sqliteExecForeignInsert(EState *estate,\n\t\t\t\t\t\t\t\t\t\t\t   ResultRelInfo *rinfo,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *slot,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *planSlot);\n#if PG_VERSION_NUM >= 140000\nstatic TupleTableSlot **sqliteExecForeignBatchInsert(EState *estate,\n\t\t\t\t\t\t\t\t\t\t\t\t\t ResultRelInfo *resultRelInfo,\n\t\t\t\t\t\t\t\t\t\t\t\t\t TupleTableSlot **slots,\n\t\t\t\t\t\t\t\t\t\t\t\t\t TupleTableSlot **planSlots,\n\t\t\t\t\t\t\t\t\t\t\t\t\t int *numSlots);\nstatic int\tsqliteGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo);\n#endif\nstatic TupleTableSlot *sqliteExecForeignUpdate(EState *estate,\n\t\t\t\t\t\t\t\t\t\t\t   ResultRelInfo *rinfo,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *slot,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *planSlot);\n\nstatic TupleTableSlot *sqliteExecForeignDelete(EState *estate,\n\t\t\t\t\t\t\t\t\t\t\t   ResultRelInfo *rinfo,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *slot,\n\t\t\t\t\t\t\t\t\t\t\t   TupleTableSlot *planSlot);\n\nstatic void sqliteEndForeignModify(EState *estate,\n\t\t\t\t\t\t\t\t   ResultRelInfo *rinfo);\n\n#if (PG_VERSION_NUM >= 110000)\nstatic void sqliteEndForeignInsert(EState *estate,\n\t\t\t\t\t\t\t\t   ResultRelInfo *resultRelInfo);\nstatic void sqliteBeginForeignInsert(ModifyTableState *mtstate,\n\t\t\t\t\t\t\t\t\t ResultRelInfo *resultRelInfo);\n#endif\n\nstatic void sqliteExplainForeignScan(ForeignScanState *node,\n\t\t\t\t\t\t\t\t\t struct ExplainState *es);\n\n\nstatic void sqliteExplainForeignModify(ModifyTableState *mtstate,\n\t\t\t\t\t\t\t\t\t   ResultRelInfo *rinfo,\n\t\t\t\t\t\t\t\t\t   List *fdw_private,\n\t\t\t\t\t\t\t\t\t   int subplan_index,\n\t\t\t\t\t\t\t\t\t   struct ExplainState *es);\nstatic bool sqlitePlanDirectModify(PlannerInfo *root,\n\t\t\t\t\t\t\t\t   ModifyTable *plan,\n\t\t\t\t\t\t\t\t   Index resultRelation,\n\t\t\t\t\t\t\t\t   int subplan_index);\nstatic void sqliteBeginDirectModify(ForeignScanState *node, int eflags);\nstatic TupleTableSlot *sqliteIterateDirectModify(ForeignScanState *node);\nstatic void sqliteEndDirectModify(ForeignScanState *node);\nstatic void sqliteExplainDirectModify(ForeignScanState *node,\n\t\t\t\t\t\t\t\t\t  struct ExplainState *es);\n#if PG_VERSION_NUM >= 140000\nstatic void sqliteExecForeignTruncate(List *rels,\n\t\t\t\t\t\t\t\t\t  DropBehavior behavior,\n\t\t\t\t\t\t\t\t\t  bool restart_seqs);\n#endif\nstatic bool sqliteAnalyzeForeignTable(Relation relation,\n\t\t\t\t\t\t\t\t\t  AcquireSampleRowsFunc *func,\n\t\t\t\t\t\t\t\t\t  BlockNumber *totalpages);\n\nstatic int sqliteIsForeignRelUpdatable(Relation rel);\n\n\nstatic List *sqliteImportForeignSchema(ImportForeignSchemaStmt *stmt,\n\t\t\t\t\t\t\t\t\t   Oid serverOid);\n\nstatic void sqliteGetForeignJoinPaths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t  RelOptInfo *joinrel,\n\t\t\t\t\t\t\t\t\t  RelOptInfo *outerrel,\n\t\t\t\t\t\t\t\t\t  RelOptInfo *innerrel,\n\t\t\t\t\t\t\t\t\t  JoinType jointype,\n\t\t\t\t\t\t\t\t\t  JoinPathExtraData *extra);\n\nstatic void\n\t\t\tsqliteGetForeignUpperPaths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t   UpperRelationKind stage,\n\t\t\t\t\t\t\t\t\t   RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t\t   RelOptInfo *output_rel\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t\t\t\t   ,void *extra\n#endif\n);\n\nstatic void sqlite_prepare_wrapper(ForeignServer *server,\n\t\t\t\t\t\t\t\t   sqlite3 * db, char *query,\n\t\t\t\t\t\t\t\t   sqlite3_stmt * *result,\n\t\t\t\t\t\t\t\t   const char **pzTail,\n\t\t\t\t\t\t\t\t   bool is_cache);\nstatic void sqlite_to_pg_type(StringInfo str, char *typname);\n\nstatic TupleTableSlot **sqlite_execute_insert(EState *estate,\n\t\t\t\t\t\t\t\t\t\t\t  ResultRelInfo *resultRelInfo,\n\t\t\t\t\t\t\t\t\t\t\t  CmdType operation,\n\t\t\t\t\t\t\t\t\t\t\t  TupleTableSlot **slots,\n\t\t\t\t\t\t\t\t\t\t\t  TupleTableSlot **planSlots,\n\t\t\t\t\t\t\t\t\t\t\t  int *numSlots);\n\nstatic void sqlite_prepare_query_params(PlanState *node,\n\t\t\t\t\t\t\t\t\t\tList *fdw_exprs,\n\t\t\t\t\t\t\t\t\t\tint numParams,\n\t\t\t\t\t\t\t\t\t\tFmgrInfo **param_flinfo,\n\t\t\t\t\t\t\t\t\t\tList **param_exprs,\n\t\t\t\t\t\t\t\t\t\tconst char ***param_values,\n\t\t\t\t\t\t\t\t\t\tOid **param_types);\n\nstatic void sqlite_process_query_params(ExprContext *econtext,\n\t\t\t\t\t\t\t\t\t\tFmgrInfo *param_flinfo,\n\t\t\t\t\t\t\t\t\t\tList *param_exprs,\n\t\t\t\t\t\t\t\t\t\tconst char **param_values,\n\t\t\t\t\t\t\t\t\t\tsqlite3_stmt * *stmt,\n\t\t\t\t\t\t\t\t\t\tOid *param_types,\n\t\t\t\t\t\t\t\t\t\tOid foreignTableId);\n\nstatic void sqlite_create_cursor(ForeignScanState *node);\nstatic void sqlite_execute_dml_stmt(ForeignScanState *node);\nstatic void sqlite_merge_fdw_options(SqliteFdwRelationInfo * fpinfo,\n\t\t\t\t\t\t\t\t\t const SqliteFdwRelationInfo * fpinfo_o,\n\t\t\t\t\t\t\t\t\t const SqliteFdwRelationInfo * fpinfo_i);\nstatic bool sqlite_foreign_grouping_ok(PlannerInfo *root, RelOptInfo *grouped_rel);\nstatic void sqlite_add_foreign_grouping_paths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t  RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t\t\t\t  RelOptInfo *grouped_rel\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t\t\t\t\t\t  ,GroupPathExtraData *extra\n#endif\n);\nstatic void sqlite_add_foreign_ordered_paths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *ordered_rel);\nstatic void sqlite_add_foreign_final_paths(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t   RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t\t\t   RelOptInfo *final_rel\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t\t\t\t   ,FinalPathExtraData *extra\n#endif\n);\nstatic void sqlite_estimate_path_cost_size(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t   RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t\t   List *param_join_conds,\n\t\t\t\t\t\t\t\t\t\t   List *pathkeys,\n\t\t\t\t\t\t\t\t\t\t   SqliteFdwPathExtraData * fpextra,\n\t\t\t\t\t\t\t\t\t\t   double *p_rows, int *p_width,\n\t\t\t\t\t\t\t\t\t\t   Cost *p_startup_cost, Cost *p_total_cost);\nstatic bool sqlite_foreign_join_ok(PlannerInfo *root, RelOptInfo *joinrel,\n\t\t\t\t\t\t\t\t   JoinType jointype, RelOptInfo *outerrel, RelOptInfo *innerrel,\n\t\t\t\t\t\t\t\t   JoinPathExtraData *extra);\n#if PG_VERSION_NUM >= 170000\nstatic bool sqlite_semijoin_target_ok(PlannerInfo *root,\n\t\t\t\t\t\t\t   RelOptInfo *joinrel,\n\t\t\t\t\t\t\t   RelOptInfo *outerrel,\n\t\t\t\t\t\t\t   RelOptInfo *innerrel);\n#endif\nstatic void sqlite_adjust_foreign_grouping_path_cost(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t List *pathkeys,\n\t\t\t\t\t\t\t\t\t\t\t\t\t double retrieved_rows,\n\t\t\t\t\t\t\t\t\t\t\t\t\t double width,\n\t\t\t\t\t\t\t\t\t\t\t\t\t double limit_tuples,\n\t\t\t\t\t\t\t\t\t\t\t\t\t Cost *p_startup_cost,\n\t\t\t\t\t\t\t\t\t\t\t\t\t Cost *p_run_cost);\nstatic bool sqlite_all_baserels_are_foreign(PlannerInfo *root);\n\nstatic void sqlite_add_paths_with_pathkeys_for_rel(PlannerInfo *root, RelOptInfo *rel, List *fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t\t   Path *epq_path\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t\t\t   , List *restrictlist\n#endif\n);\nstatic List *sqlite_get_useful_pathkeys_for_relation(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *rel);\n#if PG_VERSION_NUM >= 140000\nstatic int\tsqlite_get_batch_size_option(Relation rel);\n#endif\nstatic void conversion_error_callback(void *arg);\nstatic int32 sqlite_affinity_eqv_to_pgtype(Oid type);\nconst char* sqlite_datatype(int t);\n\nstatic const char *azType[] = { \"?\", \"integer\", \"real\", \"text\", \"blob\", \"null\" };\n\n/*\n * Identify the attribute where data conversion fails.\n */\ntypedef struct ConversionLocation\n{\n\tAttrNumber\tcur_attno;\t\t/* attribute number being processed, or 0 */\n\tRelation\trel;\t\t\t/* foreign table being processed, or NULL */\n\tForeignScanState *fsstate;\t/* plan node being processed, or NULL */\n\tForm_pg_attribute att;\t\t/* PostgreSQL relation attribute */\n\tsqlite3_value *val;\t\t\t/* abstract SQLite value to get affinity, length and text value */\n} ConversionLocation;\n\n/*\n * Library load-time initialization, sets on_proc_exit() callback for\n * backend shutdown.\n */\nvoid\n_PG_init(void)\n{\n\ton_proc_exit(&sqlite_fdw_exit, PointerGetDatum(NULL));\n}\n\n/*\n * sqlite_fdw_exit: Exit callback function.\n */\nstatic void\nsqlite_fdw_exit(int code, Datum arg)\n{\n\tsqlite_cleanup_connection();\n}\n\n\nDatum\nsqlite_fdw_handler(PG_FUNCTION_ARGS)\n{\n\tFdwRoutine *fdwroutine = makeNode(FdwRoutine);\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tfdwroutine->GetForeignRelSize = sqliteGetForeignRelSize;\n\tfdwroutine->GetForeignPaths = sqliteGetForeignPaths;\n\tfdwroutine->GetForeignPlan = sqliteGetForeignPlan;\n\n\tfdwroutine->BeginForeignScan = sqliteBeginForeignScan;\n\tfdwroutine->IterateForeignScan = sqliteIterateForeignScan;\n\tfdwroutine->ReScanForeignScan = sqliteReScanForeignScan;\n\tfdwroutine->EndForeignScan = sqliteEndForeignScan;\n\n\tfdwroutine->IsForeignRelUpdatable = sqliteIsForeignRelUpdatable;\n\tfdwroutine->AddForeignUpdateTargets = sqliteAddForeignUpdateTargets;\n\tfdwroutine->PlanForeignModify = sqlitePlanForeignModify;\n\tfdwroutine->BeginForeignModify = sqliteBeginForeignModify;\n\tfdwroutine->ExecForeignInsert = sqliteExecForeignInsert;\n#if PG_VERSION_NUM >= 140000\n\tfdwroutine->ExecForeignBatchInsert = sqliteExecForeignBatchInsert;\n\tfdwroutine->GetForeignModifyBatchSize = sqliteGetForeignModifyBatchSize;\n#endif\n\tfdwroutine->ExecForeignUpdate = sqliteExecForeignUpdate;\n\tfdwroutine->ExecForeignDelete = sqliteExecForeignDelete;\n\tfdwroutine->EndForeignModify = sqliteEndForeignModify;\n#if (PG_VERSION_NUM >= 110000)\n\tfdwroutine->BeginForeignInsert = sqliteBeginForeignInsert;\n\tfdwroutine->EndForeignInsert = sqliteEndForeignInsert;\n#endif\n\n\t/* Support functions for join push-down */\n\tfdwroutine->GetForeignJoinPaths = sqliteGetForeignJoinPaths;\n\n\t/* support for EXPLAIN */\n\tfdwroutine->ExplainForeignScan = sqliteExplainForeignScan;\n\tfdwroutine->ExplainForeignModify = sqliteExplainForeignModify;\n\tfdwroutine->ExplainDirectModify = sqliteExplainDirectModify;\n#if PG_VERSION_NUM >= 140000\n\t/* Support function for TRUNCATE */\n\tfdwroutine->ExecForeignTruncate = sqliteExecForeignTruncate;\n#endif\n\t/* suport for Direct Modification */\n\tfdwroutine->PlanDirectModify = sqlitePlanDirectModify;\n\tfdwroutine->BeginDirectModify = sqliteBeginDirectModify;\n\tfdwroutine->IterateDirectModify = sqliteIterateDirectModify;\n\tfdwroutine->EndDirectModify = sqliteEndDirectModify;\n\n\t/* support for ANALYSE */\n\tfdwroutine->AnalyzeForeignTable = sqliteAnalyzeForeignTable;\n\n\t/* support for IMPORT FOREIGN SCHEMA */\n\tfdwroutine->ImportForeignSchema = sqliteImportForeignSchema;\n\n\t/* Support functions for upper relation push-down */\n\tfdwroutine->GetForeignUpperPaths = sqliteGetForeignUpperPaths;\n\n\tPG_RETURN_POINTER(fdwroutine);\n}\n\nDatum\nsqlite_fdw_version(PG_FUNCTION_ARGS)\n{\n\tPG_RETURN_INT32(CODE_VERSION);\n}\n\nDatum\nsqlite_fdw_sqlite_version(PG_FUNCTION_ARGS)\n{\n\tPG_RETURN_INT32(sqlite3_libversion_number());\n}\n\nDatum\nsqlite_fdw_sqlite_code_source(PG_FUNCTION_ARGS)\n{\n\tPG_RETURN_TEXT_P(cstring_to_text(sqlite3_sourceid()));\n}\n\n/* Wrapper for sqlite3_prepare */\nstatic void\nsqlite_prepare_wrapper(ForeignServer *server, sqlite3 * db, char *query, sqlite3_stmt * *stmt,\n\t\t\t\t\t   const char **pzTail, bool is_cache)\n{\n\tint\t\t\trc;\n\n\telog(DEBUG1, \"sqlite_fdw : %s %s\\n\", __func__, query);\n\trc = sqlite3_prepare_v2(db, query, -1, stmt, pzTail);\n\tif (rc != SQLITE_OK)\n\t{\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_CREATE_EXECUTION),\n\t\t\t\t errmsg(\"SQL error during prepare: %s %s\", sqlite3_errmsg(db), query)\n\t\t\t\t ));\n\t}\n\t/* cache stmt to finalize at last */\n\tif (is_cache)\n\t\tsqlite_cache_stmt(server, stmt);\n}\n\n\n/*\n * sqliteGetForeignRelSize: Create a FdwPlan for a scan on the foreign table\n */\nstatic void\nsqliteGetForeignRelSize(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)\n{\n\tSqliteFdwRelationInfo *fpinfo;\n\tListCell   *lc;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tfpinfo = (SqliteFdwRelationInfo *) palloc0(sizeof(SqliteFdwRelationInfo));\n\tbaserel->fdw_private = (void *) fpinfo;\n\n\t/* Base foreign tables need to be pushed down always. */\n\tfpinfo->pushdown_safe = true;\n\t/* Look up foreign-table catalog info. */\n\tfpinfo->table = GetForeignTable(foreigntableid);\n\tfpinfo->server = GetForeignServer(fpinfo->table->serverid);\n\n\t/*\n\t * Extract user-settable option values.\n\t */\n\tfpinfo->fdw_startup_cost = DEFAULT_FDW_STARTUP_COST;\n\tfpinfo->fdw_tuple_cost = DEFAULT_FDW_TUPLE_COST;\n\n\t/*\n\t * Identify which baserestrictinfo clauses can be sent to the remote\n\t * server and which can't.\n\t */\n\tsqlite_classify_conditions(root, baserel, baserel->baserestrictinfo,\n\t\t\t\t\t\t\t   &fpinfo->remote_conds, &fpinfo->local_conds);\n\n\t/*\n\t * Identify which attributes will need to be retrieved from the remote\n\t * server.\n\t */\n\tfpinfo->attrs_used = NULL;\n#if PG_VERSION_NUM >= 90600\n\tpull_varattnos((Node *) baserel->reltarget->exprs, baserel->relid, &fpinfo->attrs_used);\n#else\n\tpull_varattnos((Node *) baserel->reltargetlist, baserel->relid, &fpinfo->attrs_used);\n#endif\n\n\tforeach(lc, fpinfo->local_conds)\n\t{\n\t\tRestrictInfo *rinfo = (RestrictInfo *) lfirst(lc);\n\n\t\tpull_varattnos((Node *) rinfo->clause, baserel->relid, &fpinfo->attrs_used);\n\t}\n\n\t/*\n\t * Compute the selectivity and cost of the local_conds, so we don't have\n\t * to do it over again for each path.  The best we can do for these\n\t * conditions is to estimate selectivity on the basis of local statistics.\n\t */\n\tfpinfo->local_conds_sel = clauselist_selectivity(root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t fpinfo->local_conds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t baserel->relid,\n\t\t\t\t\t\t\t\t\t\t\t\t\t JOIN_INNER,\n\t\t\t\t\t\t\t\t\t\t\t\t\t NULL);\n\n\tcost_qual_eval(&fpinfo->local_conds_cost, fpinfo->local_conds, root);\n\n\t/*\n\t * Set # of retrieved rows and cached relation costs to some negative\n\t * value, so that we can detect when they are set to some sensible values,\n\t * during one (usually the first) of the calls to\n\t * sqlite_estimate_path_cost_size.\n\t */\n\tfpinfo->retrieved_rows = -1;\n\tfpinfo->rel_startup_cost = -1;\n\tfpinfo->rel_total_cost = -1;\n\n\t/*\n\t * If the foreign table has never been ANALYZEd, it will have relpages\n\t * and reltuples equal to zero, which most likely has nothing to do\n\t * with reality.  We can't do a whole lot about that if we're not\n\t * allowed to consult the remote server, but we can use a hack similar\n\t * to plancat.c's treatment of empty relations: use a minimum size\n\t * estimate of 10 pages, and divide by the column-datatype-based width\n\t * estimate to get the corresponding number of tuples.\n\t */\n\n#if (PG_VERSION_NUM >= 140000)\n\tif (baserel->tuples < 0)\n#else\n\tif (baserel->pages == 0 && baserel->tuples == 0)\n#endif\n\t{\n\t\tbaserel->pages = 10;\n\t\tbaserel->tuples =\n\t\t\t(10 * BLCKSZ) / (baserel->reltarget->width +\n\t\t\t\t\t\t\t MAXALIGN(SizeofHeapTupleHeader));\n\t}\n\n\t/*\n\t * Estimate baserel size as best we can with local statistics.\n\t */\n\tset_baserel_size_estimates(root, baserel);\n\n\t/* Fill in basically-bogus cost estimates for use later. */\n\tsqlite_estimate_path_cost_size(root, baserel, NIL, NIL, NULL,\n\t\t\t\t\t\t\t\t   &fpinfo->rows, &fpinfo->width,\n\t\t\t\t\t\t\t\t   &fpinfo->startup_cost, &fpinfo->total_cost);\n\n\t/*\n\t * Set the name of relation in fpinfo, while we are constructing it here.\n\t * It will be used to build the string describing the join relation in\n\t * EXPLAIN output. We can't know whether VERBOSE option is specified or\n\t * not, so always schema-qualify the foreign table name.\n\t */\n\tfpinfo->relation_name = psprintf(\"%u\", baserel->relid);\n\n\t/* No outer and inner relations. */\n\tfpinfo->make_outerrel_subquery = false;\n\tfpinfo->make_innerrel_subquery = false;\n\tfpinfo->lower_subquery_rels = NULL;\n#if PG_VERSION_NUM >= 170000\n\tfpinfo->hidden_subquery_rels = NULL;\n#endif\n\t/* Set the relation index. */\n\tfpinfo->relation_index = baserel->relid;\n}\n\n/*\n * sqlite_get_useful_pathkeys_for_relation\n *\t\tDetermine which orderings of a relation might be useful.\n *\n * Getting data in sorted order can be useful either because the requested\n * order matches the final output ordering for the overall query we're\n * planning, or because it enables an efficient merge join.  Here, we try\n * to figure out which pathkeys to consider.\n */\nstatic List *\nsqlite_get_useful_pathkeys_for_relation(PlannerInfo *root, RelOptInfo *rel)\n{\n\tList\t   *useful_pathkeys_list = NIL;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) rel->fdw_private;\n\tListCell   *lc;\n\n\t/*\n\t * Pushing the query_pathkeys to the remote server is always worth\n\t * considering, because it might let us avoid a local sort.\n\t */\n\tfpinfo->qp_is_pushdown_safe = false;\n\tif (root->query_pathkeys)\n\t{\n\t\tbool\t\tquery_pathkeys_ok = true;\n\n\t\tforeach(lc, root->query_pathkeys)\n\t\t{\n\t\t\tPathKey\t*pathkey = (PathKey *) lfirst(lc);\n\t\t\t/*\n\t\t\t * The planner and executor don't have any clever strategy for\n\t\t\t * taking data sorted by a prefix of the query's pathkeys and\n\t\t\t * getting it to be sorted by all of those pathkeys. We'll just\n\t\t\t * end up resorting the entire data set.  So, unless we can push\n\t\t\t * down all of the query pathkeys, forget it.\n\t\t\t */\n\t\t\tif (!sqlite_is_foreign_pathkey(root, rel, pathkey))\n\t\t\t{\n\t\t\t\tquery_pathkeys_ok = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (query_pathkeys_ok)\n\t\t{\n\t\t\tuseful_pathkeys_list = list_make1(list_copy(root->query_pathkeys));\n\t\t\tfpinfo->qp_is_pushdown_safe = true;\n\t\t}\n\t}\n\n\treturn useful_pathkeys_list;\n}\n\nstatic void\nsqlite_add_paths_with_pathkeys_for_rel(PlannerInfo *root, RelOptInfo *rel, List *fdw_private,\n\t\t\t\t\t\t\t\t\t   Path *epq_path\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t   , List *restrictlist\n#endif\n)\n{\n\tList\t   *useful_pathkeys_list = NIL; /* List of all pathkeys */\n\tListCell   *lc;\n\tdouble\t\trows;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\n\t/* Use small cost to avoid calculating real cost size in SQLite */\n\trows = startup_cost = total_cost = 10;\n\n\tuseful_pathkeys_list = sqlite_get_useful_pathkeys_for_relation(root, rel);\n\n#if PG_VERSION_NUM >= 150000\n\t/*\n\t * Before creating sorted paths, arrange for the passed-in EPQ path, if\n\t * any, to return columns needed by the parent ForeignScan node so that\n\t * they will propagate up through Sort nodes injected below, if necessary.\n\t */\n\tif (epq_path != NULL && useful_pathkeys_list != NIL)\n\t{\n\t\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) rel->fdw_private;\n\t\tPathTarget *target = copy_pathtarget(epq_path->pathtarget);\n\n\t\t/* Include columns required for evaluating PHVs in the tlist. */\n\t\tadd_new_columns_to_pathtarget(target,\n\t\t\t\t\t\t\t\t\t  pull_var_clause((Node *) target->exprs,\n\t\t\t\t\t\t\t\t\t\t\t\t\t  PVC_RECURSE_PLACEHOLDERS));\n\n\t\t/* Include columns required for evaluating the local conditions. */\n\t\tforeach(lc, fpinfo->local_conds)\n\t\t{\n\t\t\tRestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);\n\n\t\t\tadd_new_columns_to_pathtarget(target,\n\t\t\t\t\t\t\t\t\t\t  pull_var_clause((Node *) rinfo->clause,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t  PVC_RECURSE_PLACEHOLDERS));\n\t\t}\n\n\t\t/*\n\t\t * If we have added any new columns, adjust the tlist of the EPQ path.\n\t\t *\n\t\t * Note: the plan created using this path will only be used to execute\n\t\t * EPQ checks, where accuracy of the plan cost and width estimates\n\t\t * would not be important, so we do not do set_pathtarget_cost_width()\n\t\t * for the new pathtarget here.  See also postgresGetForeignPlan().\n\t\t */\n\t\tif (list_length(target->exprs) > list_length(epq_path->pathtarget->exprs))\n\t\t{\n\t\t\t/* The EPQ path is a join path, so it is projection-capable. */\n\t\t\tAssert(is_projection_capable_path(epq_path));\n\n\t\t\t/*\n\t\t\t * Use create_projection_path() here, so as to avoid modifying it\n\t\t\t * in place.\n\t\t\t */\n\t\t\tepq_path = (Path *) create_projection_path(root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t   rel,\n\t\t\t\t\t\t\t\t\t\t\t\t\t   epq_path,\n\t\t\t\t\t\t\t\t\t\t\t\t\t   target);\n\t\t}\n\t}\n#endif\n\n\t/* Create one path for each set of pathkeys we found above. */\n\tforeach(lc, useful_pathkeys_list)\n\t{\n\t\tList\t   *useful_pathkeys = lfirst(lc);\n\t\tPath\t   *sorted_epq_path;\n\n\t\t/*\n\t\t * The EPQ path must be at least as well sorted as the path itself, in\n\t\t * case it gets used as input to a mergejoin.\n\t\t */\n\t\tsorted_epq_path = epq_path;\n\t\tif (sorted_epq_path != NULL &&\n\t\t\t!pathkeys_contained_in(useful_pathkeys,\n\t\t\t\t\t\t\t\t   sorted_epq_path->pathkeys))\n\t\t\tsorted_epq_path = (Path *)\n\t\t\t\tcreate_sort_path(root,\n\t\t\t\t\t\t\t\t rel,\n\t\t\t\t\t\t\t\t sorted_epq_path,\n\t\t\t\t\t\t\t\t useful_pathkeys,\n\t\t\t\t\t\t\t\t -1.0);\n\n\t\tif (rel->reloptkind == RELOPT_BASEREL ||\n\t\t\trel->reloptkind == RELOPT_OTHER_MEMBER_REL)\n\t\t\tadd_path(rel, (Path *)\n\t\t\t\t\t create_foreignscan_path(root, rel,\n\t\t\t\t\t\t\t\t\t\t\t NULL,\n\t\t\t\t\t\t\t\t\t\t\t rows,\n\t\t\t\t\t\t\t\t\t\t\t startup_cost,\n\t\t\t\t\t\t\t\t\t\t\t total_cost,\n\t\t\t\t\t\t\t\t\t\t\t useful_pathkeys,\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t\t\t\t\t rel->lateral_relids,\n#else\n\t\t\t\t\t\t\t\t\t\t\t NULL,\t/* no outer rel either */\n#endif\n\t\t\t\t\t\t\t\t\t\t\t sorted_epq_path,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t\t NIL,\t/* no fdw_restrictinfo\n\t\t\t\t\t\t\t\t\t\t\t\t\t * list */\n#endif\n\t\t\t\t\t\t\t\t\t\t\t fdw_private));\n\t\telse\n\t\t\tadd_path(rel, (Path *)\n#if PG_VERSION_NUM >= 120000\n\t\t\t\t\t create_foreign_join_path(root, rel,\n#else\n\t\t\t\t\t create_foreignscan_path(root, rel,\n#endif\n\t\t\t\t\t\t\t\t\t\t\t NULL,\n\t\t\t\t\t\t\t\t\t\t\t rows,\n\t\t\t\t\t\t\t\t\t\t\t startup_cost,\n\t\t\t\t\t\t\t\t\t\t\t total_cost,\n\t\t\t\t\t\t\t\t\t\t\t useful_pathkeys,\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t\t\t\t\t rel->lateral_relids,\n#else\n\t\t\t\t\t\t\t\t\t\t\t NULL,\t/* no outer rel either */\n#endif\n\t\t\t\t\t\t\t\t\t\t\t sorted_epq_path,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t\t restrictlist,\n#endif\n\t\t\t\t\t\t\t\t\t\t\t fdw_private));\n\t}\n}\n\n/*\n * Check if any of the tables queried aren't foreign tables.\n * We use this function to add limit pushdownm fallback to sqlite\n * because if theres any non-foreign table, GetForeignUpperPath its not called from planner.c\n */\nstatic bool\nsqlite_all_baserels_are_foreign(PlannerInfo *root)\n{\n\tbool\t\tallTablesQueriedAreForeign = true;\n\tListCell   *l;\n\n\t/*\n\t * If there is no append_rel_list, we assume we're only consulting a\n\t * foreign table, so default value it's true and we dont need to do more.\n\t */\n\tforeach(l, root->append_rel_list)\n\t{\n\t\tAppendRelInfo  *appinfo = lfirst_node(AppendRelInfo, l);\n\t\tint\t\t\t\tchildRTindex;\n\t\tRangeTblEntry  *childRTE;\n\t\tRelOptInfo \t   *childrel;\n\n\t\t/* Re-locate the child RTE and RelOptInfo */\n\t\tchildRTindex = appinfo->child_relid;\n\t\tchildRTE = root->simple_rte_array[childRTindex];\n\t\tchildrel = root->simple_rel_array[childRTindex];\n\n\t\tif (!(IS_DUMMY_REL(childrel) || childRTE->inh))\n\t\t{\n\t\t\tif (!(childrel->rtekind == RTE_RELATION && childRTE->relkind == RELKIND_FOREIGN_TABLE))\n\t\t\t{\n\t\t\t\tallTablesQueriedAreForeign = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn allTablesQueriedAreForeign;\n}\n\n/*\n * sqliteGetForeignPaths\n *\t\tCreate possible scan paths for a scan on the foreign table\n */\nstatic void\nsqliteGetForeignPaths(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid)\n{\n\tCost\t\tstartup_cost = 10;\n\tCost\t\ttotal_cost = baserel->rows + startup_cost;\n\tList\t   *fdw_private = NIL;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\t/* Estimate costs */\n\ttotal_cost = baserel->rows;\n\n\t/*\n\t * We add fdw_private with has_limit: true if these three conditions are\n\t * true because we need to be able to pushdown limit in this case: - Query\n\t * has LIMIT - Query don't have OFFSET because if we pusdown OFFSET and\n\t * later, we re-applying offset with the \"final result\", and we would be\n\t * \"jumping/skipping\" child results and losing registries that we wanted\n\t * to show. - Some of the baserels are not a foreign table, so PostgreSQL\n\t * is not calling GetForeignUpperPaths\n\t */\n\tif (limit_needed(root->parse) && !root->parse->limitOffset && !sqlite_all_baserels_are_foreign(root))\n#if PG_VERSION_NUM >= 150000\n\t\tfdw_private = list_make2(makeBoolean(false), makeBoolean(true));\n#else\n\t\tfdw_private = list_make2(makeInteger(false), makeInteger(true));\n#endif\n\n\t/* Create a ForeignPath node and add it as only possible path */\n\tadd_path(baserel, (Path *)\n\t\t\t create_foreignscan_path(root, baserel,\n#if PG_VERSION_NUM >= 90600\n\t\t\t\t\t\t\t\t\t NULL,\t/* default pathtarget */\n#endif\n\t\t\t\t\t\t\t\t\t baserel->rows,\n\t\t\t\t\t\t\t\t\t startup_cost,\n\t\t\t\t\t\t\t\t\t total_cost,\n\t\t\t\t\t\t\t\t\t NIL,\t/* no pathkeys */\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t\t\t baserel->lateral_relids,\n#else\n\t\t\t\t\t\t\t\t\t NULL,\t/* no outer rel either */\n#endif\n\t\t\t\t\t\t\t\t\t NULL,  /* no extra plan */\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t NIL,   /* no fdw_restrictinfo list */\n#endif\n\t\t\t\t\t\t\t\t\t fdw_private));\n\n\t/* Add paths with pathkeys */\n\tsqlite_add_paths_with_pathkeys_for_rel(root, baserel, fdw_private, NULL\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t   , NIL\n#endif\n\t);\n}\n\n/*\n * sqliteGetForeignPlan: Get a foreign scan plan node\n */\nstatic ForeignScan *\nsqliteGetForeignPlan(PlannerInfo *root, RelOptInfo *baserel, Oid foreigntableid, ForeignPath *best_path, List *tlist, List *scan_clauses, Plan *outer_plan)\n{\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) baserel->fdw_private;\n\tIndex\t\tscan_relid = baserel->relid;\n\tList\t   *fdw_private;\n\tList\t   *local_exprs = NULL;\n\tList\t   *remote_exprs = NULL;\n\tList\t   *params_list = NULL;\n\tList\t   *fdw_scan_tlist = NIL;\n\tList\t   *remote_conds = NIL;\n\n\tStringInfoData sql;\n\tbool\t\thas_final_sort = false;\n\tbool\t\thas_limit = false;\n\tList\t   *retrieved_attrs;\n\tListCell   *lc;\n\tList\t   *fdw_recheck_quals = NIL;\n\tint\t\t\tfor_update;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* Decide to execute function pushdown support in the target list. */\n\tfpinfo->is_tlist_func_pushdown = sqlite_is_foreign_function_tlist(root, baserel, tlist);\n\n\t/*\n\t * Get FDW private data created by sqliteGetForeignUpperPaths(), if any.\n\t */\n\tif (best_path->fdw_private)\n\t{\n#if PG_VERSION_NUM >= 150000\n\t\thas_final_sort = boolVal(list_nth(best_path->fdw_private, FdwPathPrivateHasFinalSort));\n\t\thas_limit = boolVal(list_nth(best_path->fdw_private, FdwPathPrivateHasLimit));\n\n#else\n\t\thas_final_sort = intVal(list_nth(best_path->fdw_private, FdwPathPrivateHasFinalSort));\n\t\thas_limit = intVal(list_nth(best_path->fdw_private, FdwPathPrivateHasLimit));\n#endif\n\t}\n\n\t/*\n\t * Build the query string to be sent for execution, and identify\n\t * expressions to be sent as parameters.\n\t */\n\n\t/* Build the query */\n\tinitStringInfo(&sql);\n\n\t/*\n\t * Separate the scan_clauses into those that can be executed remotely and\n\t * those that can't.  baserestrictinfo clauses that were previously\n\t * determined to be safe or unsafe by sqlite_classify_conditions are shown\n\t * in fpinfo->remote_conds and fpinfo->local_conds.  Anything else in the\n\t * scan_clauses list will be a join clause, which we have to check for\n\t * remote-safety.\n\t *\n\t * Note: the join clauses we see here should be the exact same ones\n\t * previously examined by sqliteGetForeignPaths.  Possibly it'd be worth\n\t * passing forward the classification work done then, rather than\n\t * repeating it here.\n\t *\n\t * This code must match \"extract_actual_clauses(scan_clauses, false)\"\n\t * except for the additional decision about remote versus local execution.\n\t * Note however that we only strip the RestrictInfo nodes from the\n\t * local_exprs list, since appendWhereClause expects a list of\n\t * RestrictInfos.\n\t */\n\tif (IS_SIMPLE_REL(baserel) && fpinfo->is_tlist_func_pushdown == false)\n\t{\n\t\tforeach(lc, scan_clauses)\n\t\t{\n\t\t\tRestrictInfo *rinfo = (RestrictInfo *) lfirst(lc);\n\n\t\t\tAssert(IsA(rinfo, RestrictInfo));\n\n\t\t\t/* Ignore any pseudoconstants, they're dealt with elsewhere */\n\t\t\tif (rinfo->pseudoconstant)\n\t\t\t\tcontinue;\n\n\t\t\tif (list_member_ptr(fpinfo->remote_conds, rinfo))\n\t\t\t{\n\t\t\t\tremote_conds = lappend(remote_conds, rinfo);\n\t\t\t\tremote_exprs = lappend(remote_exprs, rinfo->clause);\n\t\t\t}\n\t\t\telse if (list_member_ptr(fpinfo->local_conds, rinfo))\n\t\t\t\tlocal_exprs = lappend(local_exprs, rinfo->clause);\n\t\t\telse if (sqlite_is_foreign_expr(root, baserel, rinfo->clause))\n\t\t\t{\n\t\t\t\tremote_conds = lappend(remote_conds, rinfo);\n\t\t\t\tremote_exprs = lappend(remote_exprs, rinfo->clause);\n\t\t\t}\n\t\t\telse\n\t\t\t\tlocal_exprs = lappend(local_exprs, rinfo->clause);\n\n\t\t\t/*\n\t\t\t * For a base-relation scan, we have to support EPQ recheck, which\n\t\t\t * should recheck all the remote quals.\n\t\t\t */\n\t\t\tfdw_recheck_quals = remote_exprs;\n\t\t}\n\t}\n\telse\n\t{\n\t\t/*\n\t\t * Join relation or upper relation - set scan_relid to 0.\n\t\t */\n\t\tscan_relid = 0;\n\n\t\t/*\n\t\t * For a join rel, baserestrictinfo is NIL and we are not considering\n\t\t * parameterization right now, so there should be no scan_clauses for\n\t\t * a joinrel or an upper rel either.\n\t\t */\n\t\tif (fpinfo->is_tlist_func_pushdown == false)\n\t\t{\n\t\t\tAssert(!scan_clauses);\n\t\t}\n\n\t\t/*\n\t\t * Instead we get the conditions to apply from the fdw_private\n\t\t * structure.\n\t\t */\n\t\tremote_exprs = extract_actual_clauses(fpinfo->remote_conds, false);\n\t\tlocal_exprs = extract_actual_clauses(fpinfo->local_conds, false);\n\n\t\t/*\n\t\t * We leave fdw_recheck_quals empty in this case, since we never need\n\t\t * to apply EPQ recheck clauses.  In the case of a joinrel, EPQ\n\t\t * recheck is handled elsewhere --- see sqliteGetForeignJoinPaths().\n\t\t * If we're planning an upperrel (ie, remote grouping or aggregation)\n\t\t * then there's no EPQ to do because SELECT FOR UPDATE wouldn't be\n\t\t * allowed, and indeed we *can't* put the remote clauses into\n\t\t * fdw_recheck_quals because the unaggregated Vars won't be available\n\t\t * locally.\n\t\t */\n\n\t\t/* Build the list of columns to be fetched from the foreign server. */\n\t\tif (fpinfo->is_tlist_func_pushdown == true)\n\t\t{\n\t\t\tint\t\t\tnext_resno = list_length(fdw_scan_tlist) + 1;\n\n\t\t\tforeach(lc, tlist)\n\t\t\t{\n\t\t\t\tTargetEntry *tlist_tle = lfirst_node(TargetEntry, lc);\n\n\t\t\t\tif (!IsA(tlist_tle->expr, Const))\n\t\t\t\t{\n\t\t\t\t\tTargetEntry *tle;\n\n\t\t\t\t\ttle = makeTargetEntry(copyObject(tlist_tle->expr),\n\t\t\t\t\t\t\t\t\t\t  next_resno++,\n\t\t\t\t\t\t\t\t\t\t  NULL,\n\t\t\t\t\t\t\t\t\t\t  false);\n\t\t\t\t\tfdw_scan_tlist = lappend(fdw_scan_tlist, tle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforeach(lc, fpinfo->local_conds)\n\t\t\t{\n\t\t\t\tRestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);\n\n\t\t\t\tfdw_scan_tlist = add_to_flat_tlist(fdw_scan_tlist,\n\t\t\t\t\t\t\t\t\t\t\t\t   pull_var_clause((Node *) rinfo->clause,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   PVC_RECURSE_PLACEHOLDERS));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfdw_scan_tlist = sqlite_build_tlist_to_deparse(baserel);\n\t\t}\n\n\t\t/*\n\t\t * Ensure that the outer plan produces a tuple whose descriptor\n\t\t * matches our scan tuple slot. This is safe because all scans and\n\t\t * joins support projection, so we never need to insert a Result node.\n\t\t * Also, remove the local conditions from outer plan's quals, lest\n\t\t * they will be evaluated twice, once by the local plan and once by\n\t\t * the scan.\n\t\t */\n\t\tif (outer_plan)\n\t\t{\n\t\t\t/*\n\t\t\t * Right now, we only consider grouping and aggregation beyond\n\t\t\t * joins. Queries involving aggregates or grouping do not require\n\t\t\t * EPQ mechanism, hence should not have an outer plan here.\n\t\t\t */\n\t\t\tAssert(baserel->reloptkind != RELOPT_UPPER_REL);\n\t\t\touter_plan->targetlist = fdw_scan_tlist;\n\n\t\t\tforeach(lc, local_exprs)\n\t\t\t{\n\t\t\t\tJoin\t   *join_plan = (Join *) outer_plan;\n\t\t\t\tNode\t   *qual = lfirst(lc);\n\n\t\t\t\touter_plan->qual = list_delete(outer_plan->qual, qual);\n\n\t\t\t\t/*\n\t\t\t\t * For an inner join the local conditions of foreign scan plan\n\t\t\t\t * can be part of the joinquals as well.\n\t\t\t\t */\n\t\t\t\tif (join_plan->jointype == JOIN_INNER)\n\t\t\t\t\tjoin_plan->joinqual = list_delete(join_plan->joinqual,\n\t\t\t\t\t\t\t\t\t\t\t\t\t  qual);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Build the query string to be sent for execution, and identify\n\t * expressions to be sent as parameters.\n\t */\n\tinitStringInfo(&sql);\n\tsqlite_deparse_select_stmt_for_rel(&sql, root, baserel, fdw_scan_tlist,\n\t\t\t\t\t\t\t\t\t   remote_exprs, best_path->path.pathkeys,\n\t\t\t\t\t\t\t\t\t   has_final_sort, has_limit, false,\n\t\t\t\t\t\t\t\t\t   &retrieved_attrs, &params_list);\n\n\t/* Remember remote_exprs for possible use by sqlitePlanDirectModify */\n\tfpinfo->final_remote_exprs = remote_exprs;\n\n\tfor_update = false;\n\tif (root->parse->commandType == CMD_UPDATE ||\n\t\troot->parse->commandType == CMD_DELETE ||\n\t\troot->parse->commandType == CMD_INSERT)\n\t{\n\t\t/* Relation is UPDATE/DELETE target, so use FOR UPDATE */\n\t\tfor_update = true;\n\t}\n\n\t/*\n\t * Build the fdw_private list that will be available to the executor.\n\t * Items in the list must match enum FdwScanPrivateIndex, above.\n\t */\n\tfdw_private = list_make3(makeString(sql.data), retrieved_attrs, makeInteger(for_update));\n#if (PG_VERSION_NUM < 100000)\n\tfdw_private = lappend(fdw_private, makeInteger(root->all_baserels == NULL ? -2 : bms_next_member(root->all_baserels, -1)));\n#endif\n\tif (IS_JOIN_REL(baserel) || IS_UPPER_REL(baserel))\n\t\tfdw_private = lappend(fdw_private,\n\t\t\t\t\t\t\t  makeString(fpinfo->relation_name));\n\n\t/*\n\t * Create the ForeignScan node from target list, local filtering\n\t * expressions, remote parameter expressions, and FDW private information.\n\t *\n\t * Note that the remote parameter expressions are stored in the fdw_exprs\n\t * field of the finished plan node; we can't keep them in private state\n\t * because then they wouldn't be subject to later planner processing.\n\t */\n\treturn make_foreignscan(tlist,\n\t\t\t\t\t\t\tlocal_exprs,\n\t\t\t\t\t\t\tscan_relid,\n\t\t\t\t\t\t\tparams_list,\n\t\t\t\t\t\t\tfdw_private,\n\t\t\t\t\t\t\tfdw_scan_tlist,\n\t\t\t\t\t\t\tfdw_recheck_quals,\n\t\t\t\t\t\t\touter_plan);\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * Construct a tuple descriptor for the scan tuples handled by a foreign join.\n */\nstatic TupleDesc\nsqlite_get_tupdesc_for_join_scan_tuples(ForeignScanState *node)\n{\n\tForeignScan *fsplan = (ForeignScan *) node->ss.ps.plan;\n\tEState\t   *estate = node->ss.ps.state;\n\tTupleDesc\ttupdesc;\n\tint\t\t\ti;\n\n\t/*\n\t * The core code has already set up a scan tuple slot based on\n\t * fsplan->fdw_scan_tlist, and this slot's tupdesc is mostly good enough,\n\t * but there's one case where it isn't.  If we have any whole-row row\n\t * identifier Vars, they may have vartype RECORD, and we need to replace\n\t * that with the associated table's actual composite type.  This ensures\n\t * that when we read those ROW() expression values from the remote server,\n\t * we can convert them to a composite type the local server knows.\n\t */\n\ttupdesc = CreateTupleDescCopy(node->ss.ss_ScanTupleSlot->tts_tupleDescriptor);\n\tfor (i = 0; i < tupdesc->natts; i++)\n\t{\n\t\tForm_pg_attribute att = TupleDescAttr(tupdesc, i);\n\t\tVar\t\t   *var;\n\t\tRangeTblEntry *rte;\n\t\tOid\t\t\treltype;\n\n\t\t/* Nothing to do if it's not a generic RECORD attribute */\n\t\tif (att->atttypid != RECORDOID || att->atttypmod >= 0)\n\t\t\tcontinue;\n\n\t\t/*\n\t\t * If we can't identify the referenced table, do nothing.  This'll\n\t\t * likely lead to failure later, but perhaps we can muddle through.\n\t\t */\n\t\tvar = (Var *) list_nth_node(TargetEntry, fsplan->fdw_scan_tlist, i)->expr;\n\t\tif (!IsA(var, Var) || var->varattno != 0)\n\t\t\tcontinue;\n\t\trte = list_nth(estate->es_range_table, var->varno - 1);\n\t\tif (rte->rtekind != RTE_RELATION)\n\t\t\tcontinue;\n\t\treltype = get_rel_type_id(rte->relid);\n\t\tif (!OidIsValid(reltype))\n\t\t\tcontinue;\n\t\tatt->atttypid = reltype;\n\t\t/* shouldn't need to change anything else */\n\t}\n\treturn tupdesc;\n}\n#endif\n\n/*\n * sqliteBeginForeignScan: Initiate access to the database\n */\nstatic void\nsqliteBeginForeignScan(ForeignScanState *node, int eflags)\n{\n\tsqlite3\t\t\t   *conn = NULL;\n\tSqliteFdwExecState *festate = NULL;\n\tEState\t\t\t   *estate = node->ss.ps.state;\n\tForeignScan \t   *fsplan = (ForeignScan *) node->ss.ps.plan;\n\tint\t\t\t\t\tnumParams;\n\tRangeTblEntry\t   *rte;\n\tint\t\t\t\t\trtindex;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/*\n\t * Do nothing in EXPLAIN\n\t */\n\tif (eflags & EXEC_FLAG_EXPLAIN_ONLY)\n\t\treturn;\n\n\t/*\n\t * We'll save private state in node->fdw_state.\n\t */\n\tfestate = (SqliteFdwExecState *) palloc0(sizeof(SqliteFdwExecState));\n\tnode->fdw_state = (void *) festate;\n\tfestate->rowidx = 0;\n\n\t/* Get info about foreign table. */\n\tif (fsplan->scan.scanrelid > 0)\n\t\trtindex = fsplan->scan.scanrelid;\n\telse\n\t{\n#if PG_VERSION_NUM >= 160000\n\t\trtindex = bms_next_member(fsplan->fs_base_relids, -1);\n#else\n\t\trtindex = bms_next_member(fsplan->fs_relids, -1);\n#endif\n\n#if (PG_VERSION_NUM < 100000)\n\t\t/* PostgreSQL version 9.6.x need to get rtindex from ForeignPlan */\n\t\tif (rtindex == -2)\n\t\t\trtindex = intVal(list_nth(fsplan->fdw_private, FdwScanPrivateRtIndex));\n#endif\n\t}\n\trte = exec_rt_fetch(rtindex, estate);\n\n\tfestate->rel = node->ss.ss_currentRelation;\n\tfestate->table = GetForeignTable(rte->relid);\n\tfestate->server = GetForeignServer(festate->table->serverid);\n\n\t/*\n\t * Get the already connected connection, otherwise connect and get the\n\t * connection handle.\n\t */\n\tconn = sqlite_get_connection(festate->server, false);\n\n\t/* Stash away the state info we have already */\n\tfestate->query = strVal(list_nth(fsplan->fdw_private, FdwScanPrivateSelectSql));\n\tfestate->retrieved_attrs = list_nth(fsplan->fdw_private, FdwScanPrivateRetrievedAttrs);\n\tfestate->for_update = intVal(list_nth(fsplan->fdw_private, FdwScanPrivateForUpdate)) ? true : false;\n\tfestate->conn = conn;\n\tfestate->cursor_exists = false;\n\n\t/*\n\t * Get info we'll need for converting data fetched from the foreign server\n\t * into local representation and error reporting during that process.\n\t */\n\tif (fsplan->scan.scanrelid > 0)\n\t{\n\t\tfestate->rel = node->ss.ss_currentRelation;\n\t\tfestate->tupdesc = RelationGetDescr(festate->rel);\n\t}\n\telse\n\t{\n\t\tfestate->rel = NULL;\n#if (PG_VERSION_NUM >= 140000)\n\t\tfestate->tupdesc = sqlite_get_tupdesc_for_join_scan_tuples(node);\n#else\n\t\tfestate->tupdesc = node->ss.ss_ScanTupleSlot->tts_tupleDescriptor;\n#endif\n\t}\n\n\tfestate->attinmeta = TupleDescGetAttInMetadata(festate->tupdesc);\n\n\t/* Initialize the Sqlite statement */\n\tfestate->stmt = NULL;\n\n\t/* Prepare Sqlite statement */\n\tsqlite_prepare_wrapper(festate->server, festate->conn, festate->query, &festate->stmt, NULL, true);\n\n\t/* Prepare for output conversion of parameters used in remote query. */\n\tnumParams = list_length(fsplan->fdw_exprs);\n\tfestate->numParams = numParams;\n\tif (numParams > 0)\n\t\tsqlite_prepare_query_params((PlanState *) node,\n\t\t\t\t\t\t\t\t\tfsplan->fdw_exprs,\n\t\t\t\t\t\t\t\t\tnumParams,\n\t\t\t\t\t\t\t\t\t&festate->param_flinfo,\n\t\t\t\t\t\t\t\t\t&festate->param_exprs,\n\t\t\t\t\t\t\t\t\t&festate->param_values,\n\t\t\t\t\t\t\t\t\t&festate->param_types);\n}\n\nstatic void\nmake_tuple_from_result_row(sqlite3_stmt * stmt,\n\t\t\t\t\t\t   TupleDesc tupleDescriptor,\n\t\t\t\t\t\t   List *retrieved_attrs,\n\t\t\t\t\t\t   Datum *row,\n\t\t\t\t\t\t   bool *is_null,\n\t\t\t\t\t\t   SqliteFdwExecState * festate,\n\t\t\t\t\t\t   ForeignScanState *node)\n{\n\tConversionLocation errpos;\n\tErrorContextCallback errcallback;\n\tListCell\t   *lc = NULL;\n\tint\t\t\t\tstmt_colid = 0;\n\tNullableDatum   sqlite_coverted;\n\n\tmemset(row, 0, sizeof(Datum) * tupleDescriptor->natts);\n\tmemset(is_null, true, sizeof(bool) * tupleDescriptor->natts);\n\n\t/*\n\t * Set up and install callback to report where conversion error occurs.\n\t */\n\terrpos.cur_attno = 0;\n\terrpos.att = NULL;\n\terrpos.rel = festate->rel;\n\terrpos.fsstate = node;\n\terrpos.val = NULL;\n\terrcallback.callback = conversion_error_callback;\n\terrcallback.arg = (void *) &errpos;\n\terrcallback.previous = error_context_stack;\n\terror_context_stack = &errcallback;\n\n\tforeach(lc, retrieved_attrs)\n\t{\n\t\tint\t\t\t\t\tattnum = lfirst_int(lc) - 1;\n\t\tForm_pg_attribute   att = TupleDescAttr(tupleDescriptor, attnum);\n\t\tsqlite3_value\t   *val = sqlite3_column_value(stmt, stmt_colid);\n\t\tint\t\t\t\t\tsqlite_value_affinity = sqlite3_value_type(val);\n\n\t\terrpos.cur_attno = attnum;\n\t\terrpos.att = att;\n\t\terrpos.val = val;\n\t\tif ( sqlite_value_affinity != SQLITE_NULL)\n\t\t{\n\t\t\t/* TODO: Processing of column options about special convert behaviour\n\t\t\t * options = GetForeignColumnOptions(rel, attnum_base); ... foreach(lc_attr, options)\n\t\t\t */\n\n\t\t\tint AffinityBehaviourFlags = 0;\n\t\t\t/* TODO\n\t\t\t * Flags about special convert behaviour from options on database, table or column level\n\t\t\t */\n\n\t\t\tsqlite_coverted = sqlite_convert_to_pg(att, val,\n\t\t\t\t\t\t\t\t\t\t\t\t   festate->attinmeta,\n\t\t\t\t\t\t\t\t\t\t\t\t   attnum, sqlite_value_affinity,\n\t\t\t\t\t\t\t\t\t\t\t\t   AffinityBehaviourFlags);\n\t\t\tif (!sqlite_coverted.isnull) {\n\t\t\t\tis_null[attnum] = false;\n\t\t\t\trow[attnum] = sqlite_coverted.value;\n\t\t\t}\n\t\t\telse\n\t\t\t\tis_null[attnum] = true;\n\t\t}\n\t\tstmt_colid++;\n\t}\n\t/* Uninstall error context callback. */\n\terror_context_stack = errcallback.previous;\n}\n\n/*\n * sqliteIterateForeignScan: Iterate and get the rows one by one from\n * Sqlite and placed in tuple slot\n */\nstatic TupleTableSlot *\nsqliteIterateForeignScan(ForeignScanState *node)\n{\n\tSqliteFdwExecState *festate = (SqliteFdwExecState *) node->fdw_state;\n\tTupleTableSlot\t   *tupleSlot = node->ss.ss_ScanTupleSlot;\n\tEState\t\t\t   *estate = node->ss.ps.state;\n\tTupleDesc\t\t\ttupleDescriptor = tupleSlot->tts_tupleDescriptor;\n\tint\t\t\t\t\trc = 0;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/*\n\t * If this is the first call after Begin or ReScan, we need to create the\n\t * cursor on the remote side. Binding parameters is done in this function.\n\t */\n\tif (!festate->cursor_exists)\n\t\tsqlite_create_cursor(node);\n\n\n\tExecClearTuple(tupleSlot);\n\n\t/*\n\t * We get all rows before starting update if this scan is for update\n\t * because there is no isolation between update and select on the same\n\t * database connections. Please see for details:\n\t * https://sqlite.org/isolation.html\n\t */\n\tif (festate->for_update && festate->rowidx == 0)\n\t{\n\t\tint\t\t\tsize = 0;\n\n\t\t/* festate->rows need longer context than per tuple */\n\t\tMemoryContext oldcontext = MemoryContextSwitchTo(estate->es_query_cxt);\n\n\t\tfestate->row_nums = 0;\n\t\tfestate->rowidx = 0;\n\t\twhile (1)\n\t\t{\n\t\t\trc = sqlite3_step(festate->stmt);\n\t\t\tif (rc == SQLITE_ROW)\n\t\t\t{\n\n\t\t\t\tif (size == 0)\n\t\t\t\t{\n\t\t\t\t\tsize = 1;\n\t\t\t\t\tfestate->rows = palloc(sizeof(Datum *) * size);\n\t\t\t\t\tfestate->rows_isnull = palloc(sizeof(bool *) * size);\n\t\t\t\t}\n\t\t\t\telse if (festate->row_nums >= size)\n\t\t\t\t{\n\t\t\t\t\t/* expand array */\n\t\t\t\t\tsize = size * 2;\n\t\t\t\t\tfestate->rows = repalloc(festate->rows, sizeof(Datum *) * size);\n\t\t\t\t\tfestate->rows_isnull = repalloc(festate->rows_isnull, sizeof(bool *) * size);\n\t\t\t\t}\n\t\t\t\tfestate->rows[festate->row_nums] = palloc(sizeof(Datum) * tupleDescriptor->natts);\n\t\t\t\tfestate->rows_isnull[festate->row_nums] = palloc(sizeof(bool) * tupleDescriptor->natts);\n\t\t\t\tmake_tuple_from_result_row(festate->stmt,\n\t\t\t\t\t\t\t\t\t\t   tupleDescriptor, festate->retrieved_attrs,\n\t\t\t\t\t\t\t\t\t\t   festate->rows[festate->row_nums],\n\t\t\t\t\t\t\t\t\t\t   festate->rows_isnull[festate->row_nums],\n\t\t\t\t\t\t\t\t\t\t   festate,\n\t\t\t\t\t\t\t\t\t\t   node);\n\n\t\t\t\tfestate->row_nums++;\n\n\t\t\t}\n\t\t\telse if (SQLITE_DONE == rc)\n\t\t\t{\n\t\t\t\t/* No more rows/data exists */\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsqlitefdw_report_error(ERROR, festate->stmt, festate->conn, NULL, rc);\n\t\t\t}\n\t\t}\n\t\tMemoryContextSwitchTo(oldcontext);\n\t}\n\n\tif (festate->for_update)\n\t{\n\t\tif (festate->rowidx < festate->row_nums)\n\t\t{\n\t\t\tmemcpy(tupleSlot->tts_values, festate->rows[festate->rowidx], sizeof(Datum) * tupleDescriptor->natts);\n\t\t\tmemcpy(tupleSlot->tts_isnull, festate->rows_isnull[festate->rowidx], sizeof(bool) * tupleDescriptor->natts);\n\t\t\tExecStoreVirtualTuple(tupleSlot);\n\t\t\tfestate->rowidx++;\n\t\t}\n\t}\n\telse\n\t{\n\t\trc = sqlite3_step(festate->stmt);\n\t\tif (SQLITE_ROW == rc)\n\t\t{\n\t\t\tmake_tuple_from_result_row(festate->stmt,\n\t\t\t\t\t\t\t\t\t   tupleDescriptor,\n\t\t\t\t\t\t\t\t\t   festate->retrieved_attrs,\n\t\t\t\t\t\t\t\t\t   tupleSlot->tts_values,\n\t\t\t\t\t\t\t\t\t   tupleSlot->tts_isnull,\n\t\t\t\t\t\t\t\t\t   festate,\n\t\t\t\t\t\t\t\t\t   node);\n\t\t\tExecStoreVirtualTuple(tupleSlot);\n\t\t}\n\t\telse if (SQLITE_DONE == rc)\n\t\t{\n\t\t\t/* No more rows/data exists */\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsqlitefdw_report_error(ERROR, festate->stmt, festate->conn, NULL, rc);\n\t\t}\n\t}\n\treturn tupleSlot;\n}\n\n/*\n * sqliteEndForeignScan: Finish scanning foreign table and dispose\n * objects used for this scan\n */\nstatic void\nsqliteEndForeignScan(ForeignScanState *node)\n{\n\tSqliteFdwExecState *festate = (SqliteFdwExecState *) node->fdw_state;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* if festate is NULL, we are in EXPLAIN; nothing to do */\n\tif (festate == NULL)\n\t\treturn;\n\n\tif (festate->stmt)\n\t{\n\t\tfestate->stmt = NULL;\n\t}\n}\n\n/*\n * Restart the scan from the beginning. Note that any parameters the scan\n * depends on may have changed value, so the new scan does not necessarily\n * return exactly the same rows.\n */\nstatic void\nsqliteReScanForeignScan(ForeignScanState *node)\n{\n\n\tSqliteFdwExecState *festate = (SqliteFdwExecState *) node->fdw_state;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tif (festate->stmt)\n\t{\n\t\tsqlite3_reset(festate->stmt);\n\t}\n\tfestate->cursor_exists = false;\n\tfestate->rowidx = 0;\n}\n\n/*\n * sqliteAddForeignUpdateTargets: Add column(s) needed for update/delete on a foreign table,\n * we are using first column as row identification column, so we are adding that into target\n * list.\n */\nstatic void\nsqliteAddForeignUpdateTargets(\n#if (PG_VERSION_NUM >= 140000)\n\t\t\t\t\t\t\t  PlannerInfo *root,\n\t\t\t\t\t\t\t  Index rtindex,\n#else\n\t\t\t\t\t\t\t  Query *parsetree,\n#endif\n\t\t\t\t\t\t\t  RangeTblEntry *target_rte,\n\t\t\t\t\t\t\t  Relation target_relation)\n{\n\n\tOid\t\t\trelid = RelationGetRelid(target_relation);\n\tTupleDesc\ttupdesc = target_relation->rd_att;\n\tint\t\t\ti;\n\tbool\t\thas_key = false;\n\n\t/* loop through all columns of the foreign table */\n\tfor (i = 0; i < tupdesc->natts; ++i)\n\t{\n\t\tForm_pg_attribute att = TupleDescAttr(tupdesc, i);\n\t\tAttrNumber\tattrno = att->attnum;\n\t\tList\t   *options;\n\t\tListCell   *option;\n\n\t\t/* look for the \"key\" option on this column */\n\t\toptions = GetForeignColumnOptions(relid, attrno);\n\t\tforeach(option, options)\n\t\t{\n\t\t\tDefElem\t\t*def = (DefElem *) lfirst(option);\n\n\t\t\t/* if \"key\" is set, add a resjunk for this column */\n\t\t\tif (IS_KEY_COLUMN(def))\n\t\t\t{\n\t\t\t\tVar\t\t   *var;\n#if PG_VERSION_NUM < 140000\n\t\t\t\tIndex\t\trtindex = parsetree->resultRelation;\n\t\t\t\tTargetEntry *tle;\n#endif\n\t\t\t\tvar = makeVar(rtindex,\n\t\t\t\t\t\t\t  attrno,\n\t\t\t\t\t\t\t  att->atttypid,\n\t\t\t\t\t\t\t  att->atttypmod,\n\t\t\t\t\t\t\t  att->attcollation,\n\t\t\t\t\t\t\t  0);\n#if (PG_VERSION_NUM >= 140000)\n\t\t\t\tadd_row_identity_var(root, var, rtindex, pstrdup(NameStr(att->attname)));\n#else\n\t\t\t\t/* Wrap it in a resjunk TLE with the right name ... */\n\t\t\t\ttle = makeTargetEntry((Expr *) var,\n\t\t\t\t\t\t\t\t\t  list_length(parsetree->targetList) + 1,\n\t\t\t\t\t\t\t\t\t  pstrdup(NameStr(att->attname)),\n\t\t\t\t\t\t\t\t\t  true);\n\n\t\t\t\t/* ... and add it to the query's targetlist */\n\t\t\t\tparsetree->targetList = lappend(parsetree->targetList, tle);\n#endif\n\t\t\t\thas_key = true;\n\t\t\t}\n\t\t\telse if (strcmp(def->defname, \"key\") == 0)\n\t\t\t{\n\t\t\t\telog(ERROR, \"impossible column option \\\"%s\\\"\", def->defname);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!has_key)\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_CREATE_EXECUTION),\n\t\t\t\t errmsg(\"no primary key column specified for foreign table\"),\n\t\t\t\t errdetail(\"For UPDATE or DELETE, at least one foreign table column must be marked as primary key column.\"),\n\t\t\t\t errhint(\"Set the option \\\"%s\\\" on the columns that belong to the primary key.\", \"key\")));\n\n}\n\nstatic List *\nsqlitePlanForeignModify(PlannerInfo *root,\n\t\t\t\t\t\tModifyTable *plan,\n\t\t\t\t\t\tIndex resultRelation,\n\t\t\t\t\t\tint subplan_index)\n{\n\tCmdType\t\t\toperation = plan->operation;\n\tRangeTblEntry  *rte = planner_rt_fetch(resultRelation, root);\n\tRelation\t\trel;\n\tList\t\t   *targetAttrs = NULL;\n\tStringInfoData  sql;\n\tOid\t\t\t\tforeignTableId;\n\tTupleDesc\t\ttupdesc;\n\tint\t\t\t\ti;\n\tList\t\t   *condAttr = NULL;\n\tbool\t\t\tdoNothing = false;\n\tint\t\t\t\tvalues_end_len = -1;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tinitStringInfo(&sql);\n\n\t/*\n\t * Core code already has some lock on each rel being planned, so we can\n\t * use NoLock here.\n\t */\n\trel = table_open(rte->relid, NoLock);\n\n\tforeignTableId = RelationGetRelid(rel);\n\ttupdesc = RelationGetDescr(rel);\n\n\tif (operation == CMD_INSERT ||\n\t\t(operation == CMD_UPDATE &&\n\t\t rel->trigdesc &&\n\t\t rel->trigdesc->trig_update_before_row))\n\t{\n\t\tint\t\t\tattnum;\n\n\t\tfor (attnum = 1; attnum <= tupdesc->natts; attnum++)\n\t\t{\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t\tif (!attr->attisdropped)\n\t\t\t\ttargetAttrs = lappend_int(targetAttrs, attnum);\n\t\t}\n\t}\n\telse if (operation == CMD_UPDATE)\n\t{\n\t\tAttrNumber\tattno;\n#if (PG_VERSION_NUM >= 130010 && PG_VERSION_NUM < 140000) || \\\n\t(PG_VERSION_NUM >= 140007 && PG_VERSION_NUM < 150000) || \\\n\t(PG_VERSION_NUM >= 150002)\n\t\tint\t\t\tcol;\n\t\tRelOptInfo *rel = find_base_rel(root, resultRelation);\n\t\tBitmapset  *allUpdatedCols = get_rel_all_updated_cols(root, rel);\n\n\t\tcol = -1;\n\t\twhile ((col = bms_next_member(allUpdatedCols, col))>= 0)\n\t\t{\n\t\t\t/* bit numbers are offset by FirstLowInvalidHeapAttributeNumber */\n\t\t\tattno = col + FirstLowInvalidHeapAttributeNumber;\n#else\n\t\tBitmapset  *tmpset;\n\t\ttmpset = bms_union(rte->updatedCols, rte->extraUpdatedCols);\n\n\t\twhile ((attno = bms_first_member(tmpset)) >= 0)\n\t\t{\n\t\t\tattno += FirstLowInvalidHeapAttributeNumber;\n#endif\n\t\t\tif (attno <= InvalidAttrNumber)\t/* shouldn't happen */\n\t\t\t\telog(ERROR, \"system-column update is not supported\");\n\n\t\t\ttargetAttrs = lappend_int(targetAttrs, attno);\n\t\t}\n\t}\n\n\tif (plan->returningLists)\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_CREATE_EXECUTION),\n\t\t\t\t errmsg(\"RETURNING clause is not supported\")));\n\n\t/*\n\t * ON CONFLICT DO UPDATE and DO NOTHING case with inference specification\n\t * should have already been rejected in the optimizer, as presently there\n\t * is no way to recognize an arbiter index on a foreign table.  Only DO\n\t * NOTHING is supported without an inference specification.\n\t */\n\tif (plan->onConflictAction == ONCONFLICT_NOTHING)\n\t\tdoNothing = true;\n\telse if (plan->onConflictAction != ONCONFLICT_NONE)\n\t\telog(ERROR, \"unexpected ON CONFLICT specification: %d\",\n\t\t\t (int) plan->onConflictAction);\n\n\t/*\n\t * Add all primary key attribute names to condAttr used in where clause of\n\t * update\n\t */\n\tfor (i = 0; i < tupdesc->natts; ++i)\n\t{\n\t\tForm_pg_attribute att = TupleDescAttr(tupdesc, i);\n\t\tAttrNumber\tattrno = att->attnum;\n\t\tList\t   *options;\n\t\tListCell   *option;\n\n\t\t/* look for the \"key\" option on this column */\n\t\toptions = GetForeignColumnOptions(foreignTableId, attrno);\n\t\tforeach(option, options)\n\t\t{\n\t\t\tDefElem\t   *def = (DefElem *) lfirst(option);\n\n\t\t\tif (IS_KEY_COLUMN(def))\n\t\t\t{\n\t\t\t\tcondAttr = lappend_int(condAttr, attrno);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Construct the SQL command string.\n\t */\n\tswitch (operation)\n\t{\n\t\tcase CMD_INSERT:\n\t\t\tsqlite_deparse_insert(&sql, root, resultRelation, rel, targetAttrs, doNothing, &values_end_len);\n\t\t\tbreak;\n\t\tcase CMD_UPDATE:\n\t\t\tsqlite_deparse_update(&sql, root, resultRelation, rel, targetAttrs, condAttr);\n\t\t\tbreak;\n\t\tcase CMD_DELETE:\n\t\t\tsqlite_deparse_delete(&sql, root, resultRelation, rel, condAttr);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\telog(ERROR, \"unexpected operation: %d\", (int) operation);\n\t\t\tbreak;\n\t}\n\ttable_close(rel, NoLock);\n\treturn list_make3(makeString(sql.data), targetAttrs, makeInteger(values_end_len));\n}\n\nstatic void\nsqliteBeginForeignModify(ModifyTableState *mtstate,\n\t\t\t\t\t\t ResultRelInfo *resultRelInfo,\n\t\t\t\t\t\t List *fdw_private,\n\t\t\t\t\t\t int subplan_index,\n\t\t\t\t\t\t int eflags)\n{\n\tSqliteFdwExecState *fmstate = NULL;\n\tEState\t   *estate = mtstate->ps.state;\n\tRelation\trel = resultRelInfo->ri_RelationDesc;\n\tAttrNumber\tn_params = 0;\n\tOid\t\t\ttypefnoid = InvalidOid;\n\tbool\t\tisvarlena = false;\n\tListCell   *lc = NULL;\n\tOid\t\t\tforeignTableId = InvalidOid;\n\tPlan\t   *subplan;\n\tint\t\t\ti;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tforeignTableId = RelationGetRelid(rel);\n#if (PG_VERSION_NUM >= 140000)\n\tsubplan = outerPlanState(mtstate)->plan;\n#else\n\tsubplan = mtstate->mt_plans[subplan_index]->plan;\n#endif\n\n\t/*\n\t * Do nothing in EXPLAIN (no ANALYZE) case. resultRelInfon->ri_FdwState\n\t * stays NULL.\n\t */\n\tif (eflags & EXEC_FLAG_EXPLAIN_ONLY)\n\t\treturn;\n\n\tfmstate = (SqliteFdwExecState *) palloc0(sizeof(SqliteFdwExecState));\n\tfmstate->rel = rel;\n\tfmstate->table = GetForeignTable(foreignTableId);\n\tfmstate->server = GetForeignServer(fmstate->table->serverid);\n\n\tfmstate->conn = sqlite_get_connection(fmstate->server, false);\n\tfmstate->query = strVal(list_nth(fdw_private, FdwModifyPrivateUpdateSql));\n\tfmstate->target_attrs = (List *) list_nth(fdw_private, FdwModifyPrivateTargetAttnums);\n\tfmstate->retrieved_attrs = (List *) list_nth(fdw_private, FdwModifyPrivateTargetAttnums);\n\tfmstate->values_end = intVal(list_nth(fdw_private, FdwModifyPrivateLen));\n\tfmstate->orig_query = pstrdup(fmstate->query);\n\n\tn_params = list_length(fmstate->retrieved_attrs) + 1;\n\tfmstate->p_flinfo = (FmgrInfo *) palloc0(sizeof(FmgrInfo) * n_params);\n\tfmstate->p_nums = 0;\n\tfmstate->temp_cxt = AllocSetContextCreate(estate->es_query_cxt,\n\t\t\t\t\t\t\t\t\t\t\t  \"sqlite_fdw temporary data\",\n\t\t\t\t\t\t\t\t\t\t\t  ALLOCSET_SMALL_MINSIZE,\n\t\t\t\t\t\t\t\t\t\t\t  ALLOCSET_SMALL_INITSIZE,\n\t\t\t\t\t\t\t\t\t\t\t  ALLOCSET_SMALL_MAXSIZE);\n\n\t/* Set up for remaining transmittable parameters */\n\tforeach(lc, fmstate->retrieved_attrs)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc);\n\t\tForm_pg_attribute attr = TupleDescAttr(RelationGetDescr(rel), attnum - 1);\n\n\t\tAssert(!attr->attisdropped);\n#if PG_VERSION_NUM >= 140000\n\t\t/* Ignore generated columns; */\n\t\tif (attr->attgenerated)\n\t\t{\n\t\t\tif (list_length(fmstate->retrieved_attrs) >= 1)\n\t\t\t\tfmstate->p_nums = 1;\n\t\t\tcontinue;\n\t\t}\n#endif\n\t\tgetTypeOutputInfo(attr->atttypid, &typefnoid, &isvarlena);\n\t\tfmgr_info(typefnoid, &fmstate->p_flinfo[fmstate->p_nums]);\n\t\tfmstate->p_nums++;\n\t}\n\tAssert(fmstate->p_nums <= n_params);\n\n#if (PG_VERSION_NUM >= 140000)\n\t/* Set batch_size from foreign server/table options. */\n\tfmstate->batch_size = sqlite_get_batch_size_option(rel);\n#endif\n\n\tn_params = list_length(fmstate->retrieved_attrs);\n\t/* Initialize sqlite statment */\n\tfmstate->stmt = NULL;\n\n\tfmstate->num_slots = 1;\n\t/* Prepare sqlite statment */\n\tsqlite_prepare_wrapper(fmstate->server, fmstate->conn, fmstate->query, &fmstate->stmt, NULL, true);\n\n\tresultRelInfo->ri_FdwState = fmstate;\n\n\tfmstate->junk_idx = palloc0(RelationGetDescr(rel)->natts * sizeof(AttrNumber));\n\t/* loop through table columns */\n\tfor (i = 0; i < RelationGetDescr(rel)->natts; ++i)\n\t{\n\t\t/*\n\t\t * for primary key columns, get the resjunk attribute number and store\n\t\t * it\n\t\t */\n\t\tfmstate->junk_idx[i] =\n\t\t\tExecFindJunkAttributeInTlist(subplan->targetlist,\n\t\t\t\t\t\t\t\t\t\t get_attname(foreignTableId, i + 1\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t\t\t\t\t\t\t\t ,false\n#endif\n\t\t\t\t\t\t\t\t\t\t\t\t\t ));\n\t}\n\n}\n#if (PG_VERSION_NUM >= 110000)\nstatic void\nsqliteBeginForeignInsert(ModifyTableState *mtstate,\n\t\t\t\t\t\t ResultRelInfo *resultRelInfo)\n{\n\telog(ERROR, \"Not support partition insert\");\n}\nstatic void\nsqliteEndForeignInsert(EState *estate,\n\t\t\t\t\t   ResultRelInfo *resultRelInfo)\n{\n\telog(ERROR, \"Not support partition insert\");\n}\n#endif\n/*\n * sqliteExecForeignInsert\n *\t\tInsert one row into a foreign table\n */\nstatic TupleTableSlot *\nsqliteExecForeignInsert(EState *estate,\n\t\t\t\t\t\tResultRelInfo *resultRelInfo,\n\t\t\t\t\t\tTupleTableSlot *slot,\n\t\t\t\t\t\tTupleTableSlot *planSlot)\n{\n\tTupleTableSlot **rslot;\n\tint\t\t\tnumSlots = 1;\n\n\trslot = sqlite_execute_insert(estate, resultRelInfo, CMD_INSERT,\n\t\t\t\t\t\t\t\t  &slot, &planSlot, &numSlots);\n\n\treturn rslot ? *rslot : NULL;\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * sqliteExecForeignBatchInsert\n *\t\tInsert multiple rows into a foreign table\n */\nstatic TupleTableSlot **\nsqliteExecForeignBatchInsert(EState *estate,\n\t\t\t\t\t\t\t ResultRelInfo *resultRelInfo,\n\t\t\t\t\t\t\t TupleTableSlot **slots,\n\t\t\t\t\t\t\t TupleTableSlot **planSlots,\n\t\t\t\t\t\t\t int *numSlots)\n{\n\tTupleTableSlot **rslot;\n\n\trslot = sqlite_execute_insert(estate, resultRelInfo, CMD_INSERT,\n\t\t\t\t\t\t\t\t  slots, planSlots, numSlots);\n\n\treturn rslot;\n}\n\n/*\n * sqliteGetForeignModifyBatchSize\n *\t\tDetermine the maximum number of tuples that can be inserted in bulk\n *\n * Returns the batch size specified for server or table. When batching is not\n * allowed (e.g. for tables with BEFORE/AFTER ROW triggers or with RETURNING\n * clause), returns 1.\n */\nstatic int\nsqliteGetForeignModifyBatchSize(ResultRelInfo *resultRelInfo)\n{\n\tint\t\t\tbatch_size;\n\tint\t\t\tlimitVal;\n#if SQLITE_VERSION_NUMBER < 3008008\n\tint\t\t\tlimitRow;\n#endif\n#if PG_VERSION_NUM >= 160000\n\tSqliteFdwExecState *fmstate = (SqliteFdwExecState *) resultRelInfo->ri_FdwState;\n#else\n\tSqliteFdwExecState *fmstate = resultRelInfo->ri_FdwState ?\n\t(SqliteFdwExecState *) resultRelInfo->ri_FdwState :\n\tNULL;\n#endif\n\n\t/* should be called only once */\n\tAssert(resultRelInfo->ri_BatchSize == 0);\n\n\t/*\n\t * In EXPLAIN without ANALYZE, ri_fdwstate is NULL, so we have to lookup\n\t * the option directly in server/table options. Otherwise just use the\n\t * value we determined earlier.\n\t */\n\tif (fmstate)\n\t{\n\t\tbatch_size = fmstate->batch_size;\n\t\tlimitVal = (sqlite3_limit(fmstate->conn, SQLITE_LIMIT_VARIABLE_NUMBER, -1) / fmstate->p_nums);\n#if SQLITE_VERSION_NUMBER < 3008008\n\t\tlimitRow = (sqlite3_limit(fmstate->conn, SQLITE_LIMIT_COMPOUND_SELECT, -1));\n#endif\n\t}\n\telse\n\t\tbatch_size = sqlite_get_batch_size_option(resultRelInfo->ri_RelationDesc);\n\n\t/*\n\t * Disable batching when there are any BEFORE/AFTER ROW\n\t * INSERT triggers on the foreign table, or there are any\n\t * WITH CHECK OPTION constraints from parent views.\n\t *\n\t * When there are any BEFORE ROW INSERT triggers on the table, we can't\n\t * support it, because such triggers might query the table we're inserting\n\t * into and act differently if the tuples that have already been processed\n\t * and prepared for insertion are not there.\n\t */\n\tif (resultRelInfo->ri_WithCheckOptions != NIL ||\n\t\t(resultRelInfo->ri_TrigDesc &&\n\t\t (resultRelInfo->ri_TrigDesc->trig_insert_before_row ||\n\t\t  resultRelInfo->ri_TrigDesc->trig_insert_after_row)))\n\t\treturn 1;\n\n\t/*\n\t * If the foreign table has no columns, disable batching as the INSERT\n\t * syntax doesn't allow batching multiple empty rows into a zero-column\n\t * table in a single statement.  This is needed for COPY FROM, in which\n\t * case fmstate must be non-NULL.\n\t */\n\tif (fmstate && list_length(fmstate->target_attrs) == 0)\n\t\treturn 1;\n\n\n\t/*\n\t * The batch size is used specified for server/table. Make sure we don't\n\t * exceed this limit by using the maximum batch_size possible.\n\t */\n\tif (fmstate && fmstate->p_nums > 0)\n\n\t\t/*\n\t\t * If version of SQLite is less than 3.8.8, Bulk insert into SQLite\n\t\t * database has limit of 500 rows. So need use\n\t\t * SQLITE_MAX_COMPOUND_SELECT to check maximum batch_size.\n\t\t */\n#if SQLITE_VERSION_NUMBER < 3008008\n\t\tbatch_size = Min(batch_size, Min(limitVal, limitRow));\n#else\n\t\tbatch_size = Min(batch_size, limitVal);\n#endif\n\n\t/* Otherwise use the batch size specified for server/table. */\n\treturn batch_size;\n}\n\n/*\n * sqlite_find_modifytable_subplan\n *\t\tHelper routine for sqlitePlanDirectModify to find the\n *\t\tModifyTable subplan node that scans the specified RTI.\n *\n * Returns NULL if the subplan couldn't be identified.  That's not a fatal\n * error condition, we just abandon trying to do the update directly.\n */\nstatic ForeignScan *\nsqlite_find_modifytable_subplan(PlannerInfo *root,\n\t\t\t\t\t\t\t\tModifyTable *plan,\n\t\t\t\t\t\t\t\tIndex rtindex,\n\t\t\t\t\t\t\t\tint subplan_index)\n{\n\tPlan\t   *subplan = outerPlan(plan);\n\n\t/*\n\t * The cases we support are (1) the desired ForeignScan is the immediate\n\t * child of ModifyTable, or (2) it is the subplan_index'th child of an\n\t * Append node that is the immediate child of ModifyTable.  There is no\n\t * point in looking further down, as that would mean that local joins are\n\t * involved, so we can't do the update directly.\n\t *\n\t * There could be a Result atop the Append too, acting to compute the\n\t * UPDATE targetlist values.  We ignore that here; the tlist will be\n\t * checked by our caller.\n\t *\n\t * In principle we could examine all the children of the Append, but it's\n\t * currently unlikely that the core planner would generate such a plan\n\t * with the children out-of-order.  Moreover, such a search risks costing\n\t * O(N^2) time when there are a lot of children.\n\t */\n\tif (IsA(subplan, Append))\n\t{\n\t\tAppend\t   *appendplan = (Append *) subplan;\n\n\t\tif (subplan_index < list_length(appendplan->appendplans))\n\t\t\tsubplan = (Plan *) list_nth(appendplan->appendplans, subplan_index);\n\t}\n\telse if (IsA(subplan, Result) &&\n\t\t\t outerPlan(subplan) != NULL &&\n\t\t\t IsA(outerPlan(subplan), Append))\n\t{\n\t\tAppend\t   *appendplan = (Append *) outerPlan(subplan);\n\n\t\tif (subplan_index < list_length(appendplan->appendplans))\n\t\t\tsubplan = (Plan *) list_nth(appendplan->appendplans, subplan_index);\n\t}\n\n\t/* Now, have we got a ForeignScan on the desired rel? */\n\tif (IsA(subplan, ForeignScan))\n\t{\n\t\tForeignScan *fscan = (ForeignScan *) subplan;\n#if (PG_VERSION_NUMBER >= 160000)\n\t\tif (bms_is_member(rtindex, fscan->fs_base_relids))\n#else\n\t\tif (bms_is_member(rtindex, fscan->fs_relids))\n#endif\n\t\t\treturn fscan;\n\t}\n\n\treturn NULL;\n}\n#endif\n\n/*\n * sqlitePlanDirectModify\n *\t\tConsider a direct foreign table modification\n *\n * Decide whether it is safe to modify a foreign table directly, and if so,\n * rewrite subplan accordingly.\n */\nstatic bool\nsqlitePlanDirectModify(PlannerInfo *root,\n\t\t\t\t\t   ModifyTable *plan,\n\t\t\t\t\t   Index resultRelation,\n\t\t\t\t\t   int subplan_index)\n{\n\tCmdType\t\t\toperation = plan->operation;\n#if PG_VERSION_NUM < 140000\n\tPlan\t\t   *subplan;\n#endif\n\tRelOptInfo\t   *foreignrel;\n\tRangeTblEntry  *rte;\n\tSqliteFdwRelationInfo *fpinfo;\n\tRelation\t\trel;\n\tStringInfoData  sql;\n\tForeignScan\t   *fscan;\n#if PG_VERSION_NUM >= 140000\n\tList\t\t   *processed_tlist = NIL;\n#endif\n\tList\t\t   *targetAttrs = NIL;\n\tList\t\t   *remote_exprs;\n\tList\t\t   *params_list = NIL;\n\tList\t\t   *retrieved_attrs = NIL;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/*\n\t * Decide whether it is safe to modify a foreign table directly.\n\t */\n\n\t/*\n\t * The table modification must be an UPDATE or DELETE.\n\t */\n\tif (operation != CMD_UPDATE && operation != CMD_DELETE)\n\t\treturn false;\n\n\t/*\n\t * It's unsafe to modify a foreign table directly if there are any local\n\t * joins needed.\n\t */\n#if (PG_VERSION_NUM >= 140000)\n\tfscan = sqlite_find_modifytable_subplan(root, plan, resultRelation, subplan_index);\n\tif (!fscan)\n\t\treturn false;\n#else\n\tsubplan = (Plan *) list_nth(plan->plans, subplan_index);\n\tif (!IsA(subplan, ForeignScan))\n\t\treturn false;\n\tfscan = (ForeignScan *) subplan;\n#endif\n\n\t/*\n\t * It's unsafe to modify a foreign table directly if there are any quals\n\t * that should be evaluated locally.\n\t */\n#if (PG_VERSION_NUM >= 140000)\n\tif (fscan->scan.plan.qual != NIL)\n#else\n\tif (subplan->qual != NIL)\n#endif\n\t\treturn false;\n\n\t/* not supported  RETURNING clause by this FDW */\n\tif (plan->returningLists)\n\t{\n\t\treturn false;\n\t}\n\n\t/* Safe to fetch data about the target foreign rel */\n\tif (fscan->scan.scanrelid == 0)\n\t{\n\t\tforeignrel = find_join_rel(root, fscan->fs_relids);\n\t\t/* We should have a rel for this foreign join. */\n\t\tAssert(foreignrel);\n\t}\n\telse\n\t\tforeignrel = root->simple_rel_array[resultRelation];\n\n\t/*\n\t * Currently, SQLite 3.33 does support UPDATE-FROM. Because with\n\t * UPDATE-FROM we can join the target table against other tables. TODO:\n\t * After JOIN pushdown feature is supported, we need to consider the below\n\t * code to pushdown UPDATE-FROM.\n\t */\n\tif (IS_JOIN_REL(foreignrel))\n\t\treturn false;\n\n\trte = root->simple_rte_array[resultRelation];\n\tfpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\n\t/*\n\t * It's unsafe to update a foreign table directly, if any expressions to\n\t * assign to the target columns are unsafe to evaluate remotely.\n\t */\n\tif (operation == CMD_UPDATE)\n\t{\n#if (PG_VERSION_NUM >= 140000)\n\t\tListCell   *lc,\n\t\t\t\t   *lc2;\n\n\t\t/*\n\t\t * The expressions of concern are the first N columns of the processed\n\t\t * targetlist, where N is the length of the rel's update_colnos.\n\t\t */\n\t\tget_translated_update_targetlist(root, resultRelation,\n\t\t\t\t\t\t\t\t\t\t &processed_tlist, &targetAttrs);\n\t\tforboth(lc, processed_tlist, lc2, targetAttrs)\n\t\t{\n\t\t\tTargetEntry *tle = lfirst_node(TargetEntry, lc);\n\t\t\tAttrNumber\tattno = lfirst_int(lc2);\n\n\t\t\t/* update's new-value expressions shouldn't be resjunk */\n\t\t\tAssert(!tle->resjunk);\n\n\t\t\tif (attno <= InvalidAttrNumber) /* shouldn't happen */\n\t\t\t\telog(ERROR, \"system-column update is not supported\");\n\n\t\t\tif (!sqlite_is_foreign_expr(root, foreignrel, (Expr *) tle->expr))\n\t\t\t\treturn false;\n\t\t}\n#else\n\t\tint\t\t\tcol;\n\n\t\t/*\n\t\t * We transmit only columns that were explicitly targets of the\n\t\t * UPDATE, so as to avoid unnecessary data transmission.\n\t\t */\n\t\tcol = -1;\n\t\twhile ((col = bms_next_member(rte->updatedCols, col)) >= 0)\n\t\t{\n\t\t\t/* bit numbers are offset by FirstLowInvalidHeapAttributeNumber */\n\t\t\tAttrNumber\tattno = col + FirstLowInvalidHeapAttributeNumber;\n\t\t\tTargetEntry *tle;\n\n\t\t\tif (attno <= InvalidAttrNumber) /* shouldn't happen */\n\t\t\t\telog(ERROR, \"system-column update is not supported\");\n\n\t\t\ttle = get_tle_by_resno(subplan->targetlist, attno);\n\n\t\t\tif (!tle)\n\t\t\t\telog(ERROR, \"attribute number %d not found in subplan targetlist\",\n\t\t\t\t\t attno);\n\n\t\t\tif (!sqlite_is_foreign_expr(root, foreignrel, (Expr *) tle->expr))\n\t\t\t\treturn false;\n\n\t\t\ttargetAttrs = lappend_int(targetAttrs, attno);\n\t\t}\n#endif\n\t}\n\n\t/*\n\t * Ok, rewrite subplan so as to modify the foreign table directly.\n\t */\n\tinitStringInfo(&sql);\n\n\t/*\n\t * Core code already has some lock on each rel being planned, so we can\n\t * use NoLock here.\n\t */\n\trel = table_open(rte->relid, NoLock);\n\n\t/*\n\t * Recall the qual clauses that must be evaluated remotely.  (These are\n\t * bare clauses not RestrictInfos, but deparse.c's appendConditions()\n\t * doesn't care.)\n\t */\n\tremote_exprs = fpinfo->final_remote_exprs;\n\n\t/*\n\t * Construct the SQL command string.\n\t */\n\tswitch (operation)\n\t{\n\t\tcase CMD_UPDATE:\n\t\t\tsqlite_deparse_direct_update_sql(&sql, root, resultRelation, rel,\n\t\t\t\t\t\t\t\t\t\t\t foreignrel,\n#if (PG_VERSION_NUM >= 140000)\n\t\t\t\t\t\t\t\t\t\t\t processed_tlist,\n#else\n\t\t\t\t\t\t\t\t\t\t\t ((Plan *) fscan)->targetlist,\n#endif\n\t\t\t\t\t\t\t\t\t\t\t targetAttrs,\n\t\t\t\t\t\t\t\t\t\t\t remote_exprs, &params_list,\n\t\t\t\t\t\t\t\t\t\t\t &retrieved_attrs);\n\t\t\tbreak;\n\t\tcase CMD_DELETE:\n\t\t\tsqlite_deparse_direct_delete_sql(&sql, root, resultRelation, rel,\n\t\t\t\t\t\t\t\t\t\t\t foreignrel,\n\t\t\t\t\t\t\t\t\t\t\t remote_exprs, &params_list,\n\t\t\t\t\t\t\t\t\t\t\t &retrieved_attrs);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\telog(ERROR, \"unexpected operation: %d\", (int) operation);\n\t\t\tbreak;\n\t}\n\n\t/*\n\t * Update the operation info.\n\t */\n\tfscan->operation = operation;\n#if PG_VERSION_NUM >= 140000\n\tfscan->resultRelation = resultRelation;\n#endif\n\n\t/*\n\t * Update the fdw_exprs list that will be available to the executor.\n\t */\n\tfscan->fdw_exprs = params_list;\n\n\t/*\n\t * Update the fdw_private list that will be available to the executor.\n\t * Items in the list must match enum FdwDirectModifyPrivateIndex, above.\n\t */\n\tfscan->fdw_private = list_make4(makeString(sql.data),\n#if PG_VERSION_NUM >= 150000\n\t\t\t\t\t\t\t\t\tmakeBoolean((retrieved_attrs != NIL)),\n\t\t\t\t\t\t\t\t\tretrieved_attrs,\n\t\t\t\t\t\t\t\t\tmakeBoolean(plan->canSetTag));\n#else\n\t\t\t\t\t\t\t\t\tmakeInteger(0),\n\t\t\t\t\t\t\t\t\tretrieved_attrs,\n\t\t\t\t\t\t\t\t\tmakeInteger(plan->canSetTag));\n#endif\n\n\t/*\n\t * Update the foreign-join-related fields.\n\t */\n\tif (fscan->scan.scanrelid == 0)\n\t{\n\t\t/* No need for the outer subplan. */\n\t\tfscan->scan.plan.lefttree = NULL;\n\t}\n\n\ttable_close(rel, NoLock);\n\treturn true;\n}\n\n/*\n * sqliteBeginDirectModify\n *\t\tPrepare a direct foreign table modification\n */\nstatic void\nsqliteBeginDirectModify(ForeignScanState *node, int eflags)\n{\n\tForeignScan\t\t   *fsplan = (ForeignScan *) node->ss.ps.plan;\n\tEState\t\t\t   *estate = node->ss.ps.state;\n\tSqliteFdwDirectModifyState *dmstate;\n\tIndex\t\t\t\trtindex;\n\tint\t\t\t\t\tnumParams;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/*\n\t * Do nothing in EXPLAIN (no ANALYZE) case.  node->fdw_state stays NULL.\n\t */\n\tif (eflags & EXEC_FLAG_EXPLAIN_ONLY)\n\t\treturn;\n\n\t/*\n\t * We'll save private state in node->fdw_state.\n\t */\n\tdmstate = (SqliteFdwDirectModifyState *) palloc0(sizeof(SqliteFdwDirectModifyState));\n\tnode->fdw_state = (void *) dmstate;\n\n\t/* Get info about foreign table. */\n#if (PG_VERSION_NUM >= 140000)\n\trtindex = node->resultRelInfo->ri_RangeTableIndex;\n#else\n\trtindex = estate->es_result_relation_info->ri_RangeTableIndex;\n#endif\n\n#if PG_VERSION_NUM >= 160000\n\trtindex = node->resultRelInfo->ri_RangeTableIndex;\n#endif\n\tif (fsplan->scan.scanrelid == 0)\n\t\tdmstate->rel = ExecOpenScanRelation(estate, rtindex, eflags);\n\telse\n\t\tdmstate->rel = node->ss.ss_currentRelation;\n\tdmstate->table = GetForeignTable(RelationGetRelid(dmstate->rel));\n\tdmstate->server = GetForeignServer(dmstate->table->serverid);\n\n\t/*\n\t * Get connection to the foreign server.  Connection manager will\n\t * establish new connection if necessary.\n\t */\n\tdmstate->conn = sqlite_get_connection(dmstate->server, false);\n\n\t/* Update the foreign-join-related fields. */\n\tif (fsplan->scan.scanrelid == 0)\n\t{\n\t\t/* Save info about foreign table. */\n\t\tdmstate->resultRel = dmstate->rel;\n\n\t\t/*\n\t\t * Set dmstate->rel to NULL to teach get_returning_data() and\n\t\t * make_tuple_from_result_row() that columns fetched from the remote\n\t\t * server are described by fdw_scan_tlist of the foreign-scan plan\n\t\t * node, not the tuple descriptor for the target relation.\n\t\t */\n\t\tdmstate->rel = NULL;\n\t}\n\n\t/* Initialize state variable */\n\tdmstate->num_tuples = -1;\t/* -1 means not set yet */\n\n\t/* Get private info created by planner functions. */\n\tdmstate->query = strVal(list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateUpdateSql));\n#if (PG_VERSION_NUM >= 150000)\n\tdmstate->has_returning = boolVal(list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateHasReturning));\n\tdmstate->set_processed = boolVal(list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateSetProcessed));\n#else\n\tdmstate->has_returning = intVal(list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateHasReturning));\n\tdmstate->set_processed = intVal(list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateSetProcessed));\n#endif\n\tdmstate->retrieved_attrs = (List *) list_nth(fsplan->fdw_private,\n\t\t\t\t\t\t\t\t\t\t\t\t FdwDirectModifyPrivateRetrievedAttrs);\n\n\t/* Create context for per-tuple temp workspace. */\n\tdmstate->temp_cxt = AllocSetContextCreate(estate->es_query_cxt,\n\t\t\t\t\t\t\t\t\t\t\t  \"sqlite_fdw temporary data\",\n\t\t\t\t\t\t\t\t\t\t\t  ALLOCSET_SMALL_SIZES);\n\n\t/* Initialize the SQLite statement */\n\tdmstate->stmt = NULL;\n\n\t/* Prepare SQLite statement */\n\tsqlite_prepare_wrapper(dmstate->server, dmstate->conn, dmstate->query, &dmstate->stmt, NULL, true);\n\n\t/*\n\t * Prepare for processing of parameters used in remote query, if any.\n\t */\n\tnumParams = list_length(fsplan->fdw_exprs);\n\tdmstate->numParams = numParams;\n\tif (numParams > 0)\n\t\tsqlite_prepare_query_params((PlanState *) node,\n\t\t\t\t\t\t\t\t\tfsplan->fdw_exprs,\n\t\t\t\t\t\t\t\t\tnumParams,\n\t\t\t\t\t\t\t\t\t&dmstate->param_flinfo,\n\t\t\t\t\t\t\t\t\t&dmstate->param_exprs,\n\t\t\t\t\t\t\t\t\t&dmstate->param_values,\n\t\t\t\t\t\t\t\t\t&dmstate->param_types);\n}\n\n/*\n * sqliteIterateDirectModify\n *\t\tExecute a direct foreign table modification\n */\nstatic TupleTableSlot *\nsqliteIterateDirectModify(ForeignScanState *node)\n{\n\tSqliteFdwDirectModifyState *dmstate = (SqliteFdwDirectModifyState *) node->fdw_state;\n\tEState\t   *estate = node->ss.ps.state;\n\tTupleTableSlot *slot = node->ss.ss_ScanTupleSlot;\n\tInstrumentation *instr = node->ss.ps.instrument;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tAssert(!dmstate->has_returning);\n\n\t/*\n\t * If this is the first call after Begin, execute the statement.\n\t */\n\tif (dmstate->num_tuples == -1)\n\t\tsqlite_execute_dml_stmt(node);\n\n\t/* Increment the command es_processed count if necessary. */\n\tif (dmstate->set_processed)\n\t\testate->es_processed += dmstate->num_tuples;\n\n\t/* Increment the tuple count for EXPLAIN ANALYZE if necessary. */\n\tif (instr)\n\t\tinstr->tuplecount += dmstate->num_tuples;\n\n\treturn ExecClearTuple(slot);\n}\n\n/*\n * sqliteEndDirectModify\n *\t\tFinish a direct foreign table modification\n */\nstatic void\nsqliteEndDirectModify(ForeignScanState *node)\n{\n\tSqliteFdwDirectModifyState *dmstate = (SqliteFdwDirectModifyState *) node->fdw_state;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* if dmstate is NULL, we are in EXPLAIN; nothing to do */\n\tif (dmstate == NULL)\n\t\treturn;\n\n\tif (dmstate->stmt)\n\t{\n\t\tdmstate->stmt = NULL;\n\t}\n}\n\n/*\n * sqliteExplainDirectModify\n *\t\tProduce extra output for EXPLAIN of a ForeignScan that modifies a\n *\t\tforeign table directly\n */\nstatic void\nsqliteExplainDirectModify(ForeignScanState *node,\n\t\t\t\t\t\t  struct ExplainState *es)\n{\n\tList\t   *fdw_private;\n\tchar\t   *sql;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tif (es->verbose)\n\t{\n\t\tfdw_private = ((ForeignScan *) node->ss.ps.plan)->fdw_private;\n\t\tsql = strVal(list_nth(fdw_private, FdwDirectModifyPrivateUpdateSql));\n\t\tExplainPropertyText(\"SQLite query\", sql, es);\n\t}\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * sqliteExecForeignTruncate\n *\t\tTruncate one or more foreign tables\n */\nstatic void\nsqliteExecForeignTruncate(List *rels,\n\t\t\t\t\t\t  DropBehavior behavior,\n\t\t\t\t\t\t  bool restart_seqs)\n{\n\tOid\t\t\t\tserverid = InvalidOid;\n\tsqlite3\t\t   *conn = NULL;\n\tStringInfoData  sql;\n\tListCell\t   *lc;\n\tbool\t\t\tserver_truncatable = true;\n\n\t/*\n\t * By default, all sqlite_fdw foreign tables are assumed truncatable. This\n\t * can be overridden by a per-server setting, which in turn can be\n\t * overridden by a per-table setting.\n\t */\n\tforeach(lc, rels)\n\t{\n\t\tForeignServer *server = NULL;\n\t\tRelation\trel = lfirst(lc);\n\t\tForeignTable *table = GetForeignTable(RelationGetRelid(rel));\n\t\tListCell   *cell;\n\t\tbool\t\ttruncatable;\n\n\t\t/*\n\t\t * First time through, determine whether the foreign server allows\n\t\t * truncates. Since all specified foreign tables are assumed to belong\n\t\t * to the same foreign server, this result can be used for other\n\t\t * foreign tables.\n\t\t */\n\t\tif (!OidIsValid(serverid))\n\t\t{\n\t\t\tserverid = table->serverid;\n\t\t\tserver = GetForeignServer(serverid);\n\n\t\t\tforeach(cell, server->options)\n\t\t\t{\n\t\t\t\tDefElem\t\t*defel = (DefElem *) lfirst(cell);\n\n\t\t\t\tif (strcmp(defel->defname, \"truncatable\") == 0)\n\t\t\t\t{\n\t\t\t\t\tserver_truncatable = defGetBoolean(defel);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Confirm that all specified foreign tables belong to the same\n\t\t * foreign server.\n\t\t */\n\t\tAssert(table->serverid == serverid);\n\n\t\t/* Determine whether this foreign table allows truncations */\n\t\ttruncatable = server_truncatable;\n\t\tforeach(cell, table->options)\n\t\t{\n\t\t\tDefElem\t\t*defel = (DefElem *) lfirst(cell);\n\n\t\t\tif (strcmp(defel->defname, \"truncatable\") == 0)\n\t\t\t{\n\t\t\t\ttruncatable = defGetBoolean(defel);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!truncatable)\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),\n\t\t\t\t\t errmsg(\"foreign table \\\"%s\\\" does not allow truncates\",\n\t\t\t\t\t\t\tRelationGetRelationName(rel))));\n\t}\n\tAssert(OidIsValid(serverid));\n\n\t/*\n\t * Get connection to the foreign server.  Connection manager will\n\t * establish new connection if necessary.\n\t */\n\tconn = sqlite_get_connection(GetForeignServer(serverid), true);\n\n\t/*\n\t * TRUNCATE does not support in SQLite, so convert into DELETE FROM to\n\t * delete each table.\n\t */\n\tinitStringInfo(&sql);\n\tsqlite_deparse_truncate(&sql, rels);\n\n\t/* Issue the DELETE statement without WHERE clause to remote server */\n\tsqlite_do_sql_command(conn, sql.data, ERROR, NULL);\n\n\tpfree(sql.data);\n}\n#endif\n\nstatic void\nbindJunkColumnValue(SqliteFdwExecState * fmstate,\n\t\t\t\t\tTupleTableSlot *slot,\n\t\t\t\t\tTupleTableSlot *planSlot,\n\t\t\t\t\tOid foreignTableId,\n\t\t\t\t\tint bindnum)\n{\n\tint\t\t\ti;\n\n\t/* Bind where condition using junk column */\n\tfor (i = 0; i < slot->tts_tupleDescriptor->natts; ++i)\n\t{\n\t\tForm_pg_attribute att = TupleDescAttr(slot->tts_tupleDescriptor, i);\n\t\tAttrNumber\tattrno = att->attnum;\n\t\tList\t   *options;\n\t\tListCell   *option;\n\n\t\t/* look for the \"key\" option on this column */\n\t\tif (fmstate->junk_idx[i] == InvalidAttrNumber)\n\t\t\tcontinue;\n\t\toptions = GetForeignColumnOptions(foreignTableId, attrno);\n\t\tforeach(option, options)\n\t\t{\n\t\t\tDefElem\t   *def = (DefElem *) lfirst(option);\n\t\t\tbool\t\tis_null = false;\n\n\t\t\tif (IS_KEY_COLUMN(def))\n\t\t\t{\n\t\t\t\tDatum\t\tvalue;\n\t\t\t\t/* Get the id that was passed up as a resjunk column */\n\t\t\t\tvalue = ExecGetJunkAttribute(planSlot, fmstate->junk_idx[i], &is_null);\n\t\t\t\t/* Bind qual */\n\t\t\t\tsqlite_bind_sql_var(att, bindnum, value, fmstate->stmt, &is_null, foreignTableId);\n\t\t\t\tbindnum++;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * sqliteExecForeignUpdate\n *\t\tUpdate one row in a foreign table\n */\nstatic TupleTableSlot *\nsqliteExecForeignUpdate(EState *estate,\n\t\t\t\t\t\tResultRelInfo *resultRelInfo,\n\t\t\t\t\t\tTupleTableSlot *slot,\n\t\t\t\t\t\tTupleTableSlot *planSlot)\n{\n\tSqliteFdwExecState *fmstate = (SqliteFdwExecState *) resultRelInfo->ri_FdwState;\n\tRelation\trel = resultRelInfo->ri_RelationDesc;\n\tOid\t\t\tforeignTableId = RelationGetRelid(rel);\n\tListCell   *lc = NULL;\n\tint\t\t\tbindnum = 0;\n\tint\t\t\ti = 0;\n\tint\t\t\trc = 0;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* Bind the values */\n\tforeach(lc, fmstate->retrieved_attrs)\n\t{\n\t\tint\t\t\tattnum = lfirst_int(lc);\n\t\tbool\t\tis_null;\n\t\tDatum\t\tvalue = 0;\n\t\tForm_pg_attribute bind_att = NULL;\n#if PG_VERSION_NUM >= 140000\n\t\tTupleDesc\ttupdesc = RelationGetDescr(fmstate->rel);\n\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum - 1);\n\n\t\t/* Ignore generated columns and skip bind value */\n\t\tif (attr->attgenerated)\n\t\t\tcontinue;\n#endif\n\t\t/* first attribute cannot be in target list attribute */\n\t\tbind_att = TupleDescAttr(slot->tts_tupleDescriptor, attnum - 1);\n\t\tvalue = slot_getattr(slot, attnum, &is_null);\n\n\t\tsqlite_bind_sql_var(bind_att, bindnum, value, fmstate->stmt, &is_null, foreignTableId);\n\t\tbindnum++;\n\t\ti++;\n\t}\n\n\tbindJunkColumnValue(fmstate, slot, planSlot, foreignTableId, bindnum);\n\n\t/* Execute the query */\n\trc = sqlite3_step(fmstate->stmt);\n\tif (rc != SQLITE_DONE)\n\t{\n\t\tsqlitefdw_report_error(ERROR, fmstate->stmt, fmstate->conn, NULL, rc);\n\t}\n\n\tsqlite3_reset(fmstate->stmt);\n\n\t/* Return NULL if nothing was updated on the remote end */\n\treturn slot;\n}\n\nstatic TupleTableSlot *\nsqliteExecForeignDelete(EState *estate,\n\t\t\t\t\t\tResultRelInfo *resultRelInfo,\n\t\t\t\t\t\tTupleTableSlot *slot,\n\t\t\t\t\t\tTupleTableSlot *planSlot)\n{\n\tSqliteFdwExecState *fmstate = (SqliteFdwExecState *) resultRelInfo->ri_FdwState;\n\tRelation\trel = resultRelInfo->ri_RelationDesc;\n\tOid\t\t\tforeignTableId = RelationGetRelid(rel);\n\tint\t\t\trc = 0;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tbindJunkColumnValue(fmstate, slot, planSlot, foreignTableId, 0);\n\n\t/* Execute the query */\n\trc = sqlite3_step(fmstate->stmt);\n\tif (rc != SQLITE_DONE)\n\t{\n\t\tsqlitefdw_report_error(ERROR, fmstate->stmt, fmstate->conn, NULL, rc);\n\t}\n\tsqlite3_reset(fmstate->stmt);\n\t/* Return NULL if nothing was updated on the remote end */\n\treturn slot;\n}\n\nstatic void\nsqliteEndForeignModify(EState *estate,\n\t\t\t\t\t   ResultRelInfo *resultRelInfo)\n{\n\n\tSqliteFdwExecState *fmstate = (SqliteFdwExecState *) resultRelInfo->ri_FdwState;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\tif (fmstate && fmstate->stmt)\n\t{\n\t\tfmstate->stmt = NULL;\n\t}\n}\n\nstatic void\nsqliteExplainForeignScan(ForeignScanState *node,\n\t\t\t\t\t\t struct ExplainState *es)\n{\n\tForeignScan *plan = castNode(ForeignScan, node->ss.ps.plan);\n\tList\t   *fdw_private = plan->fdw_private;\n\tchar\t   *sql = strVal(list_nth(fdw_private, FdwScanPrivateSelectSql));\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\tif (es->verbose)\n\t{\n\t\tExplainPropertyText(\"SQLite query\", sql, es);\n\t}\n}\n\nstatic void\nsqliteExplainForeignModify(ModifyTableState *mtstate,\n\t\t\t\t\t\t   ResultRelInfo *rinfo,\n\t\t\t\t\t\t   List *fdw_private,\n\t\t\t\t\t\t   int subplan_index,\n\t\t\t\t\t\t   struct ExplainState *es)\n{\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n#if PG_VERSION_NUM >= 140000\n\tif (es->verbose)\n\t{\n\t\t/*\n\t\t * For INSERT we should always have batch size >= 1, but UPDATE and\n\t\t * DELETE don't support batching so don't show the property.\n\t\t */\n\t\tif (rinfo->ri_BatchSize > 0)\n\t\t\tExplainPropertyInteger(\"Batch Size\", NULL, rinfo->ri_BatchSize, es);\n\t}\n#endif\n}\n\nstatic bool\nsqliteAnalyzeForeignTable(Relation relation,\n\t\t\t\t\t\t  AcquireSampleRowsFunc *func,\n\t\t\t\t\t\t  BlockNumber *totalpages)\n{\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\treturn false;\n}\n\n/*\n * Import a foreign schema\n */\nstatic List *\nsqliteImportForeignSchema(ImportForeignSchemaStmt *stmt,\n\t\t\t\t\t\t  Oid serverOid)\n{\n\tsqlite3\t\t   *volatile db = NULL;\n\tsqlite3_stmt   *volatile sql_stmt = NULL;\n\tsqlite3_stmt   *volatile pragma_stmt = NULL;\n\tForeignServer  *server;\n\tListCell\t   *lc;\n\tStringInfoData  buf;\n\tList\t \t   *commands = NIL;\n\tbool\t\t\timport_default = false;\n\tbool\t\t\timport_not_null = true;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/* Parse statement options */\n\tforeach(lc, stmt->options)\n\t{\n\t\tDefElem\t\t*def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"import_default\") == 0)\n\t\t\timport_default = defGetBoolean(def);\n\t\telse if (strcmp(def->defname, \"import_not_null\") == 0)\n\t\t\timport_not_null = defGetBoolean(def);\n\t\telse\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_FDW_INVALID_OPTION_NAME),\n\t\t\t\t\t errmsg(\"invalid option \\\"%s\\\"\", def->defname)));\n\t}\n\n\tserver = GetForeignServerByName(stmt->server_name, false);\n\tdb = sqlite_get_connection(server, false);\n\n\tPG_TRY();\n\t{\n\t\t/* You want all tables, except system tables */\n\t\tinitStringInfo(&buf);\n\t\tappendStringInfo(&buf, \"SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%%'\");\n\n\t\t/* Apply restrictions for LIMIT TO and EXCEPT */\n\t\tif (stmt->list_type == FDW_IMPORT_SCHEMA_LIMIT_TO ||\n\t\t\tstmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT)\n\t\t{\n\t\t\tbool\t\tfirst_item = true;\n\n\t\t\tappendStringInfoString(&buf, \" AND name \");\n\t\t\tif (stmt->list_type == FDW_IMPORT_SCHEMA_EXCEPT)\n\t\t\t\tappendStringInfoString(&buf, \"NOT \");\n\t\t\tappendStringInfoString(&buf, \"IN (\");\n\n\t\t\tforeach(lc, stmt->table_list)\n\t\t\t{\n\t\t\t\tRangeVar   *rv = (RangeVar *) lfirst(lc);\n\n\t\t\t\tif (first_item)\n\t\t\t\t\tfirst_item = false;\n\t\t\t\telse\n\t\t\t\t\tappendStringInfoString(&buf, \", \");\n\n\t\t\t\tappendStringInfoString(&buf, quote_literal_cstr(rv->relname));\n\t\t\t}\n\t\t\tappendStringInfoChar(&buf, ')');\n\t\t}\n\n\t\tsqlite_prepare_wrapper(server, db, buf.data, (sqlite3_stmt * *) & sql_stmt, NULL, false);\n\n\t\t/* Scan all rows for this table */\n\t\tfor (;;)\n\t\t{\n\n\t\t\tchar\t   *table;\n\t\t\tchar\t   *query;\n\t\t\tbool\t\tfirst_item = true;\n\t\t\tint\t\t\trc = sqlite3_step(sql_stmt);\n\n\t\t\tif (rc == SQLITE_DONE)\n\t\t\t\tbreak;\n\t\t\telse if (rc != SQLITE_ROW)\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t * Not pass sql_stmt to sqlitefdw_report_error because it is\n\t\t\t\t * finalized in PG_CATCH\n\t\t\t\t */\n\t\t\t\tsqlitefdw_report_error(ERROR, NULL, db, sqlite3_sql(sql_stmt), rc);\n\t\t\t}\n\t\t\ttable = (char *) sqlite3_column_text(sql_stmt, 0);\n\n\t\t\tresetStringInfo(&buf);\n\t\t\tappendStringInfo(&buf, \"CREATE FOREIGN TABLE %s.%s (\\n\",\n\t\t\t\t\t\t\t quote_identifier(stmt->local_schema), quote_identifier(table));\n\n\t\t\tquery = palloc0(strlen(table) + 30);\n\t\t\tsprintf(query, \"PRAGMA table_info(%s)\", quote_identifier(table));\n\n\t\t\tsqlite_prepare_wrapper(server, db, query, (sqlite3_stmt * *) & pragma_stmt, NULL, false);\n\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\tchar\t   *col_name;\n\t\t\t\tchar\t   *type_name;\n\t\t\t\tbool\t\tnot_null;\n\t\t\t\tchar\t   *default_val;\n\t\t\t\tint\t\t\tprimary_key;\n\n\t\t\t\trc = sqlite3_step(pragma_stmt);\n\t\t\t\tif (rc == SQLITE_DONE)\n\t\t\t\t\tbreak;\n\t\t\t\telse if (rc != SQLITE_ROW)\n\t\t\t\t{\n\t\t\t\t\t/* Not pass sql_stmt because it is finalized in PG_CATCH */\n\t\t\t\t\tsqlitefdw_report_error(ERROR, NULL, db, sqlite3_sql(pragma_stmt), rc);\n\t\t\t\t}\n\t\t\t\tcol_name = (char *) sqlite3_column_text(pragma_stmt, 1);\n\t\t\t\ttype_name = (char *) sqlite3_column_text(pragma_stmt, 2);\n\t\t\t\tnot_null = (sqlite3_column_int(pragma_stmt, 3) == 1);\n\t\t\t\tdefault_val = (char *) sqlite3_column_text(pragma_stmt, 4);\n\t\t\t\tprimary_key = sqlite3_column_int(pragma_stmt, 5);\n\n\t\t\t\tif (first_item)\n\t\t\t\t\tfirst_item = false;\n\t\t\t\telse\n\t\t\t\t\tappendStringInfoString(&buf, \",\\n\");\n\n\t\t\t\tappendStringInfo(&buf, \"%s \", quote_identifier(col_name));\n\n\t\t\t\tsqlite_to_pg_type(&buf, type_name);\n\n\t\t\t\t/* part of the primary key */\n\t\t\t\tif (primary_key)\n\t\t\t\t\tappendStringInfo(&buf, \" OPTIONS (key 'true')\");\n\n\t\t\t\tif (not_null && import_not_null)\n\t\t\t\t\tappendStringInfo(&buf, \" NOT NULL\");\n\n\t\t\t\tif (default_val && import_default)\n\t\t\t\t\tappendStringInfo(&buf, \" DEFAULT %s\", default_val);\n\n\t\t\t}\n\n\t\t\tsqlite3_finalize(pragma_stmt);\n\t\t\tpragma_stmt = NULL;\n\n\t\t\tappendStringInfo(&buf, \"\\n) SERVER %s\\nOPTIONS (table \",\n\t\t\t\t\t\t\t quote_identifier(stmt->server_name));\n\t\t\tsqlite_deparse_string_literal(&buf, table);\n\t\t\tappendStringInfoString(&buf, \");\");\n\t\t\tcommands = lappend(commands, pstrdup(buf.data));\n\n\t\t\telog(DEBUG1, \"sqlite_fdw : %s %s\", __func__, pstrdup(buf.data));\n\t\t}\n\n\t}\n\tPG_CATCH();\n\t{\n\t\tif (sql_stmt)\n\t\t\tsqlite3_finalize(sql_stmt);\n\t\tif (pragma_stmt)\n\t\t\tsqlite3_finalize(pragma_stmt);\n\t\tPG_RE_THROW();\n\t}\n\tPG_END_TRY();\n\n\tif (sql_stmt)\n\t\tsqlite3_finalize(sql_stmt);\n\tif (pragma_stmt)\n\t\tsqlite3_finalize(pragma_stmt);\n\n\treturn commands;\n}\n\n#if PG_VERSION_NUM >= 170000\n/*\n * Check if reltarget is safe enough to push down semi-join.  Reltarget is not\n * safe, if it contains references to inner rel relids, which do not belong to\n * outer rel.\n */\nstatic bool\nsqlite_semijoin_target_ok(PlannerInfo *root, RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel)\n{\n\tList *vars;\n\tListCell *lc;\n\tbool ok = true;\n\n\tAssert(joinrel->reltarget);\n\n\tvars = pull_var_clause((Node *)joinrel->reltarget->exprs, PVC_INCLUDE_PLACEHOLDERS);\n\n\tforeach (lc, vars)\n\t{\n\t\tVar *var = (Var *)lfirst(lc);\n\n\t\tif (!IsA(var, Var))\n\t\t\tcontinue;\n\n\t\tif (bms_is_member(var->varno, innerrel->relids) &&\n\t\t\t!bms_is_member(var->varno, outerrel->relids))\n\t\t{\n\t\t\t/*\n\t\t\t * The planner can create semi-join, which refers to inner rel\n\t\t\t * vars in its target list. However, we deparse semi-join as an\n\t\t\t * exists() subquery, so can't handle references to inner rel in\n\t\t\t * the target list.\n\t\t\t */\n\t\t\tok = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn ok;\n}\n#endif\n\n/*\n * Assess whether the join between inner and outer relations can be pushed\n * down to the foreign server. As a side effect, save information we obtain\n * in this function to SqliteFdwRelationInfo passed in.\n */\nstatic bool\nsqlite_foreign_join_ok(PlannerInfo *root, RelOptInfo *joinrel, JoinType jointype,\n\t\t\t\t\t   RelOptInfo *outerrel, RelOptInfo *innerrel,\n\t\t\t\t\t   JoinPathExtraData *extra)\n{\n\tSqliteFdwRelationInfo *fpinfo;\n\tSqliteFdwRelationInfo *fpinfo_o;\n\tSqliteFdwRelationInfo *fpinfo_i;\n\tListCell   *lc;\n\tList\t   *joinclauses;\n\n#if PG_VERSION_NUM >= 170000\n\t/*\n\t * We support pushing down INNER, LEFT and SEMI joins.\n\t * Constructing queries representing ANTI joins is hard, hence not\n\t * considered right now.\n\t */\n\n\tif (jointype != JOIN_INNER && jointype != JOIN_LEFT &&\n\t\tjointype != JOIN_SEMI)\n\t\treturn false;\n\n\t/*\n\t * We can't push down semi-join if its reltarget is not safe\n\t */\n\tif ((jointype == JOIN_SEMI) && !sqlite_semijoin_target_ok(root, joinrel, outerrel, innerrel))\n\t\treturn false;\n#else\n\t/*\n\t * We support pushing down INNER and LEFT joins. Constructing queries\n\t * representing SEMI and ANTI joins is hard, hence not considered right\n\t * now.\n\t */\n\tif (jointype != JOIN_INNER && jointype != JOIN_LEFT)\n\t\treturn false;\n#endif\n\n\t/*\n\t * If either of the joining relations is marked as unsafe to pushdown, the\n\t * join can not be pushed down.\n\t */\n\tfpinfo = (SqliteFdwRelationInfo *) joinrel->fdw_private;\n\tfpinfo_o = (SqliteFdwRelationInfo *) outerrel->fdw_private;\n\tfpinfo_i = (SqliteFdwRelationInfo *) innerrel->fdw_private;\n\tif (!fpinfo_o || !fpinfo_o->pushdown_safe ||\n\t\t!fpinfo_i || !fpinfo_i->pushdown_safe)\n\t\treturn false;\n\n\t/*\n\t * If joining relations have local conditions, those conditions are\n\t * required to be applied before joining the relations. Hence the join can\n\t * not be pushed down.\n\t */\n\tif (fpinfo_o->local_conds || fpinfo_i->local_conds)\n\t\treturn false;\n\n\t/*\n\t * Merge FDW options.  We might be tempted to do this after we have deemed\n\t * the foreign join to be OK.  But we must do this beforehand so that we\n\t * know which quals can be evaluated on the foreign server, which might\n\t * depend on shippable_extensions.\n\t */\n\tfpinfo->server = fpinfo_o->server;\n\tsqlite_merge_fdw_options(fpinfo, fpinfo_o, fpinfo_i);\n\n\t/*\n\t * Separate restrict list into join quals and pushed-down (other) quals.\n\t *\n\t * Join quals belonging to an outer join must all be shippable, else we\n\t * cannot execute the join remotely.  Add such quals to 'joinclauses'.\n\t *\n\t * Add other quals to fpinfo->remote_conds if they are shippable, else to\n\t * fpinfo->local_conds.  In an inner join it's okay to execute conditions\n\t * either locally or remotely; the same is true for pushed-down conditions\n\t * at an outer join.\n\t *\n\t * Note we might return failure after having already scribbled on\n\t * fpinfo->remote_conds and fpinfo->local_conds.  That's okay because we\n\t * won't consult those lists again if we deem the join unshippable.\n\t */\n\tjoinclauses = NIL;\n\tforeach(lc, extra->restrictlist)\n\t{\n\t\tRestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);\n\t\tbool\t\tis_remote_clause = sqlite_is_foreign_expr(root, joinrel,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  rinfo->clause);\n\n\t\tif (IS_OUTER_JOIN(jointype) &&\n\t\t\t!RINFO_IS_PUSHED_DOWN(rinfo, joinrel->relids))\n\t\t{\n\t\t\tif (!is_remote_clause)\n\t\t\t\treturn false;\n\t\t\tjoinclauses = lappend(joinclauses, rinfo);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (is_remote_clause)\n\t\t\t\tfpinfo->remote_conds = lappend(fpinfo->remote_conds, rinfo);\n\t\t\telse\n\t\t\t\tfpinfo->local_conds = lappend(fpinfo->local_conds, rinfo);\n\t\t}\n\t}\n\n\t/*\n\t * sqlite_deparse_explicit_target_list() isn't smart enough to handle\n\t * anything other than a Var.  In particular, if there's some\n\t * PlaceHolderVar that would need to be evaluated within this join tree\n\t * (because there's an upper reference to a quantity that may go to NULL\n\t * as a result of an outer join), then we can't try to push the join down\n\t * because we'll fail when we get to\n\t * sqlite_deparse_explicit_target_list(). However, a PlaceHolderVar that\n\t * needs to be evaluated *at the top* of this join tree is OK, because we\n\t * can do that locally after fetching the results from the remote side.\n\t */\n\tforeach(lc, root->placeholder_list)\n\t{\n\t\tPlaceHolderInfo *phinfo = lfirst(lc);\n\t\tRelids\t\trelids;\n\n#if (PG_VERSION_NUM >= 100000)\n\t\t/* PlaceHolderInfo refers to parent relids, not child relids. */\n\t\trelids = IS_OTHER_REL(joinrel) ?\n\t\t\tjoinrel->top_parent_relids : joinrel->relids;\n#else\n\t\trelids = joinrel->relids;\n#endif\n\n\t\tif (bms_is_subset(phinfo->ph_eval_at, relids) &&\n\t\t\tbms_nonempty_difference(relids, phinfo->ph_eval_at))\n\t\t\treturn false;\n\t}\n\n\t/* Save the join clauses, for later use. */\n\tfpinfo->joinclauses = joinclauses;\n\n\tfpinfo->outerrel = outerrel;\n\tfpinfo->innerrel = innerrel;\n\tfpinfo->jointype = jointype;\n\n\t/*\n\t * By default, both the input relations are not required to be deparsed as\n\t * subqueries, but there might be some relations covered by the input\n\t * relations that are required to be deparsed as subqueries, so save the\n\t * relids of those relations for later use by the deparser.\n\t */\n\tfpinfo->make_outerrel_subquery = false;\n\tfpinfo->make_innerrel_subquery = false;\n\tAssert(bms_is_subset(fpinfo_o->lower_subquery_rels, outerrel->relids));\n\tAssert(bms_is_subset(fpinfo_i->lower_subquery_rels, innerrel->relids));\n\tfpinfo->lower_subquery_rels = bms_union(fpinfo_o->lower_subquery_rels,\n\t\t\t\t\t\t\t\t\t\t\tfpinfo_i->lower_subquery_rels);\n#if PG_VERSION_NUM >= 170000\n\tfpinfo->hidden_subquery_rels = bms_union(fpinfo_o->hidden_subquery_rels,\n\t\t\t\t\t\t\t\t\t\t\t fpinfo_i->hidden_subquery_rels);\n#endif\n\t/*\n\t * Pull the other remote conditions from the joining relations into join\n\t * clauses or other remote clauses (remote_conds) of this relation\n\t * wherever possible. This avoids building subqueries at every join step.\n\t *\n\t * For an inner join, clauses from both the relations are added to the\n\t * other remote clauses. For LEFT and RIGHT OUTER join, the clauses from\n\t * the outer side are added to remote_conds since those can be evaluated\n\t * after the join is evaluated. The clauses from inner side are added to\n\t * the joinclauses, since they need to be evaluated while constructing the\n\t * join.\n\t *\n\t * For SEMI-JOIN clauses from inner relation can not be added to\n\t * remote_conds, but should be treated as join clauses (as they are\n\t * deparsed to EXISTS subquery, where inner relation can be referred). A\n\t * list of relation ids, which can't be referred to from higher levels, is\n\t * preserved as a hidden_subquery_rels list.\n\t *\n\t * For a FULL OUTER JOIN, the other clauses from either relation can not\n\t * be added to the joinclauses or remote_conds, since each relation acts\n\t * as an outer relation for the other.\n\t *\n\t * The joining sides can not have local conditions, thus no need to test\n\t * shippability of the clauses being pulled up.\n\t */\n\tswitch (jointype)\n\t{\n\t\tcase JOIN_INNER:\n\t\t\tfpinfo->remote_conds = list_concat(fpinfo->remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t   fpinfo_i->remote_conds);\n\t\t\tfpinfo->remote_conds = list_concat(fpinfo->remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t   fpinfo_o->remote_conds);\n\t\t\tbreak;\n\n\t\tcase JOIN_LEFT:\n\t\t\tfpinfo->joinclauses = list_concat(fpinfo->joinclauses,\n\t\t\t\t\t\t\t\t\t\t\t  fpinfo_i->remote_conds);\n\t\t\tfpinfo->remote_conds = list_concat(fpinfo->remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t   fpinfo_o->remote_conds);\n\t\t\tbreak;\n#if PG_VERSION_NUM >= 170000\n\tcase JOIN_SEMI:\n\t\tfpinfo->joinclauses = list_concat(fpinfo->joinclauses,\n\t\t\t\t\t\t\t\t\t\t  fpinfo_i->remote_conds);\n\t\tfpinfo->joinclauses = list_concat(fpinfo->joinclauses,\n\t\t\t\t\t\t\t\t\t\t  fpinfo->remote_conds);\n\t\tfpinfo->remote_conds = list_copy(fpinfo_o->remote_conds);\n\t\tfpinfo->hidden_subquery_rels = bms_union(fpinfo->hidden_subquery_rels,\n\t\t\t\t\t\t\t\t\t\t\t\t innerrel->relids);\n\t\tbreak;\n#endif\n\n\t\tdefault:\n\t\t\t/* Should not happen, we have just checked this above */\n\t\t\telog(ERROR, \"unsupported join type %d\", jointype);\n\t}\n\n\t/*\n\t * For an inner join, all restrictions can be treated alike. Treating the\n\t * pushed down conditions as join conditions allows a top level full outer\n\t * join to be deparsed without requiring subqueries.\n\t */\n\tif (jointype == JOIN_INNER)\n\t{\n\t\tAssert(!fpinfo->joinclauses);\n\t\tfpinfo->joinclauses = fpinfo->remote_conds;\n\t\tfpinfo->remote_conds = NIL;\n\t}\n#if PG_VERSION_NUM >= 170000\n\telse if (jointype == JOIN_LEFT || jointype == JOIN_RIGHT || jointype == JOIN_FULL)\n\t{\n\t\t/*\n\t\t * Conditions, generated from semi-joins, should be evaluated before\n\t\t * LEFT/RIGHT/FULL join.\n\t\t */\n\t\tif (!bms_is_empty(fpinfo_o->hidden_subquery_rels))\n\t\t{\n\t\t\tfpinfo->make_outerrel_subquery = true;\n\t\t\tfpinfo->lower_subquery_rels = bms_add_members(fpinfo->lower_subquery_rels, outerrel->relids);\n\t\t}\n\n\t\tif (!bms_is_empty(fpinfo_i->hidden_subquery_rels))\n\t\t{\n\t\t\tfpinfo->make_innerrel_subquery = true;\n\t\t\tfpinfo->lower_subquery_rels = bms_add_members(fpinfo->lower_subquery_rels, innerrel->relids);\n\t\t}\n\t}\n#endif\n\t/* Mark that this join can be pushed down safely */\n\tfpinfo->pushdown_safe = true;\n\n\t/*\n\t * Set # of retrieved rows and cached relation costs to some negative\n\t * value, so that we can detect when they are set to some sensible values,\n\t * during one (usually the first) of the calls to\n\t * sqlite_estimate_path_cost_size.\n\t */\n\tfpinfo->retrieved_rows = -1;\n\tfpinfo->rel_startup_cost = -1;\n\tfpinfo->rel_total_cost = -1;\n\n\t/*\n\t * Set the string describing this join relation to be used in EXPLAIN\n\t * output of corresponding ForeignScan.  Note that the decoration we add\n\t * to the base relation names mustn't include any digits, or it'll confuse\n\t * sqliteExplainForeignScan.\n\t */\n\tfpinfo->relation_name = psprintf(\"(%s) %s JOIN (%s)\",\n\t\t\t\t\t\t\t\t\t fpinfo_o->relation_name,\n\t\t\t\t\t\t\t\t\t sqlite_get_jointype_name(fpinfo->jointype),\n\t\t\t\t\t\t\t\t\t fpinfo_i->relation_name);\n\n\t/*\n\t * Set the relation index.  This is defined as the position of this\n\t * joinrel in the join_rel_list list plus the length of the rtable list.\n\t * Note that since this joinrel is at the end of the join_rel_list list\n\t * when we are called, we can get the position by list_length.\n\t */\n\tAssert(fpinfo->relation_index == 0);\t/* shouldn't be set yet */\n\tfpinfo->relation_index =\n\t\tlist_length(root->parse->rtable) + list_length(root->join_rel_list);\n\n\treturn true;\n}\n\n/*\n * Adjust the cost estimates of a foreign grouping path to include the cost\n * of generating properly-sorted output.\n */\nstatic void\nsqlite_adjust_foreign_grouping_path_cost(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t List *pathkeys,\n\t\t\t\t\t\t\t\t\t\t double retrieved_rows,\n\t\t\t\t\t\t\t\t\t\t double width,\n\t\t\t\t\t\t\t\t\t\t double limit_tuples,\n\t\t\t\t\t\t\t\t\t\t Cost *p_startup_cost,\n\t\t\t\t\t\t\t\t\t\t Cost *p_run_cost)\n{\n\t/*\n\t * If the GROUP BY clause isn't sort-able, the plan chosen by the remote\n\t * side is unlikely to generate properly-sorted output, so it would need\n\t * an explicit sort; adjust the given costs with cost_sort().  Likewise,\n\t * if the GROUP BY clause is sort-able but isn't a superset of the given\n\t * pathkeys, adjust the costs with that function.  Otherwise, adjust the\n\t * costs by applying the same heuristic as for the scan or join case.\n\t */\n#if PG_VERSION_NUM >= 160000\n\tif (!grouping_is_sortable(root->processed_groupClause) ||\n\t!pathkeys_contained_in(pathkeys, root->group_pathkeys))\n#else\n\tif (!grouping_is_sortable(root->parse->groupClause) ||\n\t!pathkeys_contained_in(pathkeys, root->group_pathkeys))\n#endif\n\t{\n\t\tPath\t\tsort_path;\t/* dummy for result of cost_sort */\n\n\t\tcost_sort(&sort_path,\n\t\t\t\t  root,\n\t\t\t\t  pathkeys,\n\t\t\t\t  *p_startup_cost + *p_run_cost,\n\t\t\t\t  retrieved_rows,\n\t\t\t\t  width,\n\t\t\t\t  0.0,\n\t\t\t\t  work_mem,\n\t\t\t\t  limit_tuples);\n\n\t\t*p_startup_cost = sort_path.startup_cost;\n\t\t*p_run_cost = sort_path.total_cost - sort_path.startup_cost;\n\t}\n\telse\n\t{\n\t\t/*\n\t\t * The default extra cost seems too large for foreign-grouping cases;\n\t\t * add 1/4th of that default.\n\t\t */\n\t\tdouble\t\tsort_multiplier = 1.0 + (DEFAULT_FDW_SORT_MULTIPLIER\n\t\t\t\t\t\t\t\t\t\t\t - 1.0) * 0.25;\n\n\t\t*p_startup_cost *= sort_multiplier;\n\t\t*p_run_cost *= sort_multiplier;\n\t}\n}\n\n/*\n * sqliteGetForeignJoinPaths Add possible ForeignPath to joinrel, if\n * join is safe to push down.\n */\nstatic void\nsqliteGetForeignJoinPaths(PlannerInfo *root,\n\t\t\t\t\t\t  RelOptInfo *joinrel,\n\t\t\t\t\t\t  RelOptInfo *outerrel,\n\t\t\t\t\t\t  RelOptInfo *innerrel,\n\t\t\t\t\t\t  JoinType jointype,\n\t\t\t\t\t\t  JoinPathExtraData *extra)\n{\n\tSqliteFdwRelationInfo *fpinfo;\n\tForeignPath *joinpath;\n\tdouble\t\trows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\tPath\t   *epq_path;\t\t/* Path to create plan to be executed when\n\t\t\t\t\t\t\t\t * EvalPlanQual gets triggered. */\n\n\t/*\n\t * Skip if this join combination has been considered already.\n\t */\n\tif (joinrel->fdw_private)\n\t\treturn;\n\n\t/*\n\t * This code does not work for joins with lateral references, since those\n\t * must have parameterized paths, which we don't generate yet.\n\t */\n\tif (!bms_is_empty(joinrel->lateral_relids))\n\t\treturn;\n\n\t/*\n\t * Create unfinished SqliteFdwRelationInfo entry which is used to indicate\n\t * that the join relation is already considered, so that we won't waste\n\t * time in judging safety of join pushdown and adding the same paths again\n\t * if found safe. Once we know that this join can be pushed down, we fill\n\t * the entry.\n\t */\n\tfpinfo = (SqliteFdwRelationInfo *) palloc0(sizeof(SqliteFdwRelationInfo));\n\tfpinfo->pushdown_safe = false;\n\tjoinrel->fdw_private = fpinfo;\n\t/* attrs_used is only for base relations. */\n\tfpinfo->attrs_used = NULL;\n\n\t/*\n\t * If there is a possibility that EvalPlanQual will be executed, we need\n\t * to be able to reconstruct the row using scans of the base relations.\n\t * GetExistingLocalJoinPath will find a suitable path for this purpose in\n\t * the path list of the joinrel, if one exists.  We must be careful to\n\t * call it before adding any ForeignPath, since the ForeignPath might\n\t * dominate the only suitable local path available.  We also do it before\n\t * calling sqlite_foreign_join_ok(), since that function updates fpinfo\n\t * and marks it as pushable if the join is found to be pushable.\n\t */\n\tif (root->parse->commandType == CMD_DELETE ||\n\t\troot->parse->commandType == CMD_UPDATE ||\n\t\troot->rowMarks)\n\t{\n\t\tepq_path = GetExistingLocalJoinPath(joinrel);\n\t\tif (!epq_path)\n\t\t{\n\t\t\telog(DEBUG1, \"could not push down foreign join because a local path suitable for EPQ checks was not found\");\n\t\t\treturn;\n\t\t}\n\t}\n\telse\n\t\tepq_path = NULL;\n\n\tif (!sqlite_foreign_join_ok(root, joinrel, jointype, outerrel, innerrel, extra))\n\t{\n\t\t/*\n\t\t * Free path required for EPQ if we copied one; we don't need it now\n\t\t */\n\t\tif (epq_path)\n\t\t\tpfree(epq_path);\n\t\treturn;\n\t}\n\n\t/*\n\t * Compute the selectivity and cost of the local_conds, so we don't have\n\t * to do it over again for each path. The best we can do for these\n\t * conditions is to estimate selectivity on the basis of local statistics.\n\t * The local conditions are applied after the join has been computed on\n\t * the remote side like quals in WHERE clause, so pass jointype as\n\t * JOIN_INNER.\n\t */\n\tfpinfo->local_conds_sel = clauselist_selectivity(root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t fpinfo->local_conds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t JOIN_INNER,\n\t\t\t\t\t\t\t\t\t\t\t\t\t NULL);\n\tcost_qual_eval(&fpinfo->local_conds_cost, fpinfo->local_conds, root);\n\n\t/*\n\t * If we are going to estimate costs locally, estimate the join clause\n\t * selectivity here while we have special join info.\n\t */\n\tfpinfo->joinclause_sel = clauselist_selectivity(root, fpinfo->joinclauses,\n\t\t\t\t\t\t\t\t\t\t\t\t\t0, fpinfo->jointype,\n\t\t\t\t\t\t\t\t\t\t\t\t\textra->sjinfo);\n\n\t/* Estimate costs for bare join relation */\n\tsqlite_estimate_path_cost_size(root, joinrel, NIL, NIL, NULL,\n\t\t\t\t\t\t\t\t   &rows, &width, &startup_cost, &total_cost);\n\t/* Now update this information in the joinrel */\n\tjoinrel->rows = rows;\n\tjoinrel->reltarget->width = width;\n\tfpinfo->rows = rows;\n\tfpinfo->width = width;\n\tfpinfo->startup_cost = startup_cost;\n\tfpinfo->total_cost = total_cost;\n\n\t/*\n\t * Create a new join path and add it to the joinrel which represents a\n\t * join between foreign tables.\n\t */\n#if PG_VERSION_NUM >= 120000\n\tjoinpath = create_foreign_join_path(root,\n#else\n\tjoinpath = create_foreignscan_path(root,\n#endif\n\t\t\t\t\t\t\t\t\t   joinrel,\n\t\t\t\t\t\t\t\t\t   NULL,\t/* default pathtarget */\n\t\t\t\t\t\t\t\t\t   rows,\n\t\t\t\t\t\t\t\t\t   startup_cost,\n\t\t\t\t\t\t\t\t\t   total_cost,\n\t\t\t\t\t\t\t\t\t   NIL, /* no pathkeys */\n\t\t\t\t\t\t\t\t\t   joinrel->lateral_relids,\n\t\t\t\t\t\t\t\t\t   epq_path,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\textra->restrictlist,\n#endif\n\t\t\t\t\t\t\t\t\t\tNIL); /* no fdw_private */\n\n\t/* Add generated path into joinrel by add_path(). */\n\tadd_path(joinrel, (Path *) joinpath);\n\n\t/* Consider pathkeys for the join relation */\n\tsqlite_add_paths_with_pathkeys_for_rel(root, joinrel, NULL, epq_path\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t   , extra->restrictlist\n#endif\n\t);\n}\n\nstatic void\nsqlite_merge_fdw_options(SqliteFdwRelationInfo * fpinfo,\n\t\t\t\t\t\t const SqliteFdwRelationInfo * fpinfo_o,\n\t\t\t\t\t\t const SqliteFdwRelationInfo * fpinfo_i)\n{\n\t/* We must always have fpinfo_o. */\n\tAssert(fpinfo_o);\n\n\t/* fpinfo_i may be NULL, but if present the servers must both match. */\n\tAssert(!fpinfo_i ||\n\t\t   fpinfo_i->server->serverid == fpinfo_o->server->serverid);\n\n\t/*\n\t * Copy the server specific FDW options.  (For a join, both relations come\n\t * from the same server, so the server options should have the same value\n\t * for both relations.)\n\t */\n\tfpinfo->fdw_startup_cost = fpinfo_o->fdw_startup_cost;\n\tfpinfo->fdw_tuple_cost = fpinfo_o->fdw_tuple_cost;\n\tfpinfo->fetch_size = fpinfo_o->fetch_size;\n\n\t/* Merge the table level options from either side of the join. */\n\tif (fpinfo_i)\n\t{\n\t\t/*\n\t\t * Set fetch size to maximum of the joining sides, since we are\n\t\t * expecting the rows returned by the join to be proportional to the\n\t\t * relation sizes.\n\t\t */\n\t\tfpinfo->fetch_size = Max(fpinfo_o->fetch_size, fpinfo_i->fetch_size);\n\t}\n}\n\n/*\n * Assess whether the aggregation, grouping and having operations can be pushed\n * down to the foreign server.  As a side effect, save information we obtain in\n * this function to SqliteFdwRelationInfo of the input relation.\n */\nstatic bool\nsqlite_foreign_grouping_ok(PlannerInfo *root, RelOptInfo *grouped_rel)\n{\n\tQuery\t   *query = root->parse;\n\tPathTarget *grouping_target;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) grouped_rel->fdw_private;\n\tSqliteFdwRelationInfo *ofpinfo;\n\tListCell   *lc;\n\tint\t\t\ti;\n\tList\t   *tlist = NIL;\n\n#if PG_VERSION_NUM < 110000\n\tgrouping_target = root->upper_targets[UPPERREL_GROUP_AGG];\n#else\n\tgrouping_target = grouped_rel->reltarget;\n#endif\n\n\t/* Grouping Sets are not pushable */\n\tif (query->groupingSets)\n\t\treturn false;\n\n#if (PG_VERSION_NUM < 100000)\n\tif (root->query_level > 1)\n\t{\n\t\tif (root->all_baserels != NULL)\n\t\t{\n\t\t\tQuery\t   *query = root->parent_root->parse;\n\t\t\tint\t\t\trtindex = bms_next_member(root->all_baserels, -1);\n\n\t\t\tif (rtindex != -2 && list_length(query->rtable) >= rtindex &&\n\t\t\t\tgetrelid(rtindex, query->rtable) == 0)\n\t\t\t\treturn false;\n\t\t}\n\t}\n#endif\n\n\t/* Get the fpinfo of the underlying scan relation. */\n\tofpinfo = (SqliteFdwRelationInfo *) fpinfo->outerrel->fdw_private;\n\n\t/*\n\t * If underneath input relation has any local conditions, those conditions\n\t * are required to be applied before performing aggregation.  Hence the\n\t * aggregate cannot be pushed down.\n\t */\n\tif (ofpinfo->local_conds)\n\t\treturn false;\n\n\ti = 0;\n\tforeach(lc, grouping_target->exprs)\n\t{\n\t\tExpr\t   *expr = (Expr *) lfirst(lc);\n\t\tIndex\t\tsgref = get_pathtarget_sortgroupref(grouping_target, i);\n\t\tListCell   *l;\n\n\t\t/*\n\t\t * Check whether this expression is part of GROUP BY clause.  Note we\n\t\t * check the whole GROUP BY clause not just processed_groupClause,\n\t\t * because we will ship all of it, cf. appendGroupByClause.\n\t\t */\n\t\tif (sgref && get_sortgroupref_clause_noerr(sgref, query->groupClause))\n\t\t{\n\t\t\tTargetEntry *tle;\n\n\t\t\t/*\n\t\t\t * If any of the GROUP BY expression is not shippable we can not\n\t\t\t * push down aggregation to the foreign server.\n\t\t\t */\n\t\t\tif (!sqlite_is_foreign_expr(root, grouped_rel, expr))\n\t\t\t\treturn false;\n\n\t\t\t/*\n\t\t\t * If it would be a foreign param, we can't put it into the tlist,\n\t\t\t * so we have to fail.\n\t\t\t */\n\t\t\tif (sqlite_is_foreign_param(root, grouped_rel, expr))\n\t\t\t\treturn false;\n\n\t\t\t/*\n\t\t\t * Pushable, so add to tlist.  We need to create a TLE for this\n\t\t\t * expression and apply the sortgroupref to it.  We cannot use\n\t\t\t * add_to_flat_tlist() here because that avoids making duplicate\n\t\t\t * entries in the tlist.  If there are duplicate entries with\n\t\t\t * distinct sortgrouprefs, we have to duplicate that situation in\n\t\t\t * the output tlist.\n\t\t\t */\n\t\t\ttle = makeTargetEntry(expr, list_length(tlist) + 1, NULL, false);\n\t\t\ttle->ressortgroupref = sgref;\n\t\t\ttlist = lappend(tlist, tle);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Check entire expression whether it is pushable or not */\n\t\t\tif (sqlite_is_foreign_expr(root, grouped_rel, expr) &&\n\t\t\t\t!sqlite_is_foreign_param(root, grouped_rel, expr))\n\t\t\t{\n\t\t\t\t/* Pushable, add to tlist */\n\t\t\t\ttlist = add_to_flat_tlist(tlist, list_make1(expr));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tList\t   *aggvars = NIL;\n\t\t\t\t/* Not matched exactly, pull the var with aggregates then */\n\t\t\t\taggvars = pull_var_clause((Node *) expr,\n\t\t\t\t\t\t\t\t\t\t  PVC_INCLUDE_AGGREGATES);\n\n\t\t\t\tif (!sqlite_is_foreign_expr(root, grouped_rel, (Expr *) aggvars))\n\t\t\t\t\treturn false;\n\n\t\t\t\t/*\n\t\t\t\t * Add aggregates, if any, into the targetlist.  Plain var\n\t\t\t\t * nodes should be either same as some GROUP BY expression or\n\t\t\t\t * part of some GROUP BY expression. In later case, the query\n\t\t\t\t * cannot refer plain var nodes without the surrounding\n\t\t\t\t * expression.  In both the cases, they are already part of\n\t\t\t\t * the targetlist and thus no need to add them again.  In fact\n\t\t\t\t * adding pulled plain var nodes in SELECT clause will cause\n\t\t\t\t * an error on the foreign server if they are not same as some\n\t\t\t\t * GROUP BY expression.\n\t\t\t\t */\n\t\t\t\tforeach(l, aggvars)\n\t\t\t\t{\n\t\t\t\t\tExpr\t   *aggref = (Expr *) lfirst(l);\n\n\t\t\t\t\tif (IsA(aggref, Aggref))\n\t\t\t\t\t\ttlist = add_to_flat_tlist(tlist, list_make1(aggref));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ti++;\n\t}\n\n\t/*\n\t * Classify the pushable and non-pushable having clauses and save them in\n\t * remote_conds and local_conds of the grouped rel's fpinfo.\n\t */\n\tif (root->hasHavingQual && query->havingQual)\n\t{\n\n\t\tforeach(lc, (List *) query->havingQual)\n\t\t{\n\t\t\tExpr\t   *expr = (Expr *) lfirst(lc);\n\t\t\tRestrictInfo *rinfo;\n\n\t\t\t/*\n\t\t\t * Currently, the core code doesn't wrap havingQuals in\n\t\t\t * RestrictInfos, so we must make our own.\n\t\t\t */\n\t\t\tAssert(!IsA(expr, RestrictInfo));\n\n#if (PG_VERSION_NUM >= 100000)\n\t\t\trinfo = make_restrictinfo(\n#if PG_VERSION_NUM >= 140000\n\t\t\t\t\t\t\t\t\t  root,\n#endif\n\t\t\t\t\t\t\t\t\t  expr,\n\t\t\t\t\t\t\t\t\t  true,\n\t\t\t\t\t\t\t\t\t  false,\n\t\t\t\t\t\t\t\t\t  false,\n#if (PG_VERSION_NUM >= 160000)\n\t\t\t\t\t\t\t\t\t  false,\n#endif\n\t\t\t\t\t\t\t\t\t  root->qual_security_level,\n\t\t\t\t\t\t\t\t\t  grouped_rel->relids,\n\t\t\t\t\t\t\t\t\t  NULL,\n\t\t\t\t\t\t\t\t\t  NULL);\n#else\n\t\t\trinfo = make_simple_restrictinfo(expr);\n#endif\n\t\t\tif (sqlite_is_foreign_expr(root, grouped_rel, expr))\n\t\t\t\tfpinfo->remote_conds = lappend(fpinfo->remote_conds, rinfo);\n\t\t\telse\n\t\t\t\tfpinfo->local_conds = lappend(fpinfo->local_conds, rinfo);\n\n\t\t}\n\t}\n\n\t/*\n\t * If there are any local conditions, pull Vars and aggregates from it and\n\t * check whether they are safe to pushdown or not.\n\t */\n\tif (fpinfo->local_conds)\n\t{\n\t\tList\t   *aggvars = NIL;\n\t\tforeach(lc, fpinfo->local_conds)\n\t\t{\n\t\t\tRestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);\n\n\t\t\taggvars = list_concat(aggvars,\n\t\t\t\t\t\t\t\t  pull_var_clause((Node *) rinfo->clause,\n\t\t\t\t\t\t\t\t\t\t\t\t  PVC_INCLUDE_AGGREGATES));\n\t\t}\n\n\t\tforeach(lc, aggvars)\n\t\t{\n\t\t\tExpr\t   *expr = (Expr *) lfirst(lc);\n\n\t\t\t/*\n\t\t\t * If aggregates within local conditions are not safe to push\n\t\t\t * down, then we cannot push down the query.  Vars are already\n\t\t\t * part of GROUP BY clause which are checked above, so no need to\n\t\t\t * access them again here.\n\t\t\t */\n\t\t\tif (IsA(expr, Aggref))\n\t\t\t{\n\t\t\t\tif (!sqlite_is_foreign_expr(root, grouped_rel, expr))\n\t\t\t\t\treturn false;\n\n\t\t\t\ttlist = add_to_flat_tlist(tlist, list_make1(expr));\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/* Store generated targetlist */\n\tfpinfo->grouped_tlist = tlist;\n\n\t/* Safe to pushdown */\n\tfpinfo->pushdown_safe = true;\n\n\t/* Copy startup and tuple cost as is from underneath input rel's fpinfo */\n\tfpinfo->fdw_startup_cost = ofpinfo->fdw_startup_cost;\n\tfpinfo->fdw_tuple_cost = ofpinfo->fdw_tuple_cost;\n\n\t/*\n\t * Set cached relation costs to some negative value, so that we can detect\n\t * when they are set to some sensible costs, during one (usually the\n\t * first) of the calls to sqlite_estimate_path_cost_size().\n\t */\n\tfpinfo->rel_startup_cost = -1;\n\tfpinfo->rel_total_cost = -1;\n\n\n\t/*\n\t * Set the string describing this grouped relation to be used in EXPLAIN\n\t * output of corresponding ForeignScan.\n\t */\n\tfpinfo->relation_name = NULL;\n\n\treturn true;\n}\n\n/*\n * sqliteGetForeignUpperPaths\n *\t\tAdd paths for post-join operations like aggregation, grouping etc. if\n *\t\tcorresponding operations are safe to push down.\n *\n * Right now, we only support aggregate, grouping and having clause pushdown.\n */\nstatic void\nsqliteGetForeignUpperPaths(PlannerInfo *root, UpperRelationKind stage,\n\t\t\t\t\t\t   RelOptInfo *input_rel, RelOptInfo *output_rel\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t   ,void *extra\n#endif\n)\n{\n\tSqliteFdwRelationInfo *fpinfo;\n\n\telog(DEBUG1, \"sqlite_fdw : %s\", __func__);\n\n\t/*\n\t * If input rel is not safe to pushdown, then simply return as we cannot\n\t * perform any post-join operations on the foreign server.\n\t */\n\tif (!input_rel->fdw_private ||\n\t\t!((SqliteFdwRelationInfo *) input_rel->fdw_private)->pushdown_safe)\n\t\treturn;\n\n\t/* Ignore stages we don't support; and skip any duplicate calls. */\n\tif ((stage != UPPERREL_GROUP_AGG && stage != UPPERREL_ORDERED && stage != UPPERREL_FINAL) || output_rel->fdw_private)\n\t\treturn;\n\n\tfpinfo = (SqliteFdwRelationInfo *) palloc0(sizeof(SqliteFdwRelationInfo));\n\tfpinfo->pushdown_safe = false;\n\tfpinfo->stage = stage;\n\toutput_rel->fdw_private = fpinfo;\n\n\tswitch (stage)\n\t{\n\t\tcase UPPERREL_GROUP_AGG:\n\t\t\tsqlite_add_foreign_grouping_paths(root, input_rel, output_rel\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t\t\t\t\t\t  ,(GroupPathExtraData *) extra\n#endif\n\t\t\t\t);\n\t\t\tbreak;\n\t\tcase UPPERREL_ORDERED:\n\t\t\tsqlite_add_foreign_ordered_paths(root, input_rel, output_rel);\n\t\t\tbreak;\n\t\tcase UPPERREL_FINAL:\n\t\t\tsqlite_add_foreign_final_paths(root, input_rel, output_rel\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t\t\t\t   ,(FinalPathExtraData *) extra\n#endif\n\t\t\t\t);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\telog(ERROR, \"unexpected upper relation: %d\", (int) stage);\n\t\t\tbreak;\n\t}\n}\n\n/*\n * sqlite_add_foreign_grouping_paths\n *\t\tAdd foreign path for grouping and/or aggregation.\n *\n * Given input_rel represents the underlying scan.  The paths are added to the\n * given grouped_rel.\n */\nstatic void\nsqlite_add_foreign_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t  RelOptInfo *grouped_rel\n#if (PG_VERSION_NUM >= 110000)\n\t\t\t\t\t\t\t\t  ,GroupPathExtraData *extra\n#endif\n)\n{\n\tQuery\t   *parse = root->parse;\n\tSqliteFdwRelationInfo *ifpinfo = input_rel->fdw_private;\n\tSqliteFdwRelationInfo *fpinfo = grouped_rel->fdw_private;\n\tForeignPath *grouppath;\n\tdouble\t\trows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\n\t/* Nothing to be done, if there is no grouping or aggregation required. */\n\tif (!parse->groupClause && !parse->groupingSets && !parse->hasAggs &&\n\t\t!root->hasHavingQual)\n\t\treturn;\n\n#if (PG_VERSION_NUM >= 110000)\n\tAssert(extra->patype == PARTITIONWISE_AGGREGATE_NONE ||\n\t\t   extra->patype == PARTITIONWISE_AGGREGATE_FULL);\n#endif\n\n\t/* SQLite does not allow HAVING without GROUP BY */\n\tif (root->hasHavingQual && !parse->groupClause)\n\t\treturn;\n\n\t/* save the input_rel as outerrel in fpinfo */\n\tfpinfo->outerrel = input_rel;\n\n\t/*\n\t * Copy foreign table, foreign server\n\t * etc. details from the input relation's fpinfo.\n\t */\n\tfpinfo->table = ifpinfo->table;\n\tfpinfo->server = ifpinfo->server;\n\n\t/* Assess if it is safe to push down aggregation and grouping. */\n\tif (!sqlite_foreign_grouping_ok(root, grouped_rel))\n\t\treturn;\n\n\t/* Use small cost to push down aggregate always */\n\trows = width = startup_cost = total_cost = 1;\n\t/* Now update this information in the fpinfo */\n\tfpinfo->rows = rows;\n\tfpinfo->width = width;\n\tfpinfo->startup_cost = startup_cost;\n\tfpinfo->total_cost = total_cost;\n\n\t/* Create and add foreign path to the grouping relation. */\n#if PG_VERSION_NUM >= 120000\n\tgrouppath = create_foreign_upper_path(root,\n\t\t\t\t\t\t\t\t\t\t  grouped_rel,\n\t\t\t\t\t\t\t\t\t\t  grouped_rel->reltarget,\n\t\t\t\t\t\t\t\t\t\t  rows,\n\t\t\t\t\t\t\t\t\t\t  startup_cost,\n\t\t\t\t\t\t\t\t\t\t  total_cost,\n\t\t\t\t\t\t\t\t\t\t  NIL,\t/* no pathkeys */\n\t\t\t\t\t\t\t\t\t\t  NULL,\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t  NIL, /* no fdw_restrictinfo list */\n#endif\n\t\t\t\t\t\t\t\t\t\t  NIL); /* no fdw_private */\n#else\n\tgrouppath = create_foreignscan_path(root,\n\t\t\t\t\t\t\t\t\t\tgrouped_rel,\n\t\t\t\t\t\t\t\t\t\troot->upper_targets[UPPERREL_GROUP_AGG],\n\t\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\t\tstartup_cost,\n\t\t\t\t\t\t\t\t\t\ttotal_cost,\n\t\t\t\t\t\t\t\t\t\tNIL,\t/* no pathkeys */\n\t\t\t\t\t\t\t\t\t\tNULL,\t/* no required_outer */\n\t\t\t\t\t\t\t\t\t\tNULL,\n\t\t\t\t\t\t\t\t\t\tNIL);\t/* no fdw_private */\n#endif\n\n\t/* Add generated path into grouped_rel by add_path(). */\n\tadd_path(grouped_rel, (Path *) grouppath);\n}\n\n/*\n * sqlite_add_foreign_ordered_paths\n *\t\tAdd foreign paths for performing the final sort remotely.\n *\n * Given input_rel contains the source-data Paths.  The paths are added to the\n * given ordered_rel.\n */\nstatic void\nsqlite_add_foreign_ordered_paths(PlannerInfo *root, RelOptInfo *input_rel,\n\t\t\t\t\t\t\t\t RelOptInfo *ordered_rel)\n{\n\tQuery\t   *parse = root->parse;\n\tSqliteFdwRelationInfo *ifpinfo = input_rel->fdw_private;\n\tSqliteFdwRelationInfo *fpinfo = ordered_rel->fdw_private;\n\tdouble\t\trows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\tList\t   *fdw_private;\n\tForeignPath *ordered_path;\n\tListCell   *lc;\n\n\t/* Shouldn't get here unless the query has ORDER BY */\n\tAssert(parse->sortClause);\n\n#if (PG_VERSION_NUM >= 100000)\n\t/* We don't support cases where there are any SRFs in the targetlist */\n\tif (parse->hasTargetSRFs)\n\t\treturn;\n#else\n\n\t/*\n\t * We don't support cases where there are any SRFs in the targetlist (PG\n\t * Version >10)\n\t */\n\tif (expression_returns_set((Node *) parse->targetList))\n\t\treturn;\n#endif\n\n\t/* Save the input_rel as outerrel in fpinfo */\n\tfpinfo->outerrel = input_rel;\n\n\t/*\n\t * Copy foreign table, foreign server, FDW options etc.\n\t * details from the input relation's fpinfo.\n\t */\n\tfpinfo->table = ifpinfo->table;\n\tfpinfo->server = ifpinfo->server;\n\n\t/*\n\t * If the input_rel is a base or join relation, we would already have\n\t * considered pushing down the final sort to the remote server when\n\t * creating pre-sorted foreign paths for that relation, because the\n\t * query_pathkeys is set to the root->sort_pathkeys in that case (see\n\t * standard_qp_callback()).\n\t */\n\tif (input_rel->reloptkind == RELOPT_BASEREL ||\n\t\tinput_rel->reloptkind == RELOPT_JOINREL)\n\t{\n\t\tAssert(root->query_pathkeys == root->sort_pathkeys);\n\n\t\t/* Safe to push down if the query_pathkeys is safe to push down */\n\t\tfpinfo->pushdown_safe = ifpinfo->qp_is_pushdown_safe;\n\n\t\treturn;\n\t}\n\n\t/* The input_rel should be a grouping relation */\n\tAssert(input_rel->reloptkind == RELOPT_UPPER_REL &&\n\t\t   ifpinfo->stage == UPPERREL_GROUP_AGG);\n\n\t/*\n\t * We try to create a path below by extending a simple foreign path for\n\t * the underlying grouping relation to perform the final sort remotely,\n\t * which is stored into the fdw_private list of the resulting path.\n\t */\n\n\t/* Assess if it is safe to push down the final sort */\n\tforeach(lc, root->sort_pathkeys)\n\t{\n\t\tPathKey\t*pathkey = (PathKey *) lfirst(lc);\n\t\tEquivalenceClass *pathkey_ec = pathkey->pk_eclass;\n\n\t\t/*\n\t\t * is_foreign_expr would detect volatile expressions as well, but\n\t\t * checking ec_has_volatile here saves some cycles.\n\t\t */\n\t\tif (pathkey_ec->ec_has_volatile)\n\t\t\treturn;\n\n\t\t/*\n\t\t * Can't push down the sort if pathkey's opfamily is not built-in.\n\t\t */\n\t\tif (!sqlite_is_builtin(pathkey->pk_opfamily))\n\t\t\treturn;\n\n\t\t/*\n\t\t * The EC must contain a shippable EM that is computed in input_rel's\n\t\t * reltarget, else we can't push down the sort.\n\t\t */\n\t\tif (sqlite_find_em_for_rel_target(root,\n\t\t\t\t\t\t\t\t   pathkey_ec,\n\t\t\t\t\t\t\t\t   input_rel) == NULL)\n\t\t\treturn;\n\t}\n\n\t/* Safe to push down */\n\tfpinfo->pushdown_safe = true;\n\n\t/* Use small cost to push down aggregate always */\n\trows = width = startup_cost = total_cost = 1;\n\t/* Now update this information in the fpinfo */\n\tfpinfo->rows = rows;\n\tfpinfo->width = width;\n\tfpinfo->startup_cost = startup_cost;\n\tfpinfo->total_cost = total_cost;\n\n\t/*\n\t * Build the fdw_private list that will be used by sqliteGetForeignPlan.\n\t * Items in the list must match order in enum FdwPathPrivateIndex.\n\t */\n#if (PG_VERSION_NUM >= 150000)\n\tfdw_private = list_make2(makeBoolean(true), makeBoolean(false));\n#else\n\tfdw_private = list_make2(makeInteger(true), makeInteger(false));\n#endif\n\n#if (PG_VERSION_NUM >= 120000)\n\t/* Create foreign ordering path */\n\tordered_path = create_foreign_upper_path(root,\n\t\t\t\t\t\t\t\t\t\t\t input_rel,\n\t\t\t\t\t\t\t\t\t\t\t root->upper_targets[UPPERREL_ORDERED],\n\t\t\t\t\t\t\t\t\t\t\t rows,\n\t\t\t\t\t\t\t\t\t\t\t startup_cost,\n\t\t\t\t\t\t\t\t\t\t\t total_cost,\n\t\t\t\t\t\t\t\t\t\t\t root->sort_pathkeys,\n\t\t\t\t\t\t\t\t\t\t\t NULL, /* no extra plan */\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t\t NIL, /* no fdw_restrictinfo list */\n#endif\n\t\t\t\t\t\t\t\t\t\t\t fdw_private);\n#else\n\n\t/*\n\t * We use root->upper_targets[UPERREL_FINAL] because until PG12,\n\t * upper_targets[UPPERREL_ORDERED] is not filled. Anyways, in PG12\n\t * root->upper_targets[UPPERREL_FINAL] and\n\t * root->upper_targets[UPPERREL_ORDERED] have the same value. More info:\n\t * backend/optimizer/plan/planner.c (Line 2189)\n\t */\n\n\t/* Create foreign ordering path */\n\tordered_path = create_foreignscan_path(root,\n\t\t\t\t\t\t\t\t\t\t   input_rel,\n\t\t\t\t\t\t\t\t\t\t   root->upper_targets[UPPERREL_FINAL],\n\t\t\t\t\t\t\t\t\t\t   rows,\n\t\t\t\t\t\t\t\t\t\t   startup_cost,\n\t\t\t\t\t\t\t\t\t\t   total_cost,\n\t\t\t\t\t\t\t\t\t\t   root->sort_pathkeys,\n\t\t\t\t\t\t\t\t\t\t   NULL,\n\t\t\t\t\t\t\t\t\t\t   NULL,\t/* no extra plan */\n\t\t\t\t\t\t\t\t\t\t   fdw_private);\n#endif\n\n\t/* and add it to the ordered_rel */\n\tadd_path(ordered_rel, (Path *) ordered_path);\n}\n\n/*\n * sqlite_add_foreign_final_paths\n *\t\tAdd foreign paths for performing the final processing remotely.\n *\n * Given input_rel contains the source-data Paths.  The paths are added to the\n * given final_rel.\n */\nstatic void\nsqlite_add_foreign_final_paths(PlannerInfo *root, RelOptInfo *input_rel,\n\t\t\t\t\t\t\t   RelOptInfo *final_rel\n#if (PG_VERSION_NUM >= 120000)\n\t\t\t\t\t\t\t   ,FinalPathExtraData *extra\n#endif\n)\n{\n\tQuery\t   *parse = root->parse;\n\tSqliteFdwRelationInfo *ifpinfo = (SqliteFdwRelationInfo *) input_rel->fdw_private;\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) final_rel->fdw_private;\n\tbool\t\thas_final_sort = false;\n\tList\t   *pathkeys = NIL;\n\tdouble\t\trows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\tList\t   *fdw_private;\n\tForeignPath *final_path;\n#if (PG_VERSION_NUM < 120000)\n\tbool\t\thas_limit = limit_needed(parse);\n#endif\n\n\t/*\n\t * Currently, we only support this for SELECT commands\n\t */\n\tif (parse->commandType != CMD_SELECT)\n\t\treturn;\n\n\t/*\n\t * No work if there is FOR UPDATE/SHARE clause and if there is no need to\n\t * add a LIMIT node. We DONT support FOR UPDATE pushdown because SQLITE\n\t * has no implemented yet, that's why we dont do nothing.\n\t */\n\tif (parse->rowMarks\n#if (PG_VERSION_NUM >= 120000)\n\t\t|| !extra->limit_needed\n#else\n\t\t|| !has_limit\n#endif\n\t\t)\n\t\treturn;\n\n#if (PG_VERSION_NUM >= 100000)\n\t/* We don't support cases where there are any SRFs in the targetlist */\n\tif (parse->hasTargetSRFs)\n\t\treturn;\n#else\n\n\t/*\n\t * We don't support cases where there are any SRFs in the targetlist (PG\n\t * Version >10)\n\t */\n\tif (expression_returns_set((Node *) parse->targetList))\n\t\treturn;\n#endif\n\n\t/* Save the input_rel as outerrel in fpinfo */\n\tfpinfo->outerrel = input_rel;\n\n\t/*\n\t * Copy foreign table, foreign server, FDW options etc.\n\t * details from the input relation's fpinfo.\n\t */\n\tfpinfo->table = ifpinfo->table;\n\tfpinfo->server = ifpinfo->server;\n\n#if (PG_VERSION_NUM >= 120000)\n\tAssert(extra->limit_needed);\n#else\n\tAssert(has_limit);\n#endif\n\n\t/*\n\t * If the input_rel is an ordered relation, replace the input_rel with its\n\t * input relation\n\t */\n\tif (input_rel->reloptkind == RELOPT_UPPER_REL &&\n\t\tifpinfo->stage == UPPERREL_ORDERED)\n\t{\n\t\tinput_rel = ifpinfo->outerrel;\n\t\tifpinfo = (SqliteFdwRelationInfo *) input_rel->fdw_private;\n\t\thas_final_sort = true;\n\t\tpathkeys = root->sort_pathkeys;\n\t}\n\n\t/* The input_rel should be a base, join, or grouping relation */\n\tAssert(input_rel->reloptkind == RELOPT_BASEREL ||\n\t\t   input_rel->reloptkind == RELOPT_JOINREL ||\n\t\t   (input_rel->reloptkind == RELOPT_UPPER_REL &&\n\t\t\tifpinfo->stage == UPPERREL_GROUP_AGG));\n\n\t/*\n\t * We try to create a path below by extending a simple foreign path for\n\t * the underlying base, join, or grouping relation to perform the final\n\t * sort (if has_final_sort) and the LIMIT restriction remotely, which is\n\t * stored into the fdw_private list of the resulting path.  (We\n\t * re-estimate the costs of sorting the underlying relation, if\n\t * has_final_sort.)\n\t */\n\n\t/*\n\t * Assess if it is safe to push down the LIMIT and OFFSET to the remote\n\t * server\n\t */\n\n\t/*\n\t * If the underlying relation has any local conditions, the LIMIT/OFFSET\n\t * cannot be pushed down.\n\t */\n\tif (ifpinfo->local_conds)\n\t\treturn;\n\n#if PG_VERSION_NUM >= 130000\n\t/*\n\t * If the query has FETCH FIRST .. WITH TIES, 1) it must have ORDER BY as\n\t * well, which is used to determine which additional rows tie for the last\n\t * place in the result set, and 2) ORDER BY must already have been\n\t * determined to be safe to push down before we get here. Since sqlite_fdw\n\t * does not support FETCH FIRST ... WITH TIES, disable pushing this option.\n\t */\n\tif (parse->limitOption == LIMIT_OPTION_WITH_TIES)\n\t\treturn;\n#endif\n\n\t/*\n\t * Also, the LIMIT/OFFSET cannot be pushed down, if their expressions are\n\t * not safe to remote.\n\t */\n\tif (!sqlite_is_foreign_expr(root, input_rel, (Expr *) parse->limitOffset) ||\n\t\t!sqlite_is_foreign_expr(root, input_rel, (Expr *) parse->limitCount))\n\t\treturn;\n\n\t/* Safe to push down */\n\tfpinfo->pushdown_safe = true;\n\n\t/* Use small cost to push down limit always */\n\trows = width = startup_cost = total_cost = 1;\n\t/* Now update this information in the fpinfo */\n\tfpinfo->rows = rows;\n\tfpinfo->width = width;\n\tfpinfo->startup_cost = startup_cost;\n\tfpinfo->total_cost = total_cost;\n\n\t/*\n\t * Build the fdw_private list that will be used by sqliteGetForeignPlan.\n\t * Items in the list must match order in enum FdwPathPrivateIndex.\n\t */\n#if (PG_VERSION_NUM >= 150000)\n\tfdw_private = list_make2(makeBoolean(has_final_sort),\n\t\t\t\t\t\t\t makeBoolean(extra->limit_needed));\n#elif (PG_VERSION_NUM >= 120000)\n\tfdw_private = list_make2(makeInteger(has_final_sort),\n\t\t\t\t\t\t\t makeInteger(extra->limit_needed));\n#else\n\tfdw_private = list_make2(makeInteger(has_final_sort),\n\t\t\t\t\t\t\t makeInteger(has_limit));\n#endif\n\n\t/*\n\t * Create foreign final path; this gets rid of a no-longer-needed outer\n\t * plan (if any), which makes the EXPLAIN output look cleaner\n\t */\n#if (PG_VERSION_NUM >= 120000)\n\tfinal_path = create_foreign_upper_path(root,\n\t\t\t\t\t\t\t\t\t\t   input_rel,\n\t\t\t\t\t\t\t\t\t\t   root->upper_targets[UPPERREL_FINAL],\n\t\t\t\t\t\t\t\t\t\t   rows,\n\t\t\t\t\t\t\t\t\t\t   startup_cost,\n\t\t\t\t\t\t\t\t\t\t   total_cost,\n\t\t\t\t\t\t\t\t\t\t   pathkeys,\n\t\t\t\t\t\t\t\t\t\t   NULL, /* no extra plan */\n#if PG_VERSION_NUM >= 170000\n\t\t\t\t\t\t\t\t\t\t   NIL, /* no fdw_restrictinfo list */\n#endif\n\t\t\t\t\t\t\t\t\t\t   fdw_private);\n#else\n\tfinal_path = create_foreignscan_path(root,\n\t\t\t\t\t\t\t\t\t\t input_rel,\n\t\t\t\t\t\t\t\t\t\t root->upper_targets[UPPERREL_FINAL],\n\t\t\t\t\t\t\t\t\t\t rows,\n\t\t\t\t\t\t\t\t\t\t startup_cost,\n\t\t\t\t\t\t\t\t\t\t total_cost,\n\t\t\t\t\t\t\t\t\t\t pathkeys,\n\t\t\t\t\t\t\t\t\t\t NULL,\t/* no required_outer */\n\t\t\t\t\t\t\t\t\t\t NULL,\t/* no extra plan */\n\t\t\t\t\t\t\t\t\t\t fdw_private);\n#endif\n\t/* and add it to the final_rel */\n\tadd_path(final_rel, (Path *) final_path);\n}\n\n/*\n * sqlite_estimate_path_cost_size Get cost and size estimates for a foreign scan on\n * given foreign relation either a base relation or a join between foreign\n * relations or an upper relation containing foreign relations.\n *\n * param_join_conds are the parameterization clauses with outer relations.\n * pathkeys specify the expected sort order if any for given path being\n * costed. fpextra specifies additional post-scan/join-processing steps such\n * as the final sort and the LIMIT restriction.\n *\n * The function returns the cost and size estimates in p_rows, p_width,\n * p_startup_cost and p_total_cost variables.\n */\nstatic void\nsqlite_estimate_path_cost_size(PlannerInfo *root,\n\t\t\t\t\t\t\t   RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t   List *param_join_conds,\n\t\t\t\t\t\t\t   List *pathkeys,\n\t\t\t\t\t\t\t   SqliteFdwPathExtraData * fpextra,\n\t\t\t\t\t\t\t   double *p_rows, int *p_width,\n\t\t\t\t\t\t\t   Cost *p_startup_cost, Cost *p_total_cost)\n{\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) foreignrel->fdw_private;\n\tdouble\t\trows;\n\tdouble\t\tretrieved_rows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\tCost\t\trun_cost = 0;\n\n\t/* Make sure the core code has set up the relation's reltarget */\n\tAssert(foreignrel->reltarget);\n\n\t/*\n\t * We don't support join conditions in this mode (hence, no\n\t * parameterized paths can be made).\n\t */\n\tAssert(param_join_conds == NIL);\n\n\t/*\n\t * We will come here again and again with different set of pathkeys or\n\t * additional post-scan/join-processing steps that caller wants to\n\t * cost.  We don't need to calculate the cost/size estimates for the\n\t * underlying scan, join, or grouping each time.  Instead, use those\n\t * estimates if we have cached them already.\n\t */\n\tif (fpinfo->rel_startup_cost >= 0 && fpinfo->rel_total_cost >= 0)\n\t{\n\t\tAssert(fpinfo->retrieved_rows >= 1);\n\n\t\trows = fpinfo->rows;\n\t\tretrieved_rows = fpinfo->retrieved_rows;\n\t\twidth = fpinfo->width;\n\t\tstartup_cost = fpinfo->rel_startup_cost;\n\t\trun_cost = fpinfo->rel_total_cost - fpinfo->rel_startup_cost;\n\n\t\t/*\n\t\t * If we estimate the costs of a foreign scan or a foreign join\n\t\t * with additional post-scan/join-processing steps, the scan or\n\t\t * join costs obtained from the cache wouldn't yet contain the\n\t\t * eval costs for the final scan/join target, which would've been\n\t\t * updated by apply_scanjoin_target_to_paths(); add the eval costs\n\t\t * now.\n\t\t */\n\t\tif (fpextra && !IS_UPPER_REL(foreignrel))\n\t\t{\n\t\t\t/* Shouldn't get here unless we have LIMIT */\n\t\t\tAssert(fpextra->has_limit);\n\t\t\tAssert(foreignrel->reloptkind == RELOPT_BASEREL ||\n\t\t\t\t   foreignrel->reloptkind == RELOPT_JOINREL);\n\t\t\tstartup_cost += foreignrel->reltarget->cost.startup;\n\t\t\trun_cost += foreignrel->reltarget->cost.per_tuple * rows;\n\t\t}\n\t}\n\telse if (IS_JOIN_REL(foreignrel))\n\t{\n\t\tSqliteFdwRelationInfo *fpinfo_i;\n\t\tSqliteFdwRelationInfo *fpinfo_o;\n\t\tQualCost join_cost;\n\t\tQualCost remote_conds_cost;\n\t\tdouble nrows;\n\n\t\t/* Use rows/width estimates made by the core code. */\n\t\trows = foreignrel->rows;\n\t\twidth = foreignrel->reltarget->width;\n\n\t\t/* For join we expect inner and outer relations set */\n\t\tAssert(fpinfo->innerrel && fpinfo->outerrel);\n\n\t\tfpinfo_i = (SqliteFdwRelationInfo *)fpinfo->innerrel->fdw_private;\n\t\tfpinfo_o = (SqliteFdwRelationInfo *)fpinfo->outerrel->fdw_private;\n\n\t\t/* Estimate of number of rows in cross product */\n\t\tnrows = fpinfo_i->rows * fpinfo_o->rows;\n\n\t\t/*\n\t\t * Back into an estimate of the number of retrieved rows.  Just in\n\t\t * case this is nuts, clamp to at most nrows.\n\t\t */\n\t\tretrieved_rows = clamp_row_est(rows / fpinfo->local_conds_sel);\n\t\tretrieved_rows = Min(retrieved_rows, nrows);\n\n\t\t/*\n\t\t * The cost of foreign join is estimated as cost of generating\n\t\t * rows for the joining relations + cost for applying quals on the\n\t\t * rows.\n\t\t */\n\n\t\t/*\n\t\t * Calculate the cost of clauses pushed down to the foreign server\n\t\t */\n\t\tcost_qual_eval(&remote_conds_cost, fpinfo->remote_conds, root);\n\t\t/* Calculate the cost of applying join clauses */\n\t\tcost_qual_eval(&join_cost, fpinfo->joinclauses, root);\n\n\t\t/*\n\t\t * Startup cost includes startup cost of joining relations and the\n\t\t * startup cost for join and other clauses. We do not include the\n\t\t * startup cost specific to join strategy (e.g. setting up hash\n\t\t * tables) since we do not know what strategy the foreign server\n\t\t * is going to use.\n\t\t */\n\t\tstartup_cost = fpinfo_i->rel_startup_cost + fpinfo_o->rel_startup_cost;\n\t\tstartup_cost += join_cost.startup;\n\t\tstartup_cost += remote_conds_cost.startup;\n\t\tstartup_cost += fpinfo->local_conds_cost.startup;\n\n\t\t/*\n\t\t * Run time cost includes:\n\t\t *\n\t\t * 1. Run time cost (total_cost - startup_cost) of relations being\n\t\t * joined\n\t\t *\n\t\t * 2. Run time cost of applying join clauses on the cross product\n\t\t * of the joining relations.\n\t\t *\n\t\t * 3. Run time cost of applying pushed down other clauses on the\n\t\t * result of join\n\t\t *\n\t\t * 4. Run time cost of applying nonpushable other clauses locally\n\t\t * on the result fetched from the foreign server.\n\t\t */\n\t\trun_cost = fpinfo_i->rel_total_cost - fpinfo_i->rel_startup_cost;\n\t\trun_cost += fpinfo_o->rel_total_cost - fpinfo_o->rel_startup_cost;\n\t\trun_cost += nrows * join_cost.per_tuple;\n\t\tnrows = clamp_row_est(nrows * fpinfo->joinclause_sel);\n\t\trun_cost += nrows * remote_conds_cost.per_tuple;\n\t\trun_cost += fpinfo->local_conds_cost.per_tuple * retrieved_rows;\n\n\t\t/* Add in tlist eval cost for each output row */\n\t\tstartup_cost += foreignrel->reltarget->cost.startup;\n\t\trun_cost += foreignrel->reltarget->cost.per_tuple * rows;\n\t}\n\telse if (IS_UPPER_REL(foreignrel))\n\t{\n\t\tRelOptInfo *outerrel = fpinfo->outerrel;\n\t\tSqliteFdwRelationInfo *ofpinfo;\n\t\tAggClauseCosts aggcosts;\n\t\tdouble input_rows;\n\t\tint numGroupCols;\n\t\tdouble numGroups = 1;\n\n\t\t/*\n\t\t * The upper relation should have its outer relation set\n\t\t */\n\t\tAssert(outerrel);\n\n\t\t/*\n\t\t * and that outer relation should have its reltarget set\n\t\t */\n\t\tAssert(outerrel->reltarget);\n\n\t\t/*\n\t\t * This cost model is mixture of costing done for sorted and\n\t\t * hashed aggregates in cost_agg().  We are not sure which\n\t\t * strategy will be considered at remote side, thus for\n\t\t * simplicity, we put all startup related costs in startup_cost\n\t\t * and all finalization and run cost are added in total_cost.\n\t\t */\n\n\t\tofpinfo = (SqliteFdwRelationInfo *)outerrel->fdw_private;\n\n\t\t/* Get rows from input rel */\n\t\tinput_rows = ofpinfo->rows;\n\n\t\t/*\n\t\t * Collect statistics about aggregates for estimating costs.\n\t\t */\n\t\tMemSet(&aggcosts, 0, sizeof(AggClauseCosts));\n\t\tif (root->parse->hasAggs)\n\t\t{\n#if PG_VERSION_NUM >= 140000\n\t\t\tget_agg_clause_costs(root, AGGSPLIT_SIMPLE, &aggcosts);\n#else\n\t\t\tget_agg_clause_costs(root, (Node *)fpinfo->grouped_tlist,\n\t\t\t\t\t\t\t\t AGGSPLIT_SIMPLE, &aggcosts);\n\n\t\t\t/*\n\t\t\t * The cost of aggregates in the HAVING qual will be the same\n\t\t\t * for each child as it is for the parent, so there's no need\n\t\t\t * to use a translated version of havingQual.\n\t\t\t */\n\t\t\tget_agg_clause_costs(root, (Node *)root->parse->havingQual,\n\t\t\t\t\t\t\t\t AGGSPLIT_SIMPLE, &aggcosts);\n#endif\n\t\t}\n\n\t\t/*\n\t\t * Get number of grouping columns and possible number of groups\n\t\t */\n#if PG_VERSION_NUM >= 160000\n\t\tnumGroupCols = list_length(root->processed_groupClause);\n\t\tnumGroups = estimate_num_groups(root,\n\t\t\t\t\t\t\t\t\t\tget_sortgrouplist_exprs(root->processed_groupClause,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfpinfo->grouped_tlist),\n#else\n\t\tnumGroupCols = list_length(root->parse->groupClause);\n\t\tnumGroups = estimate_num_groups(root,\n\t\t\t\t\t\t\t\t\t\tget_sortgrouplist_exprs(root->parse->groupClause,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfpinfo->grouped_tlist),\n#endif\n\t\t\t\t\t\t\t\t\t\tinput_rows, NULL\n#if PG_VERSION_NUM >= 140000\n\t\t\t\t\t\t\t\t\t\t, NULL\n#endif\n\t\t\t\t\t);\n\n\t\t/*\n\t\t * Get the retrieved_rows and rows estimates.  If there are HAVING\n\t\t * quals, account for their selectivity.\n\t\t */\n#if PG_VERSION_NUM >= 160000\n\t\tif (root->hasHavingQual)\n#else\n\t\tif (root->parse->havingQual)\n#endif\n\t\t{\n\t\t\t/*\n\t\t\t * Factor in the selectivity of the remotely-checked quals\n\t\t\t */\n\t\t\tretrieved_rows =\n\t\t\t\tclamp_row_est(numGroups *\n\t\t\t\t\t\t\t  clauselist_selectivity(root,\n\t\t\t\t\t\t\t\t\t\t\t\t\t fpinfo->remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t JOIN_INNER,\n\t\t\t\t\t\t\t\t\t\t\t\t\t NULL));\n\n\t\t\t/*\n\t\t\t * Factor in the selectivity of the locally-checked quals\n\t\t\t */\n\t\t\trows = clamp_row_est(retrieved_rows * fpinfo->local_conds_sel);\n\t\t}\n\t\telse\n\t\t{\n\t\t\trows = retrieved_rows = numGroups;\n\t\t}\n\n\t\t/* Use width estimate made by the core code. */\n\t\twidth = foreignrel->reltarget->width;\n\n\t\t/*-----\n\t\t * Startup cost includes:\n\t\t *\t  1. Startup cost for underneath input relation, adjusted for\n\t\t *\t     tlist replacement by apply_scanjoin_target_to_paths()\n\t\t *\t  2. Cost of performing aggregation, per cost_agg()\n\t\t *-----\n\t\t */\n\t\tstartup_cost = ofpinfo->rel_startup_cost;\n\t\tstartup_cost += outerrel->reltarget->cost.startup;\n\t\tstartup_cost += aggcosts.transCost.startup;\n\t\tstartup_cost += aggcosts.transCost.per_tuple * input_rows;\n#if PG_VERSION_NUM >= 120000\n\t\tstartup_cost += aggcosts.finalCost.startup;\n#else\n\t\tstartup_cost += aggcosts.finalCost;\n#endif\n\t\tstartup_cost += (cpu_operator_cost * numGroupCols) * input_rows;\n\n\t\t/*-----\n\t\t * Run time cost includes:\n\t\t *\t  1. Run time cost of underneath input relation, adjusted for\n\t\t *\t     tlist replacement by apply_scanjoin_target_to_paths()\n\t\t *\t  2. Run time cost of performing aggregation, per cost_agg()\n\t\t *-----\n\t\t */\n\t\trun_cost = ofpinfo->rel_total_cost - ofpinfo->rel_startup_cost;\n\t\trun_cost += outerrel->reltarget->cost.per_tuple * input_rows;\n#if PG_VERSION_NUM >= 120000\n\t\trun_cost += aggcosts.finalCost.per_tuple * numGroups;\n#else\n\t\trun_cost += aggcosts.finalCost * numGroups;\n#endif\n\t\trun_cost += cpu_tuple_cost * numGroups;\n\n\t\t/* Account for the eval cost of HAVING quals, if any */\n#if PG_VERSION_NUM >= 160000\n\t\tif (root->hasHavingQual)\n#else\n\t\tif (root->parse->havingQual)\n#endif\n\t\t{\n\t\t\tQualCost remote_cost;\n\n\t\t\t/*\n\t\t\t * Add in the eval cost of the remotely-checked quals\n\t\t\t */\n\t\t\tcost_qual_eval(&remote_cost, fpinfo->remote_conds, root);\n\t\t\tstartup_cost += remote_cost.startup;\n\t\t\trun_cost += remote_cost.per_tuple * numGroups;\n\n\t\t\t/*\n\t\t\t * Add in the eval cost of the locally-checked quals\n\t\t\t */\n\t\t\tstartup_cost += fpinfo->local_conds_cost.startup;\n\t\t\trun_cost += fpinfo->local_conds_cost.per_tuple * retrieved_rows;\n\t\t}\n\n\t\t/* Add in tlist eval cost for each output row */\n\t\tstartup_cost += foreignrel->reltarget->cost.startup;\n\t\trun_cost += foreignrel->reltarget->cost.per_tuple * rows;\n\t}\n\telse\n\t{\n\t\tCost cpu_per_tuple;\n\n\t\t/*\n\t\t * Use rows/width estimates made by set_baserel_size_estimates.\n\t\t */\n\t\trows = foreignrel->rows;\n\t\twidth = foreignrel->reltarget->width;\n\n\t\t/*\n\t\t * Back into an estimate of the number of retrieved rows.  Just in\n\t\t * case this is nuts, clamp to at most foreignrel->tuples.\n\t\t */\n\t\tretrieved_rows = clamp_row_est(rows / fpinfo->local_conds_sel);\n\t\tretrieved_rows = Min(retrieved_rows, foreignrel->tuples);\n\n\t\t/*\n\t\t * Cost as though this were a seqscan, which is pessimistic.  We\n\t\t * effectively imagine the local_conds are being evaluated\n\t\t * remotely, too.\n\t\t */\n\t\tstartup_cost = 0;\n\t\trun_cost = 0;\n\t\trun_cost += seq_page_cost * foreignrel->pages;\n\n\t\tstartup_cost += foreignrel->baserestrictcost.startup;\n\t\tcpu_per_tuple = cpu_tuple_cost + foreignrel->baserestrictcost.per_tuple;\n\t\trun_cost += cpu_per_tuple * foreignrel->tuples;\n\n\t\t/* Add in tlist eval cost for each output row */\n\t\tstartup_cost += foreignrel->reltarget->cost.startup;\n\t\trun_cost += foreignrel->reltarget->cost.per_tuple * rows;\n\t}\n\n\t/*\n\t * Without remote estimates, we have no real way to estimate the cost\n\t * of generating sorted output.  It could be free if the query plan\n\t * the remote side would have chosen generates properly-sorted output\n\t * anyway, but in most cases it will cost something.  Estimate a value\n\t * high enough that we won't pick the sorted path when the ordering\n\t * isn't locally useful, but low enough that we'll err on the side of\n\t * pushing down the ORDER BY clause when it's useful to do so.\n\t */\n\tif (pathkeys != NIL)\n\t{\n\t\tif (IS_UPPER_REL(foreignrel))\n\t\t{\n\t\t\tAssert(foreignrel->reloptkind == RELOPT_UPPER_REL &&\n\t\t\t\t   fpinfo->stage == UPPERREL_GROUP_AGG);\n\t\t\tsqlite_adjust_foreign_grouping_path_cost(root, pathkeys,\n\t\t\t\t\t\t\t\t\t\t\t\t\t retrieved_rows, width,\n\t\t\t\t\t\t\t\t\t\t\t\t\t fpextra->limit_tuples,\n\t\t\t\t\t\t\t\t\t\t\t\t\t &startup_cost, &run_cost);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tstartup_cost *= DEFAULT_FDW_SORT_MULTIPLIER;\n\t\t\trun_cost *= DEFAULT_FDW_SORT_MULTIPLIER;\n\t\t}\n\t}\n\n\ttotal_cost = startup_cost + run_cost;\n\n#if PG_VERSION_NUM >= 120000\n\t/* Adjust the cost estimates if we have LIMIT */\n\tif (fpextra && fpextra->has_limit)\n\t{\n\t\tadjust_limit_rows_costs(&rows, &startup_cost, &total_cost,\n\t\t\t\t\t\t\t\tfpextra->offset_est, fpextra->count_est);\n\t\tretrieved_rows = rows;\n\t}\n#endif\n\n\t/*\n\t * If this includes the final sort step, the given target, which will be\n\t * applied to the resulting path, might have different expressions from\n\t * the foreignrel's reltarget (see make_sort_input_target()); adjust tlist\n\t * eval costs.\n\t */\n\tif (fpextra && fpextra->has_final_sort &&\n\t\tfpextra->target != foreignrel->reltarget)\n\t{\n\t\tQualCost\toldcost = foreignrel->reltarget->cost;\n\t\tQualCost\tnewcost = fpextra->target->cost;\n\n\t\tstartup_cost += newcost.startup - oldcost.startup;\n\t\ttotal_cost += newcost.startup - oldcost.startup;\n\t\ttotal_cost += (newcost.per_tuple - oldcost.per_tuple) * rows;\n\t}\n\n\t/*\n\t * Cache the retrieved rows and cost estimates for scans, joins, or\n\t * groupings without any parameterization, pathkeys, or additional\n\t * post-scan/join-processing steps, before adding the costs for\n\t * transferring data from the foreign server.  These estimates are useful\n\t * for costing remote joins involving this relation or costing other\n\t * remote operations on this relation such as remote sorts and remote\n\t * LIMIT restrictions, when the costs can not be obtained from the foreign\n\t * server.  This function will be called at least once for every foreign\n\t * relation without any parameterization, pathkeys, or additional\n\t * post-scan/join-processing steps.\n\t */\n\tif (pathkeys == NIL && param_join_conds == NIL && fpextra == NULL)\n\t{\n\t\tfpinfo->retrieved_rows = retrieved_rows;\n\t\tfpinfo->rel_startup_cost = startup_cost;\n\t\tfpinfo->rel_total_cost = total_cost;\n\t}\n\n\t/*\n\t * Add some additional cost factors to account for connection overhead\n\t * (fdw_startup_cost), transferring data across the network\n\t * (fdw_tuple_cost per retrieved row), and local manipulation of the data\n\t * (cpu_tuple_cost per retrieved row).\n\t */\n\tstartup_cost += fpinfo->fdw_startup_cost;\n\ttotal_cost += fpinfo->fdw_startup_cost;\n\ttotal_cost += fpinfo->fdw_tuple_cost * retrieved_rows;\n\ttotal_cost += cpu_tuple_cost * retrieved_rows;\n\n\t/*\n\t * If we have LIMIT, we should prefer performing the restriction remotely\n\t * rather than locally, as the former avoids extra row fetches from the\n\t * remote that the latter might cause.  But since the core code doesn't\n\t * account for such fetches when estimating the costs of the local\n\t * restriction (see create_limit_path()), there would be no difference\n\t * between the costs of the local restriction and the costs of the remote\n\t * restriction estimated above if we don't use remote estimates (except\n\t * for the case where the foreignrel is a grouping relation, the given\n\t * pathkeys is not NIL, and the effects of a bounded sort for that rel is\n\t * accounted for in costing the remote restriction).  Tweak the costs of\n\t * the remote restriction to ensure we'll prefer it if LIMIT is a useful\n\t * one.\n\t */\n\tif (fpextra && fpextra->has_limit &&\n\t\tfpextra->limit_tuples > 0 &&\n\t\tfpextra->limit_tuples < fpinfo->rows)\n\t{\n\t\tAssert(fpinfo->rows > 0);\n\t\ttotal_cost -= (total_cost - startup_cost) * 0.05 *\n\t\t\t(fpinfo->rows - fpextra->limit_tuples) / fpinfo->rows;\n\t}\n\n\t/* Return results. */\n\t*p_rows = rows;\n\t*p_width = width;\n\t*p_startup_cost = startup_cost;\n\t*p_total_cost = total_cost;\n}\n\nstatic void\nsqlite_to_pg_type(StringInfo str, char *type)\n{\n\tint\t\t\ti;\n\n\t/*\n\t * type conversion based on SQLite affiniy\n\t * https://www.sqlite.org/datatype3.html\n\t */\n\tstatic const char *affinity[][2] = {\n\t\t{\"int\", \"bigint\"},\n\t\t{\"char\", \"text\"},\n\t\t{\"clob\", \"text\"},\n\t\t{\"text\", \"text\"},\n\t\t{\"blob\", \"bytea\"},\n\t\t{\"real\", \"double precision\"},\n\t\t{\"floa\", \"double precision\"},\n\t\t{\"doub\", \"double precision\"},\n\t{NULL, NULL}};\n\n\tstatic const char *pg_type[][2] = {\n\t\t{\"datetime\", \"timestamp\"},\n\t\t{\"time\"},\n\t\t{\"date\"},\n\t\t{\"bit\"},\t\t\t\t/* bit(n) and bit varying(n) */\n\t\t{\"boolean\"},\n\t\t{\"varchar\"},\n\t\t{\"char\"},\n\t\t{\"uuid\"},\n\t\t{\"macaddr\"},\n\t\t{\"macaddr8\"},\n\t\t{\"geometry\"},\n\t\t{\"geography\"},\n\t\t{\"jsonb\"},\n\t\t{\"json\"},\n\t\t{NULL}\n\t};\n\n\tif (type == NULL || type[0] == '\\0')\n\t{\n\t\t/* If no type, use blob affinity */\n\t\tappendStringInfoString(str, \"bytea\");\n\t\treturn;\n\t}\n\n\ttype = str_tolower(type, strlen(type), C_COLLATION_OID);\n\n\tfor (i = 0; pg_type[i][0] != NULL; i++)\n\t{\n\t\tconst char *t0 = pg_type[i][0];\n\t\tif (strncmp(type, t0, strlen(t0)) == 0)\n\t\t{\n\t\t\t/* Pass type to PostgreSQL as it is */\n\t\t\tif (pg_type[i][1] == NULL)\n\t\t\t{\n#ifdef SQLITE_FDW_GIS_ENABLE\n\t\t\t\tappendStringInfoString(str, type);\n#else\n\t\t\t\t/*\n\t\t\t\t * Without GIS support.\n\t\t\t\t * Columns with listed data type names treated just as bytea\n\t\t\t\t */\n\t\t\t\tbool\tpostgis = false;\n\t\t\t\tint\t\tj;\n\n\t\t\t\tfor (j = 0; postGisSQLiteCompatibleTypes[j] != NULL; j++)\n\t\t\t\t{\n\t\t\t\t\tconst char *pgt = postGisSQLiteCompatibleTypes[j];\n\t\t\t\t\tif (strncmp(type, pgt, strlen(pgt)) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpostgis = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (postgis)\n\t\t\t\t\tappendStringInfoString(str, \"bytea\");\n\t\t\t\telse\n\t\t\t\t\tappendStringInfoString(str, type);\n#endif\n\t\t\t}\n\t\t\telse\n\t\t\t\tappendStringInfoString(str, pg_type[i][1]);\n\t\t\tpfree(type);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tfor (i = 0; affinity[i][0] != NULL; i++)\n\t{\n\t\tif (strstr(type, affinity[i][0]) != 0)\n\t\t{\n\t\t\tappendStringInfoString(str, affinity[i][1]);\n\t\t\tpfree(type);\n\t\t\treturn;\n\t\t}\n\t}\n\t/* decimal for numeric affinity */\n\tappendStringInfoString(str, \"decimal\");\n\tpfree(type);\n}\n\n/*\n * Force assorted GUC parameters to settings that ensure that we'll output\n * data values in a form that is unambiguous to the remote server.\n *\n * This is rather expensive and annoying to do once per row, but there's\n * little choice if we want to be sure values are transmitted accurately;\n * we can't leave the settings in place between rows for fear of affecting\n * user-visible computations.\n *\n * We use the equivalent of a function SET option to allow the settings to\n * persist only until the caller calls reset_transmission_modes().  If an\n * error is thrown in between, guc.c will take care of undoing the settings.\n *\n * The return value is the nestlevel that must be passed to\n * reset_transmission_modes() to undo things.\n */\nint\nsqlite_set_transmission_modes(void)\n{\n\tint\t\t\tnestlevel = NewGUCNestLevel();\n\n\t/*\n\t * The values set here should match what pg_dump does.  See also\n\t * configure_remote_session in connection.c.\n\t */\n\tif (DateStyle != USE_ISO_DATES)\n\t\t(void) set_config_option(\"datestyle\", \"ISO\",\n\t\t\t\t\t\t\t\t PGC_USERSET, PGC_S_SESSION,\n\t\t\t\t\t\t\t\t GUC_ACTION_SAVE, true, 0, false);\n\n\tif (IntervalStyle != INTSTYLE_POSTGRES)\n\t\t(void) set_config_option(\"intervalstyle\", \"postgres\",\n\t\t\t\t\t\t\t\t PGC_USERSET, PGC_S_SESSION,\n\t\t\t\t\t\t\t\t GUC_ACTION_SAVE, true, 0, false);\n\tif (extra_float_digits < 3)\n\t\t(void) set_config_option(\"extra_float_digits\", \"3\",\n\t\t\t\t\t\t\t\t PGC_USERSET, PGC_S_SESSION,\n\t\t\t\t\t\t\t\t GUC_ACTION_SAVE, true, 0, false);\n\n\t/*\n\t * In addition force restrictive search_path, in case there are any\n\t * regproc or similar constants to be printed.\n\t */\n\t(void) set_config_option(\"search_path\", \"pg_catalog\",\n\t\t\t\t\t\t\t PGC_USERSET, PGC_S_SESSION,\n\t\t\t\t\t\t\t GUC_ACTION_SAVE, true, 0, false);\n\n\treturn nestlevel;\n}\n\n/*\n * Undo the effects of set_transmission_modes().\n */\nvoid\nsqlite_reset_transmission_modes(int nestlevel)\n{\n\tAtEOXact_GUC(true, nestlevel);\n}\n\n/*\n * sqlite_execute_insert\n *\t\tPerform execute sqliteExecForeignInsert, sqliteExecForeignBatchInsert\n */\nstatic TupleTableSlot **\nsqlite_execute_insert(EState *estate,\n\t\t\t\t\t  ResultRelInfo *resultRelInfo,\n\t\t\t\t\t  CmdType operation,\n\t\t\t\t\t  TupleTableSlot **slots,\n\t\t\t\t\t  TupleTableSlot **planSlots,\n\t\t\t\t\t  int *numSlots)\n{\n\tSqliteFdwExecState *fmstate = (SqliteFdwExecState *) resultRelInfo->ri_FdwState;\n\tListCell   *lc;\n\tDatum\t\tvalue = 0;\n\tMemoryContext oldcontext;\n\tint\t\t\trc = SQLITE_OK;\n\tint\t\t\tnestlevel;\n\tint\t\t\tbindnum = 0;\n\tint\t\t\ti;\n\tRelation\trel = resultRelInfo->ri_RelationDesc;\n\tOid\t\t\tforeignTableId = RelationGetRelid(rel);\n#if PG_VERSION_NUM >= 140000\n\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n#endif\n\n\telog(DEBUG1, \"sqlite_fdw : %s for RelId %u\", __func__, foreignTableId);\n\n\toldcontext = MemoryContextSwitchTo(fmstate->temp_cxt);\n\n\tnestlevel = sqlite_set_transmission_modes();\n\n\tAssert(operation == CMD_INSERT);\n\n#if PG_VERSION_NUM >= 140000\n\tif (fmstate->num_slots != *numSlots)\n\t{\n\t\tStringInfoData sql;\n\n\t\tfmstate->table = GetForeignTable(RelationGetRelid(fmstate->rel));\n\t\tfmstate->server = GetForeignServer(fmstate->table->serverid);\n\t\tfmstate->stmt = NULL;\n\n\t\tinitStringInfo(&sql);\n\t\tsqlite_rebuild_insert(&sql, fmstate->rel, fmstate->orig_query,\n\t\t\t\t\t\t\t  fmstate->target_attrs, fmstate->values_end,\n\t\t\t\t\t\t\t  fmstate->p_nums, *numSlots - 1);\n\t\tfmstate->query = sql.data;\n\t\tfmstate->num_slots = *numSlots;\n\n\t\tsqlite_prepare_wrapper(fmstate->server, fmstate->conn, fmstate->query, &fmstate->stmt, NULL, true);\n\t}\n\n#endif\n\tfor (i = 0; i < *numSlots; i++)\n\t{\n\t\tforeach(lc, fmstate->retrieved_attrs)\n\t\t{\n\t\t\tint\t\t\tattnum = lfirst_int(lc) - 1;\n\t\t\tForm_pg_attribute att = TupleDescAttr(slots[i]->tts_tupleDescriptor, attnum);\n\t\t\tbool\t\tisnull;\n#if PG_VERSION_NUM >= 140000\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc, attnum);\n\n\t\t\t/* Ignore generated columns and skip bind value */\n\t\t\tif (attr->attgenerated)\n\t\t\t\tcontinue;\n#endif\n\n\t\t\tvalue = slot_getattr(slots[i], attnum + 1, &isnull);\n\t\t\tsqlite_bind_sql_var(att, bindnum, value, fmstate->stmt, &isnull, foreignTableId);\n\t\t\tbindnum++;\n\t\t}\n\t}\n\tsqlite_reset_transmission_modes(nestlevel);\n\n\t/* Execute the query */\n\trc = sqlite3_step(fmstate->stmt);\n\tif (rc != SQLITE_DONE)\n\t{\n\t\tsqlitefdw_report_error(ERROR, fmstate->stmt, fmstate->conn, NULL, rc);\n\t}\n\tsqlite3_reset(fmstate->stmt);\n\tMemoryContextSwitchTo(oldcontext);\n\tMemoryContextReset(fmstate->temp_cxt);\n\n\treturn slots;\n}\n\n/*\n * Prepare for processing of parameters used in remote query.\n */\nstatic void\nsqlite_prepare_query_params(PlanState *node,\n\t\t\t\t\t\t\tList *fdw_exprs,\n\t\t\t\t\t\t\tint numParams,\n\t\t\t\t\t\t\tFmgrInfo **param_flinfo,\n\t\t\t\t\t\t\tList **param_exprs,\n\t\t\t\t\t\t\tconst char ***param_values,\n\t\t\t\t\t\t\tOid **param_types)\n{\n\tint\t\t\ti;\n\tListCell   *lc;\n\n\tAssert(numParams > 0);\n\n\t/* Prepare for output conversion of parameters used in remote query. */\n\t*param_flinfo = (FmgrInfo *) palloc0(sizeof(FmgrInfo) * numParams);\n\t*param_types = (Oid *) palloc0(sizeof(Oid) * numParams);\n\ti = 0;\n\tforeach(lc, fdw_exprs)\n\t{\n\t\tNode\t   *param_expr = (Node *) lfirst(lc);\n\t\tOid\t\t\ttypefnoid;\n\t\tbool\t\tisvarlena;\n\n\t\t(*param_types)[i] = exprType(param_expr);\n\t\tgetTypeOutputInfo(exprType(param_expr), &typefnoid, &isvarlena);\n\t\tfmgr_info(typefnoid, &(*param_flinfo)[i]);\n\t\ti++;\n\t}\n\n\t/*\n\t * Prepare remote-parameter expressions for evaluation.  (Note: in\n\t * practice, we expect that all these expressions will be just Params, so\n\t * we could possibly do something more efficient than using the full\n\t * expression-eval machinery for this.  But probably there would be little\n\t * benefit, and it'd require sqlite_fdw to know more than is desirable\n\t * about Param evaluation.)\n\t */\n#if PG_VERSION_NUM >= 100000\n\t*param_exprs = (List *) ExecInitExprList(fdw_exprs, node);\n#else\n\t*param_exprs = (List *) ExecInitExpr((Expr *) fdw_exprs, node);\n#endif\n\t/* Allocate buffer for text form of query parameters. */\n\t*param_values = (const char **) palloc0(numParams * sizeof(char *));\n}\n\n/*\n * Construct array of query parameter values and bind parameters\n *\n */\nstatic void\nsqlite_process_query_params(ExprContext *econtext,\n\t\t\t\t\t\t\tFmgrInfo *param_flinfo,\n\t\t\t\t\t\t\tList *param_exprs,\n\t\t\t\t\t\t\tconst char **param_values,\n\t\t\t\t\t\t\tsqlite3_stmt * *stmt,\n\t\t\t\t\t\t\tOid *param_types,\n\t\t\t\t\t\t\tOid foreignTableId\n\t\t\t\t\t\t\t)\n{\n\tint\t\t\ti;\n\tListCell   *lc;\n\tint\t\t\tnestlevel;\n\n\tnestlevel = sqlite_set_transmission_modes();\n\ti = 0;\n\tforeach(lc, param_exprs)\n\t{\n\t\tExprState  *expr_state = (ExprState *) lfirst(lc);\n\t\tDatum\t\texpr_value;\n\t\tbool\t\tisNull;\n\t\t/* fake structure, bind function usually works with attribute, but just typid in our case */\n\t\tForm_pg_attribute att = NULL;\n\n\t\t/* Evaluate the parameter expression */\n#if PG_VERSION_NUM >= 100000\n\t\texpr_value = ExecEvalExpr(expr_state, econtext, &isNull);\n#else\n\t\texpr_value = ExecEvalExpr(expr_state, econtext, &isNull, NULL);\n#endif\n\t\t/* Bind parameters */\n\t\tatt = palloc(sizeof(FormData_pg_attribute));\n\t\tatt->atttypid = param_types[i];\n\t\tatt->atttypmod = -1;\n\t\tsqlite_bind_sql_var(att, i, expr_value, *stmt, &isNull, foreignTableId);\n\t\tpfree(att);\n\t\t/*\n\t\t * Get string sentation of each parameter value by invoking\n\t\t * type-specific output function, unless the value is null.\n\t\t */\n\t\tif (isNull)\n\t\t\tparam_values[i] = NULL;\n\t\telse\n\t\t\tparam_values[i] = OutputFunctionCall(&param_flinfo[i], expr_value);\n\t\ti++;\n\t}\n\tsqlite_reset_transmission_modes(nestlevel);\n}\n\n/*\n * Create cursor for node's query with current parameter values.\n */\nstatic void\nsqlite_create_cursor(ForeignScanState *node)\n{\n\tSqliteFdwExecState *festate = (SqliteFdwExecState *) node->fdw_state;\n\tExprContext *econtext = node->ss.ps.ps_ExprContext;\n\tint\t\t\tnumParams = festate->numParams;\n\tconst char **values = festate->param_values;\n\n\t/*\n\t * Construct array of query parameter values in text format.  We do the\n\t * conversions in the short-lived per-tuple context, so as not to cause a\n\t * memory leak over repeated scans.\n\t */\n\tif (numParams > 0)\n\t{\n\t\tOid\t\t\tforeignTableId = (festate->rel != NULL) ? RelationGetRelid(festate->rel) : 0;\n\t\tMemoryContext oldcontext;\n\n\t\toldcontext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory);\n\n\t\tsqlite_process_query_params(econtext,\n\t\t\t\t\t\t\t\t\tfestate->param_flinfo,\n\t\t\t\t\t\t\t\t\tfestate->param_exprs,\n\t\t\t\t\t\t\t\t\tvalues,\n\t\t\t\t\t\t\t\t\t&festate->stmt,\n\t\t\t\t\t\t\t\t\tfestate->param_types,\n\t\t\t\t\t\t\t\t\tforeignTableId);\n\n\t\tMemoryContextSwitchTo(oldcontext);\n\t}\n\n\t/* Mark the cursor as created, and show no tuples have been retrieved */\n\tfestate->cursor_exists = true;\n}\n\n/*\n * Execute a direct UPDATE/DELETE statement.\n */\nstatic void\nsqlite_execute_dml_stmt(ForeignScanState *node)\n{\n\tSqliteFdwDirectModifyState *dmstate = (SqliteFdwDirectModifyState *) node->fdw_state;\n\tExprContext *econtext = node->ss.ps.ps_ExprContext;\n\tint\t\t\tnumParams = dmstate->numParams;\n\tconst char **values = dmstate->param_values;\n\tOid\t\t\tforeignTableId = RelationGetRelid(dmstate->rel);\n\tint\t\t\trc;\n\n\t/*\n\t * Construct array of query parameter values in text format.\n\t */\n\tif (numParams > 0)\n\t\tsqlite_process_query_params(econtext,\n\t\t\t\t\t\t\t\t\tdmstate->param_flinfo,\n\t\t\t\t\t\t\t\t\tdmstate->param_exprs,\n\t\t\t\t\t\t\t\t\tvalues,\n\t\t\t\t\t\t\t\t\t&dmstate->stmt,\n\t\t\t\t\t\t\t\t\tdmstate->param_types,\n\t\t\t\t\t\t\t\t\tforeignTableId);\n\n\t/*\n\t * Notice that we pass NULL for paramTypes, thus forcing the remote server\n\t * to infer types for all parameters.  Since we explicitly cast every\n\t * parameter (see deparse.c), the \"inference\" is trivial and will produce\n\t * the desired result.  This allows us to avoid assuming that the remote\n\t * server has the same OIDs we do for the parameters' types.\n\t */\n\trc = sqlite3_step(dmstate->stmt);\n\tif (rc != SQLITE_DONE)\n\t{\n\t\tsqlitefdw_report_error(ERROR, dmstate->stmt, dmstate->conn, NULL, rc);\n\t}\n\n\t/* Get the number of rows affected. */\n\tdmstate->num_tuples = sqlite3_changes(dmstate->conn);\n}\n\n/*\n * Given an EquivalenceClass and a foreign relation, find an EC member\n * that can be used to sort the relation remotely according to a pathkey\n * using this EC.\n *\n * If there is more than one suitable candidate, return an arbitrary\n * one of them.  If there is none, return NULL.\n *\n * This checks that the EC member expression uses only Vars from the given\n * rel and is shippable.  Caller must separately verify that the pathkey's\n * ordering operator is shippable.\n */\nEquivalenceMember *\nsqlite_find_em_for_rel(PlannerInfo *root, EquivalenceClass *ec, RelOptInfo *rel)\n{\n\tListCell   *lc;\n#if PG_VERSION_NUM >= 170000\n\tSqliteFdwRelationInfo *fpinfo = (SqliteFdwRelationInfo *) rel->fdw_private;\n#endif\n\n\tforeach(lc, ec->ec_members)\n\t{\n\t\tEquivalenceMember *em = (EquivalenceMember *) lfirst(lc);\n\n\t\t/*\n\t\t * Note we require !bms_is_empty, else we'd accept constant\n\t\t * expressions which are not suitable for the purpose.\n\t\t */\n\t\tif (bms_is_subset(em->em_relids, rel->relids) &&\n\t\t\t!bms_is_empty(em->em_relids) &&\n#if PG_VERSION_NUM >= 170000\n\t\t\tbms_is_empty(bms_intersect(em->em_relids, fpinfo->hidden_subquery_rels)) &&\n#endif\n\t\t\tsqlite_is_foreign_expr(root, rel, em->em_expr))\n\t\t\treturn em;\n\t}\n\n\treturn NULL;\n}\n\n/*\n * Find an EquivalenceClass member that is to be computed as a sort column\n * in the given rel's reltarget, and is shippable.\n *\n * If there is more than one suitable candidate, return an arbitrary\n * one of them.  If there is none, return NULL.\n *\n * This checks that the EC member expression uses only Vars from the given\n * rel and is shippable.  Caller must separately verify that the pathkey's\n * ordering operator is shippable.\n */\nEquivalenceMember *\nsqlite_find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec,\n\t\t\t\t\t   RelOptInfo *rel)\n{\n\tPathTarget *target = rel->reltarget;\n\tListCell   *lc1;\n\tint\t\t\ti;\n\n\ti = 0;\n\tforeach(lc1, target->exprs)\n\t{\n\t\tExpr\t   *expr = (Expr *) lfirst(lc1);\n\t\tIndex\t\tsgref = get_pathtarget_sortgroupref(target, i);\n\t\tListCell   *lc2;\n\n\t\t/* Ignore non-sort expressions */\n\t\tif (sgref == 0 ||\n\t\t\tget_sortgroupref_clause_noerr(sgref,\n\t\t\t\t\t\t\t\t\t\t  root->parse->sortClause) == NULL)\n\t\t{\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* We ignore binary-compatible relabeling on both ends */\n\t\twhile (expr && IsA(expr, RelabelType))\n\t\t\texpr = ((RelabelType *) expr)->arg;\n\n\t\t/* Locate an EquivalenceClass member matching this expr, if any */\n\t\tforeach(lc2, ec->ec_members)\n\t\t{\n\t\t\tEquivalenceMember *em = (EquivalenceMember *) lfirst(lc2);\n\t\t\tExpr\t   *em_expr;\n\n\t\t\t/* Don't match constants */\n\t\t\tif (em->em_is_const)\n\t\t\t\tcontinue;\n\n\t\t\t/* Ignore child members */\n\t\t\tif (em->em_is_child)\n\t\t\t\tcontinue;\n\n\t\t\t/* Match if same expression (after stripping relabel) */\n\t\t\tem_expr = em->em_expr;\n\t\t\twhile (em_expr && IsA(em_expr, RelabelType))\n\t\t\t\tem_expr = ((RelabelType *) em_expr)->arg;\n\n\t\t\tif (!equal(em_expr, expr))\n\t\t\t\tcontinue;\n\n\t\t\t/* Check that expression (including relabels!) is shippable */\n\t\t\tif (sqlite_is_foreign_expr(root, rel, em->em_expr))\n\t\t\t\treturn em;\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn NULL;\n}\n\n#if PG_VERSION_NUM >= 140000\n/*\n * Determine batch size for a given foreign table. The option specified for\n * a table has precedence.\n */\nstatic int\nsqlite_get_batch_size_option(Relation rel)\n{\n\tOid\t\t\tforeigntableid = RelationGetRelid(rel);\n\tForeignTable *table;\n\tForeignServer *server;\n\tList\t   *options;\n\tListCell   *lc;\n\n\t/* we use 1 by default, which means \"no batching\" */\n\tint\t\t\tbatch_size = 1;\n\n\t/*\n\t * Load options for table and server. We append server options after table\n\t * options, because table options take precedence.\n\t */\n\ttable = GetForeignTable(foreigntableid);\n\tserver = GetForeignServer(table->serverid);\n\n\toptions = NIL;\n\toptions = list_concat(options, table->options);\n\toptions = list_concat(options, server->options);\n\n\t/* See if either table or server specifies batch_size. */\n\tforeach(lc, options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\n\t\tif (strcmp(def->defname, \"batch_size\") == 0)\n\t\t{\n\t\t\t(void) parse_int(defGetString(def), &batch_size, 0, NULL);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn batch_size;\n}\n#endif\n\n/*\n * sqliteIsForeignRelUpdatable\n *\t\tDetermine whether a foreign table supports INSERT, UPDATE and/or\n *\t\tDELETE.\n */\nstatic int\nsqliteIsForeignRelUpdatable(Relation rel)\n{\n\tbool\t\tupdatable;\n\tbool\t\treadonly_db_file;\n\tForeignTable *table;\n\tForeignServer *server;\n\tListCell   *lc;\n\n\t/*\n\t * By default, all sqlite_fdw foreign tables are assumed updatable.\n\t * If force_readonly option is set, foreign server option 'updatable'\n\t * is ignored, table option 'updatable' is also ignored\n\t */\n\tupdatable = true;\n\treadonly_db_file = false;\n\n\ttable = GetForeignTable(RelationGetRelid(rel));\n\tserver = GetForeignServer(table->serverid);\n\n\tforeach(lc, server->options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\t\tif (strcmp(def->defname, \"force_readonly\") == 0)\n\t\t\treadonly_db_file = defGetBoolean(def);\n\t\telse if (strcmp(def->defname, \"updatable\") == 0)\n\t\t\tupdatable = defGetBoolean(def);\n\t}\n\tif (readonly_db_file)\n\t\tupdatable = false;\n\telse\n\t{\n\t\tforeach(lc, table->options)\n\t\t{\n\t\t\tDefElem    *def = (DefElem *) lfirst(lc);\n\n\t\t\tif (strcmp(def->defname, \"updatable\") == 0)\n\t\t\t\tupdatable = defGetBoolean(def);\n\t\t}\n\t}\n\n\t/*\n\t * Currently \"updatable\" means support for INSERT, UPDATE and DELETE.\n\t */\n\treturn updatable ?\n\t\t(1 << CMD_INSERT) | (1 << CMD_UPDATE) | (1 << CMD_DELETE) : 0;\n}\n\n/*\n * sqlite_affinity_eqv_to_pgtype:\n * Give nearest SQLite data affinity for PostgreSQL data type\n */\nstatic int32\nsqlite_affinity_eqv_to_pgtype(Oid type)\n{\n\tswitch (type)\n\t{\n\t\t/* some popular first */\n\t\tcase VARCHAROID:\n\t\tcase TEXTOID:\n\t\tcase JSONOID:\n\t\tcase NAMEOID:\n\t\tcase DATEOID:\n\t\tcase TIMEOID:\n\t\tcase TIMESTAMPOID:\n\t\tcase TIMESTAMPTZOID:\n\t\tcase BPCHAROID:\n\t\t\treturn SQLITE3_TEXT;\n\t\tcase INT4OID:\n\t\tcase BOOLOID:\n\t\tcase INT8OID:\n\t\tcase INT2OID:\n\t\tcase BITOID:\n\t\tcase VARBITOID:\n\t\t\treturn SQLITE_INTEGER;\n\t\tcase FLOAT4OID:\n\t\tcase FLOAT8OID:\n\t\tcase NUMERICOID:\n\t\t\treturn SQLITE_FLOAT;\n\t\tcase BYTEAOID:\n\t\tcase UUIDOID:\n\t\tcase MACADDROID:\n\t\tcase MACADDR8OID:\n\t\tcase JSONBOID:\n\t\t\treturn SQLITE_BLOB;\n\t\tdefault:\n\t\t\tif (listed_datatype_oid(type, -1, postGisSQLiteCompatibleTypes))\n\t\t\t\treturn SQLITE_BLOB; /* SpatiaLite GIS data */\n\t\t\telse\n\t\t\t\treturn SQLITE3_TEXT;\n\t}\n}\n\n/*\n * sqlite_datatype\n * Give equivalent string for SQLite data affinity by int from enum\n * SQLITE_INTEGER etc.\n */\nconst char*\nsqlite_datatype(int t)\n{\n\tswitch (t)\n\t{\n\t\tcase SQLITE_INTEGER:\n\t\t\treturn azType[1];\n\t\tcase SQLITE_FLOAT:\n\t\t\treturn azType[2];\n\t\tcase SQLITE3_TEXT:\n\t\t\treturn azType[3];\n\t\tcase SQLITE_BLOB:\n\t\t\treturn azType[4];\n\t\tcase SQLITE_NULL:\n\t\t\treturn azType[5];\n\t\tdefault:\n\t\t\treturn azType[0];\n\t}\n}\n\n/*\n * Give SQLite affinity enum int for SQLite data affinity string\n */\nconst int\nsqlite_affinity_code(char* t)\n{\n\tif ( t == NULL )\n\t\treturn SQLITE_NULL;\n\tif (strcasecmp(t, azType[1]) == 0 || strcasecmp(t, \"int\") == 0)\n\t\treturn SQLITE_INTEGER;\n\tif (strcasecmp(t, azType[2]) == 0)\n\t\treturn SQLITE_FLOAT;\n\tif (strcasecmp(t, azType[3]) == 0)\n\t\treturn SQLITE_TEXT;\n\tif (strcasecmp(t, azType[4]) == 0)\n\t\treturn SQLITE_BLOB;\n\treturn SQLITE_NULL;\n}\n\n/*\n * Callback function which is called when error occurs during column value\n * conversion.  Print names of column and relation, SQLite value details.\n *\n * Note that this function mustn't do any catalog lookups, since we are in\n * an already-failed transaction.  Fortunately, we can get the needed info\n * from the relation or the query's rangetable instead.\n */\nstatic void\nconversion_error_callback(void *arg)\n{\n\tConversionLocation *errpos = (ConversionLocation *) arg;\n\tRelation\t\t\trel = errpos->rel;\n\tForeignScanState   *fsstate = errpos->fsstate;\n\tconst char\t\t   *attname = NULL;\n\tconst char\t\t   *relname = NULL;\n\tbool\t\t\t\tis_wholerow = false;\n\tForm_pg_attribute\tatt = errpos->att;\n\tOid\t\t\t\t\tpgtyp = att->atttypid;\n\tint32\t \t\t\tpgtypmod = att->atttypmod;\n\tNameData\t\t\tpgColND = att->attname;\n\tconst char\t\t   *pg_dataTypeName = NULL;\n\tconst char\t\t   *sqlite_affinity = NULL;\n\tconst char\t\t   *pg_good_affinity = NULL;\n\tconst int\t\t\tmax_logged_byte_length = NAMEDATALEN * 2;\n\tint \t\t\t\tvalue_byte_size_blob_or_utf8 = sqlite3_value_bytes (errpos->val);\n\tint\t\t\t\t\tvalue_aff = sqlite3_value_type(errpos->val);\n\tint\t\t\t\t\taffinity_for_pg_column = sqlite_affinity_eqv_to_pgtype(pgtyp);\n\n\tpg_dataTypeName = TypeNameToString(makeTypeNameFromOid(pgtyp, pgtypmod));\n\tsqlite_affinity = sqlite_datatype(value_aff);\n\tpg_good_affinity = sqlite_datatype(affinity_for_pg_column);\n\n\t/*\n\t * If we're in a scan node, always use aliases from the rangetable, for\n\t * consistency between the simple-relation and remote-join cases.  Look at\n\t * the relation's tupdesc only if we're not in a scan node.\n\t */\n\tif (fsstate)\n\t{\n\t\t/* ForeignScan case */\n\t\tForeignScan *fsplan = castNode(ForeignScan, fsstate->ss.ps.plan);\n\t\tint\t\t\tvarno = 0;\n\t\tAttrNumber\tcolno = 0;\n\n\t\tif (fsplan->scan.scanrelid > 0)\n\t\t{\n\t\t\t/* error occurred in a scan against a foreign table */\n\t\t\tvarno = fsplan->scan.scanrelid;\n\t\t\tcolno = errpos->cur_attno;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* error occurred in a scan against a foreign join */\n\t\t\tTargetEntry *tle;\n\n\t\t\ttle = list_nth_node(TargetEntry, fsplan->fdw_scan_tlist,\n\t\t\t\t\t\t\t\terrpos->cur_attno - 1);\n\n\t\t\t/*\n\t\t\t * Target list can have Vars and expressions.  For Vars, we can\n\t\t\t * get some information, however for expressions we can't.  Thus\n\t\t\t * for expressions, just show generic context message.\n\t\t\t */\n\t\t\tif (IsA(tle->expr, Var))\n\t\t\t{\n\t\t\t\tVar\t\t   *var = (Var *) tle->expr;\n\n\t\t\t\tvarno = var->varno;\n\t\t\t\tcolno = var->varattno;\n\t\t\t}\n\t\t}\n\n\t\tif (varno > 0)\n\t\t{\n\t\t\tEState\t   *estate = fsstate->ss.ps.state;\n\t\t\tRangeTblEntry *rte = exec_rt_fetch(varno, estate);\n\n\t\t\trelname = rte->eref->aliasname;\n\n\t\t\tif (colno == 0)\n\t\t\t\tis_wholerow = true;\n\t\t\telse if (colno > 0 && colno <= list_length(rte->eref->colnames))\n\t\t\t\tattname = strVal(list_nth(rte->eref->colnames, colno - 1));\n\t\t\telse if (colno == SelfItemPointerAttributeNumber)\n\t\t\t\tattname = \"ctid\";\n\t\t}\n\t}\n\telse if (rel)\n\t{\n\t\t/* Non-ForeignScan case (we should always have a rel here) */\n\t\tTupleDesc\ttupdesc = RelationGetDescr(rel);\n\n\t\trelname = RelationGetRelationName(rel);\n\t\tif (errpos->cur_attno > 0 && errpos->cur_attno <= tupdesc->natts)\n\t\t{\n\t\t\tForm_pg_attribute attr = TupleDescAttr(tupdesc,\n\t\t\t\t\t\t\t\t\t\t\t\t   errpos->cur_attno - 1);\n\n\t\t\tattname = NameStr(attr->attname);\n\t\t}\n\t\telse if (errpos->cur_attno == SelfItemPointerAttributeNumber)\n\t\t\tattname = \"ctid\";\n\t}\n\n\t{\n\t\t/*\n\t\t * Error HINT block\n\t\t */\n\t\tchar\t   *err_hint_mess0 = palloc(max_logged_byte_length * 2 + 1024); /* The longest hint message */\n\t\tchar \t   *err_hint_mess;\n\t\tchar\t   *value_text = NULL;\n\t\tbool\t\tsqlite_value_as_hex_code = value_byte_size_blob_or_utf8 < max_logged_byte_length && ((GetDatabaseEncoding() != PG_UTF8 && value_aff == SQLITE3_TEXT) || (value_aff == SQLITE_BLOB));\n\n\t\t/* Print problem SQLite value only for\n\t\t * - integer,\n\t\t * - float,\n\t\t * - short BLOBs,\n\t\t * - short text if database encoding is UTF-8\n\t\t *   incorrect output otherwise possible: UTF-8 in SQLite, but not supported charcters in PostgreSQL\n\t\t */\n\t\tif ((value_byte_size_blob_or_utf8 < max_logged_byte_length && GetDatabaseEncoding() == PG_UTF8 && value_aff == SQLITE3_TEXT)\n\t\t\t|| value_aff == SQLITE_INTEGER\n\t\t\t|| value_aff == SQLITE_FLOAT)\n\t\t\tvalue_text = (char *)sqlite3_value_text(errpos->val);\n\n\t\tif (sqlite_value_as_hex_code)\n\t\t{\n\t\t\tconst unsigned char *vt = sqlite3_value_text(errpos->val);\n\t\t\tvalue_text = palloc (max_logged_byte_length * 2 + 1);\n\t\t\tfor (size_t i = 0; i < value_byte_size_blob_or_utf8; ++i)\n\t\t\t\tsprintf(value_text + i * 2, \"%02x\", vt[i]);\n\t\t}\n\n\t\terr_hint_mess = err_hint_mess0;\n\t\terr_hint_mess += sprintf(\n\t\t\terr_hint_mess,\n\t\t\t\"SQLite value with \\\"%s\\\" affinity \",\n\t\t\tsqlite_affinity\n\t\t\t);\n\t\tif (value_aff == SQLITE3_TEXT || value_aff == SQLITE_BLOB )\n\t\t\terr_hint_mess += sprintf(\n\t\t\t\t\terr_hint_mess,\n\t\t\t\t\t\"(%d bytes) \",\n\t\t\t\t\tvalue_byte_size_blob_or_utf8 );\n\t\tif (value_text != NULL)\n\t\t{\n\t\t\tif (sqlite_value_as_hex_code)\n\t\t\t\terr_hint_mess += sprintf(\n\t\t\t\t\t\terr_hint_mess,\n\t\t\t\t\t\t\"in hex : %s\",\n\t\t\t\t\t\tvalue_text );\n\t\t\telse if (value_aff != SQLITE_INTEGER && value_aff != SQLITE_FLOAT)\n\t\t\t\terr_hint_mess += sprintf(\n\t\t\t\t\t\terr_hint_mess,\n\t\t\t\t\t\t\": '%s'\",\n\t\t\t\t\t\tvalue_text );\n\t\t\telse\n\t\t\t\terr_hint_mess += sprintf(\n\t\t\t\t\t\terr_hint_mess,\n\t\t\t\t\t\t\": %s\",\n\t\t\t\t\t\tvalue_text );\n\t\t}\n\n\t\terr_hint_mess[1] = '\\0';\n\t\terrhint(\"%s\", err_hint_mess0);\n\t\tpfree(err_hint_mess0);\n\t\tif (sqlite_value_as_hex_code)\n\t\t\tpfree((char *)value_text);\n\t}\n\n\t{\n\t\t/*\n\t\t * Error CONTEXT block\n\t\t */\n\t\tchar\t   *err_cont_mess0 = palloc(4 * NAMEDATALEN + 64); /* The longest context message */\n\t\tchar \t   *err_cont_mess;\n\n\t\terr_cont_mess = err_cont_mess0;\n\t\terr_cont_mess = err_cont_mess + sprintf(\n\t\t\terr_cont_mess,\n\t\t\t\"foreign table \\\"%s\\\" foreign column \\\"%.*s\\\" have data type \\\"%s\\\" (usual affinity \\\"%s\\\"), \",\n\t\t\trelname,\n\t\t\t(int)sizeof(pgColND.data),\n\t\t\tpgColND.data,\n\t\t\tpg_dataTypeName,\n\t\t\tpg_good_affinity\n\t\t\t);\n\t\tif (relname && is_wholerow)\n\t\t{\n\t\t\terr_cont_mess = err_cont_mess + sprintf(\n\t\t\t\t\terr_cont_mess,\n\t\t\t\t\t\"in query there is whole-row reference to foreign table\"\n\t\t\t\t\t);\n\t\t}\n\t\telse if (relname && attname)\n\t\t{\n\t\t\terr_cont_mess = err_cont_mess + sprintf(\n\t\t\t\t\terr_cont_mess,\n\t\t\t\t\t\"in query there is reference to foreign column\"\n\t\t\t\t\t);\n\t\t}\n\t\telse\n\t\t{\n\t\t\terr_cont_mess = err_cont_mess + sprintf(\n\t\t\t\t\terr_cont_mess,\n\t\t\t\t\t\"processing expression at position %d in select list\",\n\t\t\t\t\terrpos->cur_attno\n\t\t\t\t\t);\n\t\t}\n\n\t\terr_cont_mess[1] = '\\0';\n\t\terrcontext(\"%s\", err_cont_mess0);\n\t\tpfree(err_cont_mess0);\n\t}\n}\n"
  },
  {
    "path": "sqlite_fdw.control",
    "content": "# sqlite FDW\ncomment = 'SQLite Foreign Data Wrapper'\ndefault_version = '1.1'\nmodule_pathname = '$libdir/sqlite_fdw'\nrelocatable = true"
  },
  {
    "path": "sqlite_fdw.h",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n *        sqlite_fdw.h\n *\n *-------------------------------------------------------------------------\n */\n\n#ifndef SQLITE_FDW_H\n#define SQLITE_FDW_H\n\n#include \"sqlite3.h\"\n\n#if (PG_VERSION_NUM >= 120000)\n#include \"nodes/pathnodes.h\"\n#include \"access/table.h\"\n#include \"utils/float.h\"\n#include \"optimizer/optimizer.h\"\n#else\n#include \"nodes/relation.h\"\n#include \"optimizer/var.h\"\n#endif\n\n#include \"funcapi.h\"\n#include \"fmgr.h\"\n#include \"foreign/foreign.h\"\n#include \"lib/stringinfo.h\"\n#include \"utils/rel.h\"\n#include \"funcapi.h\"\n\n#define SQLITE_PREFETCH_ROWS\t100\n#define SQLITE_BLKSIZ\t\t(1024 * 4)\n#define SQLITE_PORT\t\t\t3306\n#define MAXDATALEN\t\t\t1024 * 64\n\n#define WAIT_TIMEOUT\t\t0\n#define INTERACTIVE_TIMEOUT 0\n\n\n#define CR_NO_ERROR 0\n\n#define SQLITE_FDW_BIT_DATATYPE_BUF_SIZE sizeof(sqlite3_int64) * CHAR_BIT + 1\n\n#define MACADDR_LEN 6\n#define MACADDR8_LEN 8\n\n#if (PG_VERSION_NUM < 120000)\n#define table_close(rel, lock)\theap_close(rel, lock)\n#define table_open(rel, lock)\theap_open(rel, lock)\n#define exec_rt_fetch(rtindex, estate)\trt_fetch(rtindex, estate->es_range_table)\n#endif\n\n/* Code version is updated at new release. */\n#define CODE_VERSION   20500\n\n#if (PG_VERSION_NUM < 100000)\n/*\n * Is the given relation a simple relation i.e a base or \"other\" member\n * relation?\n */\n#define IS_SIMPLE_REL(rel) \\\n\t((rel)->reloptkind == RELOPT_BASEREL || \\\n\t (rel)->reloptkind == RELOPT_OTHER_MEMBER_REL)\n\n/* Is the given relation a join relation? */\n#define IS_JOIN_REL(rel)\t\\\n\t((rel)->reloptkind == RELOPT_JOINREL)\n\n/* Is the given relation an upper relation? */\n#define IS_UPPER_REL(rel)\t\\\n\t((rel)->reloptkind == RELOPT_UPPER_REL)\n\n/* Is the given relation an \"other\" relation? */\n#define IS_OTHER_REL(rel) \\\n\t((rel)->reloptkind == RELOPT_OTHER_MEMBER_REL)\n#endif\n\n#if PG_VERSION_NUM < 130000\n#define list_concat(X, Y)  list_concat(X, list_copy(Y))\n#endif\n\n#if PG_VERSION_NUM < 120000\n/* NullableDatum is introduced from PG12, we define it here in case of PG11 or earlier. */\ntypedef struct NullableDatum\n{\n#define FIELDNO_NULLABLE_DATUM_DATUM 0\n    Datum        value;\n#define FIELDNO_NULLABLE_DATUM_ISNULL 1\n    bool        isnull;\n    /* due to alignment padding this could be used for flags for free */\n} NullableDatum;\n#endif\n\n/*\n * Options structure to store the Sqlite\n * server information\n */\ntypedef struct sqlite_opt\n{\n\tint\t\t\tsvr_port;\t\t/* SQLite port number */\n\tchar\t   *svr_address;\t/* SQLite server ip address */\n\n\tchar\t   *svr_database;\t/* SQLite database name */\n\tchar\t   *svr_table;\t\t/* SQLite table name */\n\tchar\t   *svr_init_command;\t/* SQLite SQL statement to execute when\n\t\t\t\t\t\t\t\t\t * connecting to the SQLite server. */\n\tunsigned long max_blob_size;\t/* Max blob size to read without\n\t\t\t\t\t\t\t\t\t * truncation */\n}\t\t\tsqlite_opt;\n\n/* Struct for extra information passed to sqlite_estimate_path_cost_size() */\ntypedef struct SqliteFdwPathExtraData\n{\n\tPathTarget *target;\n\tbool\t\thas_final_sort;\n\tbool\t\thas_limit;\n\tdouble\t\tlimit_tuples;\n\tint64\t\tcount_est;\n\tint64\t\toffset_est;\n}\t\t\tSqliteFdwPathExtraData;\n\n\n/*\n * FDW-specific information for ForeignScanState\n * fdw_state.\n */\ntypedef struct SQLiteFdwExecState\n{\n\tForeignServer *server;\t\t/* Foreign server handle */\n\tForeignTable  *table;\t\t/* Foreign scan deal with this foreign table */\n\tsqlite3    *conn;\t\t\t/* SQLite connection handle */\n\tsqlite3_stmt *stmt;\t\t\t/* SQLite prepared stament handle */\n\tchar\t   *query;\t\t\t/* Query string */\n\tRelation\trel;\t\t\t/* relcache entry for the foreign table */\n\tTupleDesc\ttupdesc;\t\t/* tuple descriptor of scan */\n\tAttInMetadata *attinmeta;\t/* attribute datatype conversion */\n\tList\t   *retrieved_attrs;\t/* list of target attribute numbers */\n\n\tbool\t\tcursor_exists;\t/* have we created the cursor? */\n\tint\t\t\tnumParams;\t\t/* number of parameters passed to query */\n\tFmgrInfo   *param_flinfo;\t/* output conversion functions for them */\n\tList\t   *param_exprs;\t/* executable expressions for param values */\n\tconst char **param_values;\t/* textual values of query parameters */\n\tOid\t\t   *param_types;\t/* type of query parameters */\n\n\tint\t\t\tp_nums;\t\t\t/* number of parameters to transmit */\n\tFmgrInfo   *p_flinfo;\t\t/* output conversion functions for them */\n\n\t/* batch operation stuff */\n\tint\t\t\tnum_slots;\t\t/* number of slots to insert */\n\n\tchar\t   *orig_query;\t\t/* original text of INSERT command */\n\tList\t   *target_attrs;\t/* list of target attribute numbers */\n\tint\t\t\tvalues_end;\t\t/* length up to the end of VALUES */\n\n\tsqlite_opt *sqliteFdwOptions;\t/* SQLite FDW options */\n\n\tList\t   *attr_list;\t\t/* query attribute list */\n\tList\t   *column_list;\t/* Column list of SQLite Column structures */\n\n\tint64\t\trow_nums;\t\t/* number of rows */\n\tDatum\t  **rows;\t\t\t/* all rows of scan */\n\tint64\t\trowidx;\t\t\t/* current index of rows */\n\tbool\t  **rows_isnull;\t/* is null */\n\tbool\t\tfor_update;\t\t/* true if this scan is update target */\n\tint\t\t\tbatch_size;\t\t/* value of FDW option \"batch_size\" */\n\n\t/* working memory context */\n\tMemoryContext temp_cxt;\t\t/* context for per-tuple temporary data */\n\tAttrNumber *junk_idx;\n\n}\t\t\tSqliteFdwExecState;\n\ntypedef struct SqliteFdwRelationInfo\n{\n\t/*\n\t * True means that the relation can be pushed down. Always true for simple\n\t * foreign scan.\n\t */\n\tbool\t\tpushdown_safe;\n\n\t/* baserestrictinfo clauses, broken down into safe and unsafe subsets. */\n\tList\t   *remote_conds;\n\tList\t   *local_conds;\n\n\t/* Actual remote restriction clauses for scan (sans RestrictInfos) */\n\tList\t   *final_remote_exprs;\n\n\t/* Estimated size and cost for a scan or join. */\n\tdouble\t\trows;\n\tint\t\t\twidth;\n\tCost\t\tstartup_cost;\n\tCost\t\ttotal_cost;\n\n\t/* Costs excluding costs for transferring data from the foreign server */\n\tdouble\t\tretrieved_rows;\n\tCost\t\trel_startup_cost;\n\tCost\t\trel_total_cost;\n\n\t/* Options extracted from catalogs. */\n\tCost\t\tfdw_startup_cost;\n\tCost\t\tfdw_tuple_cost;\n\n\t/* Bitmap of attr numbers we need to fetch from the remote server. */\n\tBitmapset  *attrs_used;\n\n\t/* True means that the query_pathkeys is safe to push down */\n\tbool\t\tqp_is_pushdown_safe;\n\n\t/* Cost and selectivity of local_conds. */\n\tQualCost\tlocal_conds_cost;\n\tSelectivity local_conds_sel;\n\n\t/* Selectivity of join conditions */\n\tSelectivity joinclause_sel;\n\n\t/* Join information */\n\tRelOptInfo *outerrel;\n\tRelOptInfo *innerrel;\n\tJoinType\tjointype;\n\tList\t   *joinclauses;\n\n\t/* Upper relation information */\n\tUpperRelationKind stage;\n\n\t/* Cached catalog information. */\n\tForeignTable *table;\n\tForeignServer *server;\n\n\tint\t\t\tfetch_size;\t\t/* fetch size for this remote table */\n\n\t/*\n\t * Name of the relation while EXPLAINing ForeignScan. It is used for join\n\t * relations but is set for all relations. For join relation, the name\n\t * indicates which foreign tables are being joined and the join type used.\n\t */\n\tchar\t   *relation_name;\n\n\t/* Grouping information */\n\tList\t   *grouped_tlist;\n\n\t/* Subquery information */\n\tbool\t\tmake_outerrel_subquery; /* do we deparse outerrel as a\n\t\t\t\t\t\t\t\t\t\t * subquery? */\n\tbool\t\tmake_innerrel_subquery; /* do we deparse innerrel as a\n\t\t\t\t\t\t\t\t\t\t * subquery? */\n\tRelids\t\tlower_subquery_rels;\t/* all relids appearing in lower\n\t\t\t\t\t\t\t\t\t\t * subqueries */\n#if (PG_VERSION_NUM >= 170000)\n\tRelids\t\thidden_subquery_rels;\t/* relids, which can't be referred to\n\t\t\t\t\t\t\t\t\t\t * from upper relations, used\n\t\t\t\t\t\t\t\t\t\t * internally for equivalence member\n\t\t\t\t\t\t\t\t\t\t * search */\n#endif\n\n\t/*\n\t * Index of the relation.  It is used to create an alias to a subquery\n\t * representing the relation.\n\t */\n\tint\t\t\trelation_index;\n\n\t/* Function pushdown surppot in target list */\n\tbool\t\tis_tlist_func_pushdown;\n}\t\t\tSqliteFdwRelationInfo;\n\n/*\n * Execution state of a foreign scan that modifies a foreign table directly.\n */\ntypedef struct SqliteFdwDirectModifyState\n{\n\tForeignServer *server;\t\t/* Foreign server handle */\n\tForeignTable  *table;\t\t/* Foreign scan deal with this foreign table */\n\n\tRelation\trel;\t\t\t/* relcache entry for the foreign table */\n\tAttInMetadata *attinmeta;\t/* attribute datatype conversion metadata */\n\n\t/* extracted fdw_private data */\n\tchar\t   *query;\t\t\t/* text of UPDATE/DELETE command */\n\tbool\t\thas_returning;\t/* is there a RETURNING clause? */\n\tList\t   *retrieved_attrs;\t/* attr numbers retrieved by RETURNING */\n\tbool\t\tset_processed;\t/* do we set the command es_processed? */\n\n\t/* for remote query execution */\n\tsqlite3    *conn;\t\t\t/* connection for the update */\n\tsqlite3_stmt *stmt;\t\t\t/* SQLite prepared stament handle */\n\tint\t\t\tnumParams;\t\t/* number of parameters passed to query */\n\tFmgrInfo   *param_flinfo;\t/* output conversion functions for them */\n\tList\t   *param_exprs;\t/* executable expressions for param values */\n\tconst char **param_values;\t/* textual values of query parameters */\n\tOid\t\t   *param_types;\t/* type of query parameters */\n\n\t/* for storing result tuples */\n\tint\t\t\tnum_tuples;\t\t/* # of result tuples */\n\tint\t\t\tnext_tuple;\t\t/* index of next one to return */\n\tRelation\tresultRel;\t\t/* relcache entry for the target relation */\n\tAttrNumber *attnoMap;\t\t/* array of attnums of input user columns */\n\tAttrNumber\tctidAttno;\t\t/* attnum of input ctid column */\n\tAttrNumber\toidAttno;\t\t/* attnum of input oid column */\n\tbool\t\thasSystemCols;\t/* are there system columns of resultRel? */\n\n\t/* working memory context */\n\tMemoryContext temp_cxt;\t\t/* context for per-tuple temporary data */\n}\t\t\tSqliteFdwDirectModifyState;\n\ntypedef struct blobOutput\n{\n\tconst char*\t\tdat;\n\tint\t\t\tlen;\n} blobOutput;\n\nextern bool sqlite_is_foreign_expr(PlannerInfo *root,\n\t\t\t\t\t\t\t\t   RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t   Expr *expr);\nextern bool sqlite_is_foreign_param(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\tRelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\tExpr *expr);\nextern bool sqlite_is_foreign_pathkey(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t  RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\t  PathKey *pathkey);\nextern bool sqlite_is_foreign_function_tlist(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\t\t\t List *tlist);\nextern bool sqlite_is_builtin(Oid objectId);\n\nextern EquivalenceMember *sqlite_find_em_for_rel(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\tEquivalenceClass *ec,\n\t\t\t\t\t\t\t\t\tRelOptInfo *rel);\nextern EquivalenceMember *sqlite_find_em_for_rel_target(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t\t  EquivalenceClass *ec,\n\t\t\t\t\t\t\t\t\t\t\t\t  RelOptInfo *fallbackRel);\n\n/* Base ∞ constants */\nextern const char * infs;\nextern const char * infl;\n\nextern const char hex_dig[];\n\n/* in sqlite_fdw.c */\nextern int\tsqlite_set_transmission_modes(void);\nextern void sqlite_reset_transmission_modes(int nestlevel);\nextern const int sqlite_affinity_code(char* t);\n\n/* option.c headers */\nextern sqlite_opt * sqlite_get_options(Oid foreigntableid);\n\n/* depare.c headers */\nextern void sqlite_deparse_select_stmt_for_rel(StringInfo buf, PlannerInfo *root, RelOptInfo *rel,\n\t\t\t\t\t\t\t\t\t\t\t   List *tlist, List *remote_conds, List *pathkeys,\n\t\t\t\t\t\t\t\t\t\t\t   bool has_final_sort, bool has_limit, bool is_subquery,\n\t\t\t\t\t\t\t\t\t\t\t   List **retrieved_attrs, List **params_list);\nextern void sqlite_deparse_insert(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel, List *targetAttrs, bool doNothing, int *values_end_len);\n#if PG_VERSION_NUM >= 140000\nextern void sqlite_rebuild_insert(StringInfo buf, Relation rel, char *orig_query, List *target_attrs, int values_end_len, int num_params, int num_rows);\nextern void sqlite_deparse_truncate(StringInfo buf, List *rels);\n#endif\nextern void sqlite_deparse_update(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel, List *targetAttrs, List *attname);\nextern void sqlite_deparse_direct_update_sql(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t Index rtindex, Relation rel,\n\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t\t\t List *targetlist,\n\t\t\t\t\t\t\t\t\t\t\t List *targetAttrs,\n\t\t\t\t\t\t\t\t\t\t\t List *remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t List **params_list,\n\t\t\t\t\t\t\t\t\t\t\t List **retrieved_attrs);\nextern void sqlite_deparse_delete(StringInfo buf, PlannerInfo *root, Index rtindex, Relation rel, List *name);\nextern void sqlite_deparse_direct_delete_sql(StringInfo buf, PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t\t\t Index rtindex, Relation rel,\n\t\t\t\t\t\t\t\t\t\t\t RelOptInfo *foreignrel,\n\t\t\t\t\t\t\t\t\t\t\t List *remote_conds,\n\t\t\t\t\t\t\t\t\t\t\t List **params_list,\n\t\t\t\t\t\t\t\t\t\t\t List **retrieved_attrs);\nextern void sqlite_deparse_analyze(StringInfo buf, char *dbname, char *relname);\nextern void sqlite_deparse_string_literal(StringInfo buf, const char *val);\nextern List *sqlite_build_tlist_to_deparse(RelOptInfo *foreignrel);\nint\t\t\tsqlite_set_transmission_modes(void);\nvoid\t\tsqlite_reset_transmission_modes(int nestlevel);\nextern const char *sqlite_get_jointype_name(JoinType jointype);\nextern void sqlite_classify_conditions(PlannerInfo *root,\n\t\t\t\t\t\t\t\t\t   RelOptInfo *baserel,\n\t\t\t\t\t\t\t\t\t   List *input_conds,\n\t\t\t\t\t\t\t\t\t   List **remote_conds,\n\t\t\t\t\t\t\t\t\t   List **local_conds);\n\n/* connection.c headers */\nsqlite3    *sqlite_get_connection(ForeignServer *server, bool truncatable);\nsqlite3    *sqlite_connect(char *svr_address, char *svr_username, char *svr_password, char *svr_database,\n\t\t\t\t\t\t   int svr_port, bool svr_sa, char *svr_init_command,\n\t\t\t\t\t\t   char *ssl_key, char *ssl_cert, char *ssl_ca, char *ssl_capath,\n\t\t\t\t\t\t   char *ssl_cipher);\nvoid\t\tsqlite_cleanup_connection(void);\nvoid\t\tsqlite_rel_connection(sqlite3 * conn);\nvoid\t\tsqlitefdw_report_error(int elevel, sqlite3_stmt * stmt, sqlite3 * conn, const char *sql, int rc);\nvoid\t\tsqlite_cache_stmt(ForeignServer *server, sqlite3_stmt * *stmt);\n\nNullableDatum sqlite_convert_to_pg(Form_pg_attribute att, sqlite3_value * val, AttInMetadata *attinmeta, AttrNumber attnum, int sqlite_value_affinity, int AffinityBehaviourFlags);\n\nvoid\t\tsqlite_bind_sql_var(Form_pg_attribute att, int attnum, Datum value, sqlite3_stmt * stmt, bool *isnull, Oid relid);\nextern void sqlite_do_sql_command(sqlite3 * conn, const char *sql, int level, List **busy_connection);\n\nvoid sqlite_fdw_data_norm_functs_init(sqlite3* db);\n\n/* sqlite_query.c headers */\nsqlite3_int64 binstr2int64(const char *s);\nbool\t\tlisted_datatype (const char * tn, const char ** arr);\nblobOutput\tsqlite_datum_to_blob (Datum value);\nbool\t\tlisted_datatype_oid (Oid atttypid, int32 atttypmod, const char **arr);\n\n/* sqlite_gis.c headers */\nextern const char *postGisSpecificTypes[];\nextern const char *postGisSQLiteCompatibleTypes[];\n\n#ifdef SQLITE_FDW_GIS_ENABLE\nchar*\t\tSpatiaLiteAsPostGISgeom (blobOutput spatiaLiteBlob, Form_pg_attribute att);\nblobOutput\tPostGISgeomAsSpatiaLite (Datum value, Form_pg_attribute att);\nvoid\t\tsqlite_deparse_PostGIS_value(StringInfo buf, char *extval);\n#endif\n\n#endif\t\t\t\t\t\t\t/* SQLITE_FDW_H */\n"
  },
  {
    "path": "sqlite_fdw.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <Keyword>Win32Proj</Keyword>\n    <ProjectGuid>{C874C880-ED35-4F64-A9EF-D6F6B41935B6}</ProjectGuid>\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <PlatformToolset>v141</PlatformToolset>\n    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <PropertyGroup Label=\"UserMacros\">\n    <pf>$(ProgramFiles)</pf>\n    <pf Condition=\"$(Platform)=='x64'\">$(ProgramW6432)</pf>\n    <pgversion Condition=\"$(pgversion) == ''\">12</pgversion>\n    <pgroot Condition=\"$(pgroot)==''\">$(pf)\\PostgreSQL\\$(pgversion)</pgroot>\n  </PropertyGroup>\n  <PropertyGroup>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <IncludePath>$(pgroot)\\include;$(pgroot)\\include\\server;$(pgroot)\\include\\server\\port\\win32;$(pgroot)\\include\\server\\port\\win32_msvc;$(IncludePath)</IncludePath>\n    <LibraryPath>$(pgroot)\\lib;$(LibraryPath)</LibraryPath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)'=='Debug'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Vcpkg\" Condition=\"'$(Platform)'=='Win32'\">\n    <VcpkgTriplet>x86-windows-static</VcpkgTriplet>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Vcpkg\" Condition=\"'$(Platform)'=='x64'\">\n    <VcpkgTriplet>x64-windows-static</VcpkgTriplet>\n  </PropertyGroup>\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <CompileAs>CompileAsC</CompileAs>\n    </ClCompile>\n    <Link>\n      <ModuleDefinitionFile>\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>postgres.lib;sqlite3.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Debug'\">\n    <ClCompile>\n      <PreprocessorDefinitions>USE_ASSERT_CHECKING</PreprocessorDefinitions>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n      <Optimization>Disabled</Optimization>\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\n      <ControlFlowGuard>Guard</ControlFlowGuard>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Release'\">\n    <ClCompile>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <StringPooling>true</StringPooling>\n      <WholeProgramOptimization>true</WholeProgramOptimization>\n    </ClCompile>\n    <Link>\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"sqlite_fdw.c\" />\n    <ClCompile Include=\"option.c\" />\n    <ClCompile Include=\"deparse.c\" />\n    <ClCompile Include=\"connection.c\" />\n    <ClCompile Include=\"sqlite_query.c\" />\n    <ClInclude Include=\"sqlite_fdw.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n</Project>"
  },
  {
    "path": "sqlite_gis.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n * \t\tsqlite_gis.c\n *\n * Routines that convert between SpatiaLite BLOB storage form and PostGIS EWKB\n * and constants for detecting data type names from PostGIS set\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#ifdef SQLITE_FDW_GIS_ENABLE\n#include <spatialite.h>\n#endif\n\n#include <sqlite3.h>\n\n#include \"nodes/makefuncs.h\"\n#include \"parser/parse_type.h\"\n#include \"utils/lsyscache.h\"\n\n#ifdef SQLITE_FDW_GIS_ENABLE\nstatic void\n\t\t\tcommon_EWKB_error (Form_pg_attribute att, int len, const char* data, bool direction_to_pg);\nstatic char*\n\t\t\tgetHexFormOfBlob(blobOutput b);\n#endif\n\n/*\n * Byte length of PostGIS/GEOS copyed image\n * of geoobject initial data for testing or\n * extracting SRID data\n */\n#define\t\tEWKB_SRID_TEST_PREFIX_LEN 12\n\n/*\n * This is data types from PostGIS 3.4. For a newer version use the following query\n * select pt.typname, pt.\"oid\", pd.description,\n *\t\t  pt.typinput, pt.typoutput\n *   from pg_catalog.pg_type pt\n *  inner join pg_catalog.pg_description pd\n *\t on pt.\"oid\" = pd.objoid\n *  where pd.description like 'postgis %'\n */\nconst char *postGisSpecificTypes[] =\n{\n\t\"addbandarg\", \"box2d\", \"box3d\", \"geometry_dump\", \"geomval\",\n\t\"getfaceedges_returntype\", \"rastbandarg\", \"raster\", \"reclassarg\",\n\t\"summarystats\", \"topoelement\", \"topoelementarray\", \"topogeometry\",\n\t\"unionarg\", \"validatetopology_returntype\", NULL\n};\n\nconst char *postGisSQLiteCompatibleTypes[] = { \"geometry\", \"geography\", NULL };\n\n#ifdef SQLITE_FDW_GIS_ENABLE\n/*\n * SpatiaLiteAsPostGISgeom\n *\t\tConverts SpatiaLite BLOB to hex value string for PostGIS/GEOS input function\n */\nchar *\nSpatiaLiteAsPostGISgeom (blobOutput spatiaLiteBlob, Form_pg_attribute att)\n{\n\tgaiaOutBuffer out_buf;\n\tgaiaGeomCollPtr geo = NULL;\n\tint gpkg_amphibious = 0;\n\tint gpkg_mode = 0;\n\tint res_len = 0;\n\tchar *res = NULL;\n\n\tgeo = gaiaFromSpatiaLiteBlobWkbEx ((unsigned char *)spatiaLiteBlob.dat,\n\t\t\t\t\t\t\t\t\t\tspatiaLiteBlob.len,\n\t\t\t\t\t\t\t\t\t\tgpkg_mode,\n\t\t\t\t\t\t\t\t\t\tgpkg_amphibious);\n\n\tif (geo == NULL)\n\t{\n\t\tcommon_EWKB_error (att,\n\t\t\t\t\t\t   spatiaLiteBlob.len,\n\t\t\t\t\t\t   getHexFormOfBlob(spatiaLiteBlob),\n\t\t\t\t\t\t   true);\n\t}\n\telse\n\t{\n\t\tgaiaOutBufferInitialize (&out_buf);\n\t\tgaiaToEWKB (&out_buf, geo);\n\t\tgaiaFreeGeomColl (geo);\n\t\tif (out_buf.Error || out_buf.Buffer == NULL)\n\t\t{\n\t\t\tgaiaOutBufferReset (&out_buf);\n\t\t\tcommon_EWKB_error (att,\n\t\t\t\t\t\t\t   spatiaLiteBlob.len,\n\t\t\t\t\t\t\t   getHexFormOfBlob(spatiaLiteBlob),\n\t\t\t\t\t\t\t   true);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tres_len = out_buf.WriteOffset + 1; /* Include \\0 on the end */\n\t\t\tres = (char*) palloc(res_len*sizeof(char));\n\t\t\tstrcpy(res, out_buf.Buffer);\n\t\t\tgaiaOutBufferReset (&out_buf);\n\t\t\treturn res;\n\t\t}\n\t}\n\treturn NULL;\n}\n\n/*\n * getHexFormOfBlob\n *\t\tReturn normal ASCII hex string for a bytes of input data BLOB\n */\nstatic char*\ngetHexFormOfBlob(blobOutput b)\n{\n\tconst char *bstr = b.dat;\n\tchar* hstr = (char*)palloc(b.len * 2 + 1);\n\tunsigned char *phstr = (unsigned char *)hstr;\n\n\tfor (int i = 0; i < b.len; i++)\n\t{\n\t\tif (bstr[i] == -128)\n\t\t{\n\t\t\t*phstr++ = '0';\n\t\t\t*phstr++ = '0';\n\t\t} else {\n\t\t\t*phstr++ = hex_dig[((bstr[i] >> 4) & 0x0F)];\n\t\t\t*phstr++ = hex_dig[((bstr[i]) & 0x0F)];\n\t\t}\n\t}\n\t*phstr++ = '\\0';\n\treturn hstr;\n}\n\n/*\n * hasSRID\n *\t\tReturns true if there is any SRID data in hex input of EWKB\n *\t\tin other cases, including damaged input data, returns false\n */\nstatic inline bool hasSRID (char *hexEWKB)\n{\n\tunsigned char  *blob = NULL;\n\tint\t\t\t\tblob_size;\n\tconst int\t\twkbSRID = 0x20000000; /* See PostGIS file doc/ZMSgeoms.txt */\n\tint\t\t\t\tendian;\n\tint\t\t\t\tendian_arch = gaiaEndianArch ();\n\tint\t\t\t\tsrid;\n\tchar\t\t\thexPrefix[EWKB_SRID_TEST_PREFIX_LEN + 1]; /* also reserved for \\0 */\n\tint\t\t\t\ti;\n\n\t/* Copy only some initial hex byte images to get SRID flag and SRID value */\n\tfor (i = 0; i < EWKB_SRID_TEST_PREFIX_LEN && hexEWKB[i] != '\\0'; i++) {\n\t\thexPrefix[i] = hexEWKB[i];\n\t}\n\thexPrefix[i] = '\\0'; /* Null-terminate the substring */\n\tblob = gaiaParseHexEWKB ((const unsigned char *)hexPrefix, &blob_size);\n\tif (blob == NULL)\n\t\treturn false;\n\tendian = (*(blob + 0) == 0x01);\n\t/* wkbSRID flag bytes 1-5. PostGIS doc/ZMSgeoms.txt */\n\tsrid = gaiaImport32 (blob + 1, endian, endian_arch);\n\tfree(blob);\n\treturn (srid & wkbSRID) == wkbSRID;\n}\n\n/*\n * EWKB2SpatiaLiteBlobImage\n *\t\tUses char* and len struncture for SQLite BLOB binding from\n *\t\tinput hex string with possible EWKB presentation\n */\nstatic inline blobOutput\nEWKB2SpatiaLiteBlobImage (char *hexEWKB, Form_pg_attribute att)\n{\n\tgaiaGeomCollPtr geo = NULL;\n\tint\t\t\t\tgpkg_mode = 0;\n\tint\t\t\t\ttiny_point = 0;\n\tunsigned char  *spatialite_blob = NULL;\n\tint\t\t\t\tlen = strlen(hexEWKB);\n\tchar \t\t   *src = NULL;\n\tint\t\t\t\tshift = 0;\n\n\t/* Ignore leading '\\x' in hex data */\n\tif (hexEWKB[0] == '\\\\' && hexEWKB[1] == 'x')\n\t\tshift = 2;\n\tsrc = hexEWKB + shift;\n\n\tif (!hasSRID(src))\n\t{\n\t\tif (att != NULL)\n\t\t{\n\t\t\tchar *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(att->atttypid, att->atttypmod));\n\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"SpatiaLite doesn't accept GIS data without SRID\"),\n\t\t\t\t\t\t\terrhint(\"In column \\\"%.*s\\\" with data type \\\"%s\\\" there is incorrect value in %d bytes\", (int)sizeof(att->attname.data), att->attname.data, pg_dataTypeName, len),\n\t\t\t\t\t\t\terrcontext(\"Hex data: %s\", hexEWKB)));\n\t\t}\n\t\telse\n\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"SpatiaLite doesn't accept GIS data without SRID\"),\n\t\t\t\t\t\t\terrhint(\"Not deparsable value for SpatiaLite in %d bytes\", len),\n\t\t\t\t\t\t\terrcontext(\"Hex data: %s\", hexEWKB)));\n\t\tpfree(hexEWKB);\n\t\treturn (struct blobOutput){NULL, 0};\n\t}\n\n\tgeo = gaiaFromEWKB ((const unsigned char *)src);\n\tif (NULL == geo)\n\t{\n\t\tcommon_EWKB_error(att, len/2, hexEWKB, false);\n\t}\n\telog(DEBUG4, \"sqlite_fdw : PostGIS -> SpatiaLite %s\", hexEWKB);\n\n\tgaiaToSpatiaLiteBlobWkbEx2 (geo, &spatialite_blob, &len, gpkg_mode, tiny_point);\n\tgaiaFreeGeomColl (geo);\n\tpfree(hexEWKB);\n\treturn (struct blobOutput){(char *)spatialite_blob, len};\n}\n\n/*\n * PostGISgeomAsSpatiaLite\n *\t\tConverts PostGIS/GEOS BLOB as Datum + attribute metadata to SpatiaLite BLOB\n */\nblobOutput\nPostGISgeomAsSpatiaLite (Datum d, Form_pg_attribute att)\n{\n\tchar\t   *pgHexOutput = NULL;\n\tOid\t\t\toutputFunctionId = InvalidOid;\n\tbool\t\ttypeVarLength = false;\n\n\tgetTypeOutputInfo(att->atttypid, &outputFunctionId, &typeVarLength);\n\tpgHexOutput = OidOutputFunctionCall(outputFunctionId, d);\n\treturn EWKB2SpatiaLiteBlobImage (pgHexOutput, att);\n}\n\n/*\n * common_EWKB_error\n *\t\tMessage about error inside of both PostGIS/GEOS<->SpatiaLite transformations\n */\nstatic void\ncommon_EWKB_error (Form_pg_attribute att, int len, const char* data, bool direction_to_pg)\n{\n\tOid\t\t\tpgtyp = att->atttypid;\n\tint32\t\tpgtypmod = att->atttypmod;\n\tNameData\tpgColND = att->attname;\n\tchar\t   *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(pgtyp, pgtypmod));\n\n\tif (direction_to_pg)\n\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\terrmsg(\"GIS data transformation error SpatiaLite->GEOS/PostGIS\"),\n\t\t\t\t\t\terrhint(\"In column \\\"%.*s\\\" with data type \\\"%s\\\" there is incorrect value in %d bytes\", (int)sizeof(pgColND.data), pgColND.data, pg_dataTypeName, len),\n\t\t\t\t\t\terrcontext(\"Hex data: %s\", data)));\n\telse\n\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\terrmsg(\"GIS data transformation error GEOS/PostGIS->SpatiaLite\"),\n\t\t\t\t\t\t((att != NULL) ? (errhint(\"In column \\\"%.*s\\\" with data type \\\"%s\\\" there is incorrect value in %d bytes\", (int)sizeof(pgColND.data), pgColND.data, pg_dataTypeName, len)): (errhint(\"Not deparsable value for SpatiaLite in %d bytes\", len))),\n\t\t\t\t\t\terrcontext(\"Hex data: %s\", data)));\n}\n\n/*\n * sqlite_deparse_PostGIS_value\n *\t\tTransform PostGIS/GEOS value from extval to SpatiaLite hex constant\n *\t\tfor a SQLite query. SQLite constant format is EWKB.\n */\nvoid\nsqlite_deparse_PostGIS_value(StringInfo buf, char *extval)\n{\n\tblobOutput bO = EWKB2SpatiaLiteBlobImage (extval, NULL);\n\tchar* hexform = getHexFormOfBlob(bO);\n\n\tappendStringInfo(buf, \"X\\'%s\\'\", hexform);\n\telog(DEBUG4, \"sqlite_fdw : SpatiaLiteData %s\", hexform);\n\tpfree(hexform);\n}\n\n#endif\n"
  },
  {
    "path": "sqlite_query.c",
    "content": "/*-------------------------------------------------------------------------\n *\n * SQLite Foreign Data Wrapper for PostgreSQL\n *\n * Portions Copyright (c) 2018, TOSHIBA CORPORATION\n *\n * IDENTIFICATION\n * \t\tsqlite_query.c\n *\n *-------------------------------------------------------------------------\n */\n\n#include \"postgres.h\"\n#include \"sqlite_fdw.h\"\n\n#ifdef SQLITE_FDW_GIS_ENABLE\n#include <spatialite.h>\n#endif\n\n#include <sqlite3.h>\n\n#include \"catalog/pg_type_d.h\"\n#include \"commands/defrem.h\"\n#include \"mb/pg_wchar.h\"\n#include \"nodes/makefuncs.h\"\n#include \"parser/parse_type.h\"\n#include \"utils/builtins.h\"\n#include \"utils/inet.h\"\n#include \"utils/jsonb.h\"\n#include \"utils/lsyscache.h\"\n#include \"utils/timestamp.h\"\n#include \"utils/uuid.h\"\n\n\nstatic char *\n\t\t\tget_column_option_string(Oid relid, int varattno, char *optionname);\nstatic char *\n\t\t\tsqlite_text_value_to_pg_db_encoding(sqlite3_value *val);\nstatic char *\n\t\t\tint642binstr(sqlite3_int64 num, char *s, size_t len);\nstatic inline blobOutput\n\t\t\tsqlite_make_JSONb (char* s);\n\n/*\n * sqlite_value_to_pg_error\n *\t\tHuman readable message about disallowed combination of PostgreSQL columnn\n *\t\tdata type and SQLite data value affinity\n */\nstatic void\nsqlite_value_to_pg_error()\n{\n\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\terrmsg(\"SQLite value is not compatible with PostgreSQL column data type\")));\n}\n\n/*\n * pg_column_void_text_error\n *\t\tHuman readable message about disallowed void text for the PostgreSQL columnn\n */\nstatic void\npg_column_void_text_error()\n{\n\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\terrmsg(\"Void text disallowed this column\")));\n}\n\n/*\n * convert_sqlite_to_pg\n *\t\tConverts SQLite value into PostgreSQL's Datum\n */\nNullableDatum\nsqlite_convert_to_pg(Form_pg_attribute att, sqlite3_value * val, AttInMetadata *attinmeta, AttrNumber attnum, int sqlite_value_affinity, int AffinityBehaviourFlags)\n{\n\tOid\t\t\tpgtyp = att->atttypid;\n\tDatum\t\tvalue_datum = 0;\n\tchar\t   *valstr = NULL;\n\t\t\t\t/* Compute always, void text and void BLOB is special cases */\n\tint\t\t \tvalue_byte_size_blob_or_utf8 = sqlite3_value_bytes(val);\n\n\tswitch (pgtyp)\n\t{\n\t\t/* popular first */\n\t\tcase VARCHAROID:\n\t\tcase CHAROID:\n\t\tcase TEXTOID:\n\t\tcase DATEOID:\n\t\tcase TIMEOID:\n\t\tcase NAMEOID:\n\t\tcase BPCHAROID:\n\t\t\t{\n\t\t\t\tvalstr = sqlite_text_value_to_pg_db_encoding(val);\n\t\t\t\t/* use valstr after switch */\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase BOOLOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint\t\t\tvalue = sqlite3_value_int(val);\n\t\t\t\t\t\t\treturn (struct NullableDatum){BoolGetDatum(value), false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase BYTEAOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\tcase SQLITE3_TEXT: /* treated as UTF-8 text BLOB */\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue_datum = (Datum) palloc0(value_byte_size_blob_or_utf8 + VARHDRSZ);\n\t\t\t\t\t\tmemcpy(VARDATA(value_datum), sqlite3_value_blob(val), value_byte_size_blob_or_utf8);\n\t\t\t\t\t\tSET_VARSIZE(value_datum, value_byte_size_blob_or_utf8 + VARHDRSZ);\n\t\t\t\t\t\treturn (struct NullableDatum) {PointerGetDatum((const void *)value_datum), false};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT2OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_int64 i64v = sqlite3_value_int64(val);\n\t\t\t\t\t\t\tDatum d = DirectFunctionCall1(int82, Int64GetDatum((int64) i64v));\n\t\t\t\t\t\t\treturn (struct NullableDatum) {d, false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT4OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t{\n\t\t\t\t\t\tsqlite_int64 i64v = sqlite3_value_int64(val);\n\t\t\t\t\t\tDatum d = DirectFunctionCall1(int84, Int64GetDatum((int64) i64v));\n\t\t\t\t\t\treturn (struct NullableDatum) {d, false};\n\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT: /* TODO: This code is untill mod() pushdowning fix here */\n\t\t\t\t\t{\n\t\t\t\t\t\tint\t\t\tvalue = sqlite3_value_int(val);\n\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : real aff. was readed for pg int32\");\n\t\t\t\t\t\treturn (struct NullableDatum) {Int32GetDatum(value), false};\n\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT8OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite3_int64 value = sqlite3_value_int64(val);\n\t\t\t\t\t\t\treturn (struct NullableDatum) {Int64GetDatum(value), false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT: /* TODO: This code is untill mod() pushdowning fix here */\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble\t\tvalue = sqlite3_value_double(val);\n\t\t\t\t\t\tDatum\t \td = DirectFunctionCall1(dtoi8, Float8GetDatum((float8) value));\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : real aff. was readed for pg int64\");\n\t\t\t\t\t\treturn (struct NullableDatum) {d, false};\n\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase FLOAT4OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_FLOAT: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdouble\t\tvalue = sqlite3_value_double(val);\n\t\t\t\t\t\t\tDatum\t\td = DirectFunctionCall1(dtof, Float8GetDatum((float8)value));\n\t\t\t\t\t\t\treturn (struct NullableDatum) {d, false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst char* text_value = (const char*) sqlite3_value_text(val);\n\t\t\t\t\t\t\t\tif (strcasecmp(text_value, \"NaN\") == 0)\n\t\t\t\t\t\t\t\t\treturn (struct NullableDatum) {Float8GetDatum(NAN), false};\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t \t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase FLOAT8OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_FLOAT: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdouble\t\tvalue = sqlite3_value_double(val);\n\t\t\t\t\t\t\treturn (struct NullableDatum) {Float8GetDatum((float8) value), false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst char* text_value = (const char*) sqlite3_value_text(val);\n\t\t\t\t\t\t\t\tif (strcasecmp(text_value, \"NaN\") == 0)\n\t\t\t\t\t\t\t\t\treturn (struct NullableDatum) {Float8GetDatum(NAN), false};\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t \t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase TIMESTAMPOID:\n\t\tcase TIMESTAMPTZOID:\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t * We add this conversion to allow add INTEGER/FLOAT SQLite\n\t\t\t\t * Columns be added as TimeStamp in PostgreSQL. We just\n\t\t\t\t * calling PostgreSQL function \"to_timestamp(double value)\"\"\n\t\t\t\t * to convert each registry returned from INT/FLOAT value to\n\t\t\t\t * TimeStamp string, so PosgtreSQL can handle/show without\n\t\t\t\t * problems. If it's a TEXT SQLite column...we let them to the\n\t\t\t\t * \"regular\" process because its already implemented and\n\t\t\t\t * working properly.\n\t\t\t\t */\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTimestamp value = (Timestamp)sqlite3_value_int64(val);\n\t\t\t\t\t\t\treturn (struct NullableDatum) {TimestampGetDatum(value), false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdouble\t\tvalue = sqlite3_value_double(val);\n\t\t\t\t\t\t\tDatum\t\td = DirectFunctionCall1(float8_timestamptz, Float8GetDatum((float8) value));\n\t\t\t\t\t\t\treturn (struct NullableDatum) {d, false};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tvalstr = sqlite_text_value_to_pg_db_encoding(val);\n\t\t\t\t\t\t\t/* !!! use valstr later! */\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase NUMERICOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_FLOAT: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdouble\t\tvalue = sqlite3_value_double(val);\n\n\t\t\t\t\t\t\tvalstr = DatumGetCString(DirectFunctionCall1(float8out, Float8GetDatum((float8) value)));\n\t\t\t\t\t\t\tbreak; /* !!! use valstr later! */\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst char* text_value = (const char*) sqlite3_value_text(val);\n\t\t\t\t\t\t\tif (strcasecmp(text_value, \"NaN\") == 0)\n\t\t\t\t\t\t\t\treturn (struct NullableDatum) {Float8GetDatum(NAN), false};\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t \t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase UUIDOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8 != UUID_LEN)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\t\t\terrmsg(\"PostgreSQL uuid data type allows only %d bytes SQLite blob value\", UUID_LEN)));\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst unsigned char * sqlite_blob = 0;\n\t\t\t\t\t\t\t\tpg_uuid_t  *retval = (pg_uuid_t *) palloc0(sizeof(pg_uuid_t));\n\n\t\t\t\t\t\t\t\tsqlite_blob = sqlite3_value_blob(val);\n\t\t\t\t\t\t\t\tmemcpy(retval->data, sqlite_blob, UUID_LEN);\n\t\t\t\t\t\t\t\treturn (struct NullableDatum){UUIDPGetDatum(retval), false};\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\t\t * SQLite UUID output always normalized to blob.\n\t\t\t\t\t * In sqlite_data_norm.c there is special additional C function.\n\t\t\t\t\t */\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase MACADDROID:\n\t\tcase MACADDR8OID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\t/*\n\t\t\t\t\t * SQLite MAC address output always normalized to int64.\n\t\t\t\t\t * In sqlite_data_norm.c there is special additional C function.\n\t\t\t\t\t */\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite3_int64\t\t value = sqlite3_value_int64(val);\n\t\t\t\t\t\t\tif (pgtyp == MACADDROID)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmacaddr*\t\t\t retval;\n\t\t\t\t\t\t\t\t/* maximal int64 for macaddr 6b */\n\t\t\t\t\t\t\t\tconst sqlite3_uint64 max = (1ULL << (6 * CHAR_BIT)) - 1ULL;\n\n\t\t\t\t\t\t\t\tif (value > max )\n\t\t\t\t\t\t\t\t\tereport(ERROR,\n\t\t\t\t\t\t\t\t\t\t\t (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),\n\t\t\t\t\t\t\t\t\t\t\t  errmsg(\"int64 for macaddr out of range\")));\n\n\t\t\t\t\t\t\t\tretval = (macaddr *) palloc(sizeof(macaddr));\n\t\t\t\t\t\t\t\tretval->a = (value >> (CHAR_BIT * 5)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->b = (value >> (CHAR_BIT * 4)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->c = (value >> (CHAR_BIT * 3)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->d = (value >> (CHAR_BIT * 2)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->e = (value >> (CHAR_BIT * 1)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->f = (value >> (CHAR_BIT * 0)) & 0xFF;\n\t\t\t\t\t\t\t\treturn (struct NullableDatum){MacaddrPGetDatum(retval), false};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmacaddr8 *\t\tretval = (macaddr8 *) palloc(sizeof(macaddr8));\n\t\t\t\t\t\t\t\tretval->a = (value >> (CHAR_BIT * 7)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->b = (value >> (CHAR_BIT * 6)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->c = (value >> (CHAR_BIT * 5)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->d = (value >> (CHAR_BIT * 4)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->e = (value >> (CHAR_BIT * 3)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->f = (value >> (CHAR_BIT * 2)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->g = (value >> (CHAR_BIT * 1)) & 0xFF;\n\t\t\t\t\t\t\t\tretval->h = (value >> (CHAR_BIT * 0)) & 0xFF;\n\t\t\t\t\t\t\t\treturn (struct NullableDatum){Macaddr8PGetDatum(retval), false};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase VARBITOID:\n\t\tcase BITOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchar * buffer = (char *) palloc0(SQLITE_FDW_BIT_DATATYPE_BUF_SIZE);\n\t\t\t\t\t\t\tsqlite3_int64 sqlti = sqlite3_value_int64(val);\n\n\t\t\t\t\t\t\tbuffer = int642binstr(sqlti, buffer, SQLITE_FDW_BIT_DATATYPE_BUF_SIZE);\n\t\t\t\t\t\t\tvalstr = buffer;\n\t\t\t\t\t\t\telog(DEBUG4, \"sqlite_fdw : BIT buf l=%ld v = %s\", SQLITE_FDW_BIT_DATATYPE_BUF_SIZE, buffer);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase JSONOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\t\terrmsg(\"you should disable column_type = text for this column, because there is possible jsonb value\")));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:/* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalstr = sqlite_text_value_to_pg_db_encoding(val);\n\t\t\t\t\t\t\t\t/* use valstr after switch */\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase JSONBOID:\n\t\t\t{\n\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t{\n\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\tcase SQLITE_BLOB:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tcase SQLITE3_TEXT:/* <-- there is normalization function for text affinity only output  */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (value_byte_size_blob_or_utf8)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalstr = sqlite_text_value_to_pg_db_encoding(val);\n\t\t\t\t\t\t\t\t/* use valstr after switch */\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tpg_column_void_text_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t * PostGIS data types can be supported only by name\n\t\t\t\t * This is very rare and not fast algorythm branch\n\t\t\t\t */\n\t\t\t\tchar *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(att->atttypid, att->atttypmod));\n\t\t\t\tNameData\tpgColND = att->attname;\n\n\t\t\t\tif (listed_datatype(pg_dataTypeName, postGisSpecificTypes))\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG4, \"sqlite_fdw : is postGisSpecificType %s\", pg_dataTypeName);\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\terrmsg(\"This data type is PostGIS specific and is not supported by SpatiaLite or sqlite_fdw\"),\n\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\" in column \\\"%.*s\\\"\", pg_dataTypeName, (int)sizeof(pgColND.data), pgColND.data)));\n\t\t\t\t}\n\n\t\t\t\tif (listed_datatype(pg_dataTypeName, postGisSQLiteCompatibleTypes))\n\t\t\t\t{\n\t\t\t\t\telog(DEBUG4, \"sqlite_fdw : is postGisSQLiteCompatibleType\");\n\t\t\t\t\tswitch (sqlite_value_affinity)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase SQLITE_INTEGER:\n\t\t\t\t\t\tcase SQLITE_FLOAT:\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tcase SQLITE_BLOB: /* <-- proper and recommended SQLite affinity of value for pgtyp */\n\t\t\t\t\t\t{\n#ifdef SQLITE_FDW_GIS_ENABLE\n\t\t\t\t\t\t\tunsigned const char * p_blob = sqlite3_value_blob(val);\n\t\t\t\t\t\t\tvalstr = SpatiaLiteAsPostGISgeom (\n\t\t\t\t\t\t\t\t(struct blobOutput){(const char *)p_blob, value_byte_size_blob_or_utf8},\n\t\t\t\t\t\t\t\tatt\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t/* !!! use valstr later! Hex Input */\n#else\n\t\t\t\t\t\t\tOid\t\t\tatttypid = att->atttypid;\n\t\t\t\t\t\t\tint32\t\tatttypmod = att->atttypmod;\n\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\t * If a domain has been declared as bytea, it can support PostGIS data type\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tatttypid = getBaseTypeAndTypmod(atttypid, &atttypmod);\n\n\t\t\t\t\t\t\tif (atttypid == BYTEAOID)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue_datum = (Datum) palloc0(value_byte_size_blob_or_utf8 + VARHDRSZ);\n\t\t\t\t\t\t\t\tmemcpy(VARDATA(value_datum), sqlite3_value_blob(val), value_byte_size_blob_or_utf8);\n\t\t\t\t\t\t\t\tSET_VARSIZE(value_datum, value_byte_size_blob_or_utf8 + VARHDRSZ);\n\t\t\t\t\t\t\t\treturn (struct NullableDatum) {PointerGetDatum((const void *)value_datum), false};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\t\t\terrmsg(\"This PostGIS data type is supported by SpatiaLite, but FDW compiled without GIS data support\"),\n\t\t\t\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\" in column \\\"%.*s\\\"\", pg_dataTypeName, (int)sizeof(pgColND.data), pgColND.data)));\n#endif\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase SQLITE3_TEXT:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t/* WKT data transport is not implemented */\n\t\t\t\t\t\t\tsqlite_value_to_pg_error();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* common, not PostGIS case */\n\t\t\t\t\tvalstr = sqlite_text_value_to_pg_db_encoding(val);\n\t\t\t\t}\n\t\t\t}\n\t\tbreak;\n\t}\n\t/* convert string value to appropriate type value */\n\tvalue_datum = InputFunctionCall(&attinmeta->attinfuncs[attnum],\n\t\t\t\t\t\t\t\t\tvalstr,\n\t\t\t\t\t\t\t\t\tattinmeta->attioparams[attnum],\n\t\t\t\t\t\t\t\t\tattinmeta->atttypmods[attnum]);\n\treturn (struct NullableDatum){value_datum, false};\n}\n\n/*\n * sqlite_datum_to_blob\n *\t\tCommon part of extracting and preparing PostgreSQL bytea data\n *\t\tfor SQLite binding as blob\n */\nblobOutput\nsqlite_datum_to_blob (Datum value)\n{\n\tint\t\t\tlen;\n\tchar\t   *dat = NULL;\n\tchar\t   *result = DatumGetPointer(value);\n\n\tif (VARATT_IS_1B(result))\n\t{\n\t\tlen = VARSIZE_1B(result) - VARHDRSZ_SHORT;\n\t\tdat = VARDATA_1B(result);\n\t}\n\telse\n\t{\n\t\tlen = VARSIZE_4B(result) - VARHDRSZ;\n\t\tdat = VARDATA_4B(result);\n\t}\n\treturn (struct blobOutput){dat, len};\n}\n\n/*\n * get_column_option_string\n *\t\tBy Oid of relation and varattno returns value of requested option\n *\t\tof foreign table\n */\nstatic char *\nget_column_option_string(Oid relid, int varattno, char *optionname)\n{\n\tchar\t   *coloptionvalue = NULL;\n\tList\t   *options;\n\tListCell   *lc;\n\n\toptions = GetForeignColumnOptions(relid, varattno);\n\tforeach(lc, options)\n\t{\n\t\tDefElem\t*def = (DefElem *) lfirst(lc);\n\t\tif (strcmp(def->defname, optionname) == 0)\n\t\t{\n\t\t\tcoloptionvalue = defGetString(def);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn coloptionvalue;\n}\n\n/*\n * bind_sql_var\n *\t\tBind the values provided as DatumBind the values and nulls\n *\t\tto modify the target table (INSERT/UPDATE)\n */\nvoid\nsqlite_bind_sql_var(Form_pg_attribute att, int attnum, Datum value, sqlite3_stmt * stmt, bool *isnull, Oid relid)\n{\n\tint\t\t\tret = SQLITE_OK;\n\tOid\t\t\ttype = att->atttypid;\n\tint32\t\tpgtypmod = att->atttypmod;\n\tattnum++;\n\telog(DEBUG2, \"sqlite_fdw : %s %d type=%u relid=%u typmod=%d \", __func__, attnum, type, relid, pgtypmod);\n\n\tif (*isnull)\n\t{\n\t\tret = sqlite3_bind_null(stmt, attnum);\n\t\tif (ret != SQLITE_OK)\n\t\t\telog(ERROR, \"sqlite3_bind_null failed with rc=%d\", ret);\n\t\treturn;\n\t}\n\n\tswitch (type)\n\t{\n\t\t/* popular first */\n\t\tcase TEXTOID:\n\t\tcase VARCHAROID:\n\t\tcase JSONOID:\n\t\tcase TIMESTAMPTZOID:\n\t\tcase DATEOID:\n\t\tcase NAMEOID:\n\t\tcase TIMEOID:\n\t\tcase TIMESTAMPOID:\n\t\tcase BPCHAROID:\n\t\t\t{\n\t\t\t\t/* Bind as text because SQLite does not have these types */\n\t\t\t\tchar\t   *outputString = NULL;\n\t\t\t\tOid\t\t\toutputFunctionId = InvalidOid;\n\t\t\t\tbool\t\ttypeVarLength = false;\n\t\t\t\tint\t\t\tpg_database_encoding = GetDatabaseEncoding(); /* very fast call, see PostgreSQL mbutils.c */\n\t\t\t\tchar\t   *utf8_text_value = NULL;\n\n\t\t\t\tgetTypeOutputInfo(type, &outputFunctionId, &typeVarLength);\n\t\t\t\toutputString = OidOutputFunctionCall(outputFunctionId, value);\n\t\t\t\tif (pg_database_encoding == PG_UTF8)\n\t\t\t\t\tutf8_text_value = outputString;\n\t\t\t\telse\n\t\t\t\t\tutf8_text_value = (char *) pg_do_encoding_conversion((unsigned char *) outputString, strlen(outputString), pg_database_encoding, PG_UTF8);\n\t\t\t\tret = sqlite3_bind_text(stmt, attnum, utf8_text_value, -1, SQLITE_TRANSIENT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT2OID:\n\t\t\t{\n\t\t\t\tint16\t\tdat = DatumGetInt16(value);\n\n\t\t\t\tret = sqlite3_bind_int(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT4OID:\n\t\t\t{\n\t\t\t\tint32\t\tdat = DatumGetInt32(value);\n\n\t\t\t\tret = sqlite3_bind_int(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase INT8OID:\n\t\t\t{\n\t\t\t\tint64\t\tdat = DatumGetInt64(value);\n\n\t\t\t\tret = sqlite3_bind_int64(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\tcase FLOAT4OID:\n\n\t\t\t{\n\t\t\t\tfloat4\t\tdat = DatumGetFloat4(value);\n\n\t\t\t\tret = sqlite3_bind_double(stmt, attnum, (double) dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase FLOAT8OID:\n\t\t\t{\n\t\t\t\tfloat8\t\tdat = DatumGetFloat8(value);\n\n\t\t\t\tret = sqlite3_bind_double(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\tcase NUMERICOID:\n\t\t\t{\n\t\t\t\tDatum\t\tvalue_datum = DirectFunctionCall1(numeric_float8, value);\n\t\t\t\tfloat8\t\tdat = DatumGetFloat8(value_datum);\n\n\t\t\t\tret = sqlite3_bind_double(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase BOOLOID:\n\t\t\t{\n\t\t\t\tint32\t\tdat = DatumGetInt32(value);\n\n\t\t\t\tret = sqlite3_bind_int(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase BYTEAOID:\n\t\t\t{\n\t\t\t\tblobOutput b = sqlite_datum_to_blob(value);\n\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, b.dat, b.len, SQLITE_TRANSIENT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase UUIDOID:\n\t\t\t{\n\t\t\t\tint\tsqlite_aff = SQLITE_NULL;\n\n\t\t\t\tif (relid)\n\t\t\t\t{\n\t\t\t\t\tchar * optv = get_column_option_string (relid, attnum, \"column_type\");\n\n\t\t\t\t\telog(DEBUG3, \"sqlite_fdw : col type %s \", optv);\n\t\t\t\t\tsqlite_aff = sqlite_affinity_code(optv);\n\t\t\t\t}\n\n\t\t\t\tif (sqlite_aff == SQLITE_BLOB)\n\t\t\t\t{\n\t\t\t\t\tunsigned char *dat = palloc0(UUID_LEN);\n\t\t\t\t\tpg_uuid_t* pg_uuid = DatumGetUUIDP(value);\n\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind uuid as blob\");\n\t\t\t\t\tmemcpy(dat, pg_uuid->data, UUID_LEN);\n\t\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, dat, UUID_LEN, SQLITE_TRANSIENT);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* uuid as text */\n\t\t\t\t\tchar\t   *outputString = NULL;\n\t\t\t\t\tOid\t\t\toutputFunctionId = InvalidOid;\n\t\t\t\t\tbool\t\ttypeVarLength = false;\n\n\t\t\t\t\tgetTypeOutputInfo(type, &outputFunctionId, &typeVarLength);\n\t\t\t\t\toutputString = OidOutputFunctionCall(outputFunctionId, value);\n\t\t\t\t\t/* uuid text belongs to ASCII subset, no need to translate encoding */\n\t\t\t\t\tret = sqlite3_bind_text(stmt, attnum, outputString, -1, SQLITE_TRANSIENT);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase MACADDROID:\n\t\tcase MACADDR8OID:\n\t\t\t{\n\t\t\t\tint\tsqlite_aff = SQLITE_INTEGER; /* default mac addr affinity */\n\n\t\t\t\tif (relid)\n\t\t\t\t{\n\t\t\t\t\tchar * optv = get_column_option_string (relid, attnum, \"column_type\");\n\n\t\t\t\t\telog(DEBUG3, \"sqlite_fdw : column_type affinity %s \", optv);\n\t\t\t\t\tsqlite_aff = sqlite_affinity_code(optv);\n\t\t\t\t}\n\n\t\t\t\tif (sqlite_aff == SQLITE3_TEXT)\n\t\t\t\t{\n\t\t\t\t\tchar\t   *outputString = NULL;\n\t\t\t\t\tOid\t\t\toutputFunctionId = InvalidOid;\n\t\t\t\t\tbool\t\ttypeVarLength = false;\n\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind mac as text\");\n\t\t\t\t\tgetTypeOutputInfo(type, &outputFunctionId, &typeVarLength);\n\t\t\t\t\toutputString = OidOutputFunctionCall(outputFunctionId, value);\n\t\t\t\t\t/* MAC text belongs to ASCII subset, no need to translate encoding */\n\t\t\t\t\tret = sqlite3_bind_text(stmt, attnum, outputString, -1, SQLITE_TRANSIENT);\n\t\t\t\t}\n\t\t\t\telse if (sqlite_aff == SQLITE_BLOB)\n\t\t\t\t{\n\t\t\t\t\tif (type == MACADDROID)\n\t\t\t\t\t{\n\t\t\t\t\t\tunsigned char  *mca = palloc0(MACADDR_LEN);\n\t\t\t\t\t\tmacaddr\t\t   *m = DatumGetMacaddrP(value);\n\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind mac as blob\");\n\t\t\t\t\t\tmca[0] = m->a;\n\t\t\t\t\t\tmca[1] = m->b;\n\t\t\t\t\t\tmca[2] = m->c;\n\t\t\t\t\t\tmca[3] = m->d;\n\t\t\t\t\t\tmca[4] = m->e;\n\t\t\t\t\t\tmca[5] = m->f;\n\t\t\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, mca, MACADDR_LEN, SQLITE_TRANSIENT);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tunsigned char  *mca = palloc0(MACADDR8_LEN);\n\t\t\t\t\t\tmacaddr8\t   *m = DatumGetMacaddr8P(value);\n\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind mac8 as blob\");\n\t\t\t\t\t\tmca[0] = m->a;\n\t\t\t\t\t\tmca[1] = m->b;\n\t\t\t\t\t\tmca[2] = m->c;\n\t\t\t\t\t\tmca[3] = m->d;\n\t\t\t\t\t\tmca[4] = m->e;\n\t\t\t\t\t\tmca[5] = m->f;\n\t\t\t\t\t\tmca[6] = m->g;\n\t\t\t\t\t\tmca[7] = m->h;\n\t\t\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, mca, MACADDR8_LEN, SQLITE_TRANSIENT);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse /* default, INTEGER */\n\t\t\t\t{\n\t\t\t\t\tsqlite3_uint64 dat = 0;\n\n\t\t\t\t\tif (type == MACADDROID)\n\t\t\t\t\t{\n\t\t\t\t\t\tmacaddr *m = DatumGetMacaddrP(value);\n\n\t\t\t\t\t\tdat = ((sqlite3_int64)(m->a) << (CHAR_BIT*5))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->b) << (CHAR_BIT*4))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->c) << (CHAR_BIT*3))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->d) << (CHAR_BIT*2))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->e) << (CHAR_BIT*1))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->f) << (CHAR_BIT*0));\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind mac6 as integer %lld\", dat);\n\t\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tmacaddr8 *m = DatumGetMacaddr8P(value);\n\n\t\t\t\t\t\tdat = ((sqlite3_int64)(m->a) << (CHAR_BIT*7))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->b) << (CHAR_BIT*6))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->c) << (CHAR_BIT*5))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->d) << (CHAR_BIT*4))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->e) << (CHAR_BIT*3))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->f) << (CHAR_BIT*2))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->g) << (CHAR_BIT*1))\n\t\t\t\t\t\t\t+ ((sqlite3_int64)(m->h) << (CHAR_BIT*0));\n\t\t\t\t\t\telog(DEBUG2, \"sqlite_fdw : bind mac8 as integer %lld\", dat);\n\t\t\t\t\t}\n\t\t\t\t\tret = sqlite3_bind_int64(stmt, attnum, dat);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase VARBITOID:\n\t\tcase BITOID:\n\t\t\t{\n\t\t\t\tsqlite3_int64 dat;\n\t\t\t\tchar\t   *outputString = NULL;\n\t\t\t\tOid\t\t\toutputFunctionId = InvalidOid;\n\t\t\t\tbool\t\ttypeVarLength = false;\n\n\t\t\t\tgetTypeOutputInfo(type, &outputFunctionId, &typeVarLength);\n\t\t\t\toutputString = OidOutputFunctionCall(outputFunctionId, value);\n\t\t\t\telog(DEBUG4, \"sqlite_fdw : BIT bind  %s\", outputString);\n\t\t\t\tif (strlen(outputString) > SQLITE_FDW_BIT_DATATYPE_BUF_SIZE - 1 )\n\t\t\t\t{\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"SQLite FDW dosens't support very long bit/varbit data\"),\n\t\t\t\t\t\t\terrhint(\"bit length %ld, maximum %ld\", strlen(outputString), SQLITE_FDW_BIT_DATATYPE_BUF_SIZE - 1)));\n\t\t\t\t}\n\t\t\t\tdat = binstr2int64(outputString);\n\t\t\t\tret = sqlite3_bind_int64(stmt, attnum, dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase JSONBOID:\n\t\t\t{\n\t\t\t\t/* Bind as text because there are different JSONb presentation formats in PostgreSQL and SQLite */\n\t\t\t\tint\t\t\tpg_database_encoding = GetDatabaseEncoding(); /* very fast call, see PostgreSQL mbutils.c */\n\t\t\t\tchar\t   *utf8_text_value = NULL;\n\t\t\t\tDatum\t\td = DirectFunctionCall1(jsonb_out, JsonbPGetDatum((const Jsonb *) value));\n\t\t\t\tchar\t   *outputString = DatumGetCString(d);\n\t\t\t\tblobOutput\tjsonb;\n\n\t\t\t\tif (pg_database_encoding == PG_UTF8)\n\t\t\t\t\tutf8_text_value = outputString;\n\t\t\t\telse\n\t\t\t\t\tutf8_text_value = (char *)pg_do_encoding_conversion((unsigned char *) outputString, strlen(outputString), pg_database_encoding, PG_UTF8);\n\t\t\t\tjsonb = sqlite_make_JSONb(utf8_text_value);\n\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, jsonb.dat, jsonb.len, SQLITE_TRANSIENT);\n\t\t\t\tpfree((char *)jsonb.dat);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\t{\n\t\t\t\tNameData\tpgColND = att->attname;\n\t\t\t\tchar\t*pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(type, pgtypmod));\n\n\t\t\t\t/*\n\t\t\t\t * PostGIS data types can be supported only by name\n\t\t\t\t * This is very rare and not fast algorythm branch\n\t\t\t\t */\n\t\t\t\tif (listed_datatype(pg_dataTypeName, postGisSQLiteCompatibleTypes))\n\t\t\t\t{\n#ifdef SQLITE_FDW_GIS_ENABLE\n\t\t\t\t\tblobOutput b = PostGISgeomAsSpatiaLite(value, att);\n\t\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, b.dat, b.len, SQLITE_TRANSIENT);\n#else\n\t\t\t\t\tOid\t\t\tatttypid = att->atttypid;\n\t\t\t\t\tint32\t\tatttypmod = att->atttypmod;\n\n\t\t\t\t\t/*\n\t\t\t\t\t * If a domain has been declared as bytea,\n\t\t\t\t\t * it can support PostGIS data type\n\t\t\t\t\t */\n\t\t\t\t\tatttypid = getBaseTypeAndTypmod(atttypid, &atttypmod);\n\n\t\t\t\t\tif (atttypid == BYTEAOID)\n\t\t\t\t\t{\n\t\t\t\t\t\tblobOutput b = sqlite_datum_to_blob(value);\n\t\t\t\t\t\tret = sqlite3_bind_blob(stmt, attnum, b.dat, b.len, SQLITE_TRANSIENT);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\t\terrmsg(\"This PostGIS data type is supported by SpatiaLite, but FDW compiled without GIS data support\"),\n\t\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\" in column \\\"%.*s\\\"\", pg_dataTypeName, (int)sizeof(pgColND.data), pgColND.data)));\n#endif\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (listed_datatype(pg_dataTypeName, postGisSpecificTypes))\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\terrmsg(\"This data type is PostGIS specific and have not any SpatiaLite value\"),\n\t\t\t\t\t\t\t\t\terrhint(\"Data type: \\\"%s\\\" in column \\\"%.*s\\\"\", pg_dataTypeName, (int)sizeof(pgColND.data), pgColND.data)));\n\t\t\t\telse\n\t\t\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\t\t\terrmsg(\"cannot convert constant value to SQLite value\"),\n\t\t\t\t\t\t\t\t\terrhint(\"Constant value data type: \\\"%s\\\" in column \\\"%.*s\\\"\", pg_dataTypeName, (int)sizeof(pgColND.data), pgColND.data)));\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\tif (ret != SQLITE_OK)\n\t{\n\t\tchar\t*pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(type, pgtypmod));\n\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\terrmsg(\"Can't convert constant value to SQLite: %s\",\n\t\t\t\t\t\t\t   sqlite3_errmsg(sqlite3_db_handle(stmt))),\n\t\t\t\t\t\terrhint(\"Constant value data type: %s\", pg_dataTypeName)));\n\t}\n}\n\n/*\n * sqlite_text_value_to_pg_db_encoding\n *\t\tConverts SQLite text to PostgreSQL text with database encoding\n */\nstatic char *\nsqlite_text_value_to_pg_db_encoding(sqlite3_value *val)\n{\n\tint pg_database_encoding = GetDatabaseEncoding(); /* very fast call, see PostgreSQL mbutils.c */\n\tchar *utf8_text_value;\n\t/* Text from this SQLite function is always UTF-8,\n\t * see  https://www.sqlite.org/c3ref/column_blob.html\n\t */\n\tutf8_text_value = (char *) sqlite3_value_text(val);\n\tif (pg_database_encoding == PG_UTF8)\n\t\treturn utf8_text_value;\n\telse\n\t{\n\t\t/* There is no UTF16 in PostgreSQL for fast sqlite3_value_text16, hence always convert */\n\t\tchar * res = (char *) pg_do_encoding_conversion((unsigned char *) utf8_text_value, strlen(utf8_text_value), PG_UTF8, pg_database_encoding);\n\t\treturn res;\n\t}\n}\n\n/*\n * int642binstr\n *\t\tConverts int64 from SQLite to PostgreSQL string from 0 and 1 only\n * \t\ts must be allocated with length not less than len + 1 bytes\n */\nstatic char *\nint642binstr(sqlite3_int64 num, char *s, size_t len)\n{\n\ts[--len] = '\\0';\n\tdo\n\t\ts[--len] = ((num & 1) ? '1' : '0');\n\twhile ((num >>= 1) != 0);\n\treturn s + len;\n}\n\n/*\n * binstr2int64\n *\t\tConverts PostgreSQL string from 0 and 1 only to int64 for SQLite\n */\nsqlite3_int64\nbinstr2int64(const char *s)\n{\n\tsqlite3_int64 rc = 0;\n\tchar *bs = (char *)s;\n\n\tfor (; '\\0' != *bs; bs++)\n\t{\n\t\tif ('1' == *bs)\n\t\t{\n\t\t\trc = (rc * 2) + 1;\n\t\t}\n\t\telse if ('0' == *bs)\n\t\t{\n\t\t\trc *= 2;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tereport(ERROR, (errcode(ERRCODE_FDW_INVALID_DATA_TYPE),\n\t\t\t\t\t\t\terrmsg(\"Not 0 or 1 in bit string\"),\n\t\t\t\t\t\t\terrhint(\"value: %s\", s)));\n\t\t}\n\t}\n\treturn rc;\n}\n\n/*\n * listed_datatype\n *\t\tChecks if a name of data type belongs to array of special data type names\n *\t\tused for PostGIS data type which have not stable Oid\n */\nbool\nlisted_datatype (const char * tn, const char ** arr)\n{\n\tint i = 0;\n\tchar * n = strchr(tn, '.');\n\n\tif ( n != NULL )\n\t\tn = n + sizeof(char);\n\telse\n\t\tn = (char *)tn;\n\twhile(arr[i])\n\t{\n\t\tif(!strcmp(arr[i], n))\n\t\t{\n\t\t\telog(DEBUG4, \"sqlite_fdw : %s \\\"%s\\\" = \\\"%s\\\" \", __func__, tn, arr[i]);\n\t\t\treturn true;\n\t\t}\n\t\ti++;\n\t}\n\treturn false;\n}\n\n/*\n * listed_datatype_oid\n *\t\tChecks if Oid of data type is one of Oids of listed data types\n *\t\tlisted in given array.\n */\nbool\nlisted_datatype_oid(Oid atttypid, int32 atttypmod, const char** arr)\n{\n\tconst char *pg_dataTypeName = TypeNameToString(makeTypeNameFromOid(atttypid, atttypmod));\n\tbool\t\tlisted = listed_datatype(pg_dataTypeName, arr);\n\n\telog(DEBUG2, \"sqlite_fdw : %s : unusual data type %s, listed = %d\", __func__, pg_dataTypeName, listed);\n\treturn listed;\n}\n\nstatic inline blobOutput\nsqlite_make_JSONb (char* s)\n{\n\tint\t\t\tlen = 0;\n\tchar\t   *dat = NULL;\n\tsqlite3\t   *conn = NULL;\n\tconst char *err;\n\tsqlite3_stmt *res;\n\tchar\t   *query;\n\tint\t\t\trc = sqlite3_open_v2(\"\", &conn, SQLITE_OPEN_MEMORY|SQLITE_OPEN_READONLY, NULL);\n\n\tif (rc != SQLITE_OK) {\n\t\tsqlite3_close(conn);\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t errmsg(\"Failed to open in-memory SQLite for JSONB creating, result code %d\", rc)));\n\t}\n\n\tquery = psprintf(\"select jsonb('%s') j;\", s);\n\trc = sqlite3_prepare_v2(conn, query, -1, &res, 0);\n\n\tif (rc != SQLITE_OK) {\n\t\terr = sqlite3_errmsg(conn);\n\t\tsqlite3_close(conn);\n\t\tpfree(query);\n\t\tereport(ERROR,\n\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t errmsg(\"Failed to fetch JSONb, result code %d, error %s\", rc, err)));\n\t}\n\n\trc = sqlite3_step(res);\n\tif (rc == SQLITE_ROW) {\n\t\tsqlite3_value\t   *val = sqlite3_column_value(res, 0);\n\t\tint\t\t\t\t\tsqlite_value_affinity = sqlite3_value_type(val);\n\t\tconst char\t\t   *dat1 = sqlite3_value_blob(val);\n\n\t\tif(sqlite_value_affinity != SQLITE_BLOB)\n\t\t{\n\t\t\tsqlite3_finalize(res);\n\t\t\tpfree(query);\n\t\t\tsqlite3_close(conn);\n\t\t\tereport(ERROR,\n\t\t\t\t\t(errcode(ERRCODE_FDW_UNABLE_TO_ESTABLISH_CONNECTION),\n\t\t\t\t\t errmsg(\"Failed to fetch JSONb, not a BLOB result, affinity code %d, %s\", sqlite_value_affinity, query)));\n\t\t}\n\n\t\tlen = sqlite3_column_bytes(res, 0);\n\t\tdat = palloc(len + 1);\n\t\tmemcpy(dat, dat1, len);\n\t}\n\n\tsqlite3_finalize(res);\n\tpfree(query);\n\tsqlite3_close(conn);\n\treturn (struct blobOutput){dat, len};\n}\n\n"
  },
  {
    "path": "test.sh",
    "content": "#!/bin/bash\n\n# Usage:\n# ./test.sh                -- test without GIS support\n# ./test.sh ENABLE_GIS     -- test with GIS support\n\ntestdir='/tmp/sqlite_fdw_test';\nrm -rf \"$testdir\";\nmkdir \"$testdir\";\ncp -a sql/init_data/*.data \"$testdir\";\n\nif [ -z \"$SQLITE_FOR_TESTING_DIR\" ]; then\n  sqlite3=sqlite3;\nelse\n  sqlite3=\"$SQLITE_FOR_TESTING_DIR/bin/sqlite3\";\nfi\n\n\"$sqlite3\" \"$testdir/post.db\" < sql/init_data/init_post.sql;\n\"$sqlite3\" \"$testdir/core.db\" < sql/init_data/init_core.sql;\n\"$sqlite3\" \"$testdir/common.db\" < sql/init_data/init.sql;\n\"$sqlite3\" \"$testdir/selectfunc.db\" < sql/init_data/init_selectfunc.sql;\n\n# full test sequence,\n# you can put your own test sequence here by following example\n# undefined REGRESS environment variable will cause full test sequence from Makefile\n#export REGRESS=\"extra/sqlite_fdw_post extra/test2 test3 types/test4 .... \";\n\nmake clean $@;\nmake $@;\nmake check $@ | tee make_check.out;\n"
  }
]